[
  {
    "path": ".gitignore",
    "content": "*.pyc\nvenv/\n.idea/\nbuild/\ndist/\n.vscode/\n*.egg-info/\n"
  },
  {
    "path": "Changelog",
    "content": "### Change log\n\n2026-05-07 Bumped to version v1.0.222\n- Updated apis for content_security/tls\n\n2026-04-23 Bumped to version v1.0.221\n- Updated apis for vod\n\n2026-04-16 Bumped to version v1.0.220\n- Updated apis for live/sms/tls\n\n2026-03-26 Bumped to version v1.0.219\n- Updated apis for tls/vod\n\n2026-03-19 Bumped to version v1.0.218\n- Updated apis for content_security\n\n2026-03-12 Bumped to version v1.0.217\n- Updated apis for tls/visual\n\n2026-02-05 Bumped to version v1.0.216\n- Updated apis for content_security\n\n2026-01-22 Bumped to version v1.0.215\n- Updated apis for viking_knowledgebase\n\n2026-01-15 Bumped to version v1.0.214\n- Updated apis for tls/viking_db/viking_knowledgebase\n\n2026-01-08 Bumped to version v1.0.213\n- Updated apis for tls\n\n2025-12-25 Bumped to version v1.0.212\n- Updated apis for tls\n\n2025-12-23 Bumped to version v1.0.211\n- Updated apis for viking_db\n\n2025-12-22 Bumped to version v1.0.210\n- Updated apis for tls\n\n2025-12-11 Bumped to version v1.0.209\n- Updated apis for vms/vod\n\n2025-12-04 Bumped to version v1.0.208\n- Updated apis for tls\n\n2025-11-20 Bumped to version v1.0.207\n- Updated apis for vod\n\n2025-11-06 Bumped to version v1.0.206\n- Updated apis for tls/vms/vod\n\n2025-10-30 Bumped to version v1.0.205\n- Updated apis for tls\n\n2025-10-23 Bumped to version v1.0.204\n- Updated apis for cdn/tls/vod\n\n2025-10-16 Bumped to version v1.0.203\n- Updated apis for imagex/vod\n\n2025-10-13 Bumped to version v1.0.202\n- Updated apis for base/content_security/tls\n\n2025-09-25 Bumped to version v1.0.201\n- Updated apis for viking_knowledgebase/vod\n\n2025-09-18 Bumped to version v1.0.200\n- Updated apis for viking_knowledgebase/vod\n\n2025-09-11 Bumped to version v1.0.199\n- Updated apis for tls\n\n2025-08-28 Bumped to version v1.0.198\n- Updated apis for vod\n\n2025-08-21 Bumped to version v1.0.197\n- Updated apis for imagex\n\n2025-08-14 Bumped to version v1.0.196\n- Updated apis for business_security/content_security/dcdn\n\n2025-08-07 Bumped to version v1.0.195\n- Updated apis for imagex\n\n2025-07-17 Bumped to version v1.0.194\n- Updated apis for tls\n\n2025-07-10 Bumped to version v1.0.193\n- Updated apis for imagex/viking_db\n\n2025-07-03 Bumped to version v1.0.192\n- Updated apis for imagex\n\n2025-06-26 Bumped to version v1.0.191\n- Updated apis for const/example/live/sms\n\n2025-06-19 Bumped to version v1.0.190\n- Updated apis for vod\n\n2025-06-17 Bumped to version v1.0.189\n- Updated sdk setup.py\n\n2025-06-05 Bumped to version v1.0.188\n- Updated apis for vod\n\n2025-05-29 Bumped to version v1.0.187\n- Updated apis for imagex/viking_db/viking_knowledgebase\n\n2025-05-22 Bumped to version v1.0.186\n- Updated apis for imagex\n\n2025-05-15 Bumped to version v1.0.185\n- Updated apis for vod\n\n2025-05-08 Bumped to version v1.0.184\n- Updated apis for imagex\n\n2025-04-25 Bumped to version v1.0.183\n- Updated apis for live\n\n2025-04-24 Bumped to version v1.0.182\n- Updated apis for imagex/vod\n\n2025-04-17 Bumped to version v1.0.181\n- Updated apis for content_security/viking_db/vms/vod\n\n2025-04-10 Bumped to version v1.0.180\n- Updated apis for viking_db\n\n2025-04-01 Bumped to version v1.0.179\n- Updated apis for imagex\n\n2025-03-31 Bumped to version v1.0.178\n- Updated apis for imagex\n\n2025-03-27 Bumped to version v1.0.177\n- Updated apis for imagex/vod\n\n2025-03-20 Bumped to version v1.0.176\n- Updated apis for vod\n\n2025-03-13 Bumped to version v1.0.175\n- Updated apis for viking_knowledgebase\n\n2025-02-27 Bumped to version v1.0.174\n- Updated apis for example/imagex/tls/viking_db/vod\n\n2025-02-20 Bumped to version v1.0.173\n- Updated apis for viking_db\n\n2025-02-13 Bumped to version v1.0.172\n- Updated apis for imp/tls/viking_db\n\n2025-02-06 Bumped to version v1.0.171\n- Updated apis for viking_knowledgebase\n\n2025-01-23 Bumped to version v1.0.170\n- Updated apis for viking_db\n\n2025-01-16 Bumped to version v1.0.169\n- Updated apis for vod/tls\n\n2025-01-09 Bumped to version v1.0.168\n- Updated apis for viking_db\n\n2025-01-02 Bumped to version v1.0.167\n- Updated apis for vod/viking_db/viking_knowledgebase\n\n2024-12-26 Bumped to version v1.0.166\n- Updated apis for vod\n\n2024-12-16 Bumped to version v1.0.165\n- Updated apis for tls/live\n\n2024-12-05 Bumped to version v1.0.164\n- Updated apis for viking_knowledgebase/cdn/tls\n\n2024-11-28 Bumped to version v1.0.163\n- Updated apis for viking_db/visual/tls\n\n2024-11-21 Bumped to version v1.0.162\n- Updated apis for viking_db\n\n2024-11-14 Bumped to version v1.0.161\n- Updated apis for vod\n\n2024-11-07 Bumped to version v1.0.160\n- Updated apis for imagex/tls/viking_db\n\n2024-10-24 Bumped to version v1.0.159\n- Updated apis for viking_db\n\n2024-10-24 Bumped to version v1.0.158\n- Updated apis for vod/tls\n\n2024-10-17 Bumped to version v1.0.157\n- Updated apis for vod/viking_db/viking_knowledgebase\n\n2024-10-10 Bumped to version v1.0.156\n- Updated apis for imp/tls/vod\n\n2024-09-26 Bumped to version v1.0.155\n- Updated apis for imp/viking_knowledgebase/live\n\n2024-09-19 Bumped to version v1.0.154\n- Updated apis for viking_db/vod\n\n2024-09-12 Bumped to version v1.0.153\n- Updated apis for visual/viking_db/vod\n\n2024-09-05 Bumped to version v1.0.152\n- Updated apis for viking_knowledgebase/vod\n\n2024-08-29 Bumped to version v1.0.151\n- Updated apis for live/viking_knowledgebase/viking_db/vod\n\n2024-08-15 Bumped to version v1.0.150\n- Updated apis for visual/tls/dcdn\n\n2024-08-08 Bumped to version v1.0.149\n- Updated apis for viking_knowledgebase/cdn/vod/imagex\n\n2024-07-25 Bumped to version v1.0.148\n- Updated apis for visual/viking_knowledgebase\n\n2024-07-18 Bumped to version v1.0.147\n- Updated apis for cdn/vod\n\n2024-07-04 Bumped to version v1.0.146\n- Updated apis for vod/viking_knowledgebase\n\n2024-06-27 Bumped to version v1.0.145\n- Updated apis for live/viking_knowledgebase\n\n2024-06-24 Bumped to version v1.0.144\n- Updated apis for live/sms/business_security\n\n2024-06-13 Bumped to version v1.0.143\n- Updated apis for viking_knowledgebase/dcdn/imp\n\n2024-06-06 Bumped to version v1.0.142\n- Updated apis for viking_knowledgebase/vod\n\n2024-05-23 Bumped to version v1.0.141\n- Updated apis for viking_knowledgebase/vod\n\n2024-05-16 Bumped to version v1.0.140\n- Updated apis for viking_knowledgebase/tls\n\n2024-05-09 Bumped to version v1.0.139\n- Updated apis for vod/sms/viking_db\n- Add viking_knowledgebase sdk\n\n2024-04-25 Bumped to version v1.0.138\n- Updated apis for maas\n\n2024-04-18 Bumped to version v1.0.137\n- Updated apis for vod/viking_db/maas\n\n2024-04-11 Bumped to version v1.0.136\n- Updated apis for imagex/viking_db/maas/live\n\n2024-04-01 Bumped to version v1.0.135\n- Updated apis for vod/maas\n\n2024-03-21 Bumped to version v1.0.134\n- Updated apis for dcdn/dts/imagex/live/sms/visual\n\n2024-03-14 Bumped to version v1.0.133\n- Updated apis for viking_db/imagex/visual/maas/tls\n\n2024-03-13 Bumped to version v1.0.132\n- Updated apis for maas\n\n2024-03-07 Bumped to version v1.0.131\n- Updated apis for billing/maas/veen/viking_db\n\n2024-03-06 Bumped to version v1.0.130\n- Updated apis for vod\n\n2024-02-29 Bumped to version v1.0.129\n- Updated apis for maas/viking_db\n\n2024-02-22 Bumped to version v1.0.128\n- Updated apis for live/dcdn/maas/tls\n\n2024-02-05 Bumped to version v1.0.127\n- Updated apis for visual/imagex\n\n2024-02-01 Bumped to version v1.0.126\n- Updated apis for vod/imagex/dcdn/live/visual\n\n2024-01-29 Bumped to version v1.0.125\n- Updated apis for viking_db/imagex\n\n2024-01-18 Bumped to version v1.0.124\n- Updated apis for dts/viking_db\n\n2024-01-11 Bumped to version v1.0.123\n- Updated apis for viking_db/vod\n\n2024-01-04 Bumped to version v1.0.122\n- Updated apis for bioos/tls\n\n2023-12-28 Bumped to version v1.0.121\n- Updated apis for viking_db/maas/sms\n\n2023-12-21 Bumped to version v1.0.120\n- Updated apis for viking_db/maas\n\n2023-12-14 Bumped to version v1.0.119\n- Updated apis for viking_db/maas/live/sms\n\n2023-12-07 Bumped to version v1.0.118\n- Updated apis for viking_db\n\n2023-11-30 Bumped to version v1.0.117\n- Updated apis for viking_db/visual/tls\n\n2023-11-22 Bumped to version v1.0.116\n- Updated apis for live\n\n2023-11-16 Bumped to version v1.0.115\n- Updated apis for vod/verender/visual\n- Added service viking_db\n\n2023-11-09 Bumped to version v1.0.114\n- Updated apis for imagex\n\n2023-11-02 Bumped to version v1.0.113\n- Updated apis for maas\n\n2023-10-26 Bumped to version v1.0.112\n- Updated apis for tls/maas/live\n\n2023-10-24 Bumped to version v1.0.111\n- Updated apis for vod\n\n2023-10-19 Bumped to version v1.0.110\n- Updated apis for bioos/verender/live/vod/maas/tls\n\n2023-10-12 Bumped to version v1.0.109\n- Updated apis for business_security/content_security/maas/vod\n\n2023-09-28 Bumped to version v1.0.108\n- Updated apis for tls\n\n2023-09-27 Bumped to version v1.0.107\n- Updated apis for tls\n\n2023-09-14 Bumped to version v1.0.106\n- Updated apis for veen\n\n2023-08-31 Bumped to version v1.0.105\n- Updated apis for maas/vod/verender\n\n2023-08-24 Bumped to version v1.0.104\n- Updated apis for maas\n\n2023-08-17 Bumped to version v1.0.103\n- Updated apis for maas\n\n2023-08-10 Bumped to version v1.0.102\n- Updated apis for imagex/maas/vod/security\n\n2023-08-03 Bumped to version v1.0.101\n- Updated apis for verender/vod\n\n2023-07-27 Bumped to version v1.0.100\n- Updated apis for vod/billing/maas\n\n2023-07-21 Bumped to version v1.0.99\n- Updated apis for vod/maas/visual\n\n2023-07-13 Bumped to version v1.0.98\n- Updated apis for bioos/maas/visual\n- Added service dts\n\n2023-07-06 Bumped to version v1.0.97\n- Updated apis for maas\n\n2023-06-29 Bumped to version v1.0.96\n- Updated apis for cdn/vod\n- Added service maas\n\n2023-06-20 Bumped to version v1.0.95\n- Updated apis for security\n\n2023-06-16 Bumped to version v1.0.94\n- Updated apis for imagex/vod/security/emr\n\n2023-06-01 Bumped to version v1.0.93\n- Updated apis for imagex/tls\n\n2023-05-25 Bumped to version v1.0.92\n- Updated apis for vms\n\n2023-05-18 Bumped to version v1.0.91\n- Updated apis for sms/vod/security\n- Urgent notice and update: Due to privacy data security requirements, the Volc SMS SDK will no longer support SG overseas access points. If you used volc-sdk to implement SG overseas endpoints before, please modify your code to avoid future build failures. If you require overseas access to SMS, please use BytePlus services.\n\n2023-05-17 Bumped to version v1.0.90\n- Removed special logic from setup.py\n\n2023-05-11 Bumped to version v1.0.89\n- Updated apis for imagex\n- Removed lz4a from setup.py\n\n2023-05-05 Bumped to version v1.0.88\n- Updated apis for vod/imagex\n\n2023-04-28 Bumped to version v1.0.87\n- Updated apis for tls/imagex/bioos\n\n2023-04-20 Bumped to version v1.0.86\n- Added service veen\n- Updated apis for tls\n\n2023-04-13 Bumped to version v1.0.85\n- Updated apis for cdn\n\n2023-04-06 Bumped to version v1.0.84\n- Updated apis for bioos/vod/iamgx/tls\n\n2023-03-30 Bumped to version v1.0.83\n- removed lz4a from requirements\n\n2023-03-30 Bumped to version v1.0.82\n- Updated apis for vod/imagex/sms\n\n2023-03-23 Bumped to version v1.0.81\n- Fixed bug for vod\n\n2023-03-17 Bumped to version v1.0.80\n- Fixed bug for live\n\n2023-03-16 Bumped to version v1.0.79\n- Updated apis for live/imagex\n\n2023-03-09 Bumped to version v1.0.78\n- Updated apis for vod\n\n2023-03-02 Bumped to version v1.0.77\n- Updated apis for visual/imagex/sms/live\n\n2023-02-16 Bumped to version v1.0.76\n- Updated apis for vod/imagex/sms\n\n2023-02-16 Bumped to version v1.0.75\n- Updated apis for bioos/live\n\n2023-02-09 Bumped to version v1.0.74\n- Updated apis for visual/security\n\n2023-02-02 Bumped to version v1.0.73\n- Updated apis for sms/vms/security\n\n2023-01-19 Bumped to version v1.0.72\n- Updated apis for live\n- Added bio service\n\n2023-01-13 Bumped to version v1.0.71\n- Updated apis for secetnumber/vms/vod\n\n2023-01-05 Bumped to version v1.0.70\n- Updated apis for vod/imagex/security\n\n2022-12-29 Bumped to version v1.0.69\n- Updated apis for vod/visual/dcdn\n\n2022-12-22 Bumped to version v1.0.68\n- Updated apis for imagex\n\n2022-12-15 Bumped to version v1.0.67\n- Updated apis for iam/vod/cdn\n\n2022-12-08 Bumped to version v1.0.66\n- Updated apis for sms\n- Updated config for rds/imp\n\n2022-12-05 Bumped to version v1.0.65\n- Updated apis for imagex\n\n2022-11-24 Bumped to version v1.0.64\n- Updated apis for sms/cdn\n\n2022-11-18 Bumped to version v1.0.63\n- Added sts credential support\n- Updated apis for visual\n- Fixed dependency for windows\n\n2022-11-10 Bumped to version v1.0.62\n- Added live service\n- Updated apis for security\n\n2022-10-27 Bumped to version v1.0.61\n- Added emr service\n- Updated example for rtc\n- Updated apis for vod\n\n2022-10-13 Bumped to version v1.0.60\n- Updated apis for vod\n\n2022-09-22 Bumped to version v1.0.59\n- Updated setup\n\n2022-09-15 Bumped to version v1.0.58\n- Added tls service\n- Updated apis for vod\n\n2022-09-09 Bumped to version v1.0.57\n- Added apis for billing\n\n2022-09-01 Bumped to version v1.0.56\n- Added apis for visual\n\n2022-08-25 Bumped to version v1.0.55\n- Added apis for live\n\n2022-08-18 Bumped to version v1.0.54\n- Added apis for cdn\n\n2022-08-11 Bumped to version v1.0.53\n- Updated apis for vod\n\n2022-08-05 Bumped to version v1.0.52\n- Removed pycrypto dependency\n\n2022-08-04 Bumped to version v1.0.51\n- Added apis for sts\\cdn\n\n2022-07-28 Bumped to version v1.0.50\n- Upgraded apis for vod\n\n2022-07-07 Bumped to version v1.0.49\n- Added apis for live\\rtc\n\n2022-06-30 Bumped to version v1.0.48\n- Upgraded example for rtc\n- Upgraded service verender\n\n2022-06-23 Bumped to version v1.0.47\n- Added apis for imagex\\vod\n\n2022-06-17 Bumped to version v1.0.46\n- Added apis for imagex\\vod\n\n2022-06-09 Bumped to version v1.0.45\n- Fixed apis for cdn\n- Added api for security\n\n2022-05-20 Bumped to version v1.0.44\n- Added verender service\n\n2022-05-12 Bumped to version v1.0.43\n- Added apis for Vod\\security\n\n2022-04-28 Bumped to version v1.0.42\n- Added apis for live\n\n2022-04-22 Bumped to version v1.0.41\n- Added service live\n\n2022-04-14 Bumped to version v1.0.40\n- Refactored apis for cr\n- Added apis for vod\\cdn\\visual\n\n2022-03-31 Bumped to version v1.0.39\n- Added notify client\n- Added api for cr\n- Upgraded api for vod\n\n2022-03-18 Bumped to version v1.0.38\n- Added some apis of space\\callback\\cdn for vod\n\n2022-03-08 Bumped to version v1.0.37\n- fixed configparser import\n\n2022-03-03 Bumped to version v1.0.36\n- 新增视觉-ocr能力为印章识别、pdf文字识别、高速公路过路费票据识别、商标证识别、软件著作权证书识别、化妆品生产许可证识别，已测试完成\n- Add Video-Classification for VOD\n- Fix BaseService for Python2.7\n- Implement related example for cdn apis\n- Add new cdn apis\n\n\n2022-02-24 Bumped to version v1.0.35\n- Added cr and cp client\n- Fixed mobile status v2\n\n2022-02-10 Bumped to version v1.0.34\n- Added 号码核验二期需求\n- Added content security services\n- Supported ini config\n\n2022-01-21 Bumped to version v1.0.33\n- Added vod start workflow\n- Added 闲时转码\n\n\n2022-01-20 Bumped to version v1.0.32\n- Visual add new api \n\n2022-01-14 Bumped to version v1.0.31\n- Fixed for python2.7\n\n\n2022-01-13 Bumped to version v1.0.30\n- Add sdk for 8 apis\n\n2022-01-04 Bumped to version v1.0.29\n- Vod python2.7 support\n\n2021-12-30 Bumped to version v1.0.28\n- Refactored signing method\n\n2021-12-16 Bumped to version v1.0.27\n- element_verify\n- Dev rds postgresql\n- Implemented CDN apis\n\n2021-10-29 Bumped to version v1.0.26\n- added new service mobile status \n- added account risk\n\n2021-10-27 Bumped to version v1.0.25\n- Vod修正大文件上传配置\n- Vod添加HDR支持\n\n2021-09-29 Bumped to version v1.0.24\n- Fixed large file upload\n\n2021-09-16 Bumped to version v1.0.23\n- Add rtc sdk\n- Add private drm for vod\n\n2021-08-24 Bumped to version v1.0.22\n- ocr sdk\n- removed not used example files\n\n2021-08-20 Bumped to version v1.0.21\nlivesaas: add async sdk\n\n2021-08-12 Bumped to version v1.0.20\n- added more livesaas api\n    - 新增3个直播间管理类接口\n    - 新增8个直播控制类接口\n    - 新增3个回放管理类接口\n    - 新增2个评论类接口\n    - 新增1个客户端SDK类接口\n\n2021-08-05 Bumped to version v1.0.19\n- Added sms\n- Added ocr\n- Added nlp\n\n2021-07-14 Bumped to version v1.0.18\n- Fixed cr32\n\n2021-07-14 Bumped to version v1.0.17\n- Revert fixed base json for dict type\n\n2021-07-08 Bumped to version v1.0.16\n- Fixed base json for dict type\n\n2021-06-03 Bumped to version v1.0.15\n- Hotfix for vod service \n\n2021-06-02 Bumped to version v1.0.14\n- Add get media list\n- Support material upload\n\n2021-05-24 Bumped to version v1.0.13\n- Add essay_auto_grade api\n\n2021-05-19 Bumped to version v1.0.12\n- Add hls drm utils for vod\n- Add a new product 'game_protect' api to get risk result on gaming scenes.\n- Add retry after http error\n- Support upload material\n\n2021-04-20 Bumped to version v1.0.11\n- Added store keys res.\n- Added pcdn and barrageMask into sdk.\n\n2021-04-08 Bumped to version v1.0.10\n- Added nlp sdk.\n\n2021-04-08 Bumped to version v1.0.9\n- Added more sms support.\n\n2021-03-24 Bumped to version v1.0.8\n- Added async and risk result.\n- Added more abblocker support.\n- Added media delete api.\n\n2021-02-04 Bumped to version v1.0.7\n- Add cloud-edit sdk.\n\n2021-01-29 Bumped to version v1.0.6\n- Fix vod init bug.\n\n2021-01-28 Bumped to version v1.0.5\n- Added sts2_ak support\n- Added common imagex api\n- Added more vod api\n\n2021-01-20 Bumped to version v1.0.4\n- Add new visual apis.\n- Add adblock sdk.\n\n2020-12-30 Bumped to version v1.0.3\n- ImageX:add delete api.\n\n2020-12-22 Bumped to version v1.0.2\n- Add vod sdk.\n- Add ImageX sdk.\n\n2020-11-22 Bumped to version v1.0.1\n- Update README.md.\n- Update dependency library,Compatible with python2 and python3.\n\n2020-11-09 Bumped to version v1.0.0\n- Add iam sdk.\n- Add visual sdk.\n- Add visual demo.\n- Add version in header.\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"{}\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2023 Beijing Volcano Engine Technology Ltd.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "Open Source Notice.txt",
    "content": "NOTICES FOR THIRD PARTY SOFTWARE THAT MAY BE CONTAINED IN PORTIONS OF THIS PRODUCT.\n\nComponent:\n\napache/phoenix-queryserver : Apache License 2.0\nappengine-python-standard : MIT License\nBeautifulSoup4 : MIT License\nchardet : GNU Lesser General Public License v3.0 or later\ncharset-normalizer : MIT License\ndecorator : BSD 3-clause \"New\" or \"Revised\" License\ngoogle : BSD 3-clause \"New\" or \"Revised\" License\ngoogle-cloud-error_reporting : Apache License 2.0\ngoogle/bumble : Apache License 2.0\ngoogle/clusterfuzz : Apache License 2.0\nidna : BSD 3-clause \"New\" or \"Revised\" License\ninvl/retry : Apache License 2.0\nminio : Apache License 2.0\nmodels : Apache License 2.0\nnaked : MIT License\nPretix : Apache License 2.0\npy : MIT License\npycryptodome : (BSD 2-clause \"Simplified\" License AND Apache License 2.0 AND Public Domain)\npypi/setuptools : Python Software Foundation License 2.0\nPython six : MIT License\npython-certifi : Mozilla Public License 2.0\npython-lz4 : BSD 3-clause \"New\" or \"Revised\" License\npython-protobuf : BSD 3-clause \"New\" or \"Revised\" License\nPyTZ - Python Time Zone Library : MIT License\nPyYAML : MIT License\nreleng-tool : BSD 2-clause \"Simplified\" License\nrequests : Apache License 2.0\nshellescape : MIT License\nsoupsieve : MIT License\nstrongdm : Apache License 2.0\nttvcloud : MIT License\nurllib3 : MIT License\nvolcengine : MIT License\n\nLicense:\n\nApache License 2.0\n(apache/phoenix-queryserver, google-cloud-error_reporting, google/bumble, google/clusterfuzz, invl/retry, minio, models, Pretix, pycryptodome, requests, strongdm)\n\nApache License\nVersion 2.0, January 2004\n=========================\n\n\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and\ndistribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright\nowner that is granting the License.\n\n\"Legal Entity\" shall mean the union of the acting entity and all other entities\nthat control, are controlled by, or are under common control with that entity.\nFor the purposes of this definition, \"control\" means (i) the power, direct or\nindirect, to cause the direction or management of such entity, whether by\ncontract or otherwise, or (ii) ownership of fifty percent (50%) or more of the\noutstanding shares, or (iii) beneficial ownership of such entity.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions\ngranted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including\nbut not limited to software source code, documentation source, and configuration\nfiles.\n\n\"Object\" form shall mean any form resulting from mechanical transformation or\ntranslation of a Source form, including but not limited to compiled object code,\ngenerated documentation, and conversions to other media types.\n\n\"Work\" shall mean the work of authorship, whether in Source or Object form, made\navailable under the License, as indicated by a copyright notice that is included\nin or attached to the work (an example is provided in the Appendix below).\n\n\"Derivative Works\" shall mean any work, whether in Source or Object form, that is\nbased on (or derived from) the Work and for which the editorial revisions,\nannotations, elaborations, or other modifications represent, as a whole, an\noriginal work of authorship. For the purposes of this License, Derivative Works\nshall not include works that remain separable from, or merely link (or bind by\nname) to the interfaces of, the Work and Derivative Works thereof.\n\n\"Contribution\" shall mean any work of authorship, including the original version\nof the Work and any modifications or additions to that Work or Derivative Works\nthereof, that is intentionally submitted to Licensor for inclusion in the Work by\nthe copyright owner or by an individual or Legal Entity authorized to submit on\nbehalf of the copyright owner. For the purposes of this definition, \"submitted\"\nmeans any form of electronic, verbal, or written communication sent to the\nLicensor or its representatives, including but not limited to communication on\nelectronic mailing lists, source code control systems, and issue tracking systems\nthat are managed by, or on behalf of, the Licensor for the purpose of discussing\nand improving the Work, but excluding communication that is conspicuously marked\nor otherwise designated in writing by the copyright owner as \"Not a\nContribution.\"\n\n\"Contributor\" shall mean Licensor and any individual or Legal Entity on behalf of\nwhom a Contribution has been received by Licensor and subsequently incorporated\nwithin the Work.\n\n2. Grant of Copyright License. Subject to the terms and conditions of this\nLicense, each Contributor hereby grants to You a perpetual, worldwide,\nnon-exclusive, no-charge, royalty-free, irrevocable copyright license to\nreproduce, prepare Derivative Works of, publicly display, publicly perform,\nsublicense, and distribute the Work and such Derivative Works in Source or Object\nform.\n\n3. Grant of Patent License. Subject to the terms and conditions of this License,\neach Contributor hereby grants to You a perpetual, worldwide, non-exclusive,\nno-charge, royalty-free, irrevocable (except as stated in this section) patent\nlicense to make, have made, use, offer to sell, sell, import, and otherwise\ntransfer the Work, where such license applies only to those patent claims\nlicensable by such Contributor that are necessarily infringed by their\nContribution(s) alone or by combination of their Contribution(s) with the Work to\nwhich such Contribution(s) was submitted. If You institute patent litigation\nagainst any entity (including a cross-claim or counterclaim in a lawsuit)\nalleging that the Work or a Contribution incorporated within the Work constitutes\ndirect or contributory patent infringement, then any patent licenses granted to\nYou under this License for that Work shall terminate as of the date such\nlitigation is filed.\n\n4. Redistribution. You may reproduce and distribute copies of the Work or\nDerivative Works thereof in any medium, with or without modifications, and in\nSource or Object form, provided that You meet the following conditions:\n\n  a. You must give any other recipients of the Work or Derivative Works a copy of\n    this License; and\n\n  b. You must cause any modified files to carry prominent notices stating that\n    You changed the files; and\n\n  c. You must retain, in the Source form of any Derivative Works that You\n    distribute, all copyright, patent, trademark, and attribution notices from\n    the Source form of the Work, excluding those notices that do not pertain to\n    any part of the Derivative Works; and\n\n  d. If the Work includes a \"NOTICE\" text file as part of its distribution, then\n    any Derivative Works that You distribute must include a readable copy of the\n    attribution notices contained within such NOTICE file, excluding those\n    notices that do not pertain to any part of the Derivative Works, in at least\n    one of the following places: within a NOTICE text file distributed as part of\n    the Derivative Works; within the Source form or documentation, if provided\n    along with the Derivative Works; or, within a display generated by the\n    Derivative Works, if and wherever such third-party notices normally appear.\n    The contents of the NOTICE file are for informational purposes only and do\n    not modify the License. You may add Your own attribution notices within\n    Derivative Works that You distribute, alongside or as an addendum to the\n    NOTICE text from the Work, provided that such additional attribution notices\n    cannot be construed as modifying the License.\n\nYou may add Your own copyright statement to Your modifications and may provide\nadditional or different license terms and conditions for use, reproduction, or\ndistribution of Your modifications, or for any such Derivative Works as a whole,\nprovided Your use, reproduction, and distribution of the Work otherwise complies\nwith the conditions stated in this License.\n\n5. Submission of Contributions. Unless You explicitly state otherwise, any\nContribution intentionally submitted for inclusion in the Work by You to the\nLicensor shall be under the terms and conditions of this License, without any\nadditional terms or conditions. Notwithstanding the above, nothing herein shall\nsupersede or modify the terms of any separate license agreement you may have\nexecuted with Licensor regarding such Contributions.\n\n6. Trademarks. This License does not grant permission to use the trade names,\ntrademarks, service marks, or product names of the Licensor, except as required\nfor reasonable and customary use in describing the origin of the Work and\nreproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty. Unless required by applicable law or agreed to in\nwriting, Licensor provides the Work (and each Contributor provides its\nContributions) on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\neither express or implied, including, without limitation, any warranties or\nconditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\nPARTICULAR PURPOSE. You are solely responsible for determining the\nappropriateness of using or redistributing the Work and assume any risks\nassociated with Your exercise of permissions under this License.\n\n8. Limitation of Liability. In no event and under no legal theory, whether in\ntort (including negligence), contract, or otherwise, unless required by\napplicable law (such as deliberate and grossly negligent acts) or agreed to in\nwriting, shall any Contributor be liable to You for damages, including any\ndirect, indirect, special, incidental, or consequential damages of any character\narising as a result of this License or out of the use or inability to use the\nWork (including but not limited to damages for loss of goodwill, work stoppage,\ncomputer failure or malfunction, or any and all other commercial damages or\nlosses), even if such Contributor has been advised of the possibility of such\ndamages.\n\n9. Accepting Warranty or Additional Liability. While redistributing the Work or\nDerivative Works thereof, You may choose to offer, and charge a fee for,\nacceptance of support, warranty, indemnity, or other liability obligations and/or\nrights consistent with this License. However, in accepting such obligations, You\nmay act only on Your own behalf and on Your sole responsibility, not on behalf of\nany other Contributor, and only if You agree to indemnify, defend, and hold each\nContributor harmless for any liability incurred by, or claims asserted against,\nsuch Contributor by reason of your accepting any such warranty or additional\nliability.\n\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: How to apply the Apache License to your work\n\nTo apply the Apache License to your work, attach the following boilerplate\nnotice, with the fields enclosed by brackets \"[]\" replaced with your own\nidentifying information. (Don't include the brackets!) The text should be\nenclosed in the appropriate comment syntax for the file format. We also recommend\nthat a file or class name and description of purpose be included on the same\n\"printed page\" as the copyright notice for easier identification within\nthird-party archives.\n\n  Copyright [yyyy] [name of copyright owner] Licensed under the Apache License,\n  Version 2.0 (the \"License\"); you may not use this file except in compliance\n  with the License. You may obtain a copy of the License at\n  http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law\n  or agreed to in writing, software distributed under the License is\n  distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n  KIND, either express or implied. See the License for the specific language\n  governing permissions and limitations under the License.\n\n---\n\nBSD 2-clause \"Simplified\" License\n(releng-tool)\n\nBSD Two Clause License\n======================\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n  1. Redistributions of source code must retain the above copyright notice, this\n    list of conditions and the following disclaimer.\n\n  2. Redistributions in binary form must reproduce the above copyright notice,\n    this list of conditions and the following disclaimer in the documentation\n    and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE AUTHOR \"AS IS\" AND ANY EXPRESS OR IMPLIED\nWARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT\nSHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT\nOF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\nSTRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\nOUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\n---\n\nBSD 2-clause \"Simplified\" License\n(pycryptodome)\n\nlicense. The copyright of each piece belongs to the respective author.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice,\n   this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE\n\n---\n\nBSD 3-clause \"New\" or \"Revised\" License\n(decorator, google, idna)\n\nCopyright (c) <YEAR>, <OWNER>\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n  * Redistributions of source code must retain the above copyright notice, this\n    list of conditions and the following disclaimer.\n\n  * Redistributions in binary form must reproduce the above copyright notice,\n    this list of conditions and the following disclaimer in the documentation\n    and/or other materials provided with the distribution.\n\n  * Neither the name of the <ORGANIZATION> nor the names of its contributors may\n    be used to endorse or promote products derived from this software without\n    specific prior written permission.\n\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS\nOF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\nIF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n---\n\nBSD 3-clause \"New\" or \"Revised\" License\n(python-protobuf)\n\nCopyright 2008 Google Inc.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n    * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n    * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE\n\n---\n\nBSD 3-clause \"New\" or \"Revised\" License\n(python-lz4)\n\nLicense: BSD-3-clause\n\nRedistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n .\n 1. Redistributions of source code must retain the above copyright notice,\n    this list of conditions and the following disclaimer.\n .\n 2. Redistributions in binary form must reproduce the above copyright notice,\n    this list of conditions and the following disclaimer in the documentation\n    and/or other materials provided with the distribution.\n .\n 3. Neither the name of Steeve Morin nor the names of its contributors may be\n    used to endorse or promote products derived from this software without\n    specific prior written permission.\n .\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n POSSIBILITY OF SUCH DAMAGE\n\n---\n\nGNU Lesser General Public License v3.0 or later\n(chardet)\n\nGNU LESSER GENERAL PUBLIC LICENSE\n=================================\n\nVersion 3,  29 June 2007\n\nCopyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n\nEveryone is permitted to copy and distribute verbatim copies of this license\ndocument, but changing it is not allowed.\n\nThis version of the GNU Lesser General Public License incorporates the terms and\nconditions of version 3 of the GNU General Public License, supplemented by the\nadditional permissions listed below.\n\n0. Additional Definitions.\n\nAs used herein, “this License” refers to version 3 of the GNU Lesser General\nPublic License, and the “GNU GPL” refers to version 3 of the GNU General Public\nLicense.\n\n“The Library” refers to a covered work governed by this License, other than an\nApplication or a Combined Work as defined below.\n\nAn “Application” is any work that makes use of an interface provided by the\nLibrary, but which is not otherwise based on the Library. Defining a subclass of\na class defined by the Library is deemed a mode of using an interface provided by\nthe Library.\n\nA “Combined Work” is a work produced by combining or linking an Application with\nthe Library. The particular version of the Library with which the Combined Work\nwas made is also called the “Linked Version”.\n\nThe “Minimal Corresponding Source” for a Combined Work means the Corresponding\nSource for the Combined Work, excluding any source code for portions of the\nCombined Work that, considered in isolation, are based on the Application, and\nnot on the Linked Version.\n\nThe “Corresponding Application Code” for a Combined Work means the object code\nand/or source code for the Application, including any data and utility programs\nneeded for reproducing the Combined Work from the Application, but excluding the\nSystem Libraries of the Combined Work.\n\n1. Exception to Section 3 of the GNU GPL.\n\nYou may convey a covered work under sections 3 and 4 of this License without\nbeing bound by section 3 of the GNU GPL.\n\n2. Conveying Modified Versions.\n\nIf you modify a copy of the Library, and, in your modifications, a facility\nrefers to a function or data to be supplied by an Application that uses the\nfacility (other than as an argument passed when the facility is invoked), then\nyou may convey a copy of the modified version:\n\n  * a) under this License, provided that you make a good faith effort to ensure\n    that, in the event an Application does not supply the function or data, the\n    facility still operates, and performs whatever part of its purpose remains\n    meaningful, or\n\n  * b) under the GNU GPL, with none of the additional permissions of this License\n    applicable to that copy.\n\n3. Object Code Incorporating Material from Library Header Files.\n\nThe object code form of an Application may incorporate material from a header\nfile that is part of the Library. You may convey such object code under terms of\nyour choice, provided that, if the incorporated material is not limited to\nnumerical parameters, data structure layouts and accessors, or small macros,\ninline functions and templates (ten or fewer lines in length), you do both of the\nfollowing:\n\n  * a) Give prominent notice with each copy of the object code that the Library\n    is used in it and that the Library and its use are covered by this License.\n\n  * b) Accompany the object code with a copy of the GNU GPL and this license\n    document.\n\n4. Combined Works.\n\nYou may convey a Combined Work under terms of your choice that, taken together,\neffectively do not restrict modification of the portions of the Library contained\nin the Combined Work and reverse engineering for debugging such modifications, if\nyou also do each of the following:\n\n  * a) Give prominent notice with each copy of the Combined Work that the Library\n    is used in it and that the Library and its use are covered by this License.\n\n  * b) Accompany the Combined Work with a copy of the GNU GPL and this license\n    document.\n\n  * c) For a Combined Work that displays copyright notices during execution,\n    include the copyright notice for the Library among these notices, as well as\n    a reference directing the user to the copies of the GNU GPL and this license\n    document.\n\n  * d) Do one of the following:\n\n      * 0) Convey the Minimal Corresponding Source under the terms of this\n        License, and the Corresponding Application Code in a form suitable for,\n        and under terms that permit, the user to recombine or relink the\n        Application with a modified version of the Linked Version to produce a\n        modified Combined Work, in the manner specified by section 6 of the GNU\n        GPL for conveying Corresponding Source.\n\n      * 1) Use a suitable shared library mechanism for linking with the Library.\n        A suitable mechanism is one that (a) uses at run time a copy of the\n        Library already present on the user's computer system, and (b) will\n        operate properly with a modified version of the Library that is\n        interface-compatible with the Linked Version.\n\n  * e) Provide Installation Information, but only if you would otherwise be\n    required to provide such information under section 6 of the GNU GPL, and only\n    to the extent that such information is necessary to install and execute a\n    modified version of the Combined Work produced by recombining or relinking\n    the Application with a modified version of the Linked Version. (If you use\n    option 4d0, the Installation Information must accompany the Minimal\n    Corresponding Source and Corresponding Application Code. If you use option\n    4d1, you must provide the Installation Information in the manner specified by\n    section 6 of the GNU GPL for conveying Corresponding Source.)\n\n5. Combined Libraries.\n\nYou may place library facilities that are a work based on the Library side by\nside in a single library together with other library facilities that are not\nApplications and are not covered by this License, and convey such a combined\nlibrary under terms of your choice, if you do both of the following:\n\n  * a) Accompany the combined library with a copy of the same work based on the\n    Library, uncombined with any other library facilities, conveyed under the\n    terms of this License.\n\n  * b) Give prominent notice with the combined library that part of it is a work\n    based on the Library, and explaining where to find the accompanying\n    uncombined form of the same work.\n\n6. Revised Versions of the GNU Lesser General Public License.\n\nThe Free Software Foundation may publish revised and/or new versions of the GNU\nLesser General Public License from time to time. Such new versions will be\nsimilar in spirit to the present version, but may differ in detail to address new\nproblems or concerns.\n\nEach version is given a distinguishing version number. If the Library as you\nreceived it specifies that a certain numbered version of the GNU Lesser General\nPublic License “or any later version” applies to it, you have the option of\nfollowing the terms and conditions either of that published version or of any\nlater version published by the Free Software Foundation. If the Library as you\nreceived it does not specify a version number of the GNU Lesser General Public\nLicense, you may choose any version of the GNU Lesser General Public License ever\npublished by the Free Software Foundation.\n\nIf the Library as you received it specifies that a proxy can decide whether\nfuture versions of the GNU Lesser General Public License shall apply, that\nproxy's public statement of acceptance of any version is permanent authorization\nfor you to choose that version for the Library.\n\n--------------------------------------------------------------------------------\n\n\n\nGNU GENERAL PUBLIC LICENSE\n==========================\n\nVersion 3,  29 June 2007\n\nCopyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n\nEveryone is permitted to copy and distribute verbatim copies of this license\ndocument, but changing it is not allowed.\n\n\nPreamble\n\nThe GNU General Public License is a free, copyleft license for software and other\nkinds of works.\n\nThe licenses for most software and other practical works are designed to take\naway your freedom to share and change the works. By contrast, the GNU General\nPublic License is intended to guarantee your freedom to share and change all\nversions of a program--to make sure it remains free software for all its users.\nWe, the Free Software Foundation, use the GNU General Public License for most of\nour software; it applies also to any other work released this way by its authors.\nYou can apply it to your programs, too.\n\nWhen we speak of free software, we are referring to freedom, not price. Our\nGeneral Public Licenses are designed to make sure that you have the freedom to\ndistribute copies of free software (and charge for them if you wish), that you\nreceive source code or can get it if you want it, that you can change the\nsoftware or use pieces of it in new free programs, and that you know you can do\nthese things.\n\nTo protect your rights, we need to prevent others from denying you these rights\nor asking you to surrender the rights. Therefore, you have certain\nresponsibilities if you distribute copies of the software, or if you modify it:\nresponsibilities to respect the freedom of others.\n\nFor example, if you distribute copies of such a program, whether gratis or for a\nfee, you must pass on to the recipients the same freedoms that you received. You\nmust make sure that they, too, receive or can get the source code. And you must\nshow them these terms so they know their rights.\n\nDevelopers that use the GNU GPL protect your rights with two steps: (1) assert\ncopyright on the software, and (2) offer you this License giving you legal\npermission to copy, distribute and/or modify it.\n\nFor the developers' and authors' protection, the GPL clearly explains that there\nis no warranty for this free software. For both users' and authors' sake, the GPL\nrequires that modified versions be marked as changed, so that their problems will\nnot be attributed erroneously to authors of previous versions.\n\nSome devices are designed to deny users access to install or run modified\nversions of the software inside them, although the manufacturer can do so. This\nis fundamentally incompatible with the aim of protecting users' freedom to change\nthe software. The systematic pattern of such abuse occurs in the area of products\nfor individuals to use, which is precisely where it is most unacceptable.\nTherefore, we have designed this version of the GPL to prohibit the practice for\nthose products. If such problems arise substantially in other domains, we stand\nready to extend this provision to those domains in future versions of the GPL, as\nneeded to protect the freedom of users.\n\nFinally, every program is threatened constantly by software patents. States\nshould not allow patents to restrict development and use of software on\ngeneral-purpose computers, but in those that do, we wish to avoid the special\ndanger that patents applied to a free program could make it effectively\nproprietary. To prevent this, the GPL assures that patents cannot be used to\nrender the program non-free.\n\nThe precise terms and conditions for copying, distribution and modification\nfollow.\n\n\nTERMS AND CONDITIONS\n\n0. Definitions.\n\n“This License” refers to version 3 of the GNU General Public License.\n\n“Copyright” also means copyright-like laws that apply to other kinds of works,\nsuch as semiconductor masks.\n\n“The Program” refers to any copyrightable work licensed under this License. Each\nlicensee is addressed as “you”. “Licensees” and “recipients” may be individuals\nor organizations.\n\nTo “modify” a work means to copy from or adapt all or part of the work in a\nfashion requiring copyright permission, other than the making of an exact copy.\nThe resulting work is called a “modified version” of the earlier work or a work\n“based on” the earlier work.\n\nA “covered work” means either the unmodified Program or a work based on the\nProgram.\n\nTo “propagate” a work means to do anything with it that, without permission,\nwould make you directly or secondarily liable for infringement under applicable\ncopyright law, except executing it on a computer or modifying a private copy.\nPropagation includes copying, distribution (with or without modification), making\navailable to the public, and in some countries other activities as well.\n\nTo “convey” a work means any kind of propagation that enables other parties to\nmake or receive copies. Mere interaction with a user through a computer network,\nwith no transfer of a copy, is not conveying.\n\nAn interactive user interface displays “Appropriate Legal Notices” to the extent\nthat it includes a convenient and prominently visible feature that (1) displays\nan appropriate copyright notice, and (2) tells the user that there is no warranty\nfor the work (except to the extent that warranties are provided), that licensees\nmay convey the work under this License, and how to view a copy of this License.\nIf the interface presents a list of user commands or options, such as a menu, a\nprominent item in the list meets this criterion.\n\n1. Source Code.\n\nThe “source code” for a work means the preferred form of the work for making\nmodifications to it. “Object code” means any non-source form of a work.\n\nA “Standard Interface” means an interface that either is an official standard\ndefined by a recognized standards body, or, in the case of interfaces specified\nfor a particular programming language, one that is widely used among developers\nworking in that language.\n\nThe “System Libraries” of an executable work include anything, other than the\nwork as a whole, that (a) is included in the normal form of packaging a Major\nComponent, but which is not part of that Major Component, and (b) serves only to\nenable use of the work with that Major Component, or to implement a Standard\nInterface for which an implementation is available to the public in source code\nform. A “Major Component”, in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system (if any) on\nwhich the executable work runs, or a compiler used to produce the work, or an\nobject code interpreter used to run it.\n\nThe “Corresponding Source” for a work in object code form means all the source\ncode needed to generate, install, and (for an executable work) run the object\ncode and to modify the work, including scripts to control those activities.\nHowever, it does not include the work's System Libraries, or general-purpose\ntools or generally available free programs which are used unmodified in\nperforming those activities but which are not part of the work. For example,\nCorresponding Source includes interface definition files associated with source\nfiles for the work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require, such as by\nintimate data communication or control flow between those subprograms and other\nparts of the work.\n\nThe Corresponding Source need not include anything that users can regenerate\nautomatically from other parts of the Corresponding Source.\n\nThe Corresponding Source for a work in source code form is that same work.\n\n2. Basic Permissions.\n\nAll rights granted under this License are granted for the term of copyright on\nthe Program, and are irrevocable provided the stated conditions are met. This\nLicense explicitly affirms your unlimited permission to run the unmodified\nProgram. The output from running a covered work is covered by this License only\nif the output, given its content, constitutes a covered work. This License\nacknowledges your rights of fair use or other equivalent, as provided by\ncopyright law.\n\nYou may make, run and propagate covered works that you do not convey, without\nconditions so long as your license otherwise remains in force. You may convey\ncovered works to others for the sole purpose of having them make modifications\nexclusively for you, or provide you with facilities for running those works,\nprovided that you comply with the terms of this License in conveying all material\nfor which you do not control copyright. Those thus making or running the covered\nworks for you must do so exclusively on your behalf, under your direction and\ncontrol, on terms that prohibit them from making any copies of your copyrighted\nmaterial outside their relationship with you.\n\nConveying under any other circumstances is permitted solely under the conditions\nstated below. Sublicensing is not allowed; section 10 makes it unnecessary.\n\n3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\nNo covered work shall be deemed part of an effective technological measure under\nany applicable law fulfilling obligations under article 11 of the WIPO copyright\ntreaty adopted on 20 December 1996, or similar laws prohibiting or restricting\ncircumvention of such measures.\n\nWhen you convey a covered work, you waive any legal power to forbid circumvention\nof technological measures to the extent such circumvention is effected by\nexercising rights under this License with respect to the covered work, and you\ndisclaim any intention to limit operation or modification of the work as a means\nof enforcing, against the work's users, your or third parties' legal rights to\nforbid circumvention of technological measures.\n\n4. Conveying Verbatim Copies.\n\nYou may convey verbatim copies of the Program's source code as you receive it, in\nany medium, provided that you conspicuously and appropriately publish on each\ncopy an appropriate copyright notice; keep intact all notices stating that this\nLicense and any non-permissive terms added in accord with section 7 apply to the\ncode; keep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\nYou may charge any price or no price for each copy that you convey, and you may\noffer support or warranty protection for a fee.\n\n5. Conveying Modified Source Versions.\n\nYou may convey a work based on the Program, or the modifications to produce it\nfrom the Program, in the form of source code under the terms of section 4,\nprovided that you also meet all of these conditions:\n\n  * a) The work must carry prominent notices stating that you modified it, and\n    giving a relevant date.\n\n  * b) The work must carry prominent notices stating that it is released under\n    this License and any conditions added under section 7. This requirement\n    modifies the requirement in section 4 to “keep intact all notices”.\n\n  * c) You must license the entire work, as a whole, under this License to anyone\n    who comes into possession of a copy. This License will therefore apply, along\n    with any applicable section 7 additional terms, to the whole of the work, and\n    all its parts, regardless of how they are packaged. This License gives no\n    permission to license the work in any other way, but it does not invalidate\n    such permission if you have separately received it.\n\n  * d) If the work has interactive user interfaces, each must display Appropriate\n    Legal Notices; however, if the Program has interactive interfaces that do not\n    display Appropriate Legal Notices, your work need not make them do so.\n\nA compilation of a covered work with other separate and independent works, which\nare not by their nature extensions of the covered work, and which are not\ncombined with it such as to form a larger program, in or on a volume of a storage\nor distribution medium, is called an “aggregate” if the compilation and its\nresulting copyright are not used to limit the access or legal rights of the\ncompilation's users beyond what the individual works permit. Inclusion of a\ncovered work in an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n6. Conveying Non-Source Forms.\n\nYou may convey a covered work in object code form under the terms of sections 4\nand 5, provided that you also convey the machine-readable Corresponding Source\nunder the terms of this License, in one of these ways:\n\n  * a) Convey the object code in, or embodied in, a physical product (including a\n    physical distribution medium), accompanied by the Corresponding Source fixed\n    on a durable physical medium customarily used for software interchange.\n\n  * b) Convey the object code in, or embodied in, a physical product (including a\n    physical distribution medium), accompanied by a written offer, valid for at\n    least three years and valid for as long as you offer spare parts or customer\n    support for that product model, to give anyone who possesses the object code\n    either (1) a copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical medium\n    customarily used for software interchange, for a price no more than your\n    reasonable cost of physically performing this conveying of source, or (2)\n    access to copy the Corresponding Source from a network server at no charge.\n\n  * c) Convey individual copies of the object code with a copy of the written\n    offer to provide the Corresponding Source. This alternative is allowed only\n    occasionally and noncommercially, and only if you received the object code\n    with such an offer, in accord with subsection 6b.\n\n  * d) Convey the object code by offering access from a designated place (gratis\n    or for a charge), and offer equivalent access to the Corresponding Source in\n    the same way through the same place at no further charge. You need not\n    require recipients to copy the Corresponding Source along with the object\n    code. If the place to copy the object code is a network server, the\n    Corresponding Source may be on a different server (operated by you or a third\n    party) that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source. Regardless of what server hosts the Corresponding\n    Source, you remain obligated to ensure that it is available for as long as\n    needed to satisfy these requirements.\n\n  * e) Convey the object code using peer-to-peer transmission, provided you\n    inform other peers where the object code and Corresponding Source of the work\n    are being offered to the general public at no charge under subsection 6d.\n\nA separable portion of the object code, whose source code is excluded from the\nCorresponding Source as a System Library, need not be included in conveying the\nobject code work.\n\nA “User Product” is either (1) a “consumer product”, which means any tangible\npersonal property which is normally used for personal, family, or household\npurposes, or (2) anything designed or sold for incorporation into a dwelling. In\ndetermining whether a product is a consumer product, doubtful cases shall be\nresolved in favor of coverage. For a particular product received by a particular\nuser, “normally used” refers to a typical or common use of that class of product,\nregardless of the status of the particular user or of the way in which the\nparticular user actually uses, or expects or is expected to use, the product. A\nproduct is a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent the only\nsignificant mode of use of the product.\n\n“Installation Information” for a User Product means any methods, procedures,\nauthorization keys, or other information required to install and execute modified\nversions of a covered work in that User Product from a modified version of its\nCorresponding Source. The information must suffice to ensure that the continued\nfunctioning of the modified object code is in no case prevented or interfered\nwith solely because modification has been made.\n\nIf you convey an object code work under this section in, or with, or specifically\nfor use in, a User Product, and the conveying occurs as part of a transaction in\nwhich the right of possession and use of the User Product is transferred to the\nrecipient in perpetuity or for a fixed term (regardless of how the transaction is\ncharacterized), the Corresponding Source conveyed under this section must be\naccompanied by the Installation Information. But this requirement does not apply\nif neither you nor any third party retains the ability to install modified object\ncode on the User Product (for example, the work has been installed in ROM).\n\nThe requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates for a\nwork that has been modified or installed by the recipient, or for the User\nProduct in which it has been modified or installed. Access to a network may be\ndenied when the modification itself materially and adversely affects the\noperation of the network or violates the rules and protocols for communication\nacross the network.\n\nCorresponding Source conveyed, and Installation Information provided, in accord\nwith this section must be in a format that is publicly documented (and with an\nimplementation available to the public in source code form), and must require no\nspecial password or key for unpacking, reading or copying.\n\n7. Additional Terms.\n\n“Additional permissions” are terms that supplement the terms of this License by\nmaking exceptions from one or more of its conditions. Additional permissions that\nare applicable to the entire Program shall be treated as though they were\nincluded in this License, to the extent that they are valid under applicable law.\nIf additional permissions apply only to part of the Program, that part may be\nused separately under those permissions, but the entire Program remains governed\nby this License without regard to the additional permissions.\n\nWhen you convey a copy of a covered work, you may at your option remove any\nadditional permissions from that copy, or from any part of it. (Additional\npermissions may be written to require their own removal in certain cases when you\nmodify the work.) You may place additional permissions on material, added by you\nto a covered work, for which you have or can give appropriate copyright\npermission.\n\nNotwithstanding any other provision of this License, for material you add to a\ncovered work, you may (if authorized by the copyright holders of that material)\nsupplement the terms of this License with terms:\n\n  * a) Disclaiming warranty or limiting liability differently from the terms of\n    sections 15 and 16 of this License; or\n\n  * b) Requiring preservation of specified reasonable legal notices or author\n    attributions in that material or in the Appropriate Legal Notices displayed\n    by works containing it; or\n\n  * c) Prohibiting misrepresentation of the origin of that material, or requiring\n    that modified versions of such material be marked in reasonable ways as\n    different from the original version; or\n\n  * d) Limiting the use for publicity purposes of names of licensors or authors\n    of the material; or\n\n  * e) Declining to grant rights under trademark law for use of some trade names,\n    trademarks, or service marks; or\n\n  * f) Requiring indemnification of licensors and authors of that material by\n    anyone who conveys the material (or modified versions of it) with contractual\n    assumptions of liability to the recipient, for any liability that these\n    contractual assumptions directly impose on those licensors and authors.\n\nAll other non-permissive additional terms are considered “further restrictions”\nwithin the meaning of section 10. If the Program as you received it, or any part\nof it, contains a notice stating that it is governed by this License along with a\nterm that is a further restriction, you may remove that term. If a license\ndocument contains a further restriction but permits relicensing or conveying\nunder this License, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does not survive\nsuch relicensing or conveying.\n\nIf you add terms to a covered work in accord with this section, you must place,\nin the relevant source files, a statement of the additional terms that apply to\nthose files, or a notice indicating where to find the applicable terms.\n\nAdditional terms, permissive or non-permissive, may be stated in the form of a\nseparately written license, or stated as exceptions; the above requirements apply\neither way.\n\n8. Termination.\n\nYou may not propagate or modify a covered work except as expressly provided under\nthis License. Any attempt otherwise to propagate or modify it is void, and will\nautomatically terminate your rights under this License (including any patent\nlicenses granted under the third paragraph of section 11).\n\nHowever, if you cease all violation of this License, then your license from a\nparticular copyright holder is reinstated (a) provisionally, unless and until the\ncopyright holder explicitly and finally terminates your license, and (b)\npermanently, if the copyright holder fails to notify you of the violation by some\nreasonable means prior to 60 days after the cessation.\n\nMoreover, your license from a particular copyright holder is reinstated\npermanently if the copyright holder notifies you of the violation by some\nreasonable means, this is the first time you have received notice of violation of\nthis License (for any work) from that copyright holder, and you cure the\nviolation prior to 30 days after your receipt of the notice.\n\nTermination of your rights under this section does not terminate the licenses of\nparties who have received copies or rights from you under this License. If your\nrights have been terminated and not permanently reinstated, you do not qualify to\nreceive new licenses for the same material under section 10.\n\n9. Acceptance Not Required for Having Copies.\n\nYou are not required to accept this License in order to receive or run a copy of\nthe Program. Ancillary propagation of a covered work occurring solely as a\nconsequence of using peer-to-peer transmission to receive a copy likewise does\nnot require acceptance. However, nothing other than this License grants you\npermission to propagate or modify any covered work. These actions infringe\ncopyright if you do not accept this License. Therefore, by modifying or\npropagating a covered work, you indicate your acceptance of this License to do\nso.\n\n10. Automatic Licensing of Downstream Recipients.\n\nEach time you convey a covered work, the recipient automatically receives a\nlicense from the original licensors, to run, modify and propagate that work,\nsubject to this License. You are not responsible for enforcing compliance by\nthird parties with this License.\n\nAn “entity transaction” is a transaction transferring control of an organization,\nor substantially all assets of one, or subdividing an organization, or merging\norganizations. If propagation of a covered work results from an entity\ntransaction, each party to that transaction who receives a copy of the work also\nreceives whatever licenses to the work the party's predecessor in interest had or\ncould give under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if the\npredecessor has it or can get it with reasonable efforts.\n\nYou may not impose any further restrictions on the exercise of the rights granted\nor affirmed under this License. For example, you may not impose a license fee,\nroyalty, or other charge for exercise of rights granted under this License, and\nyou may not initiate litigation (including a cross-claim or counterclaim in a\nlawsuit) alleging that any patent claim is infringed by making, using, selling,\noffering for sale, or importing the Program or any portion of it.\n\n11. Patents.\n\nA “contributor” is a copyright holder who authorizes use under this License of\nthe Program or a work on which the Program is based. The work thus licensed is\ncalled the contributor's “contributor version”.\n\nA contributor's “essential patent claims” are all patent claims owned or\ncontrolled by the contributor, whether already acquired or hereafter acquired,\nthat would be infringed by some manner, permitted by this License, of making,\nusing, or selling its contributor version, but do not include claims that would\nbe infringed only as a consequence of further modification of the contributor\nversion. For purposes of this definition, “control” includes the right to grant\npatent sublicenses in a manner consistent with the requirements of this License.\n\nEach contributor grants you a non-exclusive, worldwide, royalty-free patent\nlicense under the contributor's essential patent claims, to make, use, sell,\noffer for sale, import and otherwise run, modify and propagate the contents of\nits contributor version.\n\nIn the following three paragraphs, a “patent license” is any express agreement or\ncommitment, however denominated, not to enforce a patent (such as an express\npermission to practice a patent or covenant not to sue for patent infringement).\nTo “grant” such a patent license to a party means to make such an agreement or\ncommitment not to enforce a patent against the party.\n\nIf you convey a covered work, knowingly relying on a patent license, and the\nCorresponding Source of the work is not available for anyone to copy, free of\ncharge and under the terms of this License, through a publicly available network\nserver or other readily accessible means, then you must either (1) cause the\nCorresponding Source to be so available, or (2) arrange to deprive yourself of\nthe benefit of the patent license for this particular work, or (3) arrange, in a\nmanner consistent with the requirements of this License, to extend the patent\nlicense to downstream recipients. “Knowingly relying” means you have actual\nknowledge that, but for the patent license, your conveying the covered work in a\ncountry, or your recipient's use of the covered work in a country, would infringe\none or more identifiable patents in that country that you have reason to believe\nare valid.\n\nIf, pursuant to or in connection with a single transaction or arrangement, you\nconvey, or propagate by procuring conveyance of, a covered work, and grant a\npatent license to some of the parties receiving the covered work authorizing them\nto use, propagate, modify or convey a specific copy of the covered work, then the\npatent license you grant is automatically extended to all recipients of the\ncovered work and works based on it.\n\nA patent license is “discriminatory” if it does not include within the scope of\nits coverage, prohibits the exercise of, or is conditioned on the non-exercise of\none or more of the rights that are specifically granted under this License. You\nmay not convey a covered work if you are a party to an arrangement with a third\nparty that is in the business of distributing software, under which you make\npayment to the third party based on the extent of your activity of conveying the\nwork, and under which the third party grants, to any of the parties who would\nreceive the covered work from you, a discriminatory patent license (a) in\nconnection with copies of the covered work conveyed by you (or copies made from\nthose copies), or (b) primarily for and in connection with specific products or\ncompilations that contain the covered work, unless you entered into that\narrangement, or that patent license was granted, prior to 28 March 2007.\n\nNothing in this License shall be construed as excluding or limiting any implied\nlicense or other defenses to infringement that may otherwise be available to you\nunder applicable patent law.\n\n12. No Surrender of Others' Freedom.\n\nIf conditions are imposed on you (whether by court order, agreement or otherwise)\nthat contradict the conditions of this License, they do not excuse you from the\nconditions of this License. If you cannot convey a covered work so as to satisfy\nsimultaneously your obligations under this License and any other pertinent\nobligations, then as a consequence you may not convey it at all. For example, if\nyou agree to terms that obligate you to collect a royalty for further conveying\nfrom those to whom you convey the Program, the only way you could satisfy both\nthose terms and this License would be to refrain entirely from conveying the\nProgram.\n\n13. Use with the GNU Affero General Public License.\n\nNotwithstanding any other provision of this License, you have permission to link\nor combine any covered work with a work licensed under version 3 of the GNU\nAffero General Public License into a single combined work, and to convey the\nresulting work. The terms of this License will continue to apply to the part\nwhich is the covered work, but the special requirements of the GNU Affero General\nPublic License, section 13, concerning interaction through a network will apply\nto the combination as such.\n\n14. Revised Versions of this License.\n\nThe Free Software Foundation may publish revised and/or new versions of the GNU\nGeneral Public License from time to time. Such new versions will be similar in\nspirit to the present version, but may differ in detail to address new problems\nor concerns.\n\nEach version is given a distinguishing version number. If the Program specifies\nthat a certain numbered version of the GNU General Public License “or any later\nversion” applies to it, you have the option of following the terms and conditions\neither of that numbered version or of any later version published by the Free\nSoftware Foundation. If the Program does not specify a version number of the GNU\nGeneral Public License, you may choose any version ever published by the Free\nSoftware Foundation.\n\nIf the Program specifies that a proxy can decide which future versions of the GNU\nGeneral Public License can be used, that proxy's public statement of acceptance\nof a version permanently authorizes you to choose that version for the Program.\n\nLater license versions may give you additional or different permissions. However,\nno additional obligations are imposed on any author or copyright holder as a\nresult of your choosing to follow a later version.\n\n15. Disclaimer of Warranty.\n\nTHERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\nEXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER\nPARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER\nEXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE\nQUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE\nDEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n16. Limitation of Liability.\n\nIN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY\nCOPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS\nPERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,\nINCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE\nTHE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED\nINACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE\nPROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY\nHAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\n\n17. Interpretation of Sections 15 and 16.\n\nIf the disclaimer of warranty and limitation of liability provided above cannot\nbe given local legal effect according to their terms, reviewing courts shall\napply local law that most closely approximates an absolute waiver of all civil\nliability in connection with the Program, unless a warranty or assumption of\nliability accompanies a copy of the Program in return for a fee.\n\nEND OF TERMS AND CONDITIONS\n\n\nHow to Apply These Terms to Your New Programs\n\nIf you develop a new program, and you want it to be of the greatest possible use\nto the public, the best way to achieve this is to make it free software which\neveryone can redistribute and change under these terms.\n\nTo do so, attach the following notices to the program. It is safest to attach\nthem to the start of each source file to most effectively state the exclusion of\nwarranty; and each file should have at least the “copyright” line and a pointer\nto where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it\ndoes.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program does terminal interaction, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate parts\nof the General Public License. Of course, your program's commands might be\ndifferent; for a GUI interface, you would use an “about box”.\n\nYou should also get your employer (if you work as a programmer) or school, if\nany, to sign a “copyright disclaimer” for the program, if necessary. For more\ninformation on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\nThe GNU General Public License does not permit incorporating your program into\nproprietary programs. If your program is a subroutine library, you may consider\nit more useful to permit linking proprietary applications with the library. If\nthis is what you want to do, use the GNU Lesser General Public License instead of\nthis License. But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n\n---\n\nMIT License\n(PyTZ - Python Time Zone Library)\n\nCopyright (c) 2003-2019 Stuart Bishop <stuart@stuartbishop.net>\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE\n\n---\n\nMIT License\n(Python six)\n\nCopyright (c) 2010-2018 Benjamin Peterson\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE\n\n---\n\nMIT License\n(PyYAML)\n\nCopyright (c) 2017-2020 Ingy döt Net\nCopyright (c) 2006-2016 Kirill Simonov\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE\n\n---\n\nMIT License\n(urllib3)\n\nMIT License\n\nCopyright (c) 2008-2020 Andrey Petrov and contributors (see CONTRIBUTORS.txt)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE\n\n---\n\nMIT License\n(py)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\n  of this software and associated documentation files (the \"Software\"), to deal\n  in the Software without restriction, including without limitation the rights\n  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n  copies of the Software, and to permit persons to whom the Software is\n  furnished to do so, subject to the following conditions:\n     \n  The above copyright notice and this permission notice shall be included in all\n  copies or substantial portions of the Software.\n \n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE\n\n---\n\nMIT License\n(appengine-python-standard, BeautifulSoup4, charset-normalizer, soupsieve, ttvcloud, volcengine)\n\nThe MIT License\n===============\n\nCopyright (c) <year> <copyright holders>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in the\nSoftware without restriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell copies of the\nSoftware, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\nAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n---\n\nMIT License\n(shellescape)\n\nThe MIT License (MIT)\n\nCopyright (c) 2015 Christopher Simpkins\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE\n\n---\n\nMIT License\n(naked)\n\nThe MIT License (MIT)\n\nCopyright (c) {{year}} {{developer}}\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE\n\n---\n\nMozilla Public License 2.0\n(python-certifi)\n\nMozilla Public License\nVersion 2.0\n======================\n\n\n1. Definitions\n--------------\n\n  1.1. \"Contributor\"\n\n  means each individual or legal entity that creates, contributes to the creation\n  of, or owns Covered Software.\n\n  1.2. \"Contributor Version\"\n\n  means the combination of the Contributions of others (if any) used by a\n  Contributor and that particular Contributor's Contribution.\n\n  1.3. \"Contribution\"\n\n  means Covered Software of a particular Contributor.\n\n  1.4. \"Covered Software\"\n\n  means Source Code Form to which the initial Contributor has attached the notice\n  in Exhibit A, the Executable Form of such Source Code Form, and Modifications\n  of such Source Code Form, in each case including portions thereof.\n\n  1.5. \"Incompatible With Secondary Licenses\"\n\n  means\n\n    a. \n\n      that the initial Contributor has attached the notice described in Exhibit B\n      to the Covered Software; or\n\n    b. \n\n      that the Covered Software was made available under the terms of version 1.1\n      or earlier of the License, but not also under the terms of a Secondary\n      License.\n\n  1.6. \"Executable Form\"\n\n  means any form of the work other than Source Code Form.\n\n  1.7. \"Larger Work\"\n\n  means a work that combines Covered Software with other material, in a separate\n  file or files, that is not Covered Software.\n\n  1.8. \"License\"\n\n  means this document.\n\n  1.9. \"Licensable\"\n\n  means having the right to grant, to the maximum extent possible, whether at the\n  time of the initial grant or subsequently, any and all of the rights conveyed\n  by this License.\n\n  1.10. \"Modifications\"\n\n  means any of the following:\n\n    a. \n\n      any file in Source Code Form that results from an addition to, deletion\n      from, or modification of the contents of Covered Software; or\n\n    b. \n\n      any new file in Source Code Form that contains any Covered Software.\n\n  1.11. \"Patent Claims\" of a Contributor\n\n  means any patent claim(s), including without limitation, method, process, and\n  apparatus claims, in any patent Licensable by such Contributor that would be\n  infringed, but for the grant of the License, by the making, using, selling,\n  offering for sale, having made, import, or transfer of either its Contributions\n  or its Contributor Version.\n\n  1.12. \"Secondary License\"\n\n  means either the GNU General Public License, Version 2.0, the GNU Lesser\n  General Public License, Version 2.1, the GNU Affero General Public License,\n  Version 3.0, or any later versions of those licenses.\n\n  1.13. \"Source Code Form\"\n\n  means the form of the work preferred for making modifications.\n\n  1.14. \"You\" (or \"Your\")\n\n  means an individual or a legal entity exercising rights under this License. For\n  legal entities, \"You\" includes any entity that controls, is controlled by, or\n  is under common control with You. For purposes of this definition, \"control\"\n  means (a) the power, direct or indirect, to cause the direction or management\n  of such entity, whether by contract or otherwise, or (b) ownership of more than\n  fifty percent (50%) of the outstanding shares or beneficial ownership of such\n  entity.\n\n\n2. License Grants and Conditions\n--------------------------------\n\n\n  2.1. Grants\n\n  Each Contributor hereby grants You a world-wide, royalty-free, non-exclusive\n  license:\n\n    a. \n\n      under intellectual property rights (other than patent or trademark)\n      Licensable by such Contributor to use, reproduce, make available, modify,\n      display, perform, distribute, and otherwise exploit its Contributions,\n      either on an unmodified basis, with Modifications, or as part of a Larger\n      Work; and\n\n    b. \n\n      under Patent Claims of such Contributor to make, use, sell, offer for sale,\n      have made, import, and otherwise transfer either its Contributions or its\n      Contributor Version.\n\n\n  2.2. Effective Date\n\n  The licenses granted in Section 2.1 with respect to any Contribution become\n  effective for each Contribution on the date the Contributor first distributes\n  such Contribution.\n\n\n  2.3. Limitations on Grant Scope\n\n  The licenses granted in this Section 2 are the only rights granted under this\n  License. No additional rights or licenses will be implied from the distribution\n  or licensing of Covered Software under this License. Notwithstanding\n  Section 2.1(b) above, no patent license is granted by a Contributor:\n\n    a. \n\n      for any code that a Contributor has removed from Covered Software; or\n\n    b. \n\n      for infringements caused by: (i) Your and any other third party's\n      modifications of Covered Software, or (ii) the combination of its\n      Contributions with other software (except as part of its Contributor\n      Version); or\n\n    c. \n\n      under Patent Claims infringed by Covered Software in the absence of its\n      Contributions.\n\n  This License does not grant any rights in the trademarks, service marks, or\n  logos of any Contributor (except as may be necessary to comply with the notice\n  requirements in Section 3.4).\n\n\n  2.4. Subsequent Licenses\n\n  No Contributor makes additional grants as a result of Your choice to distribute\n  the Covered Software under a subsequent version of this License (see\n  Section 10.2) or under the terms of a Secondary License (if permitted under the\n  terms of Section 3.3).\n\n\n  2.5. Representation\n\n  Each Contributor represents that the Contributor believes its Contributions are\n  its original creation(s) or it has sufficient rights to grant the rights to its\n  Contributions conveyed by this License.\n\n\n  2.6. Fair Use\n\n  This License is not intended to limit any rights You have under applicable\n  copyright doctrines of fair use, fair dealing, or other equivalents.\n\n\n  2.7. Conditions\n\n  Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in\n  Section 2.1.\n\n\n3. Responsibilities\n-------------------\n\n\n  3.1. Distribution of Source Form\n\n  All distribution of Covered Software in Source Code Form, including any\n  Modifications that You create or to which You contribute, must be under the\n  terms of this License. You must inform recipients that the Source Code Form of\n  the Covered Software is governed by the terms of this License, and how they can\n  obtain a copy of this License. You may not attempt to alter or restrict the\n  recipients' rights in the Source Code Form.\n\n\n  3.2. Distribution of Executable Form\n\n  If You distribute Covered Software in Executable Form then:\n\n    a. \n\n      such Covered Software must also be made available in Source Code Form, as\n      described in Section 3.1, and You must inform recipients of the Executable\n      Form how they can obtain a copy of such Source Code Form by reasonable\n      means in a timely manner, at a charge no more than the cost of distribution\n      to the recipient; and\n\n    b. \n\n      You may distribute such Executable Form under the terms of this License, or\n      sublicense it under different terms, provided that the license for the\n      Executable Form does not attempt to limit or alter the recipients' rights\n      in the Source Code Form under this License.\n\n\n  3.3. Distribution of a Larger Work\n\n  You may create and distribute a Larger Work under terms of Your choice,\n  provided that You also comply with the requirements of this License for the\n  Covered Software. If the Larger Work is a combination of Covered Software with\n  a work governed by one or more Secondary Licenses, and the Covered Software is\n  not Incompatible With Secondary Licenses, this License permits You to\n  additionally distribute such Covered Software under the terms of such Secondary\n  License(s), so that the recipient of the Larger Work may, at their option,\n  further distribute the Covered Software under the terms of either this License\n  or such Secondary License(s).\n\n\n  3.4. Notices\n\n  You may not remove or alter the substance of any license notices (including\n  copyright notices, patent notices, disclaimers of warranty, or limitations of\n  liability) contained within the Source Code Form of the Covered Software,\n  except that You may alter any license notices to the extent required to remedy\n  known factual inaccuracies.\n\n\n  3.5. Application of Additional Terms\n\n  You may choose to offer, and to charge a fee for, warranty, support, indemnity\n  or liability obligations to one or more recipients of Covered Software.\n  However, You may do so only on Your own behalf, and not on behalf of any\n  Contributor. You must make it absolutely clear that any such warranty, support,\n  indemnity, or liability obligation is offered by You alone, and You hereby\n  agree to indemnify every Contributor for any liability incurred by such\n  Contributor as a result of warranty, support, indemnity or liability terms You\n  offer. You may include additional disclaimers of warranty and limitations of\n  liability specific to any jurisdiction.\n\n\n4. Inability to Comply Due to Statute or Regulation\n---------------------------------------------------\n\nIf it is impossible for You to comply with any of the terms of this License with\nrespect to some or all of the Covered Software due to statute, judicial order, or\nregulation then You must: (a) comply with the terms of this License to the\nmaximum extent possible; and (b) describe the limitations and the code they\naffect. Such description must be placed in a text file included with all\ndistributions of the Covered Software under this License. Except to the extent\nprohibited by statute or regulation, such description must be sufficiently\ndetailed for a recipient of ordinary skill to be able to understand it.\n\n\n5. Termination\n--------------\n\n  5.1. The rights granted under this License will terminate automatically if You\n  fail to comply with any of its terms. However, if You become compliant, then\n  the rights granted under this License from a particular Contributor are\n  reinstated (a) provisionally, unless and until such Contributor explicitly and\n  finally terminates Your grants, and (b) on an ongoing basis, if such\n  Contributor fails to notify You of the non-compliance by some reasonable means\n  prior to 60 days after You have come back into compliance. Moreover, Your\n  grants from a particular Contributor are reinstated on an ongoing basis if such\n  Contributor notifies You of the non-compliance by some reasonable means, this\n  is the first time You have received notice of non-compliance with this License\n  from such Contributor, and You become compliant prior to 30 days after Your\n  receipt of the notice.\n\n  5.2. If You initiate litigation against any entity by asserting a patent\n  infringement claim (excluding declaratory judgment actions, counter-claims, and\n  cross-claims) alleging that a Contributor Version directly or indirectly\n  infringes any patent, then the rights granted to You by any and all\n  Contributors for the Covered Software under Section 2.1 of this License shall\n  terminate.\n\n  5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user\n  license agreements (excluding distributors and resellers) which have been\n  validly granted by You or Your distributors under this License prior to\n  termination shall survive termination.\n\n\n6. Disclaimer of Warranty\n-------------------------\n\nCovered Software is provided under this License on an \"as is\" basis, without\nwarranty of any kind, either expressed, implied, or statutory, including, without\nlimitation, warranties that the Covered Software is free of defects,\nmerchantable, fit for a particular purpose or non-infringing. The entire risk as\nto the quality and performance of the Covered Software is with You. Should any\nCovered Software prove defective in any respect, You (not any Contributor) assume\nthe cost of any necessary servicing, repair, or correction. This disclaimer of\nwarranty constitutes an essential part of this License. No use of any Covered\nSoftware is authorized under this License except under this disclaimer.\n\n\n7. Limitation of Liability\n--------------------------\n\nUnder no circumstances and under no legal theory, whether tort (including\nnegligence), contract, or otherwise, shall any Contributor, or anyone who\ndistributes Covered Software as permitted above, be liable to You for any direct,\nindirect, special, incidental, or consequential damages of any character\nincluding, without limitation, damages for lost profits, loss of goodwill, work\nstoppage, computer failure or malfunction, or any and all other commercial\ndamages or losses, even if such party shall have been informed of the possibility\nof such damages. This limitation of liability shall not apply to liability for\ndeath or personal injury resulting from such party's negligence to the extent\napplicable law prohibits such limitation. Some jurisdictions do not allow the\nexclusion or limitation of incidental or consequential damages, so this exclusion\nand limitation may not apply to You.\n\n\n8. Litigation\n-------------\n\nAny litigation relating to this License may be brought only in the courts of a\njurisdiction where the defendant maintains its principal place of business and\nsuch litigation shall be governed by laws of that jurisdiction, without reference\nto its conflict-of-law provisions. Nothing in this Section shall prevent a\nparty's ability to bring cross-claims or counter-claims.\n\n\n9. Miscellaneous\n----------------\n\nThis License represents the complete agreement concerning the subject matter\nhereof. If any provision of this License is held to be unenforceable, such\nprovision shall be reformed only to the extent necessary to make it enforceable.\nAny law or regulation which provides that the language of a contract shall be\nconstrued against the drafter shall not be used to construe this License against\na Contributor.\n\n\n10. Versions of the License\n---------------------------\n\n\n  10.1. New Versions\n\n  Mozilla Foundation is the license steward. Except as provided in Section 10.3,\n  no one other than the license steward has the right to modify or publish new\n  versions of this License. Each version will be given a distinguishing version\n  number.\n\n\n  10.2. Effect of New Versions\n\n  You may distribute the Covered Software under the terms of the version of the\n  License under which You originally received the Covered Software, or under the\n  terms of any subsequent version published by the license steward.\n\n\n  10.3. Modified Versions\n\n  If you create software not governed by this License, and you want to create a\n  new license for such software, you may create and use a modified version of\n  this License if you rename the license and remove any references to the name of\n  the license steward (except to note that such modified license differs from\n  this License).\n\n\n  10.4. Distributing Source Code Form that is Incompatible With Secondary\n  Licenses\n\n  If You choose to distribute Source Code Form that is Incompatible With\n  Secondary Licenses under the terms of this version of the License, the notice\n  described in Exhibit B of this License must be attached.\n\n\nExhibit A - Source Code Form License Notice\n-------------------------------------------\n\n  This Source Code Form is subject to the terms of the Mozilla Public License,\n  v. 2.0. If a copy of the MPL was not distributed with this file, You can\n  obtain one at http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular file, then\nYou may include the notice in a location (such as a LICENSE file in a relevant\ndirectory) where a recipient would be likely to look for such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\n\nExhibit B - \"Incompatible With Secondary Licenses\" Notice\n---------------------------------------------------------\n\n  This Source Code Form is \"Incompatible With Secondary Licenses\", as defined\n  by the Mozilla Public License, v. 2.0.\n\n---\n\nPublic Domain\n(pycryptodome)\n\nPublic domain code is not subject to any license.\n\n---\n\nPython Software Foundation License 2.0\n(pypi/setuptools)\n\nThis license was approved as the official PSF License Version 2 on October 22,\n2004. The only differences between this and version 1 of the PSF license consist\nof removing Python version numbers (like 2.1.1 or 2.3).\n\n\n\nPYTHON SOFTWARE FOUNDATION LICENSE VERSION 2\n============================================\n\n--------------------------------------------\n\n  1.  This LICENSE AGREEMENT is between the Python Software Foundation (\"PSF\"),\n    and the Individual or Organization (\"Licensee\") accessing and otherwise using\n    this software (\"Python\") in source or binary form and its associated\n    documentation.\n\n  2.  Subject to the terms and conditions of this License Agreement, PSF hereby\n    grants Licensee a nonexclusive, royalty-free, world-wide license to\n    reproduce, analyze, test, perform and/or display publicly, prepare derivative\n    works, distribute, and otherwise use Python alone or in any derivative\n    version, provided, however, that PSF's License Agreement and PSF's notice of\n    copyright, i.e., \"Copyright (c) 2001, 2002, 2003, 2004 Python Software\n    Foundation; All Rights Reserved\" are retained in Python alone or in any\n    derivative version prepared by Licensee.\n\n  3. In the event Licensee prepares a derivative work that is based on or\n    incorporates Python or any part thereof, and wants to make the derivative\n    work available to others as provided herein, then Licensee hereby agrees to\n    include in any such work a brief summary of the changes made to Python.\n\n  4.  PSF is making Python available to Licensee on an \"AS IS\" basis. PSF MAKES\n    NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT\n    NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF\n    MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF\n    PYTHON WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.\n\n  5.  PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON FOR ANY\n    INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF\n    MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, OR ANY DERIVATIVE\n    THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.\n\n  6.  This License Agreement will automatically terminate upon a material breach\n    of its terms and conditions.\n\n  7.  Nothing in this License Agreement shall be deemed to create any\n    relationship of agency, partnership, or joint venture between PSF and\n    Licensee. This License Agreement does not grant permission to use PSF\n    trademarks or trade name in a trademark sense to endorse or promote products\n    or services of Licensee, or any third party.\n\n  8.  By copying, installing or otherwise using Python, Licensee agrees to be\n    bound by the terms and conditions of this License Agreement.\n\n---\n"
  },
  {
    "path": "README.EN.MD",
    "content": "English | [中文](README.md)\n\n<h1 align=\"center\"><img src=\"https://iam.volccdn.com/obj/volcengine-public/pic/volcengine-icon.png\"></h1>\n<h1 align=\"center\">Volcengine SDK for Python</h1>\n\nWelcome to Volcengine SDK for Python. This document explains how to obtain and use the SDK.\n\n## Prerequisites\n\n### Enable the service\n\nMake sure the service you want to access is enabled. Go to the [Volcengine Console](https://console.volcengine.com/), select the service from the left navigation (or search it from the top bar), and complete the activation process in the service console.\n\n### Obtain security credentials\n\nAccess Key is the credential used to access Volcengine services. It consists of Access Key ID (AK) and Secret Access Key (SK).\n\nLog in to the [Volcengine Console](https://console.volcengine.com/), then go to [IAM](https://console.volcengine.com/iam) -> [Access Keys](https://console.volcengine.com/iam/keymanage/) to create and manage your Access Keys. For more information, see the [Access Key documentation](https://www.volcengine.com/docs/6291/65568).\n\n### Environment check\n\nPython version must be **3.7** or later.\n\n## Install\n\nInstall the SDK via pip:\n\n```bash\npip install --user volcengine\n```\n\nIf `volcengine` is already installed, upgrade it with:\n\n```bash\npip install --upgrade volcengine\n```\n\n## Configuration\n\n### Credential configuration\n\nVolcengine SDK for Python supports the following credential loading methods.\n\n*Note: Replace `Your AK` and `Your SK` in the code with your actual AK and SK.*\n\n**Method 1**: Set AK/SK on the client **(recommended)**\n\n```python\niam_service = IamService()\niam_service.set_ak('Your AK')\niam_service.set_sk('Your SK')\n```\n\n**Method 2**: Load AK/SK from environment variables\n\n```bash\nVOLC_ACCESSKEY=\"Your AK\"\nVOLC_SECRETKEY=\"Your SK\"\n```\n\n**Method 3**: Load AK/SK from a file under HOME\n\nAdd the following content to `~/.volc/config`:\n\n```json\n{\n  \"ak\": \"Your AK\",\n  \"sk\": \"Your SK\"\n}\n```\n\n## Other resources\n\n### Some service directories and examples\n\n- [Visual Intelligence](volcengine/visual/README.md)\n- [NLP](volcengine/nlp/README.md)\n\n## Security and privacy\nThis project takes security seriously. \nFor vulnerability reporting and supported versions, see [SECURITY.md](SECURITY.md)\n"
  },
  {
    "path": "README.md",
    "content": "中文 | [English](README.EN.MD)\n\n<h1 align=\"center\"><img src=\"https://iam.volccdn.com/obj/volcengine-public/pic/volcengine-icon.png\"></h1>\n<h1 align=\"center\">火山引擎SDK for Python</h1> \n欢迎使用火山引擎SDK for Python，本文档为您介绍如何获取及调用SDK。\n\n## 前置准备\n### 服务开通\n请确保您已开通了您需要访问的服务。您可前往[火山引擎控制台](https://console.volcengine.com/ )，在左侧菜单中选择或在顶部搜索栏中搜索您需要使用的服务，进入服务控制台内完成开通流程。\n### 获取安全凭证\nAccess Key（访问密钥）是访问火山引擎服务的安全凭证，包含Access Key ID（简称为AK）和Secret Access Key（简称为SK）两部分。您可登录[火山引擎控制台](https://console.volcengine.com/ )，前往“[访问控制](https://console.volcengine.com/iam )”的“[访问密钥](https://console.volcengine.com/iam/keymanage/ )”中创建及管理您的Access Key。更多信息可参考[访问密钥帮助文档](https://www.volcengine.com/docs/6291/65568 )。\n### 环境检查\nPython版本需要不低于3.7。\n\n## 获取与安装\n\n使用pip安装SDK for Python：\n```\n    pip install --user volcengine\n```\n如果已经安装volcengine包，则用下面命令升级即可：\n```\n    pip install --upgrade volcengine\n```\n\n## 相关配置\n### 安全凭证配置\n火山引擎SDK for Python支持以下几种方式进行凭证管理：\n\n*注意：代码中Your AK及Your SK需要分别替换为您的AK及SK。*\n\n**方式一**：在Client中设置AK/SK **（推荐）**\n  ```python\n      iam_service = IamService()\n      iam_service.set_ak('Your AK')\n      iam_service.set_sk('Your SK')\n  ```\n\n**方式二**：从环境变量加载AK/SK\n  ```bash\n  VOLC_ACCESSKEY=\"Your AK\"  \n  VOLC_SECRETKEY=\"Your SK\"\n  ```\n**方式三**：从HOME文件加载AK/SK\n\n在本地的~/.volc/config中添加如下内容：\n  ```json\n    {\n      \"ak\": \"Your AK\",\n      \"sk\": \"Your SK\"\n    }\n  ```\n\n\n\n##其它资源\n###部分SDK服务目录及示例\n\n- 【视觉智能】请点击[这里](volcengine/visual/README.md)\n- 【智能语义】请点击[这里](volcengine/nlp/README.md)\n\n## Security and privacy\nThis project takes security seriously. \nFor vulnerability reporting and supported versions, see [SECURITY.md](SECURITY.md)\n"
  },
  {
    "path": "SECURITY.md",
    "content": "## Security and privacy\n\nIf you discover potential security issues in the project, or believe you may have found a security issue, please notify the ByteDance security team through our [security center](https://security.bytedance.com/src/) or [vulnerability reporting email](mailto:src@bytedance.com). Please do not create public GitHub Issues.\n\nWe will assess the vulnerability based on the Common Vulnerability Scoring System (CVSS 3.1). The security team will keep you updated on key progress and may request further information or guidance from you. You are welcome to contact us via the email or website mentioned above to ask questions or discuss disclosure matters.\n\nTo protect the security of our customers, ByteDance requests that you do not publish or share information regarding the vulnerability in any public forum, nor publish or share data involving users, until the vulnerability has been remediated and our users have been notified. Please understand that the time required for remediation depends on the severity of the vulnerability and the scope of the impact.\n\nIndividuals, companies, and security teams may wish to publish security advisories on their own websites or other forums. Please contact us via the email or website mentioned above prior to publication to discuss the information that can be disclosed and to coordinate the disclosure timeline.\n\n## Bug Bounty Reward\n\n[For the policy of bug bounty reward](https://bytedance.larkoffice.com/docx/ZstQd7bbooDctqxBCAmcFasOngd), if you have any questions about the rules, please contact [https://src.bytedance.com/home](https://src.bytedance.com/home) for consultation.\n"
  },
  {
    "path": "requirements.txt",
    "content": "certifi>=2020.6.20\nchardet>=4.0.0\ndecorator==4.4.2\nidna==2.10\nNaked==0.1.31\npycryptodome>=3.9.9,<4.0.0\npytz>=2020.5\nPyYAML~=6.0.1\nredo==2.0.4\nrequests>=2.25.1\nretry>=0.9.2,<1.0.0\ntenacity>=8.0.0\nshellescape==3.8.1\nurllib3~=1.26.16\nsetuptools>=44.1.1\ngoogle>=3.0.0\nsix>=1.0\nprotobuf>=3.18.3\nminio~=7.1.9\nreaderwriterlock>=1.0.9\nkafka~=1.3.5\navro~=1.11.3\naiohttp>=3.10.0"
  },
  {
    "path": "setup.py",
    "content": "# coding:utf-8\nimport sys\n\nfrom setuptools import setup, find_packages\nfrom volcengine import VERSION\n\ninstall_requires = [\n    \"requests>=2.25.1\",\n    \"retry>=0.9.2,<1.0.0\",\n    \"pytz>=2020.5\",\n    \"pycryptodome>=3.9.9,<4.0.0\",\n    \"protobuf>=3.18.3\",\n    \"google>=3.0.0\",\n    \"six>=1.0\",\n]\n\nsetup(\n    name=\"volcengine\",\n    version=VERSION,\n    keywords=[\"pip\", \"volcengine\", \"volc-sdk-python\"],\n    description=\"The Volcengine SDK for Python\",\n    license=\"MIT License\",\n\n    url=\"https://github.com/Volcengine/volc-sdk-python\",\n    author=\"Volcengine SDK\",\n\n    packages=find_packages(),\n    include_package_data=True,\n    platforms=\"any\",\n    install_requires=install_requires\n)\n"
  },
  {
    "path": "volcengine/ApiInfo.py",
    "content": "# coding:utf-8\n\n\nclass ApiInfo(object):\n    def __init__(self, method, path, query, form, header):\n        self.method = method\n        self.path = path\n        self.query = query\n        self.form = form\n        self.header = header\n\n    def __str__(self):\n        return 'method: ' + self.method + ', path: ' + self.path\n"
  },
  {
    "path": "volcengine/Credentials.py",
    "content": "# coding:utf-8\n\n\nclass Credentials(object):\n    def __init__(self, ak, sk, service, region, session_token=''):\n        self.ak = ak\n        self.sk = sk\n        self.service = service\n        self.region = region\n        self.session_token = session_token\n\n    def set_ak(self, ak):\n        self.ak = ak\n\n    def set_sk(self, sk):\n        self.sk = sk\n\n    def set_session_token(self, session_token):\n        self.session_token = session_token\n"
  },
  {
    "path": "volcengine/Policy.py",
    "content": "# coding:utf-8\nimport json\n\n\nclass ComplexEncoder(json.JSONEncoder):\n    def default(self, o):\n        if isinstance(o, Statement):\n            return {'Effect': o.effect,\n                    'Action': o.action,\n                    'Resource': o.resource}\n        if isinstance(o, InnerToken):\n            return {\n                'LTAccessKeyId': o.lt_access_key_id,\n                'AccessKeyId': o.access_key_id,\n                'SignedSecretAccessKey': o.signed_secret_access_key,\n                'ExpiredTime': o.expired_time,\n                'PolicyString': o.policy_string,\n                'Signature': o.signature\n            }\n        if isinstance(o, Policy):\n            return {\n                'Statement': [item for item in o.statements]\n            }\n        return json.JSONEncoder.default(self, o)\n\n\nclass Policy(object):\n    def __init__(self, statements):\n        self.statements = statements\n\n\nclass Statement(object):\n    def __init__(self):\n        self.effect = ''\n        self.action = []\n        self.resource = []\n        self.condition = ''\n\n    @staticmethod\n    def new_allow_statement(actions, resources):\n        s = Statement()\n        s.effect = \"Allow\"\n        s.action = actions\n        s.resource = resources\n        return s\n\n    @staticmethod\n    def new_deny_statement(actions, resources):\n        s = Statement()\n        s.effect = \"Deny\"\n        s.action = actions\n        s.resource = resources\n        return s\n\n\nclass SecurityToken2(object):\n    def __init__(self):\n        self.access_key_id = ''\n        self.secret_access_key = ''\n        self.session_token = ''\n        self.expired_time = ''\n        self.current_time = ''\n\n    def __str__(self):\n        return json.dumps({\n            'AccessKeyID': self.access_key_id,\n            'SecretAccessKey': self.secret_access_key,\n            'SessionToken': self.session_token,\n            'ExpiredTime': self.expired_time,\n            'CurrentTime': self.current_time\n        })\n\n\nclass InnerToken(object):\n    def __init__(self):\n        self.lt_access_key_id = ''\n        self.access_key_id = ''\n        self.signed_secret_access_key = ''\n        self.expired_time = 0\n        self.policy_string = ''\n        self.signature = ''\n\n    def __str__(self):\n        return json.dumps({\n            'LTAccessKeyId': self.lt_access_key_id,\n            'AccessKeyId': self.access_key_id,\n            'SignedSecretAccessKey': self.signed_secret_access_key,\n            'ExpiredTime': self.expired_time,\n            'PolicyString': self.policy_string,\n            'Signature': self.signature\n        })\n"
  },
  {
    "path": "volcengine/ServiceInfo.py",
    "content": "# coding: utf-8\n\n\nclass ServiceInfo(object):\n    def __init__(self, host, header, credentials, connection_timeout, socket_timeout, scheme='http'):\n        self.host = host\n        self.header = header\n        self.credentials = credentials\n        self.connection_timeout = connection_timeout\n        self.socket_timeout = socket_timeout\n        self.scheme = scheme\n"
  },
  {
    "path": "volcengine/ServiceInfoHttps.py",
    "content": "# coding: utf-8\n\n\nclass ServiceInfoSms(object):\n    def __init__(self, host, header, credentials, connection_timeout, socket_timeout, scheme='https'):\n        self.host = host\n        self.header = header\n        self.credentials = credentials\n        self.connection_timeout = connection_timeout\n        self.socket_timeout = socket_timeout\n        self.scheme = scheme\n"
  },
  {
    "path": "volcengine/__init__.py",
    "content": "# coding:utf-8\nVERSION='v1.0.222'\n"
  },
  {
    "path": "volcengine/adblocker/AdBlockerService.py",
    "content": "import json\nimport threading\n\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\nimport redo\nfrom requests import exceptions\nclass AdBlockService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(AdBlockService, \"_instance\"):\n            with AdBlockService._instance_lock:\n                if not hasattr(AdBlockService, \"_instance\"):\n                    AdBlockService._instance = object.__new__(cls)\n        return AdBlockService._instance\n\n    def __init__(self):\n        self.service_info = AdBlockService.get_service_info()\n        self.api_info = AdBlockService.get_api_info()\n        super(AdBlockService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info():\n        service_info = ServiceInfo(\"riskcontrol.volcengineapi.com\", {'Accept': 'application/json'},\n                                   Credentials('', '', 'AdBlocker', 'cn-north-1'), 5, 5)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\"AdBlock\": ApiInfo(\"POST\", \"/\", {\"Action\": \"AdBlock\", \"Version\": \"2021-01-06\"}, {}, {})}\n        return api_info\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def ad_block(self, params, body):\n        res = self.json(\"AdBlock\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n\n\n"
  },
  {
    "path": "volcengine/adblocker/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/auth/MetaData.py",
    "content": "# coding:utf-8\n\n\nclass MetaData(object):\n    def __init__(self):\n        self.algorithm = ''\n        self.credential_scope = ''\n        self.signed_headers = ''\n        self.date = ''\n        self.region = ''\n        self.service = ''\n\n    def set_date(self, date):\n        self.date = date\n\n    def set_service(self, service):\n        self.service = service\n\n    def set_region(self, region):\n        self.region = region\n\n    def set_algorithm(self, algorithm):\n        self.algorithm = algorithm\n\n    def set_credential_scope(self, credential_scope):\n        self.credential_scope = credential_scope\n\n    def set_signed_headers(self, signed_headers):\n        self.signed_headers = signed_headers"
  },
  {
    "path": "volcengine/auth/SignParam.py",
    "content": "# coding:utf-8\nimport datetime\nfrom collections import OrderedDict\n\n\nclass SignParam(object):\n    def __init__(self):\n        self.body = ''\n        self.query = OrderedDict()\n        self.date = datetime.datetime.now()\n        self.header_list = OrderedDict()\n        self.is_sign_url = False\n        self.host = ''\n        self.path = '/'\n        self.method = ''\n\n    def set_date(self, date):\n        self.date = date\n\n    def set_body(self, body):\n        self.body = body\n\n    def set_host(self, host):\n        self.host = host\n\n    def set_query(self, query):\n        self.query = query\n\n    def set_header_list(self, header_list):\n        self.header_list = header_list\n\n    def set_is_sign_url(self, is_sign_url):\n        self.is_sign_url = is_sign_url\n\n    def set_path(self, path):\n        self.path = path\n\n    def set_method(self, method):\n        self.method = method\n\n\n\n\n"
  },
  {
    "path": "volcengine/auth/SignResult.py",
    "content": "# coding:utf-8\n\nclass SignResult(object):\n    def __init__(self):\n        self.xdate = ''\n        self.xCredential = ''\n        self.xAlgorithm = ''\n        self.xSignedHeaders = ''\n        self.xSignedQueries = ''\n        self.xSignature = ''\n        self.xContextSha256 = ''\n        self.xSecurityToken = ''\n\n        self.authorization = ''\n\n    def __str__(self):\n        return '\\n'.join(['%s:%s' % item for item in self.__dict__.items()])\n"
  },
  {
    "path": "volcengine/auth/SignerV4.py",
    "content": "# coding : utf-8\nimport datetime\nimport sys\n\nimport pytz\n\ntry:\n    from urllib import urlencode\nexcept:\n    from urllib.parse import urlencode\n\nfrom volcengine.auth.MetaData import MetaData\nfrom volcengine.util.Util import Util\nfrom volcengine.base.Request import Request\nfrom volcengine.auth.SignResult import SignResult\n\nclass SignerV4(object):\n    @staticmethod\n    def sign(request, credentials):\n        if request.path == '':\n            request.path = '/'\n        if request.method != 'GET' and not ('Content-Type' in request.headers):\n            request.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8'\n\n        format_date = SignerV4.get_current_format_date()\n        request.headers['X-Date'] = format_date\n        if credentials.session_token != '':\n            request.headers['X-Security-Token'] = credentials.session_token\n\n        md = MetaData()\n        md.set_algorithm('HMAC-SHA256')\n        md.set_service(credentials.service)\n        md.set_region(credentials.region)\n        md.set_date(format_date[:8])\n\n        hashed_canon_req = SignerV4.hashed_canonical_request_v4(request, md)\n        md.set_credential_scope('/'.join([md.date, md.region, md.service, 'request']))\n\n        signing_str = '\\n'.join([md.algorithm, format_date, md.credential_scope, hashed_canon_req])\n        signing_key = SignerV4.get_signing_secret_key_v4(credentials.sk, md.date, md.region, md.service)\n        sign = Util.to_hex(Util.hmac_sha256(signing_key, signing_str))\n        request.headers['Authorization'] = SignerV4.build_auth_header_v4(sign, md, credentials)\n        return\n\n    @staticmethod\n    def sign_url(request, credentials):\n        format_date = SignerV4.get_current_format_date()\n        date = format_date[:8]\n\n        md = MetaData()\n        md.set_date(date)\n        md.set_service(credentials.service)\n        md.set_region(credentials.region)\n        md.set_signed_headers('')\n        md.set_algorithm('HMAC-SHA256')\n        md.set_credential_scope('/'.join([md.date, md.region, md.service, 'request']))\n\n        query = request.query\n        query['X-Date'] = format_date\n        query['X-NotSignBody'] = ''\n        query['X-Credential'] = credentials.ak + '/' + md.credential_scope\n        query['X-Algorithm'] = md.algorithm\n        query['X-SignedHeaders'] = md.signed_headers\n        query['X-SignedQueries'] = ''\n        query['X-SignedQueries'] = ';'.join(sorted(query.keys()))\n        if credentials.session_token != '':\n            query['X-Security-Token'] = credentials.session_token\n\n        hashed_canon_req = SignerV4.hashed_simple_canonical_request_v4(request, md)\n        signing_str = '\\n'.join([md.algorithm, format_date, md.credential_scope, hashed_canon_req])\n        signing_key = SignerV4.get_signing_secret_key_v4(credentials.sk, md.date, md.region, md.service)\n        sign = SignerV4.signature_v4(signing_key, signing_str)\n\n        query['X-Signature'] = sign\n        return urlencode(query)\n\n    @staticmethod\n    def sign_only(param, credentials):\n        request = Request()\n        request.host = param.host\n        request.method = param.method\n        request.path = param.path\n        request.body = param.body\n        request.query = param.query\n        request.headers = param.header_list\n\n        format_date = param.date.strftime(\"%Y%m%dT%H%M%SZ\")\n        date = format_date[:8]\n        request.headers['X-Date'] = format_date\n        md = MetaData()\n        md.set_algorithm('HMAC-SHA256')\n        md.set_service(credentials.service)\n        md.set_region(credentials.region)\n        md.set_date(date)\n        md.set_credential_scope('/'.join([md.date, md.region, md.service, 'request']))\n\n        if param.is_sign_url:\n            md.set_signed_headers('')\n            md.set_credential_scope('/'.join([md.date, md.region, md.service, 'request']))\n            query = request.query\n            query['X-Date'] = format_date\n            query['X-NotSignBody'] = ''\n            query['X-Credential'] = credentials.ak + '/' + md.credential_scope\n            query['X-Algorithm'] = md.algorithm\n            query['X-SignedHeaders'] = md.signed_headers\n            query['X-SignedQueries'] = ''\n            query['X-SignedQueries'] = ';'.join(sorted(query.keys()))\n            if credentials.session_token != '':\n                query['X-Security-Token'] = credentials.session_token\n            hashed_canon_req = SignerV4.hashed_simple_canonical_request_v4(request, md)\n        else:\n            if credentials.session_token != '':\n                request.headers['X-Security-Token'] = credentials.session_token\n            hashed_canon_req = SignerV4.hashed_canonical_request_v4(request, md)\n\n        signing_str = '\\n'.join([md.algorithm, format_date, md.credential_scope, hashed_canon_req])\n        signing_key = SignerV4.get_signing_secret_key_v4(credentials.sk, md.date, md.region, md.service)\n        sign = SignerV4.signature_v4(signing_key, signing_str)\n\n        result = SignResult()\n        result.xdate = format_date\n        result.xAlgorithm = md.algorithm\n        if param.is_sign_url:\n            result.xSignedQueries = request.query['X-SignedQueries']\n        result.xSignedHeaders = md.signed_headers\n        result.xCredential = credentials.ak + '/' + md.credential_scope\n        result.xSignature = sign\n        result.xContextSha256 = request.headers['X-Content-Sha256']\n        result.authorization = result.xAlgorithm + \" Credential=\" + result.xCredential + \", SignedHeaders=\" + md.signed_headers + \", Signature=\" + result.xSignature\n        result.xSecurityToken = credentials.session_token\n\n        return result\n\n    @staticmethod\n    def hashed_simple_canonical_request_v4(request, meta):\n        body = bytes()\n        # if sys.version_info[0] == 3:\n        #     body_hash = Util.sha256(body.decode('utf-8'))\n        # else:\n        body_hash = Util.sha256(body)\n\n        if request.path == '':\n            request.path = '/'\n\n        canoncial_request = '\\n'.join(\n            [request.method, Util.norm_uri(request.path), Util.norm_query(request.query), '\\n',\n             meta.signed_headers, body_hash])\n        # if sys.version_info[0] == 3:\n        #     return Util.sha256(canoncial_request.decode('utf-8'))\n        # else:\n        return Util.sha256(canoncial_request)\n\n    @staticmethod\n    def hashed_canonical_request_v4(request, meta):\n        # if sys.version_info[0] == 3:\n        #     body_hash = Util.sha256(request.body.decode('utf-8'))\n        # else:\n        body_hash = Util.sha256(request.body)\n        request.headers['X-Content-Sha256'] = body_hash\n\n        signed_headers = dict()\n        for key in request.headers:\n            if key in ['Content-Type', 'Content-Md5', 'Host'] or key.startswith('X-'):\n                signed_headers[key.lower()] = request.headers[key]\n\n        if 'host' in signed_headers:\n            v = signed_headers['host']\n            if v.find(':') != -1:\n                split = v.split(':')\n                port = split[1]\n                if str(port) == '80' or str(port) == '443':\n                    signed_headers['host'] = split[0]\n\n        signed_str = ''\n        for key in sorted(signed_headers.keys()):\n            signed_str += key + ':' + signed_headers[key] + '\\n'\n\n        meta.set_signed_headers(';'.join(sorted(signed_headers.keys())))\n\n        canoncial_request = '\\n'.join(\n            [request.method, Util.norm_uri(request.path), Util.norm_query(request.query), signed_str,\n             meta.signed_headers, body_hash])\n\n        return Util.sha256(canoncial_request)\n\n    @staticmethod\n    def signature_v4(signing_key, signing_str):\n        return Util.to_hex(Util.hmac_sha256(signing_key, signing_str))\n\n    @staticmethod\n    def get_signing_secret_key_v4(sk, date, region, service):\n        if sys.version_info[0] == 3:\n            kdate = Util.hmac_sha256(bytes(sk, encoding='utf-8'), date)\n        else:\n            kdate = Util.hmac_sha256(sk.encode('utf-8'), date)\n        kregion = Util.hmac_sha256(kdate, region)\n        kservice = Util.hmac_sha256(kregion, service)\n        return Util.hmac_sha256(kservice, 'request')\n\n    @staticmethod\n    def build_auth_header_v4(signature, meta, credentials):\n        credential = credentials.ak + '/' + meta.credential_scope\n        return meta.algorithm + ' Credential=' + credential + ', SignedHeaders=' + meta.signed_headers + ', Signature=' + signature\n\n    @staticmethod\n    def get_current_format_date():\n        return datetime.datetime.now(tz=pytz.timezone('UTC')).strftime(\"%Y%m%dT%H%M%SZ\")\n"
  },
  {
    "path": "volcengine/auth/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/base/Request.py",
    "content": "# coding : utf-8\nfrom collections import OrderedDict\n\ntry:\n    from urllib import urlencode\nexcept:\n    from urllib.parse import urlencode\n\n\nclass Request(object):\n    def __init__(self):\n        self.schema = ''\n        self.method = ''\n        self.host = ''\n        self.path = ''\n        self.headers = OrderedDict()\n        self.query = OrderedDict()\n        self.body = ''\n        self.form = dict()\n        self.connection_timeout = 0\n        self.socket_timeout = 0\n\n    def set_schema(self, schema):\n        self.schema = schema\n\n    def set_shema(self, schema):\n        \"\"\"\n        Deprecated: Use set_schema() instead.\n        This method will be removed in a future version.\n        \"\"\"\n        self.set_schema(schema)\n\n    def set_method(self, method):\n        self.method = method\n\n    def set_host(self, host):\n        self.host = host\n\n    def set_path(self, path):\n        self.path = path\n\n    def set_headers(self, headers):\n        self.headers = headers\n\n    def set_query(self, query):\n        self.query = query\n\n    def set_body(self, body):\n        self.body = body\n\n    def set_connection_timeout(self, connection_timeout):\n        self.connection_timeout = connection_timeout\n\n    def set_socket_timeout(self, socket_timeout):\n        self.socket_timeout = socket_timeout\n\n    def build(self, doseq=0):\n        return self.schema + '://' + self.host + self.path + '?' + urlencode(self.query, doseq)\n"
  },
  {
    "path": "volcengine/base/Service.py",
    "content": "# coding: utf-8\nimport json\nimport logging\nimport os\nimport time\nfrom collections import OrderedDict\n\nfrom requests.auth import AuthBase\n\ntry:\n    from urllib.parse import urlencode\nexcept ImportError:\n    from urllib import urlencode\n\ntry:\n    import configparser as configparser\nexcept ImportError:\n    import ConfigParser as configparser\n\nimport requests\n\nfrom volcengine.Policy import SecurityToken2, InnerToken, ComplexEncoder\nfrom volcengine.auth.SignerV4 import SignerV4\nfrom volcengine.base.Request import Request\nfrom volcengine.util.Util import *\nfrom volcengine import VERSION\n\n\nclass VolcAuth(AuthBase):\n    def __init__(self, client, request):\n        # setup any auth-related data here\n        self.client = client\n        self.request = request\n\n    def __call__(self, r):\n        self.request.body = r.body\n        if \"Content-Type\" in r.headers:\n            self.request.headers[\"Content-Type\"] = r.headers[\"Content-Type\"]\n        if \"Content-Length\" in r.headers:\n            self.request.headers[\"Content-Length\"] = r.headers[\"Content-Length\"]\n        SignerV4.sign(self.request, self.client.service_info.credentials)\n        for k in self.request.headers:\n            v = self.request.headers[k]\n            r.headers[k] = v\n        return r.headers\n\n\nclass Service(object):\n    def __init__(self, service_info, api_info):\n        self.service_info = service_info\n        self.api_info = api_info\n        self.session = requests.session()\n        self.init()\n\n    def init(self):\n        if 'VOLC_ACCESSKEY' in os.environ and 'VOLC_SECRETKEY' in os.environ:\n            self.service_info.credentials.set_ak(os.environ['VOLC_ACCESSKEY'])\n            self.service_info.credentials.set_sk(os.environ['VOLC_SECRETKEY'])\n        else:\n            if os.environ.get('HOME', None) is None:\n                return\n            # 先尝试从credentials中读取ak、sk，credentials不存在则从config中读取\n            path_ini = os.environ['HOME'] + '/.volc/credentials'\n            path_json = os.environ['HOME'] + '/.volc/config'\n            if os.path.isfile(path_ini):\n                conf = configparser.ConfigParser()\n                conf.read(path_ini)\n                default_section, ak_option, sk_option = \"default\", \"access_key_id\", \"secret_access_key\"\n                if conf.has_section(default_section):\n                    if conf.has_option(default_section, ak_option):\n                        ak = conf.get(default_section, ak_option)\n                        self.service_info.credentials.set_ak(ak)\n                    if conf.has_option(default_section, sk_option):\n                        sk = conf.get(default_section, sk_option)\n                        self.service_info.credentials.set_sk(sk)\n            elif os.path.isfile(path_json):\n                with open(path_json, 'r') as f:\n                    try:\n                        j = json.load(f)\n                    except Exception:\n                        logging.warning(\"%s is not json file\", path_json)\n                        return\n                    if 'ak' in j:\n                        self.service_info.credentials.set_ak(j['ak'])\n                    if 'sk' in j:\n                        self.service_info.credentials.set_sk(j['sk'])\n\n    def set_ak(self, ak):\n        self.service_info.credentials.set_ak(ak)\n\n    def set_sk(self, sk):\n        self.service_info.credentials.set_sk(sk)\n\n    def set_session_token(self, session_token):\n        self.service_info.credentials.set_session_token(session_token)\n\n    def set_host(self, host):\n        self.service_info.host = host\n\n    def set_scheme(self, scheme):\n        self.service_info.scheme = scheme\n    \n    def set_connection_timeout(self, connection_timeout):\n        self.service_info.connection_timeout = connection_timeout\n\n    def set_socket_timeout(self, socket_timeout):\n        self.service_info.socket_timeout = socket_timeout\n\n    def get_sign_url(self, api, params):\n        if not (api in self.api_info):\n            raise Exception(\"no such api\")\n        api_info = self.api_info[api]\n\n        mquery = self.merge(api_info.query, params)\n        r = Request()\n        r.set_schema(self.service_info.scheme)\n        r.set_method(api_info.method)\n        r.set_path(api_info.path)\n        r.set_query(mquery)\n\n        return SignerV4.sign_url(r, self.service_info.credentials)\n\n    def get(self, api, params, doseq=0):\n        if not (api in self.api_info):\n            raise Exception(\"no such api\")\n        api_info = self.api_info[api]\n\n        r = self.prepare_request(api_info, params, doseq)\n\n        SignerV4.sign(r, self.service_info.credentials)\n\n        url = r.build(doseq)\n        resp = self.session.get(url, headers=r.headers,\n                                timeout=(self.service_info.connection_timeout, self.service_info.socket_timeout))\n        if resp.status_code == 200:\n            return resp.text\n        else:\n            raise Exception(resp.text)\n\n    def post(self, api, params, form):\n        if not (api in self.api_info):\n            raise Exception(\"no such api\")\n        api_info = self.api_info[api]\n        r = self.prepare_request(api_info, params)\n        r.headers['Content-Type'] = 'application/x-www-form-urlencoded'\n        r.form = self.merge(api_info.form, form)\n        r.body = urlencode(r.form, True)\n        SignerV4.sign(r, self.service_info.credentials)\n\n        url = r.build()\n\n        resp = self.session.post(url, headers=r.headers, data=r.form,\n                                 timeout=(self.service_info.connection_timeout, self.service_info.socket_timeout))\n        if resp.status_code == 200:\n            return resp.text\n        else:\n            raise Exception(resp.text)\n\n    def request(self, api, params, data, files=None, reqConfig=None):\n\n        if not (api in self.api_info):\n            raise Exception(\"no such api\")\n        api_info = self.api_info[api]\n\n        r = self.prepare_request(api_info, params)\n        if reqConfig is not None:\n            reqConfig(r)\n        url = r.build()\n\n        resp = self.session.request(api_info.method, url, data=data, files=files,\n                                    timeout=(self.service_info.connection_timeout, self.service_info.socket_timeout),\n                                    auth=VolcAuth(self, r))\n        if resp.status_code == 200:\n            return resp.text\n        else:\n            raise Exception(resp.text)\n\n    def json(self, api, params, body):\n        if not (api in self.api_info):\n            raise Exception(\"no such api\")\n        api_info = self.api_info[api]\n        r = self.prepare_request(api_info, params)\n        r.headers['Content-Type'] = 'application/json'\n        r.body = body\n\n        SignerV4.sign(r, self.service_info.credentials)\n\n        url = r.build()\n        resp = self.session.post(url, headers=r.headers, data=r.body,\n                                 timeout=(self.service_info.connection_timeout, self.service_info.socket_timeout))\n        if resp.status_code == 200:\n            return json.dumps(resp.json())\n        else:\n            raise Exception(resp.text.encode(\"utf-8\"))\n\n    def put(self, url, file_path, headers):\n        with open(file_path, 'rb') as f:\n            resp = self.session.put(url, headers=headers, data=f)\n            headers[\"X-Tt-Logid\"] = resp.headers.get(\"X-Tt-Logid\", \"\")\n            if resp.status_code == 200:\n                return True, resp.text.encode(\"utf-8\")\n            else:\n                return False, resp.text.encode(\"utf-8\")\n\n    def put_data(self, url, data, headers):\n        resp = self.session.put(url, headers=headers, data=data)\n        headers[\"X-Tt-Logid\"] = resp.headers.get(\"X-Tt-Logid\", \"\")\n        if resp.status_code == 200:\n            return True, resp.text.encode(\"utf-8\")\n        else:\n            return False, resp.text.encode(\"utf-8\")\n\n    def prepare_request(self, api_info, params, doseq=0):\n        for key in params:\n            if type(params[key]) == int or type(params[key]) == float or type(params[key]) == bool:\n                params[key] = str(params[key])\n            elif sys.version_info[0] != 3:\n                if type(params[key]) == unicode:\n                    params[key] = params[key].encode('utf-8')\n            elif type(params[key]) == list:\n                if not doseq:\n                    params[key] = ','.join(params[key])\n\n        connection_timeout = self.service_info.connection_timeout\n        socket_timeout = self.service_info.socket_timeout\n\n        r = Request()\n        r.set_schema(self.service_info.scheme)\n        r.set_method(api_info.method)\n        r.set_connection_timeout(connection_timeout)\n        r.set_socket_timeout(socket_timeout)\n\n        mheaders = self.merge(api_info.header, self.service_info.header)\n        mheaders['Host'] = self.service_info.host\n        mheaders['User-Agent'] = 'volc-sdk-python/' + VERSION\n        r.set_headers(mheaders)\n\n        mquery = self.merge(api_info.query, params)\n        r.set_query(mquery)\n\n        r.set_host(self.service_info.host)\n        r.set_path(api_info.path)\n\n        return r\n\n    def merge(self, param1, param2):\n        od = OrderedDict()\n        for key in param1:\n            od[key] = param1[key]\n\n        for key in param2:\n            od[key] = param2[key]\n\n        return od\n\n    def sign_sts2(self, policy, expire):\n        sk = self.service_info.credentials.sk\n        key = hashlib.md5(sk.encode('utf-8')).digest()\n\n        sts = SecurityToken2()\n        sts.access_key_id = Util.generate_access_key_id('AKTP')\n        sts.secret_access_key = Util.generate_secret_key()\n        now = int(time.time())\n        sts.current_time = Service.to_rfc3339(now)\n\n        if expire < 60:\n            expire = 60\n        expire = now + expire\n        sts.expired_time = Service.to_rfc3339(expire)\n\n        inner_token = InnerToken()\n        inner_token.lt_access_key_id = self.service_info.credentials.ak\n        inner_token.access_key_id = sts.access_key_id\n        if policy is None:\n            inner_token.policy_string = ''\n        else:\n            inner_token.policy_string = json.dumps(\n                policy, cls=ComplexEncoder, sort_keys=True).replace(' ', '')\n        inner_token.signed_secret_access_key = Util.aes_encrypt_cbc_with_base64(\n            sts.secret_access_key, key)\n        inner_token.expired_time = expire\n\n        sign_str = '{}|{}|{}|{}|{}'.format(inner_token.lt_access_key_id, inner_token.access_key_id,\n                                           inner_token.expired_time, inner_token.signed_secret_access_key,\n                                           inner_token.policy_string)\n        inner_token.signature = Util.to_hex(Util.hmac_sha256(key, sign_str))\n\n        sts.session_token = 'STS2' + base64.b64encode(\n            json.dumps(inner_token, cls=ComplexEncoder, sort_keys=True).replace(' ', '').encode('utf-8')).decode()\n        return sts\n\n    @staticmethod\n    def to_rfc3339(t):\n        format_time = time.strftime('%Y-%m-%dT%H:%M:%S%z', time.localtime(t))\n        pos = format_time.find('+')\n        if pos == -1:\n            pos = format_time.find('-')\n        return format_time[:pos + 3] + ':' + format_time[pos + 3:pos + 5]\n"
  },
  {
    "path": "volcengine/base/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/base/models/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/base/models/base/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/base/models/base/base_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/base/base.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\nfrom google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\x1avolcengine/base/base.proto\\x12\\x1bVolcengine.Base.Models.Base\\x1a google/protobuf/descriptor.proto\\\"\\xa2\\x01\\n\\x10ResponseMetadata\\x12\\x11\\n\\tRequestId\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x41\\x63tion\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07Version\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07Service\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06Region\\x18\\x05 \\x01(\\t\\x12\\x39\\n\\x05\\x45rror\\x18\\x06 \\x01(\\x0b\\x32*.Volcengine.Base.Models.Base.ResponseError\\\".\\n\\rResponseError\\x12\\x0c\\n\\x04\\x43ode\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07Message\\x18\\x02 \\x01(\\tB\\xc0\\x01\\n&com.volcengine.service.base.model.baseB\\x04\\x42\\x61seP\\x01Z>github.com/volcengine/volc-sdk-golang/service/base/models/base\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02\\x1dVolc\\\\Service\\\\Base\\\\Models\\\\Base\\xe2\\x02$Volc\\\\Service\\\\Base\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_RESPONSEMETADATA = DESCRIPTOR.message_types_by_name['ResponseMetadata']\n_RESPONSEERROR = DESCRIPTOR.message_types_by_name['ResponseError']\nResponseMetadata = _reflection.GeneratedProtocolMessageType('ResponseMetadata', (_message.Message,), {\n  'DESCRIPTOR' : _RESPONSEMETADATA,\n  '__module__' : 'volcengine.base.base_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Base.Models.Base.ResponseMetadata)\n  })\n_sym_db.RegisterMessage(ResponseMetadata)\n\nResponseError = _reflection.GeneratedProtocolMessageType('ResponseError', (_message.Message,), {\n  'DESCRIPTOR' : _RESPONSEERROR,\n  '__module__' : 'volcengine.base.base_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Base.Models.Base.ResponseError)\n  })\n_sym_db.RegisterMessage(ResponseError)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n&com.volcengine.service.base.model.baseB\\004BaseP\\001Z>github.com/volcengine/volc-sdk-golang/service/base/models/base\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002\\035Volc\\\\Service\\\\Base\\\\Models\\\\Base\\342\\002$Volc\\\\Service\\\\Base\\\\Models\\\\GPBMetadata'\n  _RESPONSEMETADATA._serialized_start=94\n  _RESPONSEMETADATA._serialized_end=256\n  _RESPONSEERROR._serialized_start=258\n  _RESPONSEERROR._serialized_end=304\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/base/models/business/VQScore_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/business/VQScore.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\x1blive/business/VQScore.proto\\x12\\x1fVolcengine.Live.Models.Business\\\"\\x17\\n\\tVQScoreID\\x12\\n\\n\\x02ID\\x18\\x01 \\x01(\\t\\\"-\\n\\tScoreInfo\\x12\\x11\\n\\tPointTime\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05Score\\x18\\x02 \\x01(\\x02\\\"d\\n\\rAddrScoreInfo\\x12\\x10\\n\\x08\\x41\\x64\\x64rType\\x18\\x01 \\x01(\\x03\\x12\\x41\\n\\rScoreInfoList\\x18\\x02 \\x03(\\x0b\\x32*.Volcengine.Live.Models.Business.ScoreInfo\\\"\\x88\\x02\\n\\x0bVQScoreInfo\\x12\\x10\\n\\x08MainAddr\\x18\\x01 \\x01(\\t\\x12\\x14\\n\\x0c\\x43ontrastAddr\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x03 \\x01(\\x03\\x12\\x15\\n\\rTotalPointNum\\x18\\x04 \\x01(\\x03\\x12\\x18\\n\\x10MainAverageScore\\x18\\x05 \\x01(\\x02\\x12\\x1c\\n\\x14\\x43ontrastAverageScore\\x18\\x06 \\x01(\\x02\\x12\\x12\\n\\nDifference\\x18\\x07 \\x01(\\x02\\x12\\x15\\n\\rDifferencePer\\x18\\x08 \\x01(\\x02\\x12\\x45\\n\\rAddrScoreList\\x18\\t \\x03(\\x0b\\x32..Volcengine.Live.Models.Business.AddrScoreInfo\\\"R\\n\\x0fVQScoreTaskInfo\\x12\\n\\n\\x02ID\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x02 \\x01(\\x03\\x12\\x0e\\n\\x06Status\\x18\\x03 \\x01(\\x03\\x12\\x11\\n\\tAccountID\\x18\\x04 \\x01(\\t\\\"\\x8c\\x01\\n\\x13VQScoreTaskListInfo\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\r\\n\\x05Total\\x18\\x04 \\x01(\\x03\\x12\\x42\\n\\x08TaskList\\x18\\x05 \\x03(\\x0b\\x32\\x30.Volcengine.Live.Models.Business.VQScoreTaskInfoB\\xcf\\x01\\n*com.volcengine.service.live.model.businessB\\x07VQScoreP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_VQSCOREID = DESCRIPTOR.message_types_by_name['VQScoreID']\n_SCOREINFO = DESCRIPTOR.message_types_by_name['ScoreInfo']\n_ADDRSCOREINFO = DESCRIPTOR.message_types_by_name['AddrScoreInfo']\n_VQSCOREINFO = DESCRIPTOR.message_types_by_name['VQScoreInfo']\n_VQSCORETASKINFO = DESCRIPTOR.message_types_by_name['VQScoreTaskInfo']\n_VQSCORETASKLISTINFO = DESCRIPTOR.message_types_by_name['VQScoreTaskListInfo']\nVQScoreID = _reflection.GeneratedProtocolMessageType('VQScoreID', (_message.Message,), {\n  'DESCRIPTOR' : _VQSCOREID,\n  '__module__' : 'live.business.VQScore_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.VQScoreID)\n  })\n_sym_db.RegisterMessage(VQScoreID)\n\nScoreInfo = _reflection.GeneratedProtocolMessageType('ScoreInfo', (_message.Message,), {\n  'DESCRIPTOR' : _SCOREINFO,\n  '__module__' : 'live.business.VQScore_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.ScoreInfo)\n  })\n_sym_db.RegisterMessage(ScoreInfo)\n\nAddrScoreInfo = _reflection.GeneratedProtocolMessageType('AddrScoreInfo', (_message.Message,), {\n  'DESCRIPTOR' : _ADDRSCOREINFO,\n  '__module__' : 'live.business.VQScore_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.AddrScoreInfo)\n  })\n_sym_db.RegisterMessage(AddrScoreInfo)\n\nVQScoreInfo = _reflection.GeneratedProtocolMessageType('VQScoreInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VQSCOREINFO,\n  '__module__' : 'live.business.VQScore_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.VQScoreInfo)\n  })\n_sym_db.RegisterMessage(VQScoreInfo)\n\nVQScoreTaskInfo = _reflection.GeneratedProtocolMessageType('VQScoreTaskInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VQSCORETASKINFO,\n  '__module__' : 'live.business.VQScore_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.VQScoreTaskInfo)\n  })\n_sym_db.RegisterMessage(VQScoreTaskInfo)\n\nVQScoreTaskListInfo = _reflection.GeneratedProtocolMessageType('VQScoreTaskListInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VQSCORETASKLISTINFO,\n  '__module__' : 'live.business.VQScore_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.VQScoreTaskListInfo)\n  })\n_sym_db.RegisterMessage(VQScoreTaskListInfo)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.businessB\\007VQScoreP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _VQSCOREID._serialized_start=64\n  _VQSCOREID._serialized_end=87\n  _SCOREINFO._serialized_start=89\n  _SCOREINFO._serialized_end=134\n  _ADDRSCOREINFO._serialized_start=136\n  _ADDRSCOREINFO._serialized_end=236\n  _VQSCOREINFO._serialized_start=239\n  _VQSCOREINFO._serialized_end=503\n  _VQSCORETASKINFO._serialized_start=505\n  _VQSCORETASKINFO._serialized_end=587\n  _VQSCORETASKLISTINFO._serialized_start=590\n  _VQSCORETASKLISTINFO._serialized_end=730\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/base/models/business/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/base/models/business/addr_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/business/addr.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\x18live/business/addr.proto\\x12\\x1fVolcengine.Live.Models.Business\\\"R\\n\\x15GeneratePlayURLResult\\x12\\x39\\n\\x07URLList\\x18\\x01 \\x03(\\x0b\\x32(.Volcengine.Live.Models.Business.PlayURL\\\"C\\n\\x07PlayURL\\x12\\x0b\\n\\x03URL\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03\\x43\\x44N\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08Protocol\\x18\\x03 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x04 \\x01(\\t\\\"\\xbf\\x01\\n\\x15GeneratePushURLResult\\x12\\x13\\n\\x0bPushURLList\\x18\\x01 \\x03(\\t\\x12G\\n\\x11PushURLListDetail\\x18\\x02 \\x03(\\x0b\\x32,.Volcengine.Live.Models.Business.PushURLItem\\x12\\x18\\n\\x10TsOverSrtURLList\\x18\\x03 \\x03(\\t\\x12\\x1a\\n\\x12RtmpOverSrtURLList\\x18\\x04 \\x03(\\t\\x12\\x12\\n\\nRtmURLList\\x18\\x05 \\x03(\\t\\\"A\\n\\x0bPushURLItem\\x12\\x0b\\n\\x03URL\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tDomainApp\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nStreamSign\\x18\\x03 \\x01(\\tB\\xcc\\x01\\n*com.volcengine.service.live.model.businessB\\x04\\x41\\x64\\x64rP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_GENERATEPLAYURLRESULT = DESCRIPTOR.message_types_by_name['GeneratePlayURLResult']\n_PLAYURL = DESCRIPTOR.message_types_by_name['PlayURL']\n_GENERATEPUSHURLRESULT = DESCRIPTOR.message_types_by_name['GeneratePushURLResult']\n_PUSHURLITEM = DESCRIPTOR.message_types_by_name['PushURLItem']\nGeneratePlayURLResult = _reflection.GeneratedProtocolMessageType('GeneratePlayURLResult', (_message.Message,), {\n  'DESCRIPTOR' : _GENERATEPLAYURLRESULT,\n  '__module__' : 'live.business.addr_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.GeneratePlayURLResult)\n  })\n_sym_db.RegisterMessage(GeneratePlayURLResult)\n\nPlayURL = _reflection.GeneratedProtocolMessageType('PlayURL', (_message.Message,), {\n  'DESCRIPTOR' : _PLAYURL,\n  '__module__' : 'live.business.addr_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.PlayURL)\n  })\n_sym_db.RegisterMessage(PlayURL)\n\nGeneratePushURLResult = _reflection.GeneratedProtocolMessageType('GeneratePushURLResult', (_message.Message,), {\n  'DESCRIPTOR' : _GENERATEPUSHURLRESULT,\n  '__module__' : 'live.business.addr_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.GeneratePushURLResult)\n  })\n_sym_db.RegisterMessage(GeneratePushURLResult)\n\nPushURLItem = _reflection.GeneratedProtocolMessageType('PushURLItem', (_message.Message,), {\n  'DESCRIPTOR' : _PUSHURLITEM,\n  '__module__' : 'live.business.addr_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.PushURLItem)\n  })\n_sym_db.RegisterMessage(PushURLItem)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.businessB\\004AddrP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _GENERATEPLAYURLRESULT._serialized_start=61\n  _GENERATEPLAYURLRESULT._serialized_end=143\n  _PLAYURL._serialized_start=145\n  _PLAYURL._serialized_end=212\n  _GENERATEPUSHURLRESULT._serialized_start=215\n  _GENERATEPUSHURLRESULT._serialized_end=406\n  _PUSHURLITEM._serialized_start=408\n  _PUSHURLITEM._serialized_end=473\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/base/models/business/deny_config_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/business/deny_config.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\x1flive/business/deny_config.proto\\x12\\x1fVolcengine.Live.Models.Business\\\"\\xa8\\x01\\n\\x10\\x44\\x65nyConfigDetail\\x12\\x0f\\n\\x07ProType\\x18\\x01 \\x03(\\t\\x12\\x0f\\n\\x07\\x46mtType\\x18\\x02 \\x03(\\t\\x12\\x11\\n\\tContinent\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07\\x43ountry\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06Region\\x18\\x05 \\x01(\\t\\x12\\x0c\\n\\x04\\x43ity\\x18\\x06 \\x01(\\t\\x12\\x0b\\n\\x03ISP\\x18\\x07 \\x01(\\t\\x12\\x10\\n\\x08\\x44\\x65nyList\\x18\\x08 \\x03(\\t\\x12\\x11\\n\\tAllowList\\x18\\t \\x03(\\t\\\"b\\n\\x18\\x44\\x65scribeDenyConfigResult\\x12\\x46\\n\\x08\\x44\\x65nyList\\x18\\x01 \\x03(\\x0b\\x32\\x34.Volcengine.Live.Models.Business.VhostWithDenyConfig\\\"\\x88\\x01\\n\\x13VhostWithDenyConfig\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x03 \\x01(\\t\\x12\\x45\\n\\nDenyConfig\\x18\\x04 \\x03(\\x0b\\x32\\x31.Volcengine.Live.Models.Business.DenyConfigDetailB\\xd2\\x01\\n*com.volcengine.service.live.model.businessB\\nDenyConfigP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_DENYCONFIGDETAIL = DESCRIPTOR.message_types_by_name['DenyConfigDetail']\n_DESCRIBEDENYCONFIGRESULT = DESCRIPTOR.message_types_by_name['DescribeDenyConfigResult']\n_VHOSTWITHDENYCONFIG = DESCRIPTOR.message_types_by_name['VhostWithDenyConfig']\nDenyConfigDetail = _reflection.GeneratedProtocolMessageType('DenyConfigDetail', (_message.Message,), {\n  'DESCRIPTOR' : _DENYCONFIGDETAIL,\n  '__module__' : 'live.business.deny_config_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.DenyConfigDetail)\n  })\n_sym_db.RegisterMessage(DenyConfigDetail)\n\nDescribeDenyConfigResult = _reflection.GeneratedProtocolMessageType('DescribeDenyConfigResult', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEDENYCONFIGRESULT,\n  '__module__' : 'live.business.deny_config_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.DescribeDenyConfigResult)\n  })\n_sym_db.RegisterMessage(DescribeDenyConfigResult)\n\nVhostWithDenyConfig = _reflection.GeneratedProtocolMessageType('VhostWithDenyConfig', (_message.Message,), {\n  'DESCRIPTOR' : _VHOSTWITHDENYCONFIG,\n  '__module__' : 'live.business.deny_config_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.VhostWithDenyConfig)\n  })\n_sym_db.RegisterMessage(VhostWithDenyConfig)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.businessB\\nDenyConfigP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _DENYCONFIGDETAIL._serialized_start=69\n  _DENYCONFIGDETAIL._serialized_end=237\n  _DESCRIBEDENYCONFIGRESULT._serialized_start=239\n  _DESCRIBEDENYCONFIGRESULT._serialized_end=337\n  _VHOSTWITHDENYCONFIG._serialized_start=340\n  _VHOSTWITHDENYCONFIG._serialized_end=476\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/base/models/business/domain_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/business/domain.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\x1alive/business/domain.proto\\x12\\x1fVolcengine.Live.Models.Business\\\"\\x82\\x02\\n\\nDomainList\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x03 \\x01(\\x03\\x12\\x0c\\n\\x04Type\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06Region\\x18\\x05 \\x01(\\t\\x12\\r\\n\\x05\\x43Name\\x18\\x06 \\x01(\\t\\x12\\x12\\n\\nCnameCheck\\x18\\x07 \\x01(\\x03\\x12\\x13\\n\\x0b\\x44omainCheck\\x18\\x08 \\x01(\\x03\\x12\\x10\\n\\x08ICPCheck\\x18\\t \\x01(\\x03\\x12\\x12\\n\\nCreateTime\\x18\\n \\x01(\\t\\x12\\x12\\n\\nCertDomain\\x18\\x0b \\x01(\\t\\x12\\x0f\\n\\x07\\x43hainID\\x18\\x0c \\x01(\\t\\x12\\x10\\n\\x08\\x43\\x65rtName\\x18\\r \\x01(\\t\\x12\\x12\\n\\nPushDomain\\x18\\x0e \\x01(\\t\\\"`\\n\\x0e\\x44omainListInfo\\x12?\\n\\nDomainList\\x18\\x01 \\x03(\\x0b\\x32+.Volcengine.Live.Models.Business.DomainList\\x12\\r\\n\\x05Total\\x18\\x02 \\x01(\\x03\\x42\\xce\\x01\\n*com.volcengine.service.live.model.businessB\\x06\\x44omainP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_DOMAINLIST = DESCRIPTOR.message_types_by_name['DomainList']\n_DOMAINLISTINFO = DESCRIPTOR.message_types_by_name['DomainListInfo']\nDomainList = _reflection.GeneratedProtocolMessageType('DomainList', (_message.Message,), {\n  'DESCRIPTOR' : _DOMAINLIST,\n  '__module__' : 'live.business.domain_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.DomainList)\n  })\n_sym_db.RegisterMessage(DomainList)\n\nDomainListInfo = _reflection.GeneratedProtocolMessageType('DomainListInfo', (_message.Message,), {\n  'DESCRIPTOR' : _DOMAINLISTINFO,\n  '__module__' : 'live.business.domain_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.DomainListInfo)\n  })\n_sym_db.RegisterMessage(DomainListInfo)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.businessB\\006DomainP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _DOMAINLIST._serialized_start=64\n  _DOMAINLIST._serialized_end=322\n  _DOMAINLISTINFO._serialized_start=324\n  _DOMAINLISTINFO._serialized_end=420\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/base/models/business/pull_to_push_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/business/pull_to_push.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\nfrom volcengine.live.models.business import snapshot_manage_pb2 as live_dot_business_dot_snapshot__manage__pb2\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n live/business/pull_to_push.proto\\x12\\x1fVolcengine.Live.Models.Business\\x1a#live/business/snapshot_manage.proto\\\",\\n\\x1a\\x43reatePullToPushTaskResult\\x12\\x0e\\n\\x06TaskId\\x18\\x01 \\x01(\\t\\\"\\x98\\x01\\n\\x18ListPullToPushTaskResult\\x12;\\n\\x04List\\x18\\x01 \\x03(\\x0b\\x32-.Volcengine.Live.Models.Business.TaskInfoItem\\x12?\\n\\nPagination\\x18\\x02 \\x01(\\x0b\\x32+.Volcengine.Live.Models.Business.Pagination\\\"\\xdf\\x01\\n\\x0cTaskInfoItem\\x12\\r\\n\\x05Title\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06TaskId\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x04 \\x01(\\t\\x12\\x13\\n\\x0b\\x43\\x61llbackURL\\x18\\x05 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x06 \\x01(\\x05\\x12\\x11\\n\\tCycleMode\\x18\\x07 \\x01(\\x05\\x12\\x0f\\n\\x07\\x44stAddr\\x18\\x08 \\x01(\\t\\x12\\x0f\\n\\x07SrcAddr\\x18\\t \\x01(\\t\\x12\\x10\\n\\x08SrcAddrS\\x18\\n \\x03(\\t\\x12\\x0e\\n\\x06Status\\x18\\x0b \\x01(\\t\\x12\\x12\\n\\nTaskStatus\\x18\\x0c \\x01(\\x05\\x42\\xd6\\x01\\n*com.volcengine.service.live.model.businessB\\x0ePullToPushTaskP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_CREATEPULLTOPUSHTASKRESULT = DESCRIPTOR.message_types_by_name['CreatePullToPushTaskResult']\n_LISTPULLTOPUSHTASKRESULT = DESCRIPTOR.message_types_by_name['ListPullToPushTaskResult']\n_TASKINFOITEM = DESCRIPTOR.message_types_by_name['TaskInfoItem']\nCreatePullToPushTaskResult = _reflection.GeneratedProtocolMessageType('CreatePullToPushTaskResult', (_message.Message,), {\n  'DESCRIPTOR' : _CREATEPULLTOPUSHTASKRESULT,\n  '__module__' : 'live.business.pull_to_push_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.CreatePullToPushTaskResult)\n  })\n_sym_db.RegisterMessage(CreatePullToPushTaskResult)\n\nListPullToPushTaskResult = _reflection.GeneratedProtocolMessageType('ListPullToPushTaskResult', (_message.Message,), {\n  'DESCRIPTOR' : _LISTPULLTOPUSHTASKRESULT,\n  '__module__' : 'live.business.pull_to_push_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.ListPullToPushTaskResult)\n  })\n_sym_db.RegisterMessage(ListPullToPushTaskResult)\n\nTaskInfoItem = _reflection.GeneratedProtocolMessageType('TaskInfoItem', (_message.Message,), {\n  'DESCRIPTOR' : _TASKINFOITEM,\n  '__module__' : 'live.business.pull_to_push_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.TaskInfoItem)\n  })\n_sym_db.RegisterMessage(TaskInfoItem)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.businessB\\016PullToPushTaskP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _CREATEPULLTOPUSHTASKRESULT._serialized_start=106\n  _CREATEPULLTOPUSHTASKRESULT._serialized_end=150\n  _LISTPULLTOPUSHTASKRESULT._serialized_start=153\n  _LISTPULLTOPUSHTASKRESULT._serialized_end=305\n  _TASKINFOITEM._serialized_start=308\n  _TASKINFOITEM._serialized_end=531\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/base/models/business/record_manage_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/business/record_manage.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\nfrom volcengine.live.models.business import snapshot_manage_pb2 as live_dot_business_dot_snapshot__manage__pb2\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n!live/business/record_manage.proto\\x12\\x1fVolcengine.Live.Models.Business\\x1a#live/business/snapshot_manage.proto\\\"\\xbf\\x01\\n\\x0eRecordTaskFile\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x03 \\x01(\\t\\x12\\x0e\\n\\x06\\x42ucket\\x18\\x04 \\x01(\\t\\x12\\x0c\\n\\x04Path\\x18\\x05 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x06 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x07 \\x01(\\t\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x08 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\t \\x01(\\t\\x12\\x10\\n\\x08\\x46ileName\\x18\\n \\x01(\\t\\x12\\x0b\\n\\x03Vid\\x18\\x0b \\x01(\\t\\\"\\x93\\x01\\n\\x11RecordHistoryInfo\\x12=\\n\\x04\\x44\\x61ta\\x18\\x01 \\x03(\\x0b\\x32/.Volcengine.Live.Models.Business.RecordTaskFile\\x12?\\n\\nPagination\\x18\\x02 \\x03(\\x0b\\x32+.Volcengine.Live.Models.Business.PaginationB\\xd4\\x01\\n*com.volcengine.service.live.model.businessB\\x0cRecordManageP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_RECORDTASKFILE = DESCRIPTOR.message_types_by_name['RecordTaskFile']\n_RECORDHISTORYINFO = DESCRIPTOR.message_types_by_name['RecordHistoryInfo']\nRecordTaskFile = _reflection.GeneratedProtocolMessageType('RecordTaskFile', (_message.Message,), {\n  'DESCRIPTOR' : _RECORDTASKFILE,\n  '__module__' : 'live.business.record_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.RecordTaskFile)\n  })\n_sym_db.RegisterMessage(RecordTaskFile)\n\nRecordHistoryInfo = _reflection.GeneratedProtocolMessageType('RecordHistoryInfo', (_message.Message,), {\n  'DESCRIPTOR' : _RECORDHISTORYINFO,\n  '__module__' : 'live.business.record_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.RecordHistoryInfo)\n  })\n_sym_db.RegisterMessage(RecordHistoryInfo)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.businessB\\014RecordManageP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _RECORDTASKFILE._serialized_start=108\n  _RECORDTASKFILE._serialized_end=299\n  _RECORDHISTORYINFO._serialized_start=302\n  _RECORDHISTORYINFO._serialized_end=449\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/base/models/business/relay_source_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/business/relay_source.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n live/business/relay_source.proto\\x12\\x1fVolcengine.Live.Models.Business\\\"\\xf9\\x01\\n\\x16RelaySourceGroupItemV2\\x12\\x1d\\n\\x15RelaySourceDomainList\\x18\\x01 \\x03(\\t\\x12i\\n\\x11RelaySourceParams\\x18\\x02 \\x03(\\x0b\\x32N.Volcengine.Live.Models.Business.RelaySourceGroupItemV2.RelaySourceParamsEntry\\x12\\x1b\\n\\x13RelaySourceProtocol\\x18\\x03 \\x01(\\t\\x1a\\x38\\n\\x16RelaySourceParamsEntry\\x12\\x0b\\n\\x03key\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05value\\x18\\x02 \\x01(\\t:\\x02\\x38\\x01\\\"{\\n\\x11RelaySourceConfig\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x02 \\x01(\\t\\x12J\\n\\tGroupList\\x18\\x03 \\x03(\\x0b\\x32\\x37.Volcengine.Live.Models.Business.RelaySourceGroupItemV2\\\"f\\n\\x15RelaySourceConfigList\\x12M\\n\\x11RelaySourceConfig\\x18\\x01 \\x03(\\x0b\\x32\\x32.Volcengine.Live.Models.Business.RelaySourceConfigB\\xd3\\x01\\n*com.volcengine.service.live.model.businessB\\x0bRelaySourceP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_RELAYSOURCEGROUPITEMV2 = DESCRIPTOR.message_types_by_name['RelaySourceGroupItemV2']\n_RELAYSOURCEGROUPITEMV2_RELAYSOURCEPARAMSENTRY = _RELAYSOURCEGROUPITEMV2.nested_types_by_name['RelaySourceParamsEntry']\n_RELAYSOURCECONFIG = DESCRIPTOR.message_types_by_name['RelaySourceConfig']\n_RELAYSOURCECONFIGLIST = DESCRIPTOR.message_types_by_name['RelaySourceConfigList']\nRelaySourceGroupItemV2 = _reflection.GeneratedProtocolMessageType('RelaySourceGroupItemV2', (_message.Message,), {\n\n  'RelaySourceParamsEntry' : _reflection.GeneratedProtocolMessageType('RelaySourceParamsEntry', (_message.Message,), {\n    'DESCRIPTOR' : _RELAYSOURCEGROUPITEMV2_RELAYSOURCEPARAMSENTRY,\n    '__module__' : 'live.business.relay_source_pb2'\n    # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.RelaySourceGroupItemV2.RelaySourceParamsEntry)\n    })\n  ,\n  'DESCRIPTOR' : _RELAYSOURCEGROUPITEMV2,\n  '__module__' : 'live.business.relay_source_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.RelaySourceGroupItemV2)\n  })\n_sym_db.RegisterMessage(RelaySourceGroupItemV2)\n_sym_db.RegisterMessage(RelaySourceGroupItemV2.RelaySourceParamsEntry)\n\nRelaySourceConfig = _reflection.GeneratedProtocolMessageType('RelaySourceConfig', (_message.Message,), {\n  'DESCRIPTOR' : _RELAYSOURCECONFIG,\n  '__module__' : 'live.business.relay_source_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.RelaySourceConfig)\n  })\n_sym_db.RegisterMessage(RelaySourceConfig)\n\nRelaySourceConfigList = _reflection.GeneratedProtocolMessageType('RelaySourceConfigList', (_message.Message,), {\n  'DESCRIPTOR' : _RELAYSOURCECONFIGLIST,\n  '__module__' : 'live.business.relay_source_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.RelaySourceConfigList)\n  })\n_sym_db.RegisterMessage(RelaySourceConfigList)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.businessB\\013RelaySourceP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _RELAYSOURCEGROUPITEMV2_RELAYSOURCEPARAMSENTRY._options = None\n  _RELAYSOURCEGROUPITEMV2_RELAYSOURCEPARAMSENTRY._serialized_options = b'8\\001'\n  _RELAYSOURCEGROUPITEMV2._serialized_start=70\n  _RELAYSOURCEGROUPITEMV2._serialized_end=319\n  _RELAYSOURCEGROUPITEMV2_RELAYSOURCEPARAMSENTRY._serialized_start=263\n  _RELAYSOURCEGROUPITEMV2_RELAYSOURCEPARAMSENTRY._serialized_end=319\n  _RELAYSOURCECONFIG._serialized_start=321\n  _RELAYSOURCECONFIG._serialized_end=444\n  _RELAYSOURCECONFIGLIST._serialized_start=446\n  _RELAYSOURCECONFIGLIST._serialized_end=548\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/base/models/business/snapshot_manage_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/business/snapshot_manage.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n#live/business/snapshot_manage.proto\\x12\\x1fVolcengine.Live.Models.Business\\\"\\x92\\x01\\n\\x12\\x43\\x44NSnapshotHistory\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x03 \\x01(\\t\\x12\\x0c\\n\\x04Path\\x18\\x04 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileSize\\x18\\x05 \\x01(\\x02\\x12\\x11\\n\\tTimeStamp\\x18\\x06 \\x01(\\t\\x12\\r\\n\\x05Width\\x18\\x07 \\x01(\\x03\\x12\\x0e\\n\\x06Height\\x18\\x08 \\x01(\\x03\\\"V\\n\\nPagination\\x12\\x0f\\n\\x07PageCur\\x18\\x01 \\x01(\\x03\\x12\\x10\\n\\x08PageSize\\x18\\x02 \\x01(\\x03\\x12\\x11\\n\\tPageTotal\\x18\\x03 \\x01(\\x03\\x12\\x12\\n\\nTotalCount\\x18\\x04 \\x01(\\x03\\\"\\x9c\\x01\\n\\x16\\x43\\x44NSnapshotHistoryInfo\\x12\\x41\\n\\x04\\x44\\x61ta\\x18\\x01 \\x03(\\x0b\\x32\\x33.Volcengine.Live.Models.Business.CDNSnapshotHistory\\x12?\\n\\nPagination\\x18\\x02 \\x03(\\x0b\\x32+.Volcengine.Live.Models.Business.PaginationB\\xd6\\x01\\n*com.volcengine.service.live.model.businessB\\x0eSnapshotManageP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_CDNSNAPSHOTHISTORY = DESCRIPTOR.message_types_by_name['CDNSnapshotHistory']\n_PAGINATION = DESCRIPTOR.message_types_by_name['Pagination']\n_CDNSNAPSHOTHISTORYINFO = DESCRIPTOR.message_types_by_name['CDNSnapshotHistoryInfo']\nCDNSnapshotHistory = _reflection.GeneratedProtocolMessageType('CDNSnapshotHistory', (_message.Message,), {\n  'DESCRIPTOR' : _CDNSNAPSHOTHISTORY,\n  '__module__' : 'live.business.snapshot_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.CDNSnapshotHistory)\n  })\n_sym_db.RegisterMessage(CDNSnapshotHistory)\n\nPagination = _reflection.GeneratedProtocolMessageType('Pagination', (_message.Message,), {\n  'DESCRIPTOR' : _PAGINATION,\n  '__module__' : 'live.business.snapshot_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.Pagination)\n  })\n_sym_db.RegisterMessage(Pagination)\n\nCDNSnapshotHistoryInfo = _reflection.GeneratedProtocolMessageType('CDNSnapshotHistoryInfo', (_message.Message,), {\n  'DESCRIPTOR' : _CDNSNAPSHOTHISTORYINFO,\n  '__module__' : 'live.business.snapshot_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.CDNSnapshotHistoryInfo)\n  })\n_sym_db.RegisterMessage(CDNSnapshotHistoryInfo)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.businessB\\016SnapshotManageP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _CDNSNAPSHOTHISTORY._serialized_start=73\n  _CDNSNAPSHOTHISTORY._serialized_end=219\n  _PAGINATION._serialized_start=221\n  _PAGINATION._serialized_end=307\n  _CDNSNAPSHOTHISTORYINFO._serialized_start=310\n  _CDNSNAPSHOTHISTORYINFO._serialized_end=466\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/base/models/business/stream_manage_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/business/stream_manage.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n!live/business/stream_manage.proto\\x12\\x1fVolcengine.Live.Models.Business\\\"\\xd1\\x01\\n\\x0eStreamInfoList\\x12\\n\\n\\x02ID\\x18\\x01 \\x01(\\x03\\x12\\r\\n\\x05Vhost\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x03 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x05 \\x01(\\t\\x12\\x18\\n\\x10SessionStartTime\\x18\\x06 \\x01(\\t\\x12\\x12\\n\\nOnlineUser\\x18\\x07 \\x01(\\x03\\x12\\x11\\n\\tBandWidth\\x18\\x08 \\x01(\\x03\\x12\\x0f\\n\\x07\\x42itrate\\x18\\t \\x01(\\x03\\x12\\x11\\n\\tFramerate\\x18\\n \\x01(\\x03\\x12\\x12\\n\\nPreviewURL\\x18\\x0b \\x01(\\t\\\"v\\n\\x14\\x43losedStreamInfoList\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x03 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x04 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x05 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x06 \\x01(\\x03\\\"\\x88\\x01\\n\\x17\\x46orbiddenStreamInfoList\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x03 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x04 \\x01(\\t\\x12\\x12\\n\\nCreateTime\\x18\\x05 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x06 \\x01(\\x03\\x12\\x0c\\n\\x04type\\x18\\x07 \\x01(\\t\\\"m\\n\\x0eLiveStreamInfo\\x12G\\n\\x0eStreamInfoList\\x18\\x01 \\x03(\\x0b\\x32/.Volcengine.Live.Models.Business.StreamInfoList\\x12\\x12\\n\\nRoughCount\\x18\\x02 \\x01(\\x03\\\"u\\n\\x10\\x43losedStreamInfo\\x12M\\n\\x0eStreamInfoList\\x18\\x01 \\x03(\\x0b\\x32\\x35.Volcengine.Live.Models.Business.ClosedStreamInfoList\\x12\\x12\\n\\nRoughCount\\x18\\x02 \\x01(\\x03\\\"5\\n\\x0fStreamStateInfo\\x12\\x14\\n\\x0cstream_state\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04type\\x18\\x02 \\x01(\\t\\\"{\\n\\x13\\x46orbiddenStreamInfo\\x12P\\n\\x0eStreamInfoList\\x18\\x01 \\x03(\\x0b\\x32\\x38.Volcengine.Live.Models.Business.ForbiddenStreamInfoList\\x12\\x12\\n\\nRoughCount\\x18\\x02 \\x01(\\x03\\x42\\xd4\\x01\\n*com.volcengine.service.live.model.businessB\\x0cStreamManageP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_STREAMINFOLIST = DESCRIPTOR.message_types_by_name['StreamInfoList']\n_CLOSEDSTREAMINFOLIST = DESCRIPTOR.message_types_by_name['ClosedStreamInfoList']\n_FORBIDDENSTREAMINFOLIST = DESCRIPTOR.message_types_by_name['ForbiddenStreamInfoList']\n_LIVESTREAMINFO = DESCRIPTOR.message_types_by_name['LiveStreamInfo']\n_CLOSEDSTREAMINFO = DESCRIPTOR.message_types_by_name['ClosedStreamInfo']\n_STREAMSTATEINFO = DESCRIPTOR.message_types_by_name['StreamStateInfo']\n_FORBIDDENSTREAMINFO = DESCRIPTOR.message_types_by_name['ForbiddenStreamInfo']\nStreamInfoList = _reflection.GeneratedProtocolMessageType('StreamInfoList', (_message.Message,), {\n  'DESCRIPTOR' : _STREAMINFOLIST,\n  '__module__' : 'live.business.stream_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.StreamInfoList)\n  })\n_sym_db.RegisterMessage(StreamInfoList)\n\nClosedStreamInfoList = _reflection.GeneratedProtocolMessageType('ClosedStreamInfoList', (_message.Message,), {\n  'DESCRIPTOR' : _CLOSEDSTREAMINFOLIST,\n  '__module__' : 'live.business.stream_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.ClosedStreamInfoList)\n  })\n_sym_db.RegisterMessage(ClosedStreamInfoList)\n\nForbiddenStreamInfoList = _reflection.GeneratedProtocolMessageType('ForbiddenStreamInfoList', (_message.Message,), {\n  'DESCRIPTOR' : _FORBIDDENSTREAMINFOLIST,\n  '__module__' : 'live.business.stream_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.ForbiddenStreamInfoList)\n  })\n_sym_db.RegisterMessage(ForbiddenStreamInfoList)\n\nLiveStreamInfo = _reflection.GeneratedProtocolMessageType('LiveStreamInfo', (_message.Message,), {\n  'DESCRIPTOR' : _LIVESTREAMINFO,\n  '__module__' : 'live.business.stream_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.LiveStreamInfo)\n  })\n_sym_db.RegisterMessage(LiveStreamInfo)\n\nClosedStreamInfo = _reflection.GeneratedProtocolMessageType('ClosedStreamInfo', (_message.Message,), {\n  'DESCRIPTOR' : _CLOSEDSTREAMINFO,\n  '__module__' : 'live.business.stream_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.ClosedStreamInfo)\n  })\n_sym_db.RegisterMessage(ClosedStreamInfo)\n\nStreamStateInfo = _reflection.GeneratedProtocolMessageType('StreamStateInfo', (_message.Message,), {\n  'DESCRIPTOR' : _STREAMSTATEINFO,\n  '__module__' : 'live.business.stream_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.StreamStateInfo)\n  })\n_sym_db.RegisterMessage(StreamStateInfo)\n\nForbiddenStreamInfo = _reflection.GeneratedProtocolMessageType('ForbiddenStreamInfo', (_message.Message,), {\n  'DESCRIPTOR' : _FORBIDDENSTREAMINFO,\n  '__module__' : 'live.business.stream_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.ForbiddenStreamInfo)\n  })\n_sym_db.RegisterMessage(ForbiddenStreamInfo)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.businessB\\014StreamManageP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _STREAMINFOLIST._serialized_start=71\n  _STREAMINFOLIST._serialized_end=280\n  _CLOSEDSTREAMINFOLIST._serialized_start=282\n  _CLOSEDSTREAMINFOLIST._serialized_end=400\n  _FORBIDDENSTREAMINFOLIST._serialized_start=403\n  _FORBIDDENSTREAMINFOLIST._serialized_end=539\n  _LIVESTREAMINFO._serialized_start=541\n  _LIVESTREAMINFO._serialized_end=650\n  _CLOSEDSTREAMINFO._serialized_start=652\n  _CLOSEDSTREAMINFO._serialized_end=769\n  _STREAMSTATEINFO._serialized_start=771\n  _STREAMSTATEINFO._serialized_end=824\n  _FORBIDDENSTREAMINFO._serialized_start=826\n  _FORBIDDENSTREAMINFO._serialized_end=949\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/billing/BillingService.py",
    "content": "# coding:utf-8\nimport json\nimport threading\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\n\nSERVICE_VERSION = \"2022-01-01\"\n\nclass BillingService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(BillingService, \"_instance\"):\n            with BillingService._instance_lock:\n                if not hasattr(BillingService, \"_instance\"):\n                    BillingService._instance = object.__new__(cls)\n        return BillingService._instance\n\n    def __init__(self):\n        self.service_info = BillingService.get_service_info()\n        self.api_info = BillingService.get_api_info()\n        super(BillingService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info():\n        service_info = ServiceInfo(\"billing.volcengineapi.com\", {'Accept': 'application/json'},\n                                   Credentials('', '', 'billing', 'cn-north-1'), 5, 5)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\"ListBill\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListBill\", \"Version\": SERVICE_VERSION}, {}, {}),\n                    \"ListBillDetail\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListBillDetail\", \"Version\": SERVICE_VERSION}, {}, {}),\n                    \"ListBillOverviewByProd\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListBillOverviewByProd\", \"Version\": SERVICE_VERSION}, {}, {}),\n                    \"ListSplitBillDetail\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListSplitBillDetail\", \"Version\": SERVICE_VERSION}, {}, {}),\n                    \"ListAmortizedCostBillDetail\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListAmortizedCostBillDetail\", \"Version\": SERVICE_VERSION}, {}, {}),\n                    \"ListAmortizedCostBillMonthly\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListAmortizedCostBillMonthly\", \"Version\": SERVICE_VERSION}, {}, {})}\n        return api_info\n\n    def list_bill(self, params, body):\n        res = self.post(\"ListBill\", params, body)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def list_bill_detail(self, params, body):\n        res = self.post(\"ListBillDetail\", params, body)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def list_bill_overview_by_prod(self, params, body):\n        res = self.post(\"ListBillOverviewByProd\", params, body)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def list_split_bill_detail(self, params, body):\n        res = self.post(\"ListSplitBillDetail\", params, body)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def list_amortized_cost_bill_detail(self, params, body):\n        res = self.post(\"ListAmortizedCostBillDetail\", params, body)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def list_amortized_cost_bill_monthly(self, params, body):\n        res = self.post(\"ListAmortizedCostBillMonthly\", params, body)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n"
  },
  {
    "path": "volcengine/billing/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/bioos/BioOsService.py",
    "content": "# coding:utf-8\nimport json\nimport threading\nfrom urllib.parse import urlparse\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.base.Service import Service\n\n\nclass BioOsService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(BioOsService, '_instance'):\n            with BioOsService._instance_lock:\n                if not hasattr(BioOsService, '_instance'):\n                    BioOsService._instance = object.__new__(cls)\n        return BioOsService._instance\n\n    def __init__(self, endpoint='https://open.volcengineapi.com', region='cn-beijing'):\n        self.service_info = BioOsService.get_service_info(endpoint, region)\n        self.api_info = BioOsService.get_api_info()\n        super(BioOsService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info(endpoint, region):\n        parsed = urlparse(endpoint)\n        scheme, hostname = parsed.scheme, parsed.hostname\n        if not scheme or not hostname:\n            raise Exception(f'invalid endpoint format: {endpoint}')\n        service_info = ServiceInfo(hostname, {'Accept': 'application/json'},\n                                   Credentials('', '', 'bio', region), 5, 5, scheme=scheme)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\n            'CreateWorkspace':\n                ApiInfo('POST', '/', {'Action': 'CreateWorkspace', 'Version': '2021-03-04'}, {}, {}),\n            'ListWorkspaces':\n                ApiInfo('POST', '/', {'Action': 'ListWorkspaces', 'Version': '2021-03-04'}, {}, {}),\n            'UpdateWorkspace':\n                ApiInfo('POST', '/', {'Action': 'UpdateWorkspace', 'Version': '2021-03-04'}, {}, {}),\n            'DeleteWorkspace':\n                ApiInfo('POST', '/', {'Action': 'DeleteWorkspace', 'Version': '2021-03-04'}, {}, {}),\n            'BindClusterToWorkspace':\n                ApiInfo('POST', '/', {'Action': 'BindClusterToWorkspace', 'Version': '2021-03-04'}, {}, {}),\n            'UnbindClusterAndWorkspace':\n                ApiInfo('POST', '/', {'Action': 'UnbindClusterAndWorkspace', 'Version': '2021-03-04'}, {}, {}),\n            'ListClustersOfWorkspace':\n                ApiInfo('POST', '/', {'Action': 'ListClustersOfWorkspace', 'Version': '2021-03-04'}, {}, {}),\n            'ListWorkspaceLabels':\n                ApiInfo('POST', '/', {'Action': \"ListWorkspaceLabels\", 'Version': '2021-03-04'}, {}, {}),\n            'ListClusters':\n                ApiInfo('POST', '/', {'Action': 'ListClusters', 'Version': '2021-03-04'}, {}, {}),\n            'DeleteCluster':\n                ApiInfo('POST', '/', {'Action': 'DeleteCluster', 'Version': '2021-03-04'}, {}, {}),\n            'UpdateAPIAccessKey':\n                ApiInfo('POST', '/', {'Action': 'UpdateAPIAccessKey', 'Version': '2021-03-04'}, {}, {}),\n            'GetAPIAccessKey':\n                ApiInfo('POST', '/', {'Action': 'GetAPIAccessKey', 'Version': '2021-03-04'}, {}, {}),\n            'CreateDataModel':\n                ApiInfo('POST', '/', {'Action': 'CreateDataModel', 'Version': '2021-03-04'}, {}, {}),\n            'ListDataModels':\n                ApiInfo('POST', '/', {'Action': 'ListDataModels', 'Version': '2021-03-04'}, {}, {}),\n            'ListDataModelRows':\n                ApiInfo('POST', '/', {'Action': 'ListDataModelRows', 'Version': '2021-03-04'}, {}, {}),\n            'DeleteDataModelRowsAndHeaders':\n                ApiInfo('POST', '/', {'Action': 'DeleteDataModelRowsAndHeaders', 'Version': '2021-03-04'}, {}, {}),\n            'CreateSubmission':\n                ApiInfo('POST', '/', {'Action': 'CreateSubmission', 'Version': '2021-03-04'}, {}, {}),\n            'ListSubmissions':\n                ApiInfo('POST', '/', {'Action': 'ListSubmissions', 'Version': '2021-03-04'}, {}, {}),\n            'ListOverviewSubmissions':\n                ApiInfo('POST', '/', {'Action': 'ListOverviewSubmissions', 'Version': '2021-03-04'}, {}, {}),\n            'DeleteSubmission':\n                ApiInfo('POST', '/', {'Action': 'DeleteSubmission', 'Version': '2021-03-04'}, {}, {}),\n            'CancelSubmission':\n                ApiInfo('POST', '/', {'Action': 'CancelSubmission', 'Version': '2021-03-04'}, {}, {}),\n            'ListRuns':\n                ApiInfo('POST', '/', {'Action': 'ListRuns', 'Version': '2021-03-04'}, {}, {}),\n            'CancelRun':\n                ApiInfo('POST', '/', {'Action': 'CancelRun', 'Version': '2021-03-04'}, {}, {}),\n            'ListTasks':\n                ApiInfo('POST', '/', {'Action': 'ListTasks', 'Version': '2021-03-04'}, {}, {}),\n            'CreateWorkflow':\n                ApiInfo('POST', '/', {'Action': 'CreateWorkflow', 'Version': '2021-03-04'}, {}, {}),\n            'ListWorkflows':\n                ApiInfo('POST', '/', {'Action': 'ListWorkflows', 'Version': '2021-03-04'}, {}, {}),\n            'UpdateWorkflow':\n                ApiInfo('POST', '/', {'Action': 'UpdateWorkflow', 'Version': '2021-03-04'}, {}, {}),\n            'DeleteWorkflow':\n                ApiInfo('POST', '/', {'Action': 'DeleteWorkflow', 'Version': '2021-03-04'}, {}, {}),\n            'GetNotebookEditInfo':\n                ApiInfo('POST', '/', {'Action': 'GetNotebookEditInfo', 'Version': '2021-03-04'}, {}, {}),\n            'GetNotebookServerSettings':\n                ApiInfo('POST', '/', {'Action': 'GetNotebookServerSettings', 'Version': '2021-03-04'}, {}, {}),\n            'GetNotebookServerStat':\n                ApiInfo('POST', '/', {'Action': 'GetNotebookServerStat', 'Version': '2021-03-04'}, {}, {}),\n            'ListNotebookServerImages':\n                ApiInfo('POST', '/', {'Action': 'ListNotebookServerImages', 'Version': '2021-03-04'}, {}, {}),\n            'ListNotebookServerResourceOpts':\n                ApiInfo('POST', '/', {'Action': 'ListNotebookServerResourceOpts', 'Version': '2021-03-04'}, {}, {}),\n            'StopNotebookServer':\n                ApiInfo('POST', '/', {'Action': 'StopNotebookServer', 'Version': '2021-03-04'}, {}, {}),\n            'UpdateNotebookServerSettings':\n                ApiInfo('POST', '/', {'Action': 'UpdateNotebookServerSettings', 'Version': '2021-03-04'}, {}, {}),\n            'CreateNotebookServerImage':\n                ApiInfo('POST', '/', {'Action': 'CreateNotebookServerImage', 'Version': '2021-03-04'}, {}, {}),\n            'ListNotebookServers':\n                ApiInfo('POST', '/', {'Action': 'ListNotebookServers', 'Version': '2021-03-04'}, {}, {}),\n            'DeleteNotebookServer':\n                ApiInfo('POST', '/', {'Action': 'DeleteNotebookServer', 'Version': '2021-03-04'}, {}, {}),\n            'DeleteNotebookServerSettings':\n                ApiInfo('POST', '/', {'Action': 'DeleteNotebookServerSettings', 'Version': '2021-03-04'}, {}, {}),\n            'GetNotebookServerExtraPackages':\n                ApiInfo('POST', '/', {'Action': 'GetNotebookServerExtraPackages', 'Version': '2021-03-04'}, {}, {}),\n            'ListDataFiles':\n                ApiInfo('POST', '/', {'Action': 'ListDataFiles', 'Version': '2021-03-04'}, {}, {}),\n            'ListDataSets':\n                ApiInfo('POST', '/', {'Action': 'ListDataSets', 'Version': '2021-03-04'}, {}, {}),\n            'CreateDataSet':\n                ApiInfo('POST', '/', {'Action': 'CreateDataSet', 'Version': '2021-03-04'}, {}, {}),\n            'DeleteDataSet':\n                ApiInfo('POST', '/', {'Action': 'DeleteDataSet', 'Version': '2021-03-04'}, {}, {}),\n            'GetTRSWorkflowInfo':\n                ApiInfo('POST', '/', {'Action': 'GetTRSWorkflowInfo', 'Version': '2021-03-04'}, {}, {}),\n        }\n        return api_info\n\n    def create_workspace(self, params):\n        \"\"\" 创建workspace\n\n        Args:\n            params (Dict):\n\n                `Name (str)`: 必选, 工作空间名称\n                    示例值: name\n\n                `Description (str)`: 必选, 工作空间描述\n                    示例值: description\n\n                `S3Bucket (str)`: 选填, 对象存储的存储桶名称, 为空表示自动创建\n                    示例值: bioos-wcfxxxxxxxxxxx\n\n                `CopyPublicWorkspaceID (str)`: 选填, 需要复制其内容的公共工作空间ID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                `CoverPath (str)`: 选填, 封面位于存储桶的路径, 为空表明使用官方第一张图片\n                    示例值: template-cover/pic1.png\n\n                `Labels (List[str])`: 选填, 工作空间标签\n                    示例值: [\"DNA\"]\n\n        Returns:\n            Dict:\n\n                `ID (str)`: 工作空间 ID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n        \"\"\"\n        return self.__request('CreateWorkspace', params)\n\n    def list_workspaces(self, params):\n        \"\"\" 查询符合条件的workspace列表\n\n        Args:\n            params (Dict):\n\n                `PageNumber (int)`: 选填, 分页页码\n                    示例值: 1\n\n                `PageSize (int)`: 选填, 分页页长\n                    示例值: 10\n\n                `Filter (Dict)`: 选填, 筛选条件\n\n                    `Keyword (str)`: 选填, 根据名称筛选\n                        示例值: test\n\n                    `IDs (List[str])`: 选填, ID列表\n                        示例值: [\"test\"]\n\n                    `IsPublic (bool)`: 选填, 是否公开\n                        示例值: False\n\n                    `Labels (List[str])`: 选填, workspace标签\n                        示例值: [\"DNA\"]\n\n                `SortBy (str)`: 选填, 按字段排序 取值有Name CreateTime VisitTime\n                    示例值: CreateTime\n\n                `SortOrder (str)`: 选填, 指定排序顺序 取值有Asc Desc\n                    示例值: Desc\n\n        Returns:\n            Dict:\n\n                `Items (List[Dict])`: Workspace列表\n\n                    `ID (str)`: 工作空间ID\n                        示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                    `Name (str)`: 工作空间名称\n                        示例值: name\n\n                    `Description (str)`: 工作空间描述\n                        示例值: description\n\n                    `CreateTime (int)`: 工作空间创建时间\n                        示例值: 1673525239\n\n                    `UpdateTime (int)`: 工作空间更新时间\n                        示例值: 1673525239\n\n                    `OwnerName (str)`: 创建者名字\n                        示例值: owner\n\n                    `CoverDownloadURL (str)`: 封面地址\n                        示例值: template-cover/pic1.png\n\n                    `Role (str)`: 当前用户对于工作空间角色\n                        示例值: Admin\n\n                    `S3Bucket (str)`: 当前工作空间存储桶\n                        示例值: bioos-wcxxxxxxxxxxxx\n\n                    `PublicMeta (Dict)`: 公共 Workspace 元数据\n\n                        `TosBucketTotalStorage (int)`: 公共工作空间桶存储占用信息(Gb)\n                            示例值: 20\n\n                    `Labels (List[str])`: 工作空间标签\n                        示例值: [\"DNA\"]\n\n                `PageNumber (int)`: 页码\n                    示例值: 1\n\n                `PageSize (int)`: 页长\n                    示例值: 10\n\n                `TotalCount (int)`: 总数量\n                    示例值: 10\n\n        \"\"\"\n        return self.__request('ListWorkspaces', params)\n\n    def update_workspace(self, params):\n        \"\"\" 更新workspace\n\n        Args:\n            params (Dict):\n\n                `ID (str)`: 必选, 工作空间 ID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                `Name (str)`: 必选, 工作空间名称\n                    示例值: name\n\n                `Description (str)`: 必选, 工作空间描述\n                    示例值: description\n\n                `CoverPath (str)`: 选填, 图片位于存储桶的位置, 为空表明使用官方第一张图片\n                    示例值: template-cover/pic1.png\n\n                `Labels (List[str])`: 选填, 标签全量更新\n                    示例值: [\"DNA\"]\n\n        Returns:\n            Dict:\n\n                `Updated (bool)`: 是否存在内容更新\n                    示例值: False\n\n        \"\"\"\n        return self.__request('UpdateWorkspace', params)\n\n    def delete_workspace(self, params):\n        \"\"\" 删除workspace\n\n        Args:\n            params (Dict):\n\n                `ID (str)`: 必选, workspaceID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n        Returns:\n            Dict: empty dictionary\n\n        \"\"\"\n        return self.__request('DeleteWorkspace', params)\n\n    def bind_cluster_to_workspace(self, params):\n        \"\"\" 如果workspace内运行工作流，则需要绑定已纳管的集群，已被纳管的集群可通过ListClusters接口查询。\n\n        Args:\n            params (Dict):\n\n                `ID (str)`: 必选, workspaceID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                `ClusterID (str)`: 必选, 已纳管集群的ID\n                    示例值: ucxxxxxxxxxxxxxxxxxxx\n\n                `Type (str)`: 必选, 关联类型（workflow、notebook）\n                    示例值: workspace\n\n        Returns:\n            Dict: empty dictionary\n\n        \"\"\"\n        return self.__request('BindClusterToWorkspace', params)\n\n    def unbind_cluster_and_workspace(self, params):\n        \"\"\" 该接口对已绑定的workspace和cluster进行解绑操作\n\n        Args:\n            params (Dict):\n\n                `ID (str)`: 必选, workspaceID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                `ClusterID (str)`: 必选, 已纳管集群的ID\n                    示例值: ucxxxxxxxxxxxxxxxxxxx\n\n                `Type (str)`: 必选, 关联类型（workflow、notebook）\n                    示例值: workspace\n\n        Returns:\n            Dict: empty dictionary\n\n        \"\"\"\n        return self.__request('UnbindClusterAndWorkspace', params)\n\n    def list_clusters_of_workspace(self, params):\n        \"\"\" 查看workspace所绑定的集群列表\n\n        Args:\n            params (Dict):\n\n                ID (str): 必选, workspaceID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                Type (str): 必选, 关联类型（workflow、notebook）\n                    示例值: workflow\n\n        Returns:\n            Dict:\n\n                `Items (List[Dict])`: cluster列表\n\n                    `ClusterInfo (Dict)`: 集群信息\n\n                        `ID (str)`: 纳管集群ID\n                            示例值: ucxxxxxxxxxxxxxxxxxxx\n\n                        `Name (str)`: 纳管集群名称\n                            示例值: name\n\n                        `Status (str)`: 集群纳管状态（Creating、CreateFailed、Running、Error、Deleting、DeleteFailed、Updating、Stopped）\n                            示例值: Creating\n\n                        `StartTime (int)`: 起始时间\n                            示例值: 1673525239\n\n                        `Description (str)`: 投递记录描述\n                            示例值: description\n\n                        `ErrorMessage (str)`: 集群纳管过程中出现问题时的错误信息\n                            示例值: err message\n\n                        `Bound (bool)`: 是否存在绑定的 workspace\n                            示例值: False\n\n                        `Public (bool)`: 是否是公共集群\n                            示例值: True\n\n                        `VKEConfig (Dict)`: vke 集群信息\n\n                            `ClusterID (str)`: vke集群的clusterID,通过https://www.volcengine.com/docs/6460/115190查询\n                                示例值: ccexxxxxxxxxxxxxxxxxx\n\n                            `StorageClass (str)`: vke集群已安装的 StorageClass 的名称\n                                示例值: ebs-ssd\n\n                            `VCIEnabled (bool)`: vke集群是否运行VCI\n                                示例值: True\n\n                        `ExternalConfig (Dict)`: 外部集群配置\n\n                            `WESEndpoint (str)`: WES 地址\n                                示例值: http://192.168.0.1:8002/ga4gh/wes/v1\n\n                            `JupyterhubEndpoint (str)`: jupyterhub 地址\n                                示例值: http://jupyterhub-hub:8081/jupyterhub\n\n                            `ResourceScheduler (str)`: 外部资源调度程序\n                                示例值: SGE\n\n                            `Filesystem (str)`: 工作流计算引擎依赖的文件系统（tos, local）\n                                示例值: tos\n\n                            `ExecutionRootDir (str)`: 工作流计算引擎执行根路径, 当且仅当工作流计算引擎依赖的文件系统为 `local` 时会有\n                                示例值: /root\n\n                            `S3ProxyConfig (Dict)`: 文件系统存储的s3proxy代理信息\n\n                                `Endpoint (str)`: 访问地址\n                                    示例值: http://192.168.0.3:8000\n\n                                `Region (str)`: 区域\n                                    示例值: cn-beijing\n\n                                `AccessKey (str)`: 访问s3proxy的AccessKey\n                                    示例值: AKxxxx\n\n                                `SecretKey (str)`: 访问s3proxy的SecretKey\n                                    示例值: xxxxxx\n\n                                `ForcePathStyle (bool)`: 是否强制使用path style, 还是使用virtual style\n                                    示例值: True\n\n                        `SharedConfig (Dict)`: 共享集群配置,暂无具体配置信息\n                                示例值: {}\n\n                        `StoppedTime (int)`: 截止时间\n                            示例值: 1673525239\n\n                    `Type (str)`: 关联类型（workflow、notebook）\n                        示例值: workflow\n\n                    `BindTime (int)`: 绑定是时间\n                        示例值: 1673525239\n\n                `PageNumber (int)`: 页码\n                    示例值: 1\n\n                `PageSize (int)`: 页长\n                    示例值: 10\n\n                `TotalCount (int)`: 总数量\n                    示例值: 10\n\n        \"\"\"\n        return self.__request('ListClustersOfWorkspace', params)\n\n    def list_workspace_labels(self, params):\n        \"\"\" 获取工作空间的标签列表\n\n        Args:\n            params (Dict):\n\n                `Filter (Dict)`: 选填, 筛选条件\n\n                    `Exact (bool)`: 选填, 是否精准匹配\n                        示例值: True\n\n                    `MatchPreset (bool)`: 选填, 是否匹配预设标签\n                        示例值: True\n\n                    `IsPublic (bool)`: 选填, 是否查询公开workspace\n                        示例值: True\n\n                    `Keywords (List[str])`: 选填, 匹配列表\n                        示例值: [\"DNA\"]\n\n        Returns:\n            Dict:\n\n                `Items (List[Dict])`: 标签列表\n\n                    `Name (str)`: 标签名称\n                        示例值: name\n\n                    `Count (int)`: 标签对应的workspace数目\n                        示例值: 10\n\n                `TotalCount (int)`: 标签总数\n                    示例值: 10\n\n        \"\"\"\n        return self.__request('ListWorkspaceLabels', params)\n\n    def list_clusters(self, params):\n        \"\"\" 查看所有集群\n\n        Args:\n            params (Dict):\n\n                `PageNumber (int)`: 选填, 页码\n                    示例值: 1\n\n                `PageSize (int)`: 选填, 页长\n                    示例值: 10\n\n                `Filter (Dict)`: 选填, 筛选条件\n\n                    `IDs (List[str])`: 选填, ID列表\n                        示例值: [\"ucxxxxxxxxxxxxxxxxxxx\"]\n\n                    `Status (List[str])`: 选填, 集群状态列表\n                        示例值: [\"Running\"]\n\n                    `Type (List[str])`: 选填, 集群类型(volc-vke, external, shared)\n                        示例值: [\"shared\"]\n\n                    `Public (bool)`: 选填, 默认为False，若为True，则集群对所有人可见\n                        示例值: True\n\n                    `Keyword (str)`: 选填, 名称模糊匹配\n                        示例值: \"test\"\n\n        Returns:\n            Dict:\n\n                `Items (List[Dict])`: cluster列表\n\n                    `ID (str)`: 纳管集群ID\n                        示例值: ucxxxxxxxxxxxxxxxxxxx\n\n                    `Name (str)`: 纳管集群名称\n                        示例值: name\n\n                    `Status (str)`: 集群纳管状态（Creating、CreateFailed、Running、Error、Deleting、DeleteFailed、Updating、Stopped）\n                        示例值: Creating\n\n                    `StartTime (int)`: 起始时间\n                        示例值: 1673525239\n\n                    `Description (str)`: 投递记录描述\n                        示例值: description\n\n                    `ErrorMessage (str)`: 集群纳管过程中出现问题时的错误信息\n                        示例值: err message\n\n                    `Bound (bool)`: 是否存在绑定的 workspace\n                        示例值: False\n\n                    `Public (bool)`: 是否是公共集群\n                        示例值: True\n\n                    `VKEConfig (Dict)`: vke 集群信息\n\n                        `ClusterID (str)`: vke集群的clusterID,通过https://www.volcengine.com/docs/6460/115190查询\n                            示例值: ccexxxxxxxxxxxxxxxxxx\n\n                        `StorageClass (str)`: vke集群已安装的 StorageClass 的名称\n                            示例值: ebs-ssd\n\n                        `VCIEnabled (bool)`: vke集群是否运行VCI\n                            示例值: True\n\n                    `ExternalConfig (Dict)`: 外部集群配置\n\n                        `WESEndpoint (str)`: WES 地址\n                            示例值: http://192.168.0.1:8002/ga4gh/wes/v1\n\n                        `JupyterhubEndpoint (str)`: jupyterhub 地址\n                            示例值: http://jupyterhub-hub:8081/jupyterhub\n\n                        `ResourceScheduler (str)`: 外部资源调度程序\n                            示例值: SGE\n\n                        `Filesystem (str)`: 工作流计算引擎依赖的文件系统（tos, local）\n                            示例值: tos\n\n                        `ExecutionRootDir (str)`: 工作流计算引擎执行根路径, 当且仅当工作流计算引擎依赖的文件系统为 `local` 时会有\n                            示例值: /root\n\n                        `S3ProxyConfig (Dict)`: 文件系统存储的s3proxy代理信息\n\n                            `Endpoint (str)`: 访问地址\n                                示例值: http://192.168.0.3:8000\n\n                            `Region (str)`: 区域\n                                示例值: cn-beijing\n\n                            `AccessKey (str)`: 访问s3proxy的AccessKey\n                                示例值: AKxxxx\n\n                            `SecretKey (str)`: 访问s3proxy的SecretKey\n                                示例值: xxxxxx\n\n                            `ForcePathStyle (bool)`: 是否强制使用path style, 还是使用virtual style\n                                示例值: True\n\n                    `SharedConfig (Dict)`: 共享集群配置,暂无具体配置信息\n                            示例值: {}\n\n                    `StoppedTime (int)`: 截止时间\n                        示例值: 1673525239\n\n                `PageNumber (int)`: 页码\n                    示例值: 1\n\n                `PageSize (int)`: 页长\n                    示例值: 10\n\n                `TotalCount (int)`: 总数量\n                    示例值: 10\n\n        \"\"\"\n        return self.__request('ListClusters', params)\n\n    def delete_cluster(self, params):\n        \"\"\" 删除集群\n\n        Args:\n            params (Dict):\n\n                `ID (str)`: 必选, 集群ID\n                    示例值: ucxxxxxxxxxxxxxxxxxxx\n\n        Returns:\n            Dict: empty dictionary\n\n        \"\"\"\n        return self.__request('DeleteCluster', params)\n\n    def update_api_accesskey(self, params):\n        \"\"\" 创建或更新集群的API aksk\n\n        Args:\n            params (Dict):\n\n                `ClusterID (str)`: 必选, 集群ID\n                    示例值: ucxxxxxxxxxxxxxxxxxxx\n\n                `AccessKeyID (str)`: 必选, 创建或更新的Access Key ID\n                    示例值: AKxxxxxxxx\n\n                `SecretAccessKey (str)`: 必选, 创建或更新的Secret Access Key\n                    示例值: xxxxxxxxxx\n\n        Returns:\n            Dict: empty dictionary\n\n        \"\"\"\n        return self.__request('UpdateAPIAccessKey', params)\n\n    def get_api_accesskey(self, params):\n        \"\"\" 获取集群配置的API aksk\n\n        Args:\n            params (Dict):\n\n                `ClusterID (str)`: 必选, 集群ID\n                    示例值: ucxxxxxxxxxxxxxxxxxxx\n\n        Returns:\n            Dict:\n\n                `AccessKeyID (str)`: 已经配置的Access Key ID, 未配置则为空\n\n        \"\"\"\n        return self.__request('GetAPIAccessKey', params)\n\n    def create_data_model(self, params):\n        \"\"\" 创建数据模型\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, 工作空间 ID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                `Name (str)`: 必选, 数据模型文件名\n                    示例值: my_entity\n\n                `Headers (List[str])`: 必选, 表头列表\n                    示例值: [\"my_entity_id\",\"aaa\",\"bbb\"]\n\n                `Rows (List[List[str]])`: 必选, 对象列表\n                    示例值: [[\"your-sample-3-id\",\"AAA\",\"BBB\"]]\n\n        Returns:\n            Dict:\n\n                `ID (str)`: 数据模型 ID\n                    示例值: dcxxxxxxxxxxxxxxxxxxx\n\n        \"\"\"\n        return self.__request('CreateDataModel', params)\n\n    def list_data_models(self, params):\n        \"\"\" 查询实体数据模型列表\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, 数据模型所在的workspaceID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n        Returns:\n            Dict:\n\n                `TotalCount (int)`: 数据模型总数\n                    示例值: 10\n\n                `Items (List[Dict])`: 列表项\n\n                    `ID (str)`: 数据模型ID\n                        示例值: dccc0ne5eig41ascop420\n\n                    `Name (str)`: 数据模型文件名\n                        示例值: test-datamodel\n\n                    `RowCount (int)`: 数据模型行数\n                        示例值: 100\n\n                    `Type (str)`: 数据模型类型（normal、set、workspace）\n                        示例值: normal\n\n        \"\"\"\n        return self.__request('ListDataModels', params)\n\n    def list_data_model_rows(self, params):\n        \"\"\" 分页查询实体数据模型的详细信息（行和列）\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, 数据模型所在的workspaceID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                `ID (str)`: 必选, Datamodel ID\n                    示例值: dcxxxxxxxxxxxxxxxxxxx\n\n                `PageNumber (int)`: 选填, 页码\n                    示例值: 1\n\n                `PageSize (int)`: 选填, 页长\n                    示例值: 10\n\n                `Filter (Dict)`: 选填, 筛选条件\n\n                    `Keyword (str)`: 选填, 筛选数据查询\n                        示例值: key\n\n                    `InSetIDs (List[str])`: 选填, 集合表中的实体ID\n                        示例值: [\"dcxxxxxxxxxxxxxxxxxxx\"]\n\n                `SortBy (str)`: 选填, 排序字段（默认为id）\n                    示例值: CreateTime\n\n                `SortOrder (str)`: 选填, 排序顺序（Desc Asc）\n                    示例值: Desc\n\n        Returns:\n            Dict:\n\n                `Headers (List[str])`: 表头列表\n                    示例值: [\"my_entity_id\",\"aaa\",\"bbb\"]\n\n                `Rows (List[List[str]])`: 对象列表\n                    示例值: [[\"your-sample-3-id\",\"AAA\",\"BBB\"]]\n\n                `PageNumber (int)`: 分页页码\n                    示例值: 1\n\n                `PageSize (int)`: 分页页长\n                    示例值: 10\n\n                `TotalCount (int)`: 总条数\n                    示例值: 100\n\n        \"\"\"\n        return self.__request('ListDataModelRows', params)\n\n    def delete_data_model_rows_and_headers(self, params):\n        \"\"\" 删除实体数据模型的具体行和列\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, 数据模型所在的workspaceID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                `ID (str)`: 必选, Datamodel ID\n                    示例值: dcxxxxxxxxxxxxxxxxxxx\n\n                `RowIDs (List[siring])`: 选填, 需要删除的数据模型行ID\n                    示例值: [\"0cafd453-e9fd-4147-bc39-0a16e3d4fedd\"]\n\n                `Headers (List[str])`: 选填, 需要删除的数据模型列名\n                    示例值: [\"sample_id\"]\n\n        Returns:\n            Dict: empty dictionary\n\n        \"\"\"\n        return self.__request('DeleteDataModelRowsAndHeaders', params)\n\n    def create_submission(self, params):\n        \"\"\" 投递工作流\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, 提交submussion的workspaceID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                `WorkflowID (str)`: 必选, 提交submission所使用的workflow的ID\n                    示例值: fcxxxxxxxxxxxxxxxxxxx\n\n                `Name (str)`: 必选, 投递名称\n                    示例值: name\n\n                `Description (str)`: 选填, 投递描述\n                    示例值: description\n\n                `DataModelID (str)`: 选填, 数据模型ID\n                    示例值: dcxxxxxxxxxxxxxxxxxxx\n\n                `DataModelRowIDs (List[str])`: 选填, 数据模型行ID\n                    示例值: [\"0cafd453-e9fd-4147-bc39-0a16e3d4fedd\"]\n\n                `Inputs (str)`: 必选, 输入配置，json序列化后的string\n                    示例值: {\"test.name1\":\"this.name1\",\"test.name2\":\"this.name2\",\"test.request\":\"this.requestFile\"}\n\n                `Outputs (str)`: 必选, 输出配置，json序列化后的string\n                    示例值: {\"test.response1\":\"this.response1\",\"test.response2\":\"this.response2\"}\n\n                `ExposedOptions (Dict)`: 必选, 平台暴露的Workflow Options\n\n                    `ReadFromCache (bool)`: 必选, 是否开启call-cache\n                        示例值: True\n\n                    `ExecutionRootDir (str)`: 必选, 工作流执行根路径，若为vke集群，则为s3:// + workspace所绑定的桶名，若为外部hpc集群，则为共享文件存储路径，如/share/data\n                        示例值: s3://bioos-wcxxxxxxxxxxxxxxxxxxx\n\n                `ClusterID (str)`: 必选, 运行集群ID\n                    示例值: ucxxxxxxxxxxxxxxxxxxx\n\n        Returns:\n            Dict:\n\n                `ID (str)`: Submission ID\n                    示例值: scxxxxxxxxxxxxxxxxxxx\n\n        \"\"\"\n        return self.__request('CreateSubmission', params)\n\n    def list_submissions(self, params):\n        \"\"\" 查询工作流投递记录列表\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, submission所在的workspaceID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                `Filter (Dict)`: 选填, 筛选条件\n\n                    `WorkflowID (str)`: 选填, 根据工作流ID筛选\n                        示例值: fcxxxxxxxxxxxxxxxxxxx\n\n                    `Status (List[str])`: 选填, 根据状态筛选（Succeeded、Failed、Running、Cancelled、Cancelling）\n                        示例值: [\"Running\",\"Cancelling\"]\n\n                    `ClusterID (str)`: 选填, 根据集群ID筛选\n                        示例值: ucxxxxxxxxxxxxxxxxxxx\n\n                    `Keyword (str)`: 选填, 根据名称筛选\n                        示例值: key\n\n                    `IDs (List[str])`: 选填, 根据submission ID筛选\n                        示例值: [\"scxxxxxxxxxxxxxxxxxxx\"]\n\n                `PageNumber (int)`: 选填, 页码\n                    示例值: 1\n\n                `PageSize (int)`: 选填, 页长\n                    示例值: 10\n\n\n        Returns:\n            Dict:\n                `Items (List[Dict])`: Workflow 列表\n\n                    `ID (str)`: 投递记录ID\n                        示例值: scxxxxxxxxxxxxxxxxxxx\n\n                    `Name (str)`: 投递记录名称\n                        示例值: name\n\n                    `Description (str)`: 投递记录描述\n                        示例值: description\n\n                    `Status (str)`: 投递记录状态（Succeeded、Failed、Running、Cancelled、Cancelling）\n                        示例值: Running\n\n                    `RunStatus (Dict)`: 工作流运行状态\n\n                        `Count (int)`: 工作流运行统计\n                            示例值: 120\n\n                        `Succeeded (int)`: 运行成功的工作流运行总数\n                            示例值: 90\n\n                        `Failed (int)`: 运行失败的工作流运行总数\n                            示例值: 5\n\n                        `Running (int)`: 运行中的工作流运行总数\n                            示例值: 5\n\n                        `Pending (int)`: 启动中的工作流运行总数\n                            示例值: 5\n\n                        `Cancelling (int)`: 终止中的工作流运行总数\n                            示例值: 5\n\n                        `Cancelled (int)`: 已终止的工作流运行总数\n                            示例值: 10\n\n                    `StartTime(int)`: 起始时间\n                        示例值: 1673525239\n\n                    `FinishTime(int)`: 截止时间\n                        示例值: 1673525239\n\n                    `Duration(int)`: 分析耗时(单位为s)\n                        示例值: 10\n\n                    `WorkflowID (str)`: 工作流ID\n                        示例值: fcxxxxxxxxxxxxxxxxxxx\n\n                    `ClusterID (str)`: 集群ID\n                        示例值: ucxxxxxxxxxxxxxxxxxxx\n\n                    `ClusterType (str)`: 集群类型（volc-vke、external、shared）若集群不存在则为空\n                        示例值: shared\n\n                    `DataModelID (str)`: 数据实体ID\n                        示例值: dcxxxxxxxxxxxxxxxxxxx\n\n                    `Inputs (str)`: 输入配置, json序列化后的字符串\n                        示例值: {\"test.name1\":\"this.name1\", \"test.name2\":\"this.name2\", \"test.request\":\"this.requestFile\"}\n\n                    `Outputs (str)`: 输出配置, json序列化后的字符串\n                        示例值: {\"test.response1\":\"this.response1\", \"test.response2\":\"this.response2\"}\n\n                    `ExposeOptions (Dict)`: 平台暴露的Workflow Options\n\n                        `ReadFromCache (bool)`: 是否开启读call-cache功能\n                            示例值: False\n\n                        `ExecutionRootDir (str)`: 工作流执行根路径\n                            示例值: /root\n\n                    `OwnerName (str)`: 创建者名称\n                        示例值: name\n\n                    `DataEntity (Dict)`: 数据实体统计\n\n                        `ID (str)`: 数据实体ID\n                            示例值: dcxxxxxxxxxxxxxxxxxxx\n\n                        `Name (str)`: 数据实体名称\n                            示例值: name\n\n                        `RowIDs (List[str])`: 数据实体行IDs\n                            示例值: [\"1\"]\n\n                `PageNumber (int)`: 页码\n                    示例值: 1\n\n                `PageSize (int)`: 页长\n                    示例值: 10\n\n                `TotalCount (int)`: 总数量\n                    示例值: 10\n\n        \"\"\"\n        return self.__request('ListSubmissions', params)\n\n    def list_overview_submissions(self, params):\n        \"\"\" 获取全局投递列表\n\n        Args:\n            params (Dict):\n\n                `PageNumber (int)`: 选填, 分页页码\n                    示例值: 1\n\n                `PageSize (int)`: 选填, 分页页长\n                    示例值: 10\n\n                `SortBy (str)`: 选填, 按字段排序（OwnerName StartTime）\n                    示例值: OwnerName\n\n                `SortOrder (str)`: 选填, 排序顺序\n                    示例值: Desc\n\n        Returns:\n            Dict:\n\n                `Items (List[Dict])`: 投递记录列表\n\n                    `ID (str)`: 投递记录 ID\n                        示例值: scxxxxxxxxxxxxxxxxxxx\n\n                    `Name (str)`: 投递记录名称\n                        示例值: name\n\n                    `WorkspaceID (str)`: 工作空间 ID\n                        示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                    `WorkspaceName (str)`: 工作空间名称\n                        示例值: name\n\n                    `OwnerUserID (int)`: 创建者用户ID 仅子账号有值\n                        示例值: 123456\n\n                    `OwnerName (str)`: 创建者名称\n                        示例值: name\n\n                    `Description (str)`: 投递记录描述\n                        示例值: description\n\n                    `Status (str)`: 投递记录状态 Succeeded,Failed,Running,Cancelled,Cancelling\n                        示例值: Succeeded\n\n                    `StartTime (int)`: 起始时间\n                        示例值: 1673525239\n\n                    `Duration (int)`: 分析耗时(单位为s)\n                        示例值: 10\n\n                    `WorkflowID (str)`: 工作流 ID\n                        示例值: fcxxxxxxxxxxxxxxxxxxx\n\n                `PageNumber (int)`: 分页页码\n                    示例值: 1\n\n                `PageSize (int)`: 分页页长\n                    示例值: 10\n\n                `TotalCount (int)`: 总条数\n                    示例值: 100\n\n        \"\"\"\n        return self.__request('ListOverviewSubmissions', params)\n\n    def delete_submission(self, params):\n        \"\"\" 删除工作流投递记录\n\n        Args:\n            params (Dict):\n\n                `ID (str)`: 必选, 投递记录 ID\n                    示例值: scxxxxxxxxxxxxxxxxxxx\n\n                `WorkspaceID (str)`: 必选, 工作空间 ID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n        Returns:\n            Dict: empty dictionary\n\n        \"\"\"\n        return self.__request('DeleteSubmission', params)\n\n    def cancel_submission(self, params):\n        \"\"\" 终止工作流投递记录\n\n        Args:\n            params (Dict):\n\n                `ID (str)`: 必选, 投递记录 ID\n                    示例值: scxxxxxxxxxxxxxxxxxxx\n\n                `WorkspaceID (str)`: 必选, 工作空间 ID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n        Returns:\n            Dict: empty dictionary\n\n        \"\"\"\n        return self.__request('CancelSubmission', params)\n\n    def list_runs(self, params):\n        \"\"\" 查询工作流运行列表\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, submission所在的workspaceID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                `SubmissionID (str)`: 必选, submission的ID\n                    示例值: scxxxxxxxxxxxxxxxxxxx\n\n                `Filter (Dict)`: 选填, 筛选条件\n\n                    `Keyword (str)`: 选填, 运行记录关键字\n                        示例值: key\n\n                    `IDs (List[str])`: 选填, 运行记录ID列表\n                        示例值: [\"rcxxxxxxxxxxxxxxxxxxx\"]\n\n                    `Status (List[str])`: 选填, 根据状态筛选（Pending、Running、Succeeded、Failed、Cancelling、Cancelled）\n                        示例值: [\"Pending\",\"Running\"]\n\n                `PageNumber (int)`: 选填, 页码\n                    示例值: 1\n\n                `PageSize (int)`: 选填, 页长\n                    示例值: 10\n\n        Returns:\n            Dict:\n\n                `Items (List[Dict])`: Run列表\n\n                    `ID (str)`: 运行记录ID\n                        示例值: rcxxxxxxxxxxxxxxxxxxx\n\n                    `DataEntityRowID (str)`: 数据实体 RowID\n                        示例值: 1\n\n                    `Status (str)`: 投递记录状态（Succeeded、Failed、Running、Pending、Cancelling、Cancelled）\n                        示例值: Running\n\n                    `StartTime (int)`: 起始时间\n                        示例值: 1673525239\n\n                    `FinishTime (int)`: 截止时间\n                        示例值: 1673525239\n\n                    `Duration (int)`: 分析耗时(单位为s)\n                        示例值: 10\n\n                    `SubmissionID (str)`: 投递记录ID\n                        示例值: scxxxxxxxxxxxxxxxxxxx\n\n                    `EngineRunID (str)`: 工作流引擎内运行记录 ID\n                        示例值: 05693535-dcf4-404f-8d18-2d3cac29916b\n\n                    `Inputs (str)`: 运行记录输入参数，json 序列化后的 string\n                        示例值: {\"test.name1\":\"world\",\"test.name2\":\"hello\",\"test.request\":\"s3://vci-dev/jxc-test/aaa.txt\"}\n\n                    `Outpus (str)`: 运行记录输出参数，json 序列化后的 string\n                        示例值: {\"test.resp\":\"abc\",\n                        \"test.response1\":\"s3://bioos-dev-wcb1e3v5eig4635iurevg/analysis/scb8gbtleig4f4jqjbtlg/test/d9ea2df5-b8d8-4603-9f62-496229e922c9/call-step21/execution/resp.txt\",\n                        \"test.response2\":\"s3://bioos-dev-wcb1e3v5eig4635iurevg/analysis/scb8gbtleig4f4jqjbtlg/test/d9ea2df5-b8d8-4603-9f62-496229e922c9/call-step22/execution/resp.txt\"}\n\n                    `TaskStatus (Dict)`: 工作流运行详情状态统计\n\n                        `Count (int)`: 任务运行统计\n                            示例值: 120\n\n                        `Succeeded (int)`: 运行成功的工作流运行总数\n                            示例值: 90\n\n                        `Failed (int)`: 运行失败的工作流运行总数\n                            示例值: 5\n\n                        `Running (int)`: 运行中的工作流运行总数\n                            示例值: 5\n\n                        `Queued (int)`: 排队中的工作流运行总数\n                            示例值: 5\n\n                        `Initializing (int)`: 启动中的工作流运行总数\n                            示例值: 5\n\n                        `Cancelled (int)`: 已终止的工作流运行总数\n                            示例值: 10\n\n                    `Log (str)`: 运行记录日志存储路径\n                        示例值: s3://bioos-wcxxxxxxxxxxxxxxxxxxx/analysis/scxxxxxxxxxxxxxxxxxxx/workflow.941846fb-158d-4d49-82e0-f2f39372e9e3.log\n\n                    `Message (str)`: 运行记录错误详情\n                        示例值: error message\n\n                `PageNumber (int)`: 页码\n                    示例值: 1\n\n                `PageSize (int)`: 页长\n                    示例值: 10\n\n                `TotalCount (int)`: 总数量\n                    示例值: 10\n\n        \"\"\"\n        return self.__request('ListRuns', params)\n\n    def cancel_run(self, params):\n        \"\"\" 取消工作流运行\n\n        Args:\n            params (Dict):\n\n                `ID (str)`: 必选, 运行记录 ID\n                    示例值:\n\n                `WorkspaceID (str)`: 必选, 工作空间ID\n                    示例值:\n\n        Returns:\n            Dict: empty dictionary\n\n        \"\"\"\n        return self.__request('CancelRun', params)\n\n    def list_tasks(self, params):\n        \"\"\" 查询工作流的task任务列表\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, submission所在的workspaceID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                `RunID (str)`: 必选, 运行记录ID\n                    示例值: rcxxxxxxxxxxxxxxxxxxx\n\n                `PageNumber (int)`: 选填, 页码\n                    示例值: 1\n\n                `PageSize (int)`: 选填, 页长\n                    示例值: 10\n\n        Returns:\n            Dict:\n\n                `Items (List[Dict])`: Task列表\n\n                    `Name (str)`: 任务名称\n                        示例值: name\n\n                    `RunID (str)`: 运行记录 ID\n                        示例值: rcxxxxxxxxxxxxxxxxxxx\n\n                    `Status (str)`: 任务状态，Succeeded -> 分析成功, Failed -> 分析失败, Running -> 分析中, Queued -> 排队中, Initializing -> 启动中, Cancelled -> 已终止\n                        示例值: Succeeded\n\n                    `StartTime (int)`: 起始时间\n                        示例值: 1687143483\n\n                    `FinishTime (int)`: 截止时间\n                        示例值: 1687143668\n\n                    `Duration (int)`: 分析耗时(单位为s)\n                        示例值: 185\n\n                    `Log (str)`: 任务日志存储路径\n                        示例值: s3://bioos-wcxxxxxxxxxxxxxxxxxxx/analysis/scxxxxxxxxxxxxxxxxxxx/workflow.941846fb-158d-4d49-82e0-f2f39372e9e3.log\n\n                    `Stdout (str)`: 任务输出存储路径\n                        示例值: s3://bioos-wcxxxxxxxxxxxxxxxxxxx/analysis/scxxxxxxxxxxxxxxxxxxx/melt/cd28ec5b-75df-4981-a7f5-90f1deba8a94/call-step1/shard-0/execution/stdout\n\n                    `Stderr (str)`: 任务错误存储路径\n                        示例值: s3://bioos-wcxxxxxxxxxxxxxxxxxxx/analysis/scxxxxxxxxxxxxxxxxxxx/melt/cd28ec5b-75df-4981-a7f5-90f1deba8a94/call-step1/shard-0/execution/stderr\n\n                    `ExecuteDuration (int)`: 实际运行分析耗时(单位为s)\n                        示例值: 0\n\n                    `JobName (str)`: job名称\n                        示例值: task-xxxxxxxx-ex-00\n\n                    `resourceClaimed (Dict)`: 资源申领\n\n                        `CPUCore (int)`: CPU 核数\n                            示例值: 1\n\n                        `MemoryGiB (int)`: 内存大小，单位GiB\n                            示例值: 2\n\n                        `StorageGiB (int)`: 存储大小，单位GiB\n                            示例值: 2\n\n                        `GPUGiB (int)`: GPU显存大小，单位GiB\n                            示例值: 2\n\n                    `resourceUsed (Dict)`: 资源消耗\n\n                        `CPUCore (int)`: CPU 核数\n                            示例值: 1\n\n                        `MemoryGiB (int)`: 内存大小，单位GiB\n                            示例值: 2\n\n                        `StorageGiB (int)`: 存储大小，单位GiB\n                            示例值: 2\n\n                        `GPUGiB (int)`: GPU显存大小，单位GiB\n                            示例值: 2\n\n                `PageNumber (int)`: 页码\n                    示例值: 1\n\n                `PageSize (int)`: 页长\n                    示例值: 10\n\n                `TotalCount (int)`: 总数量\n                    示例值: 10\n\n        \"\"\"\n        return self.__request('ListTasks', params)\n\n    def create_workflow(self, params):\n        \"\"\" 此接口为异步接口，当此接口返回成功时，会返回导入的workflowID信息，此时并不代表workflow导入成功，\n        需要调用ListWorkflows接口查看workflow导入情况，其返回的参数WorkflowImportStatus如果为Succeeded则为导入成功。\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, 工作空间 ID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                `Name (str)`: 必选, 工作流名称\n                    示例值: name\n\n                `Description (str)`: 选填, 工作流描述\n                    示例值: description\n\n                `Language (str)`: 必选, 语言类型, 包括 WDL/CWL/Nextflow\n                    示例值: WDL\n\n                `Source (str)`: 选填, 来源, http(s) 开头的地址, 为 file 来源类型时不填\n                    示例值: https://aaa.bbb.git\n\n                `Tag (str)`: 选填, tag, 为 dockstore 来源类型时对应 version, 为 file 来源类型时不填\n                    示例值: v1.0.0\n\n                `Token (str)`: 选填, git token, 为 dockstore/file 来源类型时不填\n                    示例值:\n\n                `MainWorkflowPath (str)`: 选填, 主工作流文件路径, 为 dockstore 来源时不填\n                    示例值: main.wdl\n\n                `SourceType (str)`: 必选, 来源类型, 包括 git dockstore file\n                    示例值: git\n\n                `Content (bytes)`: 选填, 文件导入的二进制 zip 包 base64 编码\n                    示例值:\n\n        Returns:\n            Dict:\n\n                `ID (str)`: WorkflowID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n        \"\"\"\n        return self.__request('CreateWorkflow', params)\n\n    def list_workflows(self, params):\n        \"\"\" 查询符合条件的workflows列表\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, workflow所在的workspaceID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                `PageNumber (int)`: 选填, 页码\n                    示例值: 1\n\n                `PageSize (int)`: 选填, 页长\n                    示例值: 10\n\n                `Filter (Dict)`: 选填, 筛选条件\n\n                    `Keyword (str)`: 选填, 根据名称筛选\n                        示例值: key\n\n                    `IDs (List[str])`: 选填, ID列表\n                        示例值: [\"wcxxxxxxxxxxxxxxxxxxx\"]\n\n                `SortBy (str)`: 选填, 排序字段（Name CreateTime）\n                    示例值: CreateTime\n\n                `SortOrder (str)`: 选填, 排序顺序（Desc Asc）\n                    示例值: Desc\n\n        Returns:\n            Dict:\n\n                `Items (List[Dict])`: Workflow 列表\n\n                    `ID (str)`: 工作流 ID\n                        示例值: fcxxxxxxxxxxxxxxxxxxx\n\n                    `Name (str)`: 工作流名称\n                        示例值: name\n\n                    `Description (str)`: 工作流描述\n                        示例值: description\n\n                    `CreateTime (int)`: 创建时间\n                        示例值: 1673525239\n\n                    `UpdateTime (int)`: 更新时间\n                        示例值: 1673525239\n\n                    `Language (str)`: 语言类型\n                        示例值: WDL\n\n                    `Source (str)`: 来源, http(s) 开头的地址\n                        示例值: https://aaa.bbb.git\n\n                    `Tag (str)`: tag\n                        示例值: master\n\n                    `Token (str)`: token\n                        示例值:\n\n                    `MainWorkflowPath (str)`: 主工作流文件路径\n                        示例值: main.wdl\n\n                    `Status (Dict)`: workflow导入状态\n\n                        `Phase (str)`: workflow导入状态（Importing、Succeeded、Failed）\n                            示例值: Succeeded\n\n                        `Message (str)`: 导入失败原因，Phase为Failed时有效\n                            示例值:\n\n                    `Inputs (Dict)`: wdl的intput信息\n\n                        `Name (str)`: 参数名称\n                            示例值: test\n\n                        `Type (str)`: 参数类型\n                            示例值: String\n\n                        `Optional (bool)`: 是否是可选参数\n                            示例值: True\n\n                        `Default (str)`: 默认值\n                            示例值: test\n\n                    `Outputs (Dict)`: wdl的output信息\n\n                        `Name (str)`: 参数名称\n                            示例值: test\n\n                        `Type (str)`: 参数类型\n                            示例值: String\n\n                        `Optional (bool)`: 是否是可选参数\n                            示例值: True\n\n                        `Default (str)`: 默认值\n                            示例值: test\n\n                    `OwnerName (str)`: 创建者名称\n                        示例值: name\n\n                    `Graph (str)`: wdl graph\n                        示例值:\n\n                    `SourceType (str)`: 来源类型, 包括git dockstore\n                        示例值: git\n\n                `PageNumber (int)`: 页码\n                    示例值: 1\n\n                `PageSize (int)`: 页长\n                    示例值: 10\n\n                `TotalCount (int)`: 总数量\n                    示例值: 10\n\n        \"\"\"\n        return self.__request('ListWorkflows', params)\n\n    def update_workflow(self, params):\n        \"\"\" 该接口的使用方式与CreateWorkflow类型一样，都需要ListWorkflows接口查看状态\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, 工作空间 ID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                `ID (str)`: 必选, 工作流 ID\n                    示例值: fcxxxxxxxxxxxxxxxxxxx\n\n                `Name (str)`: 必选, 工作流名称\n                    示例值: name\n\n                `Description (str)`: 选填, 工作流描述\n                    示例值: description\n\n                `Source (str)`: 选填, 来源, http(s) 开头的地址, 为 file 来源类型时不填\n                    示例值: https://aaa.bbb.git\n\n                `Tag (str)`: 选填, tag, 为 dockstore 来源类型时对应 version, 为 file 来源类型时不填\n                    示例值: master\n\n                `Token (str)`: 选填, token, 为 dockstore/file 来源类型时不填\n                    示例值:\n\n                `MainWorkflowPath (str)`: 选填, 主工作流文件路径, 为 dockstore 来源时不填\n                    示例值: main.wdl\n\n                `Content (bytes)`: 选填, 文件导入的二进制 zip 包\n                    示例值:\n\n        Returns:\n            Dict: empty dictionary\n\n        \"\"\"\n        return self.__request('UpdateWorkflow', params)\n\n    def delete_workflow(self, params):\n        \"\"\" 删除工作流\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, 工作空间 ID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                `ID (str)`: 必选, 工作流 ID\n                    示例值: fcxxxxxxxxxxxxxxxxxxx\n\n        Returns:\n            Dict: empty dictionary\n\n        \"\"\"\n        return self.__request('DeleteWorkflow', params)\n\n    def get_notebook_edit_info(self, params):\n        \"\"\" 启动Notebook Server并获取访问链接\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, 工作空间 ID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                `Name (str)`: 选填, Notebook文件名 对于Dashboard则为__dashboard__\n                    示例值: __dashboard__\n\n        Returns:\n            Dict:\n\n                `URL (str)`: jupyter访问链接\n                    示例值: https://bioos-xxx.xxx.volcanicengine.com/notebook-01/user/ucxxxxxxxxxxxxxxxxxxx/wcxxxxxxxxxxxxxxxxxxx\n\n        \"\"\"\n        return self.__request('GetNotebookEditInfo', params)\n\n    def get_notebook_server_settings(self, params):\n        \"\"\" 获取当前Notebook Server配置信息\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, 工作空间 ID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n        Returns:\n            Dict:\n\n                `ResourceSize (str)`: 资源规格，如果从未配置过返回\"\" small,middle,large等\n                    示例值: small\n\n                `ImageID (str)`: 镜像 ID，如果从未配置过返回\"\"\n                    示例值: 1\n\n                `TempImageName (str)`: 临时镜像名，如果从未配置过返回\"\"\n                    示例值: jupyter/minimal-notebook\n\n                `MountTOSEnabled (bool)`: 是否挂载TOS桶\n                    示例值: True\n\n                `StorageCapacity (int)`: 存储容量（byte）\n                    示例值: 107374182400\n\n        \"\"\"\n        return self.__request('GetNotebookServerSettings', params)\n\n    def get_notebook_server_stat(self, params):\n        \"\"\" 获取当前Notebook Server状态\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, 工作空间 ID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n        Returns:\n            Dict:\n\n                `Status (str)`: Server当前状态, spawn,ready,stop,absent\n                    示例值: spawn\n\n                `TOSAccessible (str)`: TOS挂载生效状态 取值有 OK ClusterNotSupport AccessKeyNotSet AccessKeyInvalid CSINotInstall CSINotReady BucketNotExist\n                    示例值: OK\n\n        \"\"\"\n        return self.__request('GetNotebookServerStat', params)\n\n    def list_notebook_server_images(self, params):\n        \"\"\" 列举Notebook Server镜像信息\n\n        Args:\n            params (Dict):\n\n                `ImageIDs (List[str])`: 选填, 镜像ID，不传则返回所有\n                    示例值: [\"1\",\"2\"]\n\n                `Source (str)`: 选填, 镜像来源 official,customized\n                    示例值: official\n\n                `Status (str)`: 选填, 镜像审核状态 pending,approve,reject\n                    示例值: pending\n\n                `DisplayName (str)`: 选填, 镜像名\n                    示例值:\n\n                `ImageName (str)`: 选填, 镜像地址\n                    示例值: python:latest\n\n                `OwnByMe (bool)`: 选填, 是否仅查看当前登录者所建镜像\n                    示例值: True\n\n                `PageNumber (int)`: 分页页码\n                    示例值: 1\n\n                `PageSize (int)`: 分页页长\n                    示例值: 10\n\n                `SortBy (str)`: 按字段排序, 取值有CreateTime ID\n                    示例值: CreateTime\n\n                `SortOrder (str)`: 排序顺序, Desc Asc\n                    示例值: Desc\n\n        Returns:\n            Dict:\n\n                `Images (List[Dict])`: 镜像信息列表\n\n                    `ImageID (str)`: 镜像 ID\n                        示例值: 1\n\n                   `DisplayName (str)`: 镜像名称(展示用)\n                       示例值: minimal-notebook\n\n                   `ImageName (str)`: 镜像名称\n                       示例值: jupyter/minimal-notebook\n\n                   `Description (str)`: 描述\n                       示例值: description\n\n                   `AccountID (int)`: 创建者主账户ID\n                       示例值: 0\n\n                   `UserID (int)`: 创建者租户ID\n                       示例值: 0\n\n                   `Status (str)`: 镜像状态 pending,approve,building,failure\n                       示例值: pending\n\n                   `Source (str)`: 镜像来源 official,building\n                       示例值: official\n\n                   `Packages (Dict)`: 工具包\n\n                        `Pip (Dict[str, str])`: pip工具包\n                            示例值: {\"numpy\":\"1.22.2\"}\n\n                        `Conda (Dict[str, str])`: conda工具包\n                            示例值: {\"numpy\":\"1.22.2\"}\n\n                        `R (Dict[str, str])`: R工具包\n                            示例值: {\"ggplot2\":\"3.4.4\"}\n\n                        `APT (Dict[str, str])`: apt工具包\n                            示例值: {\"python3-dev\":\"1.22.2\"}\n\n                   `BasicEnv (List[str])`: 基础环境参数，如python3.8等\n                       示例值: [\"Python3.9.10\", \"R 4.1.2\", \"Julia 1.7.2\"]\n\n                   `ImageVersion (str)`: 镜像版本\n                       示例值: 1.0.0\n\n                   `CreateTime (int)`: 创建时间\n                       示例值: 1680554098\n\n                   `UpdateTime (int)`: 更新时间\n                       示例值: 1680554098\n\n        \"\"\"\n        return self.__request('ListNotebookServerImages', params)\n\n    def list_notebook_server_resource_opts(self, params):\n        \"\"\" 列举Notebook Server可用资源配置\n\n        Args:\n            params (Dict): empty dictionary\n\n        Returns:\n            Dict:\n\n                `ResourceSize (List[Dict])`: 资源规格\n\n                    `ResourceSize (str)`: 资源规格枚举 small,middle,large等\n                        示例值: small\n\n                    `Cpu (int)`: 资源规格内容 cpu内核数（个）\n                        示例值: 2\n\n                    `Memory (int)`: 资源规格内容 memory大小（byte）\n                        示例值: 8589934592\n\n        \"\"\"\n        return self.__request('ListNotebookServerResourceOpts', params)\n\n    def stop_notebook_server(self, params):\n        \"\"\" 即时暂停当前Notebook Server\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, 工作空间 ID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n        Returns:\n            Dict: empty dictionary\n\n        \"\"\"\n        return self.__request('StopNotebookServer', params)\n\n    def update_notebook_server_settings(self, params):\n        \"\"\" 更新Notebook Server配置并异步暂停当前Notebook Server\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, 工作空间 ID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                `ResourceSize (str)`: 选填, 资源规格，没变化则不传 small,middle,large\n                    示例值: small\n\n                `ImageID (str)`: 选填, 镜像 ID，没变化则不传，与临时镜像名字端互斥\n                    示例值: 1\n\n                `MountTOSEnabled (bool)`: 选填, 是否挂载TOS桶，没变化则不传\n                    示例值: False\n\n                `TempImageName (str)`: 选填, 临时镜像名，没变化则不传，与镜像ID字段互斥\n                    示例值: jupyter/minimal-notebook\n\n        Returns:\n            Dict: empty dictionary\n\n        \"\"\"\n        return self.__request('UpdateNotebookServerSettings', params)\n\n    def create_notebook_server_image(self, params):\n        \"\"\" 创建Notebook Server镜像\n\n        Args:\n            params (Dict):\n\n                `BaseImage (str)`: 必选, 基础镜像。仅building镜像需要\n                    示例值: python:latest\n\n                `ImageName (str)`: 必选, 镜像名称\n                    示例值: custom:v1.0.0\n\n                `DisplayName (str)`: 必选, 镜像名称（展示用）\n                    示例值: custom\n\n                `Description (str)`: 选填, 镜像描述\n                    示例值: description\n\n                `BuildScript (str)`: 选填, 构建镜像中需要执行的shell脚本内容\n                    示例值:\n\n                `Source (str)`: 必选, 镜像来源, 取值为building\n                    示例值: building\n\n                `Packages (Dict)`: 必选, 工具包\n\n                    `Pip (Dict[str, str])`: 选填, pip工具包\n                        示例值: {\"numpy\":\"1.22.2\"}\n\n                    `Conda (Dict[str, str])`: 选填, conda工具包\n                        示例值: {\"numpy\":\"1.22.2\"}\n\n                    `R (Dict[str, str])`: 选填, R工具包\n                        示例值: {\"ggplot2\":\"3.4.4\"}\n\n                    `APT (Dict[str, str])`: 选填, apt工具包\n                        示例值: {\"python3-dev\":\"1.22.2\"}\n\n                `BasicEnv (List[str])`: 选填, 基础环境参数，如python3.8等\n                    示例值: [\"Python3.9.10\", \"R 4.1.2\", \"Julia 1.7.2\"]\n\n                `ImageVersion (str)`: 必选, 镜像版本\n                    示例值: 1.0.0\n\n        \"\"\"\n        return self.__request('CreateNotebookServerImage', params)\n\n    def list_notebook_servers(self, params):\n        \"\"\" 获取全局Notebook Server列表\n\n        Args:\n            params (Dict):\n\n                `PageNumber (int)`: 选填, 分页页码\n                    示例值: 1\n\n                `PageSize (int)`: 选填, 分页页长\n                    示例值: 10\n\n                `Filter (Dict)`: 选填, 筛选条件\n\n                    `Status\t(List[str])`: 选填, 筛选状态（spawn,ready,stop,absent）\n                        示例值: spawn\n\n                    `WorkspaceID (str)`: 选填, 工作空间 ID\n                        示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                    `UserID\t (int)`: 选填, 创建者用户ID 查主账号时则填0\n                        示例值: 123456\n\n                `SortBy (str)`: 选填, 按字段排序（OwnerName StartTime StorageCapacity LastActivityTime）\n                    示例值: OwnerName\n\n                `SortOrder (str)`: 选填, 排序顺序\n                    示例值: Desc\n\n        Returns:\n            Dict:\n\n                List[Dict]: Items, 列表\n\n                    `Name (str)`: 名称\n                        示例值: name\n\n                    `WorkspaceID (str)`: 工作空间 ID\n                        示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                    `WorkspaceName (str)`: 工作空间名称\n                        示例值: name\n\n                    `UserID (int)`: 创建者用户ID 主账号则为空\n                        示例值: 123456\n\n                    `OwnerName (str)`: 创建者名称\n                        示例值: ownerName\n\n                    `StorageCapacity (int)`: 存储容量（byte）\n                        示例值: 107374182400\n\n                    `Status (str)`: Server当前状态（spawn,ready,stop,absent）\n                        示例值: spawn\n\n                    `LastActivityTime (int)`: 最近活跃时间\n                        示例值: 1691493675\n\n                    `StartTime (int)`: 创建时间\n                        示例值: 1691493674\n\n                    `Duration (int)`: 使用时长(单位为s)\n                        示例值: 1\n\n                `TotalCount (int)`: 总条数\n                    示例值: 10\n\n        \"\"\"\n        return self.__request('ListNotebookServers', params)\n\n    def delete_notebook_server(self, params):\n        \"\"\" 删除当成Notebook Server\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, 工作空间ID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n                `UserID (int)`: 选填, 子用户ID，不传代表操作主账号\n                    示例值: 123456\n\n        Returns:\n            Dict: empty dictionary\n\n        \"\"\"\n        return self.__request('DeleteNotebookServer', params)\n\n    def delete_notebook_server_settings(self, params):\n        \"\"\" 删除当成Notebook Server配置信息\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, 工作空间ID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n        Returns:\n            Dict: empty dictionary\n\n        \"\"\"\n        return self.__request('DeleteNotebookServerSettings', params)\n\n    def get_notebook_server_extra_packages(self, params):\n        \"\"\" 获取当前Notebook Server安装的额外包信息\n\n        Args:\n            params (Dict):\n\n                `WorkspaceID (str)`: 必选, 工作空间ID\n                    示例值: wcxxxxxxxxxxxxxxxxxxx\n\n        Returns:\n            Dict:\n\n                `ExtraPackages (Dict)`: 额外工具包\n\n                    `Pip (Dict[str, str])`: 选填, pip工具包\n                        示例值: {\"numpy\":\"1.22.2\"}\n\n                    `Conda (Dict[str, str])`: 选填, conda工具包\n                        示例值: {\"numpy\":\"1.22.2\"}\n\n                    `R (Dict[str, str])`: 选填, R工具包\n                        示例值: {\"ggplot2\":\"3.4.4\"}\n\n                    `APT (Dict[str, str])`: 选填, apt工具包\n                        示例值: {\"python3-dev\":\"1.22.2\"}\n\n        \"\"\"\n        return self.__request('GetNotebookServerExtraPackages', params)\n\n    def list_data_files(self, params):\n        \"\"\" 获取数据集文件列表\n\n        Args:\n            params (Dict):\n\n                `DataSetID (str)`: 必选, 数据集ID\n                    示例值: tcxxxxxxxxxxxxxxxxxxx\n\n                `PageNumber (int)`: 选填, 分页页码\n                    示例值: 1\n\n                `PageSize (int)`: 选填, 分页页长\n                    示例值: 10\n\n                `Filter (Dict)`: 选填, 筛选条件\n\n                    `IDs (List[str])`: 选填, 数据集ID\n                        示例值: [\"tcxxxxxxxxxxxxxxxxxxx\"]\n\n                    `FileType (List[str])`: 选填, 文件类型列表\n                        示例值: [\"csv\"]\n\n                    `Keyword (str)`: 选填, 模糊匹配名称/描述\n                        示例值: key\n\n                `SortBy (str)`: 选填, 按字段排序（Name CreateTime UpdateTime FileSize）\n                    示例值: Name\n\n                `SortOrder (str)`: 选填, 排序顺序\n                    示例值: Desc\n\n        Returns:\n            Dict:\n\n                `Items (List[Dict])`: 数据文件列表\n\n                    `ID (str)`: 数据文件ID\n                        示例值: ecxxxxxxxxxxxxxxxxxxx\n\n                    `Name (str)`: 名称\n                        示例值: name\n\n                    `Description (str)`: 描述\n                        示例值: description\n\n                    `CreateTime (int)`: 创建时间\n                        示例值: 1691493674\n\n                    `UpdateTime (int)`: 更新时间\n                        示例值: 1691493674\n\n                    `FileType (str)`: 文件类型\n                        示例值: csv\n\n                    `FileSize (int)`: 文件大小(byte)\n                        示例值: 123\n\n                    `Source (str)`: 数据来源\n                        示例值: https://cromwell.tos-xxx.volces.com/xxx.csv\n\n                    `DRSURL (str)`: DRS 路径\n                        示例值: drs://drs.xxx.xxx.com/ecxxxxxxxxxxxxxxxxxxx\n\n                    `SampleRow (List[str])`: 数据文件样本信息\n                        示例值: [\"test\", \"测试\", \"2011-01-02\", \"2011-01-02\", \"txt\", \"\", \"s3://xxx/test.txt\"]\n\n                `PageNumber (int)`: 分页页码\n                    示例值: 1\n\n                `PageSize (int)`: 分页页长\n                    示例值: 10\n\n                `TotalCount (int)`: 总条数\n                    示例值: 100\n\n        \"\"\"\n        return self.__request('ListDataFiles', params)\n\n    def list_data_sets(self, params):\n        \"\"\" 获取数据集列表\n\n        Args:\n            params (Dict):\n\n                `PageNumber (int)`: 选填, 分页页码\n                    示例值: 1\n\n                `PageSize (int)`: 选填, 分页页长\n                    示例值: 10\n\n                `Filter (Dict)`: 选填, 过滤条件\n\n                    `IDs (List[str])`: 选填, 数据集ID\n                        示例值: [\"tcxxxxxxxxxxxxxxxxxxx\"]\n\n                    `ProjectDataTypes (List[str])`: 选填, 项目数据类型列表 ID\n                        示例值:\n\n                    `Categories\t(List[str])`: 选填, 项目数据类型 ID 列表\n                        示例值: [\"示例数据\"]\n\n                    `Keyword (str)`: 选填, 模糊匹配名称/描述/所有者\n                        示例值: key\n\n                    `Owner (str)`: 选填, 模糊匹配数据所有者\n                        示例值: ownerName\n\n                    `Catalogues (List[str])`: 选填, 数据集编目列表 ID\n                        示例值: 【“OMICSDATA”】\n\n                `SortBy (str)`: 选填, 按字段排序（Name CreateTime）\n                    示例值: Name\n\n                `SortOrder (str)`: 选填, 排序顺序\n                    示例值: Desc\n\n        Returns:\n            Dict:\n\n                `Items (List[Dict])`: 数据集列表\n\n                    `ID (str)`: 数据集ID\n                        示例值: tcxxxxxxxxxxxxxxxxxxx\n\n                    `Name (str)`: 名称\n                        示例值: name\n\n                    `Description (str)`: 描述\n                        示例值: desc\n\n                    `CreateTime (int)`: 创建时间\n                        示例值: 1691493674\n\n                    `UpdateTime\t(int)`: 更新时间\n                        示例值: 1691493674\n\n                    `Owners (List[str])`: 数据集所有者\n                        示例值: [\"owner1\", \"owner2\"]\n\n                    `Admin (str)`: 数据集管理员\n                        示例值: admin\n\n                    `Category (str)`: 领域 ID 列表\n                        示例值: 示例数据\n\n                    `Labels\t(List[str])`: 标签 ID 列表\n                        示例值: [\"demo\"]\n\n                    `DocURL (str)`: 帮助文档链接\n                        示例值: https://console.volcengine.com/bioos/region:bioos+cn-beijing/public-workspace/wcxxxxxxxxxxxxxxxxxxx/dashboard\n\n                    `Email (str)`: email\n                        示例值: bioos@xxx.xxx\n\n                    `Licence (str)`: 许可/使用条款\n                        示例值: MIT\n\n                    `ProjectDataTypes (List[str])`: 项目数据类型列表 ID\n                        示例值:\n\n                    `SampleScope (str)`: 样本范围\n                        示例值: 111\n\n                    `ExternalLink (str)`: 外部链接\n                        示例值: https://bytedance.feishu.cn/docx/Mcxxxxxxxxxxxxxxxxxxxx\n\n                    `ExternalLinkDescription (str)`: 外部链接描述\n                        示例值: description\n\n                    `ExampleTutorial (str)`: 示例教程\n                        示例值: 111\n\n                    `Tools (str)`: 工具/应用\n                        示例值: https://bytedance.feishu.cn/docx/Mcxxxxxxxxxxxxxxxxxxxx\n\n                    `Publications (List[Dict])`: 出版物\n\n                        `ID (str)`: 出版物 ID\n                            示例值: pcxxxxxxxxxxxxxxxxxxx\n\n                        `Name (str)`: 名称\n                            示例值: name\n\n                        `AccessURL (str)`: 在线地址\n                            示例值: http://222.com\n\n                        `Authors (List[str])`: 作者\n                            示例值: [\"author1\", \"author2\"]\n\n                        `Quotation (str)`: 引文\n                            示例值:\n\n                    `SampleHeaders (List[str])`: 数据文件样本信息表头\n                        示例值: [\"文件名\", \"文件描述\", \"建立时间\", \"更新时间\", \"文件类型\", \"数据来源\", \"数据路径\"]\n\n                    `CustomHeaderOrders (Dict[str, str])`: 数据文件自定义表头顺序\n                        示例值:\n\n                    `CollectedBy (str)`: 被收藏的数据项目 ID\n                        示例值: ocxxxxxxxxxxxxxxxxxxx\n\n                    `Catalogue (str)`: 数据集编目 ID\n                        示例值: OMICSDATA\n\n                `PageNumber (int)`: 分页页码\n                    示例值: 1\n\n                `PageSize (int)`: 分页页长\n                    示例值: 10\n\n                `TotalCount (int)`: 总条数\n                    示例值: 100\n\n        \"\"\"\n        return self.__request('ListDataSets', params)\n\n    def create_data_set(self, params):\n        \"\"\" 创建数据集\n\n        Args:\n            params (Dict):\n\n                `Name (str)`: 必选, 名称\n                    示例值: name\n\n                `Description (str)`: 必选, 描述\n                    示例值: description\n\n                `CreateTime (int)`: 必选, 创建时间\n                    示例值: 1691493674\n\n                `UpdateTime (int)`: 必选, 更新时间\n                    示例值: 1691493674\n\n                `Owners (List[str])`: 必选, 用户\n                    示例值: [\"user1\", \"user2\"]\n\n                `Category (str)`: 必选, 领域 ID 列表\n                    示例值: 示例数据\n\n                `Labels (List[str])`: 选填, 标签 ID 列表\n                    示例值: [\"demo\"]\n\n                `DocURL (str)`: 必选, 帮助文档链接\n                    示例值: https://console.volcengine.com/bioos/region:bioos+cn-beijing/public-workspace/wcxxxxxxxxxxxxxxxxxxx/dashboard\n\n                `Email (str)`: 必选, email\n                    示例值: bioos\n\n                `Licence (str)`: 选填, 许可/使用条款\n                    示例值: MIT\n\n                `ProjectDataTypes (List[str])`: 选填, 项目数据类型列表\n                    示例值:\n\n                `SampleScope (str)`: 选填, 样本范围\n                    示例值: 111\n\n                `ExternalLink (str)`: 选填, 外部链接\n                    示例值: https://bytedance.feishu.cn/docx/Mcxxxxxxxxxxxxxxxxxxxx\n\n                `ExternalLinkDescription (str)`: 选填, 外部链接描述\n                    示例值: description\n\n                `ExampleTutorial (str)`: 选填, 示例教程\n                    示例值:\n\n                `Tools (str)`: 选填, 工具/应用\n                    示例值:\n\n                `Catalogue (str)`: 必选, 数据集编目 ID\n                    示例值: OMICSDATA\n\n                `Publications (List[Dict])`: 选填, 出版物\n\n                    `Name (str)`: 必选, 名称\n                                示例值: name\n\n                    `AccessURL (str)`: 选填, 在线地址\n                                示例值: http://222.com\n\n                    `Authors (List[str})`: 选填, 作者\n                                示例值: [\"author1\", \"author2\"]\n\n                    `Quotation (str)`: 选填, 引文\n                                示例值:\n\n                `DataFilesAccessURL (str)`: 选填, 数据文件 csv 下载路径\n                    示例值:\n\n                `DataFileSamplesAccessURL (str)`: 选填, 数据文件样本信息 csv 下载路径\n                    示例值:\n\n                `DataFileAccessMethodURL (str)`: 选填, 数据文件访问方法文件下载路径\n                    示例值:\n\n        Returns:\n            Dict:\n\n                `ID (str)`: 数据集ID\n                    示例值: tcxxxxxxxxxxxxxxxxxxx\n\n        \"\"\"\n        return self.__request('CreateDataSet', params)\n\n    def delete_data_set(self, params):\n        \"\"\" 删除数据集\n\n        Args:\n            params (Dict):\n\n                `ID (str)`: 必选, 数据集 ID\n                    示例值: tcxxxxxxxxxxxxxxxxxxx\n\n        Returns:\n            Dict: empty dictionary\n\n        \"\"\"\n        return self.__request('DeleteDataSet', params)\n\n    def get_trs_workflow_info(self, params):\n        \"\"\" 查询trs工作流信息\n\n        Args:\n            params (Dict):\n\n                `TRSServer (str)`: 必选, trs Server地址\n                    示例值: https://dockstore.org\n\n                `ID (str)`: 必选, trs ID\n                    示例值: #workflow/github.com/aaa/bbb/ccc\n\n        Returns:\n            Dict:\n\n                `Name (str)`: trs工作流名称\n                    示例值: name\n\n                `Description (str)`: trs工作流描述\n                    示例值: description\n\n                `VersionsInfo (List[Dict])`: trs工作流具体版本信息\n\n                    `Name (str)`: 版本名称\n                        示例值: master\n\n                    `Language (str)`: 语言类型, 包括 WDL/CWL/Nextflow\n                        示例值: WDL\n\n        \"\"\"\n        return self.__request('GetTRSWorkflowInfo', params)\n\n    def __request(self, action, params):\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception('empty response')\n        res_json = json.loads(res)\n        if 'Result' not in res_json.keys():\n            return res_json\n        return res_json['Result']\n"
  },
  {
    "path": "volcengine/bioos/README.md",
    "content": "## Example\n\n调用代码示例均在`volcengine/example/bioos`文件夹下\n\n运行代码方式为在根目录下执行\n\n```bash\npython volcengine/example/bioos/example_xxx_xxx.py\n```\n\n## Sphinx文档\n在**volcengine/bioos/doc**目录下执行下列命令生成html文件\n```bash\nmake html\n```\n接着进入生成的build/html目录执行下列命令启动服务\n```bash\npython -m http.server ${port}\n```\n最后在偏好的浏览器中输入`127.0.0.1:${port}`查看文档\n\n## 接口文档\n文档链接请点击[这里](https://www.volcengine.com/docs/6971)\n"
  },
  {
    "path": "volcengine/bioos/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/bioos/doc/Makefile",
    "content": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line, and also\n# from the environment for the first two.\nSPHINXOPTS    ?=\nSPHINXBUILD   ?= sphinx-build\nSOURCEDIR     = source\nBUILDDIR      = build\n\n# Put it first so that \"make\" without argument is like \"make help\".\nhelp:\n\t@$(SPHINXBUILD) -M help \"$(SOURCEDIR)\" \"$(BUILDDIR)\" $(SPHINXOPTS) $(O)\n\n.PHONY: help Makefile\n\n# Catch-all target: route all unknown targets to Sphinx using the new\n# \"make mode\" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).\n%: Makefile\n\t@$(SPHINXBUILD) -M $@ \"$(SOURCEDIR)\" \"$(BUILDDIR)\" $(SPHINXOPTS) $(O)\n"
  },
  {
    "path": "volcengine/bioos/doc/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/bioos/doc/make.bat",
    "content": "@ECHO OFF\n\npushd %~dp0\n\nREM Command file for Sphinx documentation\n\nif \"%SPHINXBUILD%\" == \"\" (\n\tset SPHINXBUILD=sphinx-build\n)\nset SOURCEDIR=source\nset BUILDDIR=build\n\n%SPHINXBUILD% >NUL 2>NUL\nif errorlevel 9009 (\n\techo.\n\techo.The 'sphinx-build' command was not found. Make sure you have Sphinx\n\techo.installed, then set the SPHINXBUILD environment variable to point\n\techo.to the full path of the 'sphinx-build' executable. Alternatively you\n\techo.may add the Sphinx directory to PATH.\n\techo.\n\techo.If you don't have Sphinx installed, grab it from\n\techo.https://www.sphinx-doc.org/\n\texit /b 1\n)\n\nif \"%1\" == \"\" goto help\n\n%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%\ngoto end\n\n:help\n%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%\n\n:end\npopd\n"
  },
  {
    "path": "volcengine/bioos/doc/source/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/bioos/doc/source/bioos.rst",
    "content": "bioos\n===============================\n\n工作空间\n-------------------------------\n.. autofunction:: bioos.BioOsService.BioOsService.create_workspace\n\n.. autofunction:: bioos.BioOsService.BioOsService.list_workspaces\n\n.. autofunction:: bioos.BioOsService.BioOsService.update_workspace\n\n.. autofunction:: bioos.BioOsService.BioOsService.delete_workspace\n\n.. autofunction:: bioos.BioOsService.BioOsService.bind_cluster_to_workspace\n\n.. autofunction:: bioos.BioOsService.BioOsService.unbind_cluster_and_workspace\n\n.. autofunction:: bioos.BioOsService.BioOsService.list_clusters_of_workspace\n\n.. autofunction:: bioos.BioOsService.BioOsService.list_workspace_labels\n\n集群\n-------------------------------\n.. autofunction:: bioos.BioOsService.BioOsService.list_clusters\n\n.. autofunction:: bioos.BioOsService.BioOsService.delete_cluster\n\n.. autofunction:: bioos.BioOsService.BioOsService.update_api_accesskey\n\n.. autofunction:: bioos.BioOsService.BioOsService.get_api_accesskey\n\n工作流\n-------------------------------\n.. autofunction:: bioos.BioOsService.BioOsService.create_workflow\n\n.. autofunction:: bioos.BioOsService.BioOsService.list_workflows\n\n.. autofunction:: bioos.BioOsService.BioOsService.update_workflow\n\n.. autofunction:: bioos.BioOsService.BioOsService.delete_workflow\n\n.. autofunction:: bioos.BioOsService.BioOsService.get_trs_workflow_info\n\n数据模型\n-------------------------------\n.. autofunction:: bioos.BioOsService.BioOsService.create_data_model\n\n.. autofunction:: bioos.BioOsService.BioOsService.list_data_models\n\n.. autofunction:: bioos.BioOsService.BioOsService.list_data_model_rows\n\n.. autofunction:: bioos.BioOsService.BioOsService.delete_data_model_rows_and_headers\n\n数据集\n-------------------------------\n.. autofunction:: bioos.BioOsService.BioOsService.list_data_files\n\n.. autofunction:: bioos.BioOsService.BioOsService.list_data_sets\n\n.. autofunction:: bioos.BioOsService.BioOsService.create_data_set\n\n.. autofunction:: bioos.BioOsService.BioOsService.delete_data_set\n\n投递\n-------------------------------\n.. autofunction:: bioos.BioOsService.BioOsService.create_submission\n\n.. autofunction:: bioos.BioOsService.BioOsService.list_submissions\n\n.. autofunction:: bioos.BioOsService.BioOsService.delete_submission\n\n.. autofunction:: bioos.BioOsService.BioOsService.cancel_submission\n\n.. autofunction:: bioos.BioOsService.BioOsService.list_overview_submissions\n\n运行\n-------------------------------\n.. autofunction:: bioos.BioOsService.BioOsService.list_runs\n\n.. autofunction:: bioos.BioOsService.BioOsService.cancel_run\n\n任务\n-------------------------------\n.. autofunction:: bioos.BioOsService.BioOsService.list_tasks\n\nNotebook server\n-------------------------------\n.. autofunction:: bioos.BioOsService.BioOsService.get_notebook_edit_info\n\n.. autofunction:: bioos.BioOsService.BioOsService.get_notebook_server_settings\n\n.. autofunction:: bioos.BioOsService.BioOsService.get_notebook_server_stat\n\n.. autofunction:: bioos.BioOsService.BioOsService.list_notebook_server_images\n\n.. autofunction:: bioos.BioOsService.BioOsService.list_notebook_server_resource_opts\n\n.. autofunction:: bioos.BioOsService.BioOsService.stop_notebook_server\n\n.. autofunction:: bioos.BioOsService.BioOsService.update_notebook_server_settings\n\n.. autofunction:: bioos.BioOsService.BioOsService.create_notebook_server_image\n\n.. autofunction:: bioos.BioOsService.BioOsService.list_notebook_servers\n\n.. autofunction:: bioos.BioOsService.BioOsService.delete_notebook_server\n\n.. autofunction:: bioos.BioOsService.BioOsService.delete_notebook_server_settings\n\n.. autofunction:: bioos.BioOsService.BioOsService.get_notebook_server_extra_packages\n"
  },
  {
    "path": "volcengine/bioos/doc/source/conf.py",
    "content": "# Configuration file for the Sphinx documentation builder.\n#\n# For the full list of built-in configuration values, see the documentation:\n# https://www.sphinx-doc.org/en/master/usage/configuration.html\n\nimport os\nimport sys\n\n# -- Project information -----------------------------------------------------\n# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information\n\nproject = 'bioos'\ncopyright = '2023, jixinchi'\nauthor = 'jixinchi'\n\n# -- General configuration ---------------------------------------------------\n# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration\n\nextensions = ['sphinx.ext.autodoc', 'sphinx.ext.napoleon']\n\ntemplates_path = ['_templates']\nexclude_patterns = []\n\nlanguage = '[en]'\n\n# -- Options for HTML output -------------------------------------------------\n# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output\n\nhtml_theme = 'sphinxdoc'\nhtml_static_path = ['_static']\n\nautodoc_default_options = {\n    'members': True,\n    'member-order': 'bysource',\n    'special-members': '__init__',\n}\n\n\nsys.path.insert(0, os.path.abspath(os.path.join('..', '../..')))"
  },
  {
    "path": "volcengine/bioos/doc/source/index.rst",
    "content": ".. bioos documentation master file, created by\n   sphinx-quickstart on Thu Mar 16 15:15:05 2023.\n   You can adapt this file completely to your liking, but it should at least\n   contain the root `toctree` directive.\n\nWelcome to bioos's documentation!\n=================================\n\n.. toctree::\n   :maxdepth: 2\n   :caption: Contents:\n\n      bioos <bioos.rst>\n\nInstallation\n==================\n\nPython 版本需要不低于2.7，可以直接通过pip进行安装\n\nExample\n------------------\n        ::\n\n            pip install volcengine\n\nQuickstart\n==================\n\n密钥使用授权\n------------------\n*仅子账号需要关注*\n\n1. 登录控制台，点击右上角头像，在下拉菜单中选择「访问控制」。\n\n2. 点击左侧边的「策略管理」，确认本子账户拥有「AccessKeyFullAccess」权限或包含此权限的更高级权限，例如「AdministratorAccess」，若没有则用 主账号 登录控制台为子账户添加相关权限。\n\nExample\n------------------\n        ::\n\n         from __future__ import print_function\n\n         from volcengine.bioos.BioOsService import BioOsService\n\n         if __name__ == '__main__':\n             # set endpoint/region here if the default value is unsatisfied\n             bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n             # call below method if you don't set ak and sk in $HOME/.volc/config\n             bioos_service.set_ak('ak')\n             bioos_service.set_sk('sk')\n\n             params = {}\n\n             resp = bioos_service.list_workspaces(params)\n             print(resp)\n\nIndices and tables\n==================\n\n* :ref:`genindex`\n* :ref:`search`\n"
  },
  {
    "path": "volcengine/business_security/RiskDetectionService.py",
    "content": "import json\nimport threading\nimport redo\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom requests import exceptions\n\n\nclass RiskDetectService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(RiskDetectService, \"_instance\"):\n            with RiskDetectService._instance_lock:\n                if not hasattr(RiskDetectService, \"_instance\"):\n                    RiskDetectService._instance = object.__new__(cls)\n        return RiskDetectService._instance\n\n    def __init__(self):\n        self.service_info = RiskDetectService.get_service_info()\n        self.api_info = RiskDetectService.get_api_info()\n        super(RiskDetectService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info():\n        service_info = ServiceInfo(\"riskcontrol.volcengineapi.com\", {'Accept': 'application/json'},\n                                   Credentials('', '', 'BusinessSecurity', 'cn-north-1'), 5, 5)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\"RiskDetection\": ApiInfo(\"POST\", \"/\", {\"Action\": \"RiskDetection\", \"Version\": \"2021-02-02\"}, {}, {}),\n                    \"AsyncRiskDetection\": ApiInfo(\"POST\", \"/\", {\"Action\": \"AsyncRiskDetection\", \"Version\": \"2021-02-25\"}, {}, {}),\n                    \"RiskResult\": ApiInfo(\"GET\", \"/\", {\"Action\": \"RiskResult\", \"Version\": \"2021-03-10\"}, {}, {}),\n                    \"AccountRisk\": ApiInfo(\"POST\", \"/\", {\"Action\": \"AccountRisk\", \"Version\": \"2020-12-25\"}, {}, {}),\n                    \"MobileStatus\": ApiInfo(\"POST\", \"/\", {\"Action\": \"MobileStatus\", \"Version\": \"2020-12-25\"}, {}, {}),\n                    \"ElementVerify\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ElementVerify\", \"Version\": \"2021-11-23\"}, {}, {}),\n                    \"MobileStatusV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"MobileStatus\", \"Version\": \"2022-04-13\"}, {}, {}),\n                    \"ElementVerifyV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ElementVerify\", \"Version\": \"2022-04-13\"}, {}, {}),\n                    \"SimpleRiskStat\": ApiInfo(\"GET\", \"/\", {\"Action\": \"SimpleRiskStat\", \"Version\": \"2022-12-23\"}, {}, {}),\n                    \"ContentRiskStat\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ContentRiskStat\", \"Version\": \"2022-12-23\"}, {}, {}),\n                }\n\n        return api_info\n\n    def set_socket_timeout(self, timeout):\n        self.service_info.socket_timeout = timeout\n\n    def set_connection_timeout(self, timeout):\n        self.service_info.connection_timeout = timeout\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def risk_detect(self, params, body):\n        res = self.json(\"RiskDetection\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def async_risk_detect(self, params, body):\n        res = self.json(\"AsyncRiskDetection\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def risk_result(self, params, body):\n        res = self.get(\"RiskResult\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def account_risk(self, params, body):\n        res = self.json(\"AccountRisk\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def mobile_status_v2(self, params, body):\n        res = self.json(\"MobileStatusV2\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def element_verify_v2(self, params, body):\n        res = self.json(\"ElementVerifyV2\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n    \n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def simple_risk_stat(self, params, body):\n        res = self.get(\"SimpleRiskStat\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def content_risk_stat(self, params, body):\n        res = self.get(\"ContentRiskStat\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json"
  },
  {
    "path": "volcengine/business_security/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/cdn/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/cdn/service.py",
    "content": "#  -*- coding: utf-8 -*-\nimport json\nimport threading\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\n\nGET = \"GET\"\nPOST = \"POST\"\nSERVICE_VERSION = \"2021-03-01\"\n\nservice_info_map = {\n    \"cn-north-1\": ServiceInfo(\"cdn.volcengineapi.com\", {'accept': 'application/json', },\n                              Credentials('', '', \"CDN\", \"cn-north-1\"), 60 * 5, 60 * 5, \"https\"),\n}\n\napi_info = {\n    # 添加加速域名: https://www.volcengine.com/docs/6454/97340\n    \"AddCdnDomain\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"AddCdnDomain\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 上线加速域名: https://www.volcengine.com/docs/6454/74667\n    \"StartCdnDomain\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"StartCdnDomain\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 下线加速域名: https://www.volcengine.com/docs/6454/75129\n    \"StopCdnDomain\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"StopCdnDomain\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 删除加速域名: https://www.volcengine.com/docs/6454/75130\n    \"DeleteCdnDomain\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DeleteCdnDomain\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取域名列表: https://www.volcengine.com/docs/6454/75269\n    \"ListCdnDomains\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"ListCdnDomains\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取域名配置详情: https://www.volcengine.com/docs/6454/80320\n    \"DescribeCdnConfig\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeCdnConfig\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 修改加速域名配置: https://www.volcengine.com/docs/6454/97266\n    \"UpdateCdnConfig\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"UpdateCdnConfig\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取访问统计的细分数据: https://www.volcengine.com/docs/6454/70442\n    \"DescribeCdnData\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeCdnData\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取访问统计的汇总数据: https://www.volcengine.com/docs/6454/96132\n    \"DescribeEdgeNrtDataSummary\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeEdgeNrtDataSummary\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取回源统计的细分数据: https://www.volcengine.com/docs/6454/70443\n    \"DescribeCdnOriginData\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeCdnOriginData\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取回源统计的汇总数据: https://www.volcengine.com/docs/6454/96133\n    \"DescribeOriginNrtDataSummary\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeOriginNrtDataSummary\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取省份运营商的细分数据: https://www.volcengine.com/docs/6454/75159\n    \"DescribeCdnDataDetail\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeCdnDataDetail\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取多个域名的省份和运营商的细分数据: https://www.volcengine.com/docs/6454/145577\n    \"DescribeDistrictIspData\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeDistrictIspData\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取独立访客的细分数据: https://www.volcengine.com/docs/6454/79321\n    \"DescribeEdgeStatisticalData\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeEdgeStatisticalData\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取访问统计的排行数据: https://www.volcengine.com/docs/6454/96145\n    \"DescribeEdgeTopNrtData\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeEdgeTopNrtData\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取回源数据的统计排序: https://www.volcengine.com/docs/6454/104892\n    \"DescribeOriginTopNrtData\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeOriginTopNrtData\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取访问状态码的统计排序: https://www.volcengine.com/docs/6454/104888\n    \"DescribeEdgeTopStatusCode\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeEdgeTopStatusCode\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取回源状态码的统计排序: https://www.volcengine.com/docs/6454/104891\n    \"DescribeOriginTopStatusCode\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeOriginTopStatusCode\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取热点及访客排行数据: https://www.volcengine.com/docs/6454/79322\n    \"DescribeEdgeTopStatisticalData\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeEdgeTopStatisticalData\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取区域和 ISP 列表: https://www.volcengine.com/docs/6454/70445\n    \"DescribeCdnRegionAndIsp\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeCdnRegionAndIsp\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取服务相关信息: https://www.volcengine.com/docs/6454/78999\n    \"DescribeCdnService\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeCdnService\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取计费指标的细分数据: https://www.volcengine.com/docs/6454/96167\n    \"DescribeAccountingData\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeAccountingData\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 提交刷新任务: https://www.volcengine.com/docs/6454/70438\n    \"SubmitRefreshTask\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"SubmitRefreshTask\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 提交预热任务: https://www.volcengine.com/docs/6454/70436\n    \"SubmitPreloadTask\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"SubmitPreloadTask\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取刷新预热任务信息: https://www.volcengine.com/docs/6454/70437\n    \"DescribeContentTasks\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeContentTasks\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取刷新预热配额信息: https://www.volcengine.com/docs/6454/70439\n    \"DescribeContentQuota\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeContentQuota\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 提交封禁任务: https://www.volcengine.com/docs/6454/79890\n    \"SubmitBlockTask\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"SubmitBlockTask\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 提交解封任务: https://www.volcengine.com/docs/6454/79893\n    \"SubmitUnblockTask\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"SubmitUnblockTask\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取封禁解封任务信息: https://www.volcengine.com/docs/6454/79906\n    \"DescribeContentBlockTasks\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeContentBlockTasks\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取访问日志下载链接: https://www.volcengine.com/docs/6454/70446\n    \"DescribeCdnAccessLog\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeCdnAccessLog\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取 IP 归属信息: https://www.volcengine.com/docs/6454/75233\n    \"DescribeIPInfo\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeIPInfo\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 批量获取 IP 归属信息: https://www.volcengine.com/docs/6454/106852\n    \"DescribeIPListInfo\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeIPListInfo\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取回源节点 IP 列表: https://www.volcengine.com/docs/6454/75273\n    \"DescribeCdnUpperIp\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeCdnUpperIp\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 添加资源标签: https://www.volcengine.com/docs/6454/80308\n    \"AddResourceTags\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"AddResourceTags\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 更新资源标签: https://www.volcengine.com/docs/6454/80313\n    \"UpdateResourceTags\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"UpdateResourceTags\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询标签清单: https://www.volcengine.com/docs/6454/80315\n    \"ListResourceTags\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"ListResourceTags\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 删除资源标签: https://www.volcengine.com/docs/6454/80316\n    \"DeleteResourceTags\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DeleteResourceTags\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 上传证书: https://www.volcengine.com/docs/6454/125708\n    \"AddCdnCertificate\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"AddCdnCertificate\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询CDN证书列表: https://www.volcengine.com/docs/6454/125709\n    \"ListCertInfo\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"ListCertInfo\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询CDN有关联域名的证书列表: https://www.volcengine.com/docs/6454/125710\n    \"ListCdnCertInfo\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"ListCdnCertInfo\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取特定证书的域名关联信息: https://www.volcengine.com/docs/6454/125711\n    \"DescribeCertConfig\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeCertConfig\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 批量关联证书: https://www.volcengine.com/docs/6454/125712\n    \"BatchDeployCert\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"BatchDeployCert\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 删除托管在内容分发网络的证书: https://www.volcengine.com/docs/6454/597589\n    \"DeleteCdnCertificate\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DeleteCdnCertificate\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询计费结果数据: \n    \"DescribeAccountingSummary\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeAccountingSummary\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取访问统计的细分数据: \n    \"DescribeDistrictData\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeDistrictData\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取计费区域的细分数据: \n    \"DescribeEdgeData\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeEdgeData\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取访问统计的汇总数据: \n    \"DescribeDistrictSummary\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeDistrictSummary\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取计费区域的汇总数据: \n    \"DescribeEdgeSummary\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeEdgeSummary\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取回源统计的细分数据: \n    \"DescribeOriginData\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeOriginData\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取回源统计的汇总数据: \n    \"DescribeOriginSummary\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeOriginSummary\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取独立访客的细分数据: \n    \"DescribeUserData\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeUserData\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取访问数据的统计排名: \n    \"DescribeDistrictRanking\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeDistrictRanking\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取计费区域的统计排名: \n    \"DescribeEdgeRanking\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeEdgeRanking\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取回源数据的统计排名: \n    \"DescribeOriginRanking\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeOriginRanking\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取访问状态码排名数据: \n    \"DescribeEdgeStatusCodeRanking\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeEdgeStatusCodeRanking\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取回源状态码的统计排名: \n    \"DescribeOriginStatusCodeRanking\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeOriginStatusCodeRanking\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取热门对象的统计排名: \n    \"DescribeStatisticalRanking\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeStatisticalRanking\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 批量更新加速域名: \n    \"BatchUpdateCdnConfig\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"BatchUpdateCdnConfig\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 上传证书新版: \n    \"AddCertificate\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"AddCertificate\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 删除用量导出任务: \n    \"DeleteUsageReport\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DeleteUsageReport\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 创建用量导出任务: \n    \"CreateUsageReport\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"CreateUsageReport\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取用量导出任务列表: \n    \"ListUsageReports\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"ListUsageReports\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询全局配置: \n    \"DescribeSharedConfig\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeSharedConfig\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询全局配置列表: \n    \"ListSharedConfig\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"ListSharedConfig\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 删除全局配置: \n    \"DeleteSharedConfig\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DeleteSharedConfig\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 修改全局配置: \n    \"UpdateSharedConfig\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"UpdateSharedConfig\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 新增全局配置: \n    \"AddSharedConfig\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"AddSharedConfig\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 接入域名校验: \n    \"CheckDomain\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"CheckDomain\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # DNS校验信息生成: \n    \"DescribeRetrieveInfo\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeRetrieveInfo\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询域名版本列表: \n    \"ListDomainVersions\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"ListDomainVersions\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询域名环境版本: \n    \"DescribeDomainEnvVersion\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeDomainEnvVersion\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 创建域名版本: \n    \"CreateDomainVersion\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"CreateDomainVersion\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 删除域名版本: \n    \"DeleteDomainVersion\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DeleteDomainVersion\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询域名版本: \n    \"DescribeDomainVersion\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeDomainVersion\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 修改域名版本: \n    \"UpdateDomainVersion\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"UpdateDomainVersion\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 发布域名版本: \n    \"ReleaseDomainVersion\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"ReleaseDomainVersion\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n\n}\n\n\nclass CDNService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(CDNService, \"_instance\"):\n            with CDNService._instance_lock:\n                if not hasattr(CDNService, \"_instance\"):\n                    CDNService._instance = object.__new__(cls)\n        return CDNService._instance\n\n    def __init__(self, region=\"cn-north-1\"):\n        self.service_info = CDNService.get_service_info(region)\n        self.api_info = CDNService.get_api_info()\n        super(CDNService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info(region_name):\n        service_info = service_info_map.get(region_name, None)\n        if not service_info:\n            raise Exception('do not support region %s' % region_name)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        return api_info\n        \n    @staticmethod\n    def use_post():\n        return POST\n\n    @staticmethod\n    def use_get():\n        return GET\n\n    def send_request(self, action, params, method=POST):\n        method = str(method).upper()\n        if method == 'POST':\n            res = self.json(action, [], json.dumps(params))\n        elif method == \"GET\":\n            self.get_api_info()[action].method = self.use_get()\n            res = self.request(action, params, json.dumps({}))\n            self.get_api_info()[action].method = self.use_post()\n        else:\n            raise Exception(\"not support method %s\" % method)\n        return res\n\n    def add_cdn_domain(self, params=None):\n        if params is None:\n            params = {}\n        action = \"AddCdnDomain\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def start_cdn_domain(self, params=None):\n        if params is None:\n            params = {}\n        action = \"StartCdnDomain\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def stop_cdn_domain(self, params=None):\n        if params is None:\n            params = {}\n        action = \"StopCdnDomain\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_cdn_domain(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DeleteCdnDomain\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def list_cdn_domains(self, params=None, method=POST):\n        if params is None:\n            params = {}\n        action = \"ListCdnDomains\"\n        res = self.send_request(action, params, method)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_cdn_config(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeCdnConfig\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def update_cdn_config(self, params=None):\n        if params is None:\n            params = {}\n        action = \"UpdateCdnConfig\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_cdn_data(self, params=None, method=POST):\n        if params is None:\n            params = {}\n        action = \"DescribeCdnData\"\n        res = self.send_request(action, params, method)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_edge_nrt_data_summary(self, params=None, method=POST):\n        if params is None:\n            params = {}\n        action = \"DescribeEdgeNrtDataSummary\"\n        res = self.send_request(action, params, method)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_cdn_origin_data(self, params=None, method=POST):\n        if params is None:\n            params = {}\n        action = \"DescribeCdnOriginData\"\n        res = self.send_request(action, params, method)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_origin_nrt_data_summary(self, params=None, method=POST):\n        if params is None:\n            params = {}\n        action = \"DescribeOriginNrtDataSummary\"\n        res = self.send_request(action, params, method)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_cdn_data_detail(self, params=None, method=POST):\n        if params is None:\n            params = {}\n        action = \"DescribeCdnDataDetail\"\n        res = self.send_request(action, params, method)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_district_isp_data(self, params=None, method=POST):\n        if params is None:\n            params = {}\n        action = \"DescribeDistrictIspData\"\n        res = self.send_request(action, params, method)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_edge_statistical_data(self, params=None, method=POST):\n        if params is None:\n            params = {}\n        action = \"DescribeEdgeStatisticalData\"\n        res = self.send_request(action, params, method)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_edge_top_nrt_data(self, params=None, method=POST):\n        if params is None:\n            params = {}\n        action = \"DescribeEdgeTopNrtData\"\n        res = self.send_request(action, params, method)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_origin_top_nrt_data(self, params=None, method=POST):\n        if params is None:\n            params = {}\n        action = \"DescribeOriginTopNrtData\"\n        res = self.send_request(action, params, method)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_edge_top_status_code(self, params=None, method=POST):\n        if params is None:\n            params = {}\n        action = \"DescribeEdgeTopStatusCode\"\n        res = self.send_request(action, params, method)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_origin_top_status_code(self, params=None, method=POST):\n        if params is None:\n            params = {}\n        action = \"DescribeOriginTopStatusCode\"\n        res = self.send_request(action, params, method)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_edge_top_statistical_data(self, params=None, method=POST):\n        if params is None:\n            params = {}\n        action = \"DescribeEdgeTopStatisticalData\"\n        res = self.send_request(action, params, method)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_cdn_region_and_isp(self, params=None, method=POST):\n        if params is None:\n            params = {}\n        action = \"DescribeCdnRegionAndIsp\"\n        res = self.send_request(action, params, method)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_cdn_service(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeCdnService\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_accounting_data(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeAccountingData\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def submit_refresh_task(self, params=None):\n        if params is None:\n            params = {}\n        action = \"SubmitRefreshTask\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def submit_preload_task(self, params=None):\n        if params is None:\n            params = {}\n        action = \"SubmitPreloadTask\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_content_tasks(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeContentTasks\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_content_quota(self, params=None, method=POST):\n        if params is None:\n            params = {}\n        action = \"DescribeContentQuota\"\n        res = self.send_request(action, params, method)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def submit_block_task(self, params=None):\n        if params is None:\n            params = {}\n        action = \"SubmitBlockTask\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def submit_unblock_task(self, params=None):\n        if params is None:\n            params = {}\n        action = \"SubmitUnblockTask\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_content_block_tasks(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeContentBlockTasks\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_cdn_access_log(self, params=None, method=POST):\n        if params is None:\n            params = {}\n        action = \"DescribeCdnAccessLog\"\n        res = self.send_request(action, params, method)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_ip_info(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeIPInfo\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_ip_list_info(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeIPListInfo\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    # deprecated, use describe_ip_list_info instead\n    def describe_iplist_info(self, params=None):\n        return self.describe_ip_list_info(params)\n\n    def describe_cdn_upper_ip(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeCdnUpperIp\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def add_resource_tags(self, params=None):\n        if params is None:\n            params = {}\n        action = \"AddResourceTags\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def update_resource_tags(self, params=None):\n        if params is None:\n            params = {}\n        action = \"UpdateResourceTags\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def list_resource_tags(self, params=None):\n        if params is None:\n            params = {}\n        action = \"ListResourceTags\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_resource_tags(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DeleteResourceTags\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def add_cdn_certificate(self, params=None):\n        if params is None:\n            params = {}\n        action = \"AddCdnCertificate\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def list_cert_info(self, params=None):\n        if params is None:\n            params = {}\n        action = \"ListCertInfo\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def list_cdn_cert_info(self, params=None):\n        if params is None:\n            params = {}\n        action = \"ListCdnCertInfo\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_cert_config(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeCertConfig\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def batch_deploy_cert(self, params=None):\n        if params is None:\n            params = {}\n        action = \"BatchDeployCert\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_cdn_certificate(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DeleteCdnCertificate\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_accounting_summary(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeAccountingSummary\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_district_data(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeDistrictData\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_edge_data(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeEdgeData\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_district_summary(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeDistrictSummary\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_edge_summary(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeEdgeSummary\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_origin_data(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeOriginData\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_origin_summary(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeOriginSummary\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_user_data(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeUserData\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_district_ranking(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeDistrictRanking\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_edge_ranking(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeEdgeRanking\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_origin_ranking(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeOriginRanking\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_edge_status_code_ranking(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeEdgeStatusCodeRanking\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_origin_status_code_ranking(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeOriginStatusCodeRanking\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_statistical_ranking(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeStatisticalRanking\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def batch_update_cdn_config(self, params=None):\n        if params is None:\n            params = {}\n        action = \"BatchUpdateCdnConfig\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def add_certificate(self, params=None):\n        if params is None:\n            params = {}\n        action = \"AddCertificate\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_usage_report(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DeleteUsageReport\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def create_usage_report(self, params=None):\n        if params is None:\n            params = {}\n        action = \"CreateUsageReport\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def list_usage_reports(self, params=None):\n        if params is None:\n            params = {}\n        action = \"ListUsageReports\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_shared_config(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeSharedConfig\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def list_shared_config(self, params=None):\n        if params is None:\n            params = {}\n        action = \"ListSharedConfig\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_shared_config(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DeleteSharedConfig\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def update_shared_config(self, params=None):\n        if params is None:\n            params = {}\n        action = \"UpdateSharedConfig\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def add_shared_config(self, params=None):\n        if params is None:\n            params = {}\n        action = \"AddSharedConfig\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def check_domain(self, params=None):\n        if params is None:\n            params = {}\n        action = \"CheckDomain\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_retrieve_info(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeRetrieveInfo\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def list_domain_versions(self, params=None):\n        if params is None:\n            params = {}\n        action = \"ListDomainVersions\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_domain_env_version(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeDomainEnvVersion\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def create_domain_version(self, params=None):\n        if params is None:\n            params = {}\n        action = \"CreateDomainVersion\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_domain_version(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DeleteDomainVersion\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_domain_version(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeDomainVersion\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def update_domain_version(self, params=None):\n        if params is None:\n            params = {}\n        action = \"UpdateDomainVersion\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def release_domain_version(self, params=None):\n        if params is None:\n            params = {}\n        action = \"ReleaseDomainVersion\"\n        res = self.send_request(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n"
  },
  {
    "path": "volcengine/code_pipeline/CodePipelineService.py",
    "content": "import json\nimport threading\nimport redo\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom requests import exceptions\n\n\nclass CodePipelineService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(CodePipelineService, \"_instance\"):\n            with CodePipelineService._instance_lock:\n                if not hasattr(CodePipelineService, \"_instance\"):\n                    CodePipelineService._instance = object.__new__(cls)\n        return CodePipelineService._instance\n\n    def __init__(self):\n        self.service_info = CodePipelineService.get_service_info()\n        self.api_info = CodePipelineService.get_api_info()\n        super(CodePipelineService, self).__init__(\n            self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info():\n        service_info = ServiceInfo(\"open.volcengineapi.com\", {'Accept': 'application/json'},\n                                   Credentials('', '', 'cp', 'cn-north-1'), 5, 5)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\n            \"UpdateWorkspace\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"UpdateWorkspace\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"DeleteWorkspace\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"DeleteWorkspace\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"GetWorkspace\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"GetWorkspace\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"CreateWorkspace\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"CreateWorkspace\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"ListWorkspaces\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"ListWorkspaces\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"CopyWorkspace\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"CopyWorkspace\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"CreatePipeline\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"CreatePipeline\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"ListPipelines\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"ListPipelines\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"DeletePipeline\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"DeletePipeline\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"UpdatePipeline\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"UpdatePipeline\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"GetPipeline\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"GetPipeline\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"UpdatePipelineProperties\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"UpdatePipelineProperties\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"GetPipelineHookUrl\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"GetPipelineHookUrl\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"RunPipeline\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"RunPipeline\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"RunRollingUpdate\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"RunRollingUpdate\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"DeletePipelineCache\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"DeletePipelineCache\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"ListPipelineRecords\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"ListPipelineRecords\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"GetPipelineRecord\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"GetPipelineRecord\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"StopPipelineRecord\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"StopPipelineRecord\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"RetryPipelineRecord\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"RetryPipelineRecord\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"DeletePipelineRecord\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"DeletePipelineRecord\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"ListPipelineTemplates\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"ListPipelineTemplates\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"GetPipelineTemplate\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"GetPipelineTemplate\", \"Version\": \"2021-03-03\"}, {}, {})}\n\n        return api_info\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def update_workspace(self, params, body):\n        res = self.json(\"UpdateWorkspace\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def delete_workspace(self, params, body):\n        res = self.json(\"DeleteWorkspace\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def get_workspace(self, params, body):\n        res = self.json(\"GetWorkspace\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def create_workspace(self, params, body):\n        res = self.json(\"CreateWorkspace\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def list_workspaces(self, params, body):\n        res = self.json(\"ListWorkspaces\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def copy_workspace(self, params, body):\n        res = self.json(\"CopyWorkspace\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def create_pipeline(self, params, body):\n        res = self.json(\"CreatePipeline\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def list_pipelines(self, params, body):\n        res = self.json(\"ListPipelines\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def delete_pipeline(self, params, body):\n        res = self.json(\"DeletePipeline\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def update_pipeline(self, params, body):\n        res = self.json(\"UpdatePipeline\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def get_pipeline(self, params, body):\n        res = self.json(\"GetPipeline\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def update_pipeline_properties(self, params, body):\n        res = self.json(\"UpdatePipelineProperties\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def get_pipeline_hook_url(self, params, body):\n        res = self.json(\"GetPipelineHookUrl\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def run_pipeline(self, params, body):\n        res = self.json(\"RunPipeline\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def run_rolling_update(self, params, body):\n        res = self.json(\"RunRollingUpdate\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def delete_pipeline_cache(self, params, body):\n        res = self.json(\"DeletePipelineCache\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def list_pipeline_records(self, params, body):\n        res = self.json(\"ListPipelineRecords\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def get_pipeline_record(self, params, body):\n        res = self.json(\"GetPipelineRecord\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def stop_pipeline_record(self, params, body):\n        res = self.json(\"StopPipelineRecord\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def retry_pipeline_record(self, params, body):\n        res = self.json(\"RetryPipelineRecord\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def delete_pipeline_record(self, params, body):\n        res = self.json(\"DeletePipelineRecord\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def list_pipeline_templates(self, params, body):\n        res = self.json(\"ListPipelineTemplates\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def get_pipeline_template(self, params, body):\n        res = self.json(\"GetPipelineTemplate\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n"
  },
  {
    "path": "volcengine/code_pipeline/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/const/Const.py",
    "content": "# coding: utf-8\n\nREGION_CN_NORTH1 = \"cn-north-1\"\nREGION_US_EAST1 = \"us-east-1\"\nREGION_AP_SINGAPORE1 = \"ap-singapore-1\"\n\nINNER_REGION_CN_NORTH1 = \"cn-north-1-inner\"\nINNER_REGION_US_EAST1 = \"us-east-1-inner\"\nINNER_REGION_AP_SINGAPORE1 = \"ap-singapore-1-inner\"\n\nHTTP = 'http'\nHTTPS = 'https'\n\nFILE_TYPE_VIDEO = 'video'\nFILE_TYPE_MEDIA = 'media'\nFILE_TYPE_IMAGE = 'image'\nFILE_TYPE_OBJECT = 'object'\n\nUPLOAD_FORMAT_MP4 = 'mp4'\nUPLOAD_FORMAT_M3U8 = 'm3u8'\n\nFORMAT_JPEG = 'jpeg'\nFORMAT_PNG = 'png'\nFORMAT_WEBP = 'webp'\nFORMAT_AWEBP = 'awebp'\nFORMAT_GIF = 'gif'\nFORMAT_HEIC = 'heic'\nFORMAT_ORIGINAL = 'image'\n\nVOD_TPL_OBJ = 'tplv-vod-obj'\nVOD_TPL_NOOP = 'tplv-vod-noop'\nVOD_TPL_RESIZE = 'tplv-vod-rs'\nVOD_TPL_CENTER_CROP = 'tplv-vod-cc'\nVOD_TPL_SMART_CROP = 'tplv-vod-cs'\nVOD_TPL_SIG = 'tplv-bd-sig'\n\nLETTER_RUNES = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'\n\nRESOURCE_SPACE_FORMAT = \"trn:vod:%s:*:space/%s\"\nRESOURCE_VIDEO_FORMAT = 'trn:vod::*:video_id/%s'\nRESOURCE_STREAM_TYPE_FORMAT = 'trn:vod:::stream_type/%s'\nRESOURCE_WATERMARK_FORMAT = 'trn:vod::*:watermark/%s'\n\nACTION_VOD_GET_PLAY_INFO = \"vod:GetPlayInfo\"\n\nSTAR = '*'\n\nCATEGORY_VIDEO = \"video\"\nCATEGORY_AUDIO = \"audio\"\nCATEGORY_IMAGE = \"image\"\nCATEGORY_DYNAMICIMG = \"dynamic_img\"\nCATEGORY_SUBTITLE = \"subtitle\"\nCATEGORY_FONT = \"font\"\n\nSMS_CHANNEL_TYPE_CN_OTP = \"CN_OTP\"\nSMS_CHANNEL_TYPE_CN_NTC = \"CN_NTC\"\nSMS_CHANNEL_TYPE_CN_MKT = \"CN_MKT\"\nSMS_CHANNEL_TYPE_I18N_OTP = \"I18N_OTP\"\nSMS_CHANNEL_TYPE_I18N_MKT = \"I18N_MKT\"\n\nENABLE_STATUS_NOT_ENABLE = \"0\"\nENABLE_STATUS_ENABLE = \"1\"\n\nAREA_CN = \"cn\"\nAREA_OVERSEAS = \"overseas\"\nAREA_ALL = \"all\"\n\nSOURCE_TYPE_TEXT = \"text/string\"\nSOURCE_TYPE_VIDEO = \"video/mp4\"\nSOURCE_TYPE_IMAGE_JPG = \"image/jpg\"\nSOURCE_TYPE_IMAGE_PNG = \"image/png \"\nSOURCE_TYPE_IMAGE_GIF = \"image/gif\"\nSOURCE_TYPE_MP3 = \"audio/mp3\"\n\nDOC_TYPE_THREE_IN_ONE = 0  # 三证合一\nDOC_TYPE_BUSINESS_LICENSE = 1  # 企业营业执照\nDOC_TYPE_ORGANIZATION_CODE_CERTIFICATE = 2  # 组织机构代码证\nDOC_TYPE_TAX_REGISTRATION_CERTIFICATE = 3  # 税务登记证\nDOC_TYPE_SOCIAL_CREDIT_CODE_CERTIFICATE = 4  # 社会信用代码证书\nDOC_TYPE_POWER_OF_ATTORNEY = 5  # 授权委托书\nDOC_TYPE_OTHERS = 6  # 其他 / 更多\nDOC_TYPE_INSTITUTION_LEGAL_PERSON_CERTIFICATE = 7  # 事业单位法人证书\nDOC_TYPE_REPRESENTATIVE_ID_CARD_FRONT = 8  # 经办人身份证人像面\nDOC_TYPE_REPRESENTATIVE_ID_CARD_BACK = 9  # 经办人身份证国徽面\nDOC_TYPE_RESPONSIBLE_PERSON_ID_CARD_FRONT = 10  # 责任人身份证人像面\nDOC_TYPE_RESPONSIBLE_PERSON_ID_CARD_BACK = 11  # 责任人身份证国徽面\nDOC_TYPE_PASSPORT_CARD = 12  # 护照照片\nDOC_TYPE_HKM_PASSPORT_CARD = 13  # 港澳居民来往内地通行证照片\nDOC_TYPE_TW_PASSPORT_CARD = 14  # 台湾居民来往大陆通行证照片\nDOC_TYPE_HMT_RESIDENCE_CARD = 15  # 港澳台居民居住证照片\nDOC_TYPE_APP_ICP_CERTIFICATE = 16  # APPICP 证书\nDOC_TYPE_TRADEMARK_CERTIFICATE = 17  # 商标证书\n\nSIGN_SOURCE_TYPE_COMPANY = \"公司全称/简称\"\nSIGN_SOURCE_TYPE_SITE = \"工信部备案网站全称/简称\"\nSIGN_SOURCE_TYPE_APP = \"APP全称/简称\"\nSIGN_SOURCE_TYPE_OFFICIAL_ACCOUNTS = \"公众号、小程序全称/简称\"\nSIGN_SOURCE_TYPE_BRAND = \"商标全称/简称\"\nSIGN_SOURCE_TYPE_STORE = \"电商平台店铺名的全称/简称\"\n\nSIGN_PURPOSE_FOR_OWN = 1\nSIGN_PURPOSE_FOR_OTHER = 2\n\nSIGN_SOURCE_COMPANY = 1  # 公司全称/简称\nSIGN_SOURCE_APP = 2  # APP全称\nSIGN_SOURCE_BRAND = 3  # 商标全称\n"
  },
  {
    "path": "volcengine/const/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/content_security/ContentSecurityService.py",
    "content": "import json\nimport threading\nimport redo\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom requests import exceptions\n\n\nclass ContentSecurityService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(ContentSecurityService, \"_instance\"):\n            with ContentSecurityService._instance_lock:\n                if not hasattr(ContentSecurityService, \"_instance\"):\n                    ContentSecurityService._instance = object.__new__(cls)\n        return ContentSecurityService._instance\n\n    def __init__(self):\n        self.service_info = ContentSecurityService.get_service_info()\n        self.api_info = ContentSecurityService.get_api_info()\n        super(ContentSecurityService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info():\n        service_info = ServiceInfo(\"riskcontrol.volcengineapi.com\", {'Accept': 'application/json'},\n                                   Credentials('', '', 'BusinessSecurity', 'cn-north-1'), 5, 5)\n        return service_info\n\n    def set_socket_timeout(self, timeout):\n        self.service_info.socket_timeout = timeout\n\n    def set_connection_timeout(self, timeout):\n        self.service_info.connection_timeout = timeout\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\"AsyncVideoRisk\": ApiInfo(\"POST\", \"/\", {\"Action\": \"AsyncVideoRisk\", \"Version\": \"2021-11-29\"}, {}, {}),\n                    \"VideoResult\": ApiInfo(\"GET\", \"/\", {\"Action\": \"VideoResult\", \"Version\": \"2021-11-29\"}, {}, {}),\n                    \"ImageContentRisk\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ImageContentRisk\", \"Version\": \"2021-11-29\"}, {}, {}),\n                    \"ImageContentRiskV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ImageContentRiskV2\", \"Version\": \"2021-11-29\"}, {}, {}),\n                    \"AsyncImageRisk\": ApiInfo(\"POST\", \"/\", {\"Action\": \"AsyncImageRisk\", \"Version\": \"2021-11-29\"}, {}, {}),\n                    \"ImageResult\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageResult\", \"Version\": \"2021-11-29\"}, {}, {}),\n                    \"TextRisk\": ApiInfo(\"POST\", \"/\", {\"Action\": \"TextRisk\", \"Version\": \"2022-01-26\"}, {}, {}),\n                    \"CreateCustomContents\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateCustomContents\", \"Version\": \"2022-01-22\"}, {}, {}),\n                    \"UploadCustomContents\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UploadCustomContents\", \"Version\": \"2022-02-07\"}, {}, {}),\n                    \"EnableCustomContents\": ApiInfo(\"PUT\", \"/\", {\"Action\": \"EnableCustomContents\", \"Version\": \"2022-04-28\"}, {}, {}),\n                    \"DisableCustomContents\": ApiInfo(\"PUT\", \"/\", {\"Action\": \"DisableCustomContents\", \"Version\": \"2022-04-28\"}, {}, {}),\n                    \"DeleteCustomContents\": ApiInfo(\"PUT\", \"/\", {\"Action\": \"DeleteCustomContents\", \"Version\": \"2022-04-28\"}, {}, {}),\n                    \"AsyncAudioRisk\": ApiInfo(\"POST\", \"/\", {\"Action\": \"AsyncAudioRisk\", \"Version\": \"2022-04-01\"}, {}, {}),\n                    \"GetAudioResult\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetAudioResult\", \"Version\": \"2022-04-01\"}, {}, {}),\n                    \"AudioRisk\": ApiInfo(\"POST\", \"/\", {\"Action\": \"AudioRisk\", \"Version\": \"2022-04-01\"}, {}, {}),\n                    \"AsyncLiveVideoRisk\": ApiInfo(\"POST\", \"/\", {\"Action\": \"AsyncLiveVideoRisk\", \"Version\": \"2022-04-25\"}, {}, {}),\n                    \"GetVideoLiveResult\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetVideoLiveResult\", \"Version\": \"2022-04-25\"}, {}, {}),\n                    \"AsyncLiveAudioRisk\": ApiInfo(\"POST\", \"/\", {\"Action\": \"AsyncLiveAudioRisk\", \"Version\": \"2022-04-25\"}, {}, {}),\n                    \"GetAudioLiveResult\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetAudioLiveResult\", \"Version\": \"2022-04-25\"}, {}, {}),\n                    \"TextSliceRisk\": ApiInfo(\"POST\", \"/\", {\"Action\": \"TextSliceRisk\", \"Version\": \"2022-11-07\"}, {}, {}),\n                    \"AsyncImageRiskV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"AsyncImageRisk\", \"Version\": \"2022-08-26\"}, {}, {}),\n                    \"ImageResultV2\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ImageResult\", \"Version\": \"2022-08-26\"}, {}, {}),\n                    \"CloseAudioLiveRisk\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CloseAudioLive\", \"Version\": \"2022-04-25\"}, {}, {}),\n                    \"CloseVideoLiveRisk\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CloseVideoLive\", \"Version\": \"2022-04-25\"}, {}, {}),\n                    \"CreateCustomLib\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateCustomLib\", \"Version\": \"2023-10-01\"}, {}, {}),\n                    \"UpdateCustomLib\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateCustomLib\", \"Version\": \"2023-10-01\"}, {}, {}),\n                    \"ChangeCustomContentsStatus\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ChangeCustomContentsStatus\", \"Version\": \"2023-10-01\"}, {}, {}),\n                    \"DeleteCustomLib\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteCustomLib\", \"Version\": \"2023-10-01\"}, {}, {}),\n                    \"GetCustomLib\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetCustomLib\", \"Version\": \"2023-10-01\"}, {}, {}),\n                    \"GetTextLibContent\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetTextLibContent\", \"Version\": \"2023-10-01\"}, {}, {}),\n                    \"UploadTextLibContent\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UploadTextLibContent\", \"Version\": \"2023-10-01\"}, {}, {}),\n                    \"DeleteTextLibContent\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteTextLibContent\", \"Version\": \"2023-10-01\"}, {}, {}),\n                    \"GetImageLibContent\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageLibContent\", \"Version\": \"2023-10-01\"}, {}, {}),\n                    \"DeleteImageLibContent\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageLibContent\", \"Version\": \"2023-10-01\"}, {}, {}),\n                    \"UploadImageLibContent\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UploadImageLibContent\", \"Version\": \"2023-10-01\"}, {}, {}),\n                    }\n\n        return api_info\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def async_video_risk(self, params, body):\n        res = self.json(\"AsyncVideoRisk\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def video_result(self, params, body):\n        res = self.get(\"VideoResult\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # deprecated, use image_content_risk_v2 instead\n    def image_content_risk(self, params, body):\n        res = self.json(\"ImageContentRisk\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def image_content_risk_v2(self, params, body):\n        res = self.json(\"ImageContentRiskV2\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def async_image_risk(self, params, body):\n        res = self.json(\"AsyncImageRisk\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def image_result(self, params, body):\n        res = self.get(\"ImageResult\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def async_image_risk_v2(self, params, body):\n        res = self.json(\"AsyncImageRiskV2\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def image_result_v2(self, params, body):\n        res = self.get(\"ImageResultV2\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    # deprecated, use text_slice_risk instead\n    def text_risk(self, params, body):\n        res = self.json(\"TextRisk\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def create_custom_contents(self, params, body):\n        res = self.json(\"CreateCustomContents\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def upload_custom_contents(self, params, body):\n        res = self.json(\"UploadCustomContents\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def enable_custom_contents(self, params, body):\n        res = self.json(\"EnableCustomContents\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def disable_custom_contents(self, params, body):\n        res = self.json(\"DisableCustomContents\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_custom_contents(self, params, body):\n        res = self.json(\"DeleteCustomContents\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def async_live_video_risk(self, params, body):\n        res = self.json(\"AsyncLiveVideoRisk\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def async_audio_risk(self, params, body):\n        res = self.json(\"AsyncAudioRisk\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def audio_result(self, params, body):\n        res = self.get(\"GetAudioResult\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def audio_risk(self, params, body):\n        res = self.json(\"AudioRisk\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def async_live_audio_risk(self, params, body):\n        res = self.json(\"AsyncLiveAudioRisk\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def live_audio_result(self, params, body):\n        res = self.get(\"GetAudioLiveResult\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def live_video_result(self, params, body):\n        res = self.get(\"GetVideoLiveResult\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def text_slice_risk(self, params, body):\n        res = self.json(\"TextSliceRisk\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def close_video_live_risk(self, params, body):\n        res = self.json(\"CloseVideoLiveRisk\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def close_audio_live_risk(self, params, body):\n        res = self.json(\"CloseAudioLiveRisk\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def create_custom_lib(self, params, body):\n        res = self.json(\"CreateCustomLib\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n        \n    def update_custom_lib(self, params, body):\n        res = self.json(\"UpdateCustomLib\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def change_custom_contents_status(self, params, body):\n        res = self.json(\"ChangeCustomContentsStatus\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n    \n    def delete_custom_lib(self, params, body):\n        res = self.json(\"DeleteCustomLib\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n    \n    def get_custom_lib(self, params, body):\n        res = self.get(\"GetCustomLib\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n    \n    def get_text_lib_content(self, params, body):\n        res = self.get(\"GetTextLibContent\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json  \n\n    def upload_text_lib_content(self, params, body):\n        res = self.json(\"UploadTextLibContent\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json \n\n    def delete_text_lib_content(self, params, body):\n        res = self.json(\"DeleteTextLibContent\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def get_image_lib_content(self, params, body):\n        res = self.get(\"GetImageLibContent\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json  \n    \n    def delete_image_lib_content(self, params, body):\n        res = self.json(\"DeleteImageLibContent\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def upload_image_lib_content(self, params, body):\n        res = self.json(\"UploadImageLibContent\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json"
  },
  {
    "path": "volcengine/content_security/RcLlmAgentService.py",
    "content": "import json\nimport threading\nimport redo\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom requests import exceptions\n\n\nclass RcLlmAgentService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(RcLlmAgentService, \"_instance\"):\n            with RcLlmAgentService._instance_lock:\n                if not hasattr(RcLlmAgentService, \"_instance\"):\n                    RcLlmAgentService._instance = object.__new__(cls)\n        return RcLlmAgentService._instance\n\n    def __init__(self):\n        self.service_info = RcLlmAgentService.get_service_info()\n        self.api_info = RcLlmAgentService.get_api_info()\n        super(RcLlmAgentService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info():\n        service_info = ServiceInfo(\"contentservice.zijieapi.com\", {'Accept': 'application/json'},\n                                   Credentials('', '', 'BusinessSecurity', 'cn-north-1'), 5 * 60, 5 * 60, \"https\")\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\n            \"LlmTextModeration\": ApiInfo(\"POST\", \"/openapi/v1/rc_llm/text_moderation\", {\"Action\": \"LlmTextModeration\", \"Version\": \"2022-08-26\"}, {}, {}),\n            \"AsyncLlmTextModeration\": ApiInfo(\"POST\", \"/openapi/v1/rc_llm/async_text_moderation\", {\"Action\": \"AsyncLlmTextModeration\", \"Version\": \"2022-08-26\"}, {}, {}),\n            \"GetTextModerationResult\": ApiInfo(\"GET\", \"/openapi/v1/rc_llm/text_moderation_result\", {\"Action\": \"GetTextModerationResult\", \"Version\": \"2022-08-26\"}, {}, {}),\n            \"LlmCustomizeRisk\": ApiInfo(\"POST\", \"/openapi/v1/rc_llm/custom_risk\", {\"Action\": \"LlmCustomizeRisk\", \"Version\": \"2022-08-26\"}, {}, {}),\n            \"AsyncLlmCustomizeRisk\": ApiInfo(\"POST\", \"/openapi/v1/rc_llm/async_custom_risk\", {\"Action\": \"AsyncLlmCustomizeRisk\", \"Version\": \"2022-08-26\"}, {}, {}),\n            \"GetCustomizeRiskResult\": ApiInfo(\"GET\", \"/openapi/v1/rc_llm/custom_risk_result\", {\"Action\": \"GetCustomizeRiskResult\", \"Version\": \"2022-08-26\"}, {},{}),\n            \"LlmMultiModeration\": ApiInfo(\"POST\", \"/openapi/v1/rc_llm/multi_moderation\",\n                                         {\"Action\": \"LlmMultiModeration\", \"Version\": \"2022-08-26\"}, {}, {}),\n            \"AsyncLlmMultiModeration\": ApiInfo(\"POST\", \"/openapi/v1/rc_llm/async_multi_moderation\",\n                                              {\"Action\": \"AsyncLlmMultiModeration\", \"Version\": \"2022-08-26\"}, {}, {}),\n            \"GetMultiModerationResult\": ApiInfo(\"GET\", \"/openapi/v1/rc_llm/multi_moderation_result\",\n                                               {\"Action\": \"GetMultiModerationResult\", \"Version\": \"2022-08-26\"}, {}, {}),\n            \"ImageTextLiteModeration\": ApiInfo(\"POST\", \"/openapi/v1/rc_llm/image_text_lite_moderation\",\n                                         {\"Action\": \"ImageTextLiteModeration\", \"Version\": \"2022-08-26\"}, {}, {}),\n            \"AudioLiteModeration\": ApiInfo(\"POST\", \"/openapi/v1/rc_llm/audio_lite_moderation\",\n                                           {\"Action\": \"AudioLiteModeration\", \"Version\": \"2022-08-26\"}, {}, {}),\n            \"AsyncAudioLiteModeration\": ApiInfo(\"POST\", \"/openapi/v1/rc_llm/async_audio_lite_moderation\",\n                                                {\"Action\": \"AsyncAudioLiteModeration\", \"Version\": \"2022-08-26\"}, {}, {}),\n            \"AudioLiteModerationResult\": ApiInfo(\"GET\", \"/openapi/v1/rc_llm/audio_lite_moderation_result\",\n                                                 {\"Action\": \"AudioLiteModerationResult\", \"Version\": \"2022-08-26\"}, {},\n                                                 {}),\n            \"AsyncVideoLiteModeration\": ApiInfo(\"POST\", \"/openapi/v1/rc_llm/async_video_lite_moderation\",\n                                                {\"Action\": \"AsyncVideoLiteModeration\", \"Version\": \"2022-08-26\"}, {}, {}),\n            \"VideoLiteModerationResult\": ApiInfo(\"GET\", \"/openapi/v1/rc_llm/video_lite_moderation_result\",\n                                                 {\"Action\": \"VideoLiteModerationResult\", \"Version\": \"2022-08-26\"}, {},\n                                                 {}),\n            }\n\n        return api_info\n\n    def set_socket_timeout(self, timeout):\n        self.service_info.socket_timeout = timeout\n\n    def set_connection_timeout(self, timeout):\n        self.service_info.connection_timeout = timeout\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def llm_text_moderation(self, params, body):\n        res = self.json(\"LlmTextModeration\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def async_llm_text_moderation(self, params, body):\n        res = self.json(\"AsyncLlmTextModeration\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def get_text_moderation_result(self, params, body):\n        res = self.get(\"GetTextModerationResult\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def llm_customize_risk(self, params, body):\n        res = self.json(\"LlmCustomizeRisk\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def async_llm_customize_risk(self, params, body):\n        res = self.json(\"AsyncLlmCustomizeRisk\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def get_customize_risk_result(self, params, body):\n        res = self.get(\"GetCustomizeRiskResult\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def llm_multi_moderation(self, params, body):\n        res = self.json(\"LlmMultiModeration\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def async_llm_multi_moderation(self, params, body):\n        res = self.json(\"AsyncLlmMultiModeration\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def get_multi_moderation_result(self, params, body):\n        res = self.get(\"GetMultiModerationResult\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def image_text_lite_moderation(self, params, body):\n        res = self.json(\"ImageTextLiteModeration\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def audio_lite_moderation(self, params, body):\n        res = self.json(\"AudioLiteModeration\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def async_audio_lite_moderation(self, params, body):\n        res = self.json(\"AsyncAudioLiteModeration\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def audio_lite_moderation_result(self, params, body):\n        res = self.get(\"AudioLiteModerationResult\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def async_video_lite_moderation(self, params, body):\n        res = self.json(\"AsyncVideoLiteModeration\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def video_lite_moderation_result(self, params, body):\n        res = self.get(\"VideoLiteModerationResult\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json"
  },
  {
    "path": "volcengine/content_security/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/dcdn/DCDNService.py",
    "content": "#  -*- coding: utf-8 -*-\nimport json\nimport threading\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\n\nSERVICE_VERSION = \"2021-04-01\"\nSERVICE_VERSION_V2 = \"2023-01-01\"\n\nservice_info = ServiceInfo(\"open.volcengineapi.com\", {'Accept': 'application/json'},\n                           Credentials('', '', 'dcdn', 'cn-north-1'), 60 * 5, 60 * 5, \"https\")\n\napi_info = {\n    # 查询域名列表: https://www.volcengine.com/docs/6559/192391\n    \"DescribeUserDomains\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeUserDomains\", \"Version\": SERVICE_VERSION_V2}, {}, {}),\n    \n    # 查询全站加速域名的详细配置: https://www.volcengine.com/docs/6559/94321\n    \"DescribeDomainConfig\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeDomainConfig\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 新增全站加速域名: https://www.volcengine.com/docs/6559/79725\n    \"CreateDomain\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"CreateDomain\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 新增全站加速域名V2,支持识别Project: https://www.volcengine.com/docs/6559/191870\n    \"CreateDomainV2\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"CreateDomain\", \"Version\": SERVICE_VERSION_V2}, {}, {}),\n\n    # 启动全站加速域名: https://www.volcengine.com/docs/6559/94320\n    \"StartDomain\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"StartDomain\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 停止全站加速域名: https://www.volcengine.com/docs/6559/94319\n    \"StopDomain\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"StopDomain\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 删除全站加速域名: https://www.volcengine.com/docs/6559/95181\n    \"DeleteDomain\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DeleteDomain\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 变更域名配置: https://www.volcengine.com/docs/6559/95183\n    \"UpdateDomainConfig\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"UpdateDomainConfig\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 变更域名配置V2,支持识别Project: https://www.volcengine.com/docs/6559/191883\n    \"UpdateDomainConfigV2\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"UpdateDomainConfig\", \"Version\": SERVICE_VERSION_V2}, {}, {}),\n\n    # 查询域名的资源用量数据: https://www.volcengine.com/docs/6559/79733\n    \"DescribeStatistics\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeStatistics\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询域名的回源资源用量数据: https://www.volcengine.com/docs/6559/79734\n    \"DescribeOriginStatistics\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeOriginStatistics\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询域名的实时资源用量数据: https://www.volcengine.com/docs/6559/79735\n    \"DescribeRealtimeData\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeRealtimeData\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询域名的回源实时资源用量数据: https://www.volcengine.com/docs/6559/79737\n    \"DescribeOriginRealtimeData\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeOriginRealtimeData\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 统计域名的区域分布数据: https://www.volcengine.com/docs/6559/79738\n    \"DescribeDomainRegionData\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeDomainRegionData\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 统计域名的运营商分布数据: https://www.volcengine.com/docs/6559/79739\n    \"DescribeDomainIspData\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeDomainIspData\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 统计域名的排行数据: https://www.volcengine.com/docs/6559/79740\n    \"DescribeTopDomains\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeTopDomains\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 统计URL的排行数据: https://www.volcengine.com/docs/6559/79741\n    \"DescribeTopURLs\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeTopURLs\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 统计IP的排行数据: https://www.volcengine.com/docs/6559/79742\n    \"DescribeTopIPs\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeTopIPs\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 统计Referer的排行数据: https://www.volcengine.com/docs/6559/79743\n    \"DescribeTopReferers\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeTopReferers\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询域名的PV数据: https://www.volcengine.com/docs/6559/79747\n    \"DescribeDomainPVData\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeDomainPVData\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询域名的UV数据: https://www.volcengine.com/docs/6559/79749\n    \"DescribeDomainUVData\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeDomainUVData\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询地域和运营商信息: https://www.volcengine.com/docs/6559/126042\n    \"DescribeDcdnRegionAndIsp\": ApiInfo(\"GET\", \"/\", {\n        \"Action\": \"DescribeDcdnRegionAndIsp\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询访问资源用量细节: https://www.volcengine.com/docs/6559/131240\n    \"DescribeStatisticsDetail\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeStatisticsDetail\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询访问回源资源用量细节: https://www.volcengine.com/docs/6559/131253\n    \"DescribeOriginStatisticsDetail\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeOriginStatisticsDetail\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询访问日志: https://www.volcengine.com/docs/6559/79745\n    \"DescribeDomainLogs\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeDomainLogs\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 新增全站加速预热刷新任务: https://www.volcengine.com/docs/6559/102400\n    \"CreatePurgePrefetchTask\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"CreatePurgePrefetchTask\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询全站加速预热刷新任务: https://www.volcengine.com/docs/6559/102401\n    \"CheckPurgePrefetchTask\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"CheckPurgePrefetchTask\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询全站加速预热刷新任务Quota: https://www.volcengine.com/docs/6559/102402\n    \"GetPurgePrefetchTaskQuota\": ApiInfo(\"GET\", \"/\", {\n        \"Action\": \"GetPurgePrefetchTaskQuota\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询全站加速预热刷新任务Quota: https://www.volcengine.com/docs/6559/102403\n    \"RetryPurgePrefetchTask\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"RetryPurgePrefetchTask\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 更新全站加速域名拨测配置:\n    \"UpdateDomainProbeSetting\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"UpdateDomainProbeSetting\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询全站加速域名拨测配置:\n    \"DescribeDomainProbeSetting\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeDomainProbeSetting\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取边缘层节点的所有 IP:\n    \"DescribeDcdnEdgeIp\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeDcdnEdgeIp\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询封禁IP\n    \"DescribeBlockIP\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeBlockIP\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 海量IP封禁\n    \"BatchBlockIP\":  ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"BatchBlockIP\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    \"DescribeDcdnOriginIp\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeDcdnOriginIp\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    \"DescribeL2IPs\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeL2IPs\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询域名归属验证信息: https://www.volcengine.com/docs/6559/1339302\n    \"DescribeVerifyContent\": ApiInfo(\"GET\", \"/\", {\n        \"Action\": \"DescribeVerifyContent\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 验证域名归属关系: https://www.volcengine.com/docs/6559/1339303\n    \"VerifyDomainOwnership\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"VerifyDomainOwnership\", \"Version\": SERVICE_VERSION}, {}, {}),\n    \n    # 更新GA源站的回源策略:\n    \"UpdateGAOriginPolicy\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"UpdateGAOriginPolicy\", \"Version\": SERVICE_VERSION}, {}, {}),\n    \n    # 查询GA源站的回源策略:\n    \"DescribeGAOriginPolicy\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeGAOriginPolicy\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 查询WS的监控数据:\n    \"DescribeWSStatistics\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DescribeWSStatistics\", \"Version\": SERVICE_VERSION}, {}, {}),\n}\n\n\nclass DCDNService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(DCDNService, \"_instance\"):\n            with DCDNService._instance_lock:\n                if not hasattr(DCDNService, \"_instance\"):\n                    DCDNService._instance = object.__new__(cls)\n        return DCDNService._instance\n\n    def __init__(self):\n        self.service_info = DCDNService.get_service_info()\n        self.api_info = DCDNService.get_api_info()\n        super(DCDNService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info():\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        return api_info\n\n    def describe_user_domains(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeUserDomains\"\n        res = self.json(action,[], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_domain_config(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeDomainConfig\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def create_domain(self, params=None):\n        if params is None:\n            params = {}\n        action = \"CreateDomain\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n    \n    def create_domain_v2(self, params=None):\n        if params is None:\n            params = {}\n        action = \"CreateDomainV2\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def start_domain(self, params=None):\n        if params is None:\n            params = {}\n        action = \"StartDomain\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def stop_domain(self, params=None):\n        if params is None:\n            params = {}\n        action = \"StopDomain\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_domain(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DeleteDomain\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def update_domain_config(self, params=None):\n        if params is None:\n            params = {}\n        action = \"UpdateDomainConfig\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n    \n    def update_domain_config_v2(self, params=None):\n        if params is None:\n            params = {}\n        action = \"UpdateDomainConfigV2\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_statistics(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeStatistics\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_ws_statistics(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeWSStatistics\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_origin_statistics(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeOriginStatistics\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_realtime_data(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeRealtimeData\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_origin_realtime_data(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeOriginRealtimeData\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_domain_region_data(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeDomainRegionData\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_domain_isp_data(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeDomainIspData\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_top_domains(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeTopDomains\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_top_urls(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeTopURLs\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_top_ips(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeTopIPs\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_top_referers(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeTopReferers\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_domain_pv_data(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeDomainPVData\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_domain_uv_data(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeDomainUVData\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_dcdn_region_and_isp(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeDcdnRegionAndIsp\"\n        res = self.get(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_statistics_detail(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeStatisticsDetail\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_origin_statistics_detail(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeOriginStatisticsDetail\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_domain_logs(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeDomainLogs\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def create_purge_prefetch_task(self, params=None):\n        if params is None:\n            params = {}\n        action = \"CreatePurgePrefetchTask\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def check_purge_prefetch_task(self, params=None):\n        if params is None:\n            params = {}\n        action = \"CheckPurgePrefetchTask\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def get_purge_prefetch_task_quota(self, params=None):\n        if params is None:\n            params = {}\n        action = \"GetPurgePrefetchTaskQuota\"\n        res = self.get(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def retry_purge_prefetch_task(self, params=None):\n        if params is None:\n            params = {}\n        action = \"RetryPurgePrefetchTask\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def update_domain_probe_setting(self, params=None):\n        if params is None:\n            params = {}\n        action = \"UpdateDomainProbeSetting\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_domain_probe_setting(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeDomainProbeSetting\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_dcdn_edge_ip(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeDcdnEdgeIp\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_block_ip(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeBlockIP\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def batch_block_ip(self, params=None):\n        if params is None:\n            params = {}\n        action = \"BatchBlockIP\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def update_ga_origin_policy(self, params=None):\n        if params is None:\n            params = {}\n        action = \"UpdateGAOriginPolicy\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_dcdn_origin_ip(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeDcdnOriginIp\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n    \n    def describe_ga_origin_policy(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeGAOriginPolicy\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_l2_ips(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeL2IPs\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_verify_content(self, params=None):\n        if params is None:\n            params = {}\n        action = \"DescribeVerifyContent\"\n        res = self.get(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def verify_domain_ownership(self, params=None):\n        if params is None:\n            params = {}\n        action = \"VerifyDomainOwnership\"\n        res = self.json(action, [], json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n"
  },
  {
    "path": "volcengine/dcdn/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/dts/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/dts/dts_service.py",
    "content": "import json\nimport threading\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.base.Service import Service\n\nSERVICE_VERSION = \"2022-10-01\"\nPRE_SERVICE_VERSION = \"2018-01-01\"\nSERVICE_HOST = \"dts.volcengineapi.com\"\nSERVICE_NAME = \"dts\"\nREST_API_METHOD = \"POST\"\n\nservice_info_map = {\n    \"cn-beijing\": ServiceInfo(SERVICE_HOST, {'accept': 'application/json', },\n                              Credentials('', '', SERVICE_NAME, \"cn-beijing\"), 60 * 5, 60 * 5, \"https\"),\n    \"cn-guangzhou\": ServiceInfo(SERVICE_HOST, {'accept': 'application/json', },\n                                Credentials('', '', SERVICE_NAME, \"cn-guangzhou\"), 60 * 5, 60 * 5, \"https\"),\n    \"cn-shanghai\": ServiceInfo(SERVICE_HOST, {'accept': 'application/json', },\n                               Credentials('', '', SERVICE_NAME, \"cn-shanghai\"), 60 * 5, 60 * 5, \"https\"),\n}\n\napi_info = {\n    \"StartTransmissionTask\": ApiInfo(REST_API_METHOD, \"/\",\n                                     {\"Action\": \"StartTransmissionTask\", \"Version\": SERVICE_VERSION}, {}, {}),\n    \"CreateTransmissionTask\": ApiInfo(REST_API_METHOD, \"/\",\n                                      {\"Action\": \"CreateTransmissionTask\", \"Version\": SERVICE_VERSION}, {},\n                                      {}),\n    \"StopTransmissionTask\": ApiInfo(REST_API_METHOD, \"/\",\n                                    {\"Action\": \"StopTransmissionTask\", \"Version\": SERVICE_VERSION}, {}, {}),\n    \"SuspendTransmissionTask\": ApiInfo(REST_API_METHOD, \"/\",\n                                       {\"Action\": \"SuspendTransmissionTask\", \"Version\": SERVICE_VERSION}, {},\n                                       {}),\n    \"ResumeTransmissionTask\": ApiInfo(REST_API_METHOD, \"/\",\n                                      {\"Action\": \"ResumeTransmissionTask\", \"Version\": SERVICE_VERSION}, {},\n                                      {}),\n    \"RetryTransmissionTask\": ApiInfo(REST_API_METHOD, \"/\",\n                                     {\"Action\": \"RetryTransmissionTask\", \"Version\": SERVICE_VERSION}, {}, {}),\n    \"DeleteTransmissionTask\": ApiInfo(REST_API_METHOD, \"/\",\n                                      {\"Action\": \"DeleteTransmissionTask\", \"Version\": SERVICE_VERSION}, {},\n                                      {}),\n    \"ModifyTransmissionTask\": ApiInfo(REST_API_METHOD, \"/\",\n                                      {\"Action\": \"ModifyTransmissionTask\", \"Version\": SERVICE_VERSION}, {},\n                                      {}),\n    \"DescribeTransmissionTaskProgress\": ApiInfo(REST_API_METHOD, \"/\",\n                                                {\"Action\": \"DescribeTransmissionTaskProgress\",\n                                                 \"Version\": SERVICE_VERSION},\n                                                {}, {}),\n    \"DescribeTransmissionTaskInfo\": ApiInfo(REST_API_METHOD, \"/\",\n                                            {\"Action\": \"DescribeTransmissionTaskInfo\", \"Version\": SERVICE_VERSION}, {},\n                                            {}),\n    \"DescribeTransmissionTasks\": ApiInfo(REST_API_METHOD, \"/\",\n                                         {\"Action\": \"DescribeTransmissionTasks\", \"Version\": SERVICE_VERSION},\n                                         {}, {}),\n    \"PreCheckAsync\": ApiInfo(REST_API_METHOD, \"/\",\n                             {\"Action\": \"PreCheckAsync\", \"Version\": PRE_SERVICE_VERSION},\n                             {}, {}),\n    \"GetAsyncPreCheckResult\": ApiInfo(REST_API_METHOD, \"/\",\n                                      {\"Action\": \"GetAsyncPreCheckResult\", \"Version\": PRE_SERVICE_VERSION},\n                                      {}, {}),\n}\n\n\nclass DtsService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(DtsService, \"_instance\"):\n            with DtsService._instance_lock:\n                if not hasattr(DtsService, \"_instance\"):\n                    DtsService._instance = object.__new__(cls)\n        return DtsService._instance\n\n    def __init__(self, region):\n        self.service_info = DtsService.get_service_info(region)\n        self.api_info = DtsService.get_api_info()\n        super(DtsService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info(region):\n        service_info = service_info_map.get(region, None)\n        if not service_info:\n            raise Exception('do not support region %s' % region)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        return api_info\n\n    def stop_transmission_task(self, params, body):\n        res = self.json('StopTransmissionTask', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def suspend_transmission_task(self, params, body):\n        res = self.json('SuspendTransmissionTask', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def resume_transmission_task(self, params, body):\n        res = self.json('ResumeTransmissionTask', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def create_transmission_task(self, params, body):\n        res = self.json('CreateTransmissionTask', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def start_transmission_task(self, params, body):\n        res = self.json('StartTransmissionTask', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def modify_transmission_task(self, params, body):\n        res = self.json('ModifyTransmissionTask', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_transmission_task(self, params, body):\n        res = self.json('DeleteTransmissionTask', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def retry_transmission_task(self, params, body):\n        res = self.json('RetryTransmissionTask', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_transmission_tasks(self, params, body):\n        res = self.json('DescribeTransmissionTasks', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_transmission_task_info(self, params, body):\n        res = self.json('DescribeTransmissionTaskInfo', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_transmission_task_progress(self, params, body):\n        res = self.json('DescribeTransmissionTaskProgress', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def pre_check_async(self, params, body):\n        res = self.json('PreCheckAsync', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def get_async_pre_check_result(self, params, body):\n        res = self.json('GetAsyncPreCheckResult', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n"
  },
  {
    "path": "volcengine/emr/EMRService.py",
    "content": "#  -*- coding: utf-8 -*-\nimport json\nimport threading\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\n\nservice_info_map = {\n    \"cn-beijing\": ServiceInfo(\"open.volcengineapi.com\", {'accept': 'application/json', },\n                              Credentials('', '', \"emr\", \"cn-beijing\"), 60 * 5, 60 * 5, \"https\"),\n    \"cn-guangzhou\": ServiceInfo(\"open.volcengineapi.com\", {'accept': 'application/json', },\n                                Credentials('', '', \"emr\", \"cn-guangzhou\"), 60 * 5, 60 * 5, \"https\"),\n    \"cn-shanghai\": ServiceInfo(\"open.volcengineapi.com\", {'accept': 'application/json', },\n                               Credentials('', '', \"emr\", \"cn-shanghai\"), 60 * 5, 60 * 5, \"https\"),\n}\n\napi_info = {\n    # https://www.volcengine.com/docs/6491/145561\n    \"CreateCluster\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"CreateCluster\", \"Version\": \"2022-06-30\"}, {}, {}),\n    # https://www.volcengine.com/docs/6491/145562\n    \"ResizeCluster\": ApiInfo(\"GET\", \"/\", {\n        \"Action\": \"ResizeCluster\", \"Version\": \"2022-04-15\"}, {}, {}),\n\n    # https://www.volcengine.com/docs/6491/145563\n    \"DescribeCluster\": ApiInfo(\"GET\", \"/\", {\n        \"Action\": \"DescribeCluster\", \"Version\": \"2022-04-15\"}, {}, {}),\n\n    # https://www.volcengine.com/docs/6491/145564\n    \"ListInstances\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"ListInstances\", \"Version\": \"2022-06-30\"}, {}, {}),\n\n    # https://www.volcengine.com/docs/6491/145565\n    \"ListClusters\": ApiInfo(\"GET\", \"/\", {\n        \"Action\": \"ListClusters\", \"Version\": \"2021-09-15\"}, {}, {}),\n\n    # https://www.volcengine.com/docs/6491/145566\n    \"ListInstanceGroups\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"ListInstanceGroups\", \"Version\": \"2022-06-30\"}, {}, {}),\n\n    # https://www.volcengine.com/docs/6491/145567\n    \"ReleaseCluster\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"ReleaseCluster\", \"Version\": \"2022-04-15\"}, {}, {}),\n\n    # https://www.volcengine.com/docs/6491/145568\n    \"AddTags\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"AddTags\", \"Version\": \"2022-06-30\"}, {}, {}),\n\n    # https://www.volcengine.com/docs/6491/145569\n    \"RemoveTags\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"RemoveTags\", \"Version\": \"2022-06-30\"}, {}, {}),\n}\n\n\nclass EMRService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(EMRService, \"_instance\"):\n            with EMRService._instance_lock:\n                if not hasattr(EMRService, \"_instance\"):\n                    EMRService._instance = object.__new__(cls)\n        return EMRService._instance\n\n    def __init__(self, region=\"cn-beijing\"):\n        self.service_info = EMRService.get_service_info(region)\n        self.api_info = EMRService.get_api_info()\n        super(EMRService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info(region):\n        service_info = service_info_map.get(region, None)\n        if not service_info:\n            raise Exception('do not support region %s' % region)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        return api_info\n\n    def create_cluster(self, params, body):\n        res = self.json(\"CreateCluster\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_cluster(self, params):\n        res = self.get(\"DescribeCluster\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def list_instances(self, params, body):\n        res = self.json(\"ListInstances\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def list_clusters(self, params):\n        res = self.get(\"ListClusters\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def list_instance_groups(self, params, body):\n        res = self.json(\"ListInstanceGroups\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def release_cluster(self, params, body):\n        res = self.json(\"ReleaseCluster\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def add_tags(self, params, body):\n        res = self.json(\"AddTags\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def remove_tags(self, params, body):\n        res = self.json(\"RemoveTags\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n"
  },
  {
    "path": "volcengine/emr/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/DemoSignOnly.py",
    "content": "# coding: utf-8\nimport datetime\n\nfrom volcengine.auth.SignerV4 import SignerV4\nfrom volcengine.auth.SignParam import SignParam\nfrom volcengine.Credentials import Credentials\nfrom collections import  OrderedDict\n\nif __name__ == '__main__':\n    sign = SignerV4()\n\n    param = SignParam()\n    param.path = '/'\n    param.method = 'GET'\n    param.host = 'open.volcengineapi.com'\n    param.body = ''\n    param.date = datetime.datetime.utcfromtimestamp(1640712206)\n    query = OrderedDict()\n    query['Action'] = 'ListUsers'\n    query['Version'] = '2018-01-01'\n    query['Limit'] = '5'\n    query['Offset'] = '0'\n\n    param.query = query\n    header = OrderedDict()\n    header['Host'] = 'open.volcengineapi.com'\n    param.header_list = header\n\n    cren = Credentials('ak','sk', 'iam', 'cn-north-1')\n    result = sign.sign_only(param, cren)\n\n    print(result)"
  },
  {
    "path": "volcengine/example/__init__.py",
    "content": "name = 'volc'"
  },
  {
    "path": "volcengine/example/adblocker/example_adblocker.py",
    "content": "\nfrom volcengine.adblocker.AdBlockerService import AdBlockService\n\nif __name__ == '__main__':\n    adblocker = AdBlockService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    adblocker.set_ak('ak')\n    adblocker.set_sk('sk')\n\n    params = dict()\n    req = {\n         'AppId': 1,\n         'Service': \"chat\",\n         'Parameters': '{\"uid\":123411, \"operate_time\":1609818934, \"chat_text\":\"a\"}'\n    }\n\n    resp = adblocker.ad_block(params, req)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/billing/example_list_amortized_cost_bill_detail.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.billing.BillingService import BillingService\n\nif __name__ == '__main__':\n    testAk = \"<Your AK>\"\n    testSk = \"<Your SK>\"\n\n    billing_service = BillingService()\n    billing_service.set_ak(testAk)\n    billing_service.set_sk(testSk)\n\n    params = dict()\n    params['BillPeriod'] = ''\n    params['AmortizedMonth'] = '2023-06'\n    params['AmortizedDay'] = ''\n    params['Product'] = ''\n    params['InstanceNo'] = ''\n    params['BillingMode'] = ''\n    params['BillCategory'] = ''\n    params['AmortizedType'] = ''\n    params['IgnoreZero'] = 0\n    params['NeedRecordNum'] = 0\n    params['Offset'] = 0\n    params['Limit'] = 10\n\n    body = {}\n\n    resp = billing_service.list_amortized_cost_bill_detail(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))\n"
  },
  {
    "path": "volcengine/example/billing/example_list_amortized_cost_bill_monthly.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.billing.BillingService import BillingService\n\nif __name__ == '__main__':\n    testAk = \"<Your AK>\"\n    testSk = \"<Your SK>\"\n\n    billing_service = BillingService()\n    billing_service.set_ak(testAk)\n    billing_service.set_sk(testSk)\n\n    params = dict()\n    params['BillPeriod'] = ''\n    params['AmortizedMonth'] = '2023-06'\n    params['Product'] = ''\n    params['InstanceNo'] = ''\n    params['BillingMode'] = ''\n    params['BillCategory'] = ''\n    params['AmortizedType'] = ''\n    params['IgnoreZero'] = 0\n    params['NeedRecordNum'] = 0\n    params['Offset'] = 0\n    params['Limit'] = 10\n\n    body = {}\n\n    resp = billing_service.list_amortized_cost_bill_monthly(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))\n"
  },
  {
    "path": "volcengine/example/billing/example_list_bill.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.billing.BillingService import BillingService\n\nif __name__ == '__main__':\n    testAk = \"<Your AK>\"\n    testSk = \"<Your SK>\"\n\n    billing_service = BillingService()\n    billing_service.set_ak(testAk)\n    billing_service.set_sk(testSk)\n\n    params = dict()\n    params['BillPeriod'] = '2022-01'\n    params['Limit'] = 10\n    params['Offset'] = 0\n    params['Product'] = ''\n    params['BillingMode'] = ''\n    params['BillCategoryParent'] = ''\n    params['PayStatus'] = ''\n    params['IgnoreZero'] = 0\n    params['NeedRecordNum'] = 0\n\n    body = {}\n\n    resp = billing_service.list_bill(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))\n"
  },
  {
    "path": "volcengine/example/billing/example_list_bill_detail.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.billing.BillingService import BillingService\n\nif __name__ == '__main__':\n    testAk = \"<Your AK>\"\n    testSk = \"<Your SK>\"\n\n    billing_service = BillingService()\n    billing_service.set_ak(testAk)\n    billing_service.set_sk(testSk)\n\n    params = dict()\n    params['BillPeriod'] = '2022-01'\n    params['Limit'] = 10\n    params['Offset'] = 0\n    params['GroupTerm'] = 0\n    params['GroupPeriod'] = 2\n    params['Product'] = ''\n    params['BillingMode'] = ''\n    params['BillCategory'] = ''\n    params['InstanceNo'] = ''\n    params['IgnoreZero'] = 0\n    params['NeedRecordNum'] = 0\n\n    body = {}\n\n    resp = billing_service.list_bill_detail(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))"
  },
  {
    "path": "volcengine/example/billing/example_list_bill_overview_by_prod.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.billing.BillingService import BillingService\n\nif __name__ == '__main__':\n    testAk = \"<Your AK>\"\n    testSk = \"<Your SK>\"\n\n    billing_service = BillingService()\n    billing_service.set_ak(testAk)\n    billing_service.set_sk(testSk)\n\n    params = dict()\n    params['BillPeriod'] = '2022-01'\n    params['Limit'] = 10\n    params['Offset'] = 0\n    params['Product'] = ''\n    params['BillingMode'] = ''\n    params['BillCategoryParent'] = ''\n    params['IgnoreZero'] = 0\n    params['NeedRecordNum'] = 0\n\n    body = {}\n\n    resp = billing_service.list_bill_overview_by_prod(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))"
  },
  {
    "path": "volcengine/example/billing/example_list_split_bill_detail.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.billing.BillingService import BillingService\n\nif __name__ == '__main__':\n    testAk = \"<Your AK>\"\n    testSk = \"<Your SK>\"\n\n    billing_service = BillingService()\n    billing_service.set_ak(testAk)\n    billing_service.set_sk(testSk)\n\n    params = dict()\n    params['BillPeriod'] = '2023-06'\n    params['GroupPeriod'] = 2\n    params['Product'] = ''\n    params['BillingMode'] = ''\n    params['BillCategory'] = ''\n    params['InstanceNo'] = ''\n    params['SplitItemID'] = ''\n    params['IgnoreZero'] = 0\n    params['NeedRecordNum'] = 0\n    params['Offset'] = 0\n    params['Limit'] = 10\n\n    body = {}\n\n    resp = billing_service.list_split_bill_detail(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))\n"
  },
  {
    "path": "volcengine/example/bioos/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/bioos/example_bind_cluster_to_workspace.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'ID': 'workspace_id',\n        'ClusterID': 'cluster_id',\n        'Type': 'workflow',\n    }\n\n    resp = bioos_service.bind_cluster_to_workspace(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_cancel_run.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'WorkspaceID': 'workspace_id',\n        'ID': 'run_id',\n    }\n\n    resp = bioos_service.cancel_run(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_cancel_submission.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'WorkspaceID': 'workspace_id',\n        'ID': 'submission_id',\n    }\n\n    resp = bioos_service.cancel_submission(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_create_data_model.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'WorkspaceID': 'workspace_id',\n        'Name': 'file_name',\n        'Headers': ['my_entity_id', 'column-1-file-CRAM', 'date'],\n        'Rows': [\n            ['your-sample-1-id', 'https:test.tos-cn-beijing.volces.com/file1.cram', '01/01/2022'],\n            ['your-sample-2-id', 'https:test.tos-cn-beijing.volces.com/file2.cram', '01/01/2022'],\n            ['your-sample-3-id', 'https:test.tos-cn-beijing.volces.com/file3.cram', '01/01/2022']\n        ],\n    }\n\n    resp = bioos_service.create_data_model(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_create_data_set.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport datetime\nimport time\nfrom typing import List\n\nimport pytz\nimport yaml\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\n\nclass YamlConverter:\n    class Publications:\n        def __init__(self, title: str, authors: List[str], access_url: str = None,\n                     quotation: str = None):\n            self.Name = title\n            self.Authors = authors\n            if access_url is not None:\n                self.AccessURL = access_url\n            if quotation is not None:\n                self.Quotation = quotation\n\n    def __init__(self, yaml_file: str):\n        with open(yaml_file, \"r\", encoding=\"UTF-8\") as f:\n            yaml_dict = yaml.load(f, Loader=yaml.FullLoader)\n            self.Name = yaml_dict.get(\"Name\", None)\n            self.Description = yaml_dict.get(\"Description\", None)\n            self.DocURL = yaml_dict.get(\"Documentation\", None)\n            self.Email = yaml_dict.get(\"Contact\", None)\n            self.Owners = yaml_dict.get(\"Owners\", None)\n            self.Licence = yaml_dict.get(\"Licence\", None)\n\n            self.Category = yaml_dict.get(\"Relevance\", None)\n            createDate = yaml_dict.get(\"CreateDate\", None)\n            if createDate:\n                self.check_time_format(str(createDate))\n                utc_date = datetime.datetime.combine(createDate, datetime.datetime.min.time())\n                utc_date = pytz.utc.localize(utc_date)\n                self.CreateTime = int(time.mktime(utc_date.timetuple()))\n            updateDate = yaml_dict.get(\"UpdateDate\", None)\n            if updateDate:\n                self.check_time_format(str(updateDate))\n                utc_date = datetime.datetime.combine(updateDate, datetime.datetime.min.time())\n                utc_date = pytz.utc.localize(utc_date)\n                self.UpdateTime = int(time.mktime(utc_date.timetuple()))\n            self.Catalogue = yaml_dict.get(\"Catalogue\", None)\n\n            project_type = yaml_dict.get(\"ProjectType\", None)\n            if project_type:\n                self.ProjectDataTypes = project_type.get(\"ProjectDataTypes\", None)\n                self.SampleScope = project_type.get(\"SampleScope\", None)\n\n            self.Labels = yaml_dict.get(\"Labels\", None)\n\n            other_info = yaml_dict.get(\"Other\", None)\n            if other_info:\n                self.ExternalLink = other_info.get(\"ExternalLink\", None)\n                self.ExternalLinkDescription = other_info.get(\"ExternalLinkDescription\", None)\n                self.ExampleTutorial = other_info.get(\"Tutorial\", None)\n                self.Tools = other_info.get(\"Tools&applications\", None)\n            self.Publications = []\n            publications = yaml_dict.get(\"Publications\", None)\n            if publications is not None:\n                for publication in publications:\n                    self.Publications.append(YamlConverter.Publications(\n                        publication.get(\"Title\", None),\n                        publication.get(\"Authors\", None),\n                        publication.get(\"URL\", None),\n                        publication.get(\"Citation\", None)\n                    ).__dict__)\n\n            self.DataFilesAccessURL = yaml_dict.get(\"DataFilesURL\", None)\n            self.DataFileSamplesAccessURL = yaml_dict.get(\"DataFileSamplesURL\", None)\n            self.DataFileAccessMethodURL = yaml_dict.get(\"DataFileMethodURL\", None)\n\n    def build_create_params(self):\n        return self.__dict__\n\n    @staticmethod\n    def check_time_format(t):\n        try:\n            datetime.datetime.strptime(t, \"%Y-%m-%d\")\n        except Exception as e:\n            print(\"time format %Y-%m-%d not matched\")\n            raise e\n\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = YamlConverter(\"example_dataset.yaml\").build_create_params()\n\n    resp = bioos_service.create_data_set(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_create_notebook_server_image.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'BaseImage': 'base_image',\n        'ImageName': 'image_name',\n        'DisplayName': 'custom',\n        'Source': 'building',\n        'Packages': {\n            'Pip': {'numpy': '1.22.2'},\n        },\n        'ImageVersion': '1.0.0',\n    }\n\n    resp = bioos_service.create_notebook_server_image(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_create_submission.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nimport json\n\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'ClusterID': 'cluster_id',\n        'WorkspaceID': 'workspace_id',\n        'WorkflowID': 'workflow_id',\n        'Name': 'submission_name',\n        'Description': 'submission_description',\n        'DataModelID': 'data_model_id',\n        'DataModelRowIDs': ['your-sample-3-id'],\n        'Inputs': json.dumps({\n            'testname.hello.name': 'this.name1'\n        }),\n        'ExposedOptions': {'ReadFromCache': True},\n        'Outputs': json.dumps({\n            'testname.hello.response': 'this.response1'\n        }),\n    }\n\n    resp = bioos_service.create_submission(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_create_workflow.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'WorkspaceID': 'workspace_id',\n        'Name': 'workflow_name',\n        'Description': 'workflow_description',\n        'Language': 'WDL',\n        'Source': 'http://foo.git',\n        'Tag': 'baz',\n        'MainWorkflowPath': 'aaa/bbb.wdl',\n    }\n\n    resp = bioos_service.create_workflow(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_create_workspace.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'Name': 'workspace_name',\n        'Description': 'workspace_description'\n    }\n\n    resp = bioos_service.create_workspace(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_dataset.yaml",
    "content": "Name: GRCh37 Genome Reference Consortium Human Reference 37(hg19)\nDescription: 'It contains the genome sequence files from the original release in 2009 by NCBI(GCA_000001405.1) and some related files. This original version and all subsequent changes are called \"hg19\" at UCSC. GRCh37 was produced and is updated by the Genome Reference Consortium:  https://www.ncbi.nlm.nih.gov/grc'\nDocumentation: http://sss.com\nContact: genome@soe.ucsc.edu\nManagedBy: \"bio2s[Bio-OS]\"\nOwners:\n  - user1\n  - user2\nLicence: http://sss.com\nRelevance: 组学基础研究\nCreateDate: 2009-03-01\nUpdateDate: 2020-03-01\nCatalogue: OMICSDATA\nProjectType:\n  ProjectDataTypes:\n  - Whole Genome sequencing\n  SampleScope: Monoisolate\nOther:\n  ExternalLink: https://hgdownload.soe.ucsc.edu/downloads.html\n  ExternalLinkDescription: This page contains links to sequence and annotation downloads for the genome assemblies featured in the UCSC Genome Browser.Downloads are also available via our JSON API, MySQL server, or FTP server. Data filtering is available in the Table Browser or via the command-line utilities.For access to the most recent assembly of each genome, see the current genomes directory. Previous versions of certain data are available from our track archive. Data hosted in Public Hubs exists on external sites. GenArk (Genome Archive) species data can be found here. All data in the Genome Browser are freely usable for any purpose except as indicated in the README.txt files in the download directories. These data were contributed by many researchers, as listed on the Genome Browser credits page. Please acknowledge the contributor(s) of the data you use.\n  Tutorial: http://sss.com\n  Tools&applications: http://sss.com\nPublications:\n  - Title: title\n    URL: http://aaa.bbb.com\n    Authors:\n      - author1\n      - author2\n    Citation: http://111.222.com\nLabels:\n    - human\n    - genome reference\nDataFilesURL: null\nDataFileSamplesURL: null\nDataFileMethodURL: null"
  },
  {
    "path": "volcengine/example/bioos/example_delete_cluster.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n    }\n\n    resp = bioos_service.delete_cluster(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_delete_data_model_rows_and_headers.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'WorkspaceID': 'workspace_id',\n        'ID': 'data_model_id',\n        'RowIDs': ['your-sample-3-id']\n    }\n\n    resp = bioos_service.delete_data_model_rows_and_headers(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_delete_data_set.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        \"ID\": \"dataset_id\"\n    }\n\n    resp = bioos_service.delete_data_set(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_delete_notebook_server.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'WorkspaceID': 'workspace_id',\n        'UserID': 123456\n    }\n\n    resp = bioos_service.delete_notebook_server(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_delete_notebook_server_settings.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'WorkspaceID': 'workspace_id',\n    }\n\n    resp = bioos_service.delete_notebook_server_settings(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_delete_submission.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'WorkspaceID': 'workspace_id',\n        'ID': 'submission_id'\n    }\n\n    resp = bioos_service.delete_submission(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_delete_workflow.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'WorkspaceID': 'workspace_id',\n        'ID': 'workflow_id'\n    }\n\n    resp = bioos_service.delete_workflow(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_delete_workspace.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n    }\n\n    resp = bioos_service.delete_workspace(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_get_api_accesskey.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'ClusterID': 'cluster_id',\n    }\n\n    resp = bioos_service.get_api_accesskey(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_get_notebook_edit_info.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n                \"WorkspaceID\": \"workspace_id\",\n                \"Name\": \"__dashboard__\"\n    },\n\n    resp = bioos_service.get_notebook_edit_info(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_get_notebook_server_extra_packages.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'WorkspaceID': 'workspace_id',\n    }\n\n    resp = bioos_service.get_notebook_server_extra_packages(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_get_notebook_server_settings.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        \"WorkspaceID\": \"workspace_id\"\n    },\n\n    resp = bioos_service.get_notebook_server_settings(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_get_notebook_server_stat.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        \"WorkspaceID\": \"workspace_id\"\n    },\n\n    resp = bioos_service.get_notebook_server_stat(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_get_trs_workflow_info.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        \"TRSServer\": \"https://dockstore.org\",\n        \"ID\": \"#workflow/github.com/aaa/bbb/ccc\"\n    }\n\n    resp = bioos_service.get_trs_workflow_info(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_list_clusters.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'PageNumber': 1,\n        'PageSize': 10,\n        'Filter': {\n            'IDs': ['test-workflow'],\n            'Status': ['Running'],\n            'Type': ['shared'],\n            'Public': True,\n        },\n    }\n\n    resp = bioos_service.list_clusters(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_list_clusters_of_workspace.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'Type': 'notebook',\n        'ID': 'workspace_id'\n    }\n\n    resp = bioos_service.list_clusters(params)\n    print(resp)\n\n"
  },
  {
    "path": "volcengine/example/bioos/example_list_data_files.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        \"DataSetID\": \"dataset_id\",\n        \"PageNumber\": 1,\n        \"PageSize\": 10,\n        \"Filter\": {\n            \"IDs\": [\"data_file_id1\", \"data_file_id2\"],\n            \"FileType\": [\"csv\"],\n            \"Keyword\": \"key\"\n        },\n        \"SortBy\": \"Name\",\n        \"SortOrder\": \"Desc\"\n    },\n\n    resp = bioos_service.list_data_files(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_list_data_model_rows.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'WorkspaceID': 'workspace_id',\n        'ID': 'data_model_id',\n        'PageNumber': 1,\n        'PageSize': 0,\n        'SortBy': 'id',\n        'SortOrder': 'DESC'\n    }\n\n    resp = bioos_service.list_data_model_rows(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_list_data_models.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'WorkspaceID': 'workspace_id',\n    }\n\n    resp = bioos_service.list_data_models(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_list_data_sets.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        \"PageNumber\": 1,\n        \"PageSize\": 10,\n        \"Filter\": {\n            \"IDs\": [\"dataset_id1\", \"dataset_id2\"],\n            \"ProjectDataTypes\": [\"data_type\"],\n            \"Categories\": [\"示例数据\"],\n            \"Keyword\": \"key\",\n            \"Owner\": \"ownerName\"\n        },\n        \"SortBy\": \"Name\",\n        \"SortOrder\": \"Desc\"\n    },\n    resp = bioos_service.list_data_sets(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_list_notebook_server_images.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        \"ImageIDs\": [\"1\", \"2\"],\n        \"Source\": \"official\",\n        \"Status\": \"pending\",\n        \"DisplayName\": \"xxxxxxxx\"\n    },\n\n    resp = bioos_service.list_notebook_server_images(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_list_notebook_server_resource_opts.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n    }\n\n    resp = bioos_service.list_notebook_server_resource_opts(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_list_notebook_servers.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        \"PageNumber\": 1,\n        \"PageSize\": 10,\n        \"Filter\": {\n            \"Status\": \"spawn\",\n            \"WorkspaceID\": \"workspace_id\",\n            \"UserID\": 123456\n        },\n        \"SortBy\": \"OwnerName\",\n        \"SortOrder\": \"Desc\"\n    }\n\n    resp = bioos_service.list_notebook_servers(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_list_overview_submissions.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        \"PageNumber\": 1,\n        \"PageSize\": 10,\n        \"SortBy\": \"OwnerName\",\n        \"SortOrder\": \"Desc\"\n    }\n\n    resp = bioos_service.list_overview_submissions(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_list_runs.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'WorkspaceID': 'workspace_id',\n        'Filter': {'IDs': ['run_id1', 'run_id2']},\n    }\n\n    resp = bioos_service.list_runs(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_list_submissions.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'WorkspaceID': 'workspace_id',\n        'Filter': {'IDs': ['submission_id1', 'submission_id2']},\n    }\n\n    resp = bioos_service.list_submissions(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_list_tasks.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'RunID': 'run_id',\n        'WorkspaceID': 'workspace_id'\n    }\n\n    resp = bioos_service.list_tasks(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_list_workflows.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'WorkspaceID': 'workspace_id',\n        'SortBy': 'CreateTime',\n        'PageNumber': 1,\n        'PageSize': 0,\n        'SortOrder': 'DESC',\n    }\n\n    resp = bioos_service.list_workflows(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_list_workspace_labels.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {}\n\n    resp = bioos_service.list_workspace_labels(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_list_workspaces.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {}\n\n    resp = bioos_service.list_workspaces(params)\n    print(resp)\n\n"
  },
  {
    "path": "volcengine/example/bioos/example_stop_notebook_server.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        \"WorkspaceID\": \"workspace_id\"\n    }\n\n    resp = bioos_service.stop_notebook_server(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_unbind_cluster_and_workspace.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'ID': 'workspace_id',\n        'ClusterID': 'cluster_id',\n        'Type': 'notebook'\n    }\n\n    resp = bioos_service.unbind_cluster_and_workspace(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_update_api_accesskey.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'ClusterID': 'cluster_id',\n        'AccessKeyID': 'AKxxxxxxxx',\n        'SecretAccessKey': 'xxxxxxxxxx',\n    }\n\n    resp = bioos_service.update_api_accesskey(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_update_notebook_server_settings.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        \"WorkspaceID\": \"workspace_id\",\n        \"ResourceSize\": \"small\",\n        \"ImageID\": \"1\",\n        \"MountTOSEnabled\": False,\n        \"TempImageName\": \"jupyter/minimal-notebook\"\n    }\n\n    resp = bioos_service.update_notebook_server_settings(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_update_workflow.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'WorkspaceID': 'workflow_id',\n        'ID': 'workflow_id',\n        'Name': 'workflow_name',\n        'Description': 'workflow_description',\n        'Source': 'https://foo/wdl.git',\n        'Tag': 'git_tag',\n        'Token': 'git_token',\n        'MainWorkflowPath': 'hello.wdl'\n    }\n\n    resp = bioos_service.update_workflow(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/bioos/example_update_workspace.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.bioos.BioOsService import BioOsService\n\nif __name__ == '__main__':\n    # set endpoint/region here if the default value is unsatisfied\n    bioos_service = BioOsService(endpoint='endpoint', region='region')\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    bioos_service.set_ak('ak')\n    bioos_service.set_sk('sk')\n\n    params = {\n        'ID': 'workspace_id',\n        'Name': 'workspace_name',\n        'Description': 'workspace_description',\n        'CoverPath': 'template-cover/pic1.png'\n    }\n\n    resp = bioos_service.update_workspace(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/business_security/example_risk_detect.py",
    "content": "\nfrom volcengine.business_security.RiskDetectionService import RiskDetectService\n\nif __name__ == '__main__':\n    riskDetector = RiskDetectService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    riskDetector.set_ak('AK')\n    riskDetector.set_sk('SK')\n\n    params = dict()\n    req = {\n         'AppId': 0,\n         'Service': \"\",\n         'Parameters': '{}'\n    }\n\n    resp = riskDetector.risk_detect(params, req)\n"
  },
  {
    "path": "volcengine/example/cdn/__init__.py",
    "content": "ak = ''\nsk = ''\n"
  },
  {
    "path": "volcengine/example/cdn/add_cdn_certificate.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        'Certificate': {\n            'Certificate': '''-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----''',\n            'PrivateKey': '''-----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY-----'''\n        },\n        'CertInfo': {\n            'Desc': 'remark',\n        },\n        'Source': 'volc_cert_center'\n    }\n\n    resp = svc.add_cdn_certificate(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/add_cdn_domain.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        'Domain': 'example.com',\n        'ServiceType': 'web',\n        'Origin': [\n            {\n                'OriginAction': {\n                    'OriginLines': [{\n                        'OriginType': 'primary',\n                        'InstanceType': 'ip',\n                        'Address': '1.1.1.1',\n                        'HttpPort': '80',\n                        'HttpsPort': '443',\n                        'Weight': '100'\n                    }]\n                }\n            }\n        ],\n        'OriginProtocol': 'HTTP'\n    }\n\n    resp = svc.add_cdn_domain(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/add_resource_tags.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        'Resources': ['example.com', 'example1.com'],\n        'ResourceTags': [\n            {'Key': 'userKey', 'Value': 'userVal'}\n        ]\n    }\n\n    resp = svc.add_resource_tags(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/batch_deploy_cert.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        'CertId': 'cert-xxx',\n        'Domain': 'xxx.com',\n    }\n\n    resp = svc.batch_deploy_cert(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/delete_cdn_domain.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        'Domain': 'example.com',\n    }\n\n    resp = svc.delete_cdn_domain(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/delete_resource_tags.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        'Resources': ['example.com', 'example1.com'],\n        'ResourceTags': [\n            {'Key': 'userKey', 'Value': 'userVal'}\n        ]\n    }\n\n    resp = svc.delete_resource_tags(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_accounting_data.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nimport datetime\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n    now = int(datetime.datetime.now().strftime(\"%s\"))\n    body = {\n        'StartTime': now - 3600,\n        'EndTime': now,\n        'Metric': 'flux',\n        'Domain': 'example.com',\n    }\n\n    resp = svc.describe_accounting_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_accounting_summary.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\nimport datetime\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n    \n    now = int(datetime.datetime.now().strftime(\"%s\"))\n    body = {\n        'StartTime': now - 3600,\n        'EndTime': now,\n        'Domain': 'example.com',\n    }\n\n    resp = svc.describe_accounting_summary(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_cdn_access_log.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nimport datetime\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n    now = int(datetime.datetime.now().strftime(\"%s\"))\n    body = {\n        'StartTime': now - 3600,\n        'EndTime': now,\n        'Domain': 'example.com',\n    }\n\n    resp = svc.describe_cdn_access_log(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_cdn_config.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        'Domain': 'example.com'\n    }\n\n    resp = svc.describe_cdn_config(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_cdn_data.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nimport datetime\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n    now = int(datetime.datetime.now().strftime(\"%s\"))\n    body = {\n        'StartTime': now - 86400,\n        'EndTime': now,\n        'Metric': 'pv',\n        'Domain': 'example.com',\n        'Interval': '5min',\n        'Isp': 'CT',\n        'Region': 'BJ',\n        'Protocol': 'http',\n        'IpVersion': 'ipv4',\n        \"OnlyTotal\": True\n    }\n\n    resp = svc.describe_cdn_data(body)\n    print(resp)\n    \n    # use method GET\n    resp = svc.describe_cdn_data(body, svc.use_get())\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_cdn_data_detail.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\nimport datetime\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    now = int(datetime.datetime.now().strftime(\"%s\"))\n    body = {\n        'StartTime': now - 3600,\n        'EndTime': now,\n        'Metric': 'pv',\n        'Domain': 'example.com',\n        'Interval': '5min',\n        'Protocol': 'http',\n        'IpVersion': 'ipv4'\n    }\n\n    resp = svc.describe_cdn_data_detail(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_cdn_origin_data.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nimport datetime\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n    now = int(datetime.datetime.now().strftime(\"%s\"))\n    body = {\n        'StartTime': now - 3600,\n        'EndTime': now,\n        'Metric': 'pv',\n        'Domain': 'example.com',\n        'Interval': '5min',\n    }\n\n    resp = svc.describe_cdn_origin_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_cdn_region_and_isp.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n    body = {\n        'Area': 'China'\n    }\n    print(body)\n\n    resp = svc.describe_cdn_region_and_isp(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_cdn_service.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    resp = svc.describe_cdn_service()\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_cdn_upper_ip.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        'Domain': 'example.com',\n    }\n\n    resp = svc.describe_cdn_upper_ip(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_cert_config.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        'CertId': 'cert-xxxx'\n    }\n\n    resp = svc.describe_cert_config(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_content_block_tasks.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nimport datetime\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n    now = int(datetime.datetime.now().strftime(\"%s\"))\n    body = {\n        'TaskType': 'block_url',\n        'StartTime': now - 86400,\n        'EndTime': now,\n    }\n    print(body)\n\n    resp = svc.describe_content_block_tasks(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_content_quota.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    resp = svc.describe_content_quota()\n    print(resp)\n\n    # Get 请求\n    resp = svc.describe_content_quota(method=svc.use_get())\n    print(resp)"
  },
  {
    "path": "volcengine/example/cdn/describe_content_tasks.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"PageNum\": 1,\n        'PageSize': 10,\n        'TaskType': 'refresh_file'\n    }\n\n    resp = svc.describe_content_tasks(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_district_isp_data.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\nimport datetime\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n    \n    now = int(datetime.datetime.now().strftime(\"%s\"))\n    body = {\n        'StartTime': now - 3600,\n        'EndTime': now,\n        'Metric': 'bandwidth',\n        'Domain': 'example.com',\n        'Interval': '5min',\n        'Protocol': 'http',\n        'IpVersion': 'ipv4'\n    }\n    \n    resp = svc.describe_district_isp_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_edge_nrt_data_summary.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nimport datetime\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n    now = int(datetime.datetime.now().strftime(\"%s\"))\n    body = {\n        'StartTime': now - 86400,\n        'EndTime': now,\n        'Metric': 'pv',\n    }\n    print(body)\n\n    resp = svc.describe_edge_nrt_data_summary(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_edge_statistical_data.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nimport datetime\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n    now = int(datetime.datetime.now().strftime(\"%s\"))\n    body = {\n        'StartTime': now - 86400,\n        'EndTime': now,\n        'Metric': 'clientIp',\n        'Domain': 'example.com',\n    }\n    print(body)\n\n    resp = svc.describe_edge_statistical_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_edge_top_nrt_data.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nimport datetime\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n    now = int(datetime.datetime.now().strftime(\"%s\"))\n    body = {\n        'StartTime': now - 86400,\n        'EndTime': now,\n        'Metric': 'flux',\n        'Domain': 'example.com',\n        'Item': 'region'\n    }\n    print(body)\n\n    resp = svc.describe_edge_top_nrt_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_edge_top_statistical_data.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nimport datetime\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n    now = int(datetime.datetime.now().strftime(\"%s\"))\n    body = {\n        'StartTime': now - 86400,\n        'EndTime': now,\n        'Metric': 'clientip',\n        'Domain': 'example.com',\n        'Item': 'region'\n    }\n    print(body)\n\n    resp = svc.describe_edge_top_statistical_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_edge_top_status_code.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nimport datetime\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n    now = int(datetime.datetime.now().strftime(\"%s\"))\n    body = {\n        'Metric': 'status_5xx',\n        'Item': 'domain'\n    }\n    print(body)\n\n    resp = svc.describe_edge_top_status_code(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_ip_info.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        'IP': \"1.1.1.1\"\n    }\n\n    resp = svc.describe_ip_info(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_ip_list_info.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        'IpList': \"1.1.1.1,2.2.2.2\"\n    }\n\n    resp = svc.describe_ip_list_info(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_origin_nrt_data_summary.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nimport datetime\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n    now = int(datetime.datetime.now().strftime(\"%s\"))\n    body = {\n        'StartTime': now - 86400,\n        'EndTime': now,\n        'Metric': 'pv',\n    }\n    print(body)\n\n    resp = svc.describe_origin_nrt_data_summary(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_origin_top_nrt_data.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nimport datetime\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n    now = int(datetime.datetime.now().strftime(\"%s\"))\n    body = {\n        'StartTime': now - 86400,\n        'EndTime': now,\n        'Metric': 'flux',\n        'Item': 'domain'\n    }\n    print(body)\n\n    resp = svc.describe_origin_top_nrt_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/describe_origin_top_status_code.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nimport datetime\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n    now = int(datetime.datetime.now().strftime(\"%s\"))\n    body = {\n        'Metric': 'status_5xx',\n        'Item': 'domain'\n    }\n    print(body)\n\n    resp = svc.describe_origin_top_status_code(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/list_cdn_cert_info.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n    }\n\n    resp = svc.list_cdn_cert_info(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/list_cdn_domains.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        'ServiceType': 'web',\n        'PageNum': 1,\n        'PageSize': 100\n    }\n\n    resp = svc.list_cdn_domains(body)\n    print(resp)\n    \n    # use method GET \n    resp = svc.list_cdn_domains(body, svc.use_get())\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/list_cert_info.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        'Source': 'volc_cert_center'\n    }\n\n    resp = svc.list_cert_info(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/list_resource_tags.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    resp = svc.list_resource_tags()\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/start_cdn_domain.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        'Domain': 'example.com',\n    }\n\n    resp = svc.start_cdn_domain(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/stop_cdn_domain.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        'Domain': 'example.com',\n    }\n\n    resp = svc.stop_cdn_domain(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/submit_block_task.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"Urls\": \"http://example.com/1.txt\\nhttp://example.com/2.jpg\",\n    }\n\n    resp = svc.submit_block_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/submit_preload_task.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"Urls\": \"http://example.com/1.txt\\nhttp://example.com/2.jpg\",\n    }\n\n    resp = svc.submit_preload_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/submit_refresh_task.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n    print(ak, sk)\n    body = {\n        \"Type\": \"file\",\n        \"Urls\": \"http://example.com/1.txt\\nhttp://example.com/2.jpg\",\n    }\n\n    resp = svc.submit_refresh_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/submit_unblock_task.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"Urls\": \"http://example.com/1.txt\\nhttp://example.com/2.jpg\",\n    }\n\n    resp = svc.submit_unblock_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/update_cdn_config.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        'Domain': 'example.com',\n        'Origin': [\n            {\n                'OriginAction': {\n                    'OriginLines': [{\n                        'OriginType': 'primary',\n                        'InstanceType': 'domain',\n                        'Address': 'new-origin.com',\n                        'HttpPort': '80',\n                        'HttpsPort': '443',\n                        'Weight': '100'\n                    }]\n                }\n            }\n        ],\n    }\n\n    resp = svc.update_cdn_config(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/cdn/update_resource_tags.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.cdn import ak, sk\nfrom volcengine.cdn.service import CDNService\n\nif __name__ == '__main__':\n    svc = CDNService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        'Resources': ['example.com', 'example1.com'],\n        'ResourceTags': [\n            {'Key': 'userKey', 'Value': 'userVal'}\n        ]\n    }\n\n    resp = svc.update_resource_tags(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/code_pipeline/example_list_workspaces.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.code_pipeline.CodePipelineService import CodePipelineService\n\nif __name__ == '__main__':\n    cp_service = CodePipelineService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    cp_service.set_ak('ak')\n    cp_service.set_sk('sk')\n\n    params = {}\n    body = {}\n\n    resp = cp_service.list_workspaces(params, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/content_security/example_video_risk.py",
    "content": "# coding=utf-8\nfrom volcengine.content_security.ContentSecurityService import ContentSecurityService\n\nif __name__ == '__main__':\n    riskDetector = ContentSecurityService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    riskDetector.set_ak('')\n    riskDetector.set_sk('')\n\n    params = dict()\n    req = {\n         'AppId': 0,\n         'Service': \"\",\n         'Parameters': '{}'\n    }\n\n    resp = riskDetector.async_video_risk(params, req)"
  },
  {
    "path": "volcengine/example/dcdn/__init__.py",
    "content": "ak = ''\nsk = ''\n"
  },
  {
    "path": "volcengine/example/dcdn/batch_block_ip.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"Domains\": [],\n        \"IPList\": [\n            \"2.2.2.2\"\n        ],\n        \"OperatorType\": \"block\",\n        \"BlockInterval\": 1440,\n        \"UpdateType\": \"cover\",\n    }\n\n\n    resp = svc.batch_block_ip(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/check_purge_prefetch_task.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"TaskType\": [\"refresh_url\"],\n        \"TaskStatus\": [\"running\"],\n        \"Url\": \"www.test.com\",\n        \"StartTime\": \"2022-12-15 00:00:00\",\n        \"EndTime\": \"2022-12-15 18:59:00\",\n        \"Page\": 1,\n        \"PageSize\": 100,\n        \"OrderType\": \"OpTime_DESC\"\n    }\n\n    resp = svc.check_purge_prefetch_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/create_domain.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = [\n        {\n            \"Domain\": \"www.test.com\",\n            \"StrategyType\": \"wrr\",\n            \"Origin\": {\n                \"Origins\": [\n                    {\n                        \"Name\": \"1.1.1.2\",\n                        \"Weight\": 1\n                    }\n                ],\n                \"OriginType\": \"IP\",\n                \"OriginProtocolType\": \"http\",\n            },\n            \"Cache\": {\n                \"Enable\": False,\n            },\n            \"EnableFailOver\": False,\n        }\n    ]\n\n    resp = svc.create_domain(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/create_domain_v2.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n            \"Domains\": [\"www.test.top\"],\n            \"StrategyType\": \"wrr\",\n            \"ProjectName\": \"TEST\",\n            \"Origin\": {\n                \"Origins\": [\n                    {\n                        \"Name\": \"1.1.1.2\",\n                        \"Weight\": 1\n                    }\n                ],\n                \"OriginType\": \"IP\",\n                \"OriginProtocolType\": \"http\",\n            },\n            \"Cache\": {\n                \"Enable\": False,\n            },\n            \"EnableFailOver\": False,\n        }\n\n    resp = svc.create_domain_v2(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/create_purge_prefetch_task.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"TaskType\": \"refresh_url\",\n        \"Urls\": [\n            \"www.test.com\"\n        ]\n    }\n\n    resp = svc.create_purge_prefetch_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/delete_domain.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"Domains\": [\"www.test.com\"]\n    }\n\n    resp = svc.delete_domain(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_block_ip.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"Domains\": [],\n        \"IPList\": [],\n        \"PageNumber\": 1,\n        \"PageSize\": 10,\n    }\n\n\n    resp = svc.describe_block_ip(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_dcdn_edge_ip.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"Domain\": \"www.test.com\",\n        \"IpVersion\": \"\",\n        \"Isp\": \"\",\n        \"Region\": \"\",\n    }\n    \n\n    resp = svc.describe_dcdn_edge_ip(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_dcdn_origin_ip.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {}\n\n\n    resp = svc.describe_dcdn_origin_ip(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_dcdn_region_and_isp.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    params = {\n        \"Area\": \"China\"\n    }\n\n    resp = svc.describe_dcdn_region_and_isp(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_domain_config.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"Domains\": [\"www.test.com\"]\n    }\n\n    resp = svc.describe_domain_config(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_domain_isp_data.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"StartTime\": \"2022-12-15 00:00:00\",\n        \"EndTime\": \"2022-12-15 18:59:00\",\n        \"Domain\": \"www.test.com\"\n    }\n\n    resp = svc.describe_domain_isp_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_domain_logs.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"Domain\": \"www.test.com\",\n        \"StartTime\": \"2022-12-15 00:00:00\",\n        \"EndTime\": \"2022-12-15 18:59:00\"\n    }\n\n    resp = svc.describe_domain_logs(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_domain_probe_setting.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"Domain\": \"www.test.com\",\n        \"Fuzzy\": False\n    }\n    \n\n    resp = svc.describe_domain_probe_setting(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_domain_pv_data.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"Domain\": \"www.test.com\",\n        \"StartTime\": \"2022-12-15 00:00:00\",\n        \"EndTime\": \"2022-12-15 18:59:00\"\n    }\n\n    resp = svc.describe_domain_pv_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_domain_region_data.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"StartTime\": \"2022-12-15 00:00:00\",\n        \"EndTime\": \"2022-12-15 18:59:00\",\n        \"Domain\": \"www.test.com\",\n    }\n\n    resp = svc.describe_domain_region_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_domain_uv_data.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"Domain\": \"www.test.com\",\n        \"StartTime\": \"2022-12-15 00:00:00\",\n        \"EndTime\": \"2022-12-15 18:59:00\"\n    }\n\n    resp = svc.describe_domain_uv_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_ga_origin_policy.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"Domain\": \"ga.test.top\"\n    }\n    resp = svc.describe_ga_origin_policy(body)\n    print(resp)"
  },
  {
    "path": "volcengine/example/dcdn/describe_l2_ips.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \" DomainName\": \"\",\n    }\n\n\n    resp = svc.describe_l2_ips(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_origin_realtime_data.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"StartTime\": \"2022-12-15 00:00:00\",\n        \"EndTime\": \"2022-12-15 18:59:00\",\n        \"Domains\": [\"www.test.com\"],\n        \"Metrics\": [\"all\"],\n    }\n\n    resp = svc.describe_origin_realtime_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_origin_statistics.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"StartTime\": \"2022-12-15 00:00:00\",\n        \"EndTime\": \"2022-12-15 18:59:00\",\n        \"Domains\": [\"www.test.com\"],\n        \"Metrics\": [\"all\"],\n        \"Interval\": 300,\n    }\n\n    resp = svc.describe_origin_statistics(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_origin_statistics_detail.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    params = {\n        \"StartTime\": \"2022-08-09 00:00:00\",\n        \"EndTime\": \"2022-08-09 00:20:11\",\n        \"Domains\": [\n            \"www.test1.com\",\n            \"www.test2.com\"\n        ],\n        \"Metrics\": [\n            \"all\"\n        ],\n        \"Interval\": 300\n    }\n\n    resp = svc.describe_origin_statistics_detail(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_realtime_data.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"StartTime\": \"2022-12-15 00:00:00\",\n        \"EndTime\": \"2022-12-15 18:59:00\",\n        \"Domains\": [\"www.test.com\"],\n        \"Metrics\": [\"all\"]\n    }\n\n    resp = svc.describe_realtime_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_statistics.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"StartTime\": \"2022-12-15 00:00:00\",\n        \"EndTime\": \"2022-12-15 18:59:00\",\n        \"Domains\": [\"www.test.com\"],\n        \"Metrics\": [\"all\"],\n        \"Interval\": 300\n    }\n\n    resp = svc.describe_statistics(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_statistics_detail.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    params = {\n        \"StartTime\": \"2022-12-15 00:00:00\",\n        \"EndTime\": \"2022-12-15 18:59:00\",\n        \"Domains\": [\n            \"www.test1.com\",\n            \"www.test2.com\"\n        ],\n        \"Metrics\": [\n            \"all\"\n        ],\n        \"Interval\": 300\n    }\n\n    resp = svc.describe_statistics_detail(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_top_domains.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"StartTime\": \"2022-12-15 00:00:00\",\n        \"EndTime\": \"2022-12-15 18:59:00\",\n        \"Sort\": \"request\",\n    }\n\n    resp = svc.describe_top_domains(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_top_ips.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"StartTime\": \"2022-12-15 00:00:00\",\n        \"EndTime\": \"2022-12-15 18:59:00\",\n        \"Sort\": \"request\"\n    }\n\n    resp = svc.describe_top_ips(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_top_referers.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"StartTime\": \"2022-12-15 18:50:00\",\n        \"EndTime\": \"2022-12-15 18:59:00\",\n        \"Sort\": \"traffic\"\n    }\n\n    resp = svc.describe_top_referers(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_top_urls.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"StartTime\": \"2022-12-15 18:50:00\",\n        \"EndTime\": \"2022-12-15 18:59:00\",\n        \"Sort\": \"traffic\"\n    }\n\n    resp = svc.describe_top_urls(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_user_domains.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    params = {\n        \"PageNum\": 1,\n        \"PageSize\": 10,\n        \"ProjectName\": [\"TEST\"],\n    }\n\n    resp = svc.describe_user_domains(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_verify_content.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n    print(ak)\n    print(sk)\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    params = {\n        \"DomainName\":\"aaa.www.volcengine22.com\",\n    }\n\n    resp = svc.describe_verify_content(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/describe_ws_statistics.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"StartTime\": \"2024-08-09 16:00:00\",\n        \"EndTime\":  \"2024-08-09 17:00:00\",\n        \"Interval\": 300,\n        \"Domains\": [\n            \"xxxx.test.com\"\n        ],\n        \"GroupByDomain\": False\n    }\n\n    resp = svc.describe_ws_statistics(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/get_purge_prefetch_task_quota.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    params = {}\n\n    resp = svc.get_purge_prefetch_task_quota(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/retry_purge_prefetch_task.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"TaskId\": \"1001\",\n        \"TaskType\": \"refresh_url\"\n    }\n\n    resp = svc.retry_purge_prefetch_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/start_domain.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"Domains\": [\"www.test.com\"]\n    }\n\n    resp = svc.start_domain(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/stop_domain.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"Domains\": [\"www.test.com\"]\n    }\n\n    resp = svc.stop_domain(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/update_domain_config.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = [\n        {\n            \"Domain\": \"www.test.com\",\n            \"Origin\": {\n                \"Origins\": [\n                    {\n                        \"Name\": \"1.1.1.1\",\n                        \"Weight\": 1\n                    }\n                ],\n                \"OriginType\": \"IP\",\n                \"OriginProtocolType\": \"http\",\n            },\n        }\n    ]\n\n    resp = svc.update_domain_config(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/update_domain_config_v2.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"Domain\": \"www.test.com\",\n        \"Origin\": {\n            \"Origins\": [\n                {\n                    \"Name\": \"3.3.3.3\",\n                    \"Weight\": 1\n                }\n            ],\n            \"OriginType\": \"IP\",\n            \"OriginProtocolType\": \"http\",\n        },\n    }\n    resp = svc.update_domain_config_v2(body)\n    print(resp)"
  },
  {
    "path": "volcengine/example/dcdn/update_domain_probe_setting.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = [\n        {\n            \"Domain\": \"111.soultrial.top\",\n            \"ProbeSetting\": {\n                \"Host\": \"soultrial.top\",\n                \"Url\": \"/jpg\",\n                \"Switch\": \"on\",\n                \"UnhealthyStatusList\": [\n                    \"4xx\"\n                ]\n            }\n        },\n        {\n            \"Domain\": \"222.soultrial.top\",\n            \"ProbeSetting\": {\n                \"Host\": \"222.soultrial.to\",\n                \"Url\": \"/text\",\n                \"Switch\": \"on\",\n                \"UnhealthyStatusList\": [\n                    \"5xx\"\n                ]\n            }\n        }\n    ]\n    \n\n    resp = svc.update_domain_probe_setting(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dcdn/update_ga_origin_policy.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"Domain\": \"ga.test.top\",\n        \"OriginPolicy\": [\n            {\n                \"Priority\": 1,\n                \"Match\": {\n                    \"Value\": [\n                        \"/hotel\"\n                    ]\n                },\n                \"SplitClients\": {\n                    \"Policy\": \"mmh2\",\n                    \"HashVal\": \"${http_deviceid}\",\n                    \"Splits\": [\n                        {\n                            \"DC\": \"accinstance-BTqmpvDufFSxNeyiu7vxYd\",\n                            \"Weight\": 11\n                        },\n                        {\n                            \"DC\": \"accinstance-SkDwncUQWnfTi7AdnvjvHa\",\n                            \"Weight\": 14\n                        }\n                    ]\n                }\n            },\n            {\n                \"Priority\": 2,\n                \"Match\": {\n                    \"Value\": [\n                        \"/\",\n                        \"/tool\"\n                    ]\n                },\n                \"SplitClients\": {\n                    \"Policy\": \"random-rr\",\n                    \"HashVal\": \"\",\n                    \"Splits\": [\n                        {\n                            \"DC\": \"accinstance-BTqmpvDufFSxNeyiu7vxYd\",\n                            \"Weight\": 29\n                        },\n                        {\n                            \"DC\": \"accinstance-SkDwncUQWnfTi7AdnvjvHa\",\n                            \"Weight\": 4\n                        }\n                    ]\n                }\n            }\n        ]\n    }\n    resp = svc.update_ga_origin_policy(body)\n    print(resp)"
  },
  {
    "path": "volcengine/example/dcdn/verify_domain_ownership.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\n\nfrom volcengine.example.dcdn import ak, sk\nfrom volcengine.dcdn.DCDNService import DCDNService\n\nif __name__ == '__main__':\n    svc = DCDNService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"DomainName\": \"www2222.soultrial.top\",\n        \"VerifyType\": \"dns\"\n    }\n\n    resp = svc.verify_domain_ownership(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/dts/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/dts/create_dts_task.py",
    "content": "import json\n\nfrom volcengine.dts.dts_service import DtsService\n\nif __name__ == '__main__':\n    access_key = 'your_ak_here'\n    secret_key = 'your_sk_here'\n    task_name = 'task_name_str'\n    task_type = 'task_type_here'\n    region_str = 'region_str_here'\n\n    dts_service = DtsService(region=region_str)\n\n    dts_service.set_ak(access_key)\n    dts_service.set_sk(secret_key)\n\n    params = {}\n    body = {\n        'TaskName': task_name,\n        'TaskType': task_type,\n        'ChargeConfig': {\n            'ChargeType': 'PostPaid',\n            'OneStep': True\n        },\n        'SrcConfig': {\n            'EndpointType': 'Public_Redis',\n            'PublicRedisSettings': {\n                'Host': 'IP_str_here',\n                'Port': 6379,\n                'Username': 'default',\n                'Password': 'redis_password_here',\n                'RegionSettings': {\n                    'Region': region_str\n                }\n            }\n        },\n        'DestConfig': {\n            'EndpointType': 'Volc_Redis',\n            'VolcRedisSettings': {\n                'DBInstanceId': 'redis-instanceID',\n                'Username': 'default',\n                'Password': 'redis_password_here',\n                'RegionSettings': {\n                    'Region': region_str\n                }\n            }\n        },\n        'SolutionSettings': {\n            'SolutionType': 'Redis2Redis',\n            'Redis2RedisSettings': {\n                'ObjectMappings': [\n                    {\n                        \"DestObjName\": \"0\",\n                        \"ObjectType\": \"Database\",\n                        \"SrcObjName\": \"0\"\n                    },\n                    {\n                        \"DestObjName\": \"6\",\n                        \"ObjectType\": \"Database\",\n                        \"SrcObjName\": \"6\"\n                    }\n                ],\n                'FullTransmissionSettings': {\n                    'EnableFull': True\n                },\n                'IncrTransmissionSettings': {\n                    'EnableIncr': True\n                },\n                'ErrorBehaviorSettings': {\n                    'MaxRetrySeconds': 7200\n                }\n            }\n        }\n    }\n    resp = dts_service.create_transmission_task(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))\n"
  },
  {
    "path": "volcengine/example/dts/delete_dts_task.py",
    "content": "import json\n\nfrom volcengine.dts.dts_service import DtsService\n\nif __name__ == '__main__':\n    access_key = 'your_ak_here'\n    secret_key = 'your_sk_here'\n    region_str = 'region_str_here'\n    task_id_str = 'task_id_str'\n\n    dts_service = DtsService(region=region_str)\n\n    dts_service.set_ak(access_key)\n    dts_service.set_sk(secret_key)\n\n    params = {}\n    body = {\n        'TaskId': task_id_str\n    }\n\n    resp = dts_service.delete_transmission_task(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))\n"
  },
  {
    "path": "volcengine/example/dts/describe_dts_task_progress.py",
    "content": "import json\n\nfrom volcengine.dts.dts_service import DtsService\n\nif __name__ == '__main__':\n    access_key = 'your_ak_here'\n    secret_key = 'your_sk_here'\n    region_str = 'region_str_here'\n    task_id_str = 'task_id_str'\n\n    dts_service = DtsService(region=region_str)\n\n    dts_service.set_ak(access_key)\n    dts_service.set_sk(secret_key)\n\n    params = {}\n    body = {\n        'TaskId': task_id_str,\n        'ProgressType': 'Full',\n        'PageNumber': 1,\n        'PageSize': 10,\n        'TransferEstimateRowsDesc': True\n    }\n\n    resp = dts_service.describe_transmission_task_progress(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))\n"
  },
  {
    "path": "volcengine/example/dts/describe_dts_tasks.py",
    "content": "import json\n\nfrom volcengine.dts.dts_service import DtsService\n\nif __name__ == '__main__':\n    access_key = 'your_ak_here'\n    secret_key = 'your_sk_here'\n    region_str = 'region_str_here'\n\n    dts_service = DtsService(region=region_str)\n\n    dts_service.set_ak(access_key)\n    dts_service.set_sk(secret_key)\n\n    params = {}\n    body = {\n        'TaskType': 'task_type_str',\n        'PageNumber': 1,\n        'PageSize': 10,\n    }\n\n    resp = dts_service.describe_transmission_tasks(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))\n"
  },
  {
    "path": "volcengine/example/dts/describe_task_info.py",
    "content": "import json\n\nfrom volcengine.dts.dts_service import DtsService\n\nif __name__ == '__main__':\n    access_key = 'your_ak_here'\n    secret_key = 'your_sk_here'\n    region_str = 'region_str_here'\n    task_id_str = 'task_id_str'\n\n    dts_service = DtsService(region=region_str)\n\n    dts_service.set_ak(access_key)\n    dts_service.set_sk(secret_key)\n\n    params = {}\n    body = {\n        'TaskId': task_id_str\n    }\n\n    resp = dts_service.describe_transmission_task_info(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))\n"
  },
  {
    "path": "volcengine/example/dts/get_async_precheck_result.py",
    "content": "import json\n\nfrom volcengine.dts.dts_service import DtsService\n\nif __name__ == '__main__':\n    access_key = 'your_ak_here'\n    secret_key = 'your_sk_here'\n    region_str = 'region_str_here'\n    id_str = 'id_str'  # we get id_str from precheck_async api\n\n    dts_service = DtsService(region=region_str)\n\n    dts_service.set_ak(access_key)\n    dts_service.set_sk(secret_key)\n\n    params = {}\n    body = {\n        'ID': id_str\n    }\n\n    resp = dts_service.get_async_pre_check_result(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))\n"
  },
  {
    "path": "volcengine/example/dts/modify_dts_task.py",
    "content": "import json\n\nfrom volcengine.dts.dts_service import DtsService\n\nif __name__ == '__main__':\n    access_key = 'your_ak_here'\n    secret_key = 'your_sk_here'\n    task_name = 'task_name_str'\n    task_type = 'task_type_here'\n    region_str = 'region_str_here'\n\n    dts_service = DtsService(region=region_str)\n\n    dts_service.set_ak(access_key)\n    dts_service.set_sk(secret_key)\n\n    params = {}\n    body = {\n        'TaskName': task_name,\n        'TaskType': task_type,\n        'ChargeConfig': {\n            'ChargeType': 'PostPaid',\n            'OneStep': True\n        },\n        'SrcConfig': {\n            'EndpointType': 'Public_Redis',\n            'PublicRedisSettings': {\n                'Host': 'IP_str_here',\n                'Port': 6379,\n                'Username': 'default',\n                'Password': 'redis_password_here',\n                'RegionSettings': {\n                    'Region': region_str\n                }\n            }\n        },\n        'DestConfig': {\n            'EndpointType': 'Volc_Redis',\n            'VolcRedisSettings': {\n                'DBInstanceId': 'redis-instanceID',\n                'Username': 'default',\n                'Password': 'redis_password_here',\n                'RegionSettings': {\n                    'Region': region_str\n                }\n            }\n        },\n        'SolutionSettings': {\n            'SolutionType': 'Redis2Redis',\n            'Redis2RedisSettings': {\n                'ObjectMappings': [\n                    {\n                        \"DestObjName\": \"0\",\n                        \"ObjectType\": \"Database\",\n                        \"SrcObjName\": \"0\"\n                    },\n                    {\n                        \"DestObjName\": \"6\",\n                        \"ObjectType\": \"Database\",\n                        \"SrcObjName\": \"6\"\n                    }\n                ],\n                'FullTransmissionSettings': {\n                    'EnableFull': True\n                },\n                'IncrTransmissionSettings': {\n                    'EnableIncr': True\n                },\n                'ErrorBehaviorSettings': {\n                    'MaxRetrySeconds': 7200\n                }\n            }\n        }\n    }\n    resp = dts_service.modify_transmission_task(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))\n"
  },
  {
    "path": "volcengine/example/dts/precheck_async.py",
    "content": "import json\n\nfrom volcengine.dts.dts_service import DtsService\n\nif __name__ == '__main__':\n    access_key = 'your_ak_here'\n    secret_key = 'your_sk_here'\n    region_str = 'region_str_here'\n    task_id_str = 'task_id_str'\n\n    dts_service = DtsService(region=region_str)\n\n    dts_service.set_ak(access_key)\n    dts_service.set_sk(secret_key)\n\n    params = {}\n    body = {\n        'TaskId': task_id_str\n    }\n\n    resp = dts_service.pre_check_async(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))\n"
  },
  {
    "path": "volcengine/example/dts/resume_dts_task.py",
    "content": "import json\n\nfrom volcengine.dts.dts_service import DtsService\n\nif __name__ == '__main__':\n    access_key = 'your_ak_here'\n    secret_key = 'your_sk_here'\n    region_str = 'region_str_here'\n    task_id_str = 'task_id_str'\n\n    dts_service = DtsService(region=region_str)\n\n    dts_service.set_ak(access_key)\n    dts_service.set_sk(secret_key)\n\n    params = {}\n    body = {\n        'TaskId': task_id_str\n    }\n\n    resp = dts_service.resume_transmission_task(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))\n"
  },
  {
    "path": "volcengine/example/dts/retry_dts_task.py",
    "content": "import json\n\nfrom volcengine.dts.dts_service import DtsService\n\nif __name__ == '__main__':\n    access_key = 'your_ak_here'\n    secret_key = 'your_sk_here'\n    region_str = 'region_str_here'\n    task_id_str = 'task_id_str'\n\n    dts_service = DtsService(region=region_str)\n\n    dts_service.set_ak(access_key)\n    dts_service.set_sk(secret_key)\n\n    params = {}\n    body = {\n        'TaskId': task_id_str\n    }\n\n    resp = dts_service.retry_transmission_task(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))\n"
  },
  {
    "path": "volcengine/example/dts/start_dts_task.py",
    "content": "import json\n\nfrom volcengine.dts.dts_service import DtsService\n\nif __name__ == '__main__':\n    access_key = 'your_ak_here'\n    secret_key = 'your_sk_here'\n    region_str = 'region_str_here'\n    task_id_str = 'task_id_str'\n\n    dts_service = DtsService(region=region_str)\n\n    dts_service.set_ak(access_key)\n    dts_service.set_sk(secret_key)\n\n    params = {}\n    body = {\n        'TaskId': task_id_str\n    }\n\n    resp = dts_service.start_transmission_task(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))\n"
  },
  {
    "path": "volcengine/example/dts/stop_dts_task.py",
    "content": "import json\n\nfrom volcengine.dts.dts_service import DtsService\n\nif __name__ == '__main__':\n    access_key = 'your_ak_here'\n    secret_key = 'your_sk_here'\n    region_str = 'region_str_here'\n    task_id_str = 'task_id_str'\n\n    dts_service = DtsService(region=region_str)\n\n    dts_service.set_ak(access_key)\n    dts_service.set_sk(secret_key)\n\n    params = {}\n    body = {\n        'TaskId': task_id_str\n    }\n\n    resp = dts_service.stop_transmission_task(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))\n"
  },
  {
    "path": "volcengine/example/dts/subscription/avro/deserializer.py",
    "content": "from io import BytesIO\n\nimport avro.schema\nfrom avro.io import DatumReader, BinaryDecoder\n\nRecordSchema: str = \"com.bytedance.dts.subscribe.avro.Record\"\n\n\nclass RecordDeserializer:\n    # schema_file: path of schema file\n    def __init__(self, schema_file: str):\n        s = avro.schema.parse(open(schema_file, \"rb\").read())\n        self.all_schema = s\n        for schema in self.all_schema.schemas:\n            if isinstance(schema, avro.schema.RecordSchema) and schema.fullname == RecordSchema:\n                self.record_schema = schema\n                break\n\n    def deserialize(self, data: bytes) -> dict:\n        bio = BytesIO(initial_bytes=data)\n        decoder = BinaryDecoder(bio)\n        res = DatumReader(writers_schema=self.record_schema).read(decoder)\n        return res\n"
  },
  {
    "path": "volcengine/example/dts/subscription/avro/dts_kafka_consumer_demo.py",
    "content": "from kafka import KafkaConsumer\n\nimport deserializer\nimport record_printer\n\ndeserializer = deserializer.RecordDeserializer(\"record.avsc\")\n\nif __name__ == '__main__':\n    brokers = \"your brokers address\"\n    topic = \"your topic\"\n    group = \"your group\"\n    username = \"your username\"\n    password = \"your password\"\n\n    # create consumer\n    consumer = KafkaConsumer(\n        topic,\n        group_id=group,\n        # init consume offset\n        auto_offset_reset='latest',\n        enable_auto_commit=True,\n        # set up SASL authentication\n        security_protocol=\"SASL_PLAINTEXT\",\n        sasl_mechanism=\"PLAIN\",\n        sasl_plain_username=username,\n        sasl_plain_password=password,\n        api_version=(2, 2, 2),\n        bootstrap_servers=brokers.split(','))\n\n    for message in consumer:\n        record = deserializer.deserialize(message.value)\n        record_printer.print_record(record)\n"
  },
  {
    "path": "volcengine/example/dts/subscription/avro/record.avsc",
    "content": "[\n  {\n    \"namespace\": \"com.bytedance.dts.subscribe.avro\",\n    \"name\": \"Field\",\n    \"type\": \"record\",\n    \"fields\": [\n      {\n        \"name\": \"name\",\n        \"type\": \"string\"\n      },\n      {\n        \"name\": \"dataTypeNumber\",\n        \"type\": \"int\"\n      }\n    ]\n  },\n  {\n    \"namespace\": \"com.bytedance.dts.subscribe.avro\",\n    \"type\": \"record\",\n    \"name\": \"Integer\",\n    \"fields\": [\n      {\n        \"name\": \"precision\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"value\",\n        \"type\": \"string\"\n      }\n    ]\n  },\n  {\n    \"namespace\": \"com.bytedance.dts.subscribe.avro\",\n    \"type\": \"record\",\n    \"name\": \"Character\",\n    \"fields\": [\n      {\n        \"name\": \"charset\",\n        \"type\": \"string\"\n      },\n      {\n        \"name\": \"value\",\n        \"type\": \"bytes\"\n      }\n    ]\n  },\n  {\n    \"namespace\": \"com.bytedance.dts.subscribe.avro\",\n    \"type\": \"record\",\n    \"name\": \"Float\",\n    \"fields\": [\n      {\n        \"name\": \"value\",\n        \"type\": \"double\"\n      },\n      {\n        \"name\": \"precision\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"scale\",\n        \"type\": \"int\"\n      }\n    ]\n  },\n  {\n    \"namespace\": \"com.bytedance.dts.subscribe.avro\",\n    \"type\": \"record\",\n    \"name\": \"Decimal\",\n    \"fields\": [\n      {\n        \"name\": \"value\",\n        \"type\": \"string\"\n      },\n      {\n        \"name\": \"precision\",\n        \"type\": \"int\"\n      },\n      {\n        \"name\": \"scale\",\n        \"type\": \"int\"\n      }\n    ]\n  },\n  {\n    \"namespace\": \"com.bytedance.dts.subscribe.avro\",\n    \"type\": \"record\",\n    \"name\": \"Timestamp\",\n    \"fields\": [\n      {\n        \"name\": \"timestamp\",\n        \"type\": \"long\"\n      },\n      {\n        \"name\": \"millis\",\n        \"type\": \"int\"\n      }\n    ]\n  },\n  {\n    \"namespace\": \"com.bytedance.dts.subscribe.avro\",\n    \"type\": \"record\",\n    \"name\": \"DateTime\",\n    \"fields\": [\n      {\n        \"name\": \"year\",\n        \"default\": null,\n        \"type\": [\n          \"null\",\n          \"int\"\n        ]\n      },\n      {\n        \"name\": \"month\",\n        \"default\": null,\n        \"type\": [\n          \"null\",\n          \"int\"\n        ]\n      },\n      {\n        \"name\": \"day\",\n        \"default\": null,\n        \"type\": [\n          \"null\",\n          \"int\"\n        ]\n      },\n      {\n        \"name\": \"hour\",\n        \"default\": null,\n        \"type\": [\n          \"null\",\n          \"int\"\n        ]\n      },\n      {\n        \"name\": \"minute\",\n        \"default\": null,\n        \"type\": [\n          \"null\",\n          \"int\"\n        ]\n      },\n      {\n        \"name\": \"second\",\n        \"default\": null,\n        \"type\": [\n          \"null\",\n          \"int\"\n        ]\n      },\n      {\n        \"name\": \"millis\",\n        \"default\": null,\n        \"type\": [\n          \"null\",\n          \"int\"\n        ]\n      }\n    ]\n  },\n  {\n    \"namespace\": \"com.bytedance.dts.subscribe.avro\",\n    \"type\": \"record\",\n    \"name\": \"TimestampWithTimeZone\",\n    \"fields\": [\n      {\n        \"name\": \"value\",\n        \"type\": \"DateTime\"\n      },\n      {\n        \"name\": \"timezone\",\n        \"type\": \"string\"\n      }\n    ]\n  },\n  {\n    \"namespace\": \"com.bytedance.dts.subscribe.avro\",\n    \"type\": \"record\",\n    \"name\": \"BinaryGeometry\",\n    \"fields\": [\n      {\n        \"name\": \"type\",\n        \"type\": \"string\"\n      },\n      {\n        \"name\": \"value\",\n        \"type\": \"bytes\"\n      }\n    ]\n  },\n  {\n    \"namespace\": \"com.bytedance.dts.subscribe.avro\",\n    \"type\": \"record\",\n    \"name\": \"TextGeometry\",\n    \"fields\": [\n      {\n        \"name\": \"type\",\n        \"type\": \"string\"\n      },\n      {\n        \"name\": \"value\",\n        \"type\": \"string\"\n      }\n    ]\n  },\n  {\n    \"namespace\": \"com.bytedance.dts.subscribe.avro\",\n    \"type\": \"record\",\n    \"name\": \"BinaryObject\",\n    \"fields\": [\n      {\n        \"name\": \"type\",\n        \"type\": \"string\"\n      },\n      {\n        \"name\": \"value\",\n        \"type\": \"bytes\"\n      }\n    ]\n  },\n  {\n    \"namespace\": \"com.bytedance.dts.subscribe.avro\",\n    \"type\": \"record\",\n    \"name\": \"TextObject\",\n    \"fields\": [\n      {\n        \"name\": \"type\",\n        \"type\": \"string\"\n      },\n      {\n        \"name\": \"value\",\n        \"type\": \"string\"\n      }\n    ]\n  },\n  {\n    \"namespace\": \"com.bytedance.dts.subscribe.avro\",\n    \"type\": \"enum\",\n    \"name\": \"EmptyObject\",\n    \"symbols\" : [\"NULL\", \"NONE\"]\n  },\n  {\n    \"namespace\": \"com.bytedance.dts.subscribe.avro\",\n    \"type\": \"record\",\n    \"name\": \"Record\",\n    \"fields\": [\n      {\n        \"name\": \"version\",\n        \"type\": \"int\",\n        \"doc\": \"version infomation\"\n      },\n      {\n        \"name\": \"id\",\n        \"type\": \"long\",\n        \"doc\": \"unique id of this record in the whole stream\"\n      },\n      {\n        \"name\": \"sourceTimestamp\",\n        \"type\": \"long\",\n        \"doc\": \"record log timestamp\"\n      },\n      {\n        \"name\": \"sourcePosition\",\n        \"type\": \"string\",\n        \"doc\": \"record source location information\"\n      },\n      {\n        \"name\": \"safeSourcePosition\",\n        \"type\": \"string\",\n        \"default\": \"\",\n        \"doc\": \"safe record source location information, use to recovery.\"\n      },\n      {\n        \"name\": \"sourceTxid\",\n        \"type\": \"string\",\n        \"default\": \"\",\n        \"doc\": \"record transation id\"\n      },\n      {\n        \"name\": \"source\",\n        \"doc\": \"source dataource\",\n        \"type\": {\n          \"namespace\": \"com.bytedance.dts.subscribe.avro\",\n          \"name\": \"Source\",\n          \"type\": \"record\",\n          \"fields\": [\n            {\n              \"name\": \"sourceType\",\n              \"type\": {\n                \"namespace\": \"com.bytedance.dts.subscribe.avro\",\n                \"name\": \"SourceType\",\n                \"type\": \"enum\",\n                \"symbols\": [\n                  \"MySQL\",\n                  \"Oracle\",\n                  \"SQLServer\",\n                  \"PostgreSQL\",\n                  \"MongoDB\",\n                  \"Redis\",\n                  \"DB2\",\n                  \"PPAS\",\n                  \"DRDS\",\n                  \"HBASE\",\n                  \"HDFS\",\n                  \"FILE\",\n                  \"OTHER\"\n                ]\n              }\n            },\n            {\n              \"name\": \"version\",\n              \"type\": \"string\",\n              \"doc\": \"source datasource version information\"\n            }\n          ]\n        }\n      },\n      {\n        \"namespace\": \"com.bytedance.dts.subscribe.avro\",\n        \"name\": \"operation\",\n        \"type\": {\n          \"name\": \"Operation\",\n          \"type\": \"enum\",\n          \"symbols\": [\n            \"INSERT\",\n            \"UPDATE\",\n            \"DELETE\",\n            \"DDL\",\n            \"BEGIN\",\n            \"COMMIT\",\n            \"ROLLBACK\",\n            \"ABORT\",\n            \"HEARTBEAT\",\n            \"CHECKPOINT\",\n            \"COMMAND\",\n            \"FILL\",\n            \"FINISH\",\n            \"CONTROL\",\n            \"RDB\",\n            \"NOOP\",\n            \"INIT\"\n          ]\n        }\n      },\n      {\n        \"name\": \"objectName\",\n        \"default\": null,\n        \"type\": [\n          \"null\",\n          \"string\"\n        ]\n      },\n      {\n        \"name\": \"processTimestamps\",\n        \"default\": null,\n        \"type\": [\n          \"null\",\n          {\n            \"type\": \"array\",\n            \"items\": \"long\"\n          }\n        ],\n        \"doc\": \"time when this record is processed along the stream dataflow\"\n      },\n      {\n        \"name\": \"tags\",\n        \"default\": {},\n        \"type\": {\n          \"type\": \"map\",\n          \"values\": \"string\"\n        },\n        \"doc\": \"tags to identify properties of this record\"\n      },\n      {\n        \"name\": \"fields\",\n        \"default\": null,\n        \"type\": [\n          \"null\",\n          \"string\",\n          {\n            \"type\": \"array\",\n            \"items\": \"com.bytedance.dts.subscribe.avro.Field\"\n          }\n        ]\n      },\n      {\n        \"name\": \"beforeImages\",\n        \"default\": null,\n        \"type\": [\n          \"null\",\n          \"string\",\n          {\n            \"type\": \"array\",\n            \"items\": [\n              \"null\",\n              \"com.bytedance.dts.subscribe.avro.Integer\",\n              \"com.bytedance.dts.subscribe.avro.Character\",\n              \"com.bytedance.dts.subscribe.avro.Decimal\",\n              \"com.bytedance.dts.subscribe.avro.Float\",\n              \"com.bytedance.dts.subscribe.avro.Timestamp\",\n              \"com.bytedance.dts.subscribe.avro.DateTime\",\n              \"com.bytedance.dts.subscribe.avro.TimestampWithTimeZone\",\n              \"com.bytedance.dts.subscribe.avro.BinaryGeometry\",\n              \"com.bytedance.dts.subscribe.avro.TextGeometry\",\n              \"com.bytedance.dts.subscribe.avro.BinaryObject\",\n              \"com.bytedance.dts.subscribe.avro.TextObject\",\n              \"com.bytedance.dts.subscribe.avro.EmptyObject\"\n            ]\n          }\n        ]\n      },\n      {\n        \"name\": \"afterImages\",\n        \"default\": null,\n        \"type\": [\n          \"null\",\n          \"string\",\n          {\n            \"type\": \"array\",\n            \"items\": [\n              \"null\",\n              \"com.bytedance.dts.subscribe.avro.Integer\",\n              \"com.bytedance.dts.subscribe.avro.Character\",\n              \"com.bytedance.dts.subscribe.avro.Decimal\",\n              \"com.bytedance.dts.subscribe.avro.Float\",\n              \"com.bytedance.dts.subscribe.avro.Timestamp\",\n              \"com.bytedance.dts.subscribe.avro.DateTime\",\n              \"com.bytedance.dts.subscribe.avro.TimestampWithTimeZone\",\n              \"com.bytedance.dts.subscribe.avro.BinaryGeometry\",\n              \"com.bytedance.dts.subscribe.avro.TextGeometry\",\n              \"com.bytedance.dts.subscribe.avro.BinaryObject\",\n              \"com.bytedance.dts.subscribe.avro.TextObject\",\n              \"com.bytedance.dts.subscribe.avro.EmptyObject\"\n            ]\n          }\n        ]\n      },\n      {\n        \"name\": \"bornTimestamp\",\n        \"default\": 0,\n        \"type\": \"long\",\n        \"doc\": \"the timestamp in unit of millisecond that record is born in source\"\n      }\n    ]\n  }\n]"
  },
  {
    "path": "volcengine/example/dts/subscription/avro/record_printer.py",
    "content": "MYSQL_TYPE_TIMESTAMP = 7\nMYSQL_TYPE_DATE = 10\nMYSQL_TYPE_TIME = 11\nMYSQL_TYPE_DATETIME = 12\nMYSQL_TYPE_YEAR = 13\nMYSQL_TYPE_DATE_NEW = 14\n\n\ndef print_record(record):\n    operation = record[\"operation\"]\n    print(\"Operation[{}] ObjectName[{}] SourceTimestamp[{}] ID[{}]\".format(record[\"operation\"], record[\"objectName\"],\n                                                                           record[\"sourceTimestamp\"], record[\"id\"]))\n    if operation == \"DDL\":\n        print(\"DDL[{}]\".format(record[\"afterImages\"]))\n    elif operation == \"INSERT\":\n        for i in range(len(record[\"afterImages\"])):\n            print(\"Field[{}] After[{}]\".format(record[\"fields\"][i][\"name\"],\n                                               getDataValue(record[\"fields\"][i][\"dataTypeNumber\"],\n                                                            record[\"afterImages\"][i])))\n    elif operation == \"DELETE\":\n        for i in range(len(record[\"afterImages\"])):\n            print(\"Field[{}] BEFORE[{}]\".format(record[\"fields\"][i][\"name\"],\n                                                getDataValue(record[\"fields\"][i][\"dataTypeNumber\"],\n                                                             record[\"beforeImages\"][i])))\n    elif operation == \"UPDATE\":\n        for i in range(len(record[\"afterImages\"])):\n            print(\"Field[{}] BEFORE[{}] After[{}]\".format(record[\"fields\"][i][\"name\"],\n                                                          getDataValue(record[\"fields\"][i][\"dataTypeNumber\"],\n                                                                       record[\"beforeImages\"][i]),\n                                                          getDataValue(record[\"fields\"][i][\"dataTypeNumber\"],\n                                                                       record[\"afterImages\"][i])))\n    else:\n        print(record)\n\n\ndef getDataValue(dataType, data) -> str:\n    if dataType == MYSQL_TYPE_TIMESTAMP:\n        return \"%d.%d\" % (data[\"timestamp\"], data[\"millis\"])\n    elif dataType in (MYSQL_TYPE_DATE, MYSQL_TYPE_DATE_NEW):\n        return \"%d-%d-%d\" % (data[\"year\"], data[\"month\"], data[\"day\"])\n    elif dataType == MYSQL_TYPE_TIME:\n        return \"%02d:%02d:%02d\" % (data[\"hour\"], data[\"minute\"], data[\"second\"])\n    elif dataType == MYSQL_TYPE_DATETIME:\n        return \"%04d-%02d-%02d %02d:%02d:%02d\" % (data[\"year\"], data[\"month\"], data[\"day\"],\n                                            data[\"hour\"], data[\"minute\"], data[\"second\"])\n    elif dataType == MYSQL_TYPE_YEAR:\n        return data[\"year\"]\n    else:\n        return data[\"value\"]\n"
  },
  {
    "path": "volcengine/example/dts/subscription/canal/canal.proto",
    "content": "syntax = \"proto3\";\noption go_package=\"./;canal\";\noption optimize_for = SPEED;\npackage canal;\n\n/****************************************************************\n * message model\n *如果要在Enum中新增类型，确保以前的类型的下标值不变.\n ****************************************************************/\nmessage Entry {\n    /**协议头部信息**/\n    Header\t\t\t\t\t\theader \t\t\t\t= 1;\n    ///**打散后的事件类型**/ [default = ROWDATA]\n    oneof entryType_present{\n        EntryType\t\t\t\t\tentryType\t\t\t= 2;\n    }\n\n    /**传输的二进制数组**/\n    bytes\t\t\t\t\t\tstoreValue\t\t\t= 3;\n}\n\n/**message Header**/\nmessage Header {\n    /**协议的版本号**/  //[default = 1]\n    oneof version_present {\n        int32 \t\t\t\t\tversion\t\t\t\t= 1;\n    }\n\n\n    /**binlog/redolog 文件名**/\n    string\t\t\t\t\tlogfileName\t\t\t= 2;\n\n    /**binlog/redolog 文件的偏移位置**/\n    int64 \t\t\t\t\tlogfileOffset\t\t= 3;\n\n    /**服务端serverId**/\n    int64\t\t\t\tserverId         \t= 4;\n\n    /** 变更数据的编码 **/\n    string\t\t\t\t\tserverenCode\t\t= 5;\n\n    /**变更数据的执行时间 **/\n    int64\t\t\t\t\texecuteTime\t\t\t= 6;\n\n    /** 变更数据的来源**/ //[default = MYSQL]\n    oneof sourceType_present {\n        Type\t\t\t\t\tsourceType\t\t\t= 7;\n    }\n\n\n    /** 变更数据的schemaname**/\n    string\t\t\t\t\tschemaName\t\t\t= 8;\n\n    /**变更数据的tablename**/\n    string\t\t\t\t\ttableName\t\t\t= 9;\n\n    /**每个event的长度**/\n    int64\t\t\t\t\teventLength         = 10;\n\n    /**数据变更类型**/  // [default = UPDATE]\n    oneof eventType_present {\n        EventType \t\t\t\teventType\t\t\t= 11;\n    }\n\n\n    /**预留扩展**/\n    repeated Pair\t\t\t\t\tprops\t\t\t\t= 12;\n\n    /**当前事务的gitd**/\n    string                 gtid                = 13;\n}\n\n/**每个字段的数据结构**/\nmessage Column {\n    /**字段下标**/\n    int32\t\tindex\t\t\t= \t\t1;\n\n    /**字段java中类型**/\n    int32 \t\tsqlType\t\t\t= \t\t2;\n\n    /**字段名称(忽略大小写)，在mysql中是没有的**/\n    string\t\tname\t\t\t=\t\t3;\n\n    /**是否是主键**/\n    bool \t\tisKey\t\t\t= \t\t4;\n\n    /**如果EventType=UPDATE,用于标识这个字段值是否有修改**/\n    bool\t\tupdated\t\t\t= \t\t5;\n\n    /** 标识是否为空  **/ //[default = false]\n    oneof isNull_present {\n        bool\t\tisNull\t\t\t= \t\t6;\n    }\n\n\n    /**预留扩展**/\n    repeated Pair\t\tprops\t\t\t=\t\t7;\n\n    /** 字段值,timestamp,Datetime是一个时间格式的文本 **/\n    string\t\tvalue\t\t\t= \t\t8;\n\n    /** 对应数据对象原始长度 **/\n    int32\t\tlength\t\t\t= \t\t9;\n\n    /**字段mysql类型**/\n    string\t\tmysqlType\t\t= \t\t10;\n}\n\nmessage RowData {\n\n    /** 字段信息，增量数据(修改前,删除前) **/\n    repeated Column\t\t\tbeforeColumns  \t= \t\t1;\n\n    /** 字段信息，增量数据(修改后,新增后)  **/\n    repeated Column\t\t\tafterColumns\t= \t\t2;\n\n    /**预留扩展**/\n    repeated Pair\t\t\tprops\t\t\t=\t\t3;\n}\n\n/**message row 每行变更数据的数据结构**/\nmessage RowChange {\n\n    /**tableId,由数据库产生**/\n    int64\t \t\ttableId\t\t\t=\t\t1;\n\n\n    /**数据变更类型**/ //[default = UPDATE]\n    oneof eventType_present {\n        EventType \t\teventType\t\t= \t\t2;\n    }\n\n\n    /** 标识是否是ddl语句  **/ // [default = false]\n    oneof isDdl_present {\n        bool\t\t\tisDdl\t\t\t= \t\t10;\n    }\n\n\n    /** ddl/query的sql语句  **/\n    string\t\t\tsql \t\t\t= \t\t11;\n\n    /** 一次数据库变更可能存在多行  **/\n    repeated RowData\t\trowDatas\t\t= \t\t12;\n\n    /**预留扩展**/\n    repeated Pair\t\t\tprops\t\t\t=\t\t13;\n\n    /** ddl/query的schemaName，会存在跨库ddl，需要保留执行ddl的当前schemaName  **/\n    string\t\t\tddlSchemaName \t= \t\t14;\n}\n\n/**开始事务的一些信息**/\nmessage TransactionBegin{\n\n    /**已废弃，请使用header里的executeTime**/\n    int64\t\t\texecuteTime\t\t=\t\t1;\n\n    /**已废弃，Begin里不提供事务id**/\n    string\t\t\ttransactionId\t=\t\t2;\n\n    /**预留扩展**/\n    repeated Pair\t\t\tprops\t\t\t=\t\t3;\n\n    /**执行的thread Id**/\n    int64\t\t\tthreadId\t\t=\t\t4;\n}\n\n/**结束事务的一些信息**/\nmessage TransactionEnd{\n\n    /**已废弃，请使用header里的executeTime**/\n    int64\t\t\texecuteTime\t\t=\t\t1;\n\n    /**事务号**/\n    string\t\t\ttransactionId\t=\t\t2;\n\n    /**预留扩展**/\n    repeated Pair\t\t\tprops\t\t\t=\t\t3;\n}\n\n/**预留扩展**/\nmessage Pair{\n    string \t\tkey\t\t\t\t= \t\t\t1;\n    string \t\tvalue\t\t\t= \t\t\t2;\n}\n\n/**打散后的事件类型，主要用于标识事务的开始，变更数据，结束**/\nenum EntryType{\n    ENTRYTYPECOMPATIBLEPROTO2 = 0;\n    TRANSACTIONBEGIN \t\t=\t\t1;\n    ROWDATA\t\t\t\t\t=\t\t2;\n    TRANSACTIONEND\t\t\t=\t\t3;\n    /** 心跳类型，内部使用，外部暂不可见，可忽略 **/\n    HEARTBEAT\t\t\t\t=\t\t4;\n    GTIDLOG                 =       5;\n}\n\n/** 事件类型 **/\nenum EventType {\n    EVENTTYPECOMPATIBLEPROTO2 = 0;\n    INSERT \t\t= \t\t1;\n    UPDATE \t\t= \t\t2;\n    DELETE \t\t= \t\t3;\n    CREATE\t\t= \t\t4;\n    ALTER\t\t= \t\t5;\n    ERASE\t\t= \t\t6;\n    QUERY\t\t=\t\t7;\n    TRUNCATE\t=\t\t8;\n    RENAME \t\t= \t\t9;\n    /**CREATE INDEX**/\n    CINDEX\t\t= \t\t10;\n    DINDEX \t\t= \t\t11;\n    GTID        =       12;\n    /** XA **/\n    XACOMMIT    =       13;\n    XAROLLBACK  =\t\t14;\n    /** MASTER HEARTBEAT **/\n    MHEARTBEAT  =       15;\n}\n\n/**数据库类型**/\nenum Type {\n    TYPECOMPATIBLEPROTO2 = 0;\n    ORACLE\t\t= \t\t1;\n    MYSQL\t\t= \t\t2;\n    PGSQL\t\t= \t\t3;\n}\n\n"
  },
  {
    "path": "volcengine/example/dts/subscription/canal/canal_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: canal.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf.internal import enum_type_wrapper\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\x0b\\x63\\x61nal.proto\\x12\\x05\\x63\\x61nal\\\"v\\n\\x05\\x45ntry\\x12\\x1d\\n\\x06header\\x18\\x01 \\x01(\\x0b\\x32\\r.canal.Header\\x12%\\n\\tentryType\\x18\\x02 \\x01(\\x0e\\x32\\x10.canal.EntryTypeH\\x00\\x12\\x12\\n\\nstoreValue\\x18\\x03 \\x01(\\x0c\\x42\\x13\\n\\x11\\x65ntryType_present\\\"\\xf2\\x02\\n\\x06Header\\x12\\x11\\n\\x07version\\x18\\x01 \\x01(\\x05H\\x00\\x12\\x13\\n\\x0blogfileName\\x18\\x02 \\x01(\\t\\x12\\x15\\n\\rlogfileOffset\\x18\\x03 \\x01(\\x03\\x12\\x10\\n\\x08serverId\\x18\\x04 \\x01(\\x03\\x12\\x14\\n\\x0cserverenCode\\x18\\x05 \\x01(\\t\\x12\\x13\\n\\x0b\\x65xecuteTime\\x18\\x06 \\x01(\\x03\\x12!\\n\\nsourceType\\x18\\x07 \\x01(\\x0e\\x32\\x0b.canal.TypeH\\x01\\x12\\x12\\n\\nschemaName\\x18\\x08 \\x01(\\t\\x12\\x11\\n\\ttableName\\x18\\t \\x01(\\t\\x12\\x13\\n\\x0b\\x65ventLength\\x18\\n \\x01(\\x03\\x12%\\n\\teventType\\x18\\x0b \\x01(\\x0e\\x32\\x10.canal.EventTypeH\\x02\\x12\\x1a\\n\\x05props\\x18\\x0c \\x03(\\x0b\\x32\\x0b.canal.Pair\\x12\\x0c\\n\\x04gtid\\x18\\r \\x01(\\tB\\x11\\n\\x0fversion_presentB\\x14\\n\\x12sourceType_presentB\\x13\\n\\x11\\x65ventType_present\\\"\\xc8\\x01\\n\\x06\\x43olumn\\x12\\r\\n\\x05index\\x18\\x01 \\x01(\\x05\\x12\\x0f\\n\\x07sqlType\\x18\\x02 \\x01(\\x05\\x12\\x0c\\n\\x04name\\x18\\x03 \\x01(\\t\\x12\\r\\n\\x05isKey\\x18\\x04 \\x01(\\x08\\x12\\x0f\\n\\x07updated\\x18\\x05 \\x01(\\x08\\x12\\x10\\n\\x06isNull\\x18\\x06 \\x01(\\x08H\\x00\\x12\\x1a\\n\\x05props\\x18\\x07 \\x03(\\x0b\\x32\\x0b.canal.Pair\\x12\\r\\n\\x05value\\x18\\x08 \\x01(\\t\\x12\\x0e\\n\\x06length\\x18\\t \\x01(\\x05\\x12\\x11\\n\\tmysqlType\\x18\\n \\x01(\\tB\\x10\\n\\x0eisNull_present\\\"p\\n\\x07RowData\\x12$\\n\\rbeforeColumns\\x18\\x01 \\x03(\\x0b\\x32\\r.canal.Column\\x12#\\n\\x0c\\x61\\x66terColumns\\x18\\x02 \\x03(\\x0b\\x32\\r.canal.Column\\x12\\x1a\\n\\x05props\\x18\\x03 \\x03(\\x0b\\x32\\x0b.canal.Pair\\\"\\xdc\\x01\\n\\tRowChange\\x12\\x0f\\n\\x07tableId\\x18\\x01 \\x01(\\x03\\x12%\\n\\teventType\\x18\\x02 \\x01(\\x0e\\x32\\x10.canal.EventTypeH\\x00\\x12\\x0f\\n\\x05isDdl\\x18\\n \\x01(\\x08H\\x01\\x12\\x0b\\n\\x03sql\\x18\\x0b \\x01(\\t\\x12 \\n\\x08rowDatas\\x18\\x0c \\x03(\\x0b\\x32\\x0e.canal.RowData\\x12\\x1a\\n\\x05props\\x18\\r \\x03(\\x0b\\x32\\x0b.canal.Pair\\x12\\x15\\n\\rddlSchemaName\\x18\\x0e \\x01(\\tB\\x13\\n\\x11\\x65ventType_presentB\\x0f\\n\\risDdl_present\\\"l\\n\\x10TransactionBegin\\x12\\x13\\n\\x0b\\x65xecuteTime\\x18\\x01 \\x01(\\x03\\x12\\x15\\n\\rtransactionId\\x18\\x02 \\x01(\\t\\x12\\x1a\\n\\x05props\\x18\\x03 \\x03(\\x0b\\x32\\x0b.canal.Pair\\x12\\x10\\n\\x08threadId\\x18\\x04 \\x01(\\x03\\\"X\\n\\x0eTransactionEnd\\x12\\x13\\n\\x0b\\x65xecuteTime\\x18\\x01 \\x01(\\x03\\x12\\x15\\n\\rtransactionId\\x18\\x02 \\x01(\\t\\x12\\x1a\\n\\x05props\\x18\\x03 \\x03(\\x0b\\x32\\x0b.canal.Pair\\\"\\\"\\n\\x04Pair\\x12\\x0b\\n\\x03key\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05value\\x18\\x02 \\x01(\\t*}\\n\\tEntryType\\x12\\x1d\\n\\x19\\x45NTRYTYPECOMPATIBLEPROTO2\\x10\\x00\\x12\\x14\\n\\x10TRANSACTIONBEGIN\\x10\\x01\\x12\\x0b\\n\\x07ROWDATA\\x10\\x02\\x12\\x12\\n\\x0eTRANSACTIONEND\\x10\\x03\\x12\\r\\n\\tHEARTBEAT\\x10\\x04\\x12\\x0b\\n\\x07GTIDLOG\\x10\\x05*\\xe5\\x01\\n\\tEventType\\x12\\x1d\\n\\x19\\x45VENTTYPECOMPATIBLEPROTO2\\x10\\x00\\x12\\n\\n\\x06INSERT\\x10\\x01\\x12\\n\\n\\x06UPDATE\\x10\\x02\\x12\\n\\n\\x06\\x44\\x45LETE\\x10\\x03\\x12\\n\\n\\x06\\x43REATE\\x10\\x04\\x12\\t\\n\\x05\\x41LTER\\x10\\x05\\x12\\t\\n\\x05\\x45RASE\\x10\\x06\\x12\\t\\n\\x05QUERY\\x10\\x07\\x12\\x0c\\n\\x08TRUNCATE\\x10\\x08\\x12\\n\\n\\x06RENAME\\x10\\t\\x12\\n\\n\\x06\\x43INDEX\\x10\\n\\x12\\n\\n\\x06\\x44INDEX\\x10\\x0b\\x12\\x08\\n\\x04GTID\\x10\\x0c\\x12\\x0c\\n\\x08XACOMMIT\\x10\\r\\x12\\x0e\\n\\nXAROLLBACK\\x10\\x0e\\x12\\x0e\\n\\nMHEARTBEAT\\x10\\x0f*B\\n\\x04Type\\x12\\x18\\n\\x14TYPECOMPATIBLEPROTO2\\x10\\x00\\x12\\n\\n\\x06ORACLE\\x10\\x01\\x12\\t\\n\\x05MYSQL\\x10\\x02\\x12\\t\\n\\x05PGSQL\\x10\\x03\\x42\\x0cH\\x01Z\\x08./;canalb\\x06proto3')\n\n_ENTRYTYPE = DESCRIPTOR.enum_types_by_name['EntryType']\nEntryType = enum_type_wrapper.EnumTypeWrapper(_ENTRYTYPE)\n_EVENTTYPE = DESCRIPTOR.enum_types_by_name['EventType']\nEventType = enum_type_wrapper.EnumTypeWrapper(_EVENTTYPE)\n_TYPE = DESCRIPTOR.enum_types_by_name['Type']\nType = enum_type_wrapper.EnumTypeWrapper(_TYPE)\nENTRYTYPECOMPATIBLEPROTO2 = 0\nTRANSACTIONBEGIN = 1\nROWDATA = 2\nTRANSACTIONEND = 3\nHEARTBEAT = 4\nGTIDLOG = 5\nEVENTTYPECOMPATIBLEPROTO2 = 0\nINSERT = 1\nUPDATE = 2\nDELETE = 3\nCREATE = 4\nALTER = 5\nERASE = 6\nQUERY = 7\nTRUNCATE = 8\nRENAME = 9\nCINDEX = 10\nDINDEX = 11\nGTID = 12\nXACOMMIT = 13\nXAROLLBACK = 14\nMHEARTBEAT = 15\nTYPECOMPATIBLEPROTO2 = 0\nORACLE = 1\nMYSQL = 2\nPGSQL = 3\n\n\n_ENTRY = DESCRIPTOR.message_types_by_name['Entry']\n_HEADER = DESCRIPTOR.message_types_by_name['Header']\n_COLUMN = DESCRIPTOR.message_types_by_name['Column']\n_ROWDATA = DESCRIPTOR.message_types_by_name['RowData']\n_ROWCHANGE = DESCRIPTOR.message_types_by_name['RowChange']\n_TRANSACTIONBEGIN = DESCRIPTOR.message_types_by_name['TransactionBegin']\n_TRANSACTIONEND = DESCRIPTOR.message_types_by_name['TransactionEnd']\n_PAIR = DESCRIPTOR.message_types_by_name['Pair']\nEntry = _reflection.GeneratedProtocolMessageType('Entry', (_message.Message,), {\n  'DESCRIPTOR' : _ENTRY,\n  '__module__' : 'canal_pb2'\n  # @@protoc_insertion_point(class_scope:canal.Entry)\n  })\n_sym_db.RegisterMessage(Entry)\n\nHeader = _reflection.GeneratedProtocolMessageType('Header', (_message.Message,), {\n  'DESCRIPTOR' : _HEADER,\n  '__module__' : 'canal_pb2'\n  # @@protoc_insertion_point(class_scope:canal.Header)\n  })\n_sym_db.RegisterMessage(Header)\n\nColumn = _reflection.GeneratedProtocolMessageType('Column', (_message.Message,), {\n  'DESCRIPTOR' : _COLUMN,\n  '__module__' : 'canal_pb2'\n  # @@protoc_insertion_point(class_scope:canal.Column)\n  })\n_sym_db.RegisterMessage(Column)\n\nRowData = _reflection.GeneratedProtocolMessageType('RowData', (_message.Message,), {\n  'DESCRIPTOR' : _ROWDATA,\n  '__module__' : 'canal_pb2'\n  # @@protoc_insertion_point(class_scope:canal.RowData)\n  })\n_sym_db.RegisterMessage(RowData)\n\nRowChange = _reflection.GeneratedProtocolMessageType('RowChange', (_message.Message,), {\n  'DESCRIPTOR' : _ROWCHANGE,\n  '__module__' : 'canal_pb2'\n  # @@protoc_insertion_point(class_scope:canal.RowChange)\n  })\n_sym_db.RegisterMessage(RowChange)\n\nTransactionBegin = _reflection.GeneratedProtocolMessageType('TransactionBegin', (_message.Message,), {\n  'DESCRIPTOR' : _TRANSACTIONBEGIN,\n  '__module__' : 'canal_pb2'\n  # @@protoc_insertion_point(class_scope:canal.TransactionBegin)\n  })\n_sym_db.RegisterMessage(TransactionBegin)\n\nTransactionEnd = _reflection.GeneratedProtocolMessageType('TransactionEnd', (_message.Message,), {\n  'DESCRIPTOR' : _TRANSACTIONEND,\n  '__module__' : 'canal_pb2'\n  # @@protoc_insertion_point(class_scope:canal.TransactionEnd)\n  })\n_sym_db.RegisterMessage(TransactionEnd)\n\nPair = _reflection.GeneratedProtocolMessageType('Pair', (_message.Message,), {\n  'DESCRIPTOR' : _PAIR,\n  '__module__' : 'canal_pb2'\n  # @@protoc_insertion_point(class_scope:canal.Pair)\n  })\n_sym_db.RegisterMessage(Pair)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'H\\001Z\\010./;canal'\n  _ENTRYTYPE._serialized_start=1291\n  _ENTRYTYPE._serialized_end=1416\n  _EVENTTYPE._serialized_start=1419\n  _EVENTTYPE._serialized_end=1648\n  _TYPE._serialized_start=1650\n  _TYPE._serialized_end=1716\n  _ENTRY._serialized_start=22\n  _ENTRY._serialized_end=140\n  _HEADER._serialized_start=143\n  _HEADER._serialized_end=513\n  _COLUMN._serialized_start=516\n  _COLUMN._serialized_end=716\n  _ROWDATA._serialized_start=718\n  _ROWDATA._serialized_end=830\n  _ROWCHANGE._serialized_start=833\n  _ROWCHANGE._serialized_end=1053\n  _TRANSACTIONBEGIN._serialized_start=1055\n  _TRANSACTIONBEGIN._serialized_end=1163\n  _TRANSACTIONEND._serialized_start=1165\n  _TRANSACTIONEND._serialized_end=1253\n  _PAIR._serialized_start=1255\n  _PAIR._serialized_end=1289\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/example/dts/subscription/canal/dts_kafka_consumer_demo.py",
    "content": "from kafka import KafkaConsumer\n\nimport canal_pb2\n\nif __name__ == '__main__':\n\tbrokers = \"your brokers address\"\n\ttopic = \"your topic\"\n\tgroup = \"your group\"\n\tusername = \"your username\"\n\tpassword = \"your password\"\n\n\t# create consumer\n\tconsumer = KafkaConsumer(\n\t\ttopic,\n\t\tgroup_id=group,\n\t\t# init consume offset\n\t\tauto_offset_reset='latest',\n\t\tenable_auto_commit=True,\n\t\t# set up SASL authentication\n\t\tsecurity_protocol=\"SASL_PLAINTEXT\",\n\t\tsasl_mechanism=\"PLAIN\",\n\t\tsasl_plain_username=username,\n\t\tsasl_plain_password=password,\n\t\tapi_version=(2, 2, 2),\n\t\tbootstrap_servers=brokers.split(','))\n\n\tfor message in consumer:\n\t\tmsg = canal_pb2.Entry()\n\t\tmsg.ParseFromString(message.value)\n\t\tif msg.entryType == canal_pb2.ROWDATA:\n\t\t\tevent = canal_pb2.RowChange()\n\t\t\tevent.ParseFromString(msg.storeValue)\n\t\t\tprint(event)\n\n"
  },
  {
    "path": "volcengine/example/dts/subscription/volc/dts_kafka_consumer_demo.py",
    "content": "from kafka import KafkaConsumer\n\nimport volc_pb2\n\nif __name__ == '__main__':\n\tbrokers = \"your brokers address\"\n\ttopic = \"your topic\"\n\tgroup = \"your group\"\n\tusername = \"your username\"\n\tpassword = \"your password\"\n\n\t# create consumer\n\tconsumer = KafkaConsumer(\n\t\ttopic,\n\t\tgroup_id=group,\n\t\t# init consume offset\n\t\tauto_offset_reset='latest',\n\t\tenable_auto_commit=True,\n\t\t# set up SASL authentication\n\t\tsecurity_protocol=\"SASL_PLAINTEXT\",\n\t\tsasl_mechanism=\"PLAIN\",\n\t\tsasl_plain_username=username,\n\t\tsasl_plain_password=password,\n\t\tapi_version=(2, 2, 2),\n\t\tbootstrap_servers=brokers.split(','))\n\n\tfor message in consumer:\n\t\tmsg = volc_pb2.Entry()\n\t\tmsg.ParseFromString(message.value)\n\t\tprint(msg)\n\n"
  },
  {
    "path": "volcengine/example/dts/subscription/volc/volc.proto",
    "content": "syntax = \"proto2\";\noption go_package=\"./;volc\";\noption optimize_for = SPEED;\npackage volc;\n\nenum EntryType {\n    UNKNOWN_ENTRY = 0;\n    BEGIN = 1;\n    COMMIT = 2;\n    DML = 3;\n    DDL = 4;\n}\n\nenum SrcType {\n    UNKNOWN_SRC = 0;\n    MySQL = 1;\n    PostgreSQL = 2;\n}\n\nenum DMLType {\n    OTHER_DML = 0;\n    INSERT = 1;\n    UPDATE = 2;\n    DELETE = 3;\n}\n\nenum DDLType {\n    OTHER_DDL = 0;\n    CREATE_TABLE = 2;\n    ALTER_TABLE = 3;\n    DROP_TABLE = 4;\n    RENAME_TABLE = 5;\n    TRUNCATE_TABLE = 6;\n\n    CREATE_VIEW = 7;\n    ALTER_VIEW = 8;\n    DROP_VIEW = 9;\n\n    CREATE_INDEX = 10;\n    DROP_INDEX = 11;\n\n    CREATE_FUNCTION = 12;\n    DROP_FUNCTION = 13;\n\n    CREATE_PROCEDURE= 14;\n    DROP_PROCEDURE = 15;\n}\n\nenum ColumnType {\n    UNKNOWN = 0;\n    STRING = 1;\n    BINARY = 2;\n    INTEGER  = 3;  // store as int64 value\n    UNSIGNED_INTEGER  = 4;  // store as  uint64 value\n    FLOAT = 5; // store as float value\n    DECIMAL = 6; // store as string value\n    BOOL = 7;\n    DATETIME = 8; //store in string value in RFC3339Nano format\n}\n\nmessage Entry {\n    optional int32 version = 1;\n    repeated Prop props = 2;\n    optional SrcType src_type = 3;\n    optional EntryType entry_type = 4;\n    optional int64 timestamp = 5;\n    optional string server_id = 6;\n    optional string database = 7;\n    optional string table = 8;\n\n    oneof event {\n        DMLEvent dml_event = 21;\n        DDLEvent ddl_event = 22;\n        CommitEvent commit_event = 23;\n        BeginEvent begin_event = 24;\n    }\n}\n\nmessage Prop{\n    optional string key\t= 1;\n    optional string value = 2;\n}\n\nmessage BeginEvent {\n    optional string transaction_id = 1;\n    optional string file = 2;\n    optional string offset = 3;\n    repeated Prop props = 4;\n}\n\nmessage CommitEvent {\n    optional string transaction_id = 1;\n    optional string file = 2;\n    optional string offset = 3;\n    repeated Prop props = 4;\n}\n\nmessage DDLEvent {\n    optional string sql = 1;\n    optional int64 exec_time = 2; // unit: second\n    optional int32 err_code = 3;\n    repeated Prop props = 4;\n    optional DDLType type = 5;\n}\n\nmessage DMLEvent {\n    optional DMLType type = 1;\n    optional string table_id = 2;\n    optional Index use_index = 3;\n    repeated ColumnDef column_defs= 4;\n    repeated Row rows = 5;\n    repeated Prop props = 6;\n}\n\nmessage Index {\n    optional string name = 1;\n    repeated int32 column_index = 2;\n}\n\nmessage Row {\n    repeated Column before_cols = 1;\n    repeated Column after_cols = 2;\n}\n\nmessage ColumnDef {\n    repeated Prop props = 1;\n\n    optional int32 index = 2;\n    optional ColumnType type = 3;\n    optional string origin_type = 4;\n    optional string name = 5;\n    optional string charset = 6;\n    optional bool is_nullable = 7;\n    optional bool is_unsigned = 8;\n}\n\nmessage Column {\n    optional bool is_null = 1;\n    oneof value {\n        string string_value  = 2;\n        bytes binary_value  = 3;\n        double float_value  = 4;\n        int64 int64_value  = 5;\n        uint64 uint64_value  = 6;\n        bool bool_value = 7;\n    }\n}\n"
  },
  {
    "path": "volcengine/example/dts/subscription/volc/volc_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volc.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf.internal import enum_type_wrapper\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\nvolc.proto\\x12\\x04volc\\\"\\xe7\\x02\\n\\x05\\x45ntry\\x12\\x0f\\n\\x07version\\x18\\x01 \\x01(\\x05\\x12\\x19\\n\\x05props\\x18\\x02 \\x03(\\x0b\\x32\\n.volc.Prop\\x12\\x1f\\n\\x08src_type\\x18\\x03 \\x01(\\x0e\\x32\\r.volc.SrcType\\x12#\\n\\nentry_type\\x18\\x04 \\x01(\\x0e\\x32\\x0f.volc.EntryType\\x12\\x11\\n\\ttimestamp\\x18\\x05 \\x01(\\x03\\x12\\x11\\n\\tserver_id\\x18\\x06 \\x01(\\t\\x12\\x10\\n\\x08\\x64\\x61tabase\\x18\\x07 \\x01(\\t\\x12\\r\\n\\x05table\\x18\\x08 \\x01(\\t\\x12#\\n\\tdml_event\\x18\\x15 \\x01(\\x0b\\x32\\x0e.volc.DMLEventH\\x00\\x12#\\n\\tddl_event\\x18\\x16 \\x01(\\x0b\\x32\\x0e.volc.DDLEventH\\x00\\x12)\\n\\x0c\\x63ommit_event\\x18\\x17 \\x01(\\x0b\\x32\\x11.volc.CommitEventH\\x00\\x12\\'\\n\\x0b\\x62\\x65gin_event\\x18\\x18 \\x01(\\x0b\\x32\\x10.volc.BeginEventH\\x00\\x42\\x07\\n\\x05\\x65vent\\\"\\\"\\n\\x04Prop\\x12\\x0b\\n\\x03key\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05value\\x18\\x02 \\x01(\\t\\\"]\\n\\nBeginEvent\\x12\\x16\\n\\x0etransaction_id\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04\\x66ile\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06offset\\x18\\x03 \\x01(\\t\\x12\\x19\\n\\x05props\\x18\\x04 \\x03(\\x0b\\x32\\n.volc.Prop\\\"^\\n\\x0b\\x43ommitEvent\\x12\\x16\\n\\x0etransaction_id\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04\\x66ile\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06offset\\x18\\x03 \\x01(\\t\\x12\\x19\\n\\x05props\\x18\\x04 \\x03(\\x0b\\x32\\n.volc.Prop\\\"t\\n\\x08\\x44\\x44LEvent\\x12\\x0b\\n\\x03sql\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\texec_time\\x18\\x02 \\x01(\\x03\\x12\\x10\\n\\x08\\x65rr_code\\x18\\x03 \\x01(\\x05\\x12\\x19\\n\\x05props\\x18\\x04 \\x03(\\x0b\\x32\\n.volc.Prop\\x12\\x1b\\n\\x04type\\x18\\x05 \\x01(\\x0e\\x32\\r.volc.DDLType\\\"\\xb3\\x01\\n\\x08\\x44MLEvent\\x12\\x1b\\n\\x04type\\x18\\x01 \\x01(\\x0e\\x32\\r.volc.DMLType\\x12\\x10\\n\\x08table_id\\x18\\x02 \\x01(\\t\\x12\\x1e\\n\\tuse_index\\x18\\x03 \\x01(\\x0b\\x32\\x0b.volc.Index\\x12$\\n\\x0b\\x63olumn_defs\\x18\\x04 \\x03(\\x0b\\x32\\x0f.volc.ColumnDef\\x12\\x17\\n\\x04rows\\x18\\x05 \\x03(\\x0b\\x32\\t.volc.Row\\x12\\x19\\n\\x05props\\x18\\x06 \\x03(\\x0b\\x32\\n.volc.Prop\\\"+\\n\\x05Index\\x12\\x0c\\n\\x04name\\x18\\x01 \\x01(\\t\\x12\\x14\\n\\x0c\\x63olumn_index\\x18\\x02 \\x03(\\x05\\\"J\\n\\x03Row\\x12!\\n\\x0b\\x62\\x65\\x66ore_cols\\x18\\x01 \\x03(\\x0b\\x32\\x0c.volc.Column\\x12 \\n\\nafter_cols\\x18\\x02 \\x03(\\x0b\\x32\\x0c.volc.Column\\\"\\xb3\\x01\\n\\tColumnDef\\x12\\x19\\n\\x05props\\x18\\x01 \\x03(\\x0b\\x32\\n.volc.Prop\\x12\\r\\n\\x05index\\x18\\x02 \\x01(\\x05\\x12\\x1e\\n\\x04type\\x18\\x03 \\x01(\\x0e\\x32\\x10.volc.ColumnType\\x12\\x13\\n\\x0borigin_type\\x18\\x04 \\x01(\\t\\x12\\x0c\\n\\x04name\\x18\\x05 \\x01(\\t\\x12\\x0f\\n\\x07\\x63harset\\x18\\x06 \\x01(\\t\\x12\\x13\\n\\x0bis_nullable\\x18\\x07 \\x01(\\x08\\x12\\x13\\n\\x0bis_unsigned\\x18\\x08 \\x01(\\x08\\\"\\xae\\x01\\n\\x06\\x43olumn\\x12\\x0f\\n\\x07is_null\\x18\\x01 \\x01(\\x08\\x12\\x16\\n\\x0cstring_value\\x18\\x02 \\x01(\\tH\\x00\\x12\\x16\\n\\x0c\\x62inary_value\\x18\\x03 \\x01(\\x0cH\\x00\\x12\\x15\\n\\x0b\\x66loat_value\\x18\\x04 \\x01(\\x01H\\x00\\x12\\x15\\n\\x0bint64_value\\x18\\x05 \\x01(\\x03H\\x00\\x12\\x16\\n\\x0cuint64_value\\x18\\x06 \\x01(\\x04H\\x00\\x12\\x14\\n\\nbool_value\\x18\\x07 \\x01(\\x08H\\x00\\x42\\x07\\n\\x05value*G\\n\\tEntryType\\x12\\x11\\n\\rUNKNOWN_ENTRY\\x10\\x00\\x12\\t\\n\\x05\\x42\\x45GIN\\x10\\x01\\x12\\n\\n\\x06\\x43OMMIT\\x10\\x02\\x12\\x07\\n\\x03\\x44ML\\x10\\x03\\x12\\x07\\n\\x03\\x44\\x44L\\x10\\x04*5\\n\\x07SrcType\\x12\\x0f\\n\\x0bUNKNOWN_SRC\\x10\\x00\\x12\\t\\n\\x05MySQL\\x10\\x01\\x12\\x0e\\n\\nPostgreSQL\\x10\\x02*<\\n\\x07\\x44MLType\\x12\\r\\n\\tOTHER_DML\\x10\\x00\\x12\\n\\n\\x06INSERT\\x10\\x01\\x12\\n\\n\\x06UPDATE\\x10\\x02\\x12\\n\\n\\x06\\x44\\x45LETE\\x10\\x03*\\x95\\x02\\n\\x07\\x44\\x44LType\\x12\\r\\n\\tOTHER_DDL\\x10\\x00\\x12\\x10\\n\\x0c\\x43REATE_TABLE\\x10\\x02\\x12\\x0f\\n\\x0b\\x41LTER_TABLE\\x10\\x03\\x12\\x0e\\n\\nDROP_TABLE\\x10\\x04\\x12\\x10\\n\\x0cRENAME_TABLE\\x10\\x05\\x12\\x12\\n\\x0eTRUNCATE_TABLE\\x10\\x06\\x12\\x0f\\n\\x0b\\x43REATE_VIEW\\x10\\x07\\x12\\x0e\\n\\nALTER_VIEW\\x10\\x08\\x12\\r\\n\\tDROP_VIEW\\x10\\t\\x12\\x10\\n\\x0c\\x43REATE_INDEX\\x10\\n\\x12\\x0e\\n\\nDROP_INDEX\\x10\\x0b\\x12\\x13\\n\\x0f\\x43REATE_FUNCTION\\x10\\x0c\\x12\\x11\\n\\rDROP_FUNCTION\\x10\\r\\x12\\x14\\n\\x10\\x43REATE_PROCEDURE\\x10\\x0e\\x12\\x12\\n\\x0e\\x44ROP_PROCEDURE\\x10\\x0f*\\x84\\x01\\n\\nColumnType\\x12\\x0b\\n\\x07UNKNOWN\\x10\\x00\\x12\\n\\n\\x06STRING\\x10\\x01\\x12\\n\\n\\x06\\x42INARY\\x10\\x02\\x12\\x0b\\n\\x07INTEGER\\x10\\x03\\x12\\x14\\n\\x10UNSIGNED_INTEGER\\x10\\x04\\x12\\t\\n\\x05\\x46LOAT\\x10\\x05\\x12\\x0b\\n\\x07\\x44\\x45\\x43IMAL\\x10\\x06\\x12\\x08\\n\\x04\\x42OOL\\x10\\x07\\x12\\x0c\\n\\x08\\x44\\x41TETIME\\x10\\x08\\x42\\x0bH\\x01Z\\x07./;volc')\n\n_ENTRYTYPE = DESCRIPTOR.enum_types_by_name['EntryType']\nEntryType = enum_type_wrapper.EnumTypeWrapper(_ENTRYTYPE)\n_SRCTYPE = DESCRIPTOR.enum_types_by_name['SrcType']\nSrcType = enum_type_wrapper.EnumTypeWrapper(_SRCTYPE)\n_DMLTYPE = DESCRIPTOR.enum_types_by_name['DMLType']\nDMLType = enum_type_wrapper.EnumTypeWrapper(_DMLTYPE)\n_DDLTYPE = DESCRIPTOR.enum_types_by_name['DDLType']\nDDLType = enum_type_wrapper.EnumTypeWrapper(_DDLTYPE)\n_COLUMNTYPE = DESCRIPTOR.enum_types_by_name['ColumnType']\nColumnType = enum_type_wrapper.EnumTypeWrapper(_COLUMNTYPE)\nUNKNOWN_ENTRY = 0\nBEGIN = 1\nCOMMIT = 2\nDML = 3\nDDL = 4\nUNKNOWN_SRC = 0\nMySQL = 1\nPostgreSQL = 2\nOTHER_DML = 0\nINSERT = 1\nUPDATE = 2\nDELETE = 3\nOTHER_DDL = 0\nCREATE_TABLE = 2\nALTER_TABLE = 3\nDROP_TABLE = 4\nRENAME_TABLE = 5\nTRUNCATE_TABLE = 6\nCREATE_VIEW = 7\nALTER_VIEW = 8\nDROP_VIEW = 9\nCREATE_INDEX = 10\nDROP_INDEX = 11\nCREATE_FUNCTION = 12\nDROP_FUNCTION = 13\nCREATE_PROCEDURE = 14\nDROP_PROCEDURE = 15\nUNKNOWN = 0\nSTRING = 1\nBINARY = 2\nINTEGER = 3\nUNSIGNED_INTEGER = 4\nFLOAT = 5\nDECIMAL = 6\nBOOL = 7\nDATETIME = 8\n\n\n_ENTRY = DESCRIPTOR.message_types_by_name['Entry']\n_PROP = DESCRIPTOR.message_types_by_name['Prop']\n_BEGINEVENT = DESCRIPTOR.message_types_by_name['BeginEvent']\n_COMMITEVENT = DESCRIPTOR.message_types_by_name['CommitEvent']\n_DDLEVENT = DESCRIPTOR.message_types_by_name['DDLEvent']\n_DMLEVENT = DESCRIPTOR.message_types_by_name['DMLEvent']\n_INDEX = DESCRIPTOR.message_types_by_name['Index']\n_ROW = DESCRIPTOR.message_types_by_name['Row']\n_COLUMNDEF = DESCRIPTOR.message_types_by_name['ColumnDef']\n_COLUMN = DESCRIPTOR.message_types_by_name['Column']\nEntry = _reflection.GeneratedProtocolMessageType('Entry', (_message.Message,), {\n  'DESCRIPTOR' : _ENTRY,\n  '__module__' : 'volc_pb2'\n  # @@protoc_insertion_point(class_scope:volc.Entry)\n  })\n_sym_db.RegisterMessage(Entry)\n\nProp = _reflection.GeneratedProtocolMessageType('Prop', (_message.Message,), {\n  'DESCRIPTOR' : _PROP,\n  '__module__' : 'volc_pb2'\n  # @@protoc_insertion_point(class_scope:volc.Prop)\n  })\n_sym_db.RegisterMessage(Prop)\n\nBeginEvent = _reflection.GeneratedProtocolMessageType('BeginEvent', (_message.Message,), {\n  'DESCRIPTOR' : _BEGINEVENT,\n  '__module__' : 'volc_pb2'\n  # @@protoc_insertion_point(class_scope:volc.BeginEvent)\n  })\n_sym_db.RegisterMessage(BeginEvent)\n\nCommitEvent = _reflection.GeneratedProtocolMessageType('CommitEvent', (_message.Message,), {\n  'DESCRIPTOR' : _COMMITEVENT,\n  '__module__' : 'volc_pb2'\n  # @@protoc_insertion_point(class_scope:volc.CommitEvent)\n  })\n_sym_db.RegisterMessage(CommitEvent)\n\nDDLEvent = _reflection.GeneratedProtocolMessageType('DDLEvent', (_message.Message,), {\n  'DESCRIPTOR' : _DDLEVENT,\n  '__module__' : 'volc_pb2'\n  # @@protoc_insertion_point(class_scope:volc.DDLEvent)\n  })\n_sym_db.RegisterMessage(DDLEvent)\n\nDMLEvent = _reflection.GeneratedProtocolMessageType('DMLEvent', (_message.Message,), {\n  'DESCRIPTOR' : _DMLEVENT,\n  '__module__' : 'volc_pb2'\n  # @@protoc_insertion_point(class_scope:volc.DMLEvent)\n  })\n_sym_db.RegisterMessage(DMLEvent)\n\nIndex = _reflection.GeneratedProtocolMessageType('Index', (_message.Message,), {\n  'DESCRIPTOR' : _INDEX,\n  '__module__' : 'volc_pb2'\n  # @@protoc_insertion_point(class_scope:volc.Index)\n  })\n_sym_db.RegisterMessage(Index)\n\nRow = _reflection.GeneratedProtocolMessageType('Row', (_message.Message,), {\n  'DESCRIPTOR' : _ROW,\n  '__module__' : 'volc_pb2'\n  # @@protoc_insertion_point(class_scope:volc.Row)\n  })\n_sym_db.RegisterMessage(Row)\n\nColumnDef = _reflection.GeneratedProtocolMessageType('ColumnDef', (_message.Message,), {\n  'DESCRIPTOR' : _COLUMNDEF,\n  '__module__' : 'volc_pb2'\n  # @@protoc_insertion_point(class_scope:volc.ColumnDef)\n  })\n_sym_db.RegisterMessage(ColumnDef)\n\nColumn = _reflection.GeneratedProtocolMessageType('Column', (_message.Message,), {\n  'DESCRIPTOR' : _COLUMN,\n  '__module__' : 'volc_pb2'\n  # @@protoc_insertion_point(class_scope:volc.Column)\n  })\n_sym_db.RegisterMessage(Column)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'H\\001Z\\007./;volc'\n  _ENTRYTYPE._serialized_start=1389\n  _ENTRYTYPE._serialized_end=1460\n  _SRCTYPE._serialized_start=1462\n  _SRCTYPE._serialized_end=1515\n  _DMLTYPE._serialized_start=1517\n  _DMLTYPE._serialized_end=1577\n  _DDLTYPE._serialized_start=1580\n  _DDLTYPE._serialized_end=1857\n  _COLUMNTYPE._serialized_start=1860\n  _COLUMNTYPE._serialized_end=1992\n  _ENTRY._serialized_start=21\n  _ENTRY._serialized_end=380\n  _PROP._serialized_start=382\n  _PROP._serialized_end=416\n  _BEGINEVENT._serialized_start=418\n  _BEGINEVENT._serialized_end=511\n  _COMMITEVENT._serialized_start=513\n  _COMMITEVENT._serialized_end=607\n  _DDLEVENT._serialized_start=609\n  _DDLEVENT._serialized_end=725\n  _DMLEVENT._serialized_start=728\n  _DMLEVENT._serialized_end=907\n  _INDEX._serialized_start=909\n  _INDEX._serialized_end=952\n  _ROW._serialized_start=954\n  _ROW._serialized_end=1028\n  _COLUMNDEF._serialized_start=1031\n  _COLUMNDEF._serialized_end=1210\n  _COLUMN._serialized_start=1213\n  _COLUMN._serialized_end=1387\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/example/dts/suspend_dts_task.py",
    "content": "import json\n\nfrom volcengine.dts.dts_service import DtsService\n\nif __name__ == '__main__':\n    access_key = 'your_ak_here'\n    secret_key = 'your_sk_here'\n    region_str = 'region_str_here'\n    task_id_str = 'task_id_str'\n\n    dts_service = DtsService(region=region_str)\n\n    dts_service.set_ak(access_key)\n    dts_service.set_sk(secret_key)\n\n    params = {}\n    body = {\n        'TaskId': task_id_str\n    }\n\n    resp = dts_service.suspend_transmission_task(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))\n"
  },
  {
    "path": "volcengine/example/emr/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/emr/example_list_clusters.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.emr.EMRService import EMRService\n\nif __name__ == '__main__':\n    emr_service = EMRService(region=\"cn-beijing\")\n\n    # call the following methods explicitly if you dont set ak and sk in $HOME/.volc/config\n    # emr_service.set_ak(testAk)\n    # emr_service.set_sk(testSk)\n\n    params = {}\n    resp = emr_service.list_clusters(params)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))\n"
  },
  {
    "path": "volcengine/example/emr/example_list_instances.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.emr.EMRService import EMRService\n\nif __name__ == '__main__':\n    emr_service = EMRService(region=\"cn-beijing\")\n\n    # call the following methods explicitly if you dont set ak and sk in $HOME/.volc/config\n    # emr_service.set_ak(testAk)\n    # emr_service.set_sk(testSk)\n\n    params = {}\n    body = {\n        'ClusterId': 'emr-2y1nqhdhxz38x9zkcwxb',\n        'PageSize': 20\n    }\n\n    resp = emr_service.list_instances(params, body)\n    print(json.dumps(resp, ensure_ascii=False, sort_keys=True, indent=4, separators=(',', ':')))\n"
  },
  {
    "path": "volcengine/example/game_protect/example_anti_plugin.py",
    "content": "\nfrom volcengine.game_protect.GameProtectService import GameProtectService\n\nif __name__ == '__main__':\n    gameProtector = GameProtectService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    gameProtector.set_ak('ak')\n    gameProtector.set_sk('sk')\n\n    params = {\n        'AppId': 218745,\n        'StartTime': 1618502400,\n        'EndTime': 1618545491,\n        'PageSize': 10,\n        'PageNum': 1\n    }\n    req = dict()\n\n    resp = gameProtector.risk_result(params, req)\n    print(resp)"
  },
  {
    "path": "volcengine/example/iam/example_list_users.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.iam.IamService import IamService\n\nif __name__ == '__main__':\n    iam_service = IamService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    iam_service.set_ak('ak')\n    iam_service.set_sk('sk')\n\n    params = dict()\n    params['Limit'] = 5\n    params['Offset'] = 0\n\n    resp = iam_service.list_users(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/image_registry/example_image_registry.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.image_registry.ImageRegistryService import ImageRegistryService\n\nif __name__ == '__main__':\n    registry = ImageRegistryService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    registry.set_ak('ak')\n    registry.set_sk('sk')\n\n    params = {}\n    body = {}\n\n    resp = registry.list_namespace_basic(params, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/imagex/v1/data/__init__.py",
    "content": "import volcengine.imagex.data\n"
  },
  {
    "path": "volcengine/example/imagex/v1/data/bucket_base_op_usage.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_base_op_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/data/bucket_usage.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_bucket_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/data/cdn_top_request_data.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['ValueType'] = \"Traffic\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_cdntop_request_data(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/data/compress_usage.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_compress_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/data/domain_bandwidth_data.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_domain_bandwidth_data(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/data/domain_traffic_data.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_domain_traffic_data(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/data/edge_request.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['DataTypes'] = \"2xx,3xx,4xx,5xx\"\n    query['GroupBy'] = \"DomainName,DataType\"\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_edge_request(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/data/edge_request_bandwidth.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_edge_request_bandwidth(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/data/edge_request_region.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n\n    resp = imagex_service.describe_imagex_edge_request_regions(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/data/edge_request_traffic.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_edge_request_traffic(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/data/hit_rate_request_data.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_hit_rate_request_data(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/data/hit_rate_traffic_data.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_hit_rate_traffic_data(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/data/imagex_summary.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['Timestamp'] = \"2023-01-28T00:00:00+08:00\"\n\n    resp = imagex_service.describe_imagex_summary(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/data/mirror_request_bandwidth.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"5m\"\n\n    resp = imagex_service.describe_imagex_mirror_request_bandwidth(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/data/mirror_request_http_code_by_time.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"5m\"\n\n    resp = imagex_service.describe_imagex_mirror_request_http_code_by_time(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/data/mirror_request_http_code_overview.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"5m\"\n\n    resp = imagex_service.describe_imagex_mirror_request_http_code_overview(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/data/mirror_request_traffic.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"5m\"\n\n    resp = imagex_service.describe_imagex_mirror_request_traffic(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/data/request_cnt_usage.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_request_cnt_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/examle_get_image_erase_models.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    params = dict()\n    params['Type'] = 0\n\n    resp = imagex_service.get_image_erase_models(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_common.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    params = dict()\n    params['ServiceId'] = 'imagex service id'\n    params['StoreUri'] = 'image uri'\n\n    resp = imagex_service.imagex_get('GetImageUploadFile', params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_create_image_content_task.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    args = {'ServiceId': '',\n            'TaskType': 'block_url',\n            'Urls': ['1'],\n            }\n\n    resp = imagex_service.create_image_content_task(args)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_delete_image.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    resp = imagex_service.delete_images(\"imagex service id\", [\"image uri 1\"])\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_describe_imagex_volc_cdn_access_log.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = {\n        'ServiceId': \"service id\",\n    }\n    body = {\n        'StartTime': 1680500000,\n        'EndTime': 1680515000,\n        'Domain': \"domain\",\n        'Region': \"global\",\n        'PageNum': 1,\n        'PageSize': 10,\n    }\n\n    resp = imagex_service.describeImageVolcCdnAccessLog(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_fetch_url.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    req1 = {\n        'ServiceId': 'imagex service id',\n        'Url': 'image uri',\n        # 'Async': True,\n    }\n    resp1 = imagex_service.fetch_image_url(req1)\n    print(resp1)\n\n    if 'TaskId' not in resp1:\n        exit()\n\n    req2 = {\n        'ServiceId': req1['ServiceId'],\n        'Id': resp1['TaskId'],\n    }\n    resp2 = imagex_service.get_url_fetch_task(req2)\n    print(resp2)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_get_image_bg_fill_result.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    params = dict()\n    params['ServiceId'] = 'service id'\n    params['StoreUri'] = 'xx'\n    params['Model'] = 0\n    params['Top'] = 0.0\n    params['Bottom'] = 0.0\n    params['Left'] = 0.0\n    params['Right'] = 0.0\n\n    resp = imagex_service.get_image_bg_fill_result(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_get_image_comic_result.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    params = dict()\n    params['ServiceId'] = 'service id'\n    params['StoreUri'] = 'xx'\n\n    resp = imagex_service.get_image_comic_result(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_get_image_content_block_list.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    args = {'ServiceId': '',\n            'StartTime': 0,\n            'EndTime': 2147483647,\n            }\n\n    resp = imagex_service.get_image_content_block_list(args)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_get_image_content_task_detail.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    args = {'ServiceId': '',\n            'TaskType': 'refresh_url',\n            'StartTime': 0,\n            'EndTime': 2147483647,\n            }\n\n    resp = imagex_service.get_image_content_task_detail(args)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_get_image_enhance_result.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    params = dict()\n    params['ServiceId'] = 'service id'\n    params['StoreUri'] = 'xx'\n    params['Model'] = 0\n    params['DisableAr'] = False\n    params['DisableSharp'] = False\n\n    resp = imagex_service.get_image_enhance_result(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_get_image_enhance_result_with_data.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    params = dict()\n    params['ServiceId'] = 'service id'\n    params['Model'] = 0\n    params['DisableAr'] = False\n    params['DisableSharp'] = False\n\n    data = open('path', mode='rb')\n    resp = imagex_service.get_image_enhance_result_with_data(params, data)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_get_image_erase_result.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    params = dict()\n    params['ServiceId'] = 'service id'\n    params['StoreUri'] = 'xx'\n    params['Model'] = ''\n\n    resp = imagex_service.get_image_erase_result(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_get_image_info.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    resp = imagex_service.get_image_info('imagex service id', 'image uri')\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_get_image_ocr.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('your ak')\n    imagex_service.set_sk('your sk')\n\n    params = dict()\n    params['ServiceId'] = \"xx\"\n    params['Scene'] = \"license\"\n    params['StoreUri'] = \"xx\"\n\n    resp = imagex_service.get_image_ocr_v2(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_get_image_segment.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('your ak')\n    imagex_service.set_sk('your sk')\n\n    params = dict()\n    params['ServiceId'] = 'xx'\n    params['Class'] = 'class'\n    params['Refine'] = True\n    params['StoreUri'] = 'store uri'\n    params['OutFormat'] = 'out format'\n    params['TransBg'] = True\n    params['Color'] = {\n        'Color': \"color\",\n        'Size': 0\n    }\n\n    resp = imagex_service.get_image_segment(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_get_image_style_result.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    params = {\n        'ServiceId': 'service id',\n\n        'StyleId': 'style id',\n        'Params': {\n            'key': 'value',\n        },\n        'OutputFormat': 'jpeg',\n        'OutputQuality': 90,\n    }\n\n    resp = imagex_service.get_image_style_result(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_get_image_super_resolution_result.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    params = dict()\n    params['ServiceId'] = 'service id'\n    params['StoreUri'] = 'xx'\n    params['Multiple'] = 2.0\n\n    resp = imagex_service.get_image_super_resolution_result(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_get_license_plate_detection.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    params = dict()\n    params['ServiceId'] = 'service id'\n    params['ImageUri'] = ''\n\n    resp = imagex_service.get_license_plate_detection(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_update_storage_ttl.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    params = dict()\n    params['ServiceId'] = 'service id'\n    params['TTL'] = 0\n\n    resp = imagex_service.update_image_storage_ttl(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_upload_image.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    params = dict()\n    params['ServiceId'] = 'imagex service id'\n    params['SkipMeta'] = False\n    params['SkipCommit'] = False\n    file_paths = ['image file path 1']\n    resp = imagex_service.upload_image(params, file_paths)\n    print(resp)\n\n    img_datas = ['image data 1']\n    resp = imagex_service.upload_image_data(params, img_datas)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_upload_image_token.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    params = dict()\n    params['ServiceId'] = 'imagex service id'\n\n    resp = imagex_service.get_upload_auth_token(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v1/example_upload_sts2.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.imagex.ImageXService import ImageXService\n\nif __name__ == '__main__':\n    imagex_service = ImageXService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    # service id list allowed to do upload, set to empty if no restriction\n    service_ids = ['imagex service id']\n    tag = dict()\n    # tag 字段如下，可选择所需字段传入\n    # upload_policy_dict = {\n    #     \"FileSizeUpLimit\": \"xxx\",\n    #     \"FileSizeBottomLimit\": \"xxx\",\n    #     \"ContentTypeBlackList\":[\n    #         \"xxx\"\n    #     ],\n    #     \"ContentTypeWhiteList\":[\n    #         \"xxx\"\n    #     ]\n    # }\n    # policy_str = json.dumps(upload_policy_dict)\n    #\n    # tag = {\n    #     \"UploadOverwrite\": \"true\",\n    #     \"UploadPolicy\": policy_str,\n    # }\n    resp = imagex_service.get_upload_auth(service_ids, tag=tag)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/imagex/v2/api/AIProcessExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.ai_process(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/AddCertExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.add_cert(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/AddDomainV1Example.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.add_domain_v_1(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/AddImageBackgroundColorsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.add_image_background_colors(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/AddImageElementsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.add_image_elements(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/ApplyImageUploadExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.apply_image_upload(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/ApplyVpcUploadInfoExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.apply_vpc_upload_info(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/BatchImageAuditExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.batch_image_audit(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CommitImageUploadExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.commit_image_upload(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateAudioAuditTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.create_audio_audit_task(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateBatchProcessTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.create_batch_process_task(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateCVImageGenerateTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.create_cv_image_generate_task(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateFileRestoreExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.create_file_restore(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateHiddenWatermarkImageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.create_hidden_watermark_image(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateHmExtractTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.create_hm_extract_task(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageAIProcessCallbackExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.create_image_ai_process_callback(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageAIProcessQueueExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.create_image_ai_process_queue(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageAITaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.create_image_ai_task(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageAnalyzeTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_image_analyze_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageAuditTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_image_audit_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageCompressTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.create_image_compress_task(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageContentTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.create_image_content_task(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageFromUriExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.create_image_from_uri(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageHmEmbedExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_image_hm_embed(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageHmExtractExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.create_image_hm_extract(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageMigrateTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_image_migrate_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageMonitorRuleExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.create_image_monitor_rule(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageRetryAuditTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_image_retry_audit_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageServiceExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_image_service(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageSettingRuleExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.create_image_setting_rule(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageStyleExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.create_image_style(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageTemplateExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.create_image_template(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageTemplatesByImportExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.create_image_templates_by_import(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageTranscodeCallbackExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_image_transcode_callback(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageTranscodeQueueExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_image_transcode_queue(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateImageTranscodeTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_image_transcode_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateTemplatesFromBinExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.create_templates_from_bin(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/CreateVideoAuditTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.create_video_audit_task(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DelCertExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.del_cert(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DelDomainExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.del_domain(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DeleteImageAIProcessDetailExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.delete_image_ai_process_detail(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DeleteImageAIProcessQueueExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.delete_image_ai_process_queue(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DeleteImageAnalyzeTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_image_analyze_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DeleteImageAnalyzeTaskRunExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_image_analyze_task_run(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DeleteImageAuditResultExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_image_audit_result(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DeleteImageBackgroundColorsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.delete_image_background_colors(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DeleteImageElementsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.delete_image_elements(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DeleteImageMigrateTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.delete_image_migrate_task(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DeleteImageMonitorRecordsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.delete_image_monitor_records(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DeleteImageMonitorRulesExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.delete_image_monitor_rules(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DeleteImageServiceExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.delete_image_service(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DeleteImageSettingRuleExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.delete_image_setting_rule(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DeleteImageStyleExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.delete_image_style(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DeleteImageTemplateExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.delete_image_template(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DeleteImageTranscodeDetailExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_image_transcode_detail(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DeleteImageTranscodeQueueExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_image_transcode_queue(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DeleteImageUploadFilesExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.delete_image_upload_files(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DeleteTemplatesFromBinExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.delete_templates_from_bin(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageVolcCdnAccessLogExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.describe_image_volc_cdn_access_log(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXAIRequestCntUsageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagexai_request_cnt_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXAddOnQPSUsageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_add_on_qps_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXBaseOpUsageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_base_op_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXBillingRequestCntUsageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_billing_request_cnt_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXBucketRetrievalUsageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_bucket_retrieval_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXBucketUsageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_bucket_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXCDNTopRequestDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagexcdn_top_request_data(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXCdnDurationAllExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_cdn_duration_all(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXCdnDurationDetailByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_cdn_duration_detail_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXCdnErrorCodeAllExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_cdn_error_code_all(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXCdnErrorCodeByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_cdn_error_code_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXCdnProtocolRateByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_cdn_protocol_rate_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXCdnReuseRateAllExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_cdn_reuse_rate_all(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXCdnReuseRateByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_cdn_reuse_rate_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXCdnSuccessRateAllExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_cdn_success_rate_all(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXCdnSuccessRateByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_cdn_success_rate_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXClientCountByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_client_count_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXClientDecodeDurationByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_client_decode_duration_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXClientDecodeSuccessRateByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_client_decode_success_rate_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXClientDemotionRateByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_client_demotion_rate_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXClientErrorCodeAllExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_client_error_code_all(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXClientErrorCodeByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_client_error_code_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXClientFailureRateExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_client_failure_rate(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXClientFileSizeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_client_file_size(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXClientLoadDurationAllExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_client_load_duration_all(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXClientLoadDurationExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_client_load_duration(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXClientQualityRateByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_client_quality_rate_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXClientQueueDurationByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_client_queue_duration_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXClientScoreByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_client_score_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXClientSdkVerByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_client_sdk_ver_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXClientTopDemotionURLExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_client_top_demotion_url(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXClientTopFileSizeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_client_top_file_size(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXClientTopQualityURLExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_client_top_quality_url(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXCompressUsageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_compress_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXCubeUsageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_cube_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXDomainBandwidthDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_domain_bandwidth_data(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXDomainBandwidthNinetyFiveDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_domain_bandwidth_ninety_five_data(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXDomainTrafficDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_domain_traffic_data(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXEdgeRequestBandwidthExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_edge_request_bandwidth(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXEdgeRequestExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_edge_request(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXEdgeRequestRegionsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_edge_request_regions(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXEdgeRequestTrafficExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_edge_request_traffic(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXExceedCountByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_exceed_count_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXExceedFileSizeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_exceed_file_size(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXExceedResolutionRatioAllExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_exceed_resolution_ratio_all(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXHeifEncodeDurationByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.describe_imagex_heif_encode_duration_by_time(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXHeifEncodeErrorCodeByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.describe_imagex_heif_encode_error_code_by_time(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXHeifEncodeFileInSizeByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.describe_imagex_heif_encode_file_in_size_by_time(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXHeifEncodeFileOutSizeByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.describe_imagex_heif_encode_file_out_size_by_time(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXHeifEncodeSuccessCountByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.describe_imagex_heif_encode_success_count_by_time(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXHeifEncodeSuccessRateByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.describe_imagex_heif_encode_success_rate_by_time(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXHitRateRequestDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_hit_rate_request_data(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXHitRateTrafficDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_hit_rate_traffic_data(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXMirrorRequestBandwidthExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_mirror_request_bandwidth(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXMirrorRequestHttpCodeByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_mirror_request_http_code_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXMirrorRequestHttpCodeOverviewExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_mirror_request_http_code_overview(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXMirrorRequestTrafficExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_mirror_request_traffic(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXMultiCompressUsageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_multi_compress_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXRequestCntUsageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_request_cnt_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXScreenshotUsageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_screenshot_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXSensibleCacheHitRateByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_sensible_cache_hit_rate_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXSensibleCountByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_sensible_count_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXSensibleTopRamURLExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_sensible_top_ram_url(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXSensibleTopResolutionURLExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_sensible_top_resolution_url(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXSensibleTopSizeURLExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_sensible_top_size_url(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXSensibleTopUnknownURLExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_sensible_top_unknown_url(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXServerQPSUsageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_server_qps_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXServiceQualityExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_service_quality(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXSourceRequestBandwidthExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_source_request_bandwidth(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXSourceRequestExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_source_request(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXSourceRequestTrafficExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_source_request_traffic(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXStorageUsageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_storage_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXSummaryExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_summary(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXUploadCountByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_upload_count_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXUploadDurationExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_upload_duration(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXUploadErrorCodeAllExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_upload_error_code_all(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXUploadErrorCodeByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_upload_error_code_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXUploadFileSizeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_upload_file_size(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXUploadSegmentSpeedByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_upload_segment_speed_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXUploadSpeedExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_upload_speed(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXUploadSuccessRateByTimeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_imagex_upload_success_rate_by_time(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DescribeImageXVideoClipDurationUsageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_imagex_video_clip_duration_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/DownloadCertExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.download_cert(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/ExportFailedMigrateTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.export_failed_migrate_task(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/FetchImageUrlExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.fetch_image_url(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetAiGenerateImageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_ai_generate_image(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetAllCertsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_all_certs(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetAllImageServicesExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_all_image_services(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetAllImageTemplatesExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_all_image_templates(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetAudioAuditResultExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_audio_audit_result(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetAuditEntrysCountExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_audit_entrys_count(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetBatchProcessResultExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_batch_process_result(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetBatchTaskInfoExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_batch_task_info(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetCVAnimeGenerateImageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_cv_anime_generate_image(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetCVImageGenerateResultExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_cv_image_generate_result(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetCVImageGenerateTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_cv_image_generate_task(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetCVTextGenerateImageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_cv_text_generate_image(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetCertInfoExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_cert_info(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetComprehensiveEnhanceImageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.get_comprehensive_enhance_image(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetCompressTaskInfoExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_compress_task_info(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetDedupTaskStatusExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_dedup_task_status(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetDenoisingImageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_denoising_image(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetDomainConfigExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_domain_config(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetDomainOwnerVerifyContentExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_domain_owner_verify_content(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageAIDetailsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_ai_details(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageAIProcessQueuesExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_ai_process_queues(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageAITasksExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_ai_tasks(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageAddOnTagExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_add_on_tag(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageAiGenerateTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_ai_generate_task(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageAlertRecordsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_image_alert_records(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageAllDomainCertExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_all_domain_cert(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageAnalyzeResultExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_analyze_result(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageAnalyzeTasksExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_analyze_tasks(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageAuditResultExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_audit_result(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageAuditTaskResultExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_audit_task_result(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageAuditTasksExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_audit_tasks(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageAuthKeyExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_auth_key(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageBackgroundColorsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_background_colors(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageBgFillResultExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.get_image_bg_fill_result(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageComicResultExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.get_image_comic_result(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageContentBlockListExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_image_content_block_list(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageContentTaskDetailExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.get_image_content_task_detail(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageDetectResultExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_image_detect_result(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageDuplicateDetectionExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_image_duplicate_detection(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageElementsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_elements(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageEnhanceResultExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.get_image_enhance_result(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageEraseModelsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_erase_models(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageEraseResultExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.get_image_erase_result(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageFontsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_fonts(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageHmExtractTaskInfoExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_image_hm_extract_task_info(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageMigrateTasksExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_migrate_tasks(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageMonitorRulesExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_monitor_rules(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageOCRV2Example.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_image_ocr_v2(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImagePSDetectionExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_image_ps_detection(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageQualityExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_image_quality(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageServiceExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_service(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageServiceSubscriptionExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_service_subscription(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageSettingRuleHistoryExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_setting_rule_history(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageSettingRulesExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_setting_rules(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageSettingsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_settings(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageSmartCropResultExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.get_image_smart_crop_result(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageStorageFilesExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_storage_files(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageStyleDetailExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_style_detail(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageStyleResultExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_image_style_result(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageStylesExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_styles(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageSuperResolutionResultExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.get_image_super_resolution_result(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageTemplateExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_template(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageTranscodeDetailsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_transcode_details(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageTranscodeQueuesExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_transcode_queues(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageUpdateFilesExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_update_files(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageUploadFileExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_upload_file(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageUploadFilesExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_image_upload_files(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageXQueryAppsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_imagex_query_apps(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageXQueryDimsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_imagex_query_dims(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageXQueryRegionsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_imagex_query_regions(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetImageXQueryValsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_imagex_query_vals(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetLicensePlateDetectionExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_license_plate_detection(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetPrivateImageTypeExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_private_image_type(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetProductAIGCResultExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_product_aigc_result(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetResourceURLExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_resource_url(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetResponseHeaderValidateKeysExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    resp = service.get_response_header_validate_keys()\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetSegmentImageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_segment_image(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetServiceDomainsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_service_domains(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetSyncAuditResultExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.get_sync_audit_result(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetTemplatesFromBinExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_templates_from_bin(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetUrlFetchTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_url_fetch_task(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetVendorBucketsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.get_vendor_buckets(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/GetVideoAuditResultExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_video_audit_result(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/PreviewImageUploadFileExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.preview_image_upload_file(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/RerunImageMigrateTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.rerun_image_migrate_task(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/SetDefaultDomainExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.set_default_domain(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/SingleImageAuditExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.single_image_audit(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/TerminateImageMigrateTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.terminate_image_migrate_task(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateAdvanceExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_advance(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateAudioAuditTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_audio_audit_task(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateAuditImageStatusExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_audit_image_status(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateDomainAdaptiveFmtExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_domain_adaptive_fmt(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateFileStorageClassExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_file_storage_class(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateHttpsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_https(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageAIProcessQueueExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_ai_process_queue(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageAIProcessQueueStatusExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_ai_process_queue_status(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageAnalyzeTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_image_analyze_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageAnalyzeTaskStatusExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_image_analyze_task_status(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageAuditTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_image_audit_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageAuditTaskStatusExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_image_audit_task_status(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageAuthKeyExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_auth_key(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageBatchDomainCertExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_batch_domain_cert(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageDomainAreaAccessExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_domain_area_access(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageDomainBandwidthLimitExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_domain_bandwidth_limit(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageDomainConfigExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_domain_config(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageDomainDownloadSpeedLimitExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_domain_download_speed_limit(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageDomainIPAuthExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_domain_ip_auth(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageDomainUaAccessExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_domain_ua_access(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageDomainVolcOriginExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_domain_volc_origin(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageExifDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_exif_data(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageFileCTExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_file_ct(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageFileKeyExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_file_key(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageMirrorConfExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_mirror_conf(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageMonitorRuleExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_monitor_rule(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageMonitorRuleStatusExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_monitor_rule_status(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageObjectAccessExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_object_access(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageResourceStatusExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_resource_status(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageSettingRuleExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_setting_rule(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageSettingRulePriorityExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_setting_rule_priority(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageStorageTTLExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_image_storage_ttl(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageStyleExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_style(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageStyleMetaExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_style_meta(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageTaskStrategyExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_image_task_strategy(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageTranscodeQueueExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_image_transcode_queue(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageTranscodeQueueStatusExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_image_transcode_queue_status(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageUploadFilesExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_upload_files(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateImageUploadOverwriteExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_image_upload_overwrite(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateReferExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_refer(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateResEventRuleExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_res_event_rule(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateResponseHeaderExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_response_header(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateServiceNameExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_service_name(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateSlimConfigExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_slim_config(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateStorageRulesExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_storage_rules(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateStorageRulesV2Example.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_storage_rules_v_2(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/UpdateVideoAuditTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.update_video_audit_task(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/api/VerifyDomainOwnerExample.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n    body = {}\n\n    resp = service.verify_domain_owner(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/data/__init__.py",
    "content": "import volcengine.imagex.data\n"
  },
  {
    "path": "volcengine/example/imagex/v2/data/bucket_base_op_usage.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_base_op_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/data/bucket_usage.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_bucket_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/data/cdn_top_request_data.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['ValueType'] = \"Traffic\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_cdntop_request_data(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/data/compress_usage.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_compress_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/data/domain_bandwidth_data.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_domain_bandwidth_data(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/data/domain_traffic_data.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_domain_traffic_data(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/data/edge_request.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['DataTypes'] = \"2xx,3xx,4xx,5xx\"\n    query['GroupBy'] = \"DomainName,DataType\"\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_edge_request(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/data/edge_request_bandwidth.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_edge_request_bandwidth(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/data/edge_request_region.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n\n    resp = imagex_service.describe_imagex_edge_request_regions(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/data/edge_request_traffic.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_edge_request_traffic(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/data/hit_rate_request_data.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_hit_rate_request_data(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/data/hit_rate_traffic_data.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_hit_rate_traffic_data(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/data/imagex_summary.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['Timestamp'] = \"2023-01-28T00:00:00+08:00\"\n\n    resp = imagex_service.describe_imagex_summary(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/data/mirror_request_bandwidth.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"5m\"\n\n    resp = imagex_service.describe_imagex_mirror_request_bandwidth(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/data/mirror_request_http_code_by_time.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"5m\"\n\n    resp = imagex_service.describe_imagex_mirror_request_http_code_by_time(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/data/mirror_request_http_code_overview.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"5m\"\n\n    resp = imagex_service.describe_imagex_mirror_request_http_code_overview(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/data/mirror_request_traffic.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"5m\"\n\n    resp = imagex_service.describe_imagex_mirror_request_traffic(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/data/request_cnt_usage.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['StartTime'] = \"2023-01-21T00:00:00+08:00\"\n    query['EndTime'] = \"2023-01-28T00:00:00+08:00\"\n    query['Interval'] = \"300\"\n\n    resp = imagex_service.describe_imagex_request_cnt_usage(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/examle_get_image_erase_models.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = dict()\n    query['Type'] = 0\n\n    resp = imagex_service.get_image_erase_models(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/example_common.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    params = dict()\n    params['ServiceId'] = 'imagex service id'\n    params['StoreUri'] = 'image uri'\n\n    resp = imagex_service.imagex_get('GetImageUploadFile', params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/example_create_image_content_task.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == \"__main__\":\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak(\"ak\")\n    imagex_service.set_sk(\"sk\")\n\n    query = {\n        \"ServiceId\": \"\",\n    }\n    body = {\n        \"TaskType\": \"block_url\",\n        \"Urls\": [\"1\"],\n    }\n\n    resp = imagex_service.create_image_content_task(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/example_delete_image.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == \"__main__\":\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak(\"ak\")\n    imagex_service.set_sk(\"sk\")\n\n    query = {\n        \"ServiceId\": \"service id\",\n    }\n\n    body = {}\n    resp = imagex_service.delete_image_upload_files(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/example_describe_imagex_volc_cdn_access_log.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    query = {\n        'ServiceId': \"service id\",\n    }\n    body = {\n        'StartTime': 1680500000,\n        'EndTime': 1680515000,\n        'Domain': \"domain\",\n        'Region': \"global\",\n        'PageNum': 1,\n        'PageSize': 10,\n    }\n\n    resp = imagex_service.describe_image_volc_cdn_access_log(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/example_fetch_url.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    body = {\n        'ServiceId': 'imagex service id',\n        'Url': 'image uri',\n        # 'Async': True,\n    }\n    resp1 = imagex_service.fetch_image_url(body)\n    print(resp1)\n\n    if 'TaskId' not in resp1:\n        exit()\n\n    req2 = {\n        'ServiceId': body['ServiceId'],\n        'Id': resp1['TaskId'],\n    }\n    resp2 = imagex_service.get_url_fetch_task(req2)\n    print(resp2)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/example_get_image_bg_fill_result.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    body = dict()\n    body['ServiceId'] = 'service id'\n    body['StoreUri'] = 'xx'\n    body['Model'] = 0\n    body['Top'] = 0.0\n    body['Bottom'] = 0.0\n    body['Left'] = 0.0\n    body['Right'] = 0.0\n\n    resp = imagex_service.get_image_bg_fill_result(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/example_get_image_comic_result.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    body = dict()\n    body['ServiceId'] = 'service id'\n    body['StoreUri'] = 'xx'\n\n    resp = imagex_service.get_image_comic_result(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/example_get_image_content_block_list.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == \"__main__\":\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak(\"ak\")\n    imagex_service.set_sk(\"sk\")\n\n    query = {\n        \"ServiceId\": \"\",\n    }\n\n    body = {\n        \"StartTime\": 0,\n        \"EndTime\": 2147483647,\n    }\n\n    resp = imagex_service.get_image_content_block_list(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/example_get_image_content_task_detail.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == \"__main__\":\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak(\"ak\")\n    imagex_service.set_sk(\"sk\")\n\n    body = {\n        \"ServiceId\": \"\",\n        \"TaskType\": \"refresh_url\",\n        \"StartTime\": 0,\n        \"EndTime\": 2147483647,\n    }\n\n    resp = imagex_service.get_image_content_task_detail(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/example_get_image_enhance_result.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    body = dict()\n    body['ServiceId'] = 'service id'\n    body['StoreUri'] = 'xx'\n    body['Model'] = 0\n    body['DisableAr'] = False\n    body['DisableSharp'] = False\n\n    resp = imagex_service.get_image_enhance_result(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/example_get_image_erase_result.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    body = dict()\n    body['ServiceId'] = 'service id'\n    body['StoreUri'] = 'xx'\n    body['Model'] = ''\n\n    resp = imagex_service.get_image_erase_result(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/example_get_image_ocr.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('your ak')\n    imagex_service.set_sk('your sk')\n\n    query = dict()\n    query['ServiceId'] = \"xx\"\n\n    body = dict()\n    body['Scene'] = \"license\"\n    body['StoreUri'] = \"xx\"\n\n    resp = imagex_service.get_image_ocr_v2(query,body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/example_get_image_style_result.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == \"__main__\":\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak(\"ak\")\n    imagex_service.set_sk(\"sk\")\n\n    query = {\n        \"ServiceId\": \"service id\",\n    }\n    body = {\n        \"StyleId\": \"style id\",\n        \"Params\": {\n            \"key\": \"value\",\n        },\n        \"OutputFormat\": \"jpeg\",\n        \"OutputQuality\": 90,\n    }\n\n    resp = imagex_service.get_image_style_result(query, body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/example_get_image_super_resolution_result.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    body = dict()\n    body['ServiceId'] = 'service id'\n    body['StoreUri'] = 'xx'\n    body['Multiple'] = 2.0\n\n    resp = imagex_service.get_image_super_resolution_result(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/example_update_storage_ttl.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    body = dict()\n    body['ServiceId'] = 'service id'\n    body['TTL'] = 0\n\n    resp = imagex_service.update_image_storage_ttl(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/example_upload_image.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    params = dict()\n    params['ServiceId'] = 'imagex service id'\n    params['SkipMeta'] = False\n    # params['UploadHost'] = 'upload host'\n    params['SkipCommit'] = False\n    file_paths = ['image file path 1']\n    resp = imagex_service.upload_image(params, file_paths)\n    print(resp)\n\n    img_datas = ['image data 1']\n    resp = imagex_service.upload_image_data(params, img_datas)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/example_upload_image_token.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    params = dict()\n    params['ServiceId'] = 'imagex service id'\n\n    resp = imagex_service.get_upload_auth_token(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/example_upload_sts2.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    # service id list allowed to do upload, set to empty if no restriction\n    service_ids = ['imagex service id']\n    tag = dict()\n    # tag 字段如下，可选择所需字段传入\n    # upload_policy_dict = {\n    #     \"FileSizeUpLimit\": \"xxx\",\n    #     \"FileSizeBottomLimit\": \"xxx\",\n    #     \"ContentTypeBlackList\":[\n    #         \"xxx\"\n    #     ],\n    #     \"ContentTypeWhiteList\":[\n    #         \"xxx\"\n    #     ]\n    # }\n    # policy_str = json.dumps(upload_policy_dict)\n    #\n    # tag = {\n    #     \"UploadOverwrite\": \"true\",\n    #     \"UploadPolicy\": policy_str,\n    # }\n    resp = imagex_service.get_upload_auth(service_ids, tag=tag)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/imagex/v2/example_vpc_upload_image.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.imagex.v2.imagex_service import ImagexService\n\nif __name__ == '__main__':\n    imagex_service = ImagexService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    imagex_service.set_ak('ak')\n    imagex_service.set_sk('sk')\n\n    request = dict()\n    request[\"ServiceId\"] = \"service id\"      # 服务 ID\n    request[\"FilePath\"] = \"your file path\"   # 文件路径，与Data二选一\n    request[\"Data\"] = 'your data'            # 文件二进制数据，与FilePath二选一\n    request[\"StoreKey\"] = \"your store key\"   # 文件存储名\n    request[\"Prefix\"] = \"your prefix\"        # 文件前缀\n    request[\"FileExtension\"] = \"your file extension\"    # 文件后缀\n    request[\"ContentType\"] = \"your content type\"    # 文件Content-Type\n    request[\"StorageClass\"] = \"your storage class\"  # 文件存储类型\n    request[\"PartSize\"] = 0                         # 偏好分片大小，单位为字节(0表示按照默认规则分片)\n    request[\"Overwrite\"] = False                    # 是否覆盖已有文件\n    request[\"SkipMeta\"] = False                     # 是否跳过元信息\n    try:\n        resp = imagex_service.vpc_upload_image(request)\n        print(resp)\n    except Exception as e:\n        print(e)\n"
  },
  {
    "path": "volcengine/example/imp/KillJob.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.imp.ImpService import ImpService\nfrom volcengine.imp.models.business.imp_common_pb2 import InputPath\nfrom volcengine.imp.models.request.request_imp_pb2 import *\n\nif __name__ == '__main__':\n    imp_service = ImpService()\n    # call below method if you dont set ak and sk in $HOME/.vcloud/config\n    imp_service.set_ak('your ak')\n    imp_service.set_sk('your sk')\n\n    # KillJob\n    try:\n        req = ImpKillJobRequest()\n        req.JobId = 'your JobId'\n        resp = imp_service.kill_job(req)\n    except Exception:\n        raise\n    else:\n        print(\"resp:\\n \", resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            pass\n        else:\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/imp/RetrieveJob.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.imp.ImpService import ImpService\nfrom volcengine.imp.models.business.imp_common_pb2 import InputPath\nfrom volcengine.imp.models.request.request_imp_pb2 import *\n\nif __name__ == '__main__':\n    imp_service = ImpService()\n    # call below method if you dont set ak and sk in $HOME/.vcloud/config\n    imp_service.set_ak('your ak')\n    imp_service.set_sk('your sk')\n\n    # RetrieveJob\n    try:\n        req = ImpRetrieveJobRequest()\n        req.JobIds.extend(['your JobId1', 'your JobId2'])\n        resp = imp_service.retrieve_job(req)\n    except Exception:\n        raise\n    else:\n        print(\"resp:\\n \", resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(\"Result:\\n \", resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/imp/SubmitJob.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.imp.ImpService import ImpService\nfrom volcengine.imp.models.business.imp_common_pb2 import *\nfrom volcengine.imp.models.request.request_imp_pb2 import *\n\nif __name__ == '__main__':\n    imp_service = ImpService()\n    # call below method if you dont set ak and sk in $HOME/.vcloud/config\n    imp_service.set_ak('your ak')\n    imp_service.set_sk('your sk')\n\n    # SubmitJob\n    try:\n        req = ImpSubmitJobRequest()\n        req.InputPath.Type = 'VOD'\n        req.InputPath.VodSpaceName = 'your space'\n        req.InputPath.FileId = 'your vid'\n        req.TemplateId = 'your template id'\n        req.CallbackArgs = 'your callback args'\n\n        resp = imp_service.submit_job(req)\n    except Exception:\n        raise\n    else:\n        print(\"resp:\\n \", resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n\n"
  },
  {
    "path": "volcengine/example/imp/SubmitJobByJob.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.imp.ImpService import ImpService\nfrom volcengine.imp.models.business.imp_common_pb2 import *\nfrom volcengine.imp.models.request.request_imp_pb2 import *\n\nif __name__ == '__main__':\n    imp_service = ImpService()\n    # call below method if you dont set ak and sk in $HOME/.vcloud/config\n    imp_service.set_ak('your ak')\n    imp_service.set_sk('your sk')\n\n    # SubmitJob by Job\n    try:\n        req = ImpSubmitJobRequest()\n        req.InputPath.Type = 'VOD'\n        req.InputPath.VodSpaceName = 'your vod space'\n        req.InputPath.FileId = 'your vid'\n        req.OutputPath.Type = 'VOD'\n        req.OutputPath.VodSpaceName = 'your vod space'\n        req.Job.TranscodeVideo.Container = 'your container'\n        req.Job.TranscodeVideo.Video.Codec = 'your video codec'\n        req.Job.TranscodeVideo.Audio.Codec = 'your audio codec'\n        req.CallbackArgs = 'your callback args'\n\n        resp = imp_service.submit_job(req)\n    except Exception:\n        raise\n    else:\n        print(\"resp:\\n \", resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n\n"
  },
  {
    "path": "volcengine/example/imp/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/live/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/live/example_audit/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/live/example_audit/example_create_snapshot_audit_preset.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Vhost\": \"vhost\",\n        \"App\": \"app\",\n        \"Bucket\": \"bb\",\n        \"Interval\": 8.9,\n        \"StorageStrategy\": 1,\n        \"CallbackDetailList\": [{\"URL\": \"http://xx\", \"CallbackType\": \"http\"}],\n        \"Label\": [\"301\"]\n    }\n    resp = live_service.create_snapshot_audit_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_audit/example_delete_snapshot_audit_preset.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Vhost\": \"vhost\",\n        \"App\": \"app\",\n        \"PresetName\": \"preset\",\n    }\n    resp = live_service.delete_snapshot_audit_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_audit/example_list_vhost_snapshot_audit_preset.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Vhost\": \"vhost\",\n    }\n    resp = live_service.list_vhost_snapshot_audit_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_audit/example_update_snapshot_audit_preset.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Vhost\": \"vhost\",\n        \"App\": \"app\",\n        \"PresetName\": \"presetName\",\n        \"Interval\": 5.0,\n    }\n    resp = live_service.update_snapshot_audit_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_auth/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/live/example_auth/example_describe_auth.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Domain\": \"domain\",\n        \"SceneType\": \"push\",\n    }\n    resp = live_service.describe_auth(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_auth/example_update_auth_key.py",
    "content": "# coding:utf-8\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Domain\": \"domain\",\n        \"SceneType\": \"push\",\n        \"AuthDetailList\": [\n            {\n                \"EncryptionAlgorithm\": \"md5\",\n                \"SecretKey\": \"xx\",\n            },\n        ],\n    }\n    resp = live_service.update_auth_key(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_callback/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/live/example_callback/example_delete_callback.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"MessageType\": \"record\",\n        \"Vhost\": \"vhost\",\n    }\n    resp = live_service.delete_callback(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_callback/example_describe_callback.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"MessageType\": \"\",\n        \"Domain\": \"domain\",\n        \"App\": \"app\",\n    }\n    resp = live_service.describe_callback(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_callback/example_update_callback.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"MessageType\": \"record\",\n        \"Vhost\": \"vhost\",\n        \"CallbackDetailList\": [\n            {\n                \"CallbackType\": \"callBackType\",\n                \"URL\": \"demoUrl\",\n            },\n        ],\n    }\n    resp = live_service.update_callback(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_cert/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/live/example_cert/example_bind_cert.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Domain\": \"\",\n        \"CertDomain\": \"\",\n        \"ChainID\": \"\",\n    }\n    resp = live_service.bind_cert(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_cert/example_create_cert.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"UseWay\": \"sign\",\n        \"CertName\": \"\",\n    }\n    resp = live_service.create_cert(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_cert/example_delete_cert.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"ChainID\": \"\",\n    }\n    resp = live_service.delete_cert(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_cert/example_list_cert.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Domain\": \"\",\n        \"Available\": True,\n        \"Expiring\": False,\n    }\n    resp = live_service.list_cert(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_cert/example_un_bind_cert.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Domain\": \"\",\n    }\n    resp = live_service.un_bind_cert(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_cert/example_update_cert.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"UseWay\": \"sign\",\n        \"ChainID\": \"xxx\",\n    }\n    resp = live_service.update_cert(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_deny_config/example_describe_deny_config.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.request_live_pb2 import DescribeDenyConfigRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = DescribeDenyConfigRequest()\n    req.Vhost = 'vhost'\n    req.Domain = 'domain'\n    print(req)\n    resp = live_service.describe_deny_config(req)\n    print(resp)\n\n"
  },
  {
    "path": "volcengine/example/live/example_deny_config/example_update_deny_config.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.business.deny_config_pb2 import DenyConfigDetail\nfrom volcengine.live.models.request.request_live_pb2 import  UpdateDenyConfigRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = UpdateDenyConfigRequest()\n\n    detail = DenyConfigDetail()\n    detail.ProType.extend(['ProType'])\n    detail.FmtType.extend(['FmtType'])\n    detail.AllowList.extend(['AllowList'])\n    detail.DenyList.extend(['DenyList'])\n    req.Vhost = 'Vhost'\n    req.Domain = 'Domain'\n    req.DenyConfigList.extend([detail])\n\n    print(req)\n    resp = live_service.update_deny_config(req)\n    print(resp)"
  },
  {
    "path": "volcengine/example/live/example_describe_info/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/live/example_describe_info/example_describe_info.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\n\n# 示例 -  查询直播域名带宽数据\ndef example_describe_live_bandwidth_data(live_service):\n    body = {\n        \"DomainList\": [\"example.com\", \"example2.com\"],\n        \"StartTime\": \"2022-04-13T00:00:00Z\",\n        \"EndTime\": \"2022-04-14T00:00:00Z\",\n        \"Aggregation\": 300,\n    }\n    resp = live_service.describe_live_bandwidth_data(body)\n    print(resp)\n\n\n# 示例 -  查询直播域名流量数据\ndef example_describe_live_traffic_data(live_service):\n    body = {\n        \"DomainList\": [\"example.com\", \"example2.com\"],\n        \"StartTime\": \"2022-04-13T00:00:00Z\",\n        \"EndTime\": \"2022-04-14T00:00:00Z\",\n        \"Aggregation\": 300,\n    }\n    resp = live_service.describe_live_traffic_data(body)\n    print(resp)\n\n\n# 示例 - 查询95带宽\ndef example_describe_live_P95Peak_bandwidth_data(live_service):\n    body = {\n        \"StartTime\": \"2022-04-13T00:00:00Z\",\n        \"EndTime\": \"2022-04-14T00:00:00Z\",\n        \"Aggregation\": 300,\n    }\n    resp = live_service.describe_live_P95Peak_bandwidth_data(body)\n    print(resp)\n\n\n# 示例 -  查询直播域名录制用量\ndef example_describe_record_data(live_service):\n    body = {\n        \"DomainList\": [\"example.com\", \"example2.com\"],\n        \"StartTime\": \"2022-04-13T00:00:00Z\",\n        \"EndTime\": \"2022-04-13T00:10:00Z\",\n        \"Aggregation\": 300,\n    }\n    resp = live_service.describe_record_data(body)\n    print(resp)\n\n\n# 示例 -  查询直播域名转码用量\ndef example_describe_transcode_data(live_service):\n    body = {\n        \"DomainList\": [\"example.com\", \"example2.com\"],\n        \"StartTime\": \"2022-03-07T00:00:00+08:00\",\n        \"EndTime\": \"2022-03-08T00:00:00+08:00\",\n        \"Aggregation\": 86400,\n    }\n    resp = live_service.describe_transcode_data(body)\n    print(resp)\n\n\n# 示例 -  查询直播域名截图张数\ndef example_describe_snapshot_data(live_service):\n    body = {\n        \"DomainList\": [\"example.com\", \"example2.com\"],\n        \"StartTime\": \"2022-03-07T00:00:00+08:00\",\n        \"EndTime\": \"2022-03-08T00:00:00+08:00\",\n        \"Aggregation\": 86400,\n    }\n    resp = live_service.describe_snapshot_data(body)\n    print(resp)\n\n\n# 示例 - 日志下载\ndef example_describe_live_domain_log(live_service):\n    params = {\n        \"DomainList\": [\"example.com\", \"example2.com\"],\n        \"StartTime\": \"2022-04-21T14:00:00+08:00\",\n        \"EndTime\": \"2022-04-22T14:00:00+08:00\",\n    }\n    resp = live_service.describe_live_domain_log(params)\n    print(resp)\n\n\n# 示例 - 查询推流监控数据\ndef example_describe_push_stream_metrics(live_service):\n    body = {\n        \"Domain\": \"example.com\",\n        \"App\": \"example_app\",\n        \"Stream\": \"example_stream\",\n        \"StartTime\": \"2022-04-21T00:00:00Z\",\n        \"EndTime\": \"2022-04-23T23:59:59Z\",\n        \"Aggregation\": 30,\n    }\n    resp = live_service.describe_push_stream_metrics(body)\n    print(resp)\n\n\n# 示例 - 查询直播流历史在线人数\ndef example_describe_live_stream_sessions(live_service):\n    body = {\n        \"Domain\": \"example.com\",\n        \"App\": \"example\",\n        \"Stream\": \"example080601\",\n        \"ProtocolList\": [\"RTMP\", \"HTTP-FLV\"],\n        \"StartTime\": \"2022-04-21T00:00:00Z\",\n        \"EndTime\": \"2022-04-21T10:59:59Z\",\n        \"Aggregation\": 60,\n    }\n    resp = live_service.describe_live_stream_sessions(body)\n    print(resp)\n\n\n# 示例 -  查询域名 HTTP 返回码占比\ndef example_describe_play_response_status_stat(live_service):\n    body = {\n        \"DomainList\": [\"example.com\", \"example2.com\"],\n        \"StartTime\": \"2021-08-16T00:00:00Z\",\n        \"EndTime\": \"2021-08-16T00:01:59Z\",\n        \"Aggregation\": 60\n    }\n    resp = live_service.describe_play_response_status_stat(body)\n    print(resp)\n\n\n# 示例 - Stream流量查询\ndef example_describe_live_metric_traffic_data(live_service):\n    body = {\n        \"DomainList\": [\"example.com\"],\n        \"ProtocolList\": [\"HTTP-FLV\", \"RTMP\"],\n        \"ISPList\": [\"telecom\"],\n        \"IPList\": [\"123.123.123.000\"],\n        \"RegionList\": [\n            {\n                \"Area\": \"cn\",\n                \"Country\": \"cn\",\n                \"Province\": \"beijing\",\n            },\n        ],\n        \"StartTime\": \"2022-04-13T00:00:00+08:00\",\n        \"EndTime\": \"2022-04-13T12:00:00+08:00\",\n        \"Aggregation\": 300,\n        \"ShowDetail\": True,\n    }\n    resp = live_service.describe_live_metric_traffic_data(body)\n    print(resp)\n\n\n# 示例 - Stream带宽查询\ndef example_describe_live_metric_bandwidth_data(live_service):\n    body = {\n        \"DomainList\": [\"example.com\"],\n        \"ProtocolList\": [\"HTTP-FLV\", \"RTMP\"],\n        \"ISPList\": [\"telecom\"],\n        \"IPList\": [\"123.123.123.000\"],\n        \"RegionList\": [\n            {\n                \"Area\": \"cn\",\n                \"Country\": \"cn\",\n                \"Province\": \"beijing\",\n            },\n        ],\n        \"StartTime\": \"2021-04-13T00:00:00+08:00\",\n        \"EndTime\": \"2021-04-14T00:00:00+08:00\",\n        \"Aggregation\": 300,\n        \"ShowDetail\": True,\n    }\n    resp = live_service.describe_live_metric_bandwidth_data(body)\n    print(resp)\n\n\n# 示例 - 拉流域名查询流列表\ndef example_describe_play_stream_list(live_service):\n    params = {\n        \"Domain\": \"example.com\",\n        \"StartTime\": \"2022-04-13T00:00:00+08:00\",\n        \"EndTime\": \"2022-04-14T00:00:00+08:00\",\n    }\n    resp = live_service.describe_play_stream_list(params)\n    print(resp)\n\n\n# 示例 - 拉流转推带宽查询\ndef example_describe_pull_to_push_bandwidth_data(live_service):\n    params = {\n        \"DomainList\": [\"example.com\"],\n        \"DstAddrTypeList\": [\"live\",\"Third\"],\n        \"StartTime\": \"2021-04-13T00:00:00+08:00\",\n        \"EndTime\": \"2021-04-14T00:00:00+08:00\",\n        \"Aggregation\": 300,\n        \"ShowDetail\": True\n    }\n    resp = live_service.describe_pull_to_push_bandwidth_data(params)\n    print(resp)\n\n\n# 示例 - 截图审核查询\ndef example_describe_live_audit_data(live_service):\n    params = {\n        \"DomainList\": [\"example.com\", \"example2.com\"],\n        \"DetailField\": [\"Domain\"],\n        \"StartTime\": \"2022-07-13T00:00:00+08:00\",\n        \"EndTime\": \"2022-07-14T00:00:00+08:00\",\n        \"Aggregation\": 86400,\n    }\n    resp = live_service.describe_live_audit_data(params)\n    print(resp)\n\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    # 1.查询直播域名带宽数据\n    example_describe_live_bandwidth_data(live_service)\n    # 2.查询直播域名流量数据\n    example_describe_live_traffic_data(live_service)\n    # 3.查询95带宽\n    example_describe_live_P95Peak_bandwidth_data(live_service)\n    # 4.查询直播域名录制用量\n    example_describe_record_data(live_service)\n    # 5.查询直播域名转码用量\n    example_describe_transcode_data(live_service)\n    # 6.查询直播域名截图张数\n    example_describe_snapshot_data(live_service)\n    # 7.日志下载\n    example_describe_live_domain_log(live_service)\n    # 8.查询推流监控数据\n    example_describe_push_stream_metrics(live_service)\n    # 9.查询直播流历史在线人数\n    example_describe_live_stream_sessions(live_service)\n    # 10.查询域名 HTTP 返回码占比\n    example_describe_play_response_status_stat(live_service)\n    # 11.Stream流量查询\n    example_describe_live_metric_traffic_data(live_service)\n    # 12.Stream带宽查询\n    example_describe_live_metric_bandwidth_data(live_service)\n    # 13.拉流域名查询流列表\n    example_describe_play_stream_list(live_service)\n    # 14.拉流转推带宽查询\n    example_describe_pull_to_push_bandwidth_data(live_service)\n"
  },
  {
    "path": "volcengine/example/live/example_domain/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/live/example_domain/example_create_domain.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        # \"Domain\": \"push-rtmp-testpython.xxx.xx\",\n        \"Domain\": \"pull-rtmp-testpython.xxx.xx\",\n        # \"Type\": \"push\",\n        \"Type\": \"pull-flv\",\n    }\n    resp = live_service.create_domain(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_domain/example_delete_domain.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Domain\": \"domain\",\n    }\n    resp = live_service.delete_domain(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_domain/example_describe_domain.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"DomainList\": [\"domain1\",\"domain2\"],\n    }\n    # body = json.dumps(body)\n    resp = live_service.describe_domain(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_domain/example_disable_domain.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Domain\": \"domain\",\n    }\n    resp = live_service.disable_domain(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_domain/example_enable_domain.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Domain\": \"domain\",\n    }\n    resp = live_service.enable_domain(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_domain/example_list_domain_detail.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"PageNum\": 1,\n        \"PageSize\": 10,\n    }\n    resp = live_service.list_domain_detail(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_domain/example_manager_pull_push_domain_bind.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"PullDomain\": \"\",\n        \"PushDomain\": \"\",\n    }\n    resp = live_service.manager_pull_push_domain_bind(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_generate_url/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/live/example_generate_url/example_generate_play_u_r_l.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.live_requests import GeneratePlayURLRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = GeneratePlayURLRequest()\n    req.Vhost = ''\n    req.Domain = ''\n    req.App = ''\n    req.Stream = ''\n    req.Suffix = ''\n    req.Type = ''\n    req.ValidDuration = 1\n    req.ExpiredTime = ''\n\n    print(req)\n    resp = live_service.generate_play_u_r_l(req)\n    print(resp)"
  },
  {
    "path": "volcengine/example/live/example_generate_url/example_generate_push_u_r_l.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.live_requests import GeneratePushURLRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = GeneratePushURLRequest()\n    req.Vhost = ''\n    req.App = ''\n    req.Stream = ''\n    req.ValidDuration = 0\n    req.ExpiredTime = ''\n\n    print(req)\n    resp = live_service.generate_push_u_r_l(req)\n    print(resp)"
  },
  {
    "path": "volcengine/example/live/example_index_m3u8/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/live/example_index_m3u8/example_create_live_stream_record_index_file.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    body = {\n        \"Domain\": \"your domain\",\n        \"App\": \"your app\",\n        \"Stream\": \"your stream\",\n        \"StartTime\": \"2022-12-22T19:35:00Z\",\n        \"EndTime\": \"2022-12-22T19:40:05Z\",\n        \"OutputBucket\": \"your bucket\"\n    }\n    resp = live_service.create_live_stream_record_index_files(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_pull_to_push/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/live/example_pull_to_push/example_create_pull_to_push_task.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.live_requests import CreatePullToPushTaskRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n\n    req = CreatePullToPushTaskRequest()\n    req.Title = ''\n    req.Type = 0\n    req.CycleMode = 0\n    req.StartTime = 0\n    req.EndTime = 0\n    req.DstAddr = ''\n    req.SrcAddr = ''\n    req.SrcAddrS = []\n    req.SrcAddrS.extend([''])\n    print(req)\n    resp = live_service.create_pull_to_push_task(req)\n    print(resp)\n\n"
  },
  {
    "path": "volcengine/example/live/example_pull_to_push/example_delete_pull_to_push_task.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.request_live_pb2 import  DeletePullToPushTaskRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = DeletePullToPushTaskRequest()\n    req.TaskId = 'TaskId'\n\n    print(req)\n    resp = live_service.delete_pull_to_push_task(req)\n    print(resp)"
  },
  {
    "path": "volcengine/example/live/example_pull_to_push/example_list_pull_to_push_task.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.request_live_pb2 import ListPullToPushTaskRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = ListPullToPushTaskRequest()\n    req.Title = 'Title'\n    req.Page = 0\n    req.Size = 0\n    print(req)\n    resp = live_service.list_pull_to_push_task(req)\n    print(resp)\n\n"
  },
  {
    "path": "volcengine/example/live/example_pull_to_push/example_restart_pull_to_push_task.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.request_live_pb2 import RestartPullToPushTaskRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = RestartPullToPushTaskRequest()\n    req.TaskId = 'TaskId'\n    print(req)\n    resp = live_service.restart_pull_to_push_task(req)\n    print(resp)"
  },
  {
    "path": "volcengine/example/live/example_pull_to_push/example_stop_pull_to_push_task.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.request_live_pb2 import StopPullToPushTaskRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = StopPullToPushTaskRequest()\n    req.TaskId = 'TaskId'\n    print(req)\n    resp = live_service.stop_pull_to_push_task(req)\n    print(resp)"
  },
  {
    "path": "volcengine/example/live/example_pull_to_push/example_update_pull_to_push_task.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.live_requests import UpdatePullToPushTaskRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n\n    req = UpdatePullToPushTaskRequest()\n    req.Title = ''\n    req.Type = 1\n    req.CycleMode = -1\n    req.StartTime = 0\n    req.EndTime = 0\n    req.TaskId = ''\n    req.DstAddr = ''\n    req.SrcAddr = ''\n    req.SrcAddrS = []\n    req.SrcAddrS.extend([''])\n\n    print(req)\n    resp = live_service.update_pull_to_push_task(req)\n    print(resp)"
  },
  {
    "path": "volcengine/example/live/example_record/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/live/example_record/example_create_record_preset.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Vhost\": \"vhost\",\n        \"App\": \"app\",\n        \"Status\": 1,\n        \"Bucket\": \"bb\",\n        \"RecordTob\": [\n            {\n                \"Format\": \"hls\",\n                \"Duration\": 100,\n                \"Splice\": -1,\n                \"RecordObject\": \"/xx/xx\",\n            },\n        ]\n    }\n    resp = live_service.create_record_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_record/example_delete_record_preset.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Vhost\": \"\",\n        \"App\": \"\",\n        \"Preset\": \"preset\",\n    }\n    resp = live_service.delete_record_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_record/example_describe_record_task_file_history.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.request_live_pb2 import DescribeRecordTaskFileHistoryRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = DescribeRecordTaskFileHistoryRequest()\n    req.Vhost = 'Vhost'\n    req.App = 'App'\n    req.DateFrom = '2022-10-19T00:00:00+08:00'\n    req.DateTo = '2022-10-25T23:59:59+08:00'\n    req.Type = 'Type'\n    req.PageNum = 0\n    req.PageSize = 0\n    print(req)\n    resp = live_service.describe_record_task_file_history(req)\n    print(resp)\n\n"
  },
  {
    "path": "volcengine/example/live/example_record/example_list_vhost_record_preset.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Vhost\": \"vhost\",\n    }\n    resp = live_service.list_vhost_record_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_record/example_update_record_preset.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Preset\": \"preset\",\n        \"Vhost\": \"vhost\",\n        \"App\": \"app\",\n        \"Status\": 1,\n        \"Bucket\": \"bb\",\n        \"RecordTob\": [\n            {\n                \"Format\": \"hls\",\n                \"Duration\": 100,\n                \"Splice\": -1,\n                \"RecordObject\": \"/xx/xx\",\n            },\n        ],\n    }\n    resp = live_service.update_record_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_referer/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/live/example_referer/example_delete_referer.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Vhost\": \"\",\n        \"App\": \"\",\n    }\n    resp = live_service.delete_referer(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_referer/example_describe_referer.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Domain\": \"\",\n        \"App\": \"\",\n    }\n    resp = live_service.describe_referer(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_referer/example_update_referer.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Domain\": \"\",\n        \"App\": \"\",\n        \"RefererInfoList\":\n            [\n                {\n                    \"Key\": \"asd\",\n                    \"Type\": \"xx\",\n                    \"Value\": \"sad\",\n                    \"Priority\": 0,\n                },\n            ]\n    }\n    resp = live_service.update_referer(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_relay_source/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/live/example_relay_source/example_delete_relay_source_v2.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.request_live_pb2 import DeleteRelaySourceRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = DeleteRelaySourceRequest()\n    req.Vhost = 'Vhost'\n    req.App = 'App'\n    print(req)\n    resp = live_service.delete_relay_source_v2(req)\n    print(resp)\n\n"
  },
  {
    "path": "volcengine/example/live/example_relay_source/example_describe_relay_source_v2.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.request_live_pb2 import DescribeRelaySourceRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = DescribeRelaySourceRequest()\n    req.Vhost = 'Vhost'\n    print(req)\n    resp = live_service.describe_relay_source_v2(req)\n    print(resp)\n\n"
  },
  {
    "path": "volcengine/example/live/example_relay_source/example_update_relay_source_v2.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.request_live_pb2 import UpdateRelaySourceRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('==')\n    req = UpdateRelaySourceRequest()\n    req.Vhost = 'Vhost'\n    req.App = 'App'\n    req.RelaySourceProtocol = 'RelaySourceProtocol'\n    req.RelaySourceDomainList.extend(['RelaySourceDomainList'])\n    print(req)\n    resp = live_service.update_relay_source_v2(req)\n    print(resp)\n\n"
  },
  {
    "path": "volcengine/example/live/example_snapshot/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/live/example_snapshot/example_create_snapshot_preset.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Vhost\": \"\",\n        \"App\": \"\",\n        \"Status\": 1,\n        \"Interval\": 5,\n        \"Bucket\": \"\",\n        \"SnapshotFormat\": \"jpeg\",\n        \"SnapshotObject\": \"xx/xx\",\n        \"StorageDir\": \"/xx\",\n    }\n    resp = live_service.create_snapshot_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_snapshot/example_delete_snapshot_preset.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Vhost\": \"\",\n        \"App\": \"\",\n        \"Preset\": \"\",\n    }\n    resp = live_service.delete_snapshot_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_snapshot/example_describe_c_d_n_snapshot_history.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.request_live_pb2 import DescribeCDNSnapshotHistoryRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = DescribeCDNSnapshotHistoryRequest()\n    req.Vhost = 'Vhost'\n    req.App = 'App'\n    req.Stream = 'Stream'\n    req.DateFrom = '2022-10-16T00:00:00+08:00'\n    req.DateTo = '2022-10-21T23:59:59+08:00'\n    req.Type = 'Type'\n    req.PageNum = 0\n    req.PageSize = 0\n    print(req)\n    resp = live_service.describe_c_d_n_snapshot_history(req)\n    print(resp)\n\n"
  },
  {
    "path": "volcengine/example/live/example_snapshot/example_list_vhost_snapshot_preset.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Vhost\": \"\",\n    }\n    resp = live_service.list_vhost_snapshot_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_snapshot/example_update_snapshot_preset.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Vhost\": \"\",\n        \"App\": \"\",\n        \"Preset\": \"\",\n        \"Status\": 1,\n        \"Interval\": 5,\n        \"Bucket\": \"\",\n        \"SnapshotFormat\": \"jpeg\",\n        \"SnapshotObject\": \"xx/xx\",\n        \"StorageDir\": \"/xx\",\n    }\n    resp = live_service.update_snapshot_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_stream/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/live/example_stream/example_describe_closed_stream_info_by_page.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.request_live_pb2 import DescribeClosedStreamInfoByPageRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = DescribeClosedStreamInfoByPageRequest()\n    req.Vhost = 'Vhost'\n    req.PageNum = 0\n    req.PageSize = 0\n    print(req)\n    resp = live_service.describe_closed_stream_info_by_page(req)\n    print(resp)\n\n"
  },
  {
    "path": "volcengine/example/live/example_stream/example_describe_forbidden_stream_info_by_page.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.request_live_pb2 import DescribeForbiddenStreamInfoByPageRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = DescribeForbiddenStreamInfoByPageRequest()\n    req.PageNum = 0\n    req.PageSize = 0\n    req.App = 'App'\n    req.Stream = 'Stream'\n    print(req)\n    resp = live_service.describe_forbidden_stream_info_by_page(req)\n    print(resp)\n\n"
  },
  {
    "path": "volcengine/example/live/example_stream/example_describe_live_stream_info_by_page.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.request_live_pb2 import DescribeLiveStreamInfoByPageRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = DescribeLiveStreamInfoByPageRequest()\n    req.Vhost = 'Vhost'\n    req.PageNum = 0\n    req.PageSize = 0\n    print(req)\n    resp = live_service.describe_live_stream_info_by_page(req)\n    print(resp)\n\n"
  },
  {
    "path": "volcengine/example/live/example_stream/example_describe_live_stream_state.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.request_live_pb2 import DescribeLiveStreamStateRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = DescribeLiveStreamStateRequest()\n    req.Vhost = 'Vhost'\n    req.App = 'App'\n    req.Stream = 'Stream'\n    print(req)\n    resp = live_service.describe_live_stream_state(req)\n    print(resp)\n\n"
  },
  {
    "path": "volcengine/example/live/example_stream/example_forbid_stream.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Domain\": \"domain\",\n        \"App\": \"app\",\n        \"Stream\": \"stream\",\n    }\n    resp = live_service.forbid_stream(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_stream/example_kill_stream.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.request_live_pb2 import KillStreamRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = KillStreamRequest()\n    req.Vhost = 'Vhost'\n    req.App = 'App'\n    req.Stream = 'Stream'\n    print(req)\n    resp = live_service.kill_stream(req)\n    print(resp)"
  },
  {
    "path": "volcengine/example/live/example_stream/example_resume_stream.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Domain\": \"\",\n        \"App\": \"\",\n        \"Stream\": \"\",\n    }\n    resp = live_service.resume_stream(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_transcode/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/live/example_transcode/example_create_transcode_preset.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Vhost\": \"\",\n        \"App\": \"\",\n        \"status\": 1,\n        \"SuffixName\": \"\",\n        \"Preset\": \"\",\n        \"FPS\": 30,\n    }\n    resp = live_service.create_transcode_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_transcode/example_delete_transcode_preset.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Vhost\": \"\",\n        \"App\": \"\",\n        \"Preset\": \"\",\n    }\n    resp = live_service.delete_transcode_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_transcode/example_list_common_trans_preset_detail.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"PresetList\": [\"Preset1\", \"Preset2\"],\n    }\n    resp = live_service.list_common_trans_preset_detail(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_transcode/example_list_vhost_transcode_preset.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Vhost\": \"\",\n    }\n    resp = live_service.list_vhost_transcode_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_transcode/example_update_transcode_preset.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    ak = \"\"\n    sk = \"\"\n    live_service.set_ak(ak)\n    live_service.set_sk(sk)\n    body = {\n        \"Vhost\": \"\",\n        \"App\": \"\",\n        \"status\": 1,\n        \"SuffixName\": \"\",\n        \"Preset\": \"\",\n        \"FPS\": 60,\n    }\n    resp = live_service.update_transcode_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_usage/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/live/example_usage/describe_live_batch_push_stream_metrics.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    body = {\n        \"Domain\": \"your domain\",\n        \"App\": \"your app\",\n        \"Stream\": \"your stream\",\n        \"StartTime\": \"2022-12-22T19:35:00+08:00\",\n        \"EndTime\": \"2022-12-22T19:40:05+08:00\",\n        \"Aggregation\": 60\n    }\n    resp = live_service.describe_live_batch_push_stream_metrics.py(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_usage/describe_live_batch_source_stream_metrics.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    body = {\n        \"Domain\": \"your domain\",\n        \"App\": \"your app\",\n        \"Stream\": \"your stream\",\n        \"StartTime\": \"2022-12-22T19:35:00+08:00\",\n        \"EndTime\": \"2022-12-22T19:40:05+08:00\",\n        \"Aggregation\": 60\n    }\n    resp = live_service.describe_live_batch_source_stream_metrics.py(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_vqs_task/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/live/example_vqs_task/example_create_v_q_score_task.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.live_requests import CreateVQScoreTaskRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = CreateVQScoreTaskRequest()\n    req.MainAddr = ''\n    req.ContrastAddr = ''\n    req.FrameInterval = 0\n    req.Duration = 700\n    req.Algorithm = ''\n\n    print(req.__dict__)\n    resp = live_service.create_v_q_score_task(req)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/example_vqs_task/example_describe_v_q_score_task.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.request_live_pb2 import DescribeVQScoreTaskRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = DescribeVQScoreTaskRequest()\n    req.ID = 'ID'\n\n    print(req)\n    resp = live_service.describe_v_q_score_task(req)\n    print(resp)"
  },
  {
    "path": "volcengine/example/live/example_vqs_task/example_list_v_q_score_task.py",
    "content": "# coding:utf-8\nimport json\n\nfrom volcengine.live.LiveService import LiveService\nfrom volcengine.live.models.request.live_requests import ListVQScoreTaskRequest\n\nif __name__ == '__main__':\n    live_service = LiveService()\n    live_service.set_ak('')\n    live_service.set_sk('')\n    req = ListVQScoreTaskRequest()\n    req.StartTime = ''\n    req.EndTime = ''\n    # req.PageNum = 0\n    # req.PageSize = 0\n    req.Status = 0\n\n    print(req)\n    resp = live_service.list_v_q_score_task(req)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/BindCertExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.bind_cert(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/BindEncryptDRMExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.bind_encrypt_drm(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ContinuePullToPushTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.continue_pull_to_push_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreateCarouselTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_carousel_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreateCertExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_cert(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreateCloudMixTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_cloud_mix_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreateDomainExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_domain(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreateDomainV2Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_domain_v2(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreateHighLightTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_high_light_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreateLivePadPresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_live_pad_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreateLiveStreamRecordIndexFilesExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_live_stream_record_index_files(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreateLiveVideoQualityAnalysisTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_live_video_quality_analysis_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreatePullRecordTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_pull_record_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreatePullToPushGroupExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_pull_to_push_group(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreatePullToPushTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_pull_to_push_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreateRecordPresetV2Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_record_preset_v2(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreateRelaySourceV4Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_relay_source_v4(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreateSnapshotAuditPresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_snapshot_audit_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreateSnapshotPresetV2Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_snapshot_preset_v2(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreateSpeechTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_speech_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreateSubtitleTranscodePresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_subtitle_transcode_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreateTimeShiftPresetV3Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_time_shift_preset_v3(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreateTranscodePresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_transcode_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreateWatermarkPresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_watermark_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/CreateWatermarkPresetV2Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.create_watermark_preset_v2(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteCallbackExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_callback(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteCarouselTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_carousel_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteCertExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_cert(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteCloudMixTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_cloud_mix_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteDomainExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_domain(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteHTTPHeaderConfigExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_http_header_config(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteIPAccessRuleExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_ip_access_rule(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteLivePadPresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_live_pad_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteLiveVideoQualityAnalysisTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_live_video_quality_analysis_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeletePullToPushGroupExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_pull_to_push_group(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeletePullToPushTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_pull_to_push_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteRecordPresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_record_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteRefererExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_referer(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteRelaySourceV3Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_relay_source_v3(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteRelaySourceV4Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_relay_source_v4(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteSnapshotAuditPresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_snapshot_audit_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteSnapshotPresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_snapshot_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteSpeechTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_speech_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteStreamQuotaConfigExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_stream_quota_config(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteSubtitleTranscodePresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_subtitle_transcode_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteTaskByAccountIDExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_task_by_account_id(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteTimeShiftPresetV3Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_time_shift_preset_v3(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteTranscodePresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_transcode_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteWatermarkPresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_watermark_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DeleteWatermarkPresetV2Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.delete_watermark_preset_v2(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeAuthExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_auth(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeCDNSnapshotHistoryExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_cdn_snapshot_history(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeCallbackExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_callback(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeCertDRMExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_cert_drm(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeCertDetailSecretV2Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_cert_detail_secret_v2(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeClosedStreamInfoByPageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_closed_stream_info_by_page(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeDomainExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_domain(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeEncryptDRMExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    resp = service.describe_encrypt_drm()\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeEncryptHLSExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    resp = service.describe_encrypt_hls()\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeForbiddenStreamGroupByPageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_forbidden_stream_group_by_page(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeForbiddenStreamInfoByPageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_forbidden_stream_info_by_page(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeHTTPHeaderConfigExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_http_header_config(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeHighLightTaskByAccountIDExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_high_light_task_by_account_id(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeIPAccessRuleExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_ip_access_rule(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeIpInfoExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_ip_info(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLicenseDRMExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_license_drm(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveAuditDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_audit_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveBandwidthDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_bandwidth_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveBatchPushStreamAvgMetricsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_batch_push_stream_avg_metrics(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveBatchPushStreamMetricsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_batch_push_stream_metrics(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveBatchSourceStreamAvgMetricsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_batch_source_stream_avg_metrics(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveBatchSourceStreamMetricsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_batch_source_stream_metrics(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveBatchStreamSessionDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_batch_stream_session_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveBatchStreamTrafficDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_batch_stream_traffic_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveBatchStreamTranscodeDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_batch_stream_transcode_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveCallbackDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_callback_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveEdgeStatDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_edge_stat_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveISPDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    resp = service.describe_live_isp_data()\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveLogDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_log_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveMetricBandwidthDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_metric_bandwidth_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveMetricTrafficDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_metric_traffic_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveP95PeakBandwidthDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_p95_peak_bandwidth_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLivePadPresetDetailExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_pad_preset_detail(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLivePadStreamListExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_pad_stream_list(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLivePlayStatusCodeDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_play_status_code_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLivePullToPushBandwidthDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_pull_to_push_bandwidth_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLivePullToPushDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_pull_to_push_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLivePushStreamCountDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_push_stream_count_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLivePushStreamInfoDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_push_stream_info_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLivePushStreamMetricsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_push_stream_metrics(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveRecordDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_record_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveRegionDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    resp = service.describe_live_region_data()\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveSnapshotDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_snapshot_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveSourceBandwidthDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_source_bandwidth_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveSourceStreamMetricsExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_source_stream_metrics(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveSourceTrafficDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_source_traffic_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveStreamCountDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_stream_count_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveStreamGroupByPageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_stream_group_by_page(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveStreamInfoByPageExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_live_stream_info_by_page(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveStreamSessionDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_stream_session_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveStreamStateExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.describe_live_stream_state(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveTimeShiftDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_time_shift_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveTopPlayDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_top_play_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveTrafficDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_traffic_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveTranscodeDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_transcode_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeLiveTranscodeInfoDataExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_live_transcode_info_data(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeRecordTaskFileHistoryExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_record_task_file_history(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeRefererExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_referer(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeRelaySourceV3Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_relay_source_v3(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DescribeStreamQuotaConfigExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.describe_stream_quota_config(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/DisableDomainExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.disable_domain(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/EnableDomainExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.enable_domain(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/EnableHTTPHeaderConfigExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.enable_http_header_config(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ForbidStreamExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.forbid_stream(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/GeneratePlayURLExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.generate_play_url(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/GeneratePushURLExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.generate_push_url(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/GetCarouselDetailExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.get_carousel_detail(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/GetCloudMixTaskDetailExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.get_cloud_mix_task_detail(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/GetHLSEncryptDataKeyExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.get_hls_encrypt_data_key(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/GetLiveVideoQualityAnalysisTaskDetailExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.get_live_video_quality_analysis_task_detail(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/GetPullRecordTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.get_pull_record_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/GetSpeechConfigExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    resp = service.get_speech_config()\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/GetSpeechTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.get_speech_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/KillStreamExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.kill_stream(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListBindEncryptDRMExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_bind_encrypt_drm(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListCarouselTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_carousel_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListCertV2Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_cert_v2(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListCloudMixTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_cloud_mix_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListCommonTransPresetDetailExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_common_trans_preset_detail(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListDomainDetailExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_domain_detail(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListHighLightTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_high_light_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListLiveVideoQualityAnalysisTasksExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_live_video_quality_analysis_tasks(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListPullRecordTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_pull_record_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListPullToPushGroupExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_pull_to_push_group(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListPullToPushTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.list_pull_to_push_task(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListPullToPushTaskV2Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_pull_to_push_task_v2(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListRelaySourceV4Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_relay_source_v4(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListTimeShiftPresetV2Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_time_shift_preset_v2(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListVhostRecordPresetV2Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_vhost_record_preset_v2(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListVhostSnapshotAuditPresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_vhost_snapshot_audit_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListVhostSnapshotPresetV2Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_vhost_snapshot_preset_v2(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListVhostSubtitleTranscodePresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_vhost_subtitle_transcode_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListVhostTransCodePresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_vhost_trans_code_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListVhostWatermarkPresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_vhost_watermark_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListWatermarkPresetDetailExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_watermark_preset_detail(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ListWatermarkPresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.list_watermark_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/RelaunchPullToPushTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.relaunch_pull_to_push_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/RestartSpeechTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.restart_speech_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/RestartTranscodingJobExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.restart_transcoding_job(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/ResumeStreamExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.resume_stream(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/SearchSpeechTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.search_speech_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/StopLivePadStreamExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.stop_live_pad_stream(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/StopPullRecordTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.stop_pull_record_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/StopPullToPushTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.stop_pull_to_push_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/TranscodingJobStatusExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    query = {}\n\n    resp = service.transcoding_job_status(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UnBindEncryptDRMExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.un_bind_encrypt_drm(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UnbindCertExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.unbind_cert(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateAuthKeyExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_auth_key(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateCallbackExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_callback(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateCarouselTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_carousel_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateCloudMixTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_cloud_mix_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateDomainVhostExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_domain_vhost(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateEncryptDRMExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_encrypt_drm(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateEncryptHLSExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_encrypt_hls(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateHTTPHeaderConfigExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_http_header_config(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateIPAccessRuleExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_ip_access_rule(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateLivePadPresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_live_pad_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdatePullToPushGroupExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_pull_to_push_group(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdatePullToPushTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_pull_to_push_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateRecordPresetV2Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_record_preset_v2(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateRefererExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_referer(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateRelaySourceV3Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_relay_source_v3(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateRelaySourceV4Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_relay_source_v4(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateSnapshotAuditPresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_snapshot_audit_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateSnapshotPresetV2Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_snapshot_preset_v2(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateSpeechTaskExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_speech_task(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateStreamQuotaConfigExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_stream_quota_config(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateSubtitleTranscodePresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_subtitle_transcode_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateTimeShiftPresetV3Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_time_shift_preset_v3(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateTranscodePresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_transcode_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateWatermarkPresetExample.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_watermark_preset(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/live/v20230101/UpdateWatermarkPresetV2Example.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_service import LiveService\n\nif __name__ == '__main__':\n    service = LiveService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    service.set_ak('ak')\n    service.set_sk('sk')\n\n    body = {}\n\n    resp = service.update_watermark_preset_v2(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/livesaas/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/livesaas/example_client_sdk/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/livesaas/example_client_sdk/example_get_sdk_token_api.py",
    "content": "from volcengine.livesaas.LivesaasService import LivesaasService\n\nif __name__ == '__main__':\n    livesaasService = LivesaasService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    livesaasService.set_ak('AK')\n    livesaasService.set_sk('SK')\n\n    body = {\n        \"ActivityId\": 1,\n        \"Mode\": 1,\n        \"Nickname\": \"\", #当Mode为2时为必传\n        \"UserIdStr\": \"\", #当Mode为2时为必传\n    }\n\n    resp = livesaasService.get_sdk_token_api(body)\n    # resp = await livesaasService.async_get_sdk_token_api(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/livesaas/example_comment/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/livesaas/example_comment/example_delete_chat_api.py",
    "content": "from volcengine.livesaas.LivesaasService import LivesaasService\n\nif __name__ == '__main__':\n    livesaasService = LivesaasService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    livesaasService.set_ak('AK')\n    livesaasService.set_sk('SK')\n\n    body = {\n        \"ActivityId\": 1,\n        \"ChatId\": 1\n    }\n\n    resp = livesaasService.delete_chat_api(body)\n    # resp = await livesaasService.async_delete_chat_api(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/livesaas/example_comment/example_presenter_chat_api.py",
    "content": "from volcengine.livesaas.LivesaasService import LivesaasService\n\nif __name__ == '__main__':\n    livesaasService = LivesaasService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    livesaasService.set_ak('AK')\n    livesaasService.set_sk('SK')\n\n    body = {\n        \"ActivityId\": 1,\n        \"Comment\": \"test\"\n    }\n\n    resp = livesaasService.presenter_chat_api(body)\n    # resp = await livesaasService.async_presenter_chat_api(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/livesaas/example_live_admin/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/livesaas/example_live_admin/example_create_activity_api.py",
    "content": "from volcengine.livesaas.LivesaasService import LivesaasService\n\nif __name__ == '__main__':\n    livesaasService = LivesaasService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    livesaasService.set_ak('AK')\n    livesaasService.set_sk('SK')\n\n    body = {\n        'Name': \"test\",\n        'LiveTime': 1628067360,\n        'CoverImage': \"\",\n        'IsReplayAutoOnlineEnable': 1,\n        'IsWatermark': 0,\n        'ProtectModeCode': \"\",\n        'ViewUrlPath': \"\",\n        'TemplateId': 0\n    }\n\n    resp = livesaasService.create_activity_api(body)\n    # resp = await livesaasService.async_create_activity_api(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/livesaas/example_live_admin/example_delete_activity_api.py",
    "content": "from volcengine.livesaas.LivesaasService import LivesaasService\n\nif __name__ == '__main__':\n    livesaasService = LivesaasService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    livesaasService.set_ak('AK')\n    livesaasService.set_sk('SK')\n\n    body = {\n        'ActivityId': 1,\n    }\n\n    resp = livesaasService.delete_activity_api(body)\n    # resp = await livesaasService.async_delete_activity_api(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/livesaas/example_live_admin/example_list_activity_api.py",
    "content": "from volcengine.livesaas.LivesaasService import LivesaasService\n\nif __name__ == '__main__':\n    livesaasService = LivesaasService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    livesaasService.set_ak('AK')\n    livesaasService.set_sk('SK')\n\n    params = {\n        'IsNeedTotalCount': \"True\",\n        'PageNo': 1,\n        'PageItemCount': 10,\n        'Name': \"\",\n        'Status': 0,\n        'LiveTime': 0,\n        'IsLockPreview': 0\n    }\n\n    resp = livesaasService.list_activity_api(params)\n    # resp = await livesaasService.async_list_activity_api(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/livesaas/example_live_control/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/livesaas/example_live_control/example_get_activity_api.py",
    "content": "from volcengine.livesaas.LivesaasService import LivesaasService\n\nif __name__ == '__main__':\n    livesaasService = LivesaasService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    livesaasService.set_ak('AK')\n    livesaasService.set_sk('SK')\n\n    params = {\n        'ActivityId': 1\n    }\n\n    resp = livesaasService.get_activity_api(params)\n    # resp = await livesaasService.async_get_activity_api(params)\n    print(resp)\n\n"
  },
  {
    "path": "volcengine/example/livesaas/example_live_control/example_get_activity_basic_config_api.py",
    "content": "from volcengine.livesaas.LivesaasService import LivesaasService\n\nif __name__ == '__main__':\n    livesaasService = LivesaasService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    livesaasService.set_ak('AK')\n    livesaasService.set_sk('SK')\n\n    params = {\n        \"ActivityId\": 1\n    }\n\n    resp = livesaasService.get_activity_basic_config_api(params)\n    # resp = await livesaasService.async_get_activity_basic_config_api(params)\n    print(resp)\n\n"
  },
  {
    "path": "volcengine/example/livesaas/example_live_control/example_get_streams_api.py",
    "content": "from volcengine.livesaas.LivesaasService import LivesaasService\n\nif __name__ == '__main__':\n    livesaasService = LivesaasService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    livesaasService.set_ak('AK')\n    livesaasService.set_sk('SK')\n\n    params = {\n        'ActivityId': 1\n    }\n\n    resp = livesaasService.get_streams_api(params)\n    # resp = await livesaasService.async_get_streams_api(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/livesaas/example_live_control/example_update_activity_basic_config_api.py",
    "content": "from volcengine.livesaas.LivesaasService import LivesaasService\n\nif __name__ == '__main__':\n    livesaasService = LivesaasService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    livesaasService.set_ak('AK')\n    livesaasService.set_sk('SK')\n\n    body = {\n        \"ActivityId\": 1,\n        \"Name\": \"test\",\n        \"LiveTime\": 1628130120,\n        \"IsCoverImageEnable\": 1,\n        \"CoverImageUrl\": \"\",\n        \"CoverImageUrlDefault\": \"\",\n        \"IsPcBackImageEnable\": 1,\n        \"PcBackImageUrl\": \"\",\n        \"PcBackImageUrlDefault\": \"\",\n        \"IsMobileBackImageEnable\": 1,\n        \"MobileBackImageUrl\": \"\",\n        \"MobileBackImageUrlDefault\": \"\",\n        \"IsPreviewVideoEnable\": 0,\n        \"PreviewVideoUrl\": \"\",\n        \"PreviewVideoVid\": \"\",\n        \"PreviewVideoVidDefault\": \"\",\n        \"IsPeopleCountEnable\": 0,\n        \"IsHeaderImageEnable\": 0,\n        \"HeaderImageUrl\": \"\",\n        \"IsWatermarkImageEnable\": 0,\n        \"WatermarkImageUrl\": \"\",\n        \"IsThumbUpEnable\": 0,\n        \"ThumbUpUrl\": \"\",\n        \"ThumbUpUrlDefault\": \"\",\n        \"IsShareIconEnable\": 0,\n        \"ShareIconUrl\": \"\",\n        \"ShareIconUrlDefault\": \"\",\n        \"IsCommentTranslateEnable\": 0,\n        \"Announcement\": \"\",\n        \"IsAnnouncementEnable\": 0,\n        \"BackgroundColor\": \"\",\n        \"InteractionColor\": \"\",\n        \"FontColor\": \"\",\n        \"ColorThemeIndex\": \"\",\n        \"IsPCHeaderImageEnable\": 0,\n        \"PCHeaderImageUrl\": \"\",\n        \"IsCountdownEnable\": 0,\n        \"IsAutoStartEnable\": 0,\n        \"IsPageLimitEnable\": 0,\n        \"PageLimitType\": \"\",\n        \"IsLanguageEnable\": 0,\n        \"LanguageType\": [],\n        \"SiteTags\": [{\n            \"Index\": 1,\n            \"Value\": \"\",\n            \"DbIndex\": 1,\n            \"Show\": 0,\n            \"Name\": \"\"\n        }, {\n            \"Index\": 2,\n            \"Value\": \"\",\n            \"DbIndex\": 3,\n            \"Show\": 0,\n            \"Name\": \"\"\n        }, {\n            \"Index\": 3,\n            \"Value\": \"\",\n            \"DbIndex\": 2,\n            \"Show\": 0,\n            \"Name\": \"\"\n        }],\n        \"AutoStartType\": 0,\n        \"IsPlayerTopEnable\": 0,\n        \"PlayerTopType\": [],\n        \"IsReplayAutoOnlineEnable\": 1,\n        \"PreviewVideoId\": 0,\n        \"AccountId\": 0,\n        \"PreviewVideoReviewStatus\": 0,\n        \"DefaultSubtitleLanguage\": \"\",\n        \"SourceSubtitleLanguage\": \"\",\n        \"OpenLiveAvextractorTask\": 0,\n        \"IsTimeShift\": 0,\n        \"PreviewVideoCoverImage\": \"\",\n        \"PreviewVideoMediaName\": \"\",\n        \"IsPreviewPromptEnable\": 1,\n        \"PreviewPrompt\": \"直播即将开始，请稍候\",\n        \"IsReservationEnable\": 0,\n        \"ReservationTime\": 0,\n        \"ReservationText\": \"\",\n        \"WatermarkPosition\": 0,\n        \"IsReplayBulletChat\": 0,\n        \"PresenterChatColor\": \"\",\n        \"IsLiveBulletChat\": 0,\n        \"IsBackgroundBlur\": 0,\n        \"FeedbackMessage\": \"\",\n        \"IsFeedbackEnable\": 0,\n        \"IsThumbUpNumberEnable\": 1\n    }\n\n    resp = livesaasService.update_activity_basic_config_api(body)\n    # resp = await livesaasService.async_update_activity_basic_config_api(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/livesaas/example_live_control/example_update_activity_status_api.py",
    "content": "from volcengine.livesaas.LivesaasService import LivesaasService\n\nif __name__ == '__main__':\n    livesaasService = LivesaasService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    livesaasService.set_ak('AK')\n    livesaasService.set_sk('SK')\n\n    body = {\n        'ActivityId': 1,\n        'IsStreamViewEnable': 3,\n    }\n\n    resp = livesaasService.update_activity_status_api(body)\n    # resp = await livesaasService.async_update_activity_status_api(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/livesaas/example_live_control/example_update_loop_video_api.py",
    "content": "from volcengine.livesaas.LivesaasService import LivesaasService\n\nif __name__ == '__main__':\n    livesaasService = LivesaasService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    livesaasService.set_ak('AK')\n    livesaasService.set_sk('SK')\n\n    body = {\n        \"ActivityId\": 1,\n        \"LineId\": 1,\n        \"LoopNumber\": 1,\n        \"IsShowProgram\": 0,\n        \"LoopVideo\": [{\n            \"VideoCoverImage\": \"\",\n            \"VideoName\": \"test.mp4\",\n            \"VideoVid\": \"\",\n            \"Index\": 1\n        }]\n    }\n\n    resp = livesaasService.update_loop_video_api(body)\n    # resp = await livesaasService.async_update_loop_video_api(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/livesaas/example_live_control/example_update_loop_video_status_api.py",
    "content": "from volcengine.livesaas.LivesaasService import LivesaasService\n\nif __name__ == '__main__':\n    livesaasService = LivesaasService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    livesaasService.set_ak('AK')\n    livesaasService.set_sk('SK')\n\n    body = {\n        \"ActivityId\": 1,\n        \"IsStartLoopVideo\": 1,\n        \"LineId\": 1\n    }\n\n    resp = livesaasService.update_loop_video_status_api(body)\n    # resp = await livesaasService.async_update_loop_video_status_api(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/livesaas/example_live_control/example_update_pull_to_push_api.py",
    "content": "from volcengine.livesaas.LivesaasService import LivesaasService\n\nif __name__ == '__main__':\n    livesaasService = LivesaasService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    livesaasService.set_ak('AK')\n    livesaasService.set_sk('SK')\n\n    body = {\n        'ActivityId': 1,\n        'LineId': 0,\n        'PullStreamUrl': \"\",\n        'PullStreamStatus': 1,\n        'PullStreamMode': 0,\n        'PullStreamLineId': 0,\n        'PullStreamMainBackupMode': 0\n    }\n\n    resp = livesaasService.update_pull_to_push_api(body)\n    # resp = await livesaasService.async_update_pull_to_push_api(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/livesaas/example_replay_admin/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/livesaas/example_replay_admin/example_list_medias_api.py",
    "content": "from volcengine.livesaas.LivesaasService import LivesaasService\n\nif __name__ == '__main__':\n    livesaasService = LivesaasService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    livesaasService.set_ak('AK')\n    livesaasService.set_sk('SK')\n\n    params = {\n        \"ActivityId\": 1,\n        \"IsNeedTotalCount\": \"True\",\n        \"PageNo\": 1,\n        \"PageItemCount\": 10,\n        \"Name\": \"\",\n        \"Vid\": \"\"\n    }\n\n    resp = livesaasService.list_medias_api(params)\n    # resp = await livesaasService.async_list_medias_api(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/livesaas/example_replay_admin/example_update_media_online_status_api.py",
    "content": "from volcengine.livesaas.LivesaasService import LivesaasService\n\nif __name__ == '__main__':\n    livesaasService = LivesaasService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    livesaasService.set_ak('AK')\n    livesaasService.set_sk('SK')\n\n    body = {\n        \"ActivityId\": 1,\n        \"MediaId\": 1,\n        \"OnlineStatus\": 2\n    }\n\n    resp = livesaasService.update_media_online_status_api(body)\n    # resp = await livesaasService.async_update_media_online_status_api(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/livesaas/example_replay_admin/example_upload_replay_api.py",
    "content": "from volcengine.livesaas.LivesaasService import LivesaasService\n\nif __name__ == '__main__':\n    livesaasService = LivesaasService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    livesaasService.set_ak('AK')\n    livesaasService.set_sk('SK')\n\n    body = {\n        \"ActivityId\": 1,\n        \"Media\": {\n            \"Name\": \"test\",\n            \"Vid\": \"\"\n        }\n    }\n\n    resp = livesaasService.upload_replay_api(body)\n    # resp = await livesaasService.async_upload_replay_api(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/maas/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/maas/example_chat.py",
    "content": "import os\nfrom volcengine.maas import MaasService, MaasException, ChatRole\n\n\ndef test_chat(maas, req):\n    try:\n        resp = maas.chat(req)\n        print(resp)\n        print(resp.choice.message.content)\n    except MaasException as e:\n        print(e)\n\n\ndef test_stream_chat(maas, req):\n    try:\n        resps = maas.stream_chat(req)\n        for resp in resps:\n            print(resp)\n            print(resp.choice.message.content)\n    except MaasException as e:\n        print(e)\n\n\nif __name__ == '__main__':\n    maas = MaasService('maas-api.ml-platform-cn-beijing.volces.com', 'cn-beijing')\n\n    maas.set_ak(os.getenv(\"VOLC_ACCESSKEY\"))\n    maas.set_sk(os.getenv(\"VOLC_SECRETKEY\"))\n\n\n    # document: \"https://www.volcengine.com/docs/82379/1099475\"\n    # chat\n    req = {\n        \"model\": {\n            \"name\": \"${YOUR_MODEL_NAME}\"\n        },\n        \"parameters\": {\n            \"max_new_tokens\": 2000,\n            \"temperature\": 0.8\n        },\n        \"messages\": [\n            {\n                \"role\": ChatRole.USER,\n                \"content\": \"天为什么这么蓝？\"\n            }, {\n                \"role\": ChatRole.ASSISTANT,\n                \"content\": \"因为有你\"\n            }, {\n                \"role\": ChatRole.USER,\n                \"content\": \"花儿为什么这么香？\"\n            },\n        ]\n    }\n\n    test_chat(maas, req)\n    test_stream_chat(maas, req)\n"
  },
  {
    "path": "volcengine/example/maas/example_classification.py",
    "content": "import os\nfrom volcengine.maas import MaasService, MaasException\n\n\ndef test_classification(maas, req):\n    try:\n        resp = maas.classification(req)\n        print(resp)\n    except MaasException as e:\n        print(e)\n\n\nif __name__ == '__main__':\n    maas = MaasService('maas-api.ml-platform-cn-beijing.volces.com', 'cn-beijing')\n\n    maas.set_ak(os.getenv(\"VOLC_ACCESSKEY\"))\n    maas.set_sk(os.getenv(\"VOLC_SECRETKEY\"))\n\n    # document: \"https://www.volcengine.com/docs/82379/1099475\"\n    # classification\n    classificationReq = {\n        \"model\": {\n            \"name\": \"${YOUR_MODEL_NAME}\"\n        },\n        \"query\": \"花儿为什么这么香？\",\n        \"labels\": [\"陈述句\", \"疑问句\", \"肯定句\"],\n    }\n\n    test_classification(maas, classificationReq)\n\n"
  },
  {
    "path": "volcengine/example/maas/example_embeddings.py",
    "content": "import os\nfrom volcengine.maas import MaasService, MaasException\n\n\ndef test_embeddings(maas, req):\n    try:\n        resp = maas.embeddings(req)\n        print(resp)\n    except MaasException as e:\n        print(e)\n\n\nif __name__ == '__main__':\n    maas = MaasService('maas-api.ml-platform-cn-beijing.volces.com', 'cn-beijing')\n\n    maas.set_ak(os.getenv(\"VOLC_ACCESSKEY\"))\n    maas.set_sk(os.getenv(\"VOLC_SECRETKEY\"))\n\n    # document: \"https://www.volcengine.com/docs/82379/1099475\"\n    # embeddings\n    embeddingsReq = {\n        \"model\": {\n            \"name\": \"${YOUR_MODEL_NAME}\"\n        },\n        \"input\": [\n            \"天很蓝\",\n            \"海很深\"\n        ]\n    }\n\n    test_embeddings(maas, embeddingsReq)\n"
  },
  {
    "path": "volcengine/example/maas/example_function_call.py",
    "content": "import os\nfrom volcengine.maas import MaasService, MaasException, ChatRole\n\n\ndef test_function_call(maas: MaasService):\n    req = {\n        \"model\": {\"name\": \"${YOUR_MODEL_NAME}\"},\n        \"messages\": [\n            {\"role\": ChatRole.SYSTEM, \"content\": \"如未特殊说明，用户下班时间为下午6点。\"},\n            {\n                \"role\": ChatRole.SYSTEM,\n                \"content\": \"用户ID全部用<<USER_N>>表示，文档ID全部用<<DOC_N>>表示，其中N表示序号1，2，3...\",\n            },\n            {\"role\": ChatRole.USER, \"content\": \"播放陈奕迅的十年\"},\n        ],\n        \"parameters\": {\"temperature\": 0.8, \"max_new_tokens\": 512},\n        \"functions\": [\n            {\n                \"name\": \"EntitySearchTool\",\n                \"description\": \"当用户需要查询办公场景相关实体使用此函数，查询输入的实体对应的信息，实体包括：消息，邮件，文档，待办事项。用户问题里面有id信息优先提取id作为检索条件\",\n                \"parameters\": {\n                    \"properties\": {\n                        \"query\": {\"description\": \"表示用户输入查询实体\", \"type\": \"string\"}\n                    },\n                    \"required\": [\"query\"],\n                    \"type\": \"object\",\n                },\n                \"examples\": ['{\"query\": \"最近3天看过的文档\"}'],\n            },\n            {\n                \"name\": \"EntityUnderstandTool\",\n                \"description\": \"当用户需要对办公实体操作时使用此函数，实体包括：消息，邮件，代办事项\",\n                \"parameters\": {\n                    \"properties\": {\n                        \"entity\": {\"description\": \"表示实体对应的id\", \"type\": \"string\"},\n                        \"operation\": {\n                            \"description\": \"表示任务名称，取值有：总结、校对、提取待办事项\",\n                            \"type\": \"string\",\n                        },\n                    },\n                    \"required\": [\"operation\", \"entity\"],\n                    \"type\": \"object\",\n                },\n                \"examples\": ['{\"operation\": \"总结\", \"entity\": \"<<DOC_0>>\"}'],\n            },\n            {\n                \"name\": \"BookMeetingTool\",\n                \"description\": \"当用户需要预订会议时使用此函数，根据输入的信息解析出会议主题，参会人，会议时间，并预订会议。如果用户没有指定会议开始时间，则取当前系统时间。如果用户没有指定会议结束时间，会议时长默认为1小时结束\",\n                \"parameters\": {\n                    \"properties\": {\n                        \"end_time\": {\"description\": \"表示会议结束时间\", \"type\": \"string\"},\n                        \"participant_ids\": {\n                            \"description\": \"表示参会人id集合，用;隔开，必须有用户本人的id\",\n                            \"type\": \"string\",\n                        },\n                        \"start_time\": {\"description\": \"表示会议开始时间\", \"type\": \"string\"},\n                        \"timezone\": {\n                            \"default\": \"Asia/Shanghai\",\n                            \"description\": \"表示会议所在时区\",\n                            \"type\": \"string\",\n                        },\n                        \"topic\": {\n                            \"default\": \"\",\n                            \"description\": \"表示预订会议的主题\",\n                            \"type\": \"string\",\n                        },\n                    },\n                    \"required\": [\"participant_ids\", \"start_time\", \"end_time\"],\n                    \"type\": \"object\",\n                },\n                \"examples\": [\n                    '{\"topic\": \"今天下午5点跟小周周会日程\", \"participant_ids\": \"<<USER_0>>;<<USER_1>>\", \"start_time\": \"2023-07-18T17:00:00\", \"end_time\": \"2023-07-18T18:00:00\", \"timezone\": \"Asia/Shanghai\"}'\n                ],\n            },\n            {\n                \"name\": \"CodeExecutorPlugin\",\n                \"description\": \"当用户需要执行代码的时候使用此函数，支持go，js，java，python，rust，php，kotlin，dart，c，cpp，c#等编程语言\",\n                \"parameters\": {\n                    \"properties\": {\n                        \"code\": {\"type\": \"string\"},\n                        \"language\": {\"type\": \"string\"},\n                    },\n                    \"required\": [\"language\", \"code\"],\n                    \"type\": \"object\",\n                },\n                \"examples\": [\n                    '{\"language\": \"python3\", \"code\": \"print(\\'hello word\\')\"}'\n                ],\n            },\n            {\n                \"name\": \"MusicPlayer\",\n                \"description\": \"歌曲查询Plugin，当用户需要搜索某个歌手或者歌曲时使用此plugin，给定歌手，歌名等特征返回相关音乐\",\n                \"parameters\": {\n                    \"properties\": {\n                        \"artist\": {\"description\": \"表示歌手名字\", \"type\": \"string\"},\n                        \"description\": {\"description\": \"表示描述信息\", \"type\": \"string\"},\n                        \"song_name\": {\"description\": \"表示歌曲名字\", \"type\": \"string\"},\n                    },\n                    \"required\": [],\n                    \"type\": \"object\",\n                },\n                \"examples\": ['{\"artist\":\"孙燕姿\",\"song_name\":\"遇见\",\"description\":\"\"}'],\n            },\n        ],\n    }\n\n    try:\n        resp = maas.chat(req)\n        print(resp)\n        print(resp.choice.message.content)\n\n        req[\"messages\"].append(\n            {\n                \"role\": resp.choice.message.role,\n                \"content\": resp.choice.message.content,\n                \"name\": resp.choice.message.name,\n                \"function_call\": {\n                    \"name\": resp.choice.message.function_call.name,\n                    \"arguments\": resp.choice.message.function_call.arguments,\n                },\n            }\n        )\n\n        if resp.choice.message.function_call.name != \"\":\n            # Note: 用户必须要首先验证模型输出的 function name 和 argument 是否合法\n            # 1. Name 不一定是 prompt 给出的 function name；\n            # 2. Arguments 不一定是合法的 json；\n            # 3. Arguments 即使是合法的 json，也不一定满足 function 的 Parameters 规范。\n            function_resp = \"通过汽水音乐，为您找到：\\n| 歌手 | 歌名 |\\n| --- | --- |\\n| 陈奕迅 | 十年 (OT: 明年今日) |\\n| 陈奕迅 | 富士山下 |\\n| 陈奕迅 | 最佳损友 |\"\n            req[\"messages\"].append(\n                {\n                    \"role\": ChatRole.FUNCTION,\n                    \"content\": function_resp,\n                    \"name\": resp.choice.message.function_call.name,\n                }\n            )\n        else:\n            # 模型输出的内容可能不是 function call，继续对话即可\n            user_input = \"播放肖斯塔科维奇最伟大的作品\"\n            req[\"messages\"].append(\n                {\n                    \"role\": ChatRole.USER,\n                    \"content\": user_input,\n                }\n            )\n\n        resp = maas.chat(req)\n        print(resp)\n        print(resp.choice.message.content)\n\n    except MaasException as e:\n        print(e)\n\n\nif __name__ == \"__main__\":\n    maas = MaasService(\"maas-api.ml-platform-cn-beijing.volces.com\", \"cn-beijing\")\n\n    maas.set_ak(os.getenv(\"VOLC_ACCESSKEY\"))\n    maas.set_sk(os.getenv(\"VOLC_SECRETKEY\"))\n\n    test_function_call(maas)\n"
  },
  {
    "path": "volcengine/example/maas/example_plugin.py",
    "content": "import os\nfrom volcengine.maas import MaasService, MaasException, ChatRole\n\n\ndef test_chat(maas, req):\n    try:\n        resp = maas.chat(req)\n        print(resp)\n    except MaasException as e:\n        print(e)\n\n\nif __name__ == \"__main__\":\n    maas = MaasService(\"maas-api.ml-platform-cn-beijing.volces.com\", \"cn-beijing\")\n\n    maas.set_ak(os.getenv(\"VOLC_ACCESSKEY\"))\n    maas.set_sk(os.getenv(\"VOLC_SECRETKEY\"))\n\n    # document: \"https://www.volcengine.com/docs/82379/1099475\"\n    req = {\n        \"model\": {\"name\": \"${YOUR_MODEL_NAME}\"},\n        \"parameters\": {\"max_new_tokens\": 2000, \"temperature\": 0.8},\n        \"messages\": [\n            {\"role\": ChatRole.USER, \"content\": \"说一说这周发生的新鲜事儿\"},\n        ],\n        \"plugins\": [\"browsing\"],\n    }\n\n    test_chat(maas, req)\n"
  },
  {
    "path": "volcengine/example/maas/example_tokenize.py",
    "content": "import os\nfrom volcengine.maas import MaasService, MaasException\n\n\ndef test_tokenize(maas, req):\n    try:\n        resp = maas.tokenize(req)\n        print(resp)\n    except MaasException as e:\n        print(e)\n\n\nif __name__ == '__main__':\n    maas = MaasService('maas-api.ml-platform-cn-beijing.volces.com', 'cn-beijing')\n\n    maas.set_ak(os.getenv(\"VOLC_ACCESSKEY\"))\n    maas.set_sk(os.getenv(\"VOLC_SECRETKEY\"))\n\n    # document: \"https://www.volcengine.com/docs/82379/1099475\"\n    # tokenize\n    tokenizeReq = {\n        \"model\": {\n            \"name\": \"${YOUR_MODEL_NAME}\"\n        },\n        \"text\": \"花儿为什么这么香？\",\n    }\n\n    test_tokenize(maas, tokenizeReq)\n"
  },
  {
    "path": "volcengine/example/maas/text_privatization/example_text_privatization.py",
    "content": "from volcengine.maas.text_privatization import ClsPrivConf\nfrom volcengine.maas.text_privatization import make_privatizer\nfrom volcengine.maas.text_privatization import get_bottom_model\n\n\n\nif __name__ == '__main__':\n    # Prepare your tokenizer and embedding model. You can use the `get_bottom_model` method to get the\n    # tokenizer and embedding module of an open source pre-trained model from hugging face.\n    your_tokenizer, your_embedding_model = get_bottom_model(model_id=\"MODEL_ID\")\n    # Initialize a text privatizer instance\n    text_privatizer = make_privatizer(task_type=\"classification\", priv_conf=ClsPrivConf(priv_level=\"3\"))\n    # Load tokenizer and embedding model\n    text_privatizer.load_tokenizer_embedding(tokenizer=your_tokenizer, embedding_model=your_embedding_model)\n    # Given the training data path, use the `fit` method to perform text privatization.\n    text_privatizer.fit(train_path=\"PATH/TO/DATA.jsonl\")\n    # Save\n    text_privatizer.save(out_dir=\"PATH/TO/SAVE\")\n\n\n\n\n\n"
  },
  {
    "path": "volcengine/example/maas/v2/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/maas/v2/audio/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/maas/v2/audio/example_speech.py",
    "content": "import os\nfrom volcengine.maas.v2 import MaasService\nfrom volcengine.maas import MaasException\n\n\ndef test_speech(maas: MaasService, endpoint_id, req, file):\n    request_id = \"\"\n    try:\n        resp = maas.audio.speech.create(endpoint_id, req)\n        request_id = resp.request_id\n        resp.stream_to_file(file)\n        print(f\"request_id: {request_id}\")\n        print(\"finish create audio file.\")\n    except MaasException as e:\n        print(f\"request_id: {request_id}\")\n        print(e)\n\n\nif __name__ == '__main__':\n    maas = MaasService('maas-api.ml-platform-cn-beijing.volces.com', 'cn-beijing')\n\n    maas.set_ak(os.getenv(\"VOLC_ACCESSKEY\"))\n    maas.set_sk(os.getenv(\"VOLC_SECRETKEY\"))\n\n    req = {\n        \"input\": \"你好欢迎光临\",\n        \"voice\": \"zh_male_rap\",\n        \"response_format\": \"mp3\",\n        \"speed\": 1.0\n    }\n\n    endpoint_id = \"{YOUR_ENDPOINT_ID}\"\n    file = \"{YOUR_LOCAL_FILE}\"\n    test_speech(maas, endpoint_id, req, file)\n\n"
  },
  {
    "path": "volcengine/example/maas/v2/example_chat_v2.py",
    "content": "import os\nfrom volcengine.maas.v2 import MaasService\nfrom volcengine.maas import MaasException, ChatRole\n\n\ndef test_chat(maas, endpoint_id, req):\n    try:\n        resp = maas.chat(endpoint_id, req)\n        print(resp)\n    except MaasException as e:\n        print(e)\n\n\ndef test_stream_chat(maas, endpoint_id, req):\n    try:\n        resps = maas.stream_chat(endpoint_id, req)\n        for resp in resps:\n            print(resp)\n    except MaasException as e:\n        print(e)\n\n\nif __name__ == '__main__':\n    maas = MaasService('maas-api.ml-platform-cn-beijing.volces.com', 'cn-beijing')\n\n    maas.set_ak(os.getenv(\"VOLC_ACCESSKEY\"))\n    maas.set_sk(os.getenv(\"VOLC_SECRETKEY\"))\n\n    # document: \"https://www.volcengine.com/docs/82379/1099475\"\n    # chat\n    req = {\n        \"parameters\": {\n            \"max_new_tokens\": 2000,\n            \"temperature\": 0.8\n        },\n        \"messages\": [\n            {\n                \"role\": ChatRole.USER,\n                \"content\": \"天为什么这么蓝\"\n            }, {\n                \"role\": ChatRole.ASSISTANT,\n                \"content\": \"因为有你\"\n            }, {\n                \"role\": ChatRole.USER,\n                \"content\": \"花儿为什么这么香？\"\n            },\n        ]\n    }\n\n    endpoint_id = \"{YOUR_ENDPOINT_ID}\"\n    test_chat(maas, endpoint_id, req)\n    test_stream_chat(maas, endpoint_id, req)\n#\n"
  },
  {
    "path": "volcengine/example/maas/v2/example_chat_with_apikey_v2.py",
    "content": "import os\nfrom volcengine.maas.v2 import MaasService\nfrom volcengine.maas import MaasException, ChatRole\n\n\ndef test_chat(maas, endpoint_id, req):\n    try:\n        resp = maas.chat(endpoint_id, req)\n        print(resp)\n        print(type(resp))\n    except MaasException as e:\n        print(e)\n\n\ndef test_stream_chat(maas, endpoint_id, req):\n    try:\n        resps = maas.stream_chat(endpoint_id, req)\n        for resp in resps:\n            print(resp)\n    except MaasException as e:\n        print(e)\n\n\nif __name__ == '__main__':\n    maas = MaasService('maas-api.ml-platform-cn-beijing.volces.com', 'cn-beijing')\n\n    apikey = \"{YOUR_APIKEY}\"\n    maas.set_apikey(apikey)\n\n    # document: \"https://www.volcengine.com/docs/82379/1099475\"\n    # chat\n    req = {\n        \"parameters\": {\n            \"max_new_tokens\": 2000,\n            \"temperature\": 0.8\n        },\n        \"messages\": [\n            {\n                \"role\": ChatRole.USER,\n                \"content\": \"天为什么这么蓝\"\n            }, {\n                \"role\": ChatRole.ASSISTANT,\n                \"content\": \"因为有你\"\n            }, {\n                \"role\": ChatRole.USER,\n                \"content\": \"花儿为什么这么香？\"\n            },\n        ]\n    }\n\n    endpoint_id = \"{YOUR_ENDPOINT_ID}\"\n    test_chat(maas, endpoint_id, req)\n    test_stream_chat(maas, endpoint_id, req)\n\n"
  },
  {
    "path": "volcengine/example/maas/v2/example_classification_v2.py",
    "content": "import os\nfrom volcengine.maas.v2 import MaasService\nfrom volcengine.maas import MaasException\n\n\ndef test_classification(maas, endpoint_id, req):\n    try:\n        resp = maas.classification(endpoint_id, req)\n        print(resp)\n    except MaasException as e:\n        print(e)\n\n\nif __name__ == '__main__':\n    maas = MaasService('maas-api.ml-platform-cn-beijing.volces.com', 'cn-beijing')\n\n    maas.set_ak(os.getenv(\"VOLC_ACCESSKEY\"))\n    maas.set_sk(os.getenv(\"VOLC_SECRETKEY\"))\n\n    # document: \"https://www.volcengine.com/docs/82379/1099475\"\n    # classification\n    classificationReq = {\n        \"query\": \"花儿为什么这么香？\",\n        \"labels\": [\"陈述句\", \"疑问句\", \"肯定句\"],\n    }\n\n    endpoint_id = \"{YOUR_ENDPOINT_ID}\"\n    test_classification(maas, endpoint_id, classificationReq)\n\n"
  },
  {
    "path": "volcengine/example/maas/v2/example_embeddings_v2.py",
    "content": "import os\nfrom volcengine.maas.v2 import MaasService\nfrom volcengine.maas import MaasException\n\n\ndef test_embeddings(maas, endpoint_id, req):\n    try:\n        resp = maas.embeddings(endpoint_id, req)\n        print(resp)\n    except MaasException as e:\n        print(e)\n\n\nif __name__ == '__main__':\n    maas = MaasService('maas-api.ml-platform-cn-beijing.volces.com', 'cn-beijing')\n\n    maas.set_ak(os.getenv(\"VOLC_ACCESSKEY\"))\n    maas.set_sk(os.getenv(\"VOLC_SECRETKEY\"))\n\n    # document: \"https://www.volcengine.com/docs/82379/1099475\"\n    # embeddings\n    embeddingsReq = {\n        \"input\": [\n            \"天很蓝\",\n            \"海很深\"\n        ]\n    }\n\n    endpoint_id = \"{YOUR_ENDPOINT_ID}\"\n    test_embeddings(maas, endpoint_id, embeddingsReq)\n"
  },
  {
    "path": "volcengine/example/maas/v2/example_tokenize_v2.py",
    "content": "import os\nfrom volcengine.maas.v2 import MaasService\nfrom volcengine.maas import MaasException\n\n\ndef test_tokenize(maas, endpoint_id, req):\n    try:\n        resp = maas.tokenize(endpoint_id, req)\n        print(resp)\n    except MaasException as e:\n        print(e)\n\n\nif __name__ == '__main__':\n    maas = MaasService('maas-api.ml-platform-cn-beijing.volces.com', 'cn-beijing')\n\n    maas.set_ak(os.getenv(\"VOLC_ACCESSKEY\"))\n    maas.set_sk(os.getenv(\"VOLC_SECRETKEY\"))\n\n    # document: \"https://www.volcengine.com/docs/82379/1099475\"\n    # tokenize\n    tokenizeReq = {\n        \"text\": \"花儿为什么这么香？\",\n    }\n\n    endpoint_id = \"{YOUR_ENDPOINT_ID}\"\n    test_tokenize(maas, endpoint_id, tokenizeReq)\n"
  },
  {
    "path": "volcengine/example/maas/v2/image/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/maas/v2/image/example_images_flex_gen.py",
    "content": "import os\nimport base64\nfrom volcengine.maas.v2 import MaasService\nfrom volcengine.maas import MaasException\n\n\ndef test_images_flex_gen(maas, endpoint_id, req):\n    try:\n        resp = maas.images.flex_gen(endpoint_id, req)\n        print(resp)\n    except MaasException as e:\n        print(e)\n\n\nif __name__ == '__main__':\n    maas = MaasService('maas-api.ml-platform-cn-beijing.volces.com', 'cn-beijing')\n\n    maas.set_ak(os.getenv(\"VOLC_ACCESSKEY\"))\n    maas.set_sk(os.getenv(\"VOLC_SECRETKEY\"))\n\n    with open(\"{YOUR_CONTROL_PICTURE_PATH}\", \"rb\") as file:\n        controlImage = base64.b64encode(file.read()).decode('utf-8')\n\n    req = {\n        \"prompt\": \"(sfw:1.0),(masterpiece,best quality,ultra highres),(realistic:1.15),(3D:1.0)\",\n        \"negative_prompt\": \"(embedding:EasyNegative:0.9),(embedding:badhandv4:1.3),terrible,injured,(nsfw:1.0),(nude:1.0)\",\n        \"control_image_list\": [controlImage],\n        \"strength\": 0.75,\n        \"height\": 512,\n        \"width\": 512,\n        \"num_inference_steps\": 20,\n    }\n\n    endpoint_id = \"{YOUR_ENDPOINT_ID}\"\n    test_images_flex_gen(maas, endpoint_id, req)\n"
  },
  {
    "path": "volcengine/example/maas/v2/image/example_images_quick_gen.py",
    "content": "import os\nimport base64\nfrom volcengine.maas.v2 import MaasService\nfrom volcengine.maas import MaasException\n\n\ndef test_images_quick_gen(maas, endpoint_id, req):\n    try:\n        resp = maas.images.quick_gen(endpoint_id, req)\n        print(resp)\n    except MaasException as e:\n        print(e)\n\n\nif __name__ == '__main__':\n    maas = MaasService('maas-api.ml-platform-cn-beijing.volces.com', 'cn-beijing')\n\n    maas.set_ak(os.getenv(\"VOLC_ACCESSKEY\"))\n    maas.set_sk(os.getenv(\"VOLC_SECRETKEY\"))\n\n    with open(\"{YOUR_CONTROL_PICTURE_PATH}\", \"rb\") as file:\n        controlImage = base64.b64encode(file.read()).decode('utf-8')\n\n    req = {\n        \"prompt\": \"(sfw:1.0),(masterpiece,best quality,ultra highres),(realistic:1.15),(3D:1.0)\",\n        \"negative_prompt\": \"(embedding:EasyNegative:0.9),(embedding:badhandv4:1.3),terrible,injured,(nsfw:1.0),(nude:1.0)\",\n        \"control_image_list\": [controlImage],\n        \"parameters\": {\n            \"strength\": 0.75,\n            \"height\": 512,\n            \"width\": 512,\n            \"num_inference_steps\": 20,\n        },\n    }\n\n    endpoint_id = \"{YOUR_ENDPOINT_ID}\"\n    test_images_quick_gen(maas, endpoint_id, req)\n"
  },
  {
    "path": "volcengine/example/nlp/__init__.py",
    "content": "#!/usr/bin/python\n#  -*- coding: utf-8 -*-\n"
  },
  {
    "path": "volcengine/example/nlp/example_essay_auto_grade.py",
    "content": "#  -*- coding: utf-8 -*-\nfrom __future__ import print_function\n\nfrom volcengine.nlp.NLPService import NLPService\n\nif __name__ == '__main__':\n    nlp_service = NLPService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    nlp_service.set_ak('ak')\n    nlp_service.set_sk('sk')\n\n    params = dict()\n\n    form = {\n        \"grade\": \"junior\",\n        \"question\": \"My Beloved Teacher\",\n        \"essay\": \"Sara, who came from Canada is our English Oral teacher. She is loved and respected by many students. What impressed me the most is that she is warm-hearted, generous and easy-going. She always stays optimistic and tries hard to understand every of her student. Besides, she often tells us some interesting stories and jokes in class, so as to make a happy atmosphere for us to study English. She loves teaching so much and has the eagerness to devote her life to Chinese education. Because of her outstanding achievements, she had won lots of rewards, one of which is “Model Teacher”.\",\n    }\n\n    resp = nlp_service.essay_auto_grade(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/nlp/example_keyphrase_extraction_extract.py",
    "content": "#  -*- coding: utf-8 -*-\nfrom __future__ import print_function\n\nfrom volcengine.nlp.NLPService import NLPService\n\nif __name__ == '__main__':\n    nlp_service = NLPService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    nlp_service.set_ak('ak')\n    nlp_service.set_sk('sk')\n\n    params = dict()\n\n    form = {\n        \"request_type\": \"text\",\n        \"title\": \"外交部：中方已同意并愿意安排欧盟及成员国驻华使节访问新疆\",\n        \"content\": \"9月15日，外交部发言人汪文斌主持例行记者会。有记者提问，欧方表示，在9月14日举行的中德欧领导人视频会晤中双方谈及了人权、涉疆、香港等问题，欧方向中方表明了有关关切。中方对此有何评论？汪文斌表示，中方已就昨天举行的中德欧领导人会晤发布了详细的新闻稿。关于人权问题，习近平主席强调，世界上没有放之四海而皆准的人权发展道路，人权保障没有最好，只有更好。各国首先应该做好自己的事情。相信欧方能够解决好自身存在的人权问题。中方不接受人权“教师爷”、反对搞“双重标准”。中方愿同欧方本着相互尊重的原则加强交流，共同进步。会上还讨论了欧盟内部存在的人权问题，如难民问题久拖不决、人道主义危机屡屡上演，一些欧盟成员国种族主义、极端主义、少数族裔问题抬头，反犹太、反穆斯林、反黑人等言论和恶性事件频频发生等等。欧方坦承自身存在的问题，希望同中方本着平等和尊重的原则开展对话，增进相互了解，妥善处理差异和分歧。习近平主席还阐明了中方在涉港、涉疆问题上的原则立场，指出涉港、涉疆问题的实质是维护中国国家主权、安全和统一，保护各族人民安居乐业的权利。中方坚决反对任何人、任何势力在中国制造不稳定、分裂和动乱，坚决反对任何国家干涉中国内政。汪文斌指出，在涉疆问题上，我们一直欢迎包括欧方在内的各国朋友去新疆走一走、看一看，了解新疆的真实情况，而不是道听途说，偏信那些刻意编造的谎言。欧盟及成员国驻华使节提出希望访问新疆，中方已经同意并愿作出安排。现在球在欧方一边。同时我要说明一点，我们反对有罪推定式的调查。\"\n    }\n\n    resp = nlp_service.keyphrase_extraction_extract(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/nlp/example_novel_correction.py",
    "content": "#  -*- coding: utf-8 -*-\nfrom __future__ import print_function\n\nfrom volcengine.nlp.NLPService import NLPService\n\nif __name__ == '__main__':\n    nlp_service = NLPService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    nlp_service.set_ak('ak')\n    nlp_service.set_sk('sk')\n\n    params = dict()\n\n    body = {\n        \"content\": \"好就不见\"\n    }\n\n    resp = nlp_service.novel_correction(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/nlp/example_sentiment_analysis.py",
    "content": "#  -*- coding: utf-8 -*-\nfrom __future__ import print_function\n\nfrom volcengine.nlp.NLPService import NLPService\n\nif __name__ == '__main__':\n    nlp_service = NLPService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    nlp_service.set_ak('ak')\n    nlp_service.set_sk('sk')\n\n    params = dict()\n\n    body = {\n        \"text\": \"我很生气\"\n    }\n\n    resp = nlp_service.sentiment_analysis(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/nlp/example_text_correction_en_correct.py",
    "content": "#  -*- coding: utf-8 -*-\nfrom __future__ import print_function\n\nfrom volcengine.nlp.NLPService import NLPService\n\nif __name__ == '__main__':\n    nlp_service = NLPService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    nlp_service.set_ak('ak')\n    nlp_service.set_sk('sk')\n\n    params = dict()\n\n    form = {\n        \"content\": \"This is a incomplte text test\"\n    }\n\n    resp = nlp_service.text_correction_en_correct(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/nlp/example_text_correction_zh_correct.py",
    "content": "#  -*- coding: utf-8 -*-\nfrom __future__ import print_function\n\nfrom volcengine.nlp.NLPService import NLPService\n\nif __name__ == '__main__':\n    nlp_service = NLPService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    nlp_service.set_ak('ak')\n    nlp_service.set_sk('sk')\n\n    params = dict()\n\n    form = {\n        \"content\": \"粉色露肩群活力亮相\"\n    }\n\n    resp = nlp_service.text_correction_zh_correct(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/nlp/example_text_summarization.py",
    "content": "#  -*- coding: utf-8 -*-\nfrom __future__ import print_function\n\nfrom volcengine.nlp.NLPService import NLPService\n\nif __name__ == '__main__':\n    nlp_service = NLPService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    nlp_service.set_ak('ak')\n    nlp_service.set_sk('sk')\n\n    params = dict()\n\n    form = {\n        \"title\": \"汽车\",\n        \"text\": \"例如会让部件磨损大，使得寿命降低，而且还带来动力降低，油耗越来越高，抖动大等。以前一箱油能跑380公里的，如今却只能跑到350了，无疑也增加了开车成本。\",\n        \"max_len\": 5\n    }\n\n    resp = nlp_service.text_summarization(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/rdspostgresql/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/rdspostgresql/example_create_instance.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.rdspostgresql.rdspostgresql import RdsPostgreSQL\n\n\n# test unit : \"create_instance\" \"create_account\" \"create_white_list\" \"create_database\" \"modify_database_owner\"\ntest_unit = \"create_instance\"\ninstanceID = \"postgres-xxx\"\n\n\ndef test_create_instance(cls):\n    params = {\n        \"Region\": \"cn-north-x\",\n        \"Zone\": \"cn-north-x-a\",\n        \"DBEngine\": \"PostgreSQL\",\n        \"DBEngineVersion\": \"PostgreSQL_12\",       # PostgreSQL Version \"PostgreSQL_12\" \"PostgreSQL_11\"\n        \"InstanceType\": \"HA\",                     # Primary isntance should be \"HA\" Readonly instance should be \"Basic\"\n        \"InstanceSpecName\": \"rds.postgres.1c2g\",  # 1c2g mean 1CPU and 2G Memory\n        \"StorageSpaceGB\": 100,                    # storage(GB)\n        \"Number\": 1,                              # instance number\n        \"StorageType\": \"LocalSSD\",                # storage type should be \"LocalSSD\"\n        \"VpcID\": \"vpc-xxx\",\n        \"ChargeType\": \"PostPaid\",                 # ChargeType currently should be \"PostPaid\"\n        \"InstanceCategory\": \"Primary\",            # Primary instance type should be \"Primary\", readonly instance should be \"ReadOnly\"\n        \"RequestSource\": \"OpenAPI\"\n    }\n    print(cls.create_instance(params))\n\n\ndef test_create_account(cls):\n    params = {\n        \"InstanceId\": instanceID,\n        \"AccountName\": \"user004\",\n        \"AccountPassword\": \"xxx\",\n        \"AccountDesc\": \"\",\n        \"AccountType\": \"Normal\",       # account type \"Super\" or \"Normal\"\n    }\n    print(cls.create_account(params))\n\n\ndef test_create_white_list(cls):\n    params = {\n        \"InstanceId\": instanceID,\n        \"GroupName\": \"hahaha\",\n        \"IPList\": [\"1.1.1.2\"],\n    }\n    print(cls.create_instance_white_list(params))\n\n\ndef test_create_database(cls):\n    params = {\n        \"InstanceId\":       instanceID,\n        \"DBName\":           \"db001\",\n        \"CharacterSetName\": \"utf8\",      # CharacterSet \"utf8\" \"latin1\" or \"ascii\"\n        \"Collate\":          \"CUTF8\",     # Collate \"C\" \"CUTF8\" or \"EnUsUtf8\"\n        \"Ctype\":            \"CUTF8\",     # Ctype \"C\" \"CUTF8\" or \"EnUsUtf8\"\n        \"Owner\":            \"user001\",\n    }\n    print(cls.create_database(params))\n\n\ndef test_modify_database_owner(cls):\n    params = {\n        \"InstanceId\": instanceID,\n        \"DBName\": \"db001\",\n        \"Owner\": \"user001\",\n    }\n    print(cls.modify_database_owner(params))\n\n\nif __name__ == '__main__':\n    service = RdsPostgreSQL(\"cn-north-1\")\n    service.set_ak(\"Your AK\")\n    service.set_sk(\"Your SK\")\n\n    if test_unit == \"create_instance\":\n        test_create_instance(service)\n    elif test_unit == \"create_account\":\n        test_create_account(service)\n    elif test_unit == \"create_white_list\":\n        test_create_white_list(service)\n    elif test_unit == \"create_database\":\n        test_create_database(service)\n    elif test_unit == \"modify_database_owner\":\n        test_modify_database_owner(service)\n"
  },
  {
    "path": "volcengine/example/rtc/RtcService.py",
    "content": "# coding:utf-8\nimport json\nimport threading\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\n\n\nclass RtcService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(RtcService, \"_instance\"):\n            with RtcService._instance_lock:\n                if not hasattr(RtcService, \"_instance\"):\n                    RtcService._instance = object.__new__(cls)\n        return RtcService._instance\n\n    def __init__(self):\n        self.service_info = RtcService.get_service_info()\n        self.api_info = RtcService.get_api_info()\n        super(RtcService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info():\n        service_info = ServiceInfo(\"rtc.volcengineapi.com\", {'Accept': 'application/json'},\n                                   Credentials('', '', 'rtc', 'cn-north-1'), 5, 5)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\n            \"StartRecord\": ApiInfo(\"POST\", \"/\", {\"Action\": \"StartRecord\", \"Version\": \"2022-06-01\"}, {}, {}),\n            \"StopRecord\": ApiInfo(\"POST\", \"/\", {\"Action\": \"StopRecord\", \"Version\": \"2022-06-01\"}, {}, {}),\n            \"GetRecordTask\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetRecordTask\", \"Version\": \"2022-06-01\"}, {}, {}),\n        }\n        return api_info\n\n    def start_record(self, body):\n        res = self.json(\"StartRecord\", {}, body)\n        if res == '':\n            raise Exception(\"StartRecord: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def stop_record(self, body):\n        res = self.json(\"StopRecord\", {}, body)\n        if res == '':\n            raise Exception(\"StopRecord: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def get_record_task(self, params):\n        res = self.get(\"GetRecordTask\", params)\n        if res == '':\n            raise Exception(\"GetRecordTask: empty response\")\n        res_json = json.loads(res)\n        return res_json\n"
  },
  {
    "path": "volcengine/example/rtc/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/rtc/example_get_record_task.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.example.rtc.RtcService import RtcService\n\nif __name__ == '__main__':\n    # using your own AK and SK\n    AK = 'Your_AK'\n    SK = 'Your_SK'\n\n    # Firstly , init an RTCService Class\n    rtc_service = RtcService()\n\n    # Then , Set your AK and SK\n    rtc_service.set_ak(AK)\n    rtc_service.set_sk(SK)\n\n    # You can using this API now ! Here are some Examples\n    params = dict()\n    params['AppId'] = 'Your_AppId'\n    params['RoomId'] = 'Your_RoomId'\n    params['TaskId'] = 'Your_TaskId'\n\n    resp = rtc_service.get_record_task(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/rtc/example_start_record.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.example.rtc.RtcService import RtcService\n\n\ndef set_encode():\n    encode = dict()\n    encode['VideoWidth'] = 1920\n    encode['VideoHeight'] = 1080\n    encode['VideoFps'] = 15\n    encode['VideoBitrate'] = 4000\n    encode['VideoCodec'] = 0\n    encode['VideoGop'] = 4\n    encode['AudioCodec'] = 0\n    encode['AudioProfile'] = 0\n    encode['AudioBitrate'] = 64\n    encode['AudioSampleRate'] = 48000\n    encode['AudioChannels'] = 2\n    return encode\n\n\ndef set_layout():\n    layout = dict()\n    layout['LayoutMode'] = 0\n    return layout\n\n\ndef set_control():\n    control = dict()\n    control['MediaType'] = 0\n    control['FrameInterpolationMode'] = 0\n    control['MaxIdleTime'] = 180\n    control['MaxRecordTime'] = 0\n    return control\n\n\ndef set_file_format_config():\n    config = dict()\n    config['FileFormat'] = ['MP4']\n    return config\n\n\ndef set_storage_config():\n    config = dict()\n    config['Type'] = 0\n    config['TosConfig'] = set_tos_config()\n    return config\n\n\ndef set_tos_config():\n    config = dict()\n    config['AccountId'] = 'Your_AccountId'\n    config['Region'] = 0\n    config['Bucket'] = 'Your_Bucket'\n    return config\n\n\nif __name__ == '__main__':\n    # using your own AK and SK\n    AK = 'Your_AK'\n    SK = 'Your_SK'\n\n    # Firstly , init an RTCService Class\n    rtc_service = RtcService()\n\n    # Then , Set your AK and SK\n    rtc_service.set_ak(AK)\n    rtc_service.set_sk(SK)\n\n    # You can using this API now ! Here are some Examples\n    body = dict()\n    body['AppId'] = 'Your_AppId'\n    body['BusinessId'] = 'Your_BusinessId'\n    body['RoomId'] = 'Your_RoomId'\n    body['TaskId'] = 'Your_TaskId'\n    body['RecordMode'] = 0\n    body['Encode'] = set_encode()\n    body['Layout'] = set_layout()\n    body['Control'] = set_control()\n    body['FileFormatConfig'] = set_file_format_config()\n    body['StorageConfig'] = set_storage_config()\n\n    body = json.dumps(body)\n    resp = rtc_service.start_record(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/rtc/example_stop_reocrd.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.example.rtc.RtcService import RtcService\n\nif __name__ == '__main__':\n    # using your own AK and SK\n    AK = 'Your_AK'\n    SK = 'Your_SK'\n\n    # Firstly , init an RTCService Class\n    rtc_service = RtcService()\n\n    # Then , Set your AK and SK\n    rtc_service.set_ak(AK)\n    rtc_service.set_sk(SK)\n\n    # You can using this API now ! Here are some Examples\n    body = dict()\n    body['AppId'] = 'Your_AppId'\n    body['BusinessId'] = 'Your_BusinessId'\n    body['RoomId'] = 'Your_RoomId'\n    body['TaskId'] = 'Your_TaskId'\n\n    body = json.dumps(body)\n    resp = rtc_service.stop_record(body)\n    print(resp)\n\n"
  },
  {
    "path": "volcengine/example/sms/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/sms/example_apply_signature_ident.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.sms.SmsService import SmsService\nfrom volcengine.const.Const import *\n\nif __name__ == \"__main__\":\n    # cn\n    sms_service = SmsService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak(\"ak\")\n    sms_service.set_sk(\"sk\")\n    # It is recommended to use this domain name with a CDN.\n    sms_service.set_host(\"sms-api.volcengineapi.com\")\n\n    body = {\n        \"purpose\": 1,\n        \"materialName\": \"名称\",\n        \"businessInfo\": {\n            \"businessCertificateType\": 1,\n            \"businessCertificate\": {\n                \"fileContent\": \"data:image/jpg;base64,IPV*****************************************************************CYII=\",\n                \"fileSuffix\": \"jpg\",\n                \"fileType\": 1,\n                \"fileUrl\": \"https://url\",\n            },\n            \"businessCertificateName\": \"xx公司\",\n            \"unifiedSocialCreditIdentifier\": \"Zf6m\",\n            \"businessCertificateValidityPeriodStart\": \"2024-01-12\",\n            \"businessCertificateValidityPeriodEnd\": \"2024-01-12\",\n            \"legalPersonName\": \"陈xx\",\n        },\n        \"operatorPerson\": {\n            \"certificateType\": 0,\n            \"personCertificate\": [\n                {\n                    \"fileContent\": \"data:image/jpg;base64,IPV*****************************************************************CYII=\",\n                    \"fileSuffix\": \"jpg\",\n                    \"fileType\": 8,\n                    \"fileUrl\": \"https://url\",\n                },\n                {\n                    \"fileContent\": \"data:image/jpg;base64,IPV*****************************************************************CYII=\",\n                    \"fileSuffix\": \"jpg\",\n                    \"fileType\": 9,\n                    \"fileUrl\": \"https://url\",\n                },\n            ],\n            \"personName\": \"陈xx\",\n            \"personIDCard\": \"41000000000\",\n            \"personMobile\": \"13800000\",\n        },\n        \"responsiblePersonInfo\": {\n            \"certificateType\": 0,\n            \"personCertificate\": [\n                {\n                    \"fileContent\": \"data:image/jpg;base64,IPV*****************************************************************CYII=\",\n                    \"fileSuffix\": \"jpg\",\n                    \"fileType\": 10,\n                    \"fileUrl\": \"https://url\",\n                },\n                {\n                    \"fileContent\": \"data:image/jpg;base64,IPV*****************************************************************CYII=\",\n                    \"fileSuffix\": \"jpg\",\n                    \"fileType\": 11,\n                    \"fileUrl\": \"https://url\",\n                },\n            ],\n            \"personName\": \"陈xx\",\n            \"personIDCard\": \"41000000000\",\n            \"personMobile\": \"13800000\",\n        },\n    }\n\n    resp = sms_service.apply_signature_ident(body)\n    # {\n    #     \"ResponseMetadata\": {\n    #         \"RequestId\": \"202404252055144D6C4FB9957172CF8034\",\n    #         \"Action\": \"BatchBindSignatureIdent\",\n    #         \"Version\": \"2021-01-11\",\n    #         \"Service\": \"volcSMS\",\n    #         \"Region\": \"cn-north-1\"\n    #     },\n    #     \"Result\": {\n    #         \"id\": 17,\n    #     }\n    # }\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_apply_sms_signature.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport base64\nimport json\n\nfrom volcengine.const.Const import *\nfrom volcengine.sms.SmsService import SmsService\n\nif __name__ == '__main__':\n    # base64 encode func\n    def to_base64_str(file):\n        with open(file, 'rb') as fileObj:\n            image_data = fileObj.read()\n            return base64.b64encode(image_data).decode('utf-8')\n\n    # cn\n    sms_service = SmsService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak('ak')\n    sms_service.set_sk('sk')\n    # sms_service.set_host('host')\n\n    body = {\n        \"SubAccount\": \"subAccount\",\n        \"Content\": \"content\",\n        \"Desc\": \"description\",\n        \"Source\": \"公司名称/公司缩写\",\n        \"Domain\": \"网站域名\",\n        \"UploadFileList\": [{\n            \"FileType\": DOC_TYPE_THREE_IN_ONE,\n            \"FileContent\": to_base64_str(\"图片.jpg\"),\n            \"FileSuffix\": \"jpg\"\n        }],\n        \"Purpose\": SIGN_PURPOSE_FOR_OWN,\n        \"SignatureIdentificationID\": 12\n    }\n\n    resp = sms_service.apply_sms_signature(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_apply_sms_signature_v2.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.sms.SmsService import SmsService\nfrom volcengine.const.Const import *\n\nif __name__ == \"__main__\":\n    # cn\n    sms_service = SmsService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak(\"ak\")\n    sms_service.set_sk(\"sk\")\n    # It is recommended to use this domain name with a CDN.\n    sms_service.set_host(\"sms-api.volcengineapi.com\")\n\n    body = {\n        \"subAccount\": \"abc\",\n        \"purpose\": SIGN_PURPOSE_FOR_OWN,\n        \"source\": SIGN_SOURCE_APP,\n        \"content\": \"测试签名\",\n        \"desc\": \"000000\",\n        \"domain\": \"000000\",\n        \"signatureIdentificationID\": 123,\n        \"appIcp\": {\n            \"appIcpFilling\": \"APPICP测试备案\",\n            \"appIcpFileList\": [\n                {\n                    \"fileSuffix\": \"jpg\",\n                    \"fileUrl\": \"http:\",\n                    \"fileType\": DOC_TYPE_APP_ICP_CERTIFICATE\n                }\n            ]\n        },\n        \"trademark\": {\n            \"trademarkCn\": \"商标中文\",\n            \"trademarkEn\": \"english\",\n            \"trademarkNumber\": \"商标注册号1\",\n            \"trademarkFileList\": [\n                {\n                    \"fileSuffix\": \"jpg\",\n                    \"fileUrl\": \"http:\",\n                    \"fileType\": DOC_TYPE_TRADEMARK_CERTIFICATE\n                },\n                {\n                    \"fileSuffix\": \"jpg\",\n                    \"fileUrl\": \"http:\",\n                    \"fileType\": DOC_TYPE_TRADEMARK_CERTIFICATE\n                }\n            ]\n        }\n    }\n\n    resp = sms_service.apply_signature_ident(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_apply_sms_template.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.const.Const import *\nfrom volcengine.sms.SmsService import SmsService\n\nif __name__ == '__main__':\n    # cn\n    sms_service = SmsService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak('ak')\n    sms_service.set_sk('sk')\n    # sms_service.set_host('host')\n\n    body = {\n        \"SubAccount\": \"subAccount\",\n        \"Area\": AREA_CN,\n        \"ChannelType\": SMS_CHANNEL_TYPE_CN_MKT,\n        \"Content\": \"We're offering our xxxx community 20% off with code THANKYOU. It's our way of showing our \"\n                   \"appreciation to you for standing by us in this time. Shop Now: \"\n                   \"https://webhook.site/edd2b39a-6c8d-4161-a310-36a470c840d4 T退订\",\n        \"Desc\": \"description\",\n        \"Name\": \"template_name\",\n        \"ShortUrlConfig\": {\n            \"IsEnabled\": ENABLE_STATUS_ENABLE,\n            \"IsNeedClickDetails\": ENABLE_STATUS_NOT_ENABLE\n        }\n    }\n\n    resp = sms_service.apply_sms_template(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_apply_vms_template.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport base64\nimport json\n\nfrom volcengine.const.Const import *\nfrom volcengine.sms.SmsService import SmsService\n\nif __name__ == '__main__':\n    # base64 encode func\n    def to_base64_str(file):\n        with open(file, 'rb') as fileObj:\n            image_data = fileObj.read()\n            return base64.b64encode(image_data).decode('utf-8')\n    # cn\n    sms_service = SmsService()\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak('ak')\n    sms_service.set_sk('sk')\n    # sms_service.set_host('host')\n    file_base64_string = to_base64_str(\"媒体文件路径\")\n    body = {\n        \"subAccount\": \"subAccount\",\n        \"name\": \"SDK测试\",\n        \"theme\": \"SDK测试视频短信\",\n        \"signature\": \"签名\",\n        \"channelType\": \"CN_VMS\",\n        \"contents\": [\n            {\n                \"sourceType\": SOURCE_TYPE_TEXT,\n                \"content\": \"火山引擎，做企业好的伙伴\"\n            },\n            {\n                # choose the midea type\n                \"sourceType\": SOURCE_TYPE_IMAGE_GIF,\n                \"content\": file_base64_string\n            }\n        ]\n    }\n\n    resp = sms_service.apply_vms_template(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_batch_bind_signature_ident.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.sms.SmsService import SmsService\nfrom volcengine.const.Const import *\n\nif __name__ == \"__main__\":\n    # cn\n    sms_service = SmsService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak(\"ak\")\n    sms_service.set_sk(\"sk\")\n    # It is recommended to use this domain name with a CDN.\n    sms_service.set_host(\"sms-api.volcengineapi.com\")\n\n    body = {\"subAccount\": \"cYyUq453\", \"signatures\": [\"签名1\", \"签名2\"], \"id\": 123}\n\n    resp = sms_service.batch_bind_signature_ident(body)\n    # {\n    #     \"ResponseMetadata\": {\n    #         \"RequestId\": \"202404252055144D6C4FB9957172CF8034\",\n    #         \"Action\": \"BatchBindSignatureIdent\",\n    #         \"Version\": \"2021-01-11\",\n    #         \"Service\": \"volcSMS\",\n    #         \"Region\": \"cn-north-1\"\n    #     },\n    #     \"Result\": {\n    #         \"msg\": \"success\",\n    #     }\n    # }\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_conversion.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.sms.SmsService import SmsService\n\nif __name__ == '__main__':\n    # cn\n    sms_service = SmsService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak('ak')\n    sms_service.set_sk('sk')\n    # sms_service.set_host('host')\n\n    body = {\n        \"MessageIDs\": [\"testMsgId\"]\n    }\n\n    resp = sms_service.conversion(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_delete_signature.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.sms.SmsService import SmsService\n\nif __name__ == '__main__':\n    # cn\n    sms_service = SmsService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak('ak')\n    sms_service.set_sk('sk')\n    # sms_service.set_host('host')\n\n    body = {\n        \"SubAccount\": \"subAccount\",\n        \"Id\": \"id\",\n        \"IsOrder\": True\n    }\n\n    resp = sms_service.delete_signature(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_delete_sms_template.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.const.Const import REGION_AP_SINGAPORE1\nfrom volcengine.sms.SmsService import SmsService\n\nif __name__ == '__main__':\n    # oversea\n    # sms_service = SmsService(REGION_AP_SINGAPORE1)\n    # cn\n    sms_service = SmsService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak('ak')\n    sms_service.set_sk('sk')\n    # sms_service.set_host('host')\n\n    body = {\n        \"subAccount\": \"subAccount\",\n        \"id\": \"id\",\n        \"isOrder\": True\n    }\n\n    resp = sms_service.delete_sms_template(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_get_signature_and_order_list.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.const.Const import REGION_AP_SINGAPORE1, AREA_OVERSEAS\nfrom volcengine.sms.SmsService import SmsService\n\nif __name__ == '__main__':\n    # cn\n    sms_service = SmsService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak('ak')\n    sms_service.set_sk('sk')\n    # sms_service.set_host('host')\n\n    param = {\n        \"subAccount\": \"subAccount\",\n        \"signature\": \"sign\",\n        \"pageIndex\": 1,\n        \"pageSize\": 10\n    }\n\n    resp = sms_service.get_signature_and_order_list(param)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_get_signature_ident_list.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.sms.SmsService import SmsService\nfrom volcengine.const.Const import *\n\nif __name__ == \"__main__\":\n    # cn\n    sms_service = SmsService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak(\"ak\")\n    sms_service.set_sk(\"sk\")\n    # It is recommended to use this domain name with a CDN.\n    sms_service.set_host(\"sms-api.volcengineapi.com\")\n\n    body = {\"ids\": [1, 23], \"pageIndex\": 1, \"pageSize\": 15}\n\n    resp = sms_service.get_signature_ident_list(body)\n    # {\n    #     \"ResponseMetadata\": {\n    #         \"RequestId\": \"202404252055144D6C4FB9957172CF8034\",\n    #         \"Action\": \"GetSignatureIdentList\",\n    #         \"Version\": \"2021-01-11\",\n    #         \"Service\": \"volcSMS\",\n    #         \"Region\": \"cn-north-1\",\n    #     },\n    #     \"Result\": {\n    #         \"list\": [\n    #             {\n    #                 \"id\": 953,\n    #                 \"purpose\": 1,\n    #                 \"materialName\": \"name\",\n    #                 \"businessCertificateName\": \"xx公司\",\n    #                 \"operatorPersonName\": \"陈xx\",\n    #                 \"responsiblePersonName\": \"陈xx\",\n    #                 \"effectSignatures\": [\"签名\"],\n    #             }\n    #         ],\n    #         \"total\": 1,\n    #     },\n    # }\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_get_sms_send_details.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.sms.SmsService import SmsService\nfrom volcengine.const.Const import *\n\nif __name__ == \"__main__\":\n    # cn\n    sms_service = SmsService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak(\"ak\")\n    sms_service.set_sk(\"sk\")\n    # It is recommended to use this domain name with a CDN.\n    sms_service.set_host('sms-api.volcengineapi.com')\n\n    body = {\n        \"subAccount\": \"subAccount\",\n        \"phoneNumber\": \"xxxxxx\",\n        \"messageId\": \"\",\n        \"sendDate\": \"20240424\",\n        \"pageIndex\": 1,\n        \"pageSize\": 15\n    }\n\n\n    resp = sms_service.get_sms_send_details(body)\n    # {\n    #     \"ResponseMetadata\": {\n    #         \"RequestId\": \"202404252055144D6C4FB9957172CF8034\",\n    #         \"Action\": \"GetSmsSendDetails\",\n    #         \"Version\": \"2021-01-11\",\n    #         \"Service\": \"volcSMS\",\n    #         \"Region\": \"cn-north-1\"\n    #     },\n    #     \"Result\": {\n    #         \"account\": \"xxxxxxxx\",\n    #         \"sendDetailsResults\": [\n    #             {\n    #                 \"status\": 3,\n    #                 \"errorCode\": \"0\",\n    #                 \"errorMessage\": \"发送成功\",\n    #                 \"phoneNumber\": \"152********\",\n    #                 \"signature\": \"xx\",\n    #                 \"templateID\": \"xxx\",\n    #                 \"content\": \"xxxxxx\",\n    #                 \"channelType\": \"CN_MKT\",\n    #                 \"messageId\": \"xxxxxxxxxx\",\n    #                 \"msgCount\": 1,\n    #                 \"sendTime\": 1713951918107,\n    #                 \"receiptTime\": 1713951925706\n    #             }\n    #         ],\n    #         \"subAccount\": \"xxxxxx\",\n    #         \"total\": 1\n    #     }\n    # }\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_get_sms_template_and_order_list.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.const.Const import AREA_CN\nfrom volcengine.sms.SmsService import SmsService\n\nif __name__ == '__main__':\n    # cn\n    sms_service = SmsService()\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak('ak')\n    sms_service.set_sk('sk')\n    # sms_service.set_host('host')\n\n    param = {\n        \"subAccount\": \"subAccount\",\n        \"area\": AREA_CN,\n        \"pageIndex\": 1,\n        \"pageSize\": 10\n    }\n    resp = sms_service.get_sms_template_and_order_list(param)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_get_sub_account_detail.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.const.Const import REGION_AP_SINGAPORE1\nfrom volcengine.sms.SmsService import SmsService\n\nif __name__ == '__main__':\n    # cn\n    sms_service = SmsService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak(\"ak\")\n    sms_service.set_sk(\"sk\")\n    # sms_service.set_host('host')\n\n    param = {\n        \"subAccount\": \"subAccount\"\n    }\n\n    resp = sms_service.get_sub_account_detail(param)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_get_sub_account_list.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.const.Const import REGION_AP_SINGAPORE1\nfrom volcengine.sms.SmsService import SmsService\n\nif __name__ == '__main__':\n    # SmsService is no longer support SG endpoint\n    # cn\n    sms_service = SmsService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak('ak')\n    sms_service.set_sk('sk')\n    # sms_service.set_host('host')\n\n    param = {\n        \"subAccountName\": \"\",\n        \"pageIndex\": 1,\n        \"pageSize\": 1\n    }\n\n    resp = sms_service.get_sub_account_list(param)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_insert_sms_sub_account.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.sms.SmsService import SmsService\nfrom volcengine.const.Const import *\n\nif __name__ == '__main__':\n    # cn\n    sms_service = SmsService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak('ak')\n    sms_service.set_sk('sk')\n    # sms_service.set_host('host')\n\n    body = {\n        \"subAccountName\": \"smsAccount\",\n        \"desc\": \"desc\",\n    }\n\n    resp = sms_service.insert_sms_sub_account(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_send_batch_sms.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.const.Const import REGION_AP_SINGAPORE1\nfrom volcengine.sms.SmsService import SmsService\n\nif __name__ == '__main__':\n    # cn\n    sms_service = SmsService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak('ak')\n    sms_service.set_sk('sk')\n    # sms_service.set_host('host')\n\n    body = {\n        \"SmsAccount\": \"subAccount\",\n        \"Sign\": \"signature\",\n        \"From\": \"BytePlus\",\n        \"TemplateID\": \"ST_xxx\",\n        \"Messages\": [{\"TemplateParam\": \"{\\\"code\\\": \\\"1234\\\"}\", \"PhoneNumber\": \"+65xxxxxxxx\"}],\n        \"Tag\": \"tag\",\n    }\n    resp = sms_service.send_batch_sms(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_send_sms.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.sms.SmsService import SmsService\nfrom volcengine.const.Const import *\n\nif __name__ == '__main__':\n    sms_service = SmsService()\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak('ak')\n    sms_service.set_sk('sk')\n    # sms_service.set_host('host')\n\n    body = {\n        \"SmsAccount\": \"smsAccount\",\n        \"Sign\": \"sign\",\n        \"TemplateID\": \"ST_xxx\",\n        \"TemplateParam\": \"{\\\"code\\\": \\\"1234\\\"}\",\n        \"PhoneNumbers\": \"188xxxxxxxx\",\n        \"Tag\": \"tag\",\n    }\n\n    body = json.dumps(body)\n    resp = sms_service.send_sms(body)\n    print(resp)\n\n    body = {\n        \"SmsAccount\": \"smsAccount\",\n        \"Sign\": \"sign\",\n        \"TemplateID\": \"ST_xxx\",\n        \"PhoneNumber\": \"188xxxxxxxx\",\n        \"CodeType\": 6,\n        \"TryCount\": 3,\n        \"ExpireTime\": 240,\n        \"Scene\": \"Test\"\n    }\n    body = json.dumps(body)\n    resp = sms_service.send_sms_verify_code(body)\n    print(resp)\n\n    body = {\n        \"SmsAccount\": \"smsAccount\",\n        \"PhoneNumber\": \"188xxxxxxxx\",\n        \"Scene\": \"Test\",\n        \"Code\": \"123456\"\n    }\n    body = json.dumps(body)\n    resp = sms_service.check_sms_verify_code(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_send_vms.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.sms.SmsService import SmsService\nfrom volcengine.const.Const import *\n\nif __name__ == '__main__':\n    sms_service = SmsService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak('ak')\n    sms_service.set_sk('sk')\n    # sms_service.set_host('host')\n\n    body = {\n        \"SmsAccount\": \"subAccount\",\n        \"TemplateID\": \"templateId\",\n        # enable TemplateParam if there is template param in your template text content\n        # \"TemplateParam\": \"{\\\"code\\\": \\\"111\\\"}\",\n        \"PhoneNumbers\": \"188********\",\n        \"Tag\": \"tag\",\n    }\n\n    body = json.dumps(body)\n    resp = sms_service.send_sms(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_update_sms_signature.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.sms.SmsService import SmsService\nfrom volcengine.const.Const import *\n\nif __name__ == \"__main__\":\n    # cn\n    sms_service = SmsService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak(\"ak\")\n    sms_service.set_sk(\"sk\")\n    # It is recommended to use this domain name with a CDN.\n    sms_service.set_host(\"sms-api.volcengineapi.com\")\n\n    body = {\n        \"subAccount\": \"8163cd74\",\n        \"purpose\": SIGN_PURPOSE_FOR_OWN,\n        \"source\": SIGN_SOURCE_APP,\n        \"content\": \"测试签名\",\n        \"desc\": \"000000\",\n        \"domain\": \"000000\",\n        \"signatureIdentificationID\": 814,\n        \"appIcp\": {\n            \"appIcpFilling\": \"APPICP测试备案\",\n            \"appIcpFileList\": [\n                {\n                    \"fileSuffix\": \"jpg\",\n                    \"fileUrl\": \"http:\",\n                    \"fileType\": DOC_TYPE_APP_ICP_CERTIFICATE\n                }\n            ]\n        },\n        \"trademark\": {\n            \"trademarkCn\": \"商标中文\",\n            \"trademarkEn\": \"english\",\n            \"trademarkNumber\": \"商标注册号1\",\n            \"trademarkFileList\": [\n                {\n                    \"fileSuffix\": \"jpg\",\n                    \"fileUrl\": \"http:\",\n                    \"fileType\": DOC_TYPE_TRADEMARK_CERTIFICATE\n                },\n                {\n                    \"fileSuffix\": \"jpg\",\n                    \"fileUrl\": \"http:\",\n                    \"fileType\": DOC_TYPE_TRADEMARK_CERTIFICATE\n                }\n            ]\n        }\n    }\n\n    resp = sms_service.apply_signature_ident(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sms/example_vms_template_query.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport base64\nimport json\n\nfrom volcengine.const.Const import *\nfrom volcengine.sms.SmsService import SmsService\n\nif __name__ == '__main__':\n    # base64 encode func\n    def to_base64_str(file):\n        with open(file, 'rb') as fileObj:\n            image_data = fileObj.read()\n            return base64.b64encode(image_data).decode('utf-8')\n\n    # cn\n    sms_service = SmsService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    sms_service.set_ak('ak')\n    sms_service.set_sk('sk')\n    # sms_service.set_host('host')\n    body = {\n        \"SubAccount\": \"subAccount\",\n        \"TemplateId\": \"templateId\"\n    }\n\n    resp = sms_service.get_vms_template_status(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/sts/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/sts/example_assume_role.py",
    "content": "# coding:utf-8\n\nfrom volcengine.sts.StsService import StsService\n\nif __name__ == '__main__':\n    stsService = StsService()\n    stsService.set_ak(\"your ak\")\n    stsService.set_sk(\"your sk\")\n\n    params = {\n        \"DurationSeconds\": \"900\",\n        \"RoleSessionName\": \"just_for_test\",\n        \"RoleTrn\": \"trn:iam::yourAccountID:role/yourRole\"\n    }\n\n    print(stsService.assume_role(params))\n"
  },
  {
    "path": "volcengine/example/tls/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/tls/example_alarm.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import *\n\n\nif __name__ == \"__main__\":\n    # 初始化客户端，推荐通过环境变量动态获取火山引擎密钥等身份认证信息，以免AccessKey硬编码引发数据安全风险。详细说明请参考 https://www.volcengine.com/docs/6470/1166455\n    # 使用STS时，ak和sk均使用临时密钥，且设置VOLCENGINE_TOKEN；不使用STS时，VOLCENGINE_TOKEN部分传空\n    endpoint = os.environ[\"VOLCENGINE_ENDPOINT\"]\n    region = os.environ[\"VOLCENGINE_REGION\"]\n    access_key_id = os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"]\n    access_key_secret = os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"]\n\n    # 实例化TLS客户端\n    tls_service = TLSService(endpoint, access_key_id, access_key_secret, region)\n    now = str(int(time.time()))\n\n    # 创建日志项目\n    create_project_request = CreateProjectRequest(project_name=\"project-name-\" + now, region=region,\n                                                  description=\"project-description\")\n    create_project_response = tls_service.create_project(create_project_request)\n    project_id = create_project_response.get_project_id()\n\n    # 创建日志主题\n    create_topic_request = CreateTopicRequest(topic_name=\"topic-name-\" + now, project_id=project_id,\n                                              ttl=3650, description=\"topic-description\", shard_count=2)\n    create_topic_response = tls_service.create_topic(create_topic_request)\n    topic_id = create_topic_response.get_topic_id()\n\n    # 创建告警组\n    # 请根据您的需要，填写alarm_notify_group_name、notify_type和receivers等参数\n    # CreateAlarmNotifyGroup API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112220\n    receiver = Receiver(receiver_type=\"User\", receiver_names=[\"chenlei_test_sy_7_subuser1\"], receiver_channels=[\"Email\", \"Sms\"],\n                        start_time=\"00:00:00\", end_time=\"23:59:59\")\n    create_alarm_notify_group_request = CreateAlarmNotifyGroupRequest(\n        alarm_notify_group_name=\"alarm-notify-group-name-\" + now,\n        notify_type=[\"Trigger\", \"Recovery\"],\n        receivers=[receiver],)\n    create_alarm_notify_group_response = tls_service.create_alarm_notify_group(create_alarm_notify_group_request)\n    alarm_notify_group_id = create_alarm_notify_group_response.get_alarm_notify_group_id()\n\n    # 获取不存在告警组的测试\n    # 请根据您的需要，填写alarm_notify_group_name等参数\n    # DescribeAlarmNotifyGroups API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112223\n    describe_alarm_notify_groups_request = DescribeAlarmNotifyGroupsRequest(alarm_notify_group_id=\"no-exists-notify-group-id\" + now,)\n    describe_alarm_notify_groups_response = tls_service.describe_alarm_notify_groups(\n        describe_alarm_notify_groups_request)\n    print(\"topics total: {}\\n\" . format(describe_alarm_notify_groups_response.get_total()))\n\n    # 获取告警组\n    # 请根据您的需要，填写alarm_notify_group_name等参数\n    # DescribeAlarmNotifyGroups API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112223\n    describe_alarm_notify_groups_request = DescribeAlarmNotifyGroupsRequest()\n    describe_alarm_notify_groups_response = tls_service.describe_alarm_notify_groups(\n        describe_alarm_notify_groups_request)\n    print(\"topics total: {}\\nfirst alarm group name: {}\".format(describe_alarm_notify_groups_response.get_total(),\n                                                                describe_alarm_notify_groups_response.\n                                                                get_alarm_notify_groups()[0].get_alarm_notify_group_name()))\n\n    # 修改告警组\n    # 请根据您的需要，填写待修改的alarm_notify_group_id和其它参数\n    # ModifyAlarmNotifyGroup API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112222\n    modify_alarm_notify_group_request = \\\n        ModifyAlarmNotifyGroupRequest(alarm_notify_group_id,\n                                      alarm_notify_group_name=\"change-alarm-notify-group-name-\" + now)\n    modify_alarm_notify_group_response = tls_service.modify_alarm_notify_group(modify_alarm_notify_group_request)\n\n    # 创建告警策略\n    # 请根据您的需要，填写project_id、alarm_name、query_request、request_cycle、condition、alarm_period、alarm_notify_group等参数\n    # CreateAlarm API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112216\n    query_request = QueryRequest(topic_id=topic_id, query=\"Failed | select count(*) as errNum\", number=1,\n                                 start_time_offset=-15, end_time_offset=0, time_span_type=\"Relative\",\n                                 truncated_time=\"Minute\")\n    request_cycle = RequestCycle(cycle_type=\"Period\", time=10)\n    trigger_conditions = [TriggerCondition(condition=\"$1.errNum>=5\", severity=\"warning\")]\n    create_alarm_request = CreateAlarmRequest(project_id, alarm_name=\"alarm-name\", query_request=[query_request],\n                                              request_cycle=request_cycle, condition=\"$1.errNum>0\", alarm_period=60,\n                                              alarm_notify_group=[alarm_notify_group_id],\n                                              trigger_conditions=trigger_conditions)\n    create_alarm_response = tls_service.create_alarm(create_alarm_request)\n    alarm_id = create_alarm_response.alarm_id\n\n    # 创建告警策略 - 关联检索分析结果\n    # 请根据您的需要，填写project_id、alarm_name、query_request、request_cycle、condition、alarm_period、alarm_notify_group等参数\n    # CreateAlarm API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112216\n    query_request_1 = QueryRequest(topic_id=topic_id, query=\"Failed | select count(*) as errCount\", number=1,\n                                 start_time_offset=-15, end_time_offset=0)\n    query_request_2 = QueryRequest(topic_id=topic_id, query=\"Error | select count(*) as errCount\", number=2,\n                                 start_time_offset=-15, end_time_offset=0)\n    request_cycle = RequestCycle(cycle_type=\"Period\", time=10)\n    join_configurations = [JoinConfig(set_operation_type=\"CrossJoin\", condition=\"\")]\n    trigger_conditions = [TriggerCondition(condition=\"$1.errCount + $2.errCount >= 10\", severity=\"warning\")]\n    create_alarm_request = CreateAlarmRequest(project_id, alarm_name=\"alarm-name-with-join-configurations\", query_request=[query_request_1, query_request_2],\n                                              request_cycle=request_cycle, condition=\"\", alarm_period=60,\n                                              alarm_notify_group=[alarm_notify_group_id],\n                                              join_configurations=join_configurations,\n                                              trigger_conditions=trigger_conditions)\n    create_alarm_response = tls_service.create_alarm(create_alarm_request)\n    alarm_id_2 = create_alarm_response.alarm_id\n\n    # 修改告警策略\n    # 请根据您的需要，填写待修改的alarm_id和其它参数\n    # ModifyAlarm API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112218\n    trigger_conditions = [TriggerCondition(condition=\"$1.errNum>=6\", severity=\"warning\")]\n    query_request = QueryRequest(topic_id=topic_id, query=\"Failed | select count(*) as errNum\", number=1,\n                                 start_time_offset=-15, end_time_offset=0, time_span_type=\"Today\",\n                                 truncated_time=\"Hour\")\n    modify_alarm_request = ModifyAlarmRequest(alarm_id, trigger_period=2, trigger_conditions=trigger_conditions,\n                                              query_request=[query_request])\n    modify_alarm_response = tls_service.modify_alarm(modify_alarm_request)\n\n    # 查询告警策略\n    # 请根据您的需要，填写待查询的project_id\n    # DescribeAlarms API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112219\n    describe_alarms_request = DescribeAlarmsRequest(project_id)\n    describe_alarms_response = tls_service.describe_alarms(describe_alarms_request)\n    print(\"topics total:{} first alarm name:{}\".format(describe_alarms_response.get_total(),\n                                                       describe_alarms_response.get_alarms()[0].get_alarm_name()))\n\n    # 删除告警策略\n    # 请根据您的需要，填写待删除的alarm_id\n    # DeleteAlarm API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112217\n    delete_alarm_request = DeleteAlarmRequest(alarm_id)\n    delete_alarm_response = tls_service.delete_alarm(delete_alarm_request)\n\n    tls_service.delete_alarm(DeleteAlarmRequest(alarm_id_2))\n\n    # 删除告警组\n    # 请根据您的需要，填写待删除的alarm_notify_group_id\n    # DeleteAlarmNotifyGroup API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112221\n    delete_alarm_notify_group_request = DeleteAlarmNotifyGroupRequest(alarm_notify_group_id)\n    delete_alarm_notify_group_response = tls_service.delete_alarm_notify_group(delete_alarm_notify_group_request)\n\n    # 删除日志主题\n    tls_service.delete_topic(DeleteTopicRequest(topic_id))\n\n    # 删除日志项目\n    tls_service.delete_project(DeleteProjectRequest(project_id))\n"
  },
  {
    "path": "volcengine/example/tls/example_consumer.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\nimport time\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.consumer.consumer import TLSConsumer, LogProcessor\nfrom volcengine.tls.consumer.consumer_model import ConsumerConfig\nfrom volcengine.tls.log_pb2 import LogGroupList\n\n\n# 用户需要实现一个继承LogProcessor的类，并按照业务需要自行实现process函数，用于处理消费到的每个LogGroupList\nclass MyLogProcessor(LogProcessor):\n    def process(self, topic_id: str, shard_id: int, log_group_list: LogGroupList):\n        print(topic_id + \" --- \" + str(shard_id))\n\n        count = 0\n\n        for log_group in log_group_list.log_groups:\n            for log in log_group.logs:\n                count += 1\n                print(\"*** Count = {} ***\".format(count))\n\n                for content in log.contents:\n                    print(\"{}: {}\".format(content.key, content.value))\n                print()\n\n\nif __name__ == '__main__':\n    # 初始化客户端，推荐通过环境变量动态获取火山引擎密钥等身份认证信息，以免AccessKey硬编码引发数据安全风险。详细说明请参考https://www.volcengine.com/docs/6470/1166455\n    # 使用STS时，ak和sk均使用临时密钥，且设置VOLCENGINE_TOKEN；不使用STS时，VOLCENGINE_TOKEN部分传空\n    # endpoint = \"https://tls-cn-beijing.volces.com\"\n    # region = \"cn-beijing\"\n    # access_key_id = \"AKLxxxxxxxx\"\n    # access_key_secret = \"TUxxxxxxxxxx==\"\n    endpoint = os.environ[\"VOLCENGINE_ENDPOINT\"]\n    region = os.environ[\"VOLCENGINE_REGION\"]\n    access_key_id = os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"]\n    access_key_secret = os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"]\n\n    # 实例化TLS客户端\n    tls_service = TLSService(endpoint, access_key_id, access_key_secret, region)\n\n    # 配置消费组的必填参数，ConsumerConfig构造函数设定了一些默认参数，您也可根据需要自定义配置\n    consumer_config = ConsumerConfig(project_id=\"your-project-id\",\n                                     consumer_group_name=\"python-consumer-group\",\n                                     consumer_name=\"python-consumer\",\n                                     topic_id_list=[\"your-topic-id\"])\n    tls_consumer = TLSConsumer(consumer_config, tls_service, MyLogProcessor())\n\n    # 调用start方法开始持续消费\n    tls_consumer.start()\n\n    # 可通过调用tls_consumer.stop()来结束消费组消费\n    time.sleep(10)\n    tls_consumer.stop()\n"
  },
  {
    "path": "volcengine/example/tls/example_consumer_group.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\nimport time\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import CreateProjectRequest, CreateTopicRequest, DeleteTopicRequest, \\\n    DeleteProjectRequest, CreateConsumerGroupRequest, DeleteConsumerGroupRequest, DescribeConsumerGroupsRequest\n\nif __name__ == '__main__':\n    # 初始化客户端，推荐通过环境变量动态获取火山引擎密钥等身份认证信息，以免AccessKey硬编码引发数据安全风险。详细说明请参考https://www.volcengine.com/docs/6470/1166455\n    # 使用STS时，ak和sk均使用临时密钥，且设置VOLCENGINE_TOKEN；不使用STS时，VOLCENGINE_TOKEN部分传空\n    endpoint = os.environ[\"VOLCENGINE_ENDPOINT\"]\n    region = os.environ[\"VOLCENGINE_REGION\"]\n    access_key_id = os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"]\n    access_key_secret = os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"]\n\n    # 实例化TLS客户端\n    tls_service = TLSService(endpoint, access_key_id, access_key_secret, region)\n    now = str(int(time.time()))\n\n    # 创建日志项目\n    create_project_request = CreateProjectRequest(project_name=\"project-name-\" + now, region=region,\n                                                  description=\"project-description\")\n    create_project_response = tls_service.create_project(create_project_request)\n    project_id = create_project_response.get_project_id()\n    print(\"Successfully create project, project id is: {} \".format(project_id))\n\n    # 创建日志主题\n    # 请根据您的需要，填写project_id、topic_name、ttl、shard_count和description等参数\n    # CreateTopic API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112180\n    create_topic_request = CreateTopicRequest(topic_name=\"topic-name-\" + now, project_id=project_id,\n                                              ttl=3650, description=\"topic-description\", shard_count=2)\n    create_topic_response = tls_service.create_topic(create_topic_request)\n    topic_id = create_topic_response.get_topic_id()\n    print(\"Successfully create topic, topic id is: {} \".format(topic_id))\n\n    # 创建消费者组\n    consumer_group = \"test-consumer-group-\" + now\n    create_consumer_group_request = CreateConsumerGroupRequest(project_id, consumer_group, topic_id_list=[topic_id],\n                                                               heartbeat_ttl=10, ordered_consume=True)\n    tls_service.create_consumer_group(create_consumer_group_request)\n    print(\"Successfully create consumer group, group is: {} \".format(consumer_group))\n\n    # 查询消费者组\n    describe_consumer_groups_request = DescribeConsumerGroupsRequest(project_id)\n    describe_consumer_groups_response = tls_service.describe_consumer_groups(describe_consumer_groups_request)\n    print(\"Successfully describe consumer group, count is: {} \".format(len(describe_consumer_groups_response.consumer_groups)))\n\n    # 删除消费者组\n    tls_service.delete_consumer_group(DeleteConsumerGroupRequest(project_id, consumer_group))\n    print(\"Successfully delete consumer group, group is: {} \".format(consumer_group))\n\n    # 删除topic\n    tls_service.delete_topic(DeleteTopicRequest(topic_id))\n    print(\"Successfully delete topic, topic id is: {} \".format(topic_id))\n\n    # 删除日志项目\n    tls_service.delete_project(DeleteProjectRequest(project_id))\n    print(\"Successfully delete project, project id is: {} \".format(project_id))"
  },
  {
    "path": "volcengine/example/tls/example_describe_trace_instance.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import DescribeTraceInstanceRequest\n\n\nif __name__ == \"__main__\":\n    # 初始化TLS服务\n    endpoint = \"your-endpoint\"\n    access_key_id = \"your-access-key-id\"\n    access_key_secret = \"your-access-key-secret\"\n    region = \"your-region\"\n\n    tls_service = TLSService(endpoint, access_key_id, access_key_secret, region)\n\n    # 创建DescribeTraceInstance请求\n    trace_instance_id = \"your-trace-instance-id\"\n    request = DescribeTraceInstanceRequest(trace_instance_id=trace_instance_id)\n\n    try:\n        # 调用DescribeTraceInstance API\n        response = tls_service.describe_trace_instance(request)\n        \n        # 获取Trace实例信息\n        trace_instance = response.get_trace_instance()\n        \n        print(f\"Trace Instance ID: {trace_instance.get_trace_instance_id()}\")\n        print(f\"Trace Instance Name: {trace_instance.get_trace_instance_name()}\")\n        print(f\"Trace Instance Status: {trace_instance.get_trace_instance_status()}\")\n        print(f\"Project ID: {trace_instance.get_project_id()}\")\n        print(f\"Project Name: {trace_instance.get_project_name()}\")\n        print(f\"Description: {trace_instance.get_description()}\")\n        print(f\"Create Time: {trace_instance.get_create_time()}\")\n        print(f\"Modify Time: {trace_instance.get_modify_time()}\")\n        print(f\"Trace Topic ID: {trace_instance.get_trace_topic_id()}\")\n        print(f\"Trace Topic Name: {trace_instance.get_trace_topic_name()}\")\n        print(f\"Dependency Topic ID: {trace_instance.get_dependency_topic_id()}\")\n        print(f\"Dependency Topic Name: {trace_instance.get_dependency_topic_topic_name()}\")\n        \n    except Exception as e:\n        print(f\"Error: {e}\")"
  },
  {
    "path": "volcengine/example/tls/example_embedded_console.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\nimport json\nimport requests\n\nfrom urllib.parse import quote\nfrom volcengine.sts.StsService import StsService\n\n\nif __name__ == \"__main__\":\n    # 初始化客户端，推荐通过环境变量动态获取火山引擎密钥等身份认证信息，以免AccessKey硬编码引发数据安全风险。详细说明请参考 https://www.volcengine.com/docs/6470/1166455\n    access_key_id = os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"]\n    access_key_secret = os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"]\n\n    sts_service = StsService()\n    sts_service.set_ak(access_key_id)\n    sts_service.set_sk(access_key_secret)\n\n    role_trn = \"trn:iam::yourAccountID:role/yourRole\"\n    role_session_name = \"tlsiframe\"\n    target_console_url = \"https://console.volc-embed.com/tls/region:tls+cn-beijing\"\n\n    # 调用AssumeRole接口获取临时安全令牌\n    assume_role_params = {\n        \"DurationSeconds\": \"900\",\n        \"RoleSessionName\": role_session_name,\n        \"RoleTrn\": role_trn\n    }\n    assume_role_resp = sts_service.assume_role(assume_role_params)\n\n    assume_rule_ak = assume_role_resp[\"Result\"][\"Credentials\"][\"AccessKeyId\"]\n    assume_role_sk = assume_role_resp[\"Result\"][\"Credentials\"][\"SecretAccessKey\"]\n    session_token = assume_role_resp[\"Result\"][\"Credentials\"][\"SessionToken\"]\n\n    # 获取登录Token\n    url_str = \"https://console.volc-embed.com/api/passport/login/getSigninTokenWithSTS\"\n    url_str = url_str + \"?accessKeyId=\" + quote(assume_rule_ak)\n    url_str = url_str + \"&secretAccessKey=\" + quote(assume_role_sk)\n    url_str = url_str + \"&sessionToken=\" + quote(session_token)\n    url_str = url_str + \"&sessionDuration=3600\"\n\n    get_signin_token_with_sts_resp = json.loads(requests.post(url_str).content)\n    signin_token = get_signin_token_with_sts_resp[\"Result\"][\"SigninToken\"]\n\n    # 构建免密访问链接\n    result = \"https://console.volc-embed.com/api/passport/login/loginWithSigninToken\"\n    result = result + \"?signinToken=\" + quote(signin_token)\n    result = result + '&redirectURI=' + quote(target_console_url)\n\n    print(result)\n"
  },
  {
    "path": "volcengine/example/tls/example_etl.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\nimport time\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import *\n\n\nif __name__ == \"__main__\":\n    # 初始化客户端，推荐通过环境变量动态获取火山引擎密钥等身份认证信息，\n    # 以免AccessKey硬编码引发数据安全风险。详细说明请参考\n    # https://www.volcengine.com/docs/6470/1166455\n    # 使用STS时，ak和sk均使用临时密钥，且设置VOLCENGINE_TOKEN；不使用STS时，VOLCENGINE_TOKEN部分传空\n    endpoint = os.environ[\"VOLCENGINE_ENDPOINT\"]\n    region = os.environ[\"VOLCENGINE_REGION\"]\n    access_key_id = os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"]\n    access_key_secret = os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"]\n\n    # 实例化TLS客户端\n    tls_service = TLSService(endpoint, access_key_id, access_key_secret, region)\n    now = str(int(time.time()))\n\n    # 创建日志项目\n    create_project_request = CreateProjectRequest(project_name=\"project-name-\" + now, region=region,\n                                                  description=\"project-description\")\n    create_project_response = tls_service.create_project(create_project_request)\n    project_id = create_project_response.get_project_id()\n\n    # 创建源日志主题\n    create_source_topic_request = CreateTopicRequest(\n        topic_name=\"source-topic-name-\" + now,\n        project_id=project_id,\n        ttl=3650,\n        description=\"source-topic-description\",\n        shard_count=2,\n    )\n    create_source_topic_response = tls_service.create_topic(create_source_topic_request)\n    source_topic_id = create_source_topic_response.get_topic_id()\n\n    # 创建目标日志主题\n    create_target_topic_request = CreateTopicRequest(\n        topic_name=\"target-topic-name-\" + now,\n        project_id=project_id,\n        ttl=3650,\n        description=\"target-topic-description\",\n        shard_count=2,\n    )\n    create_target_topic_response = tls_service.create_topic(create_target_topic_request)\n    target_topic_id = create_target_topic_response.get_topic_id()\n\n    # 创建ETL任务\n    # 请根据您的需要，填写相关参数\n    # CreateETLTask API的请求参数规范请参阅相关文档\n    create_etl_task_request = CreateETLTaskRequest(\n        dsl_type=\"NORMAL\",\n        name=\"etl-task-name-\" + now,\n        description=\"etl-task-description\",\n        enable=True,\n        source_topic_id=source_topic_id,\n        script='f_set(\"key\", \"value\")',\n        task_type=\"Resident\",\n        target_resources=[\n            {\n                \"alias\": \"test\",\n                \"topic_id\": target_topic_id,\n                \"region\": region\n            }\n        ]\n    )\n    create_etl_task_response = tls_service.create_etl_task(create_etl_task_request)\n    etl_task_id = create_etl_task_response.get_task_id()\n\n    print(f\"ETL Task created successfully, task_id: {etl_task_id}\")\n\n    # 删除日志主题\n    delete_source_topic_request = DeleteTopicRequest(source_topic_id)\n    tls_service.delete_topic(delete_source_topic_request)\n\n    delete_target_topic_request = DeleteTopicRequest(target_topic_id)\n    tls_service.delete_topic(delete_target_topic_request)\n\n    # 删除日志项目\n    delete_project_request = DeleteProjectRequest(project_id=project_id)\n    tls_service.delete_project(delete_project_request)\n"
  },
  {
    "path": "volcengine/example/tls/example_host_group.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import *\n\n\nif __name__ == \"__main__\":\n    # 初始化客户端，推荐通过环境变量动态获取火山引擎密钥等身份认证信息，以免AccessKey硬编码引发数据安全风险。详细说明请参考 https://www.volcengine.com/docs/6470/1166455\n    # 使用STS时，ak和sk均使用临时密钥，且设置VOLCENGINE_TOKEN；不使用STS时，VOLCENGINE_TOKEN部分传空\n    endpoint = os.environ[\"VOLCENGINE_ENDPOINT\"]\n    region = os.environ[\"VOLCENGINE_REGION\"]\n    access_key_id = os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"]\n    access_key_secret = os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"]\n\n    # 实例化TLS客户端\n    tls_service = TLSService(endpoint, access_key_id, access_key_secret, region)\n    now = str(int(time.time()))\n\n    # 创建机器组\n    # 请根据您的需要，填写host_group_name、host_group_type和host_ip_list等参数\n    # CreateHostGroup API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112206\n    create_host_group_request = CreateHostGroupRequest(host_group_name=\"host-group-name-\" + now, host_group_type=\"IP\",\n                                                       host_ip_list=[\"192.168.1.1\", \"192.168.1.2\", \"192.168.1.3\"])\n    create_host_group_response = tls_service.create_host_group(create_host_group_request)\n    host_group_id = create_host_group_response.get_host_group_id()\n\n    # 获取指定机器组信息\n    # 请根据您的需要，填写待查询的host_group_id\n    # DescribeHostGroup API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112210\n    describe_host_group_request = DescribeHostGroupRequest(host_group_id)\n    describe_host_group_response = tls_service.describe_host_group(describe_host_group_request)\n    print(\"host group name: {}\".format(\n        describe_host_group_response.get_host_group_hosts_rules_info().get_host_group_info().get_host_group_name()))\n    print(\"first host ip: {}\".format(\n        describe_host_group_response.get_host_group_hosts_rules_info().get_host_infos()[0].get_ip()))\n\n    # 获取全部机器组信息\n    # 请根据您的需要，填写host_group_name等可选参数\n    # DescribeHostGroups API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112211\n    describe_host_groups_request = DescribeHostGroupsRequest()\n    describe_host_groups_response = tls_service.describe_host_groups(describe_host_groups_request)\n    print(\"first host group name: {}\".format(\n        describe_host_groups_response.get_host_group_hosts_rules_infos()[0].get_host_group_info().get_host_group_name()))\n    print(\"first host ip: {}\".format(\n        describe_host_groups_response.get_host_group_hosts_rules_infos()[0].get_host_infos()[0].get_ip()))\n\n    # 修改机器组\n    # 请根据您的需要，填写host_group_id和待修改的机器组信息\n    # ModifyHostGroup API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112209\n    modify_host_group_request = ModifyHostGroupRequest(host_group_id, host_group_name=\"change-host-group-name-\" + now)\n    modify_host_group_response = tls_service.modify_host_group(modify_host_group_request)\n\n    # 查询机器组所有机器\n    # 请根据您的需要，填写待查询的host_group_id\n    # DescribeHosts API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112212\n    describe_hosts_request = DescribeHostsRequest(host_group_id)\n    describe_hosts_response = tls_service.describe_hosts(describe_hosts_request)\n    print(\"total {} hosts\\nfirst host ip: {}\".format(describe_hosts_response.get_total(),\n                                                     describe_hosts_response.get_host_infos()[0].get_ip()))\n\n    # 删除机器组内指定机器\n    # 请根据您的需要，填写待删除机器的host_group_id和ip\n    # DeleteHost API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112213\n    delete_host_request = DeleteHostRequest(host_group_id, ip=\"192.168.1.3\")\n    delete_host_response = tls_service.delete_host(delete_host_request)\n\n    # 查询机器组的采集配置\n    # 请根据您的需要，填写待查询的host_group_id\n    # DescribeHostGroupRules API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112214\n    describe_host_group_rules_request = DescribeHostGroupRulesRequest(host_group_id)\n    describe_host_group_rules_response = tls_service.describe_host_group_rules(describe_host_group_rules_request)\n    print(\"total {} hosts\".format(describe_host_group_rules_response.get_total()))\n\n    # 删除机器组\n    # 请根据您的需要，填写待删除的host_group_id\n    # DeleteHostGroup API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112208\n    delete_host_group_request = DeleteHostGroupRequest(host_group_id)\n    delete_host_group_response = tls_service.delete_host_group(delete_host_group_request)\n"
  },
  {
    "path": "volcengine/example/tls/example_import_task.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import *\n\nif __name__ == \"__main__\":\n    # 初始化客户端，推荐通过环境变量动态获取火山引擎密钥等身份认证信息，以免AccessKey硬编码引发数据安全风险。详细说明请参考 https://www.volcengine.com/docs/6470/1166455\n    # 使用STS时，ak和sk均使用临时密钥，且设置VOLCENGINE_TOKEN；不使用STS时，VOLCENGINE_TOKEN部分传空\n    endpoint = os.environ[\"VOLCENGINE_ENDPOINT\"]\n    region = os.environ[\"VOLCENGINE_REGION\"]\n    access_key_id = os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"]\n    access_key_secret = os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"]\n\n    # 实例化TLS客户端\n    tls_service = TLSService(endpoint, access_key_id, access_key_secret, region)\n    now = str(int(time.time()))\n\n    # 创建日志项目\n    create_project_request = CreateProjectRequest(project_name=\"import-project-\" + now, region=region,\n                                                  description=\"project for import task test\")\n    create_project_response = tls_service.create_project(create_project_request)\n    project_id = create_project_response.get_project_id()\n    print(\"创建日志项目成功，project_id: {}\".format(project_id))\n\n    # 创建日志主题\n    create_topic_request = CreateTopicRequest(\n        topic_name=\"import-topic-\" + now,\n        project_id=project_id,\n        ttl=5,\n        description=\"topic for import task test\",\n        shard_count=2,\n    )\n    create_topic_response = tls_service.create_topic(create_topic_request)\n    topic_id = create_topic_response.get_topic_id()\n    print(\"创建日志主题成功，topic_id: {}\".format(topic_id))\n\n    # 示例1：创建TOS导入任务\n    print(\"\\n=== 创建TOS导入任务 ===\")\n    \n    # TOS源信息配置\n    tos_source_info = TosSourceInfo(\n        bucket=\"bucket-for-import-sdk-test\",  # 请替换为您的TOS存储桶名称\n        region=\"cn-guilin-boe\",  # 请替换为您的TOS存储桶所在区域\n        compress_type=\"none\",  # 日志压缩类型：none、gzip、lz4、snappy\n        prefix=\"logs/\"  # 日志文件前缀\n    )\n    \n    # 导入源信息\n    import_source_info = ImportSourceInfo(tos_source_info=tos_source_info)\n    \n    # 提取规则配置\n    import_extract_rule = ImportExtractRule(\n        delimiter=\"|\",  # 分隔符\n        keys=[\"time\", \"level\", \"message\"],  # 字段名\n        time_key=\"time\",  # 时间字段名\n        time_format=\"%Y-%m-%d %H:%M:%S\",  # 时间格式\n        time_zone=\"Asia/Shanghai\",  # 时区\n        un_match_up_load_switch=True,  # 上传解析失败的日志\n        un_match_log_key=\"LogParseFailed\"  # 解析失败日志的字段名\n    )\n    \n    # 目标信息配置\n    target_info = TargetInfo(\n        region=region,  # 日志主题所在区域\n        log_type=\"delimiter_log\",  # 日志类型\n        extract_rule=import_extract_rule,  # 提取规则\n        log_sample=\"2023-12-01 10:00:00|INFO|This is a sample log\"  # 日志样例\n    )\n    \n    # 创建TOS导入任务请求\n    create_import_task_request = CreateImportTaskRequest(\n        topic_id=topic_id,\n        task_name=\"tos-import-task-\" + now,\n        source_type=\"tos\",  # 源类型：tos\n        import_source_info=import_source_info,\n        target_info=target_info,\n        project_id=project_id,\n        description=\"TOS导入任务测试\"\n    )\n    \n    try:\n        create_response = tls_service.create_import_task(create_import_task_request)\n        task_id = create_response.get_task_id()\n        print(\"TOS导入任务创建成功，task_id: {}\".format(task_id))\n        \n        # 查询导入任务\n        print(\"\\n=== 验证查询导入任务功能 ===\")\n        try:\n            describe_request = DescribeImportTaskRequest(task_id=task_id)\n            describe_response = tls_service.describe_import_task(describe_request)\n            print(\"查询导入任务成功，任务名称: {}\".format(describe_response.get_task_info().task_name))\n        except Exception as e:\n            print(\"查询导入任务失败: {}\".format(str(e)))\n        \n        # 验证新增方法 - 修改导入任务\n        print(\"\\n=== 验证修改导入任务功能 ===\")\n        try:\n            # 修改任务状态为已停止（状态码4）\n            modify_request = ModifyImportTaskRequest(\n                task_id=task_id,\n                status=4,  # 已停止\n                topic_id=topic_id,\n                task_name=\"modified-tos-import-task-\" + now,\n                source_type=\"tos\",\n                import_source_info=import_source_info,\n                target_info=target_info,\n                project_id=project_id,\n                description=\"修改后的TOS导入任务测试\"\n            )\n            modify_response = tls_service.modify_import_task(modify_request)\n            print(\"修改导入任务成功\")\n        except Exception as e:\n            print(\"修改导入任务失败: {}\".format(str(e)))\n        \n        # 验证新增方法 - 查询导入任务列表\n        print(\"\\n=== 验证查询导入任务列表功能 ===\")\n        try:\n            describe_tasks_request = DescribeImportTasksRequest(\n                project_id=project_id,\n                topic_id=topic_id,\n                source_type=\"tos\",\n                page_number=1,\n                page_size=10\n            )\n            tasks_response = tls_service.describe_import_tasks(describe_tasks_request)\n            print(\"查询导入任务列表成功，总数: {}\".format(tasks_response.get_total()))\n            if tasks_response.get_task_info():\n                print(\"第一个任务名称: {}\".format(tasks_response.get_task_info()[0].task_name))\n        except Exception as e:\n            print(\"查询导入任务列表失败: {}\".format(str(e)))\n            \n    except Exception as e:\n        print(\"TOS导入任务创建失败: {}\".format(str(e)))\n        task_id = None\n\n    # 示例2：创建Kafka导入任务\n    print(\"\\n=== 创建Kafka导入任务 ===\")\n    \n    # Kafka源信息配置\n    kafka_source_info = KafkaSourceInfo(\n        host=\"kafka1.example.com:9092,kafka2.example.com:9092\",  # Kafka集群地址\n        topic=\"app-logs\",  # Kafka Topic名称\n        encode=\"UTF-8\",  # 数据编码格式\n        protocol=\"plaintext\",  # Kafka协议\n        is_need_auth=False,  # 是否开启鉴权\n        initial_offset=0,  # 从最早时间开始导入\n        time_source_default=0,  # 使用Kafka消息时间戳\n    )\n    \n    # 导入源信息\n    import_source_info_kafka = ImportSourceInfo(kafka_source_info=kafka_source_info)\n    \n    # 提取规则配置（JSON日志类型）\n    import_extract_rule_json = ImportExtractRule(\n        time_key=\"timestamp\",  # 时间字段名\n        time_format=\"%Y-%m-%dT%H:%M:%S.%fZ\",  # ISO时间格式\n        time_zone=\"UTC\",  # UTC时区\n        un_match_up_load_switch=True,\n        un_match_log_key=\"LogParseFailed\"\n    )\n    \n    # 目标信息配置\n    target_info_kafka = TargetInfo(\n        region=region,\n        log_type=\"json_log\",  # JSON日志类型\n        extract_rule=import_extract_rule_json,\n        log_sample='{\"@timestamp\":\"2023-12-01T10:00:00.000Z\",\"level\":\"INFO\",\"message\":\"Sample log message\"}'\n    )\n    \n    # 创建Kafka导入任务请求\n    create_kafka_import_request = CreateImportTaskRequest(\n        topic_id=topic_id,\n        task_name=\"kafka-import-task-\" + now,\n        source_type=\"kafka\",  # 源类型：kafka\n        import_source_info=import_source_info_kafka,\n        target_info=target_info_kafka,\n        project_id=project_id,\n        description=\"Kafka导入任务测试\"\n    )\n    \n    try:\n        create_kafka_response = tls_service.create_import_task(create_kafka_import_request)\n        kafka_task_id = create_kafka_response.get_task_id()\n        print(\"Kafka导入任务创建成功，task_id: {}\".format(kafka_task_id))\n        \n        # 验证新增方法 - 查询Kafka导入任务\n        print(\"\\n=== 验证查询Kafka导入任务功能 ===\")\n        try:\n            describe_kafka_request = DescribeImportTaskRequest(task_id=kafka_task_id)\n            describe_kafka_response = tls_service.describe_import_task(describe_kafka_request)\n            print(\"查询Kafka导入任务成功，任务名称: {}\".format(describe_kafka_response.get_task_info().task_name))\n        except Exception as e:\n            print(\"查询Kafka导入任务失败: {}\".format(str(e)))\n        \n        # 验证新增方法 - 修改Kafka导入任务\n        print(\"\\n=== 验证修改Kafka导入任务功能 ===\")\n        try:\n\n            modify_kafka_request = ModifyImportTaskRequest(\n                task_id=kafka_task_id,\n                status=5,  # 导入中\n                topic_id=topic_id,\n                task_name=\"modified-kafka-import-task-\" + now,\n                source_type=\"kafka\",\n                import_source_info=import_source_info_kafka,\n                target_info=target_info_kafka,\n                project_id=project_id,\n                description=\"修改后的Kafka导入任务测试\"\n            )\n            modify_kafka_response = tls_service.modify_import_task(modify_kafka_request)\n            print(\"修改Kafka导入任务成功\")\n        except Exception as e:\n            print(\"修改Kafka导入任务失败: {}\".format(str(e)))\n        \n        # 验证新增方法 - 查询Kafka导入任务列表（按状态筛选）\n        print(\"\\n=== 验证按状态查询导入任务列表功能 ===\")\n        try:\n            describe_kafka_tasks_request = DescribeImportTasksRequest(\n                project_id=project_id,\n                topic_id=topic_id,\n                source_type=\"kafka\",\n                page_number=1,\n                page_size=10\n            )\n            kafka_tasks_response = tls_service.describe_import_tasks(describe_kafka_tasks_request)\n            print(\"按状态查询导入任务列表成功，总数: {}\".format(kafka_tasks_response.get_total()))\n            if kafka_tasks_response.get_task_info():\n                print(\"第一个Kafka任务名称: {}\".format(kafka_tasks_response.get_task_info()[0].task_name))\n        except Exception as e:\n            print(\"按状态查询导入任务列表失败: {}\".format(str(e)))\n            \n    except Exception as e:\n        print(\"Kafka导入任务创建失败: {}\".format(str(e)))\n        kafka_task_id = None\n\n    # 验证新增方法 - 综合查询所有导入任务\n    print(\"\\n=== 验证综合查询导入任务列表功能 ===\")\n    try:\n        all_tasks_request = DescribeImportTasksRequest(\n            page_number=1,\n            page_size=20\n        )\n        all_tasks_response = tls_service.describe_import_tasks(all_tasks_request)\n        print(\"查询所有导入任务列表成功，总数: {}\".format(all_tasks_response.get_total()))\n        if all_tasks_response.get_task_info():\n            print(\"任务列表中包含 {} 个任务\".format(len(all_tasks_response.get_task_info())))\n            for i, task in enumerate(all_tasks_response.get_task_info()):\n                print(\"任务 {}: ID={}, 名称={}, 类型={}, 状态={}\".format(\n                    i+1, \n                    task.task_id,\n                    task.task_name,\n                    task.source_type,\n                    task.status\n                ))\n    except Exception as e:\n        print(\"综合查询导入任务列表失败: {}\".format(str(e)))\n\n    # 删除导入任务（清理资源）\n    print(\"\\n=== 清理导入任务 ===\")\n    if task_id:\n        try:\n            delete_request = DeleteImportTaskRequest(task_id=task_id)\n            tls_service.delete_import_task(delete_request)\n            print(\"TOS导入任务删除成功\")\n        except Exception as e:\n            print(\"TOS导入任务删除失败: {}\".format(str(e)))\n    \n    if kafka_task_id:\n        try:\n            delete_kafka_request = DeleteImportTaskRequest(task_id=kafka_task_id)\n            tls_service.delete_import_task(delete_kafka_request)\n            print(\"Kafka导入任务删除成功\")\n        except Exception as e:\n            print(\"Kafka导入任务删除失败: {}\".format(str(e)))\n\n    # 删除日志主题\n    print(\"\\n=== 清理资源 ===\")\n    delete_topic_request = DeleteTopicRequest(topic_id)\n    tls_service.delete_topic(delete_topic_request)\n    print(\"日志主题删除成功\")\n\n    # 删除日志项目\n    tls_service.delete_project(DeleteProjectRequest(project_id))\n    print(\"日志项目删除成功\")\n    \n    print(\"\\n=== 导入任务示例程序执行完成 ===\")"
  },
  {
    "path": "volcengine/example/tls/example_index.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import *\n\n\nif __name__ == \"__main__\":\n    # 初始化客户端，推荐通过环境变量动态获取火山引擎密钥等身份认证信息，以免AccessKey硬编码引发数据安全风险。详细说明请参考 https://www.volcengine.com/docs/6470/1166455\n    # 使用STS时，ak和sk均使用临时密钥，且设置VOLCENGINE_TOKEN；不使用STS时，VOLCENGINE_TOKEN部分传空\n    endpoint = os.environ[\"VOLCENGINE_ENDPOINT\"]\n    region = os.environ[\"VOLCENGINE_REGION\"]\n    access_key_id = os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"]\n    access_key_secret = os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"]\n\n    # 实例化TLS客户端\n    tls_service = TLSService(endpoint, access_key_id, access_key_secret, region)\n    now = str(int(time.time()))\n\n    # 创建日志项目\n    create_project_request = CreateProjectRequest(project_name=\"project-name-\" + now, region=region,\n                                                  description=\"project-description\")\n    create_project_response = tls_service.create_project(create_project_request)\n    project_id = create_project_response.get_project_id()\n\n    # 创建日志主题\n    create_topic_request = CreateTopicRequest(topic_name=\"topic-name-\" + now, project_id=project_id,\n                                              ttl=3650, description=\"topic-description\", shard_count=2)\n    create_topic_response = tls_service.create_topic(create_topic_request)\n    topic_id = create_topic_response.get_topic_id()\n\n    # 创建索引配置\n    # 请根据您的需要，配置full_text全文索引或key_value键值索引\n    # CreateIndex API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112187\n    full_text = FullTextInfo(case_sensitive=False, delimiter=\",-;\", include_chinese=False)\n    value_info_a = ValueInfo(value_type=\"text\", delimiter=\"\", case_sensitive=True,\n                             include_chinese=False, sql_flag=False)\n    value_info_b = ValueInfo(value_type=\"long\", delimiter=\"\", case_sensitive=False,\n                             include_chinese=False, sql_flag=True)\n\n    value_c1_json_keys = ValueInfo(value_type=\"text\", delimiter=\"\", case_sensitive=False,\n                                  include_chinese=False, sql_flag=True)\n    value_c2_json_keys = ValueInfo(value_type=\"long\", delimiter=\"\", case_sensitive=False,\n                                  include_chinese=False, sql_flag=True)\n    value_info_c = ValueInfo(value_type=\"json\", delimiter=\"\", case_sensitive=False,\n                             include_chinese=False, sql_flag=True, index_all=True,\n                             json_keys=[\n                                 KeyValueInfo(\"test\", value_c1_json_keys).json(),\n                                 KeyValueInfo(\"key-l\", value_c2_json_keys).json(),\n                             ])\n\n    key_value_info_a = KeyValueInfo(key=\"test1\", value=value_info_a)\n    key_value_info_b = KeyValueInfo(key=\"test2\", value=value_info_b)\n    key_value_info_c = KeyValueInfo(key=\"test3\", value=value_info_c)\n    key_value = [key_value_info_a, key_value_info_b, key_value_info_c]\n    create_index_request = CreateIndexRequest(topic_id=create_topic_response.topic_id, full_text=full_text,\n                                              key_value=key_value)\n    create_index_response = tls_service.create_index(create_index_request)\n\n    # 查询索引配置\n    # 请根据您的需要，填写待查询的topic_id\n    # DescribeIndex API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112190\n    describe_index_request = DescribeIndexRequest(topic_id)\n    describe_index_response = tls_service.describe_index(describe_index_request)\n    print(\"index delimiter: {}\".format(describe_index_response.get_full_text().get_delimiter()))\n\n    # 修改索引配置\n    # 请根据您的需要，填写topic_id和待修改的full_text或key_value配置\n    # ModifyIndex API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112189\n    modify_index_request = ModifyIndexRequest(topic_id, full_text=FullTextInfo(case_sensitive=True, delimiter=\",\"))\n    modify_index_response = tls_service.modify_index(modify_index_request)\n\n    # 删除索引配置\n    # 请根据您的需要，填写待删除索引的topic_id\n    # DeleteIndex API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112188\n    delete_index_request = DeleteIndexRequest(topic_id)\n    delete_index_response = tls_service.delete_index(delete_index_request)\n\n    # 删除topic\n    tls_service.delete_topic(DeleteTopicRequest(topic_id))\n\n    # 删除日志项目\n    tls_service.delete_project(DeleteProjectRequest(project_id))\n"
  },
  {
    "path": "volcengine/example/tls/example_log.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import *\n\n\nif __name__ == \"__main__\":\n    # 初始化客户端，推荐通过环境变量动态获取火山引擎密钥等身份认证信息，以免AccessKey硬编码引发数据安全风险。详细说明请参考 https://www.volcengine.com/docs/6470/1166455\n    # 使用STS时，ak和sk均使用临时密钥，且设置VOLCENGINE_TOKEN；不使用STS时，VOLCENGINE_TOKEN部分传空\n    endpoint = os.environ[\"VOLCENGINE_ENDPOINT\"]\n    region = os.environ[\"VOLCENGINE_REGION\"]\n    access_key_id = os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"]\n    access_key_secret = os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"]\n\n    # 实例化TLS客户端\n    tls_service = TLSService(endpoint, access_key_id, access_key_secret, region)\n    now = str(int(time.time()))\n\n    # 创建日志项目\n    create_project_request = CreateProjectRequest(project_name=\"project-name-\" + now, region=region,\n                                                  description=\"project-description\")\n    create_project_response = tls_service.create_project(create_project_request)\n    project_id = create_project_response.project_id\n\n    # 创建日志主题\n    create_topic_request = CreateTopicRequest(topic_name=\"topic-name-\" + now, project_id=project_id,\n                                              ttl=3650, description=\"topic-description\", shard_count=2)\n    create_topic_response = tls_service.create_topic(create_topic_request)\n    topic_id = create_topic_response.get_topic_id()\n\n    # 创建索引\n    full_text = FullTextInfo(case_sensitive=False, delimiter=\",-;\", include_chinese=False)\n    value_info_a = ValueInfo(value_type=\"text\", delimiter=\"\", case_sensitive=True,\n                             include_chinese=False, sql_flag=True)\n    value_info_b = ValueInfo(value_type=\"long\", delimiter=\"\", case_sensitive=False,\n                             include_chinese=False, sql_flag=True)\n    key_value_info_a = KeyValueInfo(key=\"key1\", value=value_info_a)\n    key_value_info_b = KeyValueInfo(key=\"key2\", value=value_info_b)\n    key_value = [key_value_info_a, key_value_info_b]\n    create_index_request = CreateIndexRequest(topic_id, full_text, key_value)\n    create_index_response = tls_service.create_index(create_index_request)\n\n    # 写入日志数据\n    # 建议您一次性聚合多条日志后调用一次put_logs_v2接口，以提高日志上传吞吐率\n    # 请根据您的需要，填写topic_id、source、filename和logs列表，建议您使用lz4压缩\n    # PutLogs API的请求参数规范和限制请参阅 https://www.volcengine.com/docs/6470/112191\n    logs = PutLogsV2Logs(source=\"192.168.1.1\", filename=\"sys.log\")\n    for i in range(100):\n        logs.add_log(contents={\"key1\": \"value1-\" + str(i + 1), \"key2\": \"value2-\" + str(i + 1)},\n                     log_time=int(round(time.time())))\n    tls_service.put_logs_v2(PutLogsV2Request(topic_id, logs))\n    time.sleep(30)\n\n    # 查询日志直方图情况\n    # 请根据您的需要，填写topic_id、query、start_time、end_time、interval\n    # DescribeHistogramV1 API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/1347899\n    start_time = int(round(time.time())) - 60\n    end_time = start_time + 60 * 2\n    # Deprecated, use DescribeHistogramV1 instead.\n    describe_histogram_request = DescribeHistogramRequest(topic_id, \"\", start_time, end_time, interval=None)\n    describe_histogram_response = tls_service.describe_histogram(describe_histogram_request)\n    describe_histogram_v1_request = DescribeHistogramV1Request(topic_id, \"\", start_time, end_time, interval=None)\n    describe_histogram_v1_response = tls_service.describe_histogram_v1(describe_histogram_v1_request)\n\n    # 查询消费游标\n    # 请根据您的需要，填写topic_id、shard_id和from_time\n    # DescribeCursor API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112193\n    describe_cursor_request = DescribeCursorRequest(topic_id, shard_id=0, from_time=\"begin\")\n    describe_cursor_response = tls_service.describe_cursor(describe_cursor_request)\n\n    # 消费日志数据\n    # 请根据您的需要，填写topic_id、shard_id、cursor等参数\n    # ConsumeLogs API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112194\n    consume_logs_request = ConsumeLogsRequest(topic_id, shard_id=0, cursor=describe_cursor_response.cursor)\n    consume_logs_response = tls_service.consume_logs(consume_logs_request)\n\n    # 查询分析日志数据\n    # 请根据您的需要，填写topic_id、query、start_time、end_time、limit等参数值\n    # SearchLogs API的请求参数规范和限制请参阅 https://www.volcengine.com/docs/6470/112195\n\n    # 当您需要检索和分析日志时，推荐您使用Python SDK提供的search_logs_v2方法，下面的代码提供了具体的调用示例\n    # 查询日志数据（全文检索）\n    search_logs_request = SearchLogsRequest(topic_id, query=\"error\", limit=10,\n                                            start_time=1672502400000, end_time=1688140800000)\n    search_logs_response = tls_service.search_logs_v2(search_logs_request)\n\n    # 查询日志数据（键值检索）\n    search_logs_request = SearchLogsRequest(topic_id, query=\"key1:error\", limit=10,\n                                            start_time=1672502400000, end_time=1688140800000)\n    search_logs_response = tls_service.search_logs_v2(search_logs_request)\n\n    # 查询日志数据（SQL分析）\n    search_logs_request = SearchLogsRequest(topic_id, query=\"* | select key1, key2\", limit=10,\n                                            start_time=1672502400000, end_time=1688140800000)\n    search_logs_response = tls_service.search_logs_v2(search_logs_request)\n\n    # 查询日志数据（SQL分析）\n    search_logs_request = SearchLogsRequest(topic_id, query=\"* | select key1, key2\", limit=10,\n                                            start_time=1672502400000, end_time=1688140800000)\n    search_logs_response = tls_service.search_logs(search_logs_request)\n"
  },
  {
    "path": "volcengine/example/tls/example_producer.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\nimport time\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.consumer.consumer import TLSConsumer, LogProcessor\nfrom volcengine.tls.consumer.consumer_model import ConsumerConfig\nfrom volcengine.tls.log_pb2 import LogGroupList\nfrom volcengine.tls.producer.producer import TLSProducer\nfrom volcengine.tls.producer.producer_model import CallBack, ProducerConfig\nfrom volcengine.tls.tls_requests import PutLogsV2LogContent\n\nproduce_success_count = 0\nproduce_failed_count = 0\n\n\nclass MyCallBack(CallBack):\n    def __init__(self, logs: list[PutLogsV2LogContent]):\n        self.logs = logs\n\n    def on_complete(self, result: 'Result'):\n        global produce_success_count\n        global produce_failed_count\n        if result.success:\n            produce_success_count += len(self.logs)\n        else:\n            produce_failed_count += len(self.logs)\n\n\nif __name__ == '__main__':\n    # 初始化客户端，推荐通过环境变量动态获取火山引擎密钥等身份认证信息，以免AccessKey硬编码引发数据安全风险。详细说明请参考https://www.volcengine.com/docs/6470/1166455\n    # 使用STS时，ak和sk均使用临时密钥，且设置VOLCENGINE_TOKEN；不使用STS时，VOLCENGINE_TOKEN部分传空\n    # endpoint = \"https://tls-cn-beijing.volces.com\"\n    # region = \"cn-beijing\"\n    # access_key_id = \"AKLxxxxxxxx\"\n    # access_key_secret = \"TUxxxxxxxxxx==\"\n    endpoint = os.environ[\"VOLCENGINE_ENDPOINT\"]\n    region = os.environ[\"VOLCENGINE_REGION\"]\n    access_key_id = os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"]\n    access_key_secret = os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"]\n    topic_id = \"your-topic-id\"\n\n    producer_config = ProducerConfig(\n        endpoint=endpoint,\n        access_key=access_key_id,\n        access_secret=access_key_secret,\n        region=region,\n    )\n    tls_producer = TLSProducer(producer_config)\n    tls_producer.start()\n\n    for i in range(10):\n        logs = [PutLogsV2LogContent(\n            log_dict={\n                \"key\": \"key-\" + str(i),\n                \"value\": \"test-message-\" + str(i)\n            },\n            time=int(time.time()) - 300\n        ), PutLogsV2LogContent(\n            log_dict={\n                \"key\": \"key1-\" + str(i),\n                \"value\": \"test-message1-\" + str(i)\n            },\n            time=int(time.time()) - 300\n        )]\n        callback = MyCallBack(logs)\n        tls_producer.send_logs_v2(\"\", topic_id, \"\", \"\", logs, callback)\n    # 等待所有消息发送完成\n    time.sleep(5)\n    tls_producer.close()\n    print(\"*****produce success count: \" + str(produce_success_count))\n    print(\"*****produce failed count: \" + str(produce_failed_count))\n"
  },
  {
    "path": "volcengine/example/tls/example_project.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import *\n\n\nif __name__ == \"__main__\":\n    # 初始化客户端，推荐通过环境变量动态获取火山引擎密钥等身份认证信息，以免AccessKey硬编码引发数据安全风险。详细说明请参考 https://www.volcengine.com/docs/6470/1166455\n    # 使用STS时，ak和sk均使用临时密钥，且设置VOLCENGINE_TOKEN；不使用STS时，VOLCENGINE_TOKEN部分传空\n    endpoint = os.environ[\"VOLCENGINE_ENDPOINT\"]\n    region = os.environ[\"VOLCENGINE_REGION\"]\n    access_key_id = os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"]\n    access_key_secret = os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"]\n\n    # 实例化TLS客户端\n    tls_service = TLSService(endpoint, access_key_id, access_key_secret, region)\n    now = str(int(time.time()))\n\n    # 创建日志项目\n    # 请根据您的需要，填写project_name和可选的description；请您填写和初始化tls_service时一致的region\n    # CreateProject API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112174\n    create_project_request = CreateProjectRequest(project_name=\"project-name-\" + now, region=region,\n                                                  description=\"project-description\")\n    create_project_response = tls_service.create_project(create_project_request)\n    project_id = create_project_response.get_project_id()\n\n    # 查询指定日志项目信息\n    # 请根据您的需要，填写待查询的project_id\n    # DescribeProject API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112178\n    describe_project_request = DescribeProjectRequest(project_id)\n    describe_project_response = tls_service.describe_project(describe_project_request)\n    project = describe_project_response.get_project()\n    print(\"project id: {}\".format(project.get_project_id()))\n\n    # 查询所有日志项目信息\n    # 请根据您的需要，填写project_name等参数\n    # DescribeProjects API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112179\n    describe_projects_request = DescribeProjectsRequest()\n    describe_projects_response = tls_service.describe_projects(describe_projects_request)\n    print(\"project total: {}\\nfirst project name: {}\".format(describe_projects_response.get_total(),\n                                                             describe_projects_response.get_projects()[0].get_project_name()))\n\n    # 修改日志项目\n    # 请根据您的需要，填写project_name或description等参数\n    # ModifyProject API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112177\n    modify_project_request = ModifyProjectRequest(project_id, project_name=\"change-project-name\",\n                                                  description=\"change-project-description\")\n    modify_project_response = tls_service.modify_project(modify_project_request)\n\n    # 删除日志项目\n    # 请根据您的需要，填写待删除的project_id\n    # DeleteProject API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112176\n    delete_project_request = DeleteProjectRequest(project_id)\n    delete_project_response = tls_service.delete_project(delete_project_request)\n"
  },
  {
    "path": "volcengine/example/tls/example_rule.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\nimport time\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import *\n\n\nif __name__ == \"__main__\":\n    # 初始化客户端，推荐通过环境变量动态获取火山引擎密钥等身份认证信息，以免AccessKey硬编码引发数据安全风险。详细说明请参考 https://www.volcengine.com/docs/6470/1166455\n    # 使用STS时，ak和sk均使用临时密钥，且设置VOLCENGINE_TOKEN；不使用STS时，VOLCENGINE_TOKEN部分传空\n    endpoint = os.environ[\"VOLCENGINE_ENDPOINT\"]\n    region = os.environ[\"VOLCENGINE_REGION\"]\n    access_key_id = os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"]\n    access_key_secret = os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"]\n\n    # 实例化TLS客户端\n    tls_service = TLSService(endpoint, access_key_id, access_key_secret, region)\n    now = str(int(time.time()))\n\n    # 创建日志项目\n    create_project_request = CreateProjectRequest(project_name=\"project-name-\" + now, region=region,\n                                                  description=\"project-description\")\n    create_project_response = tls_service.create_project(create_project_request)\n    project_id = create_project_response.get_project_id()\n\n    # 创建日志主题\n    create_topic_request = CreateTopicRequest(topic_name=\"topic-name-\" + now, project_id=project_id,\n                                              ttl=3650, description=\"topic-description\", shard_count=2)\n    create_topic_response = tls_service.create_topic(create_topic_request)\n    topic_id = create_topic_response.get_topic_id()\n\n    # 创建采集配置\n    # 请根据您的需要，填写topic_id、rule_name和其它采集配置参数\n    # CreateRule API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112199\n    rule_name = \"rule-name\"\n    paths = [\"/data/nginx/log/*/*/*.log\"]\n    log_type = \"delimiter_log\"\n    extract_rule = ExtractRule(delimiter=\"#\", keys=[\"time\", \"level\", \"msg\"],\n                               time_key=\"time\", time_format=\"%Y-%m-%dT%H:%M:%S,%f\", time_zone=\"Asia/Shanghai\",\n                               time_extract_regex=\"\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2},\\\\d{3}\",\n                               enable_nanosecond=True, time_sample=\"2018-05-22 15:35:53.850#INFO#XXXX\",\n                               filter_key_regex=[FilterKeyRegex(\"msg\", \".*ERROR.*\")],\n                               un_match_up_load_switch=True, un_match_log_key=\"LogParseFailed\")\n    exclude_paths = [ExcludePath(\"File\", \"/data/nginx/log/*/*/exclude.log\"),\n                     ExcludePath(\"Path\", \"/data/nginx/log/*/exclude/\")]\n    user_define_rule = UserDefineRule(ParsePathRule(path_sample=\"/var/logs/instanceid_any_podname/test.log\",\n                                                    regex=\"\\\\/var\\\\/logs\\\\/([a-z]*)_any_([a-z]*)\\\\/test\\\\.log\",\n                                                    keys=[\"instance-id\", \"pod-name\"]), enable_raw_log=True,\n                                      raw_log_key=\"raw_log_key\", enable_hostname=True, hostname_key=\"hostname\",\n                                      enable_host_group_label=True, host_group_label_key=\"host_group_label\",\n                                      tail_size_kb=1024, ignore_older=24, multi_collects_type=\"RuleID\", tail_files=True)\n    log_sample = \"2018-05-22 15:35:53.850#INFO#XXXX\"\n    input_type = 2\n    container_rule = ContainerRule(container_name_regex=\".*Name.*\",\n                                   include_container_label_regex={\"Key1\": \"Value1\", \"Key2\": \"Value2\"},\n                                   exclude_container_label_regex={\"Key1\": \"Value1\", \"Key2\": \"Value2\"},\n                                   include_container_env_regex={\"Key1\": \"Value1\", \"Key2\": \"Value2\"},\n                                   exclude_container_env_regex={\"Key1\": \"Value1\", \"Key2\": \"Value2\"},\n                                   env_tag={\"Key1\": \"Value1\", \"Key2\": \"Value2\"},\n                                   kubernetes_rule=KubernetesRule(namespace_name_regex=\".*Name.*\",\n                                                                  workload_type=\"Deployment\",\n                                                                  workload_name_regex=\".*workload.*\",\n                                                                  include_pod_label_regex={\"Key1\": \"Value1\",\n                                                                                           \"Key2\": \"Value2\"},\n                                                                  exclude_pod_label_regex={\"Key1\": \"Value1\",\n                                                                                           \"Key2\": \"Value2\"},\n                                                                  pod_name_regex=\".*Name.*\",\n                                                                  label_tag={\"Key1\": \"Value1\", \"Key2\": \"Value2\"},\n                                                                  enable_all_label_tag=True,\n                                                                  include_pod_annotation_regex={\"Key1\": \"Value1\"},\n                                                                  exclude_pod_annotation_regex={\"Key2\": \"Value2\"}))\n    create_rule_request = CreateRuleRequest(topic_id, rule_name, paths, log_type, extract_rule, exclude_paths,\n                                            user_define_rule, log_sample, input_type, container_rule)\n    create_rule_response = tls_service.create_rule(create_rule_request)\n    rule_id = create_rule_response.get_rule_id()\n\n    # 查询指定采集配置\n    # 请根据您的需要，填写待查询的rule_id\n    # DescribeRule API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112202\n    describe_rule_request = DescribeRuleRequest(rule_id)\n    describe_rule_response = tls_service.describe_rule(describe_rule_request)\n    print(\"rule name: {}\".format(describe_rule_response.get_rule_info().get_rule_name()))\n\n    # 查询日志项目所有采集配置\n    # 请根据您的需要，填写待查询的project_id\n    # DescribeRules API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112203\n    describe_rules_request = DescribeRulesRequest(project_id)\n    describe_rules_response = tls_service.describe_rules(describe_rules_request)\n    print(\"topics total:{}\\nfirst rule name: {}\".format(describe_rules_response.get_total(),\n                                                      describe_rules_response.get_rule_infos()[0].get_rule_name()))\n\n    # 修改采集配置\n    # 请根据您的需要，填写待修改的rule_id、rule_name或其它参数\n    # ModifyRule API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112201\n    modify_rule_request = ModifyRuleRequest(rule_id, rule_name=\"change-rule-name-\" + now, pause=1)\n    modify_rule_response = tls_service.modify_rule(modify_rule_request)\n\n    # 验证新增字段 - 查询采集配置并检查新增字段\n    describe_rule_request = DescribeRuleRequest(rule_id)\n    describe_rule_response = tls_service.describe_rule(describe_rule_request)\n    rule_info = describe_rule_response.get_rule_info()\n    print(\"修改后的规则名称: {}\".format(rule_info.get_rule_name()))\n    \n    # 验证查询采集配置列表的新增参数\n    describe_rules_request = DescribeRulesRequest(project_name=\"project-name-\" + now, log_type=\"delimiter_log\", pause=1)\n    describe_rules_response = tls_service.describe_rules(describe_rules_request)\n    print(\"查询到 {} 个暂停的采集配置\".format(len([r for r in describe_rules_response.get_rule_infos() if hasattr(r, 'pause') and r.pause])))\n\n    # 创建机器组\n    create_host_group_request = CreateHostGroupRequest(host_group_name=\"host-group-name\", host_group_type=\"IP\",\n                                                       host_ip_list=[\"192.168.1.1\", \"192.168.1.2\", \"192.168.1.3\"])\n    create_host_group_response = tls_service.create_host_group(create_host_group_request)\n    host_group_id = create_host_group_response.get_host_group_id()\n\n    # 应用采集配置到机器组\n    # 请根据您的需要，填写rule_id和host_group_ids列表\n    # ApplyRuleToHostGroups API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112204\n    apply_rule_to_host_groups_request = ApplyRuleToHostGroupsRequest(rule_id, host_group_ids=[host_group_id])\n    apply_rule_to_host_groups_response = tls_service.apply_rule_to_host_groups(apply_rule_to_host_groups_request)\n\n    # 删除机器组的采集配置\n    # 请根据您的需要，填写rule_id和host_group_ids列表\n    # DeleteRuleFromHostGroups API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112205\n    delete_rule_from_host_groups_request = DeleteRuleFromHostGroupsRequest(rule_id, host_group_ids=[host_group_id])\n    delete_rule_from_host_groups_response = tls_service.delete_rule_from_host_groups(\n        delete_rule_from_host_groups_request)\n\n    # 删除采集配置\n    # 请根据您的需要，填写待删除的rule_id\n    # DeleteRule API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112200\n    delete_rule_request = DeleteRuleRequest(rule_id)\n    delete_rule_response = tls_service.delete_rule(delete_rule_request)\n\n     # 删除机器组\n    delete_host_group_request = DeleteHostGroupRequest(host_group_id)\n    delete_host_group_response = tls_service.delete_host_group(delete_host_group_request)\n\n    # 删除日志主题\n    tls_service.delete_topic(DeleteTopicRequest(topic_id))\n\n    # 删除日志项目\n    tls_service.delete_project(DeleteProjectRequest(project_id))\n"
  },
  {
    "path": "volcengine/example/tls/example_schedule_sql_task.py",
    "content": "# coding=utf-8\nimport os\nimport time\nimport uuid\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import *\n\n\nif __name__ == \"__main__\":\n    # 初始化客户端，需要设置AccessKey ID/AccessKey Secret，以及服务地域\n    endpoint = os.environ[\"VOLCENGINE_ENDPOINT\"]\n    region = os.environ[\"VOLCENGINE_REGION\"]\n    access_key_id = os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"]\n    access_key_secret = os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"]\n\n    # 创建TLS客户端\n    tls_service = TLSService(endpoint, access_key_id, access_key_secret, region)\n\n    # 创建项目和主题用于测试\n    project_name = f\"tls-python-sdk-schedule-project-{uuid.uuid4().hex}\"\n    source_topic_name = f\"tls-python-sdk-schedule-source-topic-{uuid.uuid4().hex}\"\n    dest_topic_name = f\"tls-python-sdk-schedule-dest-topic-{uuid.uuid4().hex}\"\n\n    # 创建项目\n    create_project_request = CreateProjectRequest(\n        project_name=project_name,\n        region=region,\n    )\n    create_project_response = tls_service.create_project(create_project_request)\n    project_id = create_project_response.get_project_id()\n    print(f\"Created project: {project_id}\")\n\n    # 创建源主题\n    create_source_topic_request = CreateTopicRequest(\n        project_id=project_id,\n        topic_name=source_topic_name,\n        shard_count=1,\n        ttl=1,\n    )\n    create_source_topic_response = tls_service.create_topic(create_source_topic_request)\n    source_topic_id = create_source_topic_response.get_topic_id()\n    print(f\"Created source topic: {source_topic_id}\")\n\n    # 创建目标主题\n    create_dest_topic_request = CreateTopicRequest(\n        project_id=project_id,\n        topic_name=dest_topic_name,\n        shard_count=1,\n        ttl=1,\n    )\n    create_dest_topic_response = tls_service.create_topic(create_dest_topic_request)\n    dest_topic_id = create_dest_topic_response.get_topic_id()\n    print(f\"Created dest topic: {dest_topic_id}\")\n\n    # 为源主题创建索引\n    create_index_request = CreateIndexRequest(\n        topic_id=source_topic_id,\n        full_text=FullTextInfo(\n            delimiter=\",; \",\n            case_sensitive=False,\n            include_chinese=False,\n        ),\n    )\n    create_index_response = tls_service.create_index(create_index_request)\n    print(f\"Created index for source topic: {create_index_response.get_request_id()}\")\n\n    # 创建定时SQL任务\n    current_time = int(time.time())\n    task_name = f\"tls-python-sdk-schedule-task-{uuid.uuid4().hex}\"\n    create_schedule_sql_task_request = CreateScheduleSqlTaskRequest(\n        task_name=task_name,\n        topic_id=source_topic_id,\n        dest_topic_id=dest_topic_id,\n        process_start_time=current_time + 3600,  # 1小时后开始\n        process_time_window=\"@m-15m,@m\",\n        query=\"* | select count(*) as count\",\n        request_cycle=RequestCycle(\n            cycle_type=\"Period\",\n            time=60,  # 每60分钟执行一次\n        ),\n        status=0,  # 关闭任务，后续需手动启动\n        description=\"测试定时SQL任务\",\n        process_sql_delay=60,\n    )\n\n    create_schedule_sql_task_response = tls_service.create_schedule_sql_task(\n        create_schedule_sql_task_request)\n    task_id = create_schedule_sql_task_response.get_task_id()\n    print(f\"Created schedule SQL task: {task_id}\")\n\n    # 清理资源\n    print(\"Cleaning up resources...\")\n    # 删除目标主题\n    delete_dest_topic_request = DeleteTopicRequest(topic_id=dest_topic_id)\n    tls_service.delete_topic(delete_dest_topic_request)\n    print(f\"Deleted dest topic: {dest_topic_id}\")\n\n    # 删除源主题\n    delete_source_topic_request = DeleteTopicRequest(topic_id=source_topic_id)\n    tls_service.delete_topic(delete_source_topic_request)\n    print(f\"Deleted source topic: {source_topic_id}\")\n\n    # 删除项目\n    delete_project_request = DeleteProjectRequest(project_id=project_id)\n    tls_service.delete_project(delete_project_request)\n    print(f\"Deleted project: {project_id}\")\n\n    print(\"Example completed successfully!\")"
  },
  {
    "path": "volcengine/example/tls/example_shipper.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import *\n\nif __name__ == \"__main__\":\n    # 初始化客户端，推荐通过环境变量动态获取火山引擎密钥等身份认证信息，以免AccessKey硬编码引发数据安全风险。详细说明请参考 https://www.volcengine.com/docs/6470/1166455\n    # 使用STS时，ak和sk均使用临时密钥，且设置VOLCENGINE_TOKEN；不使用STS时，VOLCENGINE_TOKEN部分传空\n    endpoint = os.environ[\"VOLCENGINE_ENDPOINT\"]\n    region = os.environ[\"VOLCENGINE_REGION\"]\n    access_key_id = os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"]\n    access_key_secret = os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"]\n\n    # 实例化TLS客户端\n    tls_service = TLSService(endpoint, access_key_id, access_key_secret, region)\n    now = str(int(time.time()))\n\n    # 创建日志项目\n    create_project_request = CreateProjectRequest(project_name=\"shipper-project-\" + now, region=region,\n                                                  description=\"project for shipper test\")\n    create_project_response = tls_service.create_project(create_project_request)\n    project_id = create_project_response.get_project_id()\n    print(\"创建日志项目成功，project_id: {}\".format(project_id))\n\n    # 创建日志主题\n    create_topic_request = CreateTopicRequest(\n        topic_name=\"shipper-topic-\" + now,\n        project_id=project_id,\n        ttl=5,\n        description=\"topic for shipper test\",\n        shard_count=2,\n    )\n    create_topic_response = tls_service.create_topic(create_topic_request)\n    topic_id = create_topic_response.get_topic_id()\n    print(\"创建日志主题成功，topic_id: {}\".format(topic_id))\n\n    # 示例1：创建TOS投递配置\n    print(\"\\n=== 创建TOS投递配置 ===\")\n    \n    # JSON格式内容配置\n    json_info = JsonInfo(\n        enable=True,\n        keys=[\"__content__\", \"__time__\", \"__source__\", \"level\", \"message\"],  # 指定要投递的字段\n        escape=True\n    )\n    \n    # 内容信息配置\n    content_info = ContentInfo(\n        format=\"json\",  # JSON格式\n        json_info=json_info\n    )\n    \n    # TOS投递信息配置\n    tos_shipper_info = TosShipperInfo(\n        bucket=\"bucket-for-import-sdk-test\",  # 请替换为您的TOS存储桶名称\n        prefix=\"logs/shipper/\",  # 投递路径前缀\n        max_size=256,  # 每个分片最大投递文件大小（MiB）\n        compress=\"snappy\",  # 压缩格式\n        interval=300,  # 投递时间间隔（秒）\n        partition_format=\"%Y/%m/%d/%H\"  # 分区格式\n    )\n    \n    # 创建TOS投递配置请求\n    create_tos_shipper_request = CreateShipperRequest(\n        topic_id=topic_id,\n        shipper_name=\"tos-shipper-\" + now,\n        shipper_type=\"tos\",  # TOS投递类型\n        content_info=content_info,\n        tos_shipper_info=tos_shipper_info,\n        shipper_start_time=int(time.time() * 1000),  # 当前时间作为开始时间\n        shipper_end_time=int((time.time() + 3600) * 1000)  # 1小时后结束\n    )\n    \n    try:\n        create_tos_response = tls_service.create_shipper(create_tos_shipper_request)\n        tos_shipper_id = create_tos_response.get_shipper_id()\n        print(\"TOS投递配置创建成功，shipper_id: {}\".format(tos_shipper_id))\n        \n        # 验证查询TOS投递配置\n        print(\"\\n=== 验证查询TOS投递配置 ===\")\n        try:\n            describe_tos_request = DescribeShipperRequest(shipper_id=tos_shipper_id)\n            tos_info = tls_service.describe_shipper(describe_tos_request)\n            print(\"查询TOS投递配置成功\")\n            print(\"投递配置名称: {}\".format(tos_info.get_shipper_name()))\n            print(\"投递类型: {}\".format(tos_info.get_shipper_type()))\n            print(\"状态: {}\".format(tos_info.get_status()))\n            print(\"TOS存储桶: {}\".format(tos_info.get_tos_shipper_info().bucket))\n            print(\"投递路径: {}\".format(tos_info.get_tos_shipper_info().prefix))\n        except Exception as e:\n            print(\"查询TOS投递配置失败: {}\".format(str(e)))\n        \n        # 验证修改TOS投递配置\n        print(\"\\n=== 验证修改TOS投递配置 ===\")\n        try:\n            # 修改投递间隔和压缩格式\n            modified_tos_info = TosShipperInfo(\n                bucket=\"bucket-for-import-sdk-test\",\n                prefix=\"logs/modified/\",\n                max_size=128,  # 修改为128MiB\n                compress=\"gzip\",  # 修改为gzip压缩\n                interval=600,  # 修改为10分钟\n                partition_format=\"%Y/%m/%d\"  # 修改分区格式\n            )\n            \n            modify_tos_request = ModifyShipperRequest(\n                shipper_id=tos_shipper_id,\n                shipper_name=\"modified-tos-shipper-\" + now,\n                tos_shipper_info=modified_tos_info,\n                status=False  # 暂停投递\n            )\n            \n            modify_tos_response = tls_service.modify_shipper(modify_tos_request)\n            print(\"修改TOS投递配置成功\")\n        except Exception as e:\n            print(\"修改TOS投递配置失败: {}\".format(str(e)))\n            \n    except Exception as e:\n        print(\"TOS投递配置创建失败: {}\".format(str(e)))\n        tos_shipper_id = None\n\n    # 示例2：创建Kafka投递配置\n    print(\"\\n=== 创建Kafka投递配置 ===\")\n    \n    # original格式内容配置\n    json_info = JsonInfo(\n        keys=[\"timestamp\", \"level\", \"service\", \"message\", \"request_id\"],  # JSON字段\n        escape=True\n    )\n    \n    # 内容信息配置\n    content_info_csv = ContentInfo(\n        format=\"original\",  # CSV格式\n        json_info=json_info\n    )\n    \n    # Kafka投递信息配置\n    kafka_shipper_info = KafkaShipperInfo(\n        instance=\"kafka-cnoe27xibel3vjxd\",  # Kafka实例ID\n        kafka_topic=\"test1\",  # Kafka Topic名称\n        compress=\"snappy\",  # 压缩格式\n        start_time=int(time.time() * 1000),  # 开始时间\n        end_time=int((time.time() + 3600) * 1000)  # 1小时后结束\n    )\n    \n    # 创建Kafka投递配置请求\n    create_kafka_shipper_request = CreateShipperRequest(\n        topic_id=topic_id,\n        shipper_name=\"kafka-shipper-\" + now,\n        shipper_type=\"kafka\",  # Kafka投递类型\n        content_info=content_info_csv,\n        kafka_shipper_info=kafka_shipper_info\n    )\n    \n    try:\n        create_kafka_response = tls_service.create_shipper(create_kafka_shipper_request)\n        kafka_shipper_id = create_kafka_response.get_shipper_id()\n        print(\"Kafka投递配置创建成功，shipper_id: {}\".format(kafka_shipper_id))\n        \n        # 验证查询Kafka投递配置\n        print(\"\\n=== 验证查询Kafka投递配置 ===\")\n        try:\n            describe_kafka_request = DescribeShipperRequest(shipper_id=kafka_shipper_id)\n            describe_kafka_response = tls_service.describe_shipper(describe_kafka_request)\n            print(\"查询Kafka投递配置成功\")\n            print(\"投递配置名称: {}\".format(describe_kafka_response.get_shipper_name()))\n            print(\"投递类型: {}\".format(describe_kafka_response.get_shipper_type()))\n            print(\"Kafka实例: {}\".format(describe_kafka_response.get_kafka_shipper_info().instance))\n            print(\"Kafka Topic: {}\".format(describe_kafka_response.get_kafka_shipper_info().kafka_topic))\n        except Exception as e:\n            print(\"查询Kafka投递配置失败: {}\".format(str(e)))\n        \n        # 验证修改Kafka投递配置\n        print(\"\\n=== 验证修改Kafka投递配置 ===\")\n        try:\n            # 修改Kafka配置\n            modified_kafka_info = KafkaShipperInfo(\n                instance=\"kafka-cnoe27xibel3vjxd\",\n                kafka_topic=\"test1\",  # 修改Topic名称\n                compress=\"gzip\"  # 修改为gzip压缩\n            )\n            \n            modify_kafka_request = ModifyShipperRequest(\n                shipper_id=kafka_shipper_id,\n                shipper_name=\"modified-kafka-shipper-\" + now,\n                kafka_shipper_info=modified_kafka_info,\n                status=True  # 启用投递\n            )\n            \n            modify_kafka_response = tls_service.modify_shipper(modify_kafka_request)\n            print(\"修改Kafka投递配置成功\")\n        except Exception as e:\n            print(\"修改Kafka投递配置失败: {}\".format(str(e)))\n            \n    except Exception as e:\n        print(\"Kafka投递配置创建失败: {}\".format(str(e)))\n        kafka_shipper_id = None\n\n    # 示例3：查询投递配置列表\n    print(\"\\n=== 查询投递配置列表 ===\")\n    try:\n        # 查询所有投递配置\n        describe_shippers_request = DescribeShippersRequest(\n            project_id=project_id,\n            topic_id=topic_id,\n            page_number=1,\n            page_size=20\n        )\n        \n        shippers_response = tls_service.describe_shippers(describe_shippers_request)\n        print(\"查询投递配置列表成功\")\n        print(\"总配置数: {}\".format(shippers_response.get_total()))\n        \n        shipper_list = shippers_response.get_shippers()\n        print(\"获取到 {} 个投递配置\".format(len(shipper_list)))\n        \n        for i, shipper in enumerate(shipper_list):\n            print(\"配置 {}: ID={}, 名称={}, 类型={}, 状态={}\".format(\n                i + 1,\n                shipper.shipper_id,\n                shipper.shipper_name,\n                shipper.shipper_type,\n                shipper.status\n            ))\n            \n    except Exception as e:\n        print(\"查询投递配置列表失败: {}\".format(str(e)))\n\n    # 示例4：按类型筛选查询\n    print(\"\\n=== 按类型筛选投递配置 ===\")\n    try:\n        # 查询TOS类型的投递配置\n        tos_shippers_request = DescribeShippersRequest(\n            page_number=1,\n            page_size=10\n        )\n        \n        tos_shippers_response = tls_service.describe_shippers(tos_shippers_request)\n        print(\"TOS类型投递配置数: {}\".format(tos_shippers_response.get_total()))\n        if tos_shippers_response.get_shippers():\n            print(\"第一个投递配置: {}\".format(\n                tos_shippers_response.get_shippers()[0].json()\n            ))\n        \n        # 查询Kafka类型的投递配置\n        kafka_shippers_request = DescribeShippersRequest(\n            shipper_type=\"kafka\",  # 筛选Kafka类型\n            page_number=1,\n            page_size=10\n        )\n        \n        kafka_shippers_response = tls_service.describe_shippers(kafka_shippers_request)\n        print(\"Kafka类型投递配置数: {}\".format(kafka_shippers_response.get_total()))\n        if kafka_shippers_response.get_shippers():\n            print(\"第一个Kafka配置: {}\".format(\n                kafka_shippers_response.get_shippers()[0].json()\n            ))\n\n    except Exception as e:\n        print(\"按类型筛选查询失败: {}\".format(str(e)))\n\n    # 清理资源\n    print(\"\\n=== 清理投递配置 ===\")\n    if tos_shipper_id:\n        try:\n            delete_tos_request = DeleteShipperRequest(shipper_id=tos_shipper_id)\n            tls_service.delete_shipper(delete_tos_request)\n            print(\"TOS投递配置删除成功\")\n        except Exception as e:\n            print(\"TOS投递配置删除失败: {}\".format(str(e)))\n    \n    if kafka_shipper_id:\n        try:\n            delete_kafka_request = DeleteShipperRequest(shipper_id=kafka_shipper_id)\n            tls_service.delete_shipper(delete_kafka_request)\n            print(\"Kafka投递配置删除成功\")\n        except Exception as e:\n            print(\"Kafka投递配置删除失败: {}\".format(str(e)))\n\n    # 删除日志主题和项目\n    print(\"\\n=== 清理日志资源 ===\")\n    delete_topic_request = DeleteTopicRequest(topic_id)\n    tls_service.delete_topic(delete_topic_request)\n    print(\"日志主题删除成功\")\n\n    tls_service.delete_project(DeleteProjectRequest(project_id))\n    print(\"日志项目删除成功\")\n    \n    print(\"\\n=== Shipper示例程序执行完成 ===\")"
  },
  {
    "path": "volcengine/example/tls/example_tag.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import *\n\n\nif __name__ == \"__main__\":\n    # 初始化客户端，推荐通过环境变量动态获取火山引擎密钥等身份认证信息，以免AccessKey硬编码引发数据安全风险。详细说明请参考 https://www.volcengine.com/docs/6470/1166455\n    # 使用STS时，ak和sk均使用临时密钥，且设置VOLCENGINE_TOKEN；不使用STS时，VOLCENGINE_TOKEN部分传空\n    endpoint = os.environ[\"VOLCENGINE_ENDPOINT\"]\n    region = os.environ[\"VOLCENGINE_REGION\"]\n    access_key_id = os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"]\n    access_key_secret = os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"]\n\n    # 实例化TLS客户端\n    tls_service = TLSService(endpoint, access_key_id, access_key_secret, region)\n\n    # 为日志项目或日志主题绑定标签\n    # 请根据您的需要，填写resource_type、resource_list和tags等参数\n    # AddTagsToResource API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/597772\n    add_tags_to_resource_req = AddTagsToResourceRequest(resource_type=\"topic\",\n                                                        resources_list=[\"your-topic-id-1\", \"your-topic-id-2\"],\n                                                        tags=[TagInfo(\"test-tag-key\", \"test-tag-value\")])\n    add_tags_to_resource_resp = tls_service.add_tags_to_resource(add_tags_to_resource_req)\n\n    # 为日志项目或日志主题解绑标签\n    # 请根据您的需要，填写resource_type、resource_list和tag_key_list等参数\n    # RemoveTagsFromResource API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/597802\n    remove_tags_from_resource_req = RemoveTagsFromResourceRequest(resource_type=\"topic\",\n                                                                  resources_list=[\"your-topic-id\"],\n                                                                  tag_key_list=[\"test-tag-key\"])\n    remove_tags_from_resource_resp = tls_service.remove_tags_from_resource(remove_tags_from_resource_req)\n"
  },
  {
    "path": "volcengine/example/tls/example_topic.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import *\n\n\nif __name__ == \"__main__\":\n    # 初始化客户端，推荐通过环境变量动态获取火山引擎密钥等身份认证信息，以免AccessKey硬编码引发数据安全风险。详细说明请参考 https://www.volcengine.com/docs/6470/1166455\n    # 使用STS时，ak和sk均使用临时密钥，且设置VOLCENGINE_TOKEN；不使用STS时，VOLCENGINE_TOKEN部分传空\n    endpoint = os.environ[\"VOLCENGINE_ENDPOINT\"]\n    region = os.environ[\"VOLCENGINE_REGION\"]\n    access_key_id = os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"]\n    access_key_secret = os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"]\n\n    # 实例化TLS客户端\n    tls_service = TLSService(endpoint, access_key_id, access_key_secret, region)\n    now = str(int(time.time()))\n\n    # 创建日志项目\n    create_project_request = CreateProjectRequest(project_name=\"project-name-\" + now, region=region,\n                                                  description=\"project-description\")\n    create_project_response = tls_service.create_project(create_project_request)\n    project_id = create_project_response.get_project_id()\n\n    # 创建日志主题\n    # 请根据您的需要，填写project_id、topic_name、ttl、shard_count和description等参数\n    # CreateTopic API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112180\n    create_topic_request = CreateTopicRequest(\n        topic_name=\"topic-name-\" + now,\n        project_id=project_id,\n        ttl=3650,\n        description=\"topic-description\",\n        shard_count=2,\n        enable_hot_ttl=True,\n        hot_ttl=30,\n        cold_ttl=70,\n        archive_ttl=3550,\n    )\n    create_topic_response = tls_service.create_topic(create_topic_request)\n    topic_id = create_topic_response.get_topic_id()\n\n    # 查询指定日志主题信息\n    # 请根据您的需要，填写待查询的topic_id\n    # DescribeTopic API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112184\n    describe_topic_request = DescribeTopicRequest(topic_id)\n    describe_topic_response = tls_service.describe_topic(describe_topic_request)\n    print(\"topic id: {}\".format(describe_topic_response.get_topic().get_topic_id()))\n\n    # 修改日志主题\n    # 请根据您的需要，填写topic_id以及待修改的各项参数\n    # ModifyTopic API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112183\n    modify_topic_request = ModifyTopicRequest(\n        topic_id,\n        topic_name=\"change-topic-name\",\n        description=\"change-topic-description\",\n        ttl=3650,\n        enable_hot_ttl=True,\n        hot_ttl=100,\n        cold_ttl=100,\n        archive_ttl=3450,\n    )\n    modify_topic_response = tls_service.modify_topic(modify_topic_request)\n\n    # 查询所有日志主题信息\n    # 请根据您的需要，填写待查询的project_id\n    # DescribeTopics API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112185\n    describe_topics_request = DescribeTopicsRequest(\n        project_id,\n        project_name=\"project-name\",\n    )\n    describe_topics_response = tls_service.describe_topics(describe_topics_request)\n    if describe_topics_response.get_total() > 0:\n        print(\"topics total: {}\\nfirst topic name: {}\".format(describe_topics_response.get_total(),\n                                                              describe_topics_response.get_topics()[0].get_topic_name()))\n    else:\n        print(\"no topics\")\n\n    # 删除日志主题\n    # 请根据您的需要，填写待删除的topic_id\n    # DeleteTopic API的请求参数规范请参阅 https://www.volcengine.com/docs/6470/112182\n    delete_topic_request = DeleteTopicRequest(topic_id)\n    delete_topic_response = tls_service.delete_topic(delete_topic_request)\n\n    # 删除日志项目\n    tls_service.delete_project(DeleteProjectRequest(project_id))\n"
  },
  {
    "path": "volcengine/example/vedit/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/vedit/example_edit.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.vedit.VEditService import VEditService\n\nif __name__ == '__main__':\n    edit_service = VEditService()\n\n    # call below method if you dont set ak and sk in $HOME/.vcloud/config\n    # edit_service.set_ak('ak')\n    # edit_service.set_sk('sk')\n\n    body = {}\n    body[\"EditParam\"] = {\n        \"Upload\": {\n            \"Uploader\": \"your uploader\",\n            \"VideoName\": \"your video name\"\n        },\n        \"Output\": {\n            \"Fps\": 25,\n            \"Height\": 720,\n            \"Quality\": \"medium\",\n            \"Width\": 1280\n        },\n        \"Segments\": [{\n            \"BackGround\": \"0xFFFFFFFF\",\n            \"Duration\": 3,\n            \"Elements\": [],\n            \"Volume\": 1\n        }],\n        \"GlobalElements\": []\n    }\n    body[\"Priority\"] = 0\n    body[\"CallbackArgs\"] = \"your callback args\"\n    body[\"CallbackUri\"] = \"your callback uri\"\n\n    body = json.dumps(body)\n    resp = edit_service.submit_direct_edit_task_async(body)\n    print(resp)\n\n    print(\"****\")\n\n    body = {}\n    body[\"ReqIds\"] = [\"your req id 1\", \"your req id 2\"]\n\n    body = json.dumps(body)\n    resp = edit_service.get_direct_edit_result(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/__init__.py",
    "content": "ak = ''\nsk = ''\n"
  },
  {
    "path": "volcengine/example/veen/attach_ebs.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"ebs_id\": \"disk-t9p44586fn6cbs9\",\n        \"ebs_ids\": [\"disk-t9p44586fn6cbs9\"],\n        \"res_type\": \"veen\",\n        \"res_id\": \"testing2-veen92023710333272539522\",\n        \"delete_with_res\": True,\n    }\n\n    resp = svc.attach_ebs(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/batch_reset_system.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"instance_identities\": [\"veen26301302623093022820\", \"testing-veen23323035425312030023\"],\n        \"image_identity\": \"image7ajpdaodf7\",\n        \"clear_data_disk\": False,\n    }\n\n    resp = svc.batch_reset_system(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/create_cloudserver.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"cloudserver_name\": \"test-sdk\",\n        \"image_id\": \"imagekhvhgzhna6\",\n        \"spec_name\": \"veEN.C1.large\",\n        \"storage_config\": {\n            \"system_disk\": {\"capacity\": \"40\", \"storage_type\": \"CloudBlockSSD\"},\n            \"data_disk_list\": [\n                {\"capacity\": \"20\", \"storage_type\": \"CloudBlockSSD\"},\n                {\"capacity\": \"40\", \"storage_type\": \"CloudBlockSSD\"},\n            ],\n        },\n        \"network_config\": {\n            \"bandwidth_peak\": \"200\",\n            \"enable_ipv6\": False,\n        },\n        \"secret_config\": {\"secret_type\": 2, \"secret_data\": \"Abcd1234*\"},\n        \"instance_area_nums\": [\n            {\"cluster_name\": \"bdcdn-ycct\", \"num\": 2}\n        ],\n        \"billing_config\": {\n            \"computing_billing_method\": \"MonthlyPeak\",\n            \"bandwidth_billing_method\": \"MonthlyP95\",\n        },\n    }\n\n    resp = svc.create_cloudserver(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/create_ebs_instances.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"cluster_name\": \"bdcdn-chdcu\",\n        \"charge_type\": \"HourUsed\",\n        \"ebs_type\": \"data\",\n        \"storage_type\": \"CloudBlockHDD\",\n        \"capacity\": \"200\",\n        \"number\": 1,\n        \"name\": \"ebs_test_yx\",\n        \"desc\": \"test\",\n        \"project\": \"\",\n        \"delete_with_res\": True,\n        \"res_id\": \"veen-xxxxx\",\n    }\n\n    resp = svc.create_ebs_instances(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/create_instance.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"cloud_server_identity\": \"cloudserver-8fz56vmnzbwcv99\",\n        \"instance_area_nums\": [\n            {\"cluster_name\": \"bdcdn-ycct\", \"num\": 1}\n        ],\n    }\n\n    resp = svc.create_instance(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/delete_cloudserver.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\"cloud_server_id\": \"cloudserver-8fz56vmnzbwcv99\"}\n\n    resp = svc.delete_cloudserver(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/delete_ebs_instance.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"ebs_id\": \"disk-t9p44586fn6cbs9\",\n        \"ebs_ids\": [\"disk-t9p44586fn6cbs9\"],\n    }\n\n    resp = svc.delete_ebs_instance(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/detach_ebs.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"ebs_id\": \"disk-t9p44586fn6cbs9\",\n        \"ebs_ids\": [\"disk-t9p44586fn6cbs9\"],\n    }\n\n    resp = svc.detach_ebs(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/get_cloudserver.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    query = {\"cloud_server_id\": \"cloudserver-8fz56vmnzbwcv99\"}\n\n    resp = svc.get_cloudserver(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/get_ebs_instance.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"ebs_id\": \"disk-t9p44586fn6cbs9\",\n        \"with_attachment_info\": True,\n    }\n\n    resp = svc.get_ebs_instance(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/get_instance.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\nimport json\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    query = {\n        \"instance_identity\": \"veen26301302623093022820\",\n    }\n\n    resp = svc.get_instance(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/get_instance_cloud_disk_info.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    query = {\n        \"instance_identity\": \"veen26301302623093022820\",\n    }\n\n    resp = svc.get_instance_cloud_disk_info(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/list_available_resource_info.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    query = {\"instance_type\": \"veEN.C1.large\", \"cloud_disk_type\": \"CloudSSD\"}\n\n    resp = svc.list_available_resource_info(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/list_cloudservers.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    query = {\"fuzzy_name\": \"sdk\", \"page\": 1, \"limit\": 10, \"order_by\": 2}\n\n    resp = svc.list_cloudservers(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/list_ebs_instances.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"with_attachment_info\": True,\n        \"res_ids\": [\"testing2-veen92023710333272539522\"],\n        \"ebs_ids\": [\"disk-t9p44586fn6cbs9\"],\n        \"ebs_names\": [\"本地_虚机测试用-3\"],\n        \"regions\": [\"CentralChina\"],\n        \"cluster_names\": [\"nbct05-testing3\"],\n        \"status\": [\"attached\"],\n        \"ebs_type\": [\"data\"],\n        \"charge_type\": [\"HourUsed\"],\n        \"fuzzy_veen_external_ip\": \"172.19.23.230\",\n        \"delete_with_res\": True,\n        \"fuzzy_ebs_id_or_name\": \"disk-t9p44586fn6cbs9\",\n        \"page_option\": {\n            \"page_no\": 1,\n            \"page_size\": 10,\n        },\n        \"order_option\": {\n            \"order_by\": \"ebs_id\",\n            \"asc\": True,\n        },\n    }\n\n    resp = svc.list_ebs_instances(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/list_instance_types.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    query = {}\n\n    resp = svc.list_instance_types(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/list_instances.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\nimport json\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    query = {\n        \"regions\": \"SouthChina,Northwest\", \n        \"cities\": \"440300,640100\",\n        \"isps\": \"CTCC,CMCC_CTCC_CUCC\",\n        \"status\": \"opening,running\",\n        \"page\": 2, \n        \"limit\": 2, \n        \"order_by\": 2\n    }\n\n    resp = svc.list_instances(query)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/offline_instances.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"instance_identities\": [\n            \"veen26301302623093022820\",\n            \"veen25200031222138400005\",\n            \"veen38855042004824221584\",\n        ],\n        \"ignore_running\": True,\n    }\n\n    resp = svc.offline_instances(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/reboot_cloudserver.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\"cloud_server_id\": \"cloudserver-8fz56vmnzbwcv99\"}\n\n    resp = svc.reboot_cloudserver(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/reboot_instances.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"instance_identities\": [\"veen26301302623093022820\", \"veen25200031222138400005\"]\n    }\n\n    resp = svc.reboot_instances(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/reset_login_credential.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"instance_identity\": \"veen26301302623093022820\",\n        \"secret_type\": 2,\n        \"secret_data\": \"Abcd1234&\"\n    }\n\n    resp = svc.reset_login_credential(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/scale_ebs_instance_capacity.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"ebs_id\": \"disk-t9p44586fn6cbs9\",\n        \"capacity\": \"200\",\n        \"with_reboot\": True,\n    }\n\n    resp = svc.scale_ebs_instance_capacity(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/scale_instance_cloud_disk_capacity.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"instance_identity\": \"veen26301302623093022820\",\n        \"scale_system_cloud_disk_info\": {\"device_name\": \"vda\", \"capacity\": \"1000\"},\n        \"scale_data_cloud_disk_info_list\": [{\"device_name\": \"vdb\", \"capacity\": \"1000\"}],\n        \"with_reboot\": True,\n    }\n\n    resp = svc.scale_instance_cloud_disk_capacity(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/set_instance_name.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"instance_identity\": \"veen26301302623093022820\",\n        \"instance_name\": \"sdk测试\",\n    }\n\n    resp = svc.set_instance_name(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/start_cloudserver.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\"cloud_server_id\": \"cloudserver-8fz56vmnzbwcv99\"}\n\n    resp = svc.start_cloudserver(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/start_instances.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"instance_identities\": [\"veen26301302623093022820\", \"veen25200031222138400005\"]\n    }\n\n    resp = svc.start_instances(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/stop_cloudserver.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\"cloud_server_id\": \"cloudserver-8fz56vmnzbwcv99\"}\n\n    resp = svc.stop_cloudserver(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/veen/stop_instances.py",
    "content": "#  -*- coding: utf-8 -*-\nimport os\nimport sys\n\nsys.path.append(os.path.dirname(os.path.realpath(__file__)) + \"/../../../\")\nfrom volcengine.example.veen import ak, sk\nfrom volcengine.veen.service import VeenService\n\nif __name__ == \"__main__\":\n    svc = VeenService()\n    svc.set_ak(ak)\n    svc.set_sk(sk)\n\n    body = {\n        \"instance_identities\": [\"veen26301302623093022820\", \"veen25200031222138400005\"]\n    }\n\n    resp = svc.stop_instances(body)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/verender/add_render_setting_demo.py",
    "content": "import verender_init\n\n\ndef add_render_setting_demo():\n    v = verender_init.get_verender_instance()\n\n    user = v.get_current_user()\n    params = {\n        \"WorkspaceId\": 1935\n    }\n    body = {\n        \"AccountId\": user[\"AccountId\"],\n        \"UserId\": user[\"UserId\"],\n        \"WorkspaceId\": 1935,\n        \"Name\": \"test-render-setting-2111\",\n        \"Dcc\": \"maya\",\n        \"DccVersion\": \"2022.3\",\n        \"Plugins\": [\n            {\n                \"Name\": \"mtoa\",\n                \"Version\": \"5.1.3\",\n                \"RenderPlugin\": True,\n                \"NeedLicense\": True\n            }\n        ],\n        \"RenderLayerMode\": \"LegacyRenderLayer\",\n        \"ProjectPath\": \"\",\n        \"FramesCountOneCell\": 1,\n        \"CellSpecId\": 15\n    }\n\n    resp = v.add_render_setting(params=params, body=body)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/auto_full_speed_render_jobs_demo.py",
    "content": "import verender_init\n\n\ndef auto_full_speed_render_jobs_demo():\n    v = verender_init.get_verender_instance()\n    params = {\n        \"WorkspaceId\": 19931\n    }\n\n    body = {\n        \"JobIds\": [\n            \"r377a81d87e\"\n        ]\n    }\n    resp = v.auto_full_speed_render_jobs(params, body)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/create_render_setting_demo.py",
    "content": "import verender_init\n\n\ndef create_render_job_demo(v):\n    v = verender_init.get_verender_instance()\n\n    workspace_id = 1993\n    params = {\n        \"WorkspaceId\": workspace_id,\n    }\n\n    # upload file\n    src = \"D:\\\\car-studio\\\\Studio_Top.ma\"\n    des = \"D:\\\\car-studio\\\\Studio_Top.ma\"\n    isp = \"ct\"\n    obj = v.upload_file(workspace_id, src, des, isp)\n\n    # get render setting\n    user = v.get_current_user()\n    p = {\n        \"AccountId\": user[\"AccountId\"],\n        \"UserId\": user[\"UserId\"],\n        \"WorkspaceId\": workspace_id,\n        \"CheckUserId\": False,\n        \"WithDeleted\": True,\n        \"Id\": 368\n    }\n    rs = v.get_render_setting(params=p)\n\n    body = {\n        \"Title\": \"test-create-render-job\",\n        \"Description\": \"volc-sdk-python\",\n        \"Tryout\": False,\n        \"SceneFile\": obj.name,\n        \"TimeoutReminderEachFrame\": 86400,\n        \"TimeoutStopperEachFrame\": 86400,\n        \"LayerConfig\": [\n            {\n                \"LayerIndex\": 0,\n                \"LayerName\": \"masterLayer\",\n                \"Frame\": {\n                    \"Start\": 1,\n                    \"End\": 10,\n                    \"Step\": 1\n                },\n                \"Resolutions\": {\n                    \"Height\": 1080,\n                    \"Width\": 1920\n                },\n                \"Cameras\": [\"文件内设置\"],\n                \"PluginData\": \"{}\",\n                \"Renderer\": \"mtoa\"\n            }\n        ],\n        \"RenderSetting\": rs,\n        \"FramesCountEachCell\": 8\n    }\n    resp = v.create_render_job(params=params, body=body)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/delete_render_jobs_demo.py",
    "content": "import verender_init\n\n\ndef delete_render_jobs_demo():\n    v = verender_init.get_verender_instance()\n    params = {\n        \"WorkspaceId\": 1993\n    }\n    body = {\n        \"JobIds\": [\n            \"r003ebaa720\"\n        ]\n    }\n    resp = v.delete_render_jobs(params=params, body=body)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/delete_render_setting_demo.py",
    "content": "import verender_init\n\n\ndef delete_render_setting_demo():\n    v = verender_init.get_verender_instance()\n\n    params = {\n        \"WorkspaceId\": 1993,\n        \"RenderSettingId\": 361\n    }\n    resp = v.delete_render_setting(params=params)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/download_file_demo.py",
    "content": "import verender_init\n\n\ndef download_file_demo():\n    v = verender_init.get_verender_instance()\n\n    workspace_id = 1935\n    src = \"D/tests/test_upload_file/test_upload_file.txt\"\n    des = \"D:\\\\tests\\\\test_upload_file\\\\test_upload_file.txt\"\n    isp = \"ct\" # ct: 电信 un: 联通 cm: 移动\n\n    f = v.download_file(workspace_id, src, des, isp)\n    print(f)"
  },
  {
    "path": "volcengine/example/verender/full_speed_render_jobs_demo.py",
    "content": "import verender_init\n\n\ndef full_speed_render_jobs_demo():\n    v = verender_init.get_verender_instance()\n    params = {\n        \"WorkspaceId\": 1993\n    }\n    body = {\n        \"JobIds\": [\n            \"r90ea40ecbd\",\n            \"r041853ab30\"\n        ]\n    }\n    resp = v.full_speed_render_jobs(params=params, body=body)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/get_current_user_demo.py",
    "content": "import verender_init\n\n\ndef get_current_user_demo():\n    v = verender_init.get_verender_instance()\n\n    resp = v.get_current_user()\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/get_job_output_demo.py",
    "content": "import verender_init\n\n\ndef get_job_output_demo():\n    v = verender_init.get_verender_instance()\n    params = {\n        \"WorkspaceId\": 1802,\n        \"JobId\": \"rf19285eae5\"\n    }\n\n    body = {\n        \"Layers\": {\n            \"masterLayer\": {\n                \"Frames\": [1, 2, 3],\n                \"IncludeThumb\": True,\n                \"IncludeImage\": True\n            }\n        }\n    }\n\n    resp = v.get_job_output(params=params, body=body)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/get_render_job_demo.py",
    "content": "import verender_init\n\n\ndef get_render_job_demo():\n    v = verender_init.get_verender_instance()\n    params = {\n        \"WorkspaceId\": 1993,\n        \"RenderJobId\": \"r776bf384a4\"\n    }\n    resp = v.get_render_job(params=params)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/get_render_setting_demo.py",
    "content": "import verender_init\n\n\ndef get_render_setting_demo():\n    v = verender_init.get_verender_instance()\n    user = v.get_current_user()\n    params = {\n        \"AccountId\": user[\"AccountId\"],\n        \"UserId\": user[\"UserId\"],\n        \"WorkspaceId\": 1993,\n        \"Id\": 360\n    }\n\n    resp = v.get_render_setting(params=params)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/list_account_dcc_plugins_demo.py",
    "content": "import verender_init\n\n\ndef list_account_dcc_plugins_demo():\n    v = verender_init.get_verender_instance()\n\n    params = {\n        \"SpecTemplateId\": 15,\n        \"Dcc\": \"maya\",\n        \"DccVersion\": \"2022.3\"\n    }\n\n    resp = v.list_account_dcc_plugin(params=params)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/list_cell_spec_demo.py",
    "content": "import verender_init\n\n\ndef list_cell_spec_demo():\n    v = verender_init.get_verender_instance()\n\n    params = {\n        \"WorkspaceId\": 735\n    }\n    resp = v.list_cell_spec(params=params)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/list_dcc_demo.py",
    "content": "import verender_init\n\n\ndef list_dcc_demo():\n    v = verender_init.get_verender_instance()\n\n    resp = v.list_dcc()\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/list_file_demo.py",
    "content": "import verender_init\n\n\ndef list_file_demo():\n    v = verender_init.get_verender_instance()\n\n    workspace_id = 1935\n    prefix = \"D/tests\"\n    filter_in = \"\"\n    order_type = \"asc\" # asc or desc\n    order_field = \"name\" # name or mtime\n    page_num = 1\n    page_size = 10\n    isp = \"ct\" # ct: 电信 un: 联通 cm: 移动\n    total, file_info_list = v.list_file(workspace_id, prefix, filter_in, order_type, order_field, page_num, page_size, isp)\n    print(total)\n    print(file_info_list)"
  },
  {
    "path": "volcengine/example/verender/list_job_output_demo.py",
    "content": "import verender_init\n\n\ndef list_job_output_demo():\n    v = verender_init.get_verender_instance()\n    params = {\n        \"WorkspaceId\": 1802\n    }\n    body = {\n        \"StartTime\": \"2023-08-01T00:00:00+08:00\",\n        \"EndTime\": \"2023-08-14T00:00:00+08:00\",\n        \"PageNum\": 1,\n        \"PageSize\": 100,\n        \"Type\": \"all\", # all, image(渲染结果), thumb(缩略图)\n        \"Status\": \"all\", # all, new(未下载过的记录)\n        \"OrderType\": \"asc\", # asc, desc\n        \"OrderField\": \"created_at\", # 暂不支持其他\n        \"JobIdList\": [\"job_id1\", \"job_id2\"] # 单次建议不超过10个\n    }\n\n    resp = v.list_job_output(params=params, body=body)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/list_render_job_demo.py",
    "content": "import verender_init\n\n\ndef list_render_job_demo():\n    v = verender_init.get_verender_instance()\n    params = {\n        \"WorkspaceId\": 1993\n    }\n    resp = v.list_render_job(params=params)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/list_render_setting_demo.py",
    "content": "import verender_init\n\n\ndef list_render_setting_demo():\n    v = verender_init.get_verender_instance()\n    user = v.get_current_user()\n    params = {\n        \"AccountId\": user[\"AccountId\"],\n        \"UserId\": user[\"UserId\"],\n        \"WorkspaceId\": 1993,\n        \"Dcc\": \"maya\"\n    }\n    resp = v.list_render_setting(params=params)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/list_workspace_demo.py",
    "content": "import verender_init\n\n\ndef list_workspace_demo():\n    v = verender_init.get_verender_instance()\n\n    params = {\n        \"PageNum\": 1,\n        \"PageSize\": 10\n    }\n    resp = v.list_workspace(params)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/remove_file_demo.py",
    "content": "import verender_init\n\n\ndef remove_file_demo():\n    v = verender_init.get_verender_instance()\n\n    workspace_id = 1935\n    filename = \"D/tests/test_upload_file/test_upload_file.txt\"\n    isp = \"ct\" # ct: 电信 un: 联通 cm: 移动\n    v.remove_file(workspace_id, filename, isp)"
  },
  {
    "path": "volcengine/example/verender/resume_render_jobs_demo.py",
    "content": "import verender_init\n\n\ndef resume_render_jobs_demo():\n    v = verender_init.get_verender_instance()\n\n    params = {\n        \"WorkspaceId\": 1993\n    }\n    body = {\n        \"JobIds\": [\n            \"r776bf384a4\"\n        ]\n    }\n    resp = v.resume_render_jobs(params=params, body=body)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/retry_render_job_demo.py",
    "content": "import verender_init\n\n\ndef retry_render_job_demo():\n    v = verender_init.get_verender_instance()\n    params = {\n        \"WorkspaceId\": 1993,\n        \"RenderJobId\": \"r5ad3829bef\"\n    }\n    body = {\n        \"JobId\": \"r5ad3829bef\",\n        \"AllFailedFrames\": True,\n        \"CustomFrames\": [\n            {\n                \"LayerIndex\": 0,\n                \"FrameIndexes\": \"1-5\"\n            }\n        ]\n    }\n\n    resp = v.retry_render_job(params=params, body=body)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/stat_file_demo.py",
    "content": "import verender_init\n\n\ndef stat_file_demo():\n    v = verender_init.get_verender_instance()\n\n    workspace_id = 1935\n    filename = \"D/tests/test_upload_file/test_upload_file.txt\"\n    isp = \"un\" # ct: 电信 un: 联通 cm: 移动\n    f = v.stat_file(workspace_id, filename, isp)\n    print(f.name, f.size, f.mtime, f.md5)"
  },
  {
    "path": "volcengine/example/verender/stop_render_jobs_demo.py",
    "content": "import verender_init\n\n\ndef stop_render_jobs_demo():\n    v = verender_init.get_verender_instance()\n    params = {\n        \"WorkspaceId\": 1993\n    }\n    body = {\n        \"JobIds\": [\n            \"r003ebaa720\"\n        ]\n    }\n    resp = v.stop_render_jobs(params=params, body=body)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/update_job_output_demo.py",
    "content": "import verender_init\n\n\ndef update_job_output_demo():\n    v = verender_init.get_verender_instance()\n    params = {\n        \"WorkspaceId\": 1802,\n        \"JobId\": \"abc\"\n    }\n\n    body = {\n        \"files\": [\n            \"Result/test-create-render-job_rf19285eae5/images/simple.exr.0001\"\n        ]\n    }\n    resp = v.update_job_output(params=params, body=body)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/update_render_jobs_priority_demo.py",
    "content": "import verender_init\n\n\ndef update_render_jobs_priority_demo(v):\n    v = verender_init.get_verender_instance()\n    params = {\n        \"WorkspaceId\": 1993\n    }\n    body = {\n        \"JobIds\": [\n            \"r90ea40ecbd\",\n            \"r041853ab30\"\n        ],\n        \"Priority\": 10\n    }\n    resp = v.update_render_jobs_priority(params=params, body=body)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/update_render_setting_dem.py",
    "content": "import verender_init\n\n\ndef update_render_setting_demo():\n    v = verender_init.get_verender_instance()\n\n    user = v.get_current_user()\n    params = {\n        \"WorkspaceId\": 1993,\n        \"RenderSettingId\": 360\n    }\n\n    body = {\n        \"AccountId\": user[\"AccountId\"],\n        \"UserId\": user[\"UserId\"],\n        \"WorkspaceId\": 1993,\n        \"Name\": \"test-render-setting-1\",\n        \"Dcc\": \"maya\",\n        \"DccVersion\": \"2022\",\n        \"Plugins\": [\n            {\n                \"Name\": \"mtoa\",\n                \"Version\": \"5.1.2\",\n                \"RenderPlugin\": True,\n                \"NeedLicense\": True\n            }\n        ],\n        \"RenderLayerMode\": \"LegacyRenderLayer\",\n        \"ProjectPath\": \"\",\n        \"FrameOneCell\": 2,\n        \"CellSpecId\": 9\n    }\n\n    resp = v.update_render_setting(params=params, body=body)\n    print(resp)"
  },
  {
    "path": "volcengine/example/verender/upload_file_demo.py",
    "content": "import verender_init\n\n\ndef upload_file_demo():\n    v = verender_init.get_verender_instance()\n    workspace_id = 1935\n    src = \"D:\\\\tests\\\\test_upload_file\\\\test_upload_file.txt\"\n    des = \"D:\\\\tests\\\\test_upload_file\\\\test_upload_file.txt\"\n    isp = \"ct\" # ct: 电信 un: 联通 cm: 移动\n    f = v.upload_file(workspace_id, src, des, isp)\n    print(f.name, f.size, f.mtime, f.md5)"
  },
  {
    "path": "volcengine/example/verender/upload_folder_demo.py",
    "content": "import verender_init\n\n\ndef upload_folder_demo():\n    v = verender_init.get_verender_instance()\n    workspace_id = 1935\n    src_path = \"D:\\\\tests\\\\test_upload_folder\"\n    des_path = \"D:\\\\tests\\\\test_upload_folder\"\n    isp = \"un\" # ct: 电信 un: 联通 cm: 移动\n\n    v.upload_folder(workspace_id, src_path, des_path, isp)"
  },
  {
    "path": "volcengine/example/verender/verender_init.py",
    "content": "from volcengine.verender.VerenderService import  VerenderService\n\n\ndef get_verender_instance():\n    # ftrans_client_addr是快传客户端的地址 不配置走S10 传输速度会低于快传客户端\n    # ftrans_proxy_addr是代理的管理地址 无代理不需要填\n    v = VerenderService(ftrans_client_addr=\"127.0.0.1:8899\", ftrans_proxy_addr=\"10.1.1.1:30001\")\n    v.set_ak(\"your ak\")\n    v.set_sk(\"your sk\")\n    return v"
  },
  {
    "path": "volcengine/example/viking_db/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/viking_db/collection_create.py",
    "content": "import utils\nimport volcengine.viking_db as vkdb\n\nif __name__ == '__main__':\n    vikingdb_service = utils.get_vikingdb_service()\n    fields = [\n        vkdb.Field(field_name=\"f_id\", field_type=vkdb.FieldType.String, is_primary_key=True),\n        vkdb.Field(field_name=\"f_string\", field_type=vkdb.FieldType.String, default_val=\"\"),\n        vkdb.Field(field_name=\"f_int64\", field_type=vkdb.FieldType.Int64, default_val=0),\n        vkdb.Field(field_name=\"f_text\", field_type=vkdb.FieldType.Text, default_val=0, pipeline_name=\"text_doubao_embedding_and_m3\"),\n    ]\n\n    collection = vikingdb_service.create_collection(\"test_coll_for_sdk\", fields=fields, description=\"test for sdk\")\n    print(collection.collection_name)\n    print(collection.description)\n"
  },
  {
    "path": "volcengine/example/viking_db/collection_create_with_vectorize.py",
    "content": "import utils\nimport volcengine.viking_db as vkdb\n\nif __name__ == '__main__':\n    vikingdb_service = utils.get_vikingdb_service()\n    fields = [\n        vkdb.Field(field_name=\"f_id\", field_type=vkdb.FieldType.String, is_primary_key=True),\n        vkdb.Field(field_name=\"f_string\", field_type=vkdb.FieldType.String, default_val=\"\"),\n        vkdb.Field(field_name=\"f_text1\", field_type=vkdb.FieldType.Text),\n        vkdb.Field(field_name=\"f_text2\", field_type=vkdb.FieldType.Text),\n        vkdb.Field(field_name=\"f_image1\", field_type=vkdb.FieldType.Image),\n        vkdb.Field(field_name=\"f_image2\", field_type=vkdb.FieldType.Image),\n    ]\n    vectorize = [vkdb.VectorizeTuple(\n        dense=vkdb.VectorizeModelConf(\n            model_name=\"doubao-embedding-vision\",\n            model_version=\"241215\",\n            text_field=\"f_text1\",\n            image_field=\"f_image1\",\n            dim=3072,\n        ),\n        sparse=vkdb.VectorizeModelConf(\n            model_name=\"bge-m3\",\n            text_field=\"f_text1\",\n        )\n    )]\n\n    collection = vikingdb_service.create_collection(\"test_coll_for_sdk_with_vectorize\",\n                                                    fields=fields, description=\"test for sdk\", vectorize=vectorize)\n    print(collection.collection_name)\n    print(collection.description)\n    print(collection.vectorize)\n"
  },
  {
    "path": "volcengine/example/viking_db/collection_drop.py",
    "content": "import utils\n\nif __name__ == '__main__':\n    vikingdb_service = utils.get_vikingdb_service()\n    collection = vikingdb_service.drop_collection(\"test_coll_for_sdk\")"
  },
  {
    "path": "volcengine/example/viking_db/collection_get.py",
    "content": "import utils\n\nif __name__ == '__main__':\n    vikingdb_service = utils.get_vikingdb_service()\n    collection = vikingdb_service.get_collection(\"test_coll_for_sdk_with_vectorize\")\n    print(collection.collection_name)\n    print(collection.description)\n    print(collection.vectorize)"
  },
  {
    "path": "volcengine/example/viking_db/collection_list.py",
    "content": "import utils\n\nif __name__ == '__main__':\n    vikingdb_service = utils.get_vikingdb_service()\n    collection_list = vikingdb_service.list_collections()\n    for collection in collection_list:\n        print(collection.collection_name)\n        print(collection.description)\n        print(collection.vectorize)"
  },
  {
    "path": "volcengine/example/viking_db/data_fetch_by_collection.py",
    "content": "import utils\n\nif __name__ == '__main__':\n    vikingdb_service = utils.get_vikingdb_service()\n    collection = vikingdb_service.get_collection(\"test_coll_for_sdk\")\n    datas = collection.fetch_data([\"1\", \"2\", \"3\"])\n    for data in datas:\n        print(data.id, data.fields, data.TTL)"
  },
  {
    "path": "volcengine/example/viking_db/data_fetch_by_index.py",
    "content": "import utils\n\nif __name__ == '__main__':\n    vikingdb_service = utils.get_vikingdb_service()\n    index = vikingdb_service.get_index(\"test_coll_for_sdk\", \"index_hnsw_hybrid\")\n    datas = index.fetch_data([\"1\", \"2\", \"3\"])\n    for data in datas:\n        print(data.id, data.fields)"
  },
  {
    "path": "volcengine/example/viking_db/data_upsert.py",
    "content": "import utils\nimport random\nimport string\nimport volcengine.viking_db as vkdb\n\nif __name__ == '__main__':\n    vikingdb_service = utils.get_vikingdb_service()\n    collection = vikingdb_service.get_collection(\"test_coll_for_sdk\")\n\n    datas = []\n    for i in range(100):\n        data = vkdb.Data(\n            id=\"1\",\n            fields={\n                \"f_id\": str(i+1),\n                \"f_string\": \"doc\"+str(i / 10),\n                \"f_int64\": random.randint(1, 100),\n                \"f_text\": \"this is \" + ''.join(random.choice(string.ascii_letters[:10]) for _ in range(50)),\n            }\n        )\n        datas.append(data)\n    collection.upsert_data(datas)\n"
  },
  {
    "path": "volcengine/example/viking_db/example.py",
    "content": "import asyncio\nimport base64\nimport os, sys\nimport random\n\nfrom volcengine.viking_db import *\n\nsys.path.insert(0, \"/data00/home/xiejianqiao.1027/project/volc-sdk-python/volcengine\")\n\n# from ...viking_db import VikingDBService, Field, FieldType\n# from ../../viking_db import *\n\n\nif __name__ == '__main__':\n    vikingdb_service = VikingDBService()\n    vikingdb_service.set_ak()\n    vikingdb_service.set_sk()\n\n    # id = vikingdb_service.create_task(TaskType.Filter_Delete, {\"collection_name\": \"example\", \"filter\": {\"like\": [2]}})\n    # print(id)\n\n    # res = vikingdb_service.update_task(\"ae6f9a4e-9a68-5374-9687-36017c1ddd3e\", task_status=TaskStatus.Confirmed)\n\n    # id = vikingdb_service.create_task(TaskType.Data_Import, {\"tos_path\": \"demo-1028/demo_1030\", \"file_type\":\"json\", \"ignore_error\":False, \"collection_name\":\"sparse\"})\n    # print(id)\n\n    # task = vikingdb_service.get_task(\"bc5e952d-3f95-5e0c-b310-548933890308\")\n    # print(task.task_status)\n\n    # tasks = vikingdb_service.list_tasks()\n    # for item in tasks:\n    #     print(item.process_info)\n\n    # res = vikingdb_service.drop_task(\"01f7f554-46b9-55d6-af6c-b2aa9502d229\")\n\n\n\n    # dense_sparse\n    # fields = [\n    #     Field(\n    #         field_name=\"id\",\n    #         field_type=FieldType.String,\n    #         is_primary_key=True\n    #     ),\n    #     Field(\n    #         field_name=\"vector\",\n    #         field_type=FieldType.Vector,\n    #         dim=10\n    #     ),\n    #     Field(\n    #         field_name=\"sparse\",\n    #         field_type=FieldType.Sparse_Vector,\n    #         default_val=0\n    #     ),\n    # ]\n    # res = vikingdb_service.create_collection(\"sparse\", fields)\n    # print(res)\n\n    # res = vikingdb_service.get_collection(\"sparse\")\n    # for item in res.fields:\n    #     print(item.field_type, item.field_name)\n\n    def gen_random_vector(dim):\n        res = [0, ] * dim\n        for i in range(dim):\n            res[i] = random.random() - 0.5\n        return res\n\n\n    # collection = vikingdb_service.get_collection(\"sparse\")\n    # field1 = {\"id\": \"111\", \"vector\": gen_random_vector(10), \"sparse\": {\"hello1\": 0.01, \"world1\": 0.02}}\n    # field2 = {\"id\": \"222\", \"vector\": gen_random_vector(10), \"sparse\": {\"hello2\": 0.02, \"world2\": 0.03}}\n    # field3 = {\"id\": \"333\", \"vector\": gen_random_vector(10), \"sparse\": {\"hello3\": 0.03, \"world3\": 0.04}}\n    # field4 = {\"id\": \"444\", \"vector\": gen_random_vector(10), \"sparse\": {\"hello4\": 0.04, \"world4\": 0.05}}\n    # data1 = Data(field1)\n    # data2 = Data(field2)\n    # data3 = Data(field3)\n    # data4 = Data(field4)\n    # datas = [data1, data2, data3, data4]\n    # collection.upsert_data(datas)\n\n    # collection = vikingdb_service.get_collection(\"example\")\n    # res = collection.fetch_data(555)\n    # print(res.fields)\n\n    # vector_index = VectorIndexParams(distance=DistanceType.COSINE, index_type=IndexType.HNSW_HYBRID,\n    #                                  quant=QuantType.Float)\n    # res = vikingdb_service.create_index(\"sparse\", \"sparse\", vector_index)\n\n    # res = vikingdb_service.get_index(\"sparse\", \"sparse\")\n    # print(res.vector_index)\n\n    # index = vikingdb_service.get_index(\"sparse_go\", \"sparse_go_test5\")\n    # res = index.search_by_vector(vector=gen_random_vector(12), sparse_vectors={\"he\": 0.05}, dense_weight=0.1, retry=True)\n    # print(res)\n\n    # index = vikingdb_service.get_index(\"sparse_go\", \"sparse_go_test5\")\n    # res = index.search_by_id(\"111\", dense_weight=0.1)\n    # print(res)\n\n    # index = vikingdb_service.get_index(\"sparse\", \"sparse\")\n    # res = index.search_by_id(\"111\", dense_weight=0.1)\n    # print(res)\n\n    # index = vikingdb_service.get_index(\"sparse\", \"sparse\")\n    # res = index.search(VectorOrder(vector=gen_random_vector(10), sparse_vectors={\"he\": 0.05}), dense_weight=0.1)\n    # print(res)\n\n    # list = [RawData(\"text\", \"hello1\"), RawData(\"text\", \"hello2\")]\n    # res = vikingdb_service.embedding_v2(EmbModel(\"bge-m3\"), list)\n    # print(res)\n\n    # datas = [{\n    #     \"query\": \"退改\",\n    #     \"content\": \"如果您需要人工服务，可以拨打人工客服电话：4006660921\",\n    #     \"title\": \"无\"\n    # }, {\n    #     \"query\": \"退改\",\n    #     \"content\": \"1、1日票 1.5日票 2日票的退款政策： -到访日前2天的00:00前，免费退款 - 到访日前2天的00:00至到访日前夜23:59期间,退款需扣除服务费（人民币80元） - 到访日当天（00:00 之后），不可退款 2、半日票的退款政策： - 未使用的们票可在所选入...\",\n    #     \"title\": \"门票退改政策｜北京环球影城的门票退改政策\"\n    # }, {\n    #     \"query\": \"退改\",\n    #     \"content\": \"如果您需要人工服务，可以拨打人工客服电话：4006660921\",\n    # }]\n    # res = vikingdb_service.batch_rerank(datas)\n    # print(res)\n\n    # 写给用户的样例\n    # fields = [\n    #     Field(\n    #         field_name=\"doc_id\",\n    #         field_type=FieldType.String,\n    #         is_primary_key=True\n    #     ),\n    #     Field(\n    #         field_name=\"text_vector\",\n    #         field_type=FieldType.Vector,\n    #         dim=12\n    #     ),\n    #     Field(\n    #         field_name=\"like\",\n    #         field_type=FieldType.Int64,\n    #         default_val=0\n    #     ),\n    #     Field(\n    #         field_name=\"price\",\n    #         field_type=FieldType.Float32,\n    #         default_val=0\n    #     ),\n    #     Field(\n    #         field_name=\"author\",\n    #         field_type=FieldType.List_String,\n    #         default_val=[]\n    #     ),\n    #     Field(\n    #         field_name=\"aim\",\n    #         field_type=FieldType.Bool,\n    #         default_val=True\n    #     ),\n    # ]\n    # res = vikingdb_service.create_collection(\"example\", fields, \"This is an example\")\n    # # 返回一个collection实例\n    # print(res)\n    #\n    # res = vikingdb_service.get_collection(\"example\")\n    # # 返回一个collection实例\n    # print(res.update_person)\n    # #\n    # vikingdb_service.drop_collection(\"example\")  # 无返回\n    #\n    # res = vikingdb_service.list_collections()\n    # 返回一个列表\n    # for item in res:\n    #     print(item.indexes)\n\n    #\n    # vector_index = VectorIndexParams(distance=DistanceType.COSINE,index_type=IndexType.DiskANN,\n    #                                  quant=QuantType.Float)\n    # res = vikingdb_service.create_index(\"example1\",\"example1\", vector_index, cpu_quota=2,\n    #                                     description=\"This is an index\", scalar_index=['price', 'like'], shard_policy=ShardType.Custom, shard_count=10)\n    # # 返回一个index实例\n    # print(res)\n    #\n    # res = vikingdb_service.get_index(\"example\", \"example\")\n    # 返回一个index实例\n    # print(res.shard_count, res.shard_policy)\n    #\n    # vikingdb_service.drop_index(\"example\", \"example\")  # 无返回\n    #\n    # res = vikingdb_service.list_indexes(\"example\")\n    # 返回一个列表\n    # for item in res:\n    #     print(item.shard_count)\n    #     print(item.shard_policy)\n    #     print(item.update_time)\n    #     print(item.create_time)\n    #\n    # def gen_random_vector(dim):\n    #     res = [0, ] * dim\n    #     for i in range(dim):\n    #         res[i] = random.random() - 0.5\n    #     return res\n    # collection = vikingdb_service.get_collection(\"example\")\n    # field1 = {\"doc_id\": \"111\", \"text_vector\": gen_random_vector(12), \"like\": 1, \"price\": 1.11,\n    #           \"author\": [\"gy\"], \"aim\": True}\n    # field2 = {\"doc_id\": \"222\", \"text_vector\": gen_random_vector(12), \"like\": 2, \"price\": 2.22,\n    #           \"author\": [\"gy\", \"xjq\"], \"aim\": False}\n    # field3 = {\"doc_id\": \"333\", \"text_vector\": gen_random_vector(12), \"like\": 3, \"price\": 3.33,\n    #           \"author\": [\"gy\", \"xjq\"], \"aim\": False}\n    # field4 = {\"doc_id\": \"444\", \"text_vector\": gen_random_vector(12), \"like\": 4, \"price\": 4.44,\n    #           \"author\": [\"gy\", \"xjq\"], \"aim\": False}\n    # data1 = Data(field1)\n    # data2 = Data(field2)\n    # data3 = Data(field3)\n    # data4 = Data(field4)\n    # datas = []\n    # datas.append(data1)\n    # datas.append(data2)\n    # datas.append(data3)\n    # datas.append(data4)\n    # collection.upsert_data(datas)  # 无返回\n\n    #\n    # collection = vikingdb_service.get_collection(\"example\")\n    # res = collection.fetch_data(\"333\")\n    # print(res.fields)\n    # res = collection.fetch_data([\"111\", \"222\", \"333\", \"444\"])\n    # # 返回一个列表\n    # for item in res:\n    #     print(item)\n    #     print(item.fields)\n    #\n    # collection = vikingdb_service.get_collection(\"example\")\n    # collection.delete_data(\"11\")  # 无返回\n    #\n    # index = vikingdb_service.get_index(\"sparse_go\", \"sparse_go_test5\")\n    # res = index.fetch_data([\"111\"])\n    # # 返回一个列表\n    # for item in res:\n    #     print(item)\n    #     print(item.fields)\n    #\n    # index = vikingdb_service.get_index(\"sparse_go\", \"sparse_go_test5\")\n    # res = index.search_by_vector(gen_random_vector(10), sparse_vectors={'1':1.1})\n    # # 返回一个列表\n    # print(res)\n\n    # index = vikingdb_service.get_index(\"example\", \"example_index\")\n    # def gen_random_vector(dim):\n    #     res = [0, ] * dim\n    #     for i in range(dim):\n    #         res[i] = random.random() - 0.5\n    #     return res\n    # res = index.search_by_vector(gen_random_vector(10), limit=2, output_fields=[\"doc_id\", \"like\", \"text_vector\"],\n    #                              )\n    # 返回一个列表\n    # for item in res:\n    #     print(item)\n    #     print(item.score)\n    #\n    # index = vikingdb_service.get_index(\"example\", \"example_index\")\n    # def gen_random_vector(dim):\n    #     res = [0, ] * dim\n    #     for i in range(dim):\n    #         res[i] = random.random() - 0.5\n    #     return res\n    # res = index.search(order=VectorOrder(gen_random_vector(10)), limit=2,\n    #                    output_fields=[\"doc_id\", \"like\", \"text_vector\"],\n    #                     filter={\"op\": \"range\", \"field\": \"price\", \"lt\": 3.5})\n    # 返回一个列表\n    # for item in res:\n    #     print(item)\n    #     print(item.score)\n    # res = index.search(order=ScalarOrder(\"price\", Order.Desc), limit=6,\n    #                    output_fields=[\"price\"],\n    #                    filter={\"op\": \"range\", \"field\": \"price\", \"lt\": 5})\n    # # 返回一个列表\n    # for item in res:\n    #     print(item)\n    #     print(item.score)\n    # index = vikingdb_service.get_index(\"example\", \"example_index\")\n    # res = index.search(limit=5, output_fields=[\"doc_id\", \"like\"],\n    #                 filter={\"op\": \"range\", \"field\": \"price\", \"lt\": 3.5})\n    # 返回一个列表\n    # for item in res:\n    #     print(item.fields)\n    #     print(item.score)\n    #\n    # 含有text字段的测试\n    # fields = [\n    #     Field(\n    #         field_name=\"doc_id\",\n    #         field_type=FieldType.String,\n    #         is_primary_key=True\n    #     ),\n    #     Field(\n    #         field_name=\"text\",\n    #         field_type=FieldType.Text,\n    #         pipeline_name=\"text_split_bge_large_zh\"\n    #     ),\n    #     Field(\n    #         field_name=\"like\",\n    #         field_type=FieldType.Int64,\n    #         default_val=0\n    #     ),\n    #     Field(\n    #         field_name=\"price\",\n    #         field_type=FieldType.Float32,\n    #         default_val=0\n    #     ),\n    #     Field(\n    #         field_name=\"author\",\n    #         field_type=FieldType.List_String,\n    #         default_val=[]\n    #     ),\n    #     Field(\n    #         field_name=\"aim\",\n    #         field_type=FieldType.Bool,\n    #         default_val=True\n    #     ),\n    # ]\n    # res = vikingdb_service.create_collection(\"example_text\", fields, \"This is an example include text\")\n    #\n    # vector_index = VectorIndexParams(distance=DistanceType.IP, index_type=IndexType.FLAT,\n    #                                  quant=QuantType.Int8)\n    # res = vikingdb_service.create_index(\"example\", \"example1\")\n    #\n    # collection = vikingdb_service.get_collection(\"example_text\")\n    # field1 = {\"doc_id\": \"11\", \"text\": {\"text\":\"this is one\"}, \"like\": 1, \"price\": 1.11,\n    #           \"author\": [\"gy\"], \"aim\": True}\n    # field2 = {\"doc_id\": \"22\", \"text\": {\"text\":\"this is two\"}, \"like\": 2, \"price\": 2.22,\n    #           \"author\": [\"gy\", \"xjq\"], \"aim\": False}\n    # field3 = {\"doc_id\": \"33\", \"text\": {\"text\":\"this is three\"}, \"like\": 1, \"price\": 3.33,\n    #           \"author\": [\"gy\", \"xjq\"], \"aim\": False}\n    # field4 = {\"doc_id\": \"44\", \"text\": {\"text\":\"this is four\"}, \"like\": 1, \"price\": 4.44,\n    #           \"author\": [\"gy\", \"xjq\"], \"aim\": False}\n    # data1 = Data(field1)\n    # data2 = Data(field2)\n    # data3 = Data(field3)\n    # data4 = Data(field4)\n    # datas = []\n    # datas.append(data1)\n    # datas.append(data2)\n    # datas.append(data3)\n    # datas.append(data4)\n    # collection.upsert_data(datas)  # 无返回\n    #\n    # index = vikingdb_service.get_index(\"example_text\", \"example_index_text\")\n    # res = index.search_by_text(Text(text=\"this is five\"), filter={\"op\": \"range\", \"field\": \"price\", \"lt\": 4},\n    #                            limit=3, output_fields=[\"doc_id\", \"text\", \"price\", \"like\"], partition=1)\n    # for item in res:\n    #     print(item)\n    #     print(item.text)\n    # list = [RawData(\"text\",\"hello1\"), RawData(\"text\",\"hello2\")]\n    # res = vikingdb_service.embedding(EmbModel(\"bge_large_zh\"), list)\n    # print(res)\n    # for item in res:\n    #     print(item)\n\n    # fields = [\n    #     Field(\n    #         field_name=\"like1\",\n    #         field_type=FieldType.Float32,\n    #         default_val=0\n    #     ),\n    #     Field(\n    #         field_name=\"price1\",\n    #         field_type=FieldType.String,\n    #         default_val=\"\"\n    #     ),\n    # ]\n    # vikingdb_service.update_collection(\"example\",fields,description=\"change\")\n    # res = vikingdb_service.get_collection(\"example\")\n    # print(res.description)\n    # for field in res.fields:\n    #     print(field.field_name)\n    #     print(field.field_type)\n    #     print(field.default_val)\n    #     print(field.dim)\n    #     print(field.pipeline_name)\n    #     print(\"--------------------\")\n\n    # res = vikingdb_service.get_index(\"example\", \"example_index\")\n    # print(res.description)\n    # print(res.cpu_quota)\n    # print(res.scalar_index)\n    #\n    # vikingdb_service.update_index(\"example\", \"example_index\", shard_count=3)\n    #\n    # res = vikingdb_service.get_index(\"example\", \"example_index\")\n    # print(res.description)\n    # print(res.cpu_quota)\n    # print(res.scalar_index)\n\n    # score = vikingdb_service.rerank(\"退改\", \"如果您需要人工服务，可以拨打人工客服电话：4006660921\", \"转人工\")\n    # print(score)\n\n    # async def create_collection():\n    #     fields = [\n    #         Field(\n    #             field_name=\"doc_id\",\n    #             field_type=FieldType.String,\n    #             is_primary_key=True\n    #         ),\n    #         Field(\n    #             field_name=\"text_vector\",\n    #             field_type=FieldType.Vector,\n    #             dim=10\n    #         ),\n    #         Field(\n    #             field_name=\"like\",\n    #             field_type=FieldType.Int64,\n    #             default_val=0\n    #         ),\n    #         Field(\n    #             field_name=\"price\",\n    #             field_type=FieldType.Float32,\n    #             default_val=0\n    #         ),\n    #         Field(\n    #             field_name=\"author\",\n    #             field_type=FieldType.List_String,\n    #             default_val=[]\n    #         ),\n    #         Field(\n    #             field_name=\"aim\",\n    #             field_type=FieldType.Bool,\n    #             default_val=True\n    #         ),\n    #     ]\n    #     res = await vikingdb_service.async_create_collection(\"async\", fields, \"This is an example\")\n    #     print(res)\n\n\n    # async def get_collection():\n    #     res = await vikingdb_service.async_get_collection(\"async\")\n    #     for item in res.fields:\n    #         print(item.field_type, item.field_name)\n\n\n    # async def del_collection():\n    #     await vikingdb_service.async_drop_collection(\"async\")\n\n\n    # async def list_collections():\n    #     res = await vikingdb_service.async_list_collections()\n    #     print(res)\n\n\n    # async def create_index():\n    #     vector_index = VectorIndexParams(distance=DistanceType.COSINE, index_type=IndexType.HNSW,\n    #                                      quant=QuantType.Float)\n    #     res = await vikingdb_service.async_create_index(\"async\", \"async\", vector_index, cpu_quota=2,\n    #                                                     description=\"This is an index\", scalar_index=['price', 'like'], shard_policy=ShardType.Custom, shard_count=10)\n    #     print(res)\n\n\n    # async def get_index():\n    #     res = await vikingdb_service.async_get_index(\"async\", \"async\")\n    #     print(res.shard_count, res.shard_policy)\n\n\n    # async def del_index():\n    #     await vikingdb_service.async_drop_index(\"async\", \"async\")\n\n\n    # async def list_index():\n    #     res = await vikingdb_service.async_list_indexes(\"async\")\n    #     print(res)\n    #     for item in res:\n    #         print(item.index_name)\n\n\n    # async def embedding():\n    #     list = [RawData(\"text\", \"hello1\"), RawData(\"text\", \"hello2\")]\n    #     res = await vikingdb_service.async_embedding(EmbModel(\"bge_large_zh\"), list)\n    #     print(res)\n\n\n    # async def update_index():\n    #     await vikingdb_service.async_update_index(\"async\", \"async\", shard_count=3)\n\n\n    # async def update_collection():\n    #     fields = [\n    #         Field(\n    #             field_name=\"like1\",\n    #             field_type=FieldType.Float32,\n    #             default_val=0\n    #         ),\n    #         Field(\n    #             field_name=\"price1\",\n    #             field_type=FieldType.String,\n    #             default_val=\"\"\n    #         ),\n    #     ]\n    #     await vikingdb_service.async_update_collection(\"async1\", fields)\n\n\n    # async def rerank():\n    #     score = await vikingdb_service.async_rerank(\"退改\", \"如果您需要人工服务，可以拨打人工客服电话：4006660921\",\n    #                                                 \"转人工\")\n    #     print(score)\n\n\n    # async def batch_rerank():\n    #     datas = [{\n    #         \"query\": \"退改\",\n    #         \"content\": \"如果您需要人工服务，可以拨打人工客服电话：4006660921\",\n    #         \"title\": \"无\"\n    #     }, {\n    #         \"query\": \"退改\",\n    #         \"content\": \"1、1日票 1.5日票 2日票的退款政策： -到访日前2天的00:00前，免费退款 - 到访日前2天的00:00至到访日前夜23:59期间,退款需扣除服务费（人民币80元） - 到访日当天（00:00 之后），不可退款 2、半日票的退款政策： - 未使用的们票可在所选入...\",\n    #         \"title\": \"门票退改政策｜北京环球影城的门票退改政策\"\n    #     }, {\n    #         \"query\": \"退改\",\n    #         \"content\": \"如果您需要人工服务，可以拨打人工客服电话：4006660921\",\n    #     }]\n    #     res = await vikingdb_service.async_batch_rerank(datas)\n    #     print(res)\n\n\n    # async def embedding_v2():\n    #     list = [RawData(\"text\", \"hello1\"), RawData(\"text\", \"hello2\")]\n    #     res = await vikingdb_service.async_embedding_v2(EmbModel(\"bge-m3\"), list)\n    #     print(res)\n\n\n    # async def upsert_data():\n    #     def gen_random_vector(dim):\n    #         res = [0, ] * dim\n    #         for i in range(dim):\n    #             res[i] = random.random() - 0.5\n    #         return res\n\n    #     collection = await vikingdb_service.async_get_collection(\"example\")\n    #     field1 = {\"doc_id\": \"111\", \"text_vector\": gen_random_vector(10), \"like\": 1, \"price\": 1.11,\n    #               \"author\": [\"gy\"], \"aim\": True}\n    #     field2 = {\"doc_id\": \"222\", \"text_vector\": gen_random_vector(10), \"like\": 2, \"price\": 2.22,\n    #               \"author\": [\"gy\", \"xjq\"], \"aim\": False}\n    #     field3 = {\"doc_id\": \"333\", \"text_vector\": gen_random_vector(10), \"like\": 3, \"price\": 3.33,\n    #               \"author\": [\"gy\", \"xjq\"], \"aim\": False}\n    #     field4 = {\"doc_id\": \"444\", \"text_vector\": gen_random_vector(10), \"like\": 4, \"price\": 4.44,\n    #               \"author\": [\"gy\", \"xjq\"], \"aim\": False}\n    #     data1 = Data(field1)\n    #     data2 = Data(field2)\n    #     data3 = Data(field3)\n    #     data4 = Data(field4)\n    #     datas = [data1, data2, data3, data4]\n    #     await collection.async_upsert_data(datas)\n\n\n    # async def fetch_data():\n    #     collection = vikingdb_service.get_collection(\"async\")\n    #     res = await collection.async_fetch_data([\"111\", \"222\"])\n    #     for item in res:\n    #         print(item.fields)\n\n\n    # async def del_data():\n    #     collection = vikingdb_service.get_collection(\"async\")\n    #     res = await collection.async_delete_data(\"111\")\n\n\n    # async def search_by_id():\n    #     index = await vikingdb_service.async_get_index(\"async\", \"async\")\n    #     res = await index.async_search_by_id(\"222\")\n    #     for item in res:\n    #         print(item.fields)\n\n\n    # async def search_by_vector():\n    #     def gen_random_vector(dim):\n    #         res = [0, ] * dim\n    #         for i in range(dim):\n    #             res[i] = random.random() - 0.5\n    #         return res\n\n    #     index = await vikingdb_service.async_get_index(\"async\", \"async\")\n    #     res = await index.async_search_by_vector(gen_random_vector(10))\n    #     for item in res:\n    #         print(item.fields)\n\n\n    # async def index_fetch_data():\n    #     index = await vikingdb_service.async_get_index(\"async\", \"async\")\n    #     res = await index.async_fetch_data([\"111\", \"222\", \"333\", \"444\"])\n    #     for item in res:\n    #         print(item.fields)\n\n\n    # async def search():\n    #     index = vikingdb_service.get_index(\"async\", \"async\")\n\n    #     def gen_random_vector(dim):\n    #         res = [0, ] * dim\n    #         for i in range(dim):\n    #             res[i] = random.random() - 0.5\n    #         return res\n\n    #     res = index.search(order=VectorOrder(gen_random_vector(10)), limit=2,\n    #                        output_fields=[\"doc_id\", \"like\", \"text_vector\"],\n    #                        filter={\"op\": \"range\", \"field\": \"price\", \"lt\": 3.5})\n    #     print(\"-----------search_vector---------\")\n    #     for item in res:\n    #         print(item)\n    #         print(item.score)\n    #     print(\"-----------search_scalar---------\")\n    #     res = index.search(order=ScalarOrder(\"price\", Order.Desc), limit=6,\n    #                        output_fields=[\"price\"],\n    #                        filter={\"op\": \"range\", \"field\": \"price\", \"lt\": 5})\n    #     for item in res:\n    #         print(item)\n    #         print(item.score)\n    #     print(\"-----------search_None---------\")\n    #     res = index.search(limit=5, output_fields=[\"doc_id\", \"like\"],\n    #                        filter={\"op\": \"range\", \"field\": \"price\", \"lt\": 3.5})\n    #     for item in res:\n    #         print(item.fields)\n    #         print(item.score)\n\n\n    # asyncio.run(create_collection())\n    # asyncio.run(get_collection())\n    # asyncio.run(del_collection())\n    # asyncio.run(list_collections())\n    # asyncio.run(create_index())\n    # asyncio.run(get_index())\n    # asyncio.run(del_index())\n    # asyncio.run(list_index())\n    # asyncio.run(embedding())\n    # asyncio.run(update_index())\n    # asyncio.run(update_collection())\n    # asyncio.run(rerank())\n    # asyncio.run(batch_rerank())\n    # asyncio.run(embedding_v2())\n    # asyncio.run(upsert_data())\n    # asyncio.run(fetch_data())\n    # asyncio.run(del_data())\n    # asyncio.run(search_by_id())\n    # asyncio.run(search_by_vector())\n    # asyncio.run(index_fetch_data())\n    # asyncio.run(search())\n\n    # with open('', 'rb') as file:\n    #     file_content = file.read()\n    # encoded_image_content = base64.b64encode(file_content).decode()\n    # list = [RawData(\"image\", image=encoded_image_content), RawData(\"image\", image=encoded_image_content)]\n    # res = vikingdb_service.embedding_v2(EmbModel(\"\"), list)\n    # print(res)\n"
  },
  {
    "path": "volcengine/example/viking_db/index_create.py",
    "content": "import utils\nimport volcengine.viking_db as vkdb\n\nif __name__ == '__main__':\n    vikingdb_service = utils.get_vikingdb_service()\n    vector_index = vkdb.VectorIndexParams(distance=vkdb.DistanceType.COSINE, index_type=vkdb.IndexType.HNSW_HYBRID, quant=vkdb.QuantType.Int8)\n    index = vikingdb_service.create_index(\"test_coll_for_sdk\", \"index_hnsw_hybrid\", vector_index=vector_index)\n    print(index.index_name)"
  },
  {
    "path": "volcengine/example/viking_db/index_drop.py",
    "content": "import utils\n\nif __name__ == '__main__':\n    vikingdb_service = utils.get_vikingdb_service()\n    collection = vikingdb_service.drop_index(\"test_coll_for_sdk_1\", \"index_sort_2\")"
  },
  {
    "path": "volcengine/example/viking_db/index_sort.py",
    "content": "import utils\n\nif __name__ == '__main__':\n    vikingdb_service = utils.get_vikingdb_service()\n    index = vikingdb_service.get_index(\"test_coll_for_sdk_1\", \"index_sort\")\n\n    index_sort_result = index.sort(query_vector=[0.0, 1.1, 2.2, -1.1], primary_keys=[\"docx\", \"doc1\", \"doc2\", \"doc3\", \"doc0\"])\n    print(index_sort_result.primary_key_not_exist)\n    for item in index_sort_result.sort_result:\n        print(item.primary_key, item.score)"
  },
  {
    "path": "volcengine/example/viking_db/search_agg.py",
    "content": "import utils\n\nif __name__ == '__main__':\n    vikingdb_service = utils.get_vikingdb_service()\n    index = vikingdb_service.get_index(\"test_coll_for_sdk\", \"index_hnsw_hybrid\")\n\n    agg_result = index.search_agg(agg={'op':'count'})\n    print(agg_result.agg_op, agg_result.group_by_field, agg_result.agg_result)\n    print(\"==========\")\n\n    agg_result = index.search_agg(agg={'op': 'count', 'field': 'f_string', 'cond': {'gt': 0}}, filter={'op': 'range', 'field': 'f_int64', 'gt': 90})\n    print(agg_result.agg_op, agg_result.group_by_field, agg_result.agg_result)"
  },
  {
    "path": "volcengine/example/viking_db/search_post_process_ops.py",
    "content": "import utils\n\nif __name__ == '__main__':\n    vikingdb_service = utils.get_vikingdb_service()\n    index = vikingdb_service.get_index(\"test_coll_for_sdk\", \"index_hnsw\")\n    datas = index.search(order=None, limit=5, post_process_input_limit=5,\n                         post_process_ops=[\n                             {'op': 'string_like', 'field':'f_string', 'pattern':'%doc9%'},\n                             {'op': 'enum_freq_limiter', 'field':'f_string', 'threshold': 1}\n                         ])\n    for data in datas:\n        print(data.id, data.fields, data.score)"
  },
  {
    "path": "volcengine/example/viking_db/search_primary_key_filter.py",
    "content": "import utils\n\nif __name__ == '__main__':\n    vikingdb_service = utils.get_vikingdb_service()\n    index = vikingdb_service.get_index(\"test_coll_for_sdk\", \"index_hnsw\")\n\n    datas = index.search(order=None, limit=5, primary_key_in=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], primary_key_not_in=[1])\n    for data in datas:\n        print(data.id, data.fields, data.score)\n    print(\"========================\")\n\n    datas = index.search_by_id(id=2, limit=5, output_fields=[\"f_id\", 'f_vector'],  primary_key_in=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], primary_key_not_in=[1])\n    for data in datas:\n        print(data.id, data.fields, data.score)\n    print(\"========================\")\n\n    datas = index.search_by_vector(vector=[0,0,0,0], limit=10, primary_key_in=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], primary_key_not_in=[5, 6, 7, 8, 9, 10])\n    for data in datas:\n        print(data.id, data.fields, data.score)\n    print(\"========================\")\n\n"
  },
  {
    "path": "volcengine/example/viking_db/search_with_multi_modal.py",
    "content": "import utils\n\nif __name__ == '__main__':\n    vikingdb_service = utils.get_vikingdb_service()\n    index = vikingdb_service.get_index(\"test_coll_for_sdk_with_vectorize\", \"index_hnsw_hybrid\")\n    datas = index.search_with_multi_modal(\n        text=\"这是一个测试\",\n        image=\"tos://{your_bucket}/{your_object}\",\n        limit=5,\n        need_instruction=False)\n    for data in datas:\n        print(data.id, data.fields, data.score)"
  },
  {
    "path": "volcengine/example/viking_db/utils.py",
    "content": "from volcengine.viking_db import VikingDBService\nimport os\n\ndef get_vikingdb_service():\n    ak = os.getenv(\"ak\")\n    sk = os.getenv(\"sk\")\n    host = \"api-vikingdb.volces.com\"\n    region = \"cn-beijing\"\n    scheme = \"http\"\n    connection_timeout = 30\n    socket_timeout = 30\n\n    vikingdb_service = VikingDBService(\n        host=host, region=region, scheme=scheme,\n        connection_timeout=connection_timeout, socket_timeout=socket_timeout\n    )\n    vikingdb_service.set_ak(ak)\n    vikingdb_service.set_sk(sk)\n    return vikingdb_service"
  },
  {
    "path": "volcengine/example/viking_knowledgebase/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/viking_knowledgebase/example.py",
    "content": "import sys\nimport os\nimport asyncio\ncurrent_directory = os.path.dirname(os.path.abspath(__file__))\nseek = os.path.dirname(os.path.dirname(os.path.dirname(current_directory)))  \nsys.path.insert(0, seek)\n\nfrom volcengine.viking_knowledgebase import VikingKnowledgeBaseService, Collection, Doc, Point\nfrom volcengine.viking_knowledgebase.common import Field, FieldType, IndexType, EmbddingModelType\n\ncollection_name = \"\"\n\n\nviking_knowledgebase_service = VikingKnowledgeBaseService()\npoints = viking_knowledgebase_service.search_collection(collection_name=collection_name,query=\"\", rerank_switch=True, retrieve_count=20)\nfor point in points:\n    print(point.content)\n    print(point.chunk_id)\n    print(point.point_id)\n    print(point.doc_id)\n    print(point.project)\n    print(\"=======\")\n    \n#假定用户已经在知识库中创建了一个collection，并上传了文档，A公司_2022年财报.pdf，A公司_2023年财报.pdf\nm_messages = [{\n    \"role\": \"system\",\n    \"content\": \"\"\" system pe \"\"\"\n    },\n    {\n        \"role\": \"user\",\n        \"content\": \"22年A公司财报中提到的风险,在23年应对的如何\" # 用户提问\n    }\n]\n# chat_completion without streaming\nprint(\"#\"*10,\"chat_completion without streaming\",\"#\"*10)\nres = viking_knowledgebase_service.chat_completion(model=\"Doubao-pro-32k\", messages=m_messages, max_tokens=4096,\n                                                    temperature=0.1)\ndata = res[\"generated_answer\"]\ntoken_usage = res[\"usage\"]\nprint(data)\nprint(token_usage)\n# chat_completion with streaming\nprint(\"#\"*10,\"chat_completion with streaming\",\"#\"*10)\nres = viking_knowledgebase_service.chat_completion(model=\"Doubao-pro-32k\", messages=m_messages, max_tokens=4096,\n                                                    temperature=0.1,stream=True)\nfor data in res:\n    print(data,end=\"\",flush=True)\nprint(\"\")\nprint(res.token_usage())\n    "
  },
  {
    "path": "volcengine/example/visual/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/visual/cv_common.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine import visual\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n    # 设置超时时间，最大30s\n    # visual_service.set_connection_timeout(30)\n\n    # # version = 2020-08-26\n    # # 参考接口文档query部分 传Action、Version\n    # action = \"\"\n    # version = \"\"\n    # visual_service.set_api_info(action, version)\n    # # body 参考接口文档 请求Body传参部分\n    # form = dict()\n    # form[\"image_base64\"] = \"image_base64_str\"\n    # resp = visual_service.cv_form_api(action, form)\n    # print(resp)\n\n    # version >= 2022-08-31\n    # 参考接口文档query部分 传Action、Version\n    action = \"\"\n    version = \"\"\n    visual_service.set_api_info(action, version)\n    # body 参考接口文档 请求Body传参部分\n    form = {\n        \"req_key\": \"xxxx\",\n        # ...\n    }\n\n    resp = visual_service.cv_json_api(action, form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/cv_get_result.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine import visual\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('Sk')\n\n    form = {\n        \"req_key\": \"xxx\",\n        \"task_id\": \"xxx\"\n    }\n    resp = visual_service.cv_get_result(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/cv_process.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine import visual\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"xxx\",\n        # ...\n    }\n\n    resp = visual_service.cv_process(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/cv_submit_task.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine import visual\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('Sk')\n\n    form = {\n        \"req_key\": \"xxx\",\n        # ...\n    }\n    resp = visual_service.cv_submit_task( form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/cv_sync2async_get_result.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine import visual\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('Ak')\n    visual_service.set_sk('Sk')\n\n    form = {\n        \"req_key\": \"xxx\",\n        \"task_id\": \"xxx\",\n        \"req_json\": \"{\\\"logo_info\\\":{\\\"add_logo\\\":true，\\\"position\\\":1, \\\"language\\\":1,\\\"opacity\\\"：0.5}}\"\n    }\n    resp = visual_service.cv_sync2async_get_result(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/cv_sync2async_submit_task.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine import visual\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('Sk')\n\n    form = {\n        \"req_key\": \"xxx\",\n        # ...\n\n    }\n    resp = visual_service.cv_sync2async_submit_task(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_ai_gufeng.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"req_key\": \"ai_gufeng\",\n        \"image_urls\": [ \"https://xxx\" ]\n\n\n    }\n\n    resp = visual_service.ai_gufeng(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_all_age_generation.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"req_key\": \"all_age_generation\",\n        \"target_age\": 70 ,\n        \"image_urls\":[\"https://xxx\"]\n        }\n\n    resp = visual_service.all_age_generation(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_body_detection.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"req_key\":\"face_body_detection\",\n        \"max_obj_num\":100,\n        \"binary_data_base64\":[\"\"]\n    }\n\n    resp = visual_service.body_detection(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_car_detection.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n\n        \"image_url\": \"https://xxx\"\n\n    }\n\n    resp = visual_service.car_detection(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_car_plate_detection.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n\n        \"image_url\":\"https://xxx\"\n\n    }\n\n    resp = visual_service.car_plate_detection(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_car_segment.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n\n        \"image_url\":\"https://xxx\"\n\n    }\n\n    resp = visual_service.car_segment(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_cert_auth.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n    form = {\n        \"req_key\":\"cert_auth\",\n        \"byted_token\":\"\"\n        }\n    resp = visual_service.cert_auth(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_cert_config_get.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n    form = {\n        \"req_key\": \"cert_config_get\",\n        \"config_id\": \"\"\n    }\n    resp = visual_service.cert_config_get(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_cert_config_init.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n    #Config接口\n    # form = {\n    #         \"req_key\":\"cert_config_init\",\n    #         \"config_name\":\"\",\n    #         \"token_api_config\":{\n    #             \"ref_source\":\"1\"\n    #         },\n    #         \"h5_config\":{\n    #             \"redirectUrl\":\"\",\n    #             \"type\":1\n    #         }\n    #     }\n\n    #ConfigPro接口\n    form = {\n        \"req_key\": \"cert_config_init\",\n        \"config_name\": \"\",\n        #\"config_desc\":\"\",\n        \"token_api_config\": {\n            \"ref_source\": \"1\"\n        }\n    }\n\n    resp = visual_service.cert_config_init(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_cert_h5_config_init.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('')\n    visual_service.set_sk('')\n\n    form = {\n        \"req_key\": \"cert_h5_config_init\",\n        \"h5_config\": {\n            \"type\": \"1\",\n            \"redirect_url\": \"https://xxx\"\n        },\n        \"liveness_config\": {\n            \"ref_source\": \"1\",\n            \"liveness_type\": \"motion\"\n        }\n}\n    resp = visual_service.cert_h5_config_init(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_cert_h5_token.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('')\n    visual_service.set_sk('')\n\n    form = {\n\n        \"req_key\":\"cert_h5_token\",\n        \"h5_config_id\":\"\",\n        \"sts_token\":\"\",\n        \"idcard_name\":\"\",\n        \"idcard_no\":\"\"\n}\n    resp = visual_service.cert_h5_token(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_cert_pro_liveness_verify_query.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('')\n    visual_service.set_sk('')\n\n    form = {\n        \"req_key\": \"cert_pro_liveness_verify_query\",\n        \"byted_token\": \"\",\n        \"omit_data\": False,\n        \"omit_image_data\": False,\n        \"omit_video_data\": False\n    }\n    resp = visual_service.cert_pro_liveness_verify_query(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_cert_src_face_comp.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"req_key\": \"cert_src_face_comp\",\n        \"idcard_name\": \"\",\n        \"idcard_no\": \"\",\n        \"image\": \"\"\n        }\n\n    resp = visual_service.cert_src_face_comp(form)\n    print(resp)"
  },
  {
    "path": "volcengine/example/visual/example_cert_token.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('')\n    visual_service.set_sk('')\n\n    #Token接口\n    # form = {\n    #         \"req_key\":\"cert_token\",\n    #         \"sts_token\":\"\",\n    #         \"liveness_type\":\"motion\",\n    #         \"ref_source\":\"1\",\n    #         \"idcard_name\":\"\",\n    #         \"idcard_no\":\"\"\n    #     }\n    #TokenPro接口\n    form = {\n        \"req_key\": \"cert_pro_token\",\n        \"sts_token\": \"\",\n        \"ref_source\": \"1\",\n        \"idcard_name\": \"\",\n        \"idcard_no\": \"\"\n    }\n    resp = visual_service.cert_token(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_cert_verify.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.sts.StsService import StsService\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    # step1 调用AssumeRole接口获取临时ak/sk及token\n    # stsService = StsService()\n    # stsService.set_ak(\"your-ak\")   # 子账号长期AK\n    # stsService.set_sk(\"your-sk\")   # 子账号长期SK\n    #\n    # params = {\n    #     \"DurationSeconds\": \"900\",\n    #     \"RoleSessionName\": \"just_for_test\",\n    #     \"RoleTrn\": \"trn:iam::yourAccountID:role/yourRole\"\n    # }\n    #\n    # print(stsService.assume_role(params))\n\n    # step2 调用CertToken接口，绑定用户身份\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('your-sts-ak')      # sts返回的临时ak\n    visual_service.set_sk('your-sts-sk')      # sts返回的临时sk\n    visual_service.set_session_token('your-sts-token')  # sts返回的临时SessionToken\n    # visual_service.set_host('host')\n\n    # below shows the sdk usage for all common apis,\n    # if you cannot find the needed one, please check other example files in the same dir\n    # or contact us for further help\n\n    form = {\n        'req_key': 'cert_token',\n        'sts_token': 'your-sts-token',\n        'tos_info': {},\n        'ref_source': '1',\n        'liveness_type': 'motion',\n        # 'ref_image': '',\n        'idcard_name': '',\n        'idcard_no': '',\n        'liveness_timeout': 10,\n        'motion_list': ['0', '1', '2', '3'],\n        'fixed_motion_list': ['0'],\n        'motion_count': 4,\n        'max_liveness_trial': 10,\n    }\n\n    # 人脸核身Token接口\n    resp = visual_service.cert_token(form)\n    print(resp)\n\n    # step3 端上集成-客户端 / h5\n\n    # step4 调用Query接口，查询认证数据\n    # visual_service = VisualService()\n    #\n    # # call below method if you don't set ak and sk in $HOME/.volc/config\n    # visual_service.set_ak('sts-ak')      # sts返回的临时ak\n    # visual_service.set_sk('sts-sk')      # sts返回的临时sk\n    # visual_service.set_session_token('sts-token') # sts返回的临时SessionToken\n    # # visual_service.set_host('host')\n    #\n    # # below shows the sdk usage for all common apis,\n    # # if you cannot find the needed one, please check other example files in the same dir\n    # # or contact us for further help\n    #\n    # # x-security-token\n    # form = {\n    #     'req_key': 'cert_verify_query',\n    #     'byted_token': '',\n    # }\n    #\n    # # 人脸核身Query接口\n    # resp = visual_service.cert_verify_query(form)\n    # print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_cert_verify1.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n    #Verify接口\n    # form = {\n    #     \"req_key\":\"cert_src_verify\",\n    #     \"byted_token\":\"\",\n    #     \"video_url\":\"\",\n    #     \"extra\":{\n    #         \"video_type\": \"motion\"\n    #     }\n    #     }\n\n    #VerifyPro接口\n    form = {\n            \"req_key\":\"cert_pro_src_verify\",\n            \"byted_token\":\"\",\n            \"video_key\":\"\",\n            \"tos_bucket\":\"\",\n            \"risk_info\":\"\",\n            \"extra\":{}\n            }\n\n    resp = visual_service.cert_verify(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_cert_verify_query.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    #Query接口\n    # form = {\n    #         \"req_key\":\"cert_verify_query\",\n    #         \"byted_token\":\"\",\n    #         \"omit_data\":False,\n    #     }\n\n    # QueryPro接口\n    form = {\n        \"req_key\": \"cert_pro_verify_query\",\n        \"byted_token\": \"\",\n        \"omit_data\": False,\n    }\n\n    resp = visual_service.cert_verify_query(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_common.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n    # visual_service.set_host('host')\n\n    # below shows the sdk usage for all common apis,\n    # if you cannot find the needed one, please check other example files in the same dir\n    # or contact us for further help\n    form = dict()\n    form[\"image_base64\"] = \"image_base64_str\"\n\n    # 车牌检测\n    # resp = visual_service.car_plate_detection(form)\n\n    # 人像畸变矫正\n    # resp = visual_service.distortion_free(form)\n\n    # 图片拉伸修复\n    # resp = visual_service.stretch_recovery(form)\n\n    # 图片流动\n    # form[\"motion_ratio\"] = 2\n    # resp = visual_service.image_flow(form)\n\n    # 图片评分\n    # resp = visual_service.image_score(form)\n\n    # 图片配文\n    # resp = visual_service.poem_material(form)\n\n    # 表情编辑\n    # form[\"service_choice\"] = 0\n    # resp = visual_service.emoticon_edit(form)\n\n    # 闭眼转睁眼\n    # resp = visual_service.eye_close2open(form)\n\n    # 车辆分割\n    # resp = visual_service.car_segment(form)\n\n    # 车辆检测\n    # resp = visual_service.car_detection(form)\n\n    # 天空分割\n    # resp = visual_service.sky_segment(form)\n\n    # 老照片修复\n    # resp = visual_service.convert_photo(form)\n\n    # 图像增强\n    # resp = visual_service.enhance_photo(form)\n\n    # 通用分割\n    # resp = visual_service.general_segment(form)\n\n    # 人体分割\n    # form[\"refine\"] = 0\n    # form[\"return_foreground_image\"] = 0\n    # resp = visual_service.human_segment(form)\n\n    # 人像漫画风\n    # form[\"cartoon_type\"] = \"jpcartoon_head\"\n    # form[\"rotation\"] = 0 # this param is valid only when cartoon_type == jpcartoon_head\n    # resp = visual_service.jpcartoon(form)\n\n    # 人脸融合\n    # form[\"template_base64\"] = \"template_base64_str\"\n    # form[\"action_id\"] = \"faceswap\"\n    # resp = visual_service.face_swap(form)\n\n    # 通用OCR\n    # resp = visual_service.ocr_normal(form)\n\n    # 身份证OCR\n    # resp = visual_service.id_card(form)\n\n    # 银行卡OCR\n    # resp = visual_service.bank_card(form)\n\n    # 营业执照OCR\n    # resp = visual_service.clue_license(form)\n\n    # 驾驶证OCR\n    # resp = visual_service.driving_license(form)\n\n    # 行驶证OCR\n    # resp = visual_service.vehicle_license(form)\n\n    # 出租车票OCR\n    # resp = visual_service.taxi_invoice(form)\n\n    # 火车票OCR\n    # resp = visual_service.train_ticket(form)\n\n    # 行程单OCR\n    # resp = visual_service.flight_invoice(form)\n\n    # 增值税发票OCR\n    # resp = visual_service.vat_invoice(form)\n\n    # 定额发票OCR\n    # resp = visual_service.quota_invoice(form)\n\n    # 发型编辑\n    # resp = visual_service.hair_style(form)\n\n    # 智能变美\n    # resp = visual_service.face_pretty(form)\n\n    # 活照片\n    # resp = visual_service.image_animation(form)\n\n    # 视频选封面\n    # resp = visual_service.cover_video(form)\n\n    # 希区柯克\n    # resp = visual_service.dolly_zoom(form)\n\n    # 人像特效\n    # resp = visual_service.potrait_effect(form)\n\n    # 图像风格转换\n    # resp = visual_service.image_style_conversion(form)\n\n    # 3d游戏风\n    # resp = visual_service.three_d_game_cartoon(form)\n\n    # 头发抠图\n    # resp = visual_service.hair_segment(form)\n    # form[\"mode\"] = 0\n    # form[\"refine_mask\"] = 0\n    # form[\"flip_test\"] = 0\n\n    # 印章识别\n    # resp = visual_service.ocr_seal(form)\n\n    # pdf识别\n    # resp = visual_service.ocr_pdf(form)\n\n    # 高速公路过路费\n    # resp = visual_service.ocr_pass_invoice(form)\n\n    # 商标证\n    # resp = visual_service.ocr_trade(form)\n\n    # 软件著作权\n    # resp = visual_service.ocr_ruanzhu(form)\n\n    # 化妆品生产许可证\n    # resp = visual_service.ocr_cosmetic_product(form)\n\n    # 表格识别\n    # resp = visual_service.ocr_table(form)\n\n    # 智能绘图（文本转图片通用版）\n    # resp = visual_service.t2i_ldm(form)\n\n    # 智能绘图（名画版）\n    # resp = visual_service.img2img_style(form)\n\n    # 智能绘图（漫画版）\n    # resp = visual_service.img2img_anime(form)\n\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_convert_photo_v2.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"req_key\": \"lens_opr\",\n        \"image_urls\": [\n            \"https://xxx\"\n        ],\n        \"if_color\": 1\n    }\n\n    resp = visual_service.convert_photo_v2(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_cv_cancel_task.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('Ak')\n    visual_service.set_sk('Sk')\n\n    form = {\n        \"req_key\": \"xxx\",\n        \"task_id\": \"123456\"\n    }\n    resp = visual_service.cv_cancel_task(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_distortion_free.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"image_url\":\"https://xxx\"\n    }\n\n    resp = visual_service.distortion_free(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_dolly_zoom.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('sk')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"image_url\":\"https://xxx\",\n        \"video_type\":0,\n        \"device_type\":0,\n        \"video_length\":2.5\n    }\n\n    resp = visual_service.dolly_zoom(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_emoticon_edit.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"image_url\":\"https://xxx\",\n        \"service_choice\":0,\n        \"do_risk\":False\n    }\n\n    resp = visual_service.emoticon_edit(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_emotion_portrait.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"emotion_portrait\",\n        \"image_urls\": [\"\"],\n        \"target_emotion\": \"jiuwo\"\n    }\n\n    resp = visual_service.emotion_portrait(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_enhance_photo_v2.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"req_key\": \"lens_lqir\",\n        \"image_urls\": [\n            \"https://xxx\"\n        ],\n        \"resolution_boundary\": \"540p\",\n        \"enable_hdr\": False,\n        \"enable_wb\": False,\n        \"result_format\": 1,\n        \"jpg_quality\": 95,\n        \"hdr_strength\": 1.0\n    }\n\n    resp = visual_service.enhance_photo_v2(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_entity_detect.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    params = dict()\n\n    form = {\n        \"image_base64\": \"image_base64_str\"\n    }\n\n    resp = visual_service.entity_detect(form)\n    print(resp)"
  },
  {
    "path": "volcengine/example/visual/example_entity_segment.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        # \"binary_data_base64\": [\"\"],\n        \"image_urls\": [\n            \"https://\"],\n        \"req_key\": \"entity_seg\",\n        \"return_url\": True,\n        \"max_entity\": 20,\n        \"return_format\": 0,\n        \"refine_mask\": 0\n    }\n\n    resp = visual_service.entity_segment(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_eye_close2open.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"image_url\":\"https://xxx\"\n    }\n\n    resp = visual_service.eye_close2open(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_face_compare.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n    form = {\n        \"req_key\":\"face_compare\",\n        \"image_urls\":[\n            \"http://xxx\",\n            \"http://xxx\"\n        ]\n        }\n    resp = visual_service.face_compare(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_face_fusion_movie.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"req_key\": \"facefusionmovie_standard\",\n        # \"binary_data_base64\": [\"/9xx\"],\n        \"image_url\": 'https://xxxx, https://xxxx',\n        \"video_url\": 'https://xxxx',\n        \"enable_face_beautify\": True,\n        # \"ref_img_url\": \"https://xxxx, https://xxxx\"\n    }\n\n    resp = visual_service.face_fusion_movie(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_face_fusion_movie_get_result.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"req_key\": \"facefusionmovie_standard\",\n        \"task_id\":\"\"\n    }\n\n    resp = visual_service.face_fusion_movie_get_result(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_face_fusion_movie_submit_task.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"req_key\": \"facefusionmovie_standard_v2\",\n        \"image_url\": \"https://xxx\",\n        \"video_url\": \"https://xxx\",\n        \"ref_img_url\": \"https://xxx\",\n        \"source_similarity\": 1,\n         \"logo_info\": {\n            \"add_logo\": True,\n            \"position\": 2,\n            \"language\": 0,\n            \"opacity\": 0.9\n        }\n    }\n\n    resp = visual_service.face_fusion_movie_submit_task(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_face_pretty.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"multi_face\": \"1\",\n        \"image_url\":\"https://xxx\",\n        \"do_risk\":False,\n        \"beauty_level\":1.0\n    }\n\n    resp = visual_service.face_pretty(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_face_swap.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n    #2.0版本\n    # form = {\n    #     \"image_url\":\"\",\n    #     \"template_url\":\"\",\n    #     \"action_id\":\"faceswap\",\n    #     \"version\":\"2.0\",\n    #     \"do_risk\":False,\n    #     \"source_similarity\":\"1\"\n    # }\n\n    # 2.1版本\n    form = {\n        \"template_url\":\"\",\n        \"action_id\":\"faceswap\",\n        \"version\":\"2.1\",\n        \"do_risk\":False,\n        \"type\":\"l2r\",\n        \"merge_infos\":'[{\"image_url\":\"https://xxx\",\"location\":1,\"template_location\":1}]'\n    }\n\n    resp = visual_service.face_swap(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_face_swap_v2.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('')\n    visual_service.set_sk('')\n\n    form = {\n        # 注意3.0版本req_key传faceswap | | 3.3版本req_key传face_swap3_3\n        \"req_key\": \"faceswap\",\n        \"image_urls\": [\n            \"https://xxx\",\n            \"https://xxx\",\n            \"https://xxx\"\n        ],\n        \"face_type\": \"area\",\n        \"merge_infos\": [\n            {\n                \"location\": 1,\n                \"template_location\": 1\n            },\n            {\n                \"location\": 1,\n                \"template_location\": 2\n            }\n        ]\n        # \"logo_info\":{\n        #     \"add_logo\":True,\n        #     \"position\":2,\n        #     \"language\":0,\n        #     \"opacity\":1.0\n        # },\n        # \"do_risk\":False,\n        # \"source_similarity\":\"1\"\n    }\n    resp = visual_service.face_swap_v2(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_faceswap_ai.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('')\n    visual_service.set_sk('')\n\n    form = {\n        \"req_key\": \"faceswap_ai\",\n        \"image_urls\": [\n            \"https://xxx\",\n            \"https://xxx\"\n        ],\n        \"gpen\":0.9,\n        \"skin\":0.9\n        # \"do_risk\":False,\n        # \"tou_repair\":1\n    }\n    resp = visual_service.faceswap_ai(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_general_segment.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n\n        \"image_url\":\"https://xxx\",\n        \"return_foreground_image\":0\n\n    }\n\n    resp = visual_service.general_segment(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_goods_detect.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    params = dict()\n\n    form = {\n        \"image_base64\": \"image_base64_str\"\n    }\n\n    resp = visual_service.goods_detect(form)\n    print(resp)"
  },
  {
    "path": "volcengine/example/visual/example_goods_segment.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    params = dict()\n\n    form = {\n        \"image_url\": \"https://xxx\",\n        \"method\":\"human\"\n    }\n\n    resp = visual_service.goods_segment(form)\n    print(resp)"
  },
  {
    "path": "volcengine/example/visual/example_hair_segment.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"mode\": 1,\n        \"refine_mask\": 0 ,\n        \"image_url\":\"https://xxx\",\n        \"flip_test\":1\n    }\n\n    resp = visual_service.hair_segment(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_hair_style.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"hair_type\": \"0\",\n        \"image_url\":\"https://xxx\",\n        \"do_risk\":False\n    }\n\n    resp = visual_service.hair_style(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_hair_style_v2.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"req_key\": \"hair_style\",\n        \"image_urls\":[\"https://xxx\"],\n        \"hair_type\":801\n    }\n\n    resp = visual_service.hair_style_v2(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_high_aes_smart_drawing.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    #  高美感通用v1.2-文生图\n    # form ={\n    #     \"req_key\": \"high_aes_t2i\",\n    #     \"prompt\": \"千军万马\",\n    #     \"seed\": -1,\n    #     \"scale\": 5.5,\n    #     \"ddim_steps\": 25,\n    #     \"width\": 512,\n    #     \"height\": 512,\n    #     \"logo_info\": {\n    #         \"add_logo\": False,\n    #         \"position\": 0,\n    #         \"language\": 0,\n    #         \"opacity\": 0.3\n    #     }\n    # }\n\n    # 高美感通用V1.3-文生图\n    # form = {\n    #     \"req_key\": \"high_aes\",\n    #     \"prompt\": \"千军万马\",\n    #     \"model_version\": \"general_v1.3\",\n    #     \"seed\": -1,\n    #     \"scale\": 3.5,\n    #     \"ddim_steps\": 25,\n    #     \"width\": 512,\n    #     \"height\": 512,\n    #     \"use_sr\": False,\n    #     \"sr_seed\": -1,\n    #     \"return_url\":False,\n    #     \"logo_info\": {\n    #         \"add_logo\": False,\n    #         \"position\": 0,\n    #         \"language\": 0,\n    #         \"opacity\": 0.3\n    #     }\n    # }\n\n    # 高美感动漫v1.3-文生图/图生图\n    # form = {\n    #     \"req_key\": \"high_aes\",\n    #     \"prompt\": \"千军万马\",\n    #     \"model_version\": \"anime_v1.3\",\n    #     # \"binary_data_base64\":[\"\"],\n    #     \"strength\": 0.7,\n    #     \"seed\": -1,\n    #     \"scale\": 7,\n    #     \"ddim_steps\": 20,\n    #     \"width\": 1024,\n    #     \"height\": 1024,\n    #     \"return_url\":False,\n    #     \"logo_info\": {\n    #         \"add_logo\": False,\n    #         \"position\": 0,\n    #         \"language\": 0,\n    #         \"opacity\": 0.3\n    #     }\n    # }\n\n    # 高美感通用V1.4-文生图\n    form = {\n        \"req_key\": \"high_aes_general_v14\",\n        \"prompt\": \"千军万马\",\n        \"model_version\": \"general_v1.4\",\n        \"seed\": -1,\n        \"scale\": 3.0,\n        \"ddim_steps\": 25,\n        \"width\": 512,\n        \"height\": 512,\n        \"use_rephraser\": True,\n        \"return_url\":False,\n        \"use_predict_tags\": True,\n        \"logo_info\": {\n            \"add_logo\": False,\n            \"position\": 0,\n            \"language\": 0,\n            \"opacity\": 0.3\n        }\n    }\n\n    resp = visual_service.high_aes_smart_drawing(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_high_aes_smart_drawing_v2.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"img2img_photoverse_executive_ID_photo\",\n        # \"binary_data_base64\":[],\n        \"return_url\":True,\n        \"image_urls\": [\"https://\"],\n        \"beautify_info\":{\n            \"whitening\":1.0,\n            \"dermabrasion\":1.0\n        },\n        \"logo_info\": {\n            \"add_logo\": False,\n            \"position\": 0,\n            \"language\": 0,\n            \"opacity\": 0.3\n        }\n    }\n    resp = visual_service.high_aes_smart_drawing_v2(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_human_segment.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"image_url\":\"https://xxx\",\n        \"refine\":0,\n        \"return_foreground_image\":0\n    }\n\n    resp = visual_service.human_segment(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_image_animation.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"image_url\":\"https://xxx\",\n        \"type\":1\n    }\n\n    resp = visual_service.image_animation(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_image_correction.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n            \"req_key\": \"image_correction\",\n            \"image_urls\": [\"https://xxx\"]\n        }\n\n    resp = visual_service.image_correction(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_image_cut.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    params = dict()\n\n    form = {\n        \"image_url\": \"https://xxx\",\n        \"width\": 100,\n        \"height\": 120,\n        \"cut_method\": \"gauss_padding_reserve_score\"\n    }\n\n    resp = visual_service.image_cut(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_image_flow.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"image_url\":\"https://xxx\",\n        \"motion_ratio\":2\n    }\n\n    resp = visual_service.image_flow(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_image_inpaint.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    params = dict()\n\n    form = {\n        \"image_base64\": \"image_base64_str\"\n    }\n\n    resp = visual_service.image_inpaint(form)\n    print(resp)"
  },
  {
    "path": "volcengine/example/visual/example_image_outpaint.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    params = dict()\n\n    form = {\n        \"image_base64\": \"image_base64_str\"\n    }\n\n    resp = visual_service.image_outpaint(form)\n    print(resp)"
  },
  {
    "path": "volcengine/example/visual/example_image_score_v2.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"req_key\": \"lens_vida_single_pic\",\n        \"image_urls\": [\n            \"https://xxx\"\n        ],\n        \"vida_mode\": \"vida_custom\",\n        \"vida_enable_module\": \"score_total_ds\"\n    }\n\n    resp = visual_service.image_score_v2(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_image_search_image_add.py",
    "content": "from __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"urls\":\t[\"url_1\", \"url_2\"],\n        # \"images_base64\": [\"img_b64_1\", \"img_b64_2\"]\n    }\n\n    resp = visual_service.image_search_image_add(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_image_search_image_delete.py",
    "content": "from __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"pid\": \"pid_1\",\n    }\n\n    resp = visual_service.image_search_image_delete(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_image_search_image_search.py",
    "content": "from __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"url\":\t\"url_1\",\n        # \"image_base64\": \"img_b64_1\",\n        \"topk\": 10\n    }\n\n    resp = visual_service.image_search_image_search(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_image_style_conversion.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n            \"type\": \"jzcartoon\",\n            \"image_url\":\"https://xx\"\n        }\n\n    resp = visual_service.image_style_conversion(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_img2img_anime.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n            \"req_key\": \"img2img_anime\",\n            \"prompt\": \"\",\n            \"image_url\": \"https://xxx\",\n            \"strength\": 0.9,\n            \"seed\": -1\n        }\n\n    resp = visual_service.img2img_anime(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_img2img_anime_accelerated_maintain_id.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"img2img_anime_accelerated_maintain_id\",\n        \"positive_prompt\": \"1girl,beautiful,looking at viewer,portrait,\",\n        \"return_url\": True,\n        \"image_urls\": [\n            \"https://\"],\n        # \"binary_data_base64\": [],\n        \"hyper_switch\": True,\n        # \"seed\": -1,\n        # \"step\": 18,\n        # \"cfg\": 4.5,\n        # \"face_image\": \"uri://binary_data?index=0\",\n        # \"style_image\": \"uri://binary_data?index=1\",\n        # \"face_switch\": True,\n        # \"facestyle_switch\": True,\n        # # \"style_switch\": False,\n        # \"width\": 1000,\n        # \"height\": 1000,\n        # \"logo_info\": {\n        #     \"add_logo\": True,\n        #     \"position\": 2,\n        #     \"language\": 0,\n        #     \"opacity\": 1\n        # }\n    }\n    resp = visual_service.img2img_anime_accelerated_maintain_id(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_img2img_comics_style.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"img2img_comic_style\",\n        \"binary_data_base64\":[],\n        \"image_urls\": [\n            \"https://xxx\"\n        ],\n        \"sub_req_key\": \"img2img_comic_style_marvel\",\n        \"return_url\": True,\n        \"logo_info\": {\n            \"add_logo\": True,\n            \"position\": 2,\n            \"language\": 0,\n            \"opacity\": 1.0\n        }\n    }\n    resp = visual_service.img2img_comics_style(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_img2img_create_aes_blueline.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"img2img_blueline_style\",\n        # \"binary_data_base64\":[],\n        \"image_urls\": [\n            \"https://\"\n        ],\n        \"prompt\": [],\n        \"sub_prompts\": [],\n        \"strength\": 0.6,\n        \"seed\": -1,\n        \"scale\": 8,\n        \"ddim_steps\": 20,\n        \"lora_map\": {'tybluelineman_1102': {'strength_model': 0.2, 'strength_clip': 0.2},\n                     'blueline_1022': {'strength_model': 0.2, 'strength_clip': 0.2},\n                     'animeoutlineV4_16': {'strength_model': 0.2, 'strength_clip': 0.2}},\n        \"clip_skip\": 1,\n        \"controlnet_weight\": 1,\n        \"sampler_name\": \"dpmpp_2m\",\n        \"scheduler\": \"karras\",\n        \"long_resolution\": 704,\n        \"cn_mode\": 0,\n        \"id_weight\": 1.0,\n        \"apply_id_layer\": \"2,3,4,5,6,7,8,9,10,11,12\",\n        \"tagger_settings\": {\"switch\": False},\n        \"return_url\": True,\n        \"logo_info\": {\n            \"add_logo\": False,\n            \"position\": 0,\n            \"language\": 0,\n            \"opacity\": 0.3\n        }\n    }\n\n    resp = visual_service.img2img_create_aes_blueline(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_img2img_create_anylora_makoto.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"img2img_makoto_style\",\n        # \"binary_data_base64\":[],\n        \"image_urls\": [\n            \"https://\"],\n        \"prompt\": \"\",\n        \"sub_prompts\": [],\n        \"strength\": 0.6,\n        \"seed\": -1,\n        \"scale\": 8,\n        \"ddim_steps\": 20,\n        \"lora_map\": {'300XHC_anylora_1106': {'strength_model': 0.2, 'strength_clip': 0.2},\n                     'animeoutlineV4_16': {'strength_model': 0, 'strength_clip': 0}},\n        \"clip_skip\": 1,\n        \"controlnet_weight\": 1,\n        \"sampler_name\": \"dpmpp_2m\",\n        \"long_resolution\": 704,\n        \"cn_mode\": 0,\n        \"id_weight\": 1.0,\n        \"apply_id_layer\": \"2,3,4,5,6,7,8,9,10,11,12\",\n        \"tagger_settings\": {\"switch\": False},\n        \"return_url\": True,\n        \"logo_info\": {\n            \"add_logo\": False,\n            \"position\": 0,\n            \"language\": 0,\n            \"opacity\": 0.3\n        }\n    }\n\n    resp = visual_service.img2img_create_anylora_makoto(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_img2img_create_disney_style_no_face.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"img2img_disney_3d_style\",\n        # \"binary_data_base64\":[],\n        \"image_urls\": [\n            \"https://\"\n        ],\n        \"prompt\": \"\",\n        \"sub_prompts\": [\n        ],\n        \"u_prompt\": \"embedding:EasyNegative, nsfw, (worst quality:2), (low quality:2)\",\n        \"strength\": 0.6,\n        \"seed\": -1,\n        \"scale\": 8,\n        \"ddim_steps\": 20,\n        \"lora_map\": {\n            \"3Dpet_Disney01\": {\n                \"strength_clip\": 0.6,\n                \"strength_model\": 0.6\n            }\n        },\n        \"clip_skip\": 1,\n        \"controlnet_weight\": 0.4,\n        \"sampler_name\": \"dpmpp_2m\",\n        \"scheduler\": \"karras\",\n        \"long_resolution\": 704,\n        \"cn_mode\": 0,\n        \"id_weight\": 1.0,\n        \"apply_id_layer\": \"2,3,4,5,6,7,8,9,10,11,12\",\n        \"tagger_settings\": {\"switch\": False},\n        \"return_url\": True,\n        \"logo_info\": {\n            \"add_logo\": False,\n            \"position\": 0,\n            \"language\": 0,\n            \"opacity\": 0.3\n        }\n\n    }\n\n    resp = visual_service.img2img_create_disney_style_no_face(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_img2img_create_ether_real_mix.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"img2img_real_mix_style\",\n        # \"binary_data_base64\":[],\n        \"image_urls\": [\n            \"https://\"\n        ],\n        \"prompt\": \"\",\n        \"strength\": 0.6,\n        \"seed\": -1,\n        \"scale\": 8,\n        \"ddim_steps\": 20,\n        \"lora_multipers\": {'Dragon_v1': 0.6},\n        \"clip_skip\": 1,\n        \"canny_weight\": 0.6,\n        \"sampler_name\": \"DPM++ 2M Karras\",\n        \"i2i_keep_texture\": 1,\n        \"long_resolution\": 704,\n        \"id_scale\": 0,\n        \"return_url\": True,\n        \"logo_info\": {\n            \"add_logo\": False,\n            \"position\": 0,\n            \"language\": 0,\n            \"opacity\": 0.3\n        }\n    }\n\n    resp = visual_service.img2img_create_ether_real_mix(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_img2img_create_ink_and_water.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"img2img_water_ink_style\",\n        # \"binary_data_base64\":[],\n        \"image_urls\": [\n            \"https://\"],\n        \"prompt\": \"\",\n        \"sub_prompts\": [\"\"],\n        \"strength\": 0.6,\n        \"seed\": -1,\n        \"scale\": 8,\n        \"ddim_steps\": 20,\n        \"lora_map\": {'Cateye_AT45': {'strength_model': 0.2, 'strength_clip': 0.2},'CATSEYEcp001': {'strength_model': 0.2, 'strength_clip': 0.2}},\n        \"clip_skip\": 1,\n        \"controlnet_weight\": 1,\n        \"sampler_name\": \"dpmpp_2m\",\n        \"scheduler\": \"karras\",\n        \"long_resolution\": 832,\n        \"cn_mode\": 0,\n        \"id_weight\": 1.0,\n        \"apply_id_layer\": \"2,3,4,5,6,7,8,9,10,11,12\",\n        \"tagger_settings\": {\"switch\": False},\n        \"vae_choice\": 1,\n        \"return_url\": True,\n        \"logo_info\": {\n            \"add_logo\": False,\n            \"position\": 0,\n            \"language\": 0,\n            \"opacity\": 0.3\n        }\n    }\n    resp = visual_service.img2img_create_ink_and_water(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_img2img_create_pastel_boys2d.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"img2img_pastel_boys_style\",\n        # \"binary_data_base64\": [],\n        \"image_urls\": [\n            \"https://\"],\n        \"prompt\": \"good looking,(((pure white statue))),(((only white color in picture))), (((white plaster figure))), (Renaissance), ancient Greek mythological statue, monochromatic realism style, rococo, (((plaster texture))), ((white hair)), 8k, best quality, masterpiece, depth, face light,\",\n        \"strength\": 0.6,\n        \"seed\": -1,\n        \"scale\": 8,\n        \"ddim_steps\": 20,\n        \"lora_multipers\": {\n        },\n        \"clip_skip\": 1,\n        \"canny_weight\": 0.8,\n        \"i2i_keep_texture\": 1,\n        \"long_resolution\": 704,\n        \"id_scale\": 0,\n        \"return_url\": True,\n        \"logo_info\": {\n            \"add_logo\": False,\n            \"position\": 0,\n            \"language\": 0,\n            \"opacity\": 0.3\n        }\n    }\n\n    resp = visual_service.img2img_create_pastel_boys2d(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_img2img_create_rev_animated.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"img2img_rev_animated_style\",\n        # \"binary_data_base64\":[],\n        \"image_urls\": [\n            \"https://\"],\n        \"prompt\": \"\",\n        \"strength\": 0.8,\n        \"seed\": -1,\n        \"scale\": 8,\n        \"ddim_steps\": 20,\n        \"lora_multipers\": {'shanzhagaoSomeSortOf_v1Epoch10': 0.6, 'Moxin_10': 0.5, 'Colorwater_v4': 0.3},\n        \"clip_skip\": 1,\n        \"canny_weight\": 1,\n        \"sampler_name\": \"DPM++ 2M Karras\",\n        \"id_scale\": 0,\n        \"return_url\": True,\n        \"logo_info\": {\n            \"add_logo\": False,\n            \"position\": 0,\n            \"language\": 0,\n            \"opacity\": 0.3\n        }\n\n    }\n\n    resp = visual_service.img2img_create_rev_animated(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_img2img_create_toonyou.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"img2img_cartoon_style\",\n        # \"binary_data_base64\":[],\n        \"image_urls\": [\n            \"https://\"],\n        \"prompt\": \"\",\n        \"sub_prompts\": [\n        ],\n        \"strength\": 0.6,\n        \"seed\": -1,\n        \"scale\": 8,\n        \"ddim_steps\": 20,\n        \"lora_map\": {\n            \"animeoutlineV4_16\": {\n                \"strength_clip\": 0.2,\n                \"strength_model\": 0.2\n            }},\n        \"clip_skip\": 1,\n        \"controlnet_weight\": 1,\n        \"long_resolution\": 704,\n        \"cn_mode\": 0,\n        \"id_weight\": 1.0,\n        \"apply_id_layer\": \"2,3,4,5,6,7,8,9,10,11,12\",\n        \"tagger_settings\": {\"switch\": False},\n        \"return_url\": True,\n        \"logo_info\": {\n            \"add_logo\": False,\n            \"position\": 0,\n            \"language\": 0,\n            \"opacity\": 0.3\n        }\n    }\n\n    resp = visual_service.img2img_create_toonyou(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_img2img_exquisite_style.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"img2img_exquisite_style\",\n        \"binary_data_base64\":[],\n        \"image_urls\": [\n            \"https://xxx\"\n        ],\n        \"return_url\": True,\n        \"logo_info\": {\n            \"add_logo\": True,\n            \"position\": 2,\n            \"language\": 0,\n            \"opacity\": 1.0\n        }\n    }\n    resp = visual_service.img2img_exquisite_style(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_img2img_inpainting.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"i2i_inpainting\",\n        \"binary_data_base64\": [\n            \"\"\n        ],\n        # \"image_urls\":[],\n        \"return_url\": True,\n        \"steps\": 30,\n        \"strength\": 0.8,\n        \"scale\": 7,\n        \"seed\": 0,\n        \"logo_info\": {\n            \"add_logo\": False,\n            \"position\": 0,\n            \"language\": 0,\n            \"opacity\": 0.3\n        }\n    }\n    resp = visual_service.img2img_inpainting(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_img2img_inpainting_edit.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"custom_prompt\": \"一只小狗\",\n        \"req_key\": \"i2i_inpainting_edit\",\n        \"scale\": 5,\n        \"seed\": -1,\n        \"steps\": 25,\n        \"return_url\": True,\n        \"logo_info\": {\n            \"add_logo\": False,\n            \"position\": 0,\n            \"language\": 0,\n            \"opacity\": 0.3\n        },\n        # \"image_urls\":[],\n        \"binary_data_base64\": [\n            \"\"\n        ]\n    }\n    resp = visual_service.img2img_inpainting_edit(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_img2img_outpainting.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"i2i_outpainting\",\n        \"binary_data_base64\": [\n            \"\"\n        ],\n        \"image_urls\": [],\n        \"custom_prompt\": \"蓝色海洋\",\n        \"return_url\": True,\n        \"steps\": 30,\n        \"strength\": 0.8,\n        \"scale\": 7.0,\n        \"seed\": 0,\n        \"top\": 0.1,\n        \"bottom\": 0.1,\n        \"left\": 1,\n        \"right\": 1,\n        \"max_height\": 1920,\n        \"max_width\": 1920,\n        \"logo_info\": {\n            \"add_logo\": False,\n            \"position\": 0,\n            \"language\": 0,\n            \"opacity\": 0.3\n        }\n    }\n    resp = visual_service.img2img_outpainting(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_img2img_style.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n            \"req_key\": \"img2img_style\",\n            \"prompt\": \"\",\n            \"image_url\": \"https://xxx\",\n            \"strength\": 0.5,\n            \"seed\": -1\n        }\n\n    resp = visual_service.img2img_style(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_img2img_water_color_style.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"img2img_water_paint_style\",\n        # \"binary_data_base64\":[],\n        \"image_urls\": [\n            \"https://\"],\n        \"return_url\": True,\n    }\n\n    resp = visual_service.img2img_water_color_style(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_img2img_xl_sft.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"i2i_xl_sft\",\n        # \"binary_data_base64\":[],\n        \"image_urls\": [\n            \"https://xxx\"\n        ],\n        \"prompt\": \"美女\",\n        \"seed\": -1,\n        \"ddim_step\": 20,\n        \"scale\": 7.0,\n        \"controlnet_args\": [\n            {\n                \"type\": \"pose\",\n                \"strength\": 0.4,\n                \"binary_data_index\": 0\n            }\n        ],\n        \"style_reference_args\": {\n            \"id_weight\": 0.2,\n            \"style_weight\": 0.0,\n            \"binary_data_index\": 0\n        },\n        \"return_url\": True,\n        \"logo_info\": {\n            \"add_logo\": True,\n            \"position\": 2,\n            \"language\": 0,\n            \"opacity\": 1\n        }\n    }\n    resp = visual_service.img2img_xl_sft(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_img2video3d.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"req_key\": \"img2video3d\",\n        \"image_urls\": [\n            \"https://xxx\"\n        ],\n        \"render_spec\": {\n            \"mode\": 2,\n            \"long_side\": 960,\n            \"frame_num\": 90,\n            \"fps\": 30,\n            \"use_flow\": -1,\n            \"speed_shift\": [\n                0,\n                1,\n                0.5,\n                4,\n                0.5,\n                4,\n                1,\n                1\n            ]\n        }\n    }\n\n    resp = visual_service.img2video3d(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_jpcartoon.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"image_url\":\"https://xxx\",\n        \"cartoon_type\":\"jpcartoon\",\n        \"do_risk\":False\n    }\n\n    resp = visual_service.jpcartoon(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_ocr_async_demo.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\nimport base64\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n    # visual_service.set_host('host')\n    submit_action = \"OCRPdfSubmitTask\"\n    query_action = \"OCRPdfQueryTask\"\n    version = \"2021-08-23\"\n    visual_service.set_api_info(submit_action, version)\n    visual_service.set_api_info(query_action, version)\n\n    # below shows the sdk usage for all common apis,\n    # if you cannot find the needed one, please check other example files in the same dir\n    # or contact us for further help  \n    \n    # PDF识别\n    # req_key=ocr_pdf\n    # OCRPdfSubmitTask\n    # OCRPdfQueryTask\n\n\n    submit_form = {\n        \"req_key\": \"ocr_pdf\",\n        \"image_base64\": base64.b64encode(open('local.pdf','rb').read()).decode(),\n        \"image_url\": \"http://image.jpeg\",\n    }\n\n    submit_resp = visual_service.ocr_async_api(submit_action, submit_form)\n\n    query_form = {\n        \"req_key\": \"ocr_pdf\",\n        \"task_id\": \"12345678\"\n    }\n\n    query_resp = visual_service.ocr_async_api(query_action, query_form)\n    print(query_resp)"
  },
  {
    "path": "volcengine/example/visual/example_ocr_demo.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n    # visual_service.set_host('host')\n    action = \"\"\n    version = \"\"\n    visual_service.set_api_info(action, version)\n\n    # below shows the sdk usage for all common apis,\n    # if you cannot find the needed one, please check other example files in the same dir\n    # or contact us for further help\n    form = dict()\n    form[\"image_base64\"] = \"image_base64_str\"\n    resp = visual_service.ocr_api(action, form)\n    \n    \n    # 通用识别\n    # 通用OCR       \n    # action=OCRNormal, version=2020-08-26\n    # 多语种OCR     \n    # action=MultiLanguageOCR, version=2022-08-31\n\n    # 个人卡证\n    # 银行卡OCR     \n    # action=BankCard, version=2020-08-26\n    # 身份证OCR     \n    # action=IDCard, version=2020-08-26\n    # 驾驶证OCR     \n    # action=DrivingLicense, version=2020-08-26\n    # 行驶证OCR     \n    # action=VehicleLicense, version=2020-08-26\n    # 台胞证        \n    # action=OcrTaibao, version=2021-08-23\n\n    # 财务票据\n    # 混贴报销      \n    # action=OcrFinance, version=2021-08-23\n    # 出租车票OCR   \n    # action=OcrTaxiInvoice, version=2020-08-26\n    # 火车票OCR     \n    # action=OcrTrainTicket, version=2020-08-26\n    # 行程单OCR     \n    # action=OcrFlightInvoice, version=2020-08-26\n    # 增值税发票OCR \n    # action=OcrVatInvoice, version=2020-08-26\n    # 定额发票OCR   \n    # action=OcrQuotaInvoice, version=2020-08-26\n    # 高速公路过路费 \n    # action=OcrPassInvoice, version=2021-08-23\n    \n    # 资质证书\n    # 食品生产许可证 \n    # action=OcrFoodProduction, version=2021-08-23\n    # 食品经营许可证 \n    # action=OcrFoodBusiness, version=2020-08-26\n    # 营业执照OCR   \n    # action=OcrClueLicense, version=2020-08-26\n    # 商标证        \n    # action=OCRTrade, version=2020-12-21\n    # 软件著作权    \n    # action=OCRRuanzhu, version=2020-12-21\n    # 化妆品生产许可证  \n    # action=OCRCosmeticProduct, version=2020-12-21\n\n    # 行业文档\n    # 印章识别      \n    # action=OcrSeal, version=2021-08-23\n    # 合同校验      \n    # action=OcrTextAlignment, version=2021-08-23\n    # 表格识别      \n    # action=OCRTable, version=2021-08-23\n    print(resp)"
  },
  {
    "path": "volcengine/example/visual/example_ocr_pdf_query_task.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom six import b\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"ocr_pdf\",\n        \"task_id\": \"7394366186341040167\"\n    }\n    resp = visual_service.ocr_pdf_query_task(form)\n    print(resp)\n\n    resp_data = resp['data']['resp_data']\n    print(eval(f\"u'{resp_data}'\"))\n"
  },
  {
    "path": "volcengine/example/visual/example_ocr_pdf_submit_task.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n    # \"image_url\":\"\",\n    \"image_base64\":\"\",\n    \"req_key\":\"ocr_pdf\"\n}\n\n    resp = visual_service.ocr_pdf_submit_task(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_over_resolution.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    params = dict()\n\n    form = {\n        \"image_base64\": \"image_base64_str\"\n    }\n\n    resp = visual_service.over_resolution(form)\n    print(resp)"
  },
  {
    "path": "volcengine/example/visual/example_over_resolution_v2.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"req_key\": \"lens_vida_nnsr\",\n        \"image_urls\": [\n            \"https://xxx\"\n        ]\n    }\n\n    resp = visual_service.over_resolution_v2(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_poem_material.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n\n        \"image_url\":\"https://xxx\"\n\n    }\n\n    resp = visual_service.poem_material(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_potrait_effect.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n\n        \"image_url\":\"https://xxx\",\n        \"type\":\"3d_cartoon\",\n        \"return_type\":1\n    }\n\n    resp = visual_service.potrait_effect(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_product_search_add_image.py",
    "content": "from __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    params = {\n        \"product_id\": \"test\",\n        \"image_id\": \"test\",\n        \"category_id\": 1,\n        \"url\": \"https://xxx\",\n        \"custom_content\": \"custom\",\n        \"int_attr\": 1,\n        \"str_attr\": \"str\",\n        \"crop\": True,\n        # \"region\": {\n        #     'x1': 1,\n        #     'x2': 2,\n        #     'y1': 3,\n        #     'y2': 4,\n        # }\n    }\n\n    resp = visual_service.product_search_add_image(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_product_search_delete_image.py",
    "content": "from __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    params = {\n        \"product_id\": \"test\",\n        \"image_id\": \"test\",\n    }\n\n    resp = visual_service.product_search_delete_image(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_product_search_search_image.py",
    "content": "from __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    params = {\n        \"category_id\": 1,\n        \"url\": \"https://xxx\",\n        \"custom_content\": \"custom\",\n        \"crop\": True,\n        \"filter\": '{\"op\":\"must\",\"field\":\"strAttr\",\"conds\":[\"str\"]}'\n        # \"region\": {\n        #     'x1': 1,\n        #     'x2': 2,\n        #     'y1': 3,\n        #     'y2': 4,\n        # }\n    }\n\n    resp = visual_service.product_search_search_image(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_sky_segment.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n\n        \"image_url\":\"https://xxx\"\n\n    }\n\n    resp = visual_service.sky_segment(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_still_liveness_img.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n    form = {\n        \"req_key\":\"still_liveness\",\n        \"image_urls\":[\"\"]\n        }\n    resp = visual_service.still_liveness_img(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_stretch_recovery.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n            \"image_url\":\"https://xxx\"\n        }\n\n    resp = visual_service.stretch_recovery(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_t2i_ldm.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n            \"req_key\": \"t2i_ldm\",\n            \"text\": \"\",\n            \"style_term\": \"contemporary style\"\n        }\n\n    resp = visual_service.t2i_ldm(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_text2img_xl_sft.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('AK')\n    visual_service.set_sk('SK')\n\n    form = {\n        \"req_key\": \"t2i_xl_sft\",\n        \"prompt\": \"少女，光影，瘦，白皙，干净，美丽\",\n        \"width\": 1024,\n        \"height\": 1024,\n        \"seed\": -1,\n        \"ddim_steps\": 20,\n        \"scale\":7.0,\n        \"return_url\": True,\n        \"logo_info\": {\n            \"add_logo\": True,\n            \"position\": 2,\n            \"language\": 0,\n            \"opacity\": 1\n        }\n    }\n    resp = visual_service.text2img_xl_sft(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_three_d_game_cartoon.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n\n        \"image_url\":\"https://xxx\"\n    }\n\n    resp = visual_service.three_d_game_cartoon(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_tupo_cartoon.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"req_key\": \"tupo_cartoon\",\n        # \"binary_data_base64\": [\"/9xx\"],\n        \"image_urls\": ['https://xxxx'],\n    }\n\n    resp = visual_service.tupo_cartoon(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_video_cover_selection.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"video_url\": \"\"\n    }\n\n    resp = visual_service.video_cover_selection(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_video_highlight_extraction_query_task.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    params = dict()\n\n    params = {\n        \"task_id\": \"get from submit_task resp\"\n    }\n\n    resp = visual_service.video_highlight_extraction_query_task(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_video_highlight_extraction_submit_task.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"video_url\": \"\",\n        \"game\": -1,\n    }\n\n    resp = visual_service.video_highlight_extraction_submit_task(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_video_inpaint_query_task.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    params = dict()\n\n    params = {\n        \"task_id\": \"get from submit_task resp\"\n    }\n\n    resp = visual_service.video_inpaint_query_task(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_video_inpaint_submit_task.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport time\nimport base64\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"method\": \"search\",\n        \"video_url\": \"\"\n    }\n\n    resp = visual_service.video_inpaint_submit_task(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_video_over_resolution_get_result_v2.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"req_key\": \"lens_video_nnsr\",\n        \"task_id\":\"\"\n    }\n\n    resp = visual_service.video_over_resolution_get_result_v2(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_video_over_resolution_query_task.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    params = dict()\n\n    params = {\n        \"task_id\": \"get from submit_task resp\"\n    }\n\n    resp = visual_service.video_over_resolution_query_task(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_video_over_resolution_submit_task.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"output_resolution\": \"output_resolution\",\n        \"video_url\": \"\"\n    }\n\n    resp = visual_service.video_over_resolution_submit_task(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_video_over_resolution_submit_task_v2.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you don't set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n            \"req_key\":\"lens_video_nnsr\",\n            \"url\":\"https://xxx\"\n    }\n\n    resp = visual_service.video_over_resolution_submit_task_v2(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_video_retargeting_query_task.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    params = dict()\n\n    params = {\n        \"task_id\": \"get from submit_task resp\"\n    }\n\n    resp = visual_service.video_retargeting_query_task(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_video_retargeting_submit_task.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"strategy\": \"STATIC_CROPPING\",\n        \"aspect_ratio\": 1,\n        \"crop_size\": 1,\n        \"video_url\": \"\"\n    }\n\n    resp = visual_service.video_retargeting_submit_task(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_video_scene_detect.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    params = dict()\n\n    form = {\n        \"image_base64\": \"image_base64_str\"\n    }\n\n    resp = visual_service.video_scene_detect(form)\n    print(resp)"
  },
  {
    "path": "volcengine/example/visual/example_video_summarization_query_task.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    params = dict()\n\n    params = {\n        \"task_id\": \"get from submit_task resp\"\n    }\n\n    resp = visual_service.video_summarization_query_task(params)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/visual/example_video_summarization_submit_task.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport time\n\nfrom volcengine.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n\n    form = {\n        \"result_duration\": 5,\n        \"result_width\": 1280,\n        \"video_url\": \"\"\n    }\n\n    resp = visual_service.video_summarization_submit_task(form)\n    print(resp)\n"
  },
  {
    "path": "volcengine/example/vms/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/vms/examplae_sigle_batch_append.py",
    "content": "# coding:utf-8\n\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    single_append_body = {\n        \"List\": [\n            {\n                \"Phone\": \"your phone\",\n                \"Resource\": \"9b39e17fb12444c78f20d6551469a6f0\",\n                \"NumberPoolNo\": \"NP162213338604093530\",\n                \"NumberType\": 0,\n                \"TriggerTime\": \"2022-03-12 19:18:00\",\n                \"Type\": 0,\n                \"SingleOpenId\": \"9b39e17fb12444c78f20d6551469a6e0\"\n            }\n        ],\n    }\n    print(vms_service.single_batch_append(single_append_body))\n"
  },
  {
    "path": "volcengine/example/vms/example_batch_append_task.py",
    "content": "# coding:utf-8\n\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    batch_append_task = {\n        \"TaskOpenId\": \"106d2984fbf0480480cbc8b98d609592\",\n        \"PhoneList\": [\n            {\n                \"Phone\": \"your phone\",\n            }\n        ],\n    }\n\n    print(vms_service.batch_append_task(batch_append_task))\n"
  },
  {
    "path": "volcengine/example/vms/example_bind_axb.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    bind_axb_form = {\n        \"NumberPoolNo\": \"NP161156328504091435\",\n        \"PhoneNoA\": \"13700000001\",\n        \"PhoneNoB\": \"13700000002\",\n        \"PhoneNoX\": \"13700000003\",\n        \"ExpireTime\": \"1632920195\",\n        \"UserData\": \"this is my user data\",\n    }\n    print(vms_service.bind_axb(bind_axb_form))\n"
  },
  {
    "path": "volcengine/example/vms/example_bind_axb_for_axne.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    bind_axb_for_axne_form = {\n        \"NumberPoolNo\": \"NP167091951102821491\",\n        \"ParentSubId\": \"S16729859759534216e440\",\n        \"PhoneNoB\": \"13500000001\",\n        \"EnableDuration\": 360, \n    }\n    print(vms_service.bind_axb_for_axne(bind_axb_for_axne_form))\n"
  },
  {
    "path": "volcengine/example/vms/example_bind_axg.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n    vms_service.set_ak(\"ak\")\n    vms_service.set_sk(\"sk\")\n\n    bind_axg_json = {\n        \"NumberPoolNo\": \"NP162981168404095092\",\n        \"PhoneNoA\": \"13700000001\",\n        \"PhoneNoB\": \"13700000002\",\n        \"PhoneNoX\": \"13700000005\",\n        \"ExpireTime\": \"1632920195\",\n    }\n    print(vms_service.bind_axg(bind_axg_json))\n"
  },
  {
    "path": "volcengine/example/vms/example_bind_axn.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    bind_axn_form = {\n        \"NumberPoolNo\": \"NP162981168404095092\",\n        \"PhoneNoA\": \"13700000001\",\n        \"PhoneNoB\": \"13700000002\",\n        \"PhoneNoX\": \"13700000005\",\n        \"ExpireTime\": \"1632920195\",\n        \"UserData\": \"this is my user data\",\n    }\n    print(vms_service.bind_axn(bind_axn_form))\n"
  },
  {
    "path": "volcengine/example/vms/example_bind_axne.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    bind_axne_form = {\n        \"NumberPoolNo\": \"NP167091934402820309\",\n        \"PhoneNoA\": \"13700000017\",\n        \"PhoneNoB\": \"13700000018\",\n        \"UserData\": \"this is my user data\",\n        \"CityCode\": \"010\",\n        \"ExpireTime\":\"1673071556\",\n    }\n    print(vms_service.bind_axne(bind_axne_form))\n"
  },
  {
    "path": "volcengine/example/vms/example_bind_axyb.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    bind_axyb_form = {\n        \"NumberPoolNo\": \"NP166375725010908111\",\n        \"PhoneNoA\": \"13700000017\",\n        \"CityCode\": \"010\",\n        \"UserData\": \"this is my user data\",\n        \"ExpireTime\": \"1673071556\",\n        \"YbEnableDuration\": 600,\n        \"NumberPoolNoY\": \"NP166265127202826653\"\n    }\n    print(vms_service.bind_axyb(bind_axyb_form))\n"
  },
  {
    "path": "volcengine/example/vms/example_bind_yb_for_axyb.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    bind_yb_for_axyb_form = {\n        \"NumberPoolNo\": \"NP166191438910906190\",\n        \"ParentSubId\": \"S16722126795817211a93e\",\n        \"PhoneNoB\": \"13500000001\",\n        \"EnableDuration\": 360, \n    }\n    print(vms_service.bind_yb_for_axyb(bind_yb_for_axyb_form))\n"
  },
  {
    "path": "volcengine/example/vms/example_click2_call.py",
    "content": "from volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    click2_call_form = {\n        \"Caller\": \"137XXXX8257\",\n        \"Callee\": \"158XXXX9130\",\n        \"CallerNumberPoolNo\": \"NP163517154204092175\",\n        \"CalleeNumberPoolNo\": \"NP163517154204092175\",\n    }\n    print(vms_service.click2_call(click2_call_form))"
  },
  {
    "path": "volcengine/example/vms/example_click2_call_lite.py",
    "content": "from volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    click2_call_lite_form = {\n        \"Caller\": \"137XXXX8257\",\n        \"Callee\": \"158XXXX9130\",\n        \"NumberPoolNo\": \"NPXXXXX810901043\",\n    }\n    print(vms_service.click2_call_lite(click2_call_lite_form))"
  },
  {
    "path": "volcengine/example/vms/example_commit_resource_upload.py",
    "content": "# coding:utf-8\n\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    body = {\n       \"FileName\": \"ecb1be9b71974916a529b936702783cb.mp3\",\n    }\n\n    print(vms_service.commit_resource_upload(body))\n"
  },
  {
    "path": "volcengine/example/vms/example_create_number_pool.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    form = {\n        \"Name\": \"testsipv1\",\n        \"ServiceType\": 100,\n        \"SubServiceType\": 101\n    }\n    print(vms_service.create_number_pool(form))\n"
  },
  {
    "path": "volcengine/example/vms/example_create_task.py",
    "content": "# coding:utf-8\n\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    create_task_body = {\n        \"Name\": \"你好\",\n        \"Resource\": \"9b39e17fb12444c78f20d6551469a6f0\",\n        \"Type\": 0,\n        \"NumberPoolNo\": \"NP162213338604093530\",\n        \"Concurrency\": 2,\n        \"PhoneList\": [\n            {\n                \"Phone\": \"your phone\",\n            }\n        ],\n        \"StartTime\": \"2022-03-01 00:00:00\",\n        \"EndTime\": \"2022-03-12 01:30:00\",\n        \"SelectNumberRule\": 5,\n    }\n\n    print(vms_service.create_task(create_task_body))\n"
  },
  {
    "path": "volcengine/example/vms/example_create_tts.py",
    "content": "# coding:utf-8\n\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    body = {\n        \"Name\": \"我的tts测试\",\n        \"TtsTemplateContent\": \"测试文本\",\n        \"Remark\": \"测试\",\n        \"TtsOption\":\"{\\\"loop\\\":0,\\\"loop_interval\\\":0,\\\"speed\\\":10,\\\"volume\\\":10,\\\"pitch\\\":10,\\\"voice_type\\\":\\\"BV001_streaming\\\",\\\"lang\\\":\\\"ch\\\",\\\"voice\\\":\\\"other\\\"}\"\n    }\n\n    vms_service.create_tts(body)"
  },
  {
    "path": "volcengine/example/vms/example_delete_resource.py",
    "content": "# coding:utf-8\n\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    delete_resource_param = {\n       \"ResourceKey\": \"4bb4b9b137264148998de1c227e9f652\",\n    }\n\n    print(vms_service.delete_resource(delete_resource_param))\n"
  },
  {
    "path": "volcengine/example/vms/example_enable_or_disable_number.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    form = {\n        \"NumberList\": \"xxx\",\n        \"EnableCode\": 2\n    }\n    print(vms_service.enable_or_disable_number(form))\n"
  },
  {
    "path": "volcengine/example/vms/example_fetch_resource.py",
    "content": "# coding:utf-8\n\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    body = {\n        \"Url\": \"公网url，使用前需要申请正向代理\",\n        \"Name\": \"测试文件\"\n    }\n\n    vms_service.fetch_resource(body)\n"
  },
  {
    "path": "volcengine/example/vms/example_get_reource_upload_url.py",
    "content": "# coding:utf-8\n\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    body = {\n       \"FileName\": \"ecb1be9b71974916a529b936702783cb.mp3\",\n    }\n\n    print(vms_service.get_resource_upload_url(body))\n"
  },
  {
    "path": "volcengine/example/vms/example_number_list.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    form = {\n        \"NumberPoolNo\": \"xxx\",\n        \"NumberPoolTypeCode\": 101,\n        \"Limit\": 5,\n        \"Offset\": 0\n    }\n    print(vms_service.number_list(form))\n"
  },
  {
    "path": "volcengine/example/vms/example_number_pool_list.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    form = {\n        \"ServiceType\": 100,\n        \"SubServiceType\": 101,\n        \"Limit\": 5,\n        \"Offset\": 0\n    }\n    print(vms_service.number_pool_list(form))\n"
  },
  {
    "path": "volcengine/example/vms/example_open_update_resource.py",
    "content": "# coding:utf-8\n\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    params = {\n       \"ResourceKey\": \"1ca08a45a937411ebd78e572cef87086\",\n       \"Name\": \"123.mp3\"\n    }\n\n    print(vms_service.open_update_resource(params))\n"
  },
  {
    "path": "volcengine/example/vms/example_pause_task.py",
    "content": "# coding:utf-8\n\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    pause_task_param = {\n       \"TaskOpenId\": \"ecb1be9b71974916a529b936702783cb\",\n    }\n\n    print(vms_service.pause_task(pause_task_param))\n"
  },
  {
    "path": "volcengine/example/vms/example_query_can_call.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    query_call_call_form = {\n        \"CustomerNumberList\": \"188xxxx1647\",\n        \"BusinessLineId\": \"200000001\",\n        \"CallType\": 1,\n    }\n    print(vms_service.query_call_call(query_call_call_form))\n"
  },
  {
    "path": "volcengine/example/vms/example_query_open_get_resource.py",
    "content": "# coding:utf-8\n\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    body = {\n       \"Type\": 0,\n       \"Keyword\": \"0f299353da3343e58373132b9e3b75d4\"\n    }\n\n    print(vms_service.query_open_get_resource(body))\n"
  },
  {
    "path": "volcengine/example/vms/example_query_subscription.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    query_subscription_form = {\n        \"NumberPoolNo\": \"NP161156328504091435\",\n        \"SubId\": \"S16329001153159fa121d9\",\n    }\n    print(vms_service.query_subscription(query_subscription_form))\n"
  },
  {
    "path": "volcengine/example/vms/example_query_subscription_for_list.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    query_subscription_for_list_form = {\n        \"NumberPoolNo\": \"NP161156328504091435\",\n        \"PhoneNoX\": \"13700000003\",\n        \"Status\": 1,\n        \"Offset\": 0,\n        \"Limit\": 20,\n    }\n    print(vms_service.query_subscription_for_list(query_subscription_for_list_form))\n"
  },
  {
    "path": "volcengine/example/vms/example_query_usable_resource.py",
    "content": "# coding:utf-8\n\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    params = {\n       \"Type\": 0,\n    }\n\n    print(vms_service.query_usable_resource(params))\n"
  },
  {
    "path": "volcengine/example/vms/example_remuse_task.py",
    "content": "# coding:utf-8\n\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    pause_task_param = {\n       \"TaskOpenId\": \"ecb1be9b71974916a529b936702783cb\",\n    }\n\n    print(vms_service.resume_task(pause_task_param))\n"
  },
  {
    "path": "volcengine/example/vms/example_select_number.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    form = {\n        \"NumberPoolNo\": \"xxx\"\n    }\n    print(vms_service.select_number(form))\n"
  },
  {
    "path": "volcengine/example/vms/example_select_number_and_bind_axb_form.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    select_number_and_bind_axb_form = {\n        \"NumberPoolNo\": \"NP161156328504091435\",\n        \"PhoneNoA\": \"13700000001\",\n        \"PhoneNoB\": \"13700000002\",\n        \"ExpireTime\": \"1632920195\",\n    }\n    print(vms_service.select_number_and_bind_axb(select_number_and_bind_axb_form))\n"
  },
  {
    "path": "volcengine/example/vms/example_select_number_and_bind_axn.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    select_number_and_bind_axn_form = {\n        \"NumberPoolNo\": \"NP167092127702825445\",\n        \"PhoneNoA\": \"13700000001\",\n        \"PhoneNoB\": \"13700000002\",\n        \"UserData\": \"this is my user data\",\n        \"CityCode\": \"010\",\n        \"ExpireTime\": \"1673071556\",\n    }\n    print(vms_service.select_number_and_bind_axn(select_number_and_bind_axn_form))\n"
  },
  {
    "path": "volcengine/example/vms/example_single_cancle.py",
    "content": "# coding:utf-8\n\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    params = {\n        \"SingleOpenId\": \"9b39e17fb12444c78f20d6551469a6e0\"\n    }\n\n    print(vms_service.single_cancel(params))"
  },
  {
    "path": "volcengine/example/vms/example_single_info.py",
    "content": "# coding:utf-8\n\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    params = {\n        \"SingleOpenId\": \"9b39e17fb12444c78f20d6551469a6e0\"\n    }\n\n    print(vms_service.single_info(params))"
  },
  {
    "path": "volcengine/example/vms/example_stop_task.py",
    "content": "# coding:utf-8\n\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    pause_task_param = {\n       \"TaskOpenId\": \"ecb1be9b71974916a529b936702783cb\",\n    }\n\n    print(vms_service.stop_task(pause_task_param))\n"
  },
  {
    "path": "volcengine/example/vms/example_unbind_axb.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    unbind_axb_form = {\n        \"NumberPoolNo\": \"NP161156328504091435\",\n        \"SubId\": \"S16328999093159b70bc71\",\n    }\n    print(vms_service.unbind_axb(unbind_axb_form))\n"
  },
  {
    "path": "volcengine/example/vms/example_unbind_axn.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    unbind_axn_form = {\n        \"NumberPoolNo\": \"NP162981168404095092\",\n        \"SubId\": \"S16329006138991e7e1003\",\n    }\n    print(vms_service.unbind_axn(unbind_axn_form))\n"
  },
  {
    "path": "volcengine/example/vms/example_unbind_axne.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    unbind_axne_form = {\n        \"NumberPoolNo\": \"NP167091934402820309\",\n        \"SubId\": \"S16729852979534c6e4719\",\n    }\n    print(vms_service.unbind_axne(unbind_axne_form))\n"
  },
  {
    "path": "volcengine/example/vms/example_unbind_axyb.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    unbind_axyb_form = {\n        \"NumberPoolNo\": \"NP166375725010908111\",\n        \"SubId\": \"S16729852979534c6e4719\",\n    }\n    print(vms_service.unbind_axyb(unbind_axyb_form))\n"
  },
  {
    "path": "volcengine/example/vms/example_update_axb.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    update_axb_form = {\n        \"NumberPoolNo\": \"NP161156328504091435\",\n        \"SubId\": \"S1632900399315954ffbfd\",\n        \"UpdateType\": \"updateExpireTime\",\n        \"ExpireTime\": \"1632923795\",\n    }\n    print(vms_service.update_axb(update_axb_form))\n"
  },
  {
    "path": "volcengine/example/vms/example_update_axn.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    update_axn_form = {\n        \"NumberPoolNo\": \"NP162981168404095092\",\n        \"SubId\": \"S16329006138991e7e1003\",\n        \"UpdateType\": \"updatePhoneNoB\",\n        \"PhoneNoB\": \"13700000004\",\n    }\n    print(vms_service.update_axn(update_axn_form))\n"
  },
  {
    "path": "volcengine/example/vms/example_update_axne.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    update_axne_form = {\n        \"NumberPoolNo\": \"NP167091934402820309\",\n        \"SubId\": \"S1672985491953460b645f\",\n        \"UpdateType\": \"updatePhoneNoB\",\n        \"PhoneNoB\": \"189000000001\",\n    }\n    print(vms_service.update_axne(update_axne_form))\n"
  },
  {
    "path": "volcengine/example/vms/example_update_axyb.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    update_axyb_form = {\n        \"NumberPoolNo\": \"NP167091934402820309\",\n        \"SubId\": \"S1672985491953460b641f\",\n        \"UpdateType\": \"UpdatePhoneNoA\",\n        \"PhoneNoA\": \"18900000001\",\n    }\n    print(vms_service.update_axyb(update_axyb_form))\n"
  },
  {
    "path": "volcengine/example/vms/example_update_number_pool.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    form = {\n        \"Name\": \"testsipv2\",\n        \"ServiceType\": 100,\n        \"SubServiceType\": 101,\n        \"NumberPoolNo\": \"todo\"\n    }\n    print(vms_service.update_number_pool(form))\n"
  },
  {
    "path": "volcengine/example/vms/example_update_task.py",
    "content": "# coding:utf-8\n\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    update_task_body = {\n        \"TaskOpenId\": \"106d2984fbf0480480cbc8b98d609592\",\n        \"Concurrency\": 3,\n        \"StartTime\": \"2022-03-02 00:00:00\",\n        \"EndTime\": \"2022-03-13 01:30:00\",\n        \"Recall\": 1\n    }\n\n    print(vms_service.update_task(update_task_body))\n"
  },
  {
    "path": "volcengine/example/vms/example_upgrade_ax_to_axb.py",
    "content": "# coding:utf-8\nfrom volcengine.vms.VmsService import VmsService\n\nif __name__ == '__main__':\n    vms_service = VmsService()\n\n    vms_service.set_ak(\"your ak\")\n    vms_service.set_sk(\"your sk\")\n\n    upgrade_ax_to_axb_form = {\n        \"NumberPoolNo\": \"NP161156328504091435\",\n        \"SubId\": \"S163290034831599ce523b\",\n        \"PhoneNoB\": \"13700000002\",\n        \"UserData\": \"this is my user data\",\n    }\n    print(vms_service.upgrade_ax_to_axb(upgrade_ax_to_axb_form))\n"
  },
  {
    "path": "volcengine/example/vod/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/vod/callback/AddCallbackSubscriptionExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodAddCallbackSubscriptionRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodAddCallbackSubscriptionRequest()\n        req.SpaceName = 'your space name'\n        req.Url = 'your url'\n        req.ContentType = 'your ContentType'\n        resp = vod_service.add_callback_subscription(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n            "
  },
  {
    "path": "volcengine/example/vod/callback/SetCallbackEvent.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodSetCallbackEventRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodSetCallbackEventRequest()\n        req.SpaceName = 'your space name'\n        # AuthEnabled 1: enable;0: disable\n        req.AuthEnabled = '1'\n        req.PrivateKey = 'your private key'\n        resp = vod_service.set_callback_event(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n            "
  },
  {
    "path": "volcengine/example/vod/callback/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/vod/cdn/AddOrUpdateCertificate.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import AddOrUpdateCertificateV2Request\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = AddOrUpdateCertificateV2Request()\n        req.SpaceName = 'your space name'\n        req.Domain = 'your domain'\n        req.DomainType = 'your DomainType'\n        req.CertificateId = 'your CertificateId'\n        req.HttpsStatus = 'your HttpsStatus'\n        resp = vod_service.add_or_update_certificate(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/vod/cdn/CreateCdnPreloadTaskExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodCreateCdnPreloadTaskRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodCreateCdnPreloadTaskRequest()\n\n        req.SpaceName = 'your space name'\n        resp = vod_service.create_cdn_preload_task(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n            "
  },
  {
    "path": "volcengine/example/vod/cdn/CreateCdnRefreshTaskExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodCreateCdnRefreshTaskRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodCreateCdnRefreshTaskRequest()\n        req.SpaceName = 'your space name'\n        resp = vod_service.create_cdn_refresh_task(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/vod/cdn/CreateDomainExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodCreateDomainV2Request\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodCreateDomainV2Request()\n        req.SpaceName = 'your space name'\n        resp = vod_service.create_domain(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)"
  },
  {
    "path": "volcengine/example/vod/cdn/DescribeCdnIpExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodDescribeIPInfoRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodDescribeIPInfoRequest()\n        req.Ips = \"1.1.1.1\"\n        resp = vod_service.describe_ip_info(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/vod/cdn/DescribeDomainConfigExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodDescribeDomainConfigRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodDescribeDomainConfigRequest()\n        req.SpaceName = 'your space name'\n        req.DomainType = 'your domain type'\n        req.Domain = 'your domain'\n        resp = vod_service.describe_domain_config(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)"
  },
  {
    "path": "volcengine/example/vod/cdn/DescribeDomainVerifyContentExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodDescribeDomainVerifyContentRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodDescribeDomainVerifyContentRequest()\n        req.Domain = 'your domain'\n        resp = vod_service.describe_domain_verify_content(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)"
  },
  {
    "path": "volcengine/example/vod/cdn/DescribeVodDomainBandwidthDataExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodDescribeVodDomainBandwidthDataRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodDescribeVodDomainBandwidthDataRequest()\n        req.DomainList = \"\"\n        req.DomainInSpaceList = \"\"\n        req.StartTime = \"\"\n        req.EndTime = \"\"\n        req.Aggregation = 0\n        req.BandwidthType = \"\"\n        req.Area = \"\"\n        req.RegionList = \"\"\n        resp = vod_service.describe_vod_domain_bandwidth_data(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/vod/cdn/DescribeVodDomainTrafficDataExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodDescribeVodDomainTrafficDataRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodDescribeVodDomainTrafficDataRequest()\n        req.DomainList = \"\"\n        req.DomainInSpaceList = \"\"\n        req.StartTime = \"\"\n        req.EndTime = \"\"\n        req.Aggregation = 0\n        req.TrafficType = \"\"\n        req.Area = \"\"\n        req.RegionList = \"\"\n        resp = vod_service.describe_vod_domain_traffic_data(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/vod/cdn/ListCdnAccessLogExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodListCdnAccessLogRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodListCdnAccessLogRequest()\n        req.SpaceName = 'your space name'\n        req.Domains = 'your domian'\n        req.StartTimestamp = 0\n        req.EndTimestamp = 0\n        resp = vod_service.list_cdn_access_log(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/vod/cdn/ListCdnPvDataExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodListCdnPvDataRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodListCdnPvDataRequest()\n        req.Domains = 'your domian'\n        req.StartTimestamp = 0\n        req.EndTimestamp = 0\n        resp = vod_service.list_cdn_pv_data(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/vod/cdn/ListCdnStatusDataExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodListCdnStatusDataRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodListCdnStatusDataRequest()\n        req.Domains = 'your domian'\n        req.StartTimestamp = 0\n        req.EndTimestamp = 0\n        resp = vod_service.list_cdn_status_data(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/vod/cdn/ListCdnTasksExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodListCdnTasksRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodListCdnTasksRequest()\n        req.SpaceName = 'your space name'\n        req.TaskId = 'your task_id'\n        req.DomainName = 'your domain'\n        req.TaskType = 'your task type'\n        req.Status = 'your status'\n        req.StartTimestamp = 0\n        req.EndTimestamp = 0\n        req.PageNum = 1\n        req.PageSize = 10\n        resp = vod_service.list_cdn_tasks(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/vod/cdn/ListCdnTopAccessExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodListCdnTopAccessRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodListCdnTopAccessRequest()\n        req.Domains = 'your domian'\n        req.StartTimestamp = 0\n        req.EndTimestamp = 0\n        req.SortType = 'your sort type'\n        req.Item = 'your item'\n        resp = vod_service.list_cdn_top_access(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/vod/cdn/ListCdnTopAccessUrlExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodListCdnTopAccessUrlRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodListCdnTopAccessUrlRequest()\n        req.Domains = 'your domian'\n        req.StartTimestamp = 0\n        req.EndTimestamp = 0\n        req.SortType = 'your sort type'\n        resp = vod_service.list_cdn_top_access_url(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/vod/cdn/ListCdnUsageDataExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodListCdnUsageDataRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodListCdnUsageDataRequest()\n        req.Domains = 'your domian'\n        req.StartTimestamp = 0\n        req.EndTimestamp = 0\n        resp = vod_service.list_cdn_usage_data(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/vod/cdn/ListDomainExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodListDomainRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodListDomainRequest()\n        req.SpaceName = 'your space name'\n        resp = vod_service.list_domain(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n            "
  },
  {
    "path": "volcengine/example/vod/cdn/UpdateDomainAuthConfigExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodUpdateDomainAuthConfigV2Request\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodUpdateDomainAuthConfigV2Request()\n        req.SpaceName = 'your space name'\n        resp = vod_service.update_domain_auth_config(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)"
  },
  {
    "path": "volcengine/example/vod/cdn/UpdateDomainConfigExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodUpdateDomainConfigRequest\nfrom volcengine.vod.models.business.vod_cdn_pb2 import VodDomainConfig\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodUpdateDomainConfigRequest()\n        req.SpaceName = 'your space name'\n        req.DomainType = 'your domain type'\n        req.Domain = 'your domain'\n        config = VodDomainConfig()\n        req.Config.CopyFrom(config)\n        resp = vod_service.update_domain_config(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)"
  },
  {
    "path": "volcengine/example/vod/cdn/UpdateDomainExpireExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodUpdateDomainExpireV2Request\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodUpdateDomainExpireV2Request()\n        #req.SpaceName = 'your space name'\n        resp = vod_service.update_domain_expire(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)"
  },
  {
    "path": "volcengine/example/vod/cdn/UpdateDomainUrlAuthConfigExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodUpdateDomainUrlAuthConfigV2Request\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodUpdateDomainUrlAuthConfigV2Request()\n        req.SpaceName = 'your space name'\n        req.DomainType= 'your DomainType'\n        req.Domain    = 'your Domain'\n        req.MainKey   = 'your MainKey'\n        req.BackupKey = 'your BackupKey'\n        req.Status    = 'your Status'\n        resp = vod_service.update_domain_url_auth_config(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/vod/cdn/VerifyDomainOwnerExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodVerifyDomainOwnerRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodVerifyDomainOwnerRequest()\n        req.Domain = 'your domain'\n        req.VerifyType = 'your verify type'\n        resp = vod_service.verify_domain_owner(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)"
  },
  {
    "path": "volcengine/example/vod/cdn/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/vod/measure/DescribeVodEnhanceImageData.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import DescribeVodEnhanceImageDataRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = DescribeVodEnhanceImageDataRequest()\n        req.SpaceList = 'your SpaceList'\n        req.StartTime = 'your StartTime'\n        req.EndTime = 'your EndTime'\n        req.TaskTypeList = 'your TaskTypeList'\n        req.TaskStageList = 'your TaskStageList'\n        req.Aggregation = 0\n        req.RegionList = \"\"\n        resp = vod_service.describe_vod_enhance_image_data(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n            "
  },
  {
    "path": "volcengine/example/vod/measure/DescribeVodMostPlayedStatisData.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import DescribeVodMostPlayedStatisDataRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = DescribeVodMostPlayedStatisDataRequest()\n        req.Space = 'your Space'\n        req.StartTime = 'your StartTime'\n        req.EndTime = 'your EndTime'\n        req.OrderType = 'your OrderType'\n        req.TopN = 0\n        resp = vod_service.describe_vod_most_played_statis_data(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n            "
  },
  {
    "path": "volcengine/example/vod/measure/DescribeVodPlayedStatisData.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import DescribeVodPlayedStatisDataRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = DescribeVodPlayedStatisDataRequest()\n        req.Space = 'your Space'\n        req.StartTime = 'your StartTime'\n        req.EndTime = 'your EndTime'\n        req.VidList = 'your VidList'\n        req.OrderType = 'your OrderType'\n        resp = vod_service.describe_vod_played_statis_data(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n            "
  },
  {
    "path": "volcengine/example/vod/measure/DescribeVodRealtimeMediaData.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import DescribeVodRealtimeMediaDataRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = DescribeVodRealtimeMediaDataRequest()\n        req.SpaceList = 'your SpaceList'\n        req.StartTime = 'your StartTime'\n        req.EndTime = 'your EndTime'\n        req.ProcessType = 'your ProcessType'\n        req.Aggregation = 0\n        req.DetailFieldList = 'your DetailFieldList'\n        resp = vod_service.describe_vod_realtime_media_data(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n            "
  },
  {
    "path": "volcengine/example/vod/measure/DescribeVodRealtimeMediaDetailData.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import DescribeVodRealtimeMediaDetailDataRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = DescribeVodRealtimeMediaDetailDataRequest()\n        req.Region = 'your Region'\n        req.Space = 'your Space'\n        req.StartTime = 'your StartTime'\n        req.EndTime = 'your EndTime'\n        req.PageSize = 0\n        req.PageNum = 0\n        resp = vod_service.describe_vod_realtime_media_detail_data(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n            "
  },
  {
    "path": "volcengine/example/vod/measure/DescribeVodSnapshotData.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import DescribeVodSnapshotDataRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = DescribeVodSnapshotDataRequest()\n        req.SpaceList = 'your SpaceList'\n        req.StartTime = 'your StartTime'\n        req.EndTime = 'your EndTime'\n        req.SnapshotType = 'your SnapshotType'\n        req.TaskStageList = 'your TaskStageList'\n        req.Aggregation = 0\n        req.DetailFieldList = 'your DetailFieldList'\n        req.RegionList = \"\"\n        resp = vod_service.describe_vod_snapshot_data(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n            "
  },
  {
    "path": "volcengine/example/vod/measure/DescribeVodSpaceAIStatisData.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import DescribeVodSpaceAIStatisDataRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = DescribeVodSpaceAIStatisDataRequest()\n        req.SpaceList = 'your SpaceList'\n        req.StartTime = 'your StartTime'\n        req.EndTime = 'your EndTime'\n        req.MediaAiType = 'your MediaAiType'\n        req.TaskStageList = 'your TaskStageList'\n        req.Aggregation = 0\n        req.DetailFieldList = 'your DetailFieldList'\n        req.RegionList = \"your RegionList\"\n        resp = vod_service.describe_vod_space_a_i_statis_data(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n            "
  },
  {
    "path": "volcengine/example/vod/measure/DescribeVodSpaceDetectStatisData.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import DescribeVodSpaceDetectStatisDataRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = DescribeVodSpaceDetectStatisDataRequest()\n        req.SpaceList = 'your SpaceList'\n        req.StartTime = 'your StartTime'\n        req.EndTime = 'your EndTime'\n        req.DetectType = 'your DetectType'\n        req.TaskStageList = 'your TaskStageList'\n        req.Aggregation = 0\n        req.DetailFieldList = 'your DetailFieldList'\n        req.RegionList = \"your RegionList\"\n        resp = vod_service.describe_vod_space_detect_statis_data(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n            "
  },
  {
    "path": "volcengine/example/vod/measure/DescribeVodSpaceEditDetailData.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import DescribeVodSpaceEditDetailDataRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = DescribeVodSpaceEditDetailDataRequest()\n        req.Region = 'your Region'\n        req.Space = 'your Space'\n        req.StartTime = 'your StartTime'\n        req.EndTime = 'your EndTime'\n        req.PageSize = 0\n        req.PageNum = 0\n        resp = vod_service.describe_vod_space_edit_detail_data(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n            "
  },
  {
    "path": "volcengine/example/vod/measure/DescribeVodSpaceEditStatisData.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import DescribeVodSpaceEditStatisDataRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = DescribeVodSpaceEditStatisDataRequest()\n        req.SpaceList = 'your SpaceList'\n        req.StartTime = 'your StartTime'\n        req.EndTime = 'your EndTime'\n        req.Specification = 'your Specification'\n        req.Aggregation = 0\n        req.DetailFieldList = 'your DetailFieldList'\n        req.RegionList = \"\"\n        resp = vod_service.describe_vod_space_edit_statis_data(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n            "
  },
  {
    "path": "volcengine/example/vod/measure/DescribeVodSpaceSubtitleStatisData.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import DescribeVodSpaceSubtitleStatisDataRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = DescribeVodSpaceSubtitleStatisDataRequest()\n        req.SpaceList = 'your SpaceList'\n        req.StartTime = 'your StartTime'\n        req.EndTime = 'your EndTime'\n        req.SubtitleType = 'your SubtitleType'\n        req.TaskStageList = 'your TaskStageList'\n        req.Aggregation = 0\n        req.DetailFieldList = 'your DetailFieldList'\n        req.RegionList = \"your RegionList\"\n        resp = vod_service.describe_vod_space_subtitle_statis_data(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n            "
  },
  {
    "path": "volcengine/example/vod/measure/DescribeVodSpaceTranscodeData.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import DescribeVodSpaceTranscodeDataRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = DescribeVodSpaceTranscodeDataRequest()\n        req.SpaceList = 'your SpaceList'\n        req.StartTime = 'your StartTime'\n        req.EndTime = 'your EndTime'\n        req.TranscodeType = 'your TranscodeType'\n        req.Specification = 'your Specification'\n        req.TaskStageList = 'your TaskStageList'\n        req.Aggregation = 0\n        req.DetailFieldList = 'your DetailFieldList'\n        req.RegionList = \"your RegionList\"\n        resp = vod_service.describe_vod_space_transcode_data(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n            "
  },
  {
    "path": "volcengine/example/vod/measure/DescribeVodSpaceWorkflowDetailData.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import DescribeVodSpaceWorkflowDetailDataRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = DescribeVodSpaceWorkflowDetailDataRequest()\n        req.Region = 'your Region'\n        req.Space = 'your Space'\n        req.StartTime = 'your StartTime'\n        req.EndTime = 'your EndTime'\n        req.PageSize = 0\n        req.PageNum = 0\n        resp = vod_service.describe_vod_space_workflow_detail_data(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n            "
  },
  {
    "path": "volcengine/example/vod/measure/DescribeVodVidTrafficFileLogExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import DescribeVodVidTrafficFileLogRequest\n\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = DescribeVodVidTrafficFileLogRequest()\n        req.SpaceList = \"your SpaceList\"\n        req.StartTime = \"your StartTime\"\n        req.EndTime = \"your EndTime\"\n        \n        resp = vod_service.describe_vod_vid_traffic_file_log(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n    print('*' * 100)"
  },
  {
    "path": "volcengine/example/vod/measure/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/vod/media/DeleteMaterial.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodDeleteMaterialRequest\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req20 = VodDeleteMaterialRequest()\n        req20.SpaceName=\"SpaceName\"\n        req20.Mid = \"mid\"\n        resp = vod_service.delete_material(req20)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n    print('*' * 100)"
  },
  {
    "path": "volcengine/example/vod/media/DeleteMediaTosFile.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodDeleteMediaTosFileRequest\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req20 = VodDeleteMediaTosFileRequest()\n        req20.SpaceName=\"SpaceName\"\n        req20.FileNames.append(\"fileName\")\n        resp = vod_service.delete_media_tos_file(req20)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n    print('*' * 100)"
  },
  {
    "path": "volcengine/example/vod/media/GetAdAuditResultByVidExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodGetAdAuditResultByVidRequest\n\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodGetAdAuditResultByVidRequest()\n        req.SpaceName = \"your SpaceName\"\n        req.Vid = \"your Vid\"\n        req.FileIds.append(\"your FileIds\")\n        \n        resp = vod_service.get_ad_audit_result_by_vid(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n    print('*' * 100)"
  },
  {
    "path": "volcengine/example/vod/media/GetFileInfos.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodGetFileInfosRequest\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req20 = VodGetFileInfosRequest()\n        req20.SpaceName = \"SpaceName\"\n        # url encode\n        req20.EncodedFileNames = \"EncodedFileNames\"\n        # non-required param\n        req20.BucketName = \"BucketName\"\n        req20.NeedDownloadUrl = True\n        req20.DownloadUrlNetworkType = \"NetworkType\"\n        req20.DownloadUrlExpire = 3600\n        resp = vod_service.get_file_infos(req20)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n    print('*' * 100)"
  },
  {
    "path": "volcengine/example/vod/media/GetInnerAuditURLsExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodGetInnerAuditURLsRequest\n\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodGetInnerAuditURLsRequest()\n        req.SpaceName = \"your SpaceName\"\n        req.Vid = \"your Vid\"\n        req.FileNames.append(\"your FileNames\")\n        \n        resp = vod_service.get_inner_audit_u_r_ls(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n    print('*' * 100)"
  },
  {
    "path": "volcengine/example/vod/media/GetSubtitleAuthToken.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodGetSubtitleInfoListRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req11 = VodGetSubtitleInfoListRequest()\n        req11.Vid = 'vid'\n\n        token = vod_service.get_subtitle_auth_token(req11, 60)\n    except Exception:\n        raise\n    else:\n        print(token)\n\n    print('*' * 100)"
  },
  {
    "path": "volcengine/example/vod/media/GetSubtitleToken.py",
    "content": ""
  },
  {
    "path": "volcengine/example/vod/media/ListBlockObjectTasks.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodListBlockObjectTasksRequest\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req20 = VodListBlockObjectTasksRequest()\n        req20.SpaceName = \"SpaceName\"\n        resp = vod_service.list_block_object_tasks(req20)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n    print('*' * 100)"
  },
  {
    "path": "volcengine/example/vod/media/ListFileMetaInfosByFileNames.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodListFileMetaInfosByFileNamesRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodListFileMetaInfosByFileNamesRequest()\n        req.SpaceName = 'spacename'\n        req.BucketName = 'bucketname'\n        req.FileNameEncodeds = 'a/b/c/d.jpg'\n        resp = vod_service.list_file_meta_infos_by_file_names(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n    print('*' * 100)\n"
  },
  {
    "path": "volcengine/example/vod/media/MediaExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodGetMediaInfosRequest, VodGetRecommendedPosterRequest, \\\n    VodUpdateMediaPublishStatusRequest, VodUpdateMediaInfoRequest, VodDeleteMediaRequest, VodDeleteTranscodesRequest, \\\n    VodGetMediaListRequest, VodCreateVideoClassificationRequest, VodUpdateVideoClassificationRequest, \\\n    VodDeleteVideoClassificationRequest, VodListVideoClassificationsRequest, VodListSnapshotsRequest, \\\n    VodUpdateMediaStorageClassRequest, VodExtractMediaMetaTaskRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        vids = 'vid1,vid2'\n        req = VodGetMediaInfosRequest()\n        req.Vids = vids\n        resp = vod_service.get_media_infos(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n    print('*' * 100)\n\n    try:\n        vids = 'vid1,vid2'\n        req2 = VodGetRecommendedPosterRequest()\n        req2.Vids = vids\n        resp2 = vod_service.get_recommended_poster(req2)\n    except Exception:\n        raise\n    else:\n        print(resp2)\n        if resp2.ResponseMetadata.Error.Code == '':\n            print(resp2.Result)\n        else:\n            print(resp2.ResponseMetadata.Error)\n\n    print('*' * 100)\n\n    try:\n        vid = 'vid'\n        status = 'Unpublished'\n        req3 = VodUpdateMediaPublishStatusRequest()\n        req3.Vid = vid\n        req3.Status = status\n        resp3 = vod_service.update_media_publish_status(req3)\n    except Exception:\n        raise\n    else:\n        print(resp3)\n        if resp3.ResponseMetadata.Error.Code == '':\n            print('update media publish status success')\n        else:\n            print(resp3.ResponseMetadata.Error)\n\n    print('*' * 100)\n\n    try:\n        req4 = VodUpdateMediaInfoRequest()\n        req4.Vid = 'vid'\n        req4.Title.value = 'title'\n        req4.Description.value = 'description'\n        req4.Tags.value = 'tag1,tag2'\n        req4.ClassificationId.value = 0\n        resp4 = vod_service.update_media_info(req4)\n    except Exception:\n        raise\n    else:\n        print(resp4)\n        if resp4.ResponseMetadata.Error.Code == '':\n            print('update media info success')\n        else:\n            print(resp4.ResponseMetadata.Error)\n\n    print('*' * 100)\n\n    try:\n        vids = 'vid1,vid2'\n        callBackArgs = 'CallBackArgs'\n        req5 = VodDeleteMediaRequest()\n        req5.Vids = vids\n        req5.CallbackArgs = callBackArgs\n        resp5 = vod_service.delete_media(req5)\n    except Exception:\n        raise\n    else:\n        print(resp5)\n        if resp5.ResponseMetadata.Error.Code == '':\n            print('delete media info success')\n        else:\n            print(resp5.ResponseMetadata.Error)\n\n    print('*' * 100)\n\n    try:\n        vid = 'vid'\n        fileIds = 'fileId1,fileId2'\n        callBackArgs = 'CallBackArgs'\n        req6 = VodDeleteTranscodesRequest()\n        req6.Vid = vid\n        req6.FileIds = fileIds\n        req6.CallbackArgs = callBackArgs\n        resp6 = vod_service.delete_transcodes(req6)\n    except Exception:\n        raise\n    else:\n        print(resp6)\n        if resp6.ResponseMetadata.Error.Code == '':\n            print('delete transcodes info success')\n        else:\n            print(resp6.ResponseMetadata.Error)\n\n    print('*' * 100)\n\n    try:\n        req7 = VodGetMediaListRequest()\n        req7.SpaceName = 'your space name'\n        req7.Vid = 'your vid'\n        req7.Status = 'Published'  #Published/Unpublished\n        req7.Order = 'Desc'        #Desc/Asc\n        req7.StartTime = '1999-01-01T00:00:00Z'\n        req7.EndTime = '2021-04-01T00:00:00Z'\n        req7.Offset = '0'\n        req7.PageSize = '10'\n        req7.ClassificationId = 1\n        resp7 = vod_service.get_media_list(req7)\n    except Exception:\n        raise\n    else:\n        print(resp7)\n        if resp7.ResponseMetadata.Error.Code == '':\n            print(resp7.Result)\n        else:\n            print(resp7.ResponseMetadata.Error)\n\n    print('*' * 100)\n\n    try:\n        req8 = VodCreateVideoClassificationRequest()\n        req8.SpaceName = 'your space'\n        req8.Level = 1\n        req8.ParentId = 0\n        req8.Classification = 'your classification'\n        resp8 = vod_service.create_video_classification(req8)\n    except Exception:\n        raise\n    else:\n        print(resp8)\n        if resp8.ResponseMetadata.Error.Code == '':\n            print(resp8.Result)\n        else:\n            print(resp8.ResponseMetadata.Error)\n\n    print('*' * 100)\n\n    try:\n        req9 = VodUpdateVideoClassificationRequest()\n        req9.SpaceName = 'your space'\n        req9.ClassificationId = 0\n        req9.Classification = 'your classification'\n        resp9 = vod_service.update_video_classification(req9)\n    except Exception:\n        raise\n    else:\n        print(resp9)\n        if resp9.ResponseMetadata.Error.Code == '':\n            print(resp9.Result)\n        else:\n            print(resp9.ResponseMetadata.Error)\n\n    print('*' * 100)\n\n    try:\n        req10 = VodDeleteVideoClassificationRequest()\n        req10.SpaceName = 'your space'\n        req10.ClassificationId = 0\n        resp10 = vod_service.delete_video_classification(req10)\n    except Exception:\n        raise\n    else:\n        print(resp10)\n        if resp10.ResponseMetadata.Error.Code == '':\n            print(resp10.Result)\n        else:\n            print(resp10.ResponseMetadata.Error)\n\n    print('*' * 100)\n\n    try:\n        req11 = VodListVideoClassificationsRequest()\n        req11.SpaceName = 'your space'\n        req11.ClassificationId = 0\n        resp11 = vod_service.list_video_classifications(req11)\n    except Exception:\n        raise\n    else:\n        print(resp11)\n        if resp11.ResponseMetadata.Error.Code == '':\n            print(resp11.Result)\n        else:\n            print(resp11.ResponseMetadata.Error)\n\n    print('*' * 100)\n\n    try:\n        req12 = VodListSnapshotsRequest()\n        req12.Vid = \"your vid\"\n        resp12 = vod_service.list_snapshots(req12)\n    except Exception:\n        raise\n    else:\n        print(resp12)\n        if resp12.ResponseMetadata.Error.Code == '':\n            print(resp12.Result)\n        else:\n            print(resp12.ResponseMetadata.Error)\n\n    try:\n        vids = \"vid1\"\n        fileIds = \"fileid1\"\n        req13 = VodUpdateMediaStorageClassRequest()\n        req13.Vids = vids\n        req13.FileIds = fileIds\n        req13.StorageClass = \"your storage class\"\n        req13.CallbackArgs = \"your callbackargs\"\n        resp13 = vod_service.update_media_storage_class(req13)\n    except Exception:\n        raise\n    else:\n        print(resp13)\n        if resp13.ResponseMetadata.Error.Code == '':\n            print(resp13.Result)\n        else:\n            print(resp13.ResponseMetadata.Error)\n\n    print('*' * 100)\n\n    try:\n        req14 = VodExtractMediaMetaTaskRequest()\n        req14.Vid = \"vid\"\n        resp14 = vod_service.extract_media_meta_task(req14)\n    except Exception:\n        raise\n    else:\n        print(resp14)\n        if resp14.ResponseMetadata.Error.Code == '':\n            print(resp14.Result)\n        else:\n            print(resp14.ResponseMetadata.Error)\n\n    print('*' * 100)\n"
  },
  {
    "path": "volcengine/example/vod/media/SubmitBlockObjectTasks.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodSubmitBlockObjectTasksRequest\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req20 = VodSubmitBlockObjectTasksRequest()\n        req20.SpaceName = \"SpaceName\"\n        resp = vod_service.submit_block_object_tasks(req20)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n    print('*' * 100)"
  },
  {
    "path": "volcengine/example/vod/media/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/vod/play/CreateHlsDecryptionKeyExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodCreateHlsDecryptionKeyRequest\n\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodCreateHlsDecryptionKeyRequest()\n        req.SpaceName = \"your SpaceName\"\n        \n        resp = vod_service.create_hls_decryption_key(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n    print('*' * 100)"
  },
  {
    "path": "volcengine/example/vod/play/GetAllPlayInfoExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodGetAllPlayInfoRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodGetAllPlayInfoRequest()\n        req.Vids = 'your Vids'\n        req.Formats = 'your Formats'\n        req.Codecs = 'your Codecs'\n        req.Definitions = 'your Definitions'\n        req.FileTypes = 'your FileTypes'\n        req.LogoTypes = 'your LogoTypes'\n        req.NeedEncryptStream = 'your NeedEncryptStream'\n        req.Ssl = 'your Ssl'\n        req.NeedThumbs = 'your NeedThumbs'\n        req.NeedBarrageMask = 'your NeedBarrageMask'\n        req.CdnType = 'your CdnType'\n        req.UnionInfo = 'your UnionInfo'\n        req.PlayScene = 'your PlayScene'\n        req.DrmExpireTimestamp = 'your DrmExpireTimestamp'\n        req.HDRType = 'your HDRType'\n        req.KeyFrameAlignmentVersion = 'your KeyFrameAlignmentVersion'\n        req.UserAction = 'your UserAction'\n        req.Quality = 'your Quality'\n        resp = vod_service.get_all_play_info(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n    print('*' * 100)\n"
  },
  {
    "path": "volcengine/example/vod/play/GetHlsDrmAuthTokenExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        expireSeconds = 60000\n        resp = vod_service.get_sha1_hls_drm_auth_token(expireSeconds)\n    except Exception:\n        raise\n    else:\n        print(resp)\n    print('*' * 100)\n"
  },
  {
    "path": "volcengine/example/vod/play/GetPlayAuthTokenExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodGetPlayInfoRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        vid = 'your vid'\n        req = VodGetPlayInfoRequest()\n        req.Vid = vid\n        expire = 60  # seconds\n        resp = vod_service.get_play_auth_token(req, expire)\n    except Exception:\n        raise\n    else:\n        print(resp)\n    print('*' * 100)\n"
  },
  {
    "path": "volcengine/example/vod/play/GetPlayInfoExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodGetPlayInfoRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        vid = 'your vid'\n        req = VodGetPlayInfoRequest()\n        req.Vid = vid\n        req.Ssl = '1'\n        req.NeedOriginal = '1'\n        req.UnionInfo = 'your unionInfo'\n        resp = vod_service.get_play_info(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result.PlayInfoList[0].MainPlayUrl)\n        else:\n            print(resp.ResponseMetadata.Error)\n    print('*' * 100)\n"
  },
  {
    "path": "volcengine/example/vod/play/GetPlayInfoWithLiveTimeShiftSceneExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodGetPlayInfoWithLiveTimeShiftSceneRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodGetPlayInfoWithLiveTimeShiftSceneRequest()\n\n        req.StoreUris = 'uri1,uri2,uri3'\n        req.SpaceName = 'your space name'\n        req.Ssl = '0 or 1'\n        req.ExpireTimestamp = 'unix timestamp'\n        req.NeedComposeBucketName = '0 or 1'\n        resp = vod_service.get_play_info_with_live_time_shift_scene(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result.PlayInfoList[0].MainPlayUrl)\n        else:\n            print(resp.ResponseMetadata.Error)\n    print('*' * 100)\n"
  },
  {
    "path": "volcengine/example/vod/play/GetPrivateDrmPlayAuthExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodGetPrivateDrmPlayAuthRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        vid = 'your vid'\n        req = VodGetPrivateDrmPlayAuthRequest()\n        req.Vid = vid\n        req.DrmType = 'your drm type'\n        req.PlayAuthIds = 'a,b,c (your PlayAuthIds)'\n        req.UnionInfo = 'your unionInfo'\n        resp = vod_service.get_private_drm_play_auth(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n    print('*' * 100)\n"
  },
  {
    "path": "volcengine/example/vod/play/GetPrivateDrmPlayAuthTokenExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodGetPrivateDrmPlayAuthRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        vid = 'your vid'\n        req = VodGetPrivateDrmPlayAuthRequest()\n        req.Vid = vid\n        req.DrmType = 'your drm type'\n        req.PlayAuthIds = 'a,b,c (your PlayAuthIds)'\n        req.UnionInfo = 'your unionInfo'\n        expire = 60  # seconds\n        resp = vod_service.get_private_drm_play_auth_token(req, expire)\n    except Exception:\n        raise\n    else:\n        print(resp)\n    print('*' * 100)\n"
  },
  {
    "path": "volcengine/example/vod/play/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/vod/space/CreateSpaceExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodCreateSpaceRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodCreateSpaceRequest()\n        req.SpaceName = 'your space name'\n        req.ProjectName = 'your space name'\n        resp = vod_service.create_space(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/vod/space/DescribeUploadSpaceConfigExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodDescribeUploadSpaceConfigRequest\n\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodDescribeUploadSpaceConfigRequest()\n        req.SpaceName = \"your SpaceName\"\n        \n        resp = vod_service.describe_upload_space_config(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n    print('*' * 100)"
  },
  {
    "path": "volcengine/example/vod/space/DescribeVodSpaceStorageDataExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodDescribeVodSpaceStorageDataRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodDescribeVodSpaceStorageDataRequest()\n        req.SpaceList = \"your SpaceList\"\n        req.StartTime = \"your StartTime\"\n        req.EndTime = \"your EndTime\"\n        req.Aggregation = 0\n        req.Type = \"\"\n        req.RegionList = \"your RegionList\"\n        resp = vod_service.describe_vod_space_storage_data(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)"
  },
  {
    "path": "volcengine/example/vod/space/ListSpaceExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodListSpaceRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodListSpaceRequest()\n        resp = vod_service.list_space(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/vod/space/UpdateSpaceExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodUpdateSpaceRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodUpdateSpaceRequest()\n        req.SpaceName = 'your space name'\n        req.Description = 'your desc'\n        resp = vod_service.update_space(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n            "
  },
  {
    "path": "volcengine/example/vod/space/UpdateSpaceUploadConfigExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodUpdateSpaceUploadConfigRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodUpdateSpaceUploadConfigRequest()\n        req.SpaceName = 'your space name'\n        req.ConfigKey = 'your config key'\n        req.ConfigValue = 'your config value'\n        resp = vod_service.update_space_upload_config(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/vod/space/UpdateUploadSpaceConfigExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodUpdateUploadSpaceConfigRequest\nfrom volcengine.vod.models.business.vod_space_pb2 import CustomPosterConfig\nfrom volcengine.vod.models.business.vod_space_pb2 import TranscodeConfig\n\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodUpdateUploadSpaceConfigRequest()\n        req.SpaceName = \"your SpaceName\"\n        req.AutoPoster = \"your AutoPoster\"\n        req.CustomPosterConfig.CopyFrom(CustomPosterConfig()) \n        req.GetPosterMode = \"your GetPosterMode\"\n        req.AutoPosterCandidate = \"your AutoPosterCandidate\"\n        req.AutoTranscode = \"your AutoTranscode\"\n        req.TranscodeConfig.CopyFrom(TranscodeConfig()) \n        req.AutoSetVideoStatus = \"your AutoSetVideoStatus\"\n        req.UploadOverwrite = \"your UploadOverwrite\"\n        req.CallbackReturnPlayUrl = \"your CallbackReturnPlayUrl\"\n        req.CallbackReturnRunId = \"your CallbackReturnRunId\"\n        req.GetMetaMode = \"your GetMetaMode\"\n        req.AutoGetArchiveVideoMeta = \"your AutoGetArchiveVideoMeta\"\n        req.AutoGetIAVideoMeta = \"your AutoGetIAVideoMeta\"\n        req.MetaGetMd5 = \"your MetaGetMd5\"\n        \n        resp = vod_service.update_upload_space_config(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n    print('*' * 100)"
  },
  {
    "path": "volcengine/example/vod/space/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/vod/subtitle/SubtitleExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import *\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req8 = VodGetSubtitleInfoListRequest()\n        req8.Vid = 'vid'\n        req8.FileIds = 'fileIds'\n        req8.Formats = 'format'\n        req8.Languages = 'language'\n        req8.LanguageIds = 'languageIds'\n        req8.SubtitleIds = 'subtitleIds'\n        req8.Status = 'Published' #Published/Unpublished\n        req8.Title = 'title'\n        req8.Tag = 'tag'\n        req8.Ssl = 'ssl'\n        req8.Offset = 'offset'\n        req8.PageSize = 'pageSize'\n\n        resp8 = vod_service.get_subtitle_info_list(req8)\n    except Exception:\n        raise\n    else:\n        print(resp8)\n        if resp8.ResponseMetadata.Error.Code == '':\n            print('get subtitle info list success')\n        else:\n            print(resp8.ResponseMetadata.Error)\n\n    print('*' * 100)\n\n    try:\n        req9 = VodUpdateSubtitleStatusRequest()\n        req9.Vid = 'vid'\n        req9.FileIds = 'fileId1,fileId2'\n        req9.Formats = 'format1,format2'\n        req9.Languages = 'language1,language2'\n        req9.Status = 'Published'          #Published/Unpublished\n\n        resp9 = vod_service.update_subtitle_status(req9)\n    except Exception:\n        raise\n    else:\n        print(resp9)\n        if resp9.ResponseMetadata.Error.Code == '':\n            print('update subtitle status success')\n        else:\n            print(resp9.ResponseMetadata.Error)\n\n    print('*' * 100)\n\n    try:\n        req10 = VodUpdateSubtitleInfoRequest()\n        req10.Vid = 'vid'\n        req10.FileId = 'fileIds'\n        req10.Format = 'format'\n        req10.Language = 'language'\n        req10.Title.value = 'title'\n        req10.Tag.value = 'tag'\n\n        resp10 = vod_service.update_subtitle_info(req10)\n    except Exception:\n        raise\n    else:\n        print(resp10)\n        if resp10.ResponseMetadata.Error.Code == '':\n            print('update subtitle info success')\n        else:\n            print(resp10.ResponseMetadata.Error)\n\n    print('*' * 100)\n\n    try:\n        req11 = VodGetSubtitleInfoListRequest()\n        req11.Vid = 'vid'\n\n        token = vod_service.get_subtitle_auth_token(req11, 60)\n    except Exception:\n        raise\n    else:\n        print(token)\n\n    print('*' * 100)"
  },
  {
    "path": "volcengine/example/vod/subtitle/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/vod/upload/ApplyUploadInfoExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodApplyUploadInfoRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    space_name = 'your space'\n\n    try:\n        req = VodApplyUploadInfoRequest()\n        req.SpaceName = space_name\n\n        resp = vod_service.apply_upload_info(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result.Data)\n            print(resp.Result.Data.UploadAddress.StoreInfos[0].StoreUri)\n            print(resp.Result.Data.UploadAddress.StoreInfos[0].Auth)\n            print(resp.Result.Data.UploadAddress.UploadHosts[0])\n            print(resp.Result.Data.UploadAddress.SessionKey)\n        else:\n            print(resp.ResponseMetadata.Error)\n            print(resp.ResponseMetadata.RequestId)\n\n"
  },
  {
    "path": "volcengine/example/vod/upload/CommitUploadInfoExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.util.Functions import Function\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodCommitUploadInfoRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    space_name = 'your space'\n    session = ''\n    try:\n        req = VodCommitUploadInfoRequest()\n        req.SpaceName = space_name\n        req.SessionKey = session\n        get_meta_function = Function.get_meta_func()\n        snapshot_function = Function.get_snapshot_func(2.3)\n        req.Functions = json.dumps([get_meta_function, snapshot_function])\n        resp = vod_service.commit_upload_info(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result.Data)\n            print(resp.Result.Data.Vid)\n            print(resp.Result.Data.PosterUri)\n            print(resp.Result.Data.SourceInfo.Height)\n            print(resp.Result.Data.SourceInfo.Width)\n        else:\n            print(resp.ResponseMetadata.Error)\n            print(resp.ResponseMetadata.RequestId)\n"
  },
  {
    "path": "volcengine/example/vod/upload/QueryUploadTaskInfo.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodQueryUploadTaskInfoRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    jobId = 'url jobId'\n\n    jobIds = [jobId]\n    comma = ','\n    s = comma.join(jobIds)\n\n    req = VodQueryUploadTaskInfoRequest()\n    req.JobIds = s\n    try:\n        resp = vod_service.query_upload_task_info(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result.Data)\n            print(resp.Result.Data.MediaInfoList[0].State)\n        else:\n            print(resp.ResponseMetadata.Error)\n            print(resp.ResponseMetadata.RequestId)\n"
  },
  {
    "path": "volcengine/example/vod/upload/UploadMaterial.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.util.Functions import Function\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.const.Const import *\nfrom volcengine.vod.models.request.request_vod_pb2 import VodUploadMaterialRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    space_name = 'your space name'\n    file_path = 'your file path'\n\n    get_meta_function = Function.get_meta_func()\n    snapshot_function = Function.get_snapshot_func(2.3)\n    add_option_function = Function.get_add_material_option_info_func(title='素材测试视频', tags='test',\n                                                                     description='素材测试，视频文件',\n                                                                     category=CATEGORY_VIDEO, record_type=2,\n                                                                     format_input='MP4')\n\n    try:\n        req = VodUploadMaterialRequest()\n        req.FileType = FILE_TYPE_MEDIA\n        req.SpaceName = space_name\n        req.FilePath = file_path\n        req.Functions = json.dumps([get_meta_function, snapshot_function, add_option_function])\n        req.CallbackArgs = ''\n        req.FileExtension = '.mp4'\n        req.UploadHostPrefer = ''\n\n        resp = vod_service.upload_material(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result.Data)\n            print(resp.Result.Data.Mid)\n            print(resp.Result.Data.PosterUri)\n            print(resp.Result.Data.SourceInfo.FileName)\n            print(resp.Result.Data.SourceInfo.Height)\n            print(resp.Result.Data.SourceInfo.Width)\n        else:\n            print(resp.ResponseMetadata.Error)\n            print(resp.ResponseMetadata.RequestId)\n\nif __name__ == '__main__':\n    vod_service = VodService()\n\n    # call below method if you dont set ak and sk in $HOME/.vcloud/config\n    vod_service.set_ak('your ak')\n    vod_service.set_sk('your sk')\n\n    space_name = 'your space name'\n    file_path = 'your file path'\n\n    get_meta_function = Function.get_meta_func()\n    snapshot_function = Function.get_snapshot_func(0)\n    add_option_function = Function.get_add_material_option_info_func(title='素材测试图片', tags='test',\n                                                                     description='素材测试，图片文件',\n                                                                     category=CATEGORY_IMAGE, record_type=2,\n                                                                     format_input='jpg')\n\n    try:\n        req = VodUploadMaterialRequest()\n        req.FileType = FILE_TYPE_IMAGE\n        req.SpaceName = space_name\n        req.FilePath = file_path\n        req.Functions = json.dumps([get_meta_function, snapshot_function, add_option_function])\n        req.CallbackArgs = ''\n        req.FileName = ''\n        req.FileExtension = '.jpg'\n        req.UploadHostPrefer = ''\n\n        resp = vod_service.upload_material(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result.Data)\n            print(resp.Result.Data.Mid)\n            print(resp.Result.Data.PosterUri)\n            print(resp.Result.Data.SourceInfo.FileName)\n            print(resp.Result.Data.SourceInfo.Height)\n            print(resp.Result.Data.SourceInfo.Width)\n        else:\n            print(resp.ResponseMetadata.Error)\n            print(resp.ResponseMetadata.RequestId)\n\nif __name__ == '__main__':\n    vod_service = VodService()\n\n    # call below method if you dont set ak and sk in $HOME/.vcloud/config\n    vod_service.set_ak('your ak')\n    vod_service.set_sk('your sk')\n\n    space_name = 'your space name'\n    file_path = 'your file path'\n\n    get_meta_function = Function.get_meta_func()\n    add_option_function = Function.get_add_material_option_info_func(title='素材测试字幕', tags='test',\n                                                                     description='素材测试，字幕文件',\n                                                                     category=CATEGORY_FONT, record_type=2,\n                                                                     format_input='vtt')\n\n    try:\n        req = VodUploadMaterialRequest()\n        req.FileType = FILE_TYPE_OBJECT\n        req.SpaceName = space_name\n        req.FilePath = file_path\n        req.Functions = json.dumps([get_meta_function, add_option_function])\n        req.CallbackArgs = ''\n        req.FileName = ''\n        req.FileExtension = '.vtt'\n        req.UploadHostPrefer = ''\n\n        resp = vod_service.upload_material(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result.Data)\n            print(resp.Result.Data.Mid)\n        else:\n            print(resp.ResponseMetadata.Error)\n            print(resp.ResponseMetadata.RequestId)\n"
  },
  {
    "path": "volcengine/example/vod/upload/UploadMedia.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.util.Functions import Function\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodUploadMediaRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    space_name = 'your space name'\n    file_path = 'your file path'\n\n    get_meta_function = Function.get_meta_func()\n    snapshot_function = Function.get_snapshot_func(2.3)\n    get_start_workflow_func = Function.get_start_workflow_template_func(\n        [{\"TemplateIds\": [\"imp template id\"], \"TemplateType\": \"imp\"},\n         {\"TemplateIds\": [\"transcode template id\"], \"TemplateType\": \"transcode\"}])\n    apply_function = Function.get_add_option_info_func(\"title1\", \"tag1\", \"desc1\", 0, False)\n\n    try:\n        req = VodUploadMediaRequest()\n        req.SpaceName = space_name\n        req.FilePath = file_path\n        req.Functions = json.dumps([get_meta_function, snapshot_function, get_start_workflow_func])\n        req.CallbackArgs = ''\n        req.FileName = 'hello/vod.mp4'\n        req.FileExtension = '.mp4'\n        req.StorageClass = 0\n        req.UploadHostPrefer = ''\n        resp = vod_service.upload_media(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result.Data)\n            print(resp.Result.Data.Vid)\n            print(resp.Result.Data.PosterUri)\n            print(resp.Result.Data.SourceInfo.FileName)\n            print(resp.Result.Data.SourceInfo.Height)\n            print(resp.Result.Data.SourceInfo.Width)\n        else:\n            print(resp.ResponseMetadata.Error)\n            print(resp.ResponseMetadata.RequestId)\n"
  },
  {
    "path": "volcengine/example/vod/upload/UploadMediaHLS.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.util.Functions import Function\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodUploadMediaRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    space_name = 'your space name'\n    file_path = 'your m3u8 file path'  # e.g., /path/to/video.m3u8\n\n    get_meta_function = Function.get_meta_func()\n    snapshot_function = Function.get_snapshot_func(2.3)\n    get_start_workflow_func = Function.get_start_workflow_template_func(\n        [{\"TemplateIds\": [\"imp template id\"], \"TemplateType\": \"imp\"},\n         {\"TemplateIds\": [\"transcode template id\"], \"TemplateType\": \"transcode\"}])\n    apply_function = Function.get_add_option_info_func(\"title1\", \"tag1\", \"desc1\", 0, False)\n\n    try:\n        req = VodUploadMediaRequest()\n        req.SpaceName = space_name\n        req.FilePath = file_path\n        req.Functions = json.dumps([get_meta_function, snapshot_function, get_start_workflow_func])\n        req.CallbackArgs = ''\n        # The path in the storage space, should be set to prevent overwriting existing hls ts files\n        req.FileName = 'hello/video.m3u8'\n        req.FileExtension = '.m3u8'\n        req.StorageClass = 0\n        req.UploadHostPrefer = ''\n        # Set SupportParseManifest to True to enable HLS manifest parsing and segment uploading\n        req.SupportParseManifest = True\n        resp = vod_service.upload_media(req)\n    except Exception as e:\n        print(f\"Error: {e}\")\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result.Data)\n            print(resp.Result.Data.Vid)\n            print(resp.Result.Data.PosterUri)\n            print(resp.Result.Data.SourceInfo.FileName)\n            print(resp.Result.Data.SourceInfo.Height)\n            print(resp.Result.Data.SourceInfo.Width)\n        else:\n            print(resp.ResponseMetadata.Error)\n            print(resp.ResponseMetadata.RequestId)"
  },
  {
    "path": "volcengine/example/vod/upload/UploadSts2.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    sts2 = vod_service.get_upload_sts2_with_expired_time(60 * 60)\n    print(sts2)\n\n    sts2 = vod_service.get_upload_sts2()\n    print(sts2)\n"
  },
  {
    "path": "volcengine/example/vod/upload/UploadUrl.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodUrlUploadRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    space_name = 'your space'\n    url = ''\n\n    try:\n        req = VodUrlUploadRequest()\n        req.SpaceName = space_name\n        url_set = req.URLSets.add()\n        url_set.SourceUrl = url\n        url_set.FileExtension = '.mp4'\n        impTemplate = url_set.Templates.add()\n        impTemplate.TemplateIds.extend(['imp template id'])\n        impTemplate.TemplateType = 'imp'\n        transcodeTemplate = url_set.Templates.add()\n        transcodeTemplate.TemplateIds.extend(['transcode template id'])\n        transcodeTemplate.TemplateType = 'transcode'\n        url_set.CallbackArgs = 'my python callback args'\n        customUrlHeaders = {'your header key': 'your header value'}\n        url_set.CustomURLHeaders.update(**customUrlHeaders)\n        resp = vod_service.upload_media_by_url(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result.Data)\n            print(resp.Result.Data[0].JobId)\n            print(resp.Result.Data[0].SourceUrl)\n        else:\n            print(resp.ResponseMetadata.Error)\n            print(resp.ResponseMetadata.RequestId)\n"
  },
  {
    "path": "volcengine/example/vod/upload/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/vod/vedit/AsyncVCreativeTaskExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodAsyncVCreativeTaskRequest\nimport json\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n    try:\n        paramObj = {\n            'input': 'vid://{your vid}',\n            'style': '漫画风',\n            'resolution': '720p'\n        }\n        paramStr = json.dumps(paramObj)\n        req = VodAsyncVCreativeTaskRequest()\n        req.Uploader = \"your Uploader\"\n        req.ParamStr = paramStr\n        req.Scene = \"videostyletrans\"\n        req.CallbackArgs = \"your CallbackArgs\"\n        \n        resp = vod_service.async_v_creative_task(req)\n    except Exception:\n        raise\n    else:\n        l = json.loads(resp)\n        print(json.dumps(l, ensure_ascii=False, indent=4))\n        print(\"****\")"
  },
  {
    "path": "volcengine/example/vod/vedit/CancelDirectEditTask.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodCancelDirectEditTaskRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    req = VodCancelDirectEditTaskRequest()\n    req.ReqId = 'your ReqId'\n    resp = vod_service.cancel_direct_edit_task(req)\n    l = json.loads(resp)\n    print(json.dumps(l, ensure_ascii=False, indent=4))\n    print(\"****\")\n"
  },
  {
    "path": "volcengine/example/vod/vedit/GetDirectEditProgress.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodGetDirectEditProgressRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    req = VodGetDirectEditProgressRequest()\n    req.ReqId = 'your ReqId'\n    resp = vod_service.get_direct_edit_progress(req)\n    l = json.loads(resp)\n    print(json.dumps(l, ensure_ascii=False, indent=4))\n    print(\"****\")\n"
  },
  {
    "path": "volcengine/example/vod/vedit/GetDirectEditResult.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodGetDirectEditResultRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    req = VodGetDirectEditResultRequest()\n    req.ReqIds.extend(['your ReqId'])\n    resp = vod_service.get_direct_edit_result(req)\n    l = json.loads(resp)\n    print(json.dumps(l, ensure_ascii=False, indent=4))\n    print(\"****\")\n"
  },
  {
    "path": "volcengine/example/vod/vedit/GetVCreativeTaskResultExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodGetVCreativeTaskResultRequest\nimport json\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n    try:\n        req = VodGetVCreativeTaskResultRequest()\n        req.VCreativeId = \"your VCreativeId\"\n        \n        resp = vod_service.get_v_creative_task_result(req)\n    except Exception:\n        raise\n    else:\n        l = json.loads(resp)\n        print(json.dumps(l, ensure_ascii=False, indent=4))\n        print(\"****\")"
  },
  {
    "path": "volcengine/example/vod/vedit/SubmitDirectEditTaskAsync.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodSubmitDirectEditTaskAsyncRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    req = VodSubmitDirectEditTaskAsyncRequest()\n    req.Uploader = 'your uploader'\n    req.Application = 'VideoTrackToB'\n    req.Priority = 0\n    req.CallbackUri = 'your callback uri'\n    req.CallbackArgs = 'your callback args'\n    editParam = {\n        \"Canvas\": {\n            \"Height\": 2160,\n            \"Width\": 3840\n        },\n        \"Output\": {\n            \"Alpha\": False,\n            \"Codec\": {\n                \"AudioBitrate\": 128,\n                \"AudioCodec\": \"aac\",\n                \"Crf\": 23,\n                \"Preset\": \"slow\",\n                \"VideoCodec\": \"h264\"\n            },\n            \"DisableAudio\": False,\n            \"DisableVideo\": False,\n            \"Fps\": 30\n        },\n        \"Track\": [\n            [\n                {\n                    \"ID\": \"video1\",\n                    \"Source\": \"your source\",\n                    \"TargetTime\": [\n                        0,\n                        10000\n                    ],\n                    \"Type\": \"video\"\n                }\n            ]\n        ],\n        \"Upload\": {\n            \"SpaceName\": \"your uploader\",\n            \"VideoName\": \"your video name\"\n        },\n        \"Uploader\": \"your uploader\"\n    }\n    req.EditParam = json.dumps(editParam).encode('utf-8')\n    resp = vod_service.submit_direct_edit_task_async(req)\n    l = json.loads(resp)\n    print(json.dumps(l, ensure_ascii=False, indent=4))\n    print(\"****\")\n"
  },
  {
    "path": "volcengine/example/vod/vedit/SubmitDirectEditTaskSync.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nimport json\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodSubmitDirectEditTaskSyncRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    req = VodSubmitDirectEditTaskSyncRequest()\n    req.Uploader = 'your uploader'\n    req.Application = 'SimpleCut'\n    editParam = {\n            \"Source\": \"your source\",\n            \"Upload\": {\n                \"SpaceName\": \"your uploader\",\n                \"StorageBind\": False\n            },\n            \"CutList\": [\n                {\n                    \"StartTime\": 9,\n                    \"EndTime\": 78\n                },\n                {\n                    \"StartTime\":   157,\n                    \"EndTime\": 370\n                }\n            ]\n        }\n    req.EditParam = json.dumps(editParam).encode('utf-8')\n    resp = vod_service.submit_direct_edit_task_sync(req)\n    l = json.loads(resp)\n    print(json.dumps(l, ensure_ascii=False, indent=4))\n    print(\"****\")\n"
  },
  {
    "path": "volcengine/example/vod/vedit/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/example/vod/workflow/GetWorkflowExecutionExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodGetWorkflowExecutionStatusRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodGetWorkflowExecutionStatusRequest()\n        req.RunId = 'your RunId'\n        resp = vod_service.get_workflow_execution(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/vod/workflow/GetWorkflowExecutionResultExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodGetWorkflowResultRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodGetWorkflowResultRequest()\n        req.RunId = 'your RunId'\n        resp = vod_service.get_workflow_execution_result(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n"
  },
  {
    "path": "volcengine/example/vod/workflow/RetrieveTranscodeResultExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.request.request_vod_pb2 import VodRetrieveTranscodeResultRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodRetrieveTranscodeResultRequest()\n        req.Vid = 'your vid'\n        req.ResultType = 'your resultType'\n        resp = vod_service.retrieve_transcode_result(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n\n"
  },
  {
    "path": "volcengine/example/vod/workflow/WorkflowExample.py",
    "content": "# coding:utf-8\nfrom __future__ import print_function\n\nfrom volcengine.vod.VodService import VodService\nfrom volcengine.vod.models.business.vod_workflow_pb2 import WorkflowParams\nfrom volcengine.vod.models.request.request_vod_pb2 import VodStartWorkflowRequest\n\nif __name__ == '__main__':\n    # Create a VOD instance in the specified region.\n    # vod_service = VodService('cn-north-1')\n    vod_service = VodService()\n\n    # Configure your Access Key ID (AK) and Secret Access Key (SK) in the environment variables or in the local ~/.volc/config file. For detailed instructions, see https://www.volcengine.com/docs/4/65646.\n    # The SDK will automatically fetch the AK and SK from the environment variables or the ~/.volc/config file as needed.\n    # During testing, you may use the following code snippet. However, do not store the AK and SK directly in your project code to prevent potential leakage and safeguard the security of all resources associated with your account.\n    # vod_service.set_ak('your ak')\n    # vod_service.set_sk('your sk')\n\n    try:\n        req = VodStartWorkflowRequest()\n        req.Vid = 'your vid'\n        req.TemplateId = 'your template id'\n        req.Input.MergeFrom(WorkflowParams())\n        req.Priority = 0\n        req.CallbackArgs = 'your callback args'\n        req.ClientToken = 'your ClientToken'\n        resp = vod_service.start_workflow(req)\n    except Exception:\n        raise\n    else:\n        print(resp)\n        if resp.ResponseMetadata.Error.Code == '':\n            print(resp.Result)\n        else:\n            print(resp.ResponseMetadata.Error)\n\n"
  },
  {
    "path": "volcengine/example/vod/workflow/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/game_protect/GameProtectService.py",
    "content": "import json\nimport threading\n\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\nimport redo\nfrom requests import exceptions\nclass GameProtectService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(GameProtectService, \"_instance\"):\n            with GameProtectService._instance_lock:\n                if not hasattr(GameProtectService, \"_instance\"):\n                    GameProtectService._instance = object.__new__(cls)\n        return GameProtectService._instance\n\n    def __init__(self):\n        self.service_info = GameProtectService.get_service_info()\n        self.api_info = GameProtectService.get_api_info()\n        super(GameProtectService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info():\n        service_info = ServiceInfo(\"open.volcengineapi.com\", {'Accept': 'application/json'},\n                                   Credentials('', '', 'game_protect', 'cn-north-1'), 5, 5)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\"RiskResult\": ApiInfo(\"GET\", \"/\", {\"Action\": \"RiskResult\", \"Version\": \"2021-04-25\"}, {}, {})}\n        return api_info\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def risk_result(self, params, body):\n        params['Service'] = 'anti_plugin'\n        res = self.get(\"RiskResult\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n\n\n"
  },
  {
    "path": "volcengine/game_protect/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/iam/IamService.py",
    "content": "# coding:utf-8\nimport json\nimport threading\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\n\n\nclass IamService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(IamService, \"_instance\"):\n            with IamService._instance_lock:\n                if not hasattr(IamService, \"_instance\"):\n                    IamService._instance = object.__new__(cls)\n        return IamService._instance\n\n    def __init__(self):\n        self.service_info = IamService.get_service_info()\n        self.api_info = IamService.get_api_info()\n        super(IamService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info():\n        service_info = ServiceInfo(\"iam.volcengineapi.com\", {'Accept': 'application/json'},\n                                   Credentials('', '', 'iam', 'cn-north-1'), 5, 5)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\n            # Access Key\n            \"CreateAccessKey\": ApiInfo(\"GET\", \"/\", {\"Action\": \"CreateAccessKey\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"DeleteAccessKey\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DeleteAccessKey\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"ListAccessKeys\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListAccessKeys\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"UpdateAccessKey\": ApiInfo(\"GET\", \"/\", {\"Action\": \"UpdateAccessKey\", \"Version\": \"2018-01-01\"}, {}, {}),\n            # User\n            \"CreateUser\": ApiInfo(\"GET\", \"/\", {\"Action\": \"CreateUser\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"GetUser\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetUser\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"UpdateUser\": ApiInfo(\"GET\", \"/\", {\"Action\": \"UpdateUser\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"ListUsers\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListUsers\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"DeleteUser\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DeleteUser\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"CreateLoginProfile\": ApiInfo(\"GET\", \"/\", {\"Action\": \"CreateLoginProfile\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"GetLoginProfile\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetLoginProfile\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"UpdateLoginProfile\": ApiInfo(\"GET\", \"/\", {\"Action\": \"UpdateLoginProfile\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"DeleteLoginProfile\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DeleteLoginProfile\", \"Version\": \"2018-01-01\"}, {}, {}),\n            # Role\n            \"CreateRole\": ApiInfo(\"GET\", \"/\", {\"Action\": \"CreateRole\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"GetRole\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetRole\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"UpdateRole\": ApiInfo(\"GET\", \"/\", {\"Action\": \"UpdateRole\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"ListRoles\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListRoles\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"DeleteRole\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DeleteRole\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"CreateServiceLinkedRole\": ApiInfo(\"GET\", \"/\", {\"Action\": \"CreateServiceLinkedRole\", \"Version\": \"2018-01-01\"}, {}, {}),\n            # Identity Provider\n            \"CreateSAMLProvider\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateSAMLProvider\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"GetSAMLProvider\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetSAMLProvider\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"UpdateSAMLProvider\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateSAMLProvider\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"ListSAMLProviders\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListSAMLProviders\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"DeleteSAMLProvider\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DeleteSAMLProvider\", \"Version\": \"2018-01-01\"}, {}, {}),\n            # Policy\n            \"CreatePolicy\": ApiInfo(\"GET\", \"/\", {\"Action\": \"CreatePolicy\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"GetPolicy\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetPolicy\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"ListPolicies\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListPolicies\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"UpdatePolicy\": ApiInfo(\"GET\", \"/\", {\"Action\": \"UpdatePolicy\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"DeletePolicy\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DeletePolicy\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"AttachUserPolicy\": ApiInfo(\"GET\", \"/\", {\"Action\": \"AttachUserPolicy\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"DetachUserPolicy\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DetachUserPolicy\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"ListAttachedUserPolicies\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListAttachedUserPolicies\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"AttachRolePolicy\": ApiInfo(\"GET\", \"/\", {\"Action\": \"AttachRolePolicy\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"DetachRolePolicy\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DetachRolePolicy\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"ListAttachedRolePolicies\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListAttachedRolePolicies\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"ListEntitiesForPolicy\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListEntitiesForPolicy\", \"Version\": \"2018-01-01\"}, {}, {}),\n        }\n        return api_info\n\n    # Access Key\n\n    def create_access_key(self, params):\n        res = self.get(\"CreateAccessKey\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_access_key(self, params):\n        res = self.get(\"DeleteAccessKey\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def list_access_keys(self, params):\n        res = self.get(\"ListAccessKeys\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def update_access_key(self, params):\n        res = self.get(\"UpdateAccessKey\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # User\n\n    def create_user(self, params):\n        res = self.get(\"CreateUser\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def get_user(self, params):\n        res = self.get(\"GetUser\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def update_user(self, params):\n        res = self.get(\"UpdateUser\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def list_users(self, params):\n        res = self.get(\"ListUsers\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n    \n    def delete_user(self, params):\n        res = self.get(\"DeleteUser\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def create_login_profile(self, params):\n        res = self.get(\"CreateLoginProfile\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def get_login_profile(self, params):\n        res = self.get(\"GetLoginProfile\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def update_login_profile(self, params):\n        res = self.get(\"UpdateLoginProfile\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_login_profile(self, params):\n        res = self.get(\"DeleteLoginProfile\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # Role\n\n    def create_role(self, params):\n        res = self.get(\"CreateRole\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def get_role(self, params):\n        res = self.get(\"GetRole\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def update_role(self, params):\n        res = self.get(\"UpdateRole\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def list_roles(self, params):\n        res = self.get(\"ListRoles\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_role(self, params):\n        res = self.get(\"DeleteRole\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n    \n    def create_service_linked_role(self, params):\n        res = self.get(\"CreateServiceLinkedRole\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # Identity Provider\n\n    def create_saml_provider(self, params):\n        res = self.post(\"CreateSAMLProvider\", {}, params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def get_saml_provider(self, params):\n        res = self.get(\"GetSAMLProvider\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def update_saml_provider(self, params):\n        res = self.post(\"UpdateSAMLProvider\", {}, params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def list_saml_providers(self, params):\n        res = self.get(\"ListSAMLProviders\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_saml_provider(self, params):\n        res = self.get(\"DeleteSAMLProvider\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # Policy\n\n    def create_policy(self, params):\n        res = self.get(\"CreatePolicy\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def get_policy(self, params):\n        res = self.get(\"GetPolicy\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def list_policies(self, params):\n        res = self.get(\"ListPolicies\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def update_policy(self, params):\n        res = self.get(\"UpdatePolicy\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_policy(self, params):\n        res = self.get(\"DeletePolicy\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def attach_user_policy(self, params):\n        res = self.get(\"AttachUserPolicy\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def detach_user_policy(self, params):\n        res = self.get(\"DetachUserPolicy\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def list_attached_user_policies(self, params):\n        res = self.get(\"ListAttachedUserPolicies\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def attach_role_policy(self, params):\n        res = self.get(\"AttachRolePolicy\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def detach_role_policy(self, params):\n        res = self.get(\"DetachRolePolicy\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def list_attached_role_policies(self, params):\n        res = self.get(\"ListAttachedRolePolicies\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def list_entities_for_policy(self, params):\n        res = self.get(\"ListEntitiesForPolicy\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n"
  },
  {
    "path": "volcengine/iam/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/image_registry/ImageRegistryService.py",
    "content": "import json\nimport threading\nimport redo\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom requests import exceptions\n\n\nclass ImageRegistryService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(ImageRegistryService, \"_instance\"):\n            with ImageRegistryService._instance_lock:\n                if not hasattr(ImageRegistryService, \"_instance\"):\n                    ImageRegistryService._instance = object.__new__(cls)\n        return ImageRegistryService._instance\n\n    def __init__(self):\n        self.service_info = ImageRegistryService.get_service_info()\n        self.api_info = ImageRegistryService.get_api_info()\n        super(ImageRegistryService, self).__init__(\n            self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info():\n        service_info = ServiceInfo(\"open.volcengineapi.com\", {'Accept': 'application/json'},\n                                   Credentials('', '', 'cr', 'cn-north-1'), 5, 5)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\n            \"DeleteNamespaceBasic\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"DeleteNamespaceBasic\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"CreateNamespaceBasic\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"CreateNamespaceBasic\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"ValidateNamespaceBasic\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"ValidateNamespaceBasic\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"GetNamespaceBasic\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"GetNamespaceBasic\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"ListNamespacesBasic\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"ListNamespacesBasic\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"ValidateRepositoryBasic\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"ValidateRepositoryBasic\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"DeleteRepositoryBasic\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"DeleteRepositoryBasic\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"CreateRepositoryBasic\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"CreateRepositoryBasic\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"UpdateRepositoryBasic\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"UpdateRepositoryBasic\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"GetRepositoryBasic\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"GetRepositoryBasic\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"ListRepositoriesBasic\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"ListRepositoriesBasic\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"DeleteTagBasic\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"DeleteTagBasic\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"ListTagsBasic\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"ListTagsBasic\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"GetTagBasic\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"GetTagBasic\", \"Version\": \"2021-03-03\"}, {}, {}),\n            \"GetTagAdditionBasic\": ApiInfo(\n                \"POST\", \"/\", {\"Action\": \"GetTagAdditionBasic\", \"Version\": \"2021-03-03\"}, {}, {})}\n\n        return api_info\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def delete_namespace_basic(self, params, body):\n        res = self.json(\"DeleteNamespaceBasic\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def create_namespace_basic(self, params, body):\n        res = self.json(\"CreateNamespaceBasic\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def validate_namespace_basic(self, params, body):\n        res = self.json(\"ValidateNamespaceBasic\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def get_namespace_basic(self, params, body):\n        res = self.json(\"GetNamespaceBasic\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def list_namespaces_basic(self, params, body):\n        res = self.json(\"ListNamespacesBasic\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def validate_repository_basic(self, params, body):\n        res = self.json(\"ValidateRepositoryBasic\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def delete_repository_basic(self, params, body):\n        res = self.json(\"DeleteRepositoryBasic\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def create_repository_basic(self, params, body):\n        res = self.json(\"CreateRepositoryBasic\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def update_repository_basic(self, params, body):\n        res = self.json(\"UpdateRepositoryBasic\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def get_repository_basic(self, params, body):\n        res = self.json(\"GetRepositoryBasic\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def list_repositories_basic(self, params, body):\n        res = self.json(\"ListRepositoriesBasic\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def delete_tag_basic(self, params, body):\n        res = self.json(\"DeleteTagBasic\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def list_tags_basic(self, params, body):\n        res = self.json(\"ListTagsBasic\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def get_tag_basic(self, params, body):\n        res = self.json(\"GetTagBasic\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    @ redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2, retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def get_tag_addition_basic(self, params, body):\n        res = self.json(\"GetTagAdditionBasic\", params, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n"
  },
  {
    "path": "volcengine/image_registry/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/imagex/ImageXConfig.py",
    "content": "# coding:utf-8\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.const.Const import *\n\nIMAGEX_SERVICE_NAME = \"ImageX\"\nIMAGEX_API_VERSION = \"2018-08-01\"\n\nResourceServiceIdTRN = \"trn:ImageX:*:*:ServiceId/%s\"\nResourceStoreKeyTRN = \"trn:ImageX:*:*:StoreKeys/%s\"\n\nUPLOAD_THREADS = 3\n\nMinChunkSize = 1024 * 1024 * 20\nLargeFileSize = 1024 * 1024 * 1024\n\nservice_info_map = {\n    REGION_CN_NORTH1: ServiceInfo(\n        \"imagex.volcengineapi.com\",\n        {'Accept': 'application/json'},\n        Credentials('', '', IMAGEX_SERVICE_NAME, REGION_CN_NORTH1),\n        10, 10, \"https\"),\n    REGION_AP_SINGAPORE1: ServiceInfo(\n        \"imagex-ap-singapore-1.volcengineapi.com\",\n        {'Accept': 'application/json'},\n        Credentials('', '', IMAGEX_SERVICE_NAME, REGION_AP_SINGAPORE1),\n        10, 10, \"https\"),\n    REGION_US_EAST1: ServiceInfo(\n        \"imagex-us-east-1.volcengineapi.com\",\n        {'Accept': 'application/json'},\n        Credentials('', '', IMAGEX_SERVICE_NAME, REGION_US_EAST1),\n        10, 10, \"https\"),\n}\n\napi_info = {\n    \"GetImageServiceSubscription\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageServiceSubscription\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"CreateImageService\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageService\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImageService\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageService\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetAllImageServices\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"GetAllImageServices\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"DeleteImageService\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageService\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"UpdateImageAuthKey\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageAuthKey\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImageAuthKey\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageAuthKey\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"UpdateImageObjectAccess\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageObjectAccess\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"UpdateImageMirrorConf\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageMirrorConf\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"DelDomain\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"DelDomain\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n\n    # 域名管理\n    \"GetServiceDomains\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"GetServiceDomains\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetDomainConfig\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"GetDomainConfig\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"SetDefaultDomain\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"SetDefaultDomain\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"UpdateResponseHeader\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateResponseHeader\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"UpdateRefer\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateRefer\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"UpdateHttps\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateHttps\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetResponseHeaderValidateKeys\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"GetResponseHeaderValidateKeys\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n\n    # 模板管理\n    \"CreateImageTemplate\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageTemplate\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"DeleteImageTemplate\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageTemplate\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImageTemplate\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageTemplate\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetAllImageTemplates\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"GetAllImageTemplates\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetTemplatesFromBin\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"GetTemplatesFromBin\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"CreateTemplatesFromBin\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateTemplatesFromBin\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"DeleteTemplatesFromBin\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteTemplatesFromBin\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n\n    # 资源管理相关\n    \"ApplyImageUpload\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"ApplyImageUpload\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"CommitImageUpload\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"CommitImageUpload\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImageUploadFile\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageUploadFile\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImageUploadFiles\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageUploadFiles\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"DeleteImageUploadFiles\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageUploadFiles\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"PreviewImageUploadFile\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"PreviewImageUploadFile\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"CreateImageContentTask\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageContentTask\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImageContentTaskDetail\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageContentTaskDetail\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImageContentBlockList\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageContentBlockList\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImageUpdateFiles\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageUpdateFiles\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"FetchImageUrl\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"FetchImageUrl\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetUrlFetchTask\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"GetUrlFetchTask\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n\n    \"UpdateServiceName\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateServiceName\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"UpdateImageStorageTTL\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageStorageTTL\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"DescribeImageVolcCdnAccessLog\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageVolcCdnAccessLog\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n\n    # 其他 API\n    \"GetImageOCRV2\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageOCRV2\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImageQuality\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageQuality\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImageEraseModels\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageEraseModels\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImageEnhanceResult\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageEnhanceResult\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImageEnhanceResultWithData\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageEnhanceResultWithData\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImageBgFillResult\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageBgFillResult\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImageDuplicateDetection\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageDuplicateDetection\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetDedupTaskStatus\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageDuplicateDetection\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetDenoisingImage\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"GetDenoisingImage\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetSegmentImage\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"GetSegmentImage\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImageComicResult\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageComicResult\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImageSuperResolutionResult\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageSuperResolutionResult\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImageSmartCropResult\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageSmartCropResult\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetLicensePlateDetection\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"GetLicensePlateDetection\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImagePSDetection\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImagePSDetection\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetPrivateImageType\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"GetPrivateImageType\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"CreateImageHmEmbed\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageHmEmbed\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"CreateImageHmExtract\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageHmExtract\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImageEraseResult\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageEraseResult\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n    \"GetImageStyleResult\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageStyleResult\", \"Version\": IMAGEX_API_VERSION}, {}, {}),\n}\n"
  },
  {
    "path": "volcengine/imagex/ImageXService.py",
    "content": "# coding:utf-8\nimport json\nimport os\nfrom six.moves import queue\nimport threading\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.base.Service import Service\nfrom volcengine.const.Const import *\nfrom volcengine.util.Util import *\nfrom volcengine.Policy import *\nfrom volcengine.imagex.ImageXConfig import *\nfrom retry import retry\n\n\nclass Uploader:\n    def __init__(self, imagex_service, host, store_infos=None, file_paths_or_bytes=None):\n        if store_infos is None:\n            store_infos = []\n        if file_paths_or_bytes is None:\n            file_paths_or_bytes = []\n\n        self.imagex_service = imagex_service\n        self.host = host\n        self.store_infos = store_infos\n        self.file_paths_or_bytes = file_paths_or_bytes\n\n        self.queue = queue.Queue()\n        self.queue_lock = threading.Lock()\n\n        self.successOids = []\n        self.results = []\n\n        for i in range(len(store_infos)):\n            self.queue.put(i)\n\n    def async_upload(self):\n        while not self.queue.empty():\n            self.queue_lock.acquire()\n            if self.queue.empty():\n                self.queue_lock.release()\n                break\n            idx = self.queue.get()\n            self.queue_lock.release()\n\n            store_info = self.store_infos[idx]\n            file_paths_or_bytes = self.file_paths_or_bytes[idx]\n\n            try:\n                if isinstance(file_paths_or_bytes, bytes):\n                    self.upload_by_host(store_info, file_paths_or_bytes)\n                elif isinstance(file_paths_or_bytes, str):\n                    file_path = file_paths_or_bytes\n                    file_size = os.path.getsize(file_path)\n                    data = open(file_path, \"rb\")\n                    if file_size < MinChunkSize:\n                        self.upload_by_host(store_info, data.read())\n                    elif file_size > LargeFileSize:\n                        self.chunk_upload(store_info, data, file_size, True)\n                    else:\n                        self.chunk_upload(store_info, data, file_size, False)\n                    data.close()\n                else:\n                    raise Exception(\"Uploader only accept bytes or path data\")\n                self.successOids.append(store_info['StoreUri'])\n                self.results.append({\n                    'Uri': store_info['StoreUri'],\n                    'UriStatus': 2000,\n                })\n            except Exception as e:\n                self.results.append({\n                    'Uri': store_info['StoreUri'],\n                    'UriStatus': 2001,\n                    'Error': e,\n                })\n\n    @retry(tries=3, delay=1, backoff=2)\n    def upload_by_host(self, store_info, img_data):\n        url = 'https://{}/{}'.format(self.host, store_info['StoreUri'])\n        check_sum = crc32(img_data) & 0xFFFFFFFF\n        check_sum = \"%08x\" % check_sum\n        headers = {'Content-CRC32': check_sum, 'Authorization': store_info['Auth']}\n        upload_status, resp = self.imagex_service.put_data(url, img_data, headers)\n        if not upload_status:\n            raise Exception('upload by host: upload url %s status false, resp: %s' % (url, resp))\n\n    def chunk_upload(self, store_info, f, size, is_large_file):\n        upload_id = self.init_upload_part(store_info, is_large_file)\n        n = size // MinChunkSize\n        last_num = n - 1\n        parts = []\n        for i in range(0, last_num):\n            data = f.read(MinChunkSize)\n            part_number = i\n            if is_large_file:\n                part_number = i + 1\n            part = self.upload_part(store_info, upload_id, part_number, data, is_large_file)\n            parts.append(part)\n        data = f.read()\n        if is_large_file:\n            last_num = last_num + 1\n        part = self.upload_part(store_info, upload_id, last_num, data, is_large_file)\n        parts.append(part)\n        return self.upload_merge_part(store_info, upload_id, parts, is_large_file)\n\n    @retry(tries=3, delay=1, backoff=2)\n    def init_upload_part(self, store_info, is_large_file):\n        url = 'https://{}/{}?uploads'.format(self.host, store_info['StoreUri'])\n        headers = {'Authorization': store_info['Auth']}\n        if is_large_file:\n            headers['X-Storage-Mode'] = 'gateway'\n        upload_status, resp = self.imagex_service.put_data(url, None, headers)\n        resp = json.loads(resp)\n        if not upload_status:\n            raise Exception(\"init upload error\")\n        if resp.get('success') is None or resp['success'] != 0:\n            raise Exception(\"init upload error\")\n        return resp['payload']['uploadID']\n\n    @retry(tries=3, delay=1, backoff=2)\n    def upload_part(self, store_info, upload_id, part_number, data, is_large_file):\n        url = 'https://{}/{}?partNumber={}&uploadID={}'.format(self.host, store_info['StoreUri'], part_number,\n                                                               upload_id)\n        check_sum = crc32(data) & 0xFFFFFFFF\n        check_sum = \"%08x\" % check_sum\n        headers = {'Content-CRC32': check_sum, 'Authorization': store_info['Auth']}\n        if is_large_file:\n            headers['X-Storage-Mode'] = 'gateway'\n        upload_status, resp = self.imagex_service.put_data(url, data, headers)\n        if not upload_status:\n            raise Exception(url + json.dumps(resp))\n        resp = json.loads(resp)\n        if resp.get('success') is None or resp['success'] != 0:\n            raise Exception(\"upload part error\")\n        return check_sum\n\n    # noinspection DuplicatedCode\n    @staticmethod\n    def generate_merge_body(check_sum_list):\n        if len(check_sum_list) == 0:\n            raise Exception('crc32 list empty')\n        s = []\n        for i in range(len(check_sum_list)):\n            s.append('{}:{}'.format(i, check_sum_list[i]))\n        comma = ','\n        return comma.join(s)\n\n    @retry(tries=3, delay=1, backoff=2)\n    def upload_merge_part(self, store_info, upload_id, check_sum_list, is_large_file):\n        url = 'https://{}/{}?uploadID={}'.format(self.host, store_info['StoreUri'], upload_id)\n        data = self.generate_merge_body(check_sum_list)\n        headers = {'Authorization': store_info['Auth']}\n        if is_large_file:\n            headers['X-Storage-Mode'] = 'gateway'\n        upload_status, resp = self.imagex_service.put_data(url, data, headers)\n        resp = json.loads(resp)\n        if not upload_status:\n            raise Exception(\"init upload error\")\n        if resp.get('success') is None or resp['success'] != 0:\n            raise Exception(\"init upload error\")\n\n\nclass ImageXService(Service):\n    def __init__(self, region=REGION_CN_NORTH1):\n        self.service_info = ImageXService.get_service_info(region)\n        self.api_info = ImageXService.get_api_info()\n        super(ImageXService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info(region):\n        service_info = service_info_map.get(region, None)\n        if not service_info:\n            raise Exception('ImageX not support region %s' % region)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        return api_info\n\n    # upload\n    def apply_upload(self, params):\n        res = self.get('ApplyImageUpload', params, doseq=1)\n        if res == '':\n            raise Exception(\"ApplyImageUpload: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def commit_upload(self, params, body):\n        res = self.json('CommitImageUpload', params, body)\n        if res == '':\n            raise Exception(\"CommitImageUpload: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # upload local image file\n    # noinspection DuplicatedCode\n    def upload_image(self, params, file_paths):\n        for p in file_paths:\n            if not os.path.isfile(p):\n                raise Exception(\"no such file on file path %s\" % p)\n\n        apply_upload_request = {\n            'ServiceId': params['ServiceId'],\n            'SessionKey': params.get('SessionKey', ''),\n            'UploadNum': len(file_paths),\n            'StoreKeys': params.get('StoreKeys', []),\n            'Overwrite': str(params.get('Overwrite', False)),\n        }\n        resp = self.apply_upload(apply_upload_request)\n        if 'Error' in resp['ResponseMetadata']:\n            raise Exception(resp['ResponseMetadata'])\n\n        result = resp['Result']\n        reqid = result['RequestId']\n        addr = result['UploadAddress']\n        if len(addr['UploadHosts']) == 0:\n            raise Exception(\"no upload host found, reqid %s\" % reqid)\n        elif len(addr['StoreInfos']) != len(file_paths):\n            raise Exception(\"store info len %d != upload num %d, reqid %s\" % (\n                len(result['StoreInfos']), len(file_paths), reqid))\n\n        session_key = addr['SessionKey']\n        host = addr['UploadHosts'][0]\n        uploader = self.do_upload(file_paths, host, addr['StoreInfos'])\n        if len(uploader.successOids) == 0:\n            raise Exception(\"no file uploaded\")\n\n        if params.get('SkipCommit', False):\n            return {'Results': uploader.results}\n        commit_upload_request = {\n            'ServiceId': params['ServiceId'],\n            'SkipMeta': params.get('SkipMeta', False)\n        }\n        commit_upload_body = {\n            'SessionKey': session_key,\n            'SuccessOids': uploader.successOids,\n            'Functions': params.get('Functions', []),\n            'OptionInfos': params.get('OptionInfos', [])\n        }\n        resp = self.commit_upload(\n            commit_upload_request, json.dumps(commit_upload_body))\n        if 'Error' in resp['ResponseMetadata']:\n            raise Exception(resp['ResponseMetadata'])\n        return resp['Result']\n\n    # upload image data\n    # noinspection DuplicatedCode\n    def upload_image_data(self, params, img_datas):\n        for data in img_datas:\n            if not isinstance(data, bytes):\n                raise Exception(\"upload of non-bytes not supported\")\n\n        apply_upload_request = {\n            'ServiceId': params['ServiceId'],\n            'SessionKey': params.get('SessionKey', ''),\n            'UploadNum': len(img_datas),\n            'StoreKeys': params.get('StoreKeys', []),\n            'Overwrite': str(params.get('Overwrite', False)),\n        }\n        resp = self.apply_upload(apply_upload_request)\n        if 'Error' in resp['ResponseMetadata']:\n            raise Exception(resp['ResponseMetadata'])\n\n        result = resp['Result']\n        reqid = result['RequestId']\n        addr = result['UploadAddress']\n        if len(addr['UploadHosts']) == 0:\n            raise Exception(\"no upload host found, reqid %s\" % reqid)\n        elif len(addr['StoreInfos']) != len(img_datas):\n            raise Exception(\"store info len %d != upload num %d, reqid %s\" % (\n                len(result['StoreInfos']), len(img_datas), reqid))\n\n        session_key = addr['SessionKey']\n        host = addr['UploadHosts'][0]\n        uploader = self.do_upload(img_datas, host, addr['StoreInfos'])\n        if len(uploader.successOids) == 0:\n            raise Exception(\"no file uploaded\")\n\n        if params.get('SkipCommit', False):\n            return {'Results': uploader.results}\n        commit_upload_request = {\n            'ServiceId': params['ServiceId'],\n            'SkipMeta': params.get('SkipMeta', False)\n        }\n        commit_upload_body = {\n            'SessionKey': session_key,\n            'SuccessOids': uploader.successOids,\n            'Functions': params.get('Functions', []),\n            'OptionInfos': params.get('OptionInfos', [])\n        }\n        resp = self.commit_upload(\n            commit_upload_request, json.dumps(commit_upload_body))\n        if 'Error' in resp['ResponseMetadata']:\n            raise Exception(resp['ResponseMetadata'])\n        return resp['Result']\n\n    def do_upload(self, file_paths_or_bytes, host, store_infos):\n        threads = []\n        uploader = Uploader(self, host, store_infos, file_paths_or_bytes)\n        for i in range(UPLOAD_THREADS):\n            thread = threading.Thread(target=uploader.async_upload)\n            thread.start()\n            threads.append(thread)\n        for i in range(UPLOAD_THREADS):\n            threads[i].join()\n        return uploader\n\n    def get_upload_auth_token(self, params):\n        apply_token = self.get_sign_url('ApplyImageUpload', params)\n        commit_token = self.get_sign_url('CommitImageUpload', params)\n\n        ret = {'Version': 'v1', 'ApplyUploadToken': apply_token,\n               'CommitUploadToken': commit_token}\n        data = json.dumps(ret)\n        if sys.version_info[0] == 3:\n            return base64.b64encode(data.encode('utf-8')).decode('utf-8')\n        else:\n            return base64.b64encode(data.decode('utf-8'))\n\n    # tag 字段如下，可选择所需字段传入\n    # upload_policy_dict = {\n    #     \"FileSizeUpLimit\": \"xxx\",\n    #     \"FileSizeBottomLimit\": \"xxx\",\n    #     \"ContentTypeBlackList\":[\n    #         \"xxx\"\n    #     ],\n    #     \"ContentTypeWhiteList\":[\n    #         \"xxx\"\n    #     ]\n    # }\n    # policy_str = json.dumps(upload_policy_dict)\n    #\n    # tag = {\n    #     \"UploadOverwrite\": \"true\",\n    #     \"UploadPolicy\": policy_str,\n    # }\n    def get_upload_auth(self, service_ids, expire=60 * 60, key_ptn='', tag=dict):\n        apply_res = []\n        commit_res = []\n        if len(service_ids) == 0:\n            apply_res.append(ResourceServiceIdTRN % '*')\n            commit_res.append(ResourceServiceIdTRN % '*')\n        else:\n            for sid in service_ids:\n                apply_res.append(ResourceServiceIdTRN % sid)\n                commit_res.append(ResourceServiceIdTRN % sid)\n        apply_res.append(ResourceStoreKeyTRN % key_ptn)\n\n        inline_policy = Policy([\n            Statement.new_allow_statement(\n                ['ImageX:ApplyImageUpload'], apply_res),\n            Statement.new_allow_statement(\n                ['ImageX:CommitImageUpload'], commit_res)\n        ])\n        for k, v in tag.items():\n            inline_policy.statements.append(Statement.new_allow_statement([k], [str(v)]))\n        return self.sign_sts2(inline_policy, expire)\n\n    def delete_images(self, service_id, uris):\n        query = {\n            'ServiceId': service_id\n        }\n        body = {\n            'StoreUris': uris\n        }\n        res = self.json('DeleteImageUploadFiles', query, json.dumps(body))\n        if res == '':\n            raise Exception(\"DeleteImageUploadFiles: empty response\")\n        res_json = json.loads(res)\n        if 'Error' in res_json['ResponseMetadata']:\n            raise Exception(res_json['ResponseMetadata'])\n        return res_json['Result']\n\n    def create_image_content_task(self, args):\n        query = {\n            'ServiceId': args['ServiceId']\n        }\n        res = self.imagex_post('CreateImageContentTask', query, json.dumps(args))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'CreateImageContentTask')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_image_content_task_detail(self, args):\n        query = {\n            'ServiceId': args['ServiceId']\n        }\n        res = self.imagex_post('GetImageContentTaskDetail', query, json.dumps(args))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'CreateImageContentTask')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_image_content_block_list(self, args):\n        query = {\n            'ServiceId': args['ServiceId']\n        }\n        res = self.imagex_post('GetImageContentBlockList', query, json.dumps(args))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'CreateImageContentTask')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_image_info(self, service_id, store_uri):\n        query = {\n            'ServiceId': service_id,\n            'StoreUri': store_uri,\n        }\n        res = self.get('PreviewImageUploadFile', query)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        if 'Error' in res_json['ResponseMetadata']:\n            raise Exception(res_json['ResponseMetadata'])\n        return res_json['Result']\n\n    def imagex_get(self, action, params, doseq=0):\n        res = self.get(action, params, doseq)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(json.dumps(res))\n        return res_json\n\n    def imagex_post(self, action, params, body):\n        res = self.json(action, params, body)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(json.dumps(res))\n        return res_json\n\n    def imagex_request(self, action, params, body, files):\n        res = self.request(action, params, body, files)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(json.dumps(res))\n        return res_json\n\n    def fetch_image_url(self, request):\n        res = self.imagex_post('FetchImageUrl', request, json.dumps(request))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        if 'Error' in res_json['ResponseMetadata']:\n            raise Exception(res_json['ResponseMetadata'])\n        return res_json['Result']\n\n    def get_url_fetch_task(self, query):\n        res = self.imagex_get('GetUrlFetchTask', query)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        if 'Error' in res_json['ResponseMetadata']:\n            raise Exception(res_json['ResponseMetadata'])\n        return res_json['Result']\n\n    def update_image_storage_ttl(self, request):\n        res = self.imagex_post('UpdateImageStorageTTL', {}, json.dumps(request))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        if 'Error' in res_json['ResponseMetadata']:\n            raise Exception(res_json['ResponseMetadata'])\n        return res_json['Result']\n\n    def get_image_ocr_v2(self, params):\n        query = {\n            'ServiceId': params['ServiceId']\n        }\n        body = {\n            'Scene': params['Scene'],\n            'StoreUri': params.get('StoreUri', None),\n            'ImageUrl': params.get('ImageUrl', None),\n            'InstrumentName': params.get('InstrumentName', None)\n        }\n        res = self.imagex_post('GetImageOCRV2', query, json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'GetImageOCR')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_image_segment(self, params):\n        res = self.post('GetSegmentImage', params, {})\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'GetSegmentImage')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_image_quality(self, params):\n        body = {\n            'ImageUrl': params['ImageUrl'],\n            'VqType': params.get('VqType', None)\n        }\n        res = self.imagex_post('GetImageQuality', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'GetImageQuality')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_image_erase_models(self, params):\n        res = self.imagex_get('GetImageEraseModels', params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'GetImageEraseModels')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_image_erase_result(self, params):\n        body = {\n            'ServiceId': params['ServiceId'],\n            'StoreUri': params['StoreUri'],\n            'Model': params['Model'],\n            'BBox': params.get('BBox', None)\n        }\n        res = self.imagex_post('GetImageEraseResult', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'GetImageEraseResult')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_image_enhance_result(self, params):\n        body = {\n            'ServiceId': params['ServiceId'],\n            'StoreUri': params['StoreUri'],\n            'Model': params['Model'],\n            'DisableAr': params.get('DisableAr', None),\n            'DisableSharp': params.get('DisableSharp', None),\n            'Resolution': params.get('Resolution', None)\n        }\n        res = self.imagex_post('GetImageEnhanceResult', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'GetImageEnhanceResult')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_image_enhance_result_with_data(self, input, data):\n        params = {\n            \"ServiceId\": input[\"ServiceId\"]\n        }\n        res = self.imagex_request('GetImageEnhanceResultWithData', params, body={\n            'Input': json.dumps(input),\n        }, files={\n            'Data': ('img', data),\n        })\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'GetImageEnhanceResult')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_image_bg_fill_result(self, params):\n        body = {\n            'ServiceId': params['ServiceId'],\n            'StoreUri': params['StoreUri'],\n            'Model': params['Model'],\n            'Top': params.get('Top', None),\n            'Bottom': params.get('Bottom', None),\n            'Left': params.get('Left', None),\n            'Right': params.get('Right', None)\n        }\n        res = self.imagex_post('GetImageBgFillResult', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'GetImageBgFillResult')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_image_duplicate_detection(self, body):\n        query = {\n            'ServiceId': body['ServiceId'],\n        }\n        res = self.imagex_post('GetImageDuplicateDetection', query, json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'GetImageDuplicateDetection')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_image_duplicate_task_status(self, query):\n        res = self.imagex_get('GetDedupTaskStatus', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'GetDedupTaskStatus')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_image_comic_result(self, params):\n        body = {\n            'ServiceId': params['ServiceId'],\n            'StoreUri': params['StoreUri']\n        }\n        res = self.imagex_post('GetImageComicResult', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'GetImageComicResult')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_image_super_resolution_result(self, params):\n        body = {\n            'ServiceId': params['ServiceId'],\n            'StoreUri': params['StoreUri'],\n            'Multiple': params.get('Multiple', None)\n        }\n        res = self.imagex_post('GetImageSuperResolutionResult', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'GetImageSuperResolutionResult')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_license_plate_detection(self, params):\n        body = {\n            'ImageUri': params['ImageUri']\n        }\n        res = self.imagex_post('GetLicensePlateDetection', params, json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'GetLicensePlateDetection')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_image_style_result(self, args):\n        query = {\n            'ServiceId': args['ServiceId'],\n        }\n        res = self.imagex_post('GetImageStyleResult', query, json.dumps(args))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'GetImageStyleResult')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_domain_traffic_data(self, query):\n        res = self.imagex_get('DescribeImageXDomainTrafficData', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXDomainTrafficData')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_domain_bandwidth_data(self, query):\n        res = self.imagex_get('DescribeImageXDomainBandwidthData', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXDomainBandwidthData')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_bucket_usage(self, query):\n        res = self.imagex_get('DescribeImageXBucketUsage', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXBucketUsage')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_request_cnt_usage(self, query):\n        res = self.imagex_get('DescribeImageXRequestCntUsage', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXRequestCntUsage')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_base_op_usage(self, query):\n        res = self.imagex_get('DescribeImageXBaseOpUsage', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXBaseOpUsage')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_compress_usage(self, query):\n        res = self.imagex_get('DescribeImageXCompressUsage', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXCompressUsage')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_edge_request(self, query):\n        res = self.imagex_get('DescribeImageXEdgeRequest', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXEdgeRequest')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_hit_rate_traffic_data(self, query):\n        res = self.imagex_get('DescribeImageXHitRateTrafficData', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXHitRateTrafficData')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_hit_rate_request_data(self, query):\n        res = self.imagex_get('DescribeImageXHitRateRequestData', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXHitRateRequestData')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_cdntop_request_data(self, query):\n        res = self.imagex_get('DescribeImageXCDNTopRequestData', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXCDNTopRequestData')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_summary(self, query):\n        res = self.imagex_get('DescribeImageXSummary', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXSummary')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_edge_request_bandwidth(self, query):\n        res = self.imagex_get('DescribeImageXEdgeRequestBandwidth', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXEdgeRequestBandwidth')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_edge_request_traffic(self, query):\n        res = self.imagex_get('DescribeImageXEdgeRequestTraffic', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXEdgeRequestTraffic')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_edge_request_regions(self, query):\n        res = self.imagex_get('DescribeImageXEdgeRequestRegions', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXEdgeRequestRegions')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_mirror_request_traffic(self, body):\n        res = self.imagex_post('DescribeImageXMirrorRequestTraffic', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXMirrorRequestTraffic')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_mirror_request_bandwidth(self, body):\n        res = self.imagex_post('DescribeImageXMirrorRequestBandwidth', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXMirrorRequestBandwidth')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_mirror_request_http_code_by_time(self, body):\n        res = self.imagex_post('DescribeImageXMirrorRequestHttpCodeByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXMirrorRequestHttpCodeByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_mirror_request_http_code_overview(self, body):\n        res = self.imagex_post('DescribeImageXMirrorRequestHttpCodeOverview', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXMirrorRequestHttpCodeOverview')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_service_quality(self, query):\n        res = self.imagex_get('DescribeImageXServiceQuality', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXServiceQuality')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_imagex_query_apps(self, query):\n        res = self.imagex_get('GetImageXQueryApps', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'GetImageXQueryApps')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_imagex_query_regions(self, query):\n        res = self.imagex_get('GetImageXQueryRegions', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'GetImageXQueryRegions')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_imagex_query_dims(self, query):\n        res = self.imagex_get('GetImageXQueryDims', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'GetImageXQueryDims')\n        res_json = json.loads(res)\n        return res_json\n\n    def get_imagex_query_vals(self, query):\n        res = self.imagex_get('GetImageXQueryVals', query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'GetImageXQueryVals')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_upload_success_rate_by_time(self, body):\n        res = self.imagex_post('DescribeImageXUploadSuccessRateByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXUploadSuccessRateByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_upload_error_code_all(self, body):\n        res = self.imagex_post('DescribeImageXUploadErrorCodeAll', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXUploadErrorCodeAll')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_upload_error_code_by_time(self, body):\n        res = self.imagex_post('DescribeImageXUploadErrorCodeByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXUploadErrorCodeByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_upload_count_by_time(self, body):\n        res = self.imagex_post('DescribeImageXUploadCountByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXUploadCountByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_upload_file_size(self, body):\n        res = self.imagex_post('DescribeImageXUploadFileSize', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXUploadFileSize')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_upload_speed(self, body):\n        res = self.imagex_post('DescribeImageXUploadSpeed', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXUploadSpeed')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_upload_duration(self, body):\n        res = self.imagex_post('DescribeImageXUploadDuration', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXUploadDuration')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_upload_segment_speed_by_time(self, body):\n        res = self.imagex_post('DescribeImageXUploadSegmentSpeedByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXUploadSegmentSpeedByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_cdn_success_rate_by_time(self, body):\n        res = self.imagex_post('DescribeImageXCdnSuccessRateByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXCdnSuccessRateByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_cdn_success_rate_all(self, body):\n        res = self.imagex_post('DescribeImageXCdnSuccessRateAll', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXCdnSuccessRateAll')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_cdn_error_code_by_time(self, body):\n        res = self.imagex_post('DescribeImageXCdnErrorCodeByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXCdnErrorCodeByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_cdn_error_code_all(self, body):\n        res = self.imagex_post('DescribeImageXCdnErrorCodeAll', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXCdnErrorCodeAll')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_cdn_duration_detail_by_time(self, body):\n        res = self.imagex_post('DescribeImageXCdnDurationDetailByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXCdnDurationDetailByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_cdn_duration_all(self, body):\n        res = self.imagex_post('DescribeImageXCdnDurationAll', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXCdnDurationAll')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_cdn_reuse_rate_by_time(self, body):\n        res = self.imagex_post('DescribeImageXCdnReuseRateByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXCdnReuseRateByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_cdn_reuse_rate_all(self, body):\n        res = self.imagex_post('DescribeImageXCdnReuseRateAll', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXCdnReuseRateAll')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_cdn_protocol_rate_by_time(self, body):\n        res = self.imagex_post('DescribeImageXCdnProtocolRateByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXCdnProtocolRateByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_client_error_code_all(self, body):\n        res = self.imagex_post('DescribeImageXClientErrorCodeAll', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXClientErrorCodeAll')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_client_error_code_by_time(self, body):\n        res = self.imagex_post('DescribeImageXClientErrorCodeByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXClientErrorCodeByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_client_decode_success_rate_by_time(self, body):\n        res = self.imagex_post('DescribeImageXClientDecodeSuccessRateByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXClientDecodeSuccessRateByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_client_decode_duration_by_time(self, body):\n        res = self.imagex_post('DescribeImageXClientDecodeDurationByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXClientDecodeDurationByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_client_queue_duration_by_time(self, body):\n        res = self.imagex_post('DescribeImageXClientQueueDurationByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXClientQueueDurationByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_client_load_duration_all(self, body):\n        res = self.imagex_post('DescribeImageXClientLoadDurationAll', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXClientLoadDurationAll')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_client_load_duration(self, body):\n        res = self.imagex_post('DescribeImageXClientLoadDuration', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXClientLoadDuration')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_client_failure_rate(self, body):\n        res = self.imagex_post('DescribeImageXClientFailureRate', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXClientFailureRate')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_client_sdk_ver_by_time(self, body):\n        res = self.imagex_post('DescribeImageXClientSdkVerByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXClientSdkVerByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_client_file_size(self, body):\n        res = self.imagex_post('DescribeImageXClientFileSize', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXClientFileSize')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_client_top_file_size(self, body):\n        res = self.imagex_post('DescribeImageXClientTopFileSize', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXClientTopFileSize')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_client_count_by_time(self, body):\n        res = self.imagex_post('DescribeImageXClientCountByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXClientCountByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_client_score_by_time(self, body):\n        res = self.imagex_post('DescribeImageXClientScoreByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXClientScoreByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_client_demotion_rate_by_time(self, body):\n        res = self.imagex_post('DescribeImageXClientDemotionRateByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXClientDemotionRateByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_client_top_demotion_url(self, body):\n        res = self.imagex_post('DescribeImageXClientTopDemotionURL', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXClientTopDemotionURL')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_client_quality_rate_by_time(self, body):\n        res = self.imagex_post('DescribeImageXClientQualityRateByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXClientQualityRateByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_client_top_quality_url(self, body):\n        res = self.imagex_post('DescribeImageXClientTopQualityURL', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXClientTopQualityURL')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_sensible_count_by_time(self, body):\n        res = self.imagex_post('DescribeImageXSensibleCountByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXSensibleCountByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_sensible_cache_hit_rate_by_time(self, body):\n        res = self.imagex_post('DescribeImageXSensibleCacheHitRateByTime', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXSensibleCacheHitRateByTime')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_sensible_top_size_url(self, body):\n        res = self.imagex_post('DescribeImageXSensibleTopSizeURL', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXSensibleTopSizeURL')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_sensible_top_ram_url(self, body):\n        res = self.imagex_post('DescribeImageXSensibleTopRamURL', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXSensibleTopRamURL')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_sensible_top_resolution_url(self, body):\n        res = self.imagex_post('DescribeImageXSensibleTopResolutionURL', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXSensibleTopResolutionURL')\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_imagex_sensible_top_unknown_url(self, body):\n        res = self.imagex_post('DescribeImageXSensibleTopUnknownURL', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageXSensibleTopUnknownURL')\n        res_json = json.loads(res)\n        return res_json\n\n    def describeImageVolcCdnAccessLog(self, query, body):\n        res = self.imagex_post('DescribeImageVolcCdnAccessLog', query, json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % 'DescribeImageVolcCdnAccessLog')\n        res_json = json.loads(res)\n        return res_json\n"
  },
  {
    "path": "volcengine/imagex/__init__.py",
    "content": "from volcengine.ApiInfo import ApiInfo\nfrom volcengine.imagex.ImageXConfig import api_info, IMAGEX_API_VERSION\n\n\ndef init():\n    for v in [\"DescribeImageXDomainTrafficData\",\n              \"DescribeImageXDomainBandwidthData\",\n              \"DescribeImageXBucketUsage\",\n              \"DescribeImageXRequestCntUsage\",\n              \"DescribeImageXBaseOpUsage\",\n              \"DescribeImageXCompressUsage\",\n              \"DescribeImageXEdgeRequest\",\n              \"DescribeImageXHitRateTrafficData\",\n              \"DescribeImageXHitRateRequestData\",\n              \"DescribeImageXCDNTopRequestData\",\n              \"DescribeImageXSummary\",\n              \"DescribeImageXEdgeRequestBandwidth\",\n              \"DescribeImageXEdgeRequestTraffic\",\n              \"DescribeImageXEdgeRequestRegions\",\n              \"DescribeImageXServiceQuality\",\n              \"GetImageXQueryApps\",\n              \"GetImageXQueryRegions\",\n              \"GetImageXQueryDims\",\n              \"GetImageXQueryVals\",\n              ]:\n        api_info[v] = ApiInfo(\"GET\", \"/\", {\"Action\": v, \"Version\": IMAGEX_API_VERSION}, {}, {})\n\n    for v in [\"DescribeImageXMirrorRequestTraffic\",\n              \"DescribeImageXMirrorRequestBandwidth\",\n              \"DescribeImageXMirrorRequestHttpCodeByTime\",\n              \"DescribeImageXMirrorRequestHttpCodeOverview\",\n              \"DescribeImageXUploadSuccessRateByTime\",\n              \"DescribeImageXUploadErrorCodeAll\",\n              \"DescribeImageXUploadErrorCodeByTime\",\n              \"DescribeImageXUploadCountByTime\",\n              \"DescribeImageXUploadFileSize\",\n              \"DescribeImageXUploadSpeed\",\n              \"DescribeImageXUploadDuration\",\n              \"DescribeImageXUploadSegmentSpeedByTime\",\n              \"DescribeImageXCdnSuccessRateByTime\",\n              \"DescribeImageXCdnSuccessRateAll\",\n              \"DescribeImageXCdnErrorCodeByTime\",\n              \"DescribeImageXCdnErrorCodeAll\",\n              \"DescribeImageXCdnDurationDetailByTime\",\n              \"DescribeImageXCdnDurationAll\",\n              \"DescribeImageXCdnReuseRateByTime\",\n              \"DescribeImageXCdnReuseRateAll\",\n              \"DescribeImageXCdnProtocolRateByTime\",\n              \"DescribeImageXClientErrorCodeAll\",\n              \"DescribeImageXClientErrorCodeByTime\",\n              \"DescribeImageXClientDecodeSuccessRateByTime\",\n              \"DescribeImageXClientDecodeDurationByTime\",\n              \"DescribeImageXClientQueueDurationByTime\",\n              \"DescribeImageXClientLoadDurationAll\",\n              \"DescribeImageXClientLoadDuration\",\n              \"DescribeImageXClientFailureRate\",\n              \"DescribeImageXClientSdkVerByTime\",\n              \"DescribeImageXClientFileSize\",\n              \"DescribeImageXClientTopFileSize\",\n              \"DescribeImageXClientCountByTime\",\n              \"DescribeImageXClientScoreByTime\",\n              \"DescribeImageXClientDemotionRateByTime\",\n              \"DescribeImageXClientTopDemotionURL\",\n              \"DescribeImageXClientQualityRateByTime\",\n              \"DescribeImageXClientTopQualityURL\",\n              \"DescribeImageXSensibleCountByTime\",\n              \"DescribeImageXSensibleCacheHitRateByTime\",\n              \"DescribeImageXSensibleTopSizeURL\",\n              \"DescribeImageXSensibleTopRamURL\",\n              \"DescribeImageXSensibleTopResolutionURL\",\n              \"DescribeImageXSensibleTopUnknownURL\",\n              ]:\n        api_info[v] = ApiInfo(\"POST\", \"/\", {\"Action\": v, \"Version\": IMAGEX_API_VERSION}, {}, {})\n\n\ninit()\n"
  },
  {
    "path": "volcengine/imagex/v2/__init__.py",
    "content": "__version__ = '1.0.0'\n"
  },
  {
    "path": "volcengine/imagex/v2/const.py",
    "content": "# coding:utf-8\n\nIMAGEX_SERVICE_NAME = \"ImageX\"\nIMAGEX_API_VERSION = \"2018-08-01\"\n\nResourceServiceIdTRN = \"trn:ImageX:*:*:ServiceId/%s\"\nResourceStoreKeyTRN = \"trn:ImageX:*:*:StoreKeys/%s\"\n\nUPLOAD_THREADS = 3\n\nMinChunkSize = 1024 * 1024 * 20\nLargeFileSize = 1024 * 1024 * 1024"
  },
  {
    "path": "volcengine/imagex/v2/helper/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/imagex/v2/helper/file_section_reader.py",
    "content": "# coding:utf-8\nimport os\n\n\nclass FileSectionReader(object):\n    def __init__(self, file_object, size, init_offset=None, can_reset=False):\n        self.file_object = file_object\n        self.size = size\n        self.offset = 0\n        self.init_offset = init_offset\n        self.can_reset = can_reset\n        if init_offset:\n            self.file_object.seek(init_offset, os.SEEK_SET)\n\n    def read(self, amt=None):\n        if self.offset >= self.size:\n            return ''\n\n        if (amt is None or amt < 0) or (amt + self.offset >= self.size):\n            data = self.file_object.read(self.size - self.offset)\n            self.offset = self.size\n            return data\n\n        self.offset += amt\n        return self.file_object.read(amt)\n\n    @property\n    def len(self):\n        return self.size\n\n    def reset(self):\n        if self.can_reset:\n            self.offset = 0\n            if self.init_offset is not None:\n                self.file_object.seek(self.init_offset, os.SEEK_SET)\n"
  },
  {
    "path": "volcengine/imagex/v2/imagex_config.py",
    "content": "# coding:utf-8\n\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.ApiInfo import ApiInfo\n\nservice_info_map = {\n    'cn-north-1': ServiceInfo(\n        'imagex.volcengineapi.com',\n        {'Accept': 'application/json'},\n        Credentials('', '', 'ImageX', 'cn-north-1'),\n        10, 10, \"https\"),\n    'ap-singapore-1': ServiceInfo(\n        'imagex-ap-singapore-1.volcengineapi.com',\n        {'Accept': 'application/json'},\n        Credentials('', '', 'ImageX', 'ap-singapore-1'),\n        10, 10, \"https\"),\n    'us-east-1': ServiceInfo(\n        'imagex-us-east-1.volcengineapi.com',\n        {'Accept': 'application/json'},\n        Credentials('', '', 'ImageX', 'us-east-1'),\n        10, 10, \"https\"),\n    'ap-southeast-1': ServiceInfo(\n        'imagex.ap-southeast-1.volcengineapi.com',\n        {'Accept': 'application/json'},\n        Credentials('', '', 'ImageX', 'ap-southeast-1'),\n        10, 10, \"https\")\n}\n\napi_info = {\n    \"UpdateImageDomainVolcOrigin\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageDomainVolcOrigin\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"DelDomain\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DelDomain\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"AddDomainV1\": ApiInfo(\"POST\", \"/\", {\"Action\": \"AddDomainV1\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"UpdateImageDomainIPAuth\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageDomainIPAuth\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"UpdateRefer\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateRefer\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"UpdateImageDomainUaAccess\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageDomainUaAccess\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"UpdateHttps\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateHttps\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"UpdateImageDomainDownloadSpeedLimit\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageDomainDownloadSpeedLimit\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"UpdateResponseHeader\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateResponseHeader\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"UpdateImageDomainAreaAccess\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageDomainAreaAccess\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"UpdateDomainAdaptiveFmt\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateDomainAdaptiveFmt\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageDomainConfig\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageDomainConfig\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"UpdateAdvance\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateAdvance\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"UpdateImageDomainBandwidthLimit\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageDomainBandwidthLimit\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"UpdateSlimConfig\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateSlimConfig\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"SetDefaultDomain\": ApiInfo(\"POST\", \"/\", {\"Action\": \"SetDefaultDomain\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageVolcCdnAccessLog\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageVolcCdnAccessLog\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"VerifyDomainOwner\": ApiInfo(\"POST\", \"/\", {\"Action\": \"VerifyDomainOwner\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetResponseHeaderValidateKeys\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetResponseHeaderValidateKeys\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetDomainConfig\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetDomainConfig\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"GetDomainOwnerVerifyContent\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetDomainOwnerVerifyContent\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetServiceDomains\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetServiceDomains\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"DeleteImageMonitorRules\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageMonitorRules\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"DeleteImageMonitorRecords\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageMonitorRecords\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"CreateImageMonitorRule\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageMonitorRule\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"UpdateImageMonitorRule\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageMonitorRule\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"UpdateImageMonitorRuleStatus\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageMonitorRuleStatus\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"GetImageAlertRecords\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageAlertRecords\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"GetImageMonitorRules\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageMonitorRules\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"CreateImageSettingRule\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageSettingRule\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DeleteImageSettingRule\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageSettingRule\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageSettingRulePriority\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageSettingRulePriority\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageSettingRule\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageSettingRule\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageSettings\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageSettings\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageSettingRuleHistory\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageSettingRuleHistory\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageSettingRules\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageSettingRules\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateImageMigrateTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageMigrateTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DeleteImageMigrateTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageMigrateTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"ExportFailedMigrateTask\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ExportFailedMigrateTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageTaskStrategy\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageTaskStrategy\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"TerminateImageMigrateTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"TerminateImageMigrateTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetVendorBuckets\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetVendorBuckets\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageMigrateTasks\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageMigrateTasks\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"RerunImageMigrateTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"RerunImageMigrateTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageAddOnTag\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageAddOnTag\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXCubeUsage\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXCubeUsage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXSourceRequestBandwidth\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXSourceRequestBandwidth\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXSourceRequestTraffic\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXSourceRequestTraffic\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXSourceRequest\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXSourceRequest\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXStorageUsage\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXStorageUsage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXBucketRetrievalUsage\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXBucketRetrievalUsage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXAddOnQPSUsage\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXAddOnQPSUsage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXAIRequestCntUsage\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXAIRequestCntUsage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXSummary\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXSummary\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXDomainTrafficData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXDomainTrafficData\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXDomainBandwidthData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXDomainBandwidthData\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXDomainBandwidthNinetyFiveData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXDomainBandwidthNinetyFiveData\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXBucketUsage\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXBucketUsage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXBillingRequestCntUsage\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXBillingRequestCntUsage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXRequestCntUsage\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXRequestCntUsage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXBaseOpUsage\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXBaseOpUsage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXCompressUsage\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXCompressUsage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXScreenshotUsage\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXScreenshotUsage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXVideoClipDurationUsage\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXVideoClipDurationUsage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXMultiCompressUsage\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXMultiCompressUsage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXEdgeRequest\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXEdgeRequest\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXEdgeRequestBandwidth\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXEdgeRequestBandwidth\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXEdgeRequestTraffic\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXEdgeRequestTraffic\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXEdgeRequestRegions\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXEdgeRequestRegions\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXMirrorRequestHttpCodeByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXMirrorRequestHttpCodeByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXMirrorRequestHttpCodeOverview\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXMirrorRequestHttpCodeOverview\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXMirrorRequestTraffic\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXMirrorRequestTraffic\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXMirrorRequestBandwidth\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXMirrorRequestBandwidth\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXServerQPSUsage\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXServerQPSUsage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXHitRateTrafficData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXHitRateTrafficData\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXHitRateRequestData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXHitRateRequestData\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXCDNTopRequestData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXCDNTopRequestData\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXHeifEncodeFileInSizeByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXHeifEncodeFileInSizeByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXHeifEncodeFileOutSizeByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXHeifEncodeFileOutSizeByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXHeifEncodeSuccessCountByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXHeifEncodeSuccessCountByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXHeifEncodeSuccessRateByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXHeifEncodeSuccessRateByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXHeifEncodeDurationByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXHeifEncodeDurationByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXHeifEncodeErrorCodeByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXHeifEncodeErrorCodeByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXExceedResolutionRatioAll\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXExceedResolutionRatioAll\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXExceedFileSize\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXExceedFileSize\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXExceedCountByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXExceedCountByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXServiceQuality\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeImageXServiceQuality\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageXQueryApps\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageXQueryApps\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageXQueryRegions\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageXQueryRegions\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageXQueryDims\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageXQueryDims\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageXQueryVals\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageXQueryVals\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXUploadCountByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXUploadCountByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXUploadDuration\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXUploadDuration\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXUploadSuccessRateByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXUploadSuccessRateByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXUploadFileSize\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXUploadFileSize\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXUploadErrorCodeByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXUploadErrorCodeByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXUploadErrorCodeAll\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXUploadErrorCodeAll\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXUploadSpeed\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXUploadSpeed\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXUploadSegmentSpeedByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXUploadSegmentSpeedByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXCdnSuccessRateByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXCdnSuccessRateByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXCdnSuccessRateAll\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXCdnSuccessRateAll\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXCdnErrorCodeByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXCdnErrorCodeByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXCdnErrorCodeAll\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXCdnErrorCodeAll\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXCdnDurationDetailByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXCdnDurationDetailByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXCdnDurationAll\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXCdnDurationAll\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXCdnReuseRateByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXCdnReuseRateByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXCdnReuseRateAll\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXCdnReuseRateAll\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXCdnProtocolRateByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXCdnProtocolRateByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXClientFailureRate\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXClientFailureRate\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXClientDecodeSuccessRateByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXClientDecodeSuccessRateByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXClientDecodeDurationByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXClientDecodeDurationByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXClientQueueDurationByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXClientQueueDurationByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXClientErrorCodeByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXClientErrorCodeByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXClientErrorCodeAll\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXClientErrorCodeAll\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXClientLoadDuration\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXClientLoadDuration\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXClientLoadDurationAll\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXClientLoadDurationAll\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXClientSdkVerByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXClientSdkVerByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXClientFileSize\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXClientFileSize\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXClientTopFileSize\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXClientTopFileSize\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXClientCountByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXClientCountByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXClientQualityRateByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXClientQualityRateByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXClientTopQualityURL\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXClientTopQualityURL\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXClientDemotionRateByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXClientDemotionRateByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXClientTopDemotionURL\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXClientTopDemotionURL\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXClientScoreByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXClientScoreByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXSensibleCountByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXSensibleCountByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXSensibleCacheHitRateByTime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXSensibleCacheHitRateByTime\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXSensibleTopSizeURL\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXSensibleTopSizeURL\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXSensibleTopResolutionURL\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXSensibleTopResolutionURL\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXSensibleTopRamURL\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXSensibleTopRamURL\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DescribeImageXSensibleTopUnknownURL\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeImageXSensibleTopUnknownURL\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateBatchProcessTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateBatchProcessTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetBatchProcessResult\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetBatchProcessResult\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetBatchTaskInfo\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetBatchTaskInfo\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"AIProcess\": ApiInfo(\"POST\", \"/\", {\"Action\": \"AIProcess\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateImageAITask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageAITask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateImageAIProcessQueue\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageAIProcessQueue\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DeleteImageAIProcessQueue\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageAIProcessQueue\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateImageAIProcessCallback\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageAIProcessCallback\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageAIProcessQueue\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageAIProcessQueue\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageAIProcessQueueStatus\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageAIProcessQueueStatus\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DeleteImageAIProcessDetail\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageAIProcessDetail\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageAIProcessQueues\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageAIProcessQueues\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageAITasks\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageAITasks\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageAIDetails\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageAIDetails\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageResourceStatus\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageResourceStatus\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateFileStorageClass\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateFileStorageClass\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageStorageFiles\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageStorageFiles\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"DeleteImageUploadFiles\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageUploadFiles\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"CreateFileRestore\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateFileRestore\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageUploadFiles\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageUploadFiles\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CommitImageUpload\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CommitImageUpload\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"UpdateImageFileCT\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageFileCT\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"ApplyVpcUploadInfo\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ApplyVpcUploadInfo\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"ApplyImageUpload\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ApplyImageUpload\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"GetImageUploadFile\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageUploadFile\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageUploadFiles\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageUploadFiles\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"GetImageUpdateFiles\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageUpdateFiles\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"PreviewImageUploadFile\": ApiInfo(\"GET\", \"/\", {\"Action\": \"PreviewImageUploadFile\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageEraseResult\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageEraseResult\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageService\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageService\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"GetAllImageServices\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetAllImageServices\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"CreateImageCompressTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageCompressTask\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"FetchImageUrl\": ApiInfo(\"POST\", \"/\", {\"Action\": \"FetchImageUrl\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageStorageTTL\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageStorageTTL\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetCompressTaskInfo\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetCompressTaskInfo\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"GetUrlFetchTask\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetUrlFetchTask\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"GetResourceURL\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetResourceURL\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateImageFromUri\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageFromUri\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageFileKey\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageFileKey\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"CreateImageContentTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageContentTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageContentTaskDetail\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageContentTaskDetail\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageContentBlockList\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageContentBlockList\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateImageTranscodeQueue\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageTranscodeQueue\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DeleteImageTranscodeQueue\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageTranscodeQueue\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageTranscodeQueue\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageTranscodeQueue\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageTranscodeQueueStatus\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageTranscodeQueueStatus\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageTranscodeQueues\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageTranscodeQueues\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateImageTranscodeTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageTranscodeTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageTranscodeDetails\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageTranscodeDetails\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateImageTranscodeCallback\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageTranscodeCallback\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DeleteImageTranscodeDetail\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageTranscodeDetail\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImagePSDetection\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImagePSDetection\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageSuperResolutionResult\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageSuperResolutionResult\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetDenoisingImage\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetDenoisingImage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageDuplicateDetection\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageDuplicateDetection\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"GetImageOCRV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageOCRV2\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"GetImageBgFillResult\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageBgFillResult\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetSegmentImage\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetSegmentImage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageSmartCropResult\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageSmartCropResult\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageComicResult\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageComicResult\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageEnhanceResult\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageEnhanceResult\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"GetImageQuality\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageQuality\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"GetLicensePlateDetection\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetLicensePlateDetection\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetPrivateImageType\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetPrivateImageType\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"CreateCVImageGenerateTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateCVImageGenerateTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateHiddenWatermarkImage\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateHiddenWatermarkImage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateHmExtractTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateHmExtractTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageExifData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageExifData\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageDetectResult\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageDetectResult\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetCVImageGenerateResult\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetCVImageGenerateResult\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateImageHmExtract\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageHmExtract\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetCVTextGenerateImage\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetCVTextGenerateImage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetCVImageGenerateTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetCVImageGenerateTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateImageHmEmbed\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageHmEmbed\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetCVAnimeGenerateImage\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetCVAnimeGenerateImage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetComprehensiveEnhanceImage\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetComprehensiveEnhanceImage\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageAiGenerateTask\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageAiGenerateTask\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"GetProductAIGCResult\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetProductAIGCResult\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageEraseModels\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageEraseModels\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetDedupTaskStatus\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetDedupTaskStatus\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"GetImageHmExtractTaskInfo\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageHmExtractTaskInfo\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateImageService\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageService\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DeleteImageService\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageService\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageAuthKey\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageAuthKey\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateResEventRule\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateResEventRule\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"UpdateServiceName\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateServiceName\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateStorageRules\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateStorageRules\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateStorageRulesV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateStorageRulesV2\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageObjectAccess\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageObjectAccess\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageUploadOverwrite\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageUploadOverwrite\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"UpdateImageMirrorConf\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageMirrorConf\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"GetImageServiceSubscription\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageServiceSubscription\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageAuthKey\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageAuthKey\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateImageAnalyzeTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageAnalyzeTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DeleteImageAnalyzeTaskRun\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageAnalyzeTaskRun\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DeleteImageAnalyzeTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageAnalyzeTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageAnalyzeTaskStatus\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageAnalyzeTaskStatus\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageAnalyzeTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageAnalyzeTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageAnalyzeTasks\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageAnalyzeTasks\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageAnalyzeResult\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageAnalyzeResult\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DeleteImageElements\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageElements\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DeleteImageBackgroundColors\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageBackgroundColors\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DeleteImageStyle\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageStyle\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateImageStyle\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageStyle\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageStyleMeta\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageStyleMeta\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"AddImageElements\": ApiInfo(\"POST\", \"/\", {\"Action\": \"AddImageElements\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"AddImageBackgroundColors\": ApiInfo(\"POST\", \"/\", {\"Action\": \"AddImageBackgroundColors\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageStyle\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageStyle\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"GetImageFonts\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageFonts\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageElements\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageElements\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageBackgroundColors\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageBackgroundColors\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageStyles\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageStyles\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageStyleDetail\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageStyleDetail\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"GetImageStyleResult\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetImageStyleResult\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"DownloadCert\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DownloadCert\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageAllDomainCert\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageAllDomainCert\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetCertInfo\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetCertInfo\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetAllCerts\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetAllCerts\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateImageTemplate\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageTemplate\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"DeleteTemplatesFromBin\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteTemplatesFromBin\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DeleteImageTemplate\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageTemplate\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateImageTemplatesByImport\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageTemplatesByImport\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateTemplatesFromBin\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateTemplatesFromBin\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageTemplate\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageTemplate\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"GetTemplatesFromBin\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetTemplatesFromBin\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"GetAllImageTemplates\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetAllImageTemplates\", \"Version\": \"2018-08-01\"}, {}, {}),\n    \"CreateImageAuditTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageAuditTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateVideoAuditTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateVideoAuditTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateAudioAuditTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateAudioAuditTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"DeleteImageAuditResult\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteImageAuditResult\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetSyncAuditResult\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetSyncAuditResult\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"SingleImageAudit\": ApiInfo(\"POST\", \"/\", {\"Action\": \"SingleImageAudit\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"BatchImageAudit\": ApiInfo(\"POST\", \"/\", {\"Action\": \"BatchImageAudit\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageAuditTaskStatus\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageAuditTaskStatus\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateImageAuditTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateImageAuditTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateAuditImageStatus\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateAuditImageStatus\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateVideoAuditTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateVideoAuditTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"UpdateAudioAuditTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateAudioAuditTask\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageAuditTasks\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageAuditTasks\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageAuditTaskResult\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageAuditTaskResult\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetImageAuditResult\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetImageAuditResult\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetAuditEntrysCount\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetAuditEntrysCount\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetVideoAuditResult\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetVideoAuditResult\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"GetAudioAuditResult\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetAudioAuditResult\", \"Version\": \"2023-05-01\"}, {}, {}),\n    \"CreateImageRetryAuditTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateImageRetryAuditTask\", \"Version\": \"2023-05-01\"}, {}, {})\n}"
  },
  {
    "path": "volcengine/imagex/v2/imagex_service.py",
    "content": "# coding:utf-8\nfrom volcengine.imagex.v2.imagex_trait import ImagexTrait  # Modify it if necessary\nfrom volcengine.imagex.v2.upload import Uploader\nfrom volcengine.const.Const import *\nfrom volcengine.imagex.v2.const import *\nfrom volcengine.imagex.v2.helper.file_section_reader import FileSectionReader\n\nfrom volcengine.util.Util import *\nfrom volcengine.Policy import *\n\nimport threading\nimport os\n\n\nclass ImagexService(ImagexTrait):\n    def __init__(self, region=REGION_CN_NORTH1, ak=None, sk=None):\n        super().__init__(\n            {\n                \"region\": region,\n                \"ak\": ak,\n                \"sk\": sk,\n            }\n        )\n\n    # upload\n    def apply_upload(self, params):\n        return self.imagex_get(\"ApplyImageUpload\", params, doseq=1)\n\n    def commit_upload(self, params, body):\n        return self.imagex_post(\"CommitImageUpload\", params, body)\n\n    # upload local image file\n    # noinspection DuplicatedCode\n    def upload_image(self, params, file_paths):\n        for p in file_paths:\n            if not os.path.isfile(p):\n                raise Exception(\"no such file on file path %s\" % p)\n\n        apply_upload_request = {\n            \"ServiceId\": params[\"ServiceId\"],\n            \"SessionKey\": params.get(\"SessionKey\", \"\"),\n            \"UploadNum\": len(file_paths),\n            \"StoreKeys\": params.get(\"StoreKeys\", []),\n            \"Overwrite\": str(params.get(\"Overwrite\", False)),\n        }\n        resp = self.apply_upload(apply_upload_request)\n        if \"Error\" in resp[\"ResponseMetadata\"]:\n            raise Exception(resp[\"ResponseMetadata\"])\n\n        result = resp[\"Result\"]\n        reqid = result[\"RequestId\"]\n        addr = result[\"UploadAddress\"]\n        if len(addr[\"UploadHosts\"]) == 0:\n            raise Exception(\"no upload host found, reqid %s\" % reqid)\n        elif len(addr[\"StoreInfos\"]) != len(file_paths):\n            raise Exception(\n                \"store info len %d != upload num %d, reqid %s\"\n                % (len(result[\"StoreInfos\"]), len(file_paths), reqid)\n            )\n\n        session_key = addr[\"SessionKey\"]\n        host = addr[\"UploadHosts\"][0]\n        uploader = self.do_upload(file_paths, host, addr[\"StoreInfos\"], params)\n        if len(uploader.successOids) == 0:\n            raise Exception(\"no file uploaded\")\n\n        if params.get(\"SkipCommit\", False):\n            return {\"Results\": uploader.results}\n        commit_upload_request = {\n            \"ServiceId\": params[\"ServiceId\"],\n            \"SkipMeta\": params.get(\"SkipMeta\", False),\n        }\n        commit_upload_body = {\n            \"SessionKey\": session_key,\n            \"SuccessOids\": uploader.successOids,\n            \"Functions\": params.get(\"Functions\", []),\n            \"OptionInfos\": params.get(\"OptionInfos\", []),\n        }\n        resp = self.commit_upload(commit_upload_request, json.dumps(commit_upload_body))\n        if \"Error\" in resp[\"ResponseMetadata\"]:\n            raise Exception(resp[\"ResponseMetadata\"])\n        return resp[\"Result\"]\n\n    # upload image data\n    # noinspection DuplicatedCode\n    def upload_image_data(self, params, img_datas):\n        for data in img_datas:\n            if not isinstance(data, bytes):\n                raise Exception(\"upload of non-bytes not supported\")\n\n        apply_upload_request = {\n            \"ServiceId\": params[\"ServiceId\"],\n            \"SessionKey\": params.get(\"SessionKey\", \"\"),\n            \"UploadNum\": len(img_datas),\n            \"StoreKeys\": params.get(\"StoreKeys\", []),\n            \"Overwrite\": str(params.get(\"Overwrite\", False)),\n        }\n        resp = self.apply_upload(apply_upload_request)\n        if \"Error\" in resp[\"ResponseMetadata\"]:\n            raise Exception(resp[\"ResponseMetadata\"])\n\n        result = resp[\"Result\"]\n        reqid = result[\"RequestId\"]\n        addr = result[\"UploadAddress\"]\n        if len(addr[\"UploadHosts\"]) == 0:\n            raise Exception(\"no upload host found, reqid %s\" % reqid)\n        elif len(addr[\"StoreInfos\"]) != len(img_datas):\n            raise Exception(\n                \"store info len %d != upload num %d, reqid %s\"\n                % (len(result[\"StoreInfos\"]), len(img_datas), reqid)\n            )\n\n        session_key = addr[\"SessionKey\"]\n        host = addr[\"UploadHosts\"][0]\n        uploader = self.do_upload(img_datas, host, addr[\"StoreInfos\"], params)\n        if len(uploader.successOids) == 0:\n            raise Exception(\"no file uploaded\")\n\n        if params.get(\"SkipCommit\", False):\n            return {\"Results\": uploader.results}\n        commit_upload_request = {\n            \"ServiceId\": params[\"ServiceId\"],\n            \"SkipMeta\": params.get(\"SkipMeta\", False),\n        }\n        commit_upload_body = {\n            \"SessionKey\": session_key,\n            \"SuccessOids\": uploader.successOids,\n            \"Functions\": params.get(\"Functions\", []),\n            \"OptionInfos\": params.get(\"OptionInfos\", []),\n        }\n        resp = self.commit_upload(commit_upload_request, json.dumps(commit_upload_body))\n        if \"Error\" in resp[\"ResponseMetadata\"]:\n            raise Exception(resp[\"ResponseMetadata\"])\n        return resp[\"Result\"]\n\n    def vpc_upload_image(self, upload_request):\n        if upload_request.get(\"FilePath\", \"\") == \"\" and len(upload_request.get(\"Data\", '')) == 0:\n            raise Exception(\"filePath and data can not be empty at the same time\")\n\n        if upload_request.get(\"FilePath\", \"\") != \"\" and len(upload_request.get(\"Data\", '')) != 0:\n            raise Exception(\"filePath and data can not be not empty at the same time\")\n\n        file_path = upload_request.get(\"FilePath\", \"\")\n        if file_path != \"\":\n            if not os.path.isfile(file_path):\n                raise Exception(\"no such file on file path\")\n            file_size = os.path.getsize(file_path)\n            is_file = True\n        else:\n            file_size = len(upload_request.get(\"Data\", []))\n            is_file = False\n\n        apply_vpc_request = {\n            \"ContentType\": upload_request.get(\"ContentType\", \"\"),\n            \"FileExtension\": upload_request.get(\"FileExtension\", \"\"),\n            \"FileSize\": file_size,\n            \"PartSize\": upload_request.get(\"PartSize\", 0),\n            \"Prefix\": upload_request.get(\"Prefix\", \"\"),\n            \"ServiceId\": upload_request.get(\"ServiceId\"),\n            \"StorageClass\": upload_request.get(\"StorageClass\", \"\"),\n            \"StoreKey\": upload_request.get(\"StoreKey\", \"\"),\n            \"Overwrite\": upload_request.get(\"Overwrite\", False),\n        }\n        resp = self.apply_vpc_upload_info(apply_vpc_request)\n        if \"Error\" in resp[\"ResponseMetadata\"] or resp[\"Result\"] is None or resp[\"Result\"].get(\"UploadAddr\") == \"\":\n            raise Exception(resp[\"ResponseMetadata\"])\n\n        upload_addr = resp[\"Result\"]\n        file_info = {\n            \"FilePath\": file_path,\n            \"Data\": upload_request.get(\"Data\"),\n            \"FileSize\": file_size,\n            \"IsFile\": is_file,\n        }\n\n        session_key = upload_addr[\"SessionKey\"]\n\n        commit_upload_request = {\n            \"ServiceId\": upload_request[\"ServiceId\"],\n            \"SkipMeta\": upload_request.get(\"SkipMeta\", False),\n        }\n\n        commit_upload_body = {\n            \"SessionKey\": session_key,\n            \"SuccessOids\": [],\n            \"Functions\": upload_request.get(\"Functions\", []),\n            \"OptionInfos\": upload_request.get(\"OptionInfos\", []),\n        }\n\n        try:\n            self.vpc_upload(upload_addr, file_info)\n        except Exception as e:\n            self.commit_upload(commit_upload_request, json.dumps(commit_upload_body))\n            raise Exception(e)\n\n        successOids = [upload_addr.get(\"Oid\")]\n        commit_upload_body[\"SuccessOids\"] = successOids\n        resp = self.commit_upload(commit_upload_request, json.dumps(commit_upload_body))\n        if \"Error\" in resp[\"ResponseMetadata\"]:\n            raise Exception(resp[\"ResponseMetadata\"])\n        return resp[\"Result\"]\n\n    def vpc_upload(self, vpc_upload_address, file_info):\n        if vpc_upload_address.get(\"UploadMode\") == \"direct\":\n            self.vpc_put(vpc_upload_address, file_info)\n        elif vpc_upload_address.get(\"UploadMode\") == \"part\":\n            self.vpc_part_upload(vpc_upload_address.get(\"PartUploadInfo\"), file_info)\n        else:\n            raise Exception(\"unknown upload mode\")\n\n    def vpc_part_upload(self, part_upload_info, file_info):\n        if part_upload_info is None:\n            raise Exception(\"part upload info is empty\")\n        file_size = file_info.get(\"FileSize\")\n        chunk_size = part_upload_info.get(\"PartSize\")\n        total_num = file_size // chunk_size\n        last_part_size = file_size % chunk_size\n        part_put_urls = part_upload_info.get(\"PartPutURLs\", [])\n        if (last_part_size == 0 and total_num != len(part_put_urls) or (\n                last_part_size != 0 and total_num + 1 != len(part_put_urls))):\n            raise Exception(\"mismatch part upload urls\")\n\n        offset = 0\n        etag_list = []\n        for i in range(len(part_put_urls)):\n            part_put_url = part_put_urls[i]\n            if i == len(part_put_urls) - 1:\n                chunk_size = file_size - offset\n            if file_info.get(\"IsFile\"):\n                with open(file_info.get(\"FilePath\"), 'rb') as f:\n                    sr = FileSectionReader(f, chunk_size, init_offset=offset, can_reset=True)\n                    etag = self.vpc_part_put(part_put_url, sr)\n            else:\n                etag = self.vpc_part_put(part_put_url, file_info.get(\"Data\")[offset:offset + chunk_size])\n            offset = offset + chunk_size\n            etag_list.append(etag)\n\n        post_data = self.vpc_generate_body(etag_list)\n        post_url_headers_list = part_upload_info.get(\"CompletePartURLHeaders\", [])\n        post_headers = {}\n        for post_url_header in post_url_headers_list:\n            post_headers[post_url_header[\"Key\"]] = post_url_header[\"Value\"]\n        self.vpc_post(part_upload_info.get(\"CompletePartURL\"), post_data, post_headers)\n\n    def vpc_post(self, post_url, data, headers):\n        resp = self.session.post(post_url, data=data, headers=headers)\n        if resp.status_code != 200:\n            log_id = resp.headers.get(\"x-tos-request-id\", \"\")\n            raise Exception(\"vpc post error, logId: {}\".format(log_id))\n\n    def vpc_generate_body(self, etag_list):\n        if len(etag_list) == 0:\n            raise Exception('etag list empty')\n        s = []\n        for i in range(len(etag_list)):\n            s.append(\"{\" + '\"PartNumber\": {}, \"ETag\": {}'.format(i + 1, etag_list[i]) + \"}\")\n        comma = ','\n\n        return '{\"Parts\":[' + comma.join(s) + ']}'\n\n    def vpc_part_put(self, part_put_url, content):\n        resp = self.session.put(part_put_url, data=content)\n        if resp.status_code != 200:\n            log_id = resp.headers.get(\"x-tos-request-id\", \"\")\n            raise Exception(\"put error: code resp.status_code{} logId {}\".format(resp.status_code, log_id))\n\n        etag = resp.headers.get(\"ETag\", \"\")\n        return etag\n\n    def vpc_put(self, vpc_upload_address, file_info):\n        put_url = vpc_upload_address.get(\"PutURL\")\n        put_url_headers_list = vpc_upload_address.get(\"PutURLHeaders\", [])\n        put_headers = {}\n        for put_url_header in put_url_headers_list:\n            put_headers[put_url_header[\"Key\"]] = put_url_header[\"Value\"]\n\n        if file_info.get(\"IsFile\"):\n            with open(file_info.get(\"FilePath\"), 'rb') as f:\n                resp = self.session.put(put_url, headers=put_headers, data=f)\n        else:\n            resp = self.session.put(put_url, headers=put_headers, data=file_info.get(\"Data\"))\n\n        if resp.status_code != 200:\n            log_id = resp.headers.get(\"x-tos-request-id\", \"\")\n            raise Exception(\"put error: code resp.status_code{} logId {}\".format(resp.status_code, log_id))\n\n    def do_upload(self, file_paths_or_bytes, host, store_infos, params=None):\n        threads = []\n        uploader = Uploader(self, host, store_infos, file_paths_or_bytes, params)\n        for i in range(UPLOAD_THREADS):\n            thread = threading.Thread(target=uploader.async_upload)\n            thread.start()\n            threads.append(thread)\n        for i in range(UPLOAD_THREADS):\n            threads[i].join()\n        return uploader\n\n    def get_upload_auth_token(self, params):\n        apply_token = self.get_sign_url(\"ApplyImageUpload\", params)\n        commit_token = self.get_sign_url(\"CommitImageUpload\", params)\n\n        ret = {\n            \"Version\": \"v1\",\n            \"ApplyUploadToken\": apply_token,\n            \"CommitUploadToken\": commit_token,\n        }\n        data = json.dumps(ret)\n        if sys.version_info[0] == 3:\n            return base64.b64encode(data.encode(\"utf-8\")).decode(\"utf-8\")\n        else:\n            return base64.b64encode(data.decode(\"utf-8\"))\n\n    # tag 字段如下，可选择所需字段传入\n    # upload_policy_dict = {\n    #     \"FileSizeUpLimit\": \"xxx\",\n    #     \"FileSizeBottomLimit\": \"xxx\",\n    #     \"ContentTypeBlackList\":[\n    #         \"xxx\"\n    #     ],\n    #     \"ContentTypeWhiteList\":[\n    #         \"xxx\"\n    #     ]\n    # }\n    # policy_str = json.dumps(upload_policy_dict)\n    #\n    # tag = {\n    #     \"UploadOverwrite\": \"true\",\n    #     \"UploadPolicy\": policy_str,\n    # }\n    def get_upload_auth(self, service_ids, expire=60 * 60, key_ptn=\"\", tag=dict):\n        apply_res = []\n        commit_res = []\n        if len(service_ids) == 0:\n            apply_res.append(ResourceServiceIdTRN % \"*\")\n            commit_res.append(ResourceServiceIdTRN % \"*\")\n        else:\n            for sid in service_ids:\n                apply_res.append(ResourceServiceIdTRN % sid)\n                commit_res.append(ResourceServiceIdTRN % sid)\n        apply_res.append(ResourceStoreKeyTRN % key_ptn)\n\n        inline_policy = Policy(\n            [\n                Statement.new_allow_statement([\"ImageX:ApplyImageUpload\"], apply_res),\n                Statement.new_allow_statement([\"ImageX:CommitImageUpload\"], commit_res),\n            ]\n        )\n        for k, v in tag.items():\n            inline_policy.statements.append(\n                Statement.new_allow_statement([k], [str(v)])\n            )\n        return self.sign_sts2(inline_policy, expire)\n"
  },
  {
    "path": "volcengine/imagex/v2/imagex_trait.py",
    "content": "# coding:utf-8\n\nimport json\nfrom volcengine.base.Service import Service\nfrom volcengine.const.Const import *\nfrom volcengine.util.Util import *\nfrom volcengine.Policy import *\nfrom volcengine.imagex.v2.imagex_config import *  # Modify it if necessary\n\n\nclass ImagexTrait(Service):\n    def __init__(self, param=None):\n        if param is None:\n            param = {}\n        self.param = param\n        region = param.get('region', REGION_CN_NORTH1)\n        self.service_info = ImagexTrait.get_service_info(region)\n        self.api_info = ImagexTrait.get_api_info()\n        if param.get('ak', None) and param.get('sk', None):\n            self.set_ak(param['ak'])\n            self.set_sk(param['sk'])\n        super(ImagexTrait, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info(region):\n        service_info = service_info_map.get(region, None)\n        if not service_info:\n            raise Exception('Not support region %s' % region)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        return api_info\n\n    def imagex_get(self, action, params, doseq=0):\n        res = self.get(action, params, doseq)\n        try:\n            res_json = json.loads(res)\n        except Exception as e:\n            raise Exception(\"res body is not json, %s, %s\" % (e, res))\n        if \"ResponseMetadata\" not in res_json:\n            raise Exception(\"ResponseMetadata not in resp body, action %s, resp %s\" % (action, res))\n        elif \"Error\" in res_json[\"ResponseMetadata\"]:\n            raise Exception(\"%s failed, %s\" %(action,res))\n        return res_json\n\n    def imagex_post(self, action, params, body):\n        res = self.json(action, params, body)\n        try:\n            res_json = json.loads(res)\n        except Exception as e:\n            raise Exception(\"res body is not json, %s, %s\" % (e, res))\n        if \"ResponseMetadata\" not in res_json:\n            raise Exception(\"ResponseMetadata not in resp body, action %s, resp %s\" % (action, res))\n        elif \"Error\" in res_json[\"ResponseMetadata\"]:\n            raise Exception(\"%s failed, %s\" %(action,res))\n        return res_json\n\n\n    def update_image_domain_volc_origin(self, query={}, body={}):\n        return self.imagex_post('UpdateImageDomainVolcOrigin', query, json.dumps(body))\n            \n    def del_domain(self, query={}, body={}):\n        return self.imagex_post('DelDomain', query, json.dumps(body))\n            \n    def add_domain_v_1(self, query={}, body={}):\n        return self.imagex_post('AddDomainV1', query, json.dumps(body))\n            \n    def update_image_domain_ip_auth(self, query={}, body={}):\n        return self.imagex_post('UpdateImageDomainIPAuth', query, json.dumps(body))\n            \n    def update_refer(self, query={}, body={}):\n        return self.imagex_post('UpdateRefer', query, json.dumps(body))\n            \n    def update_image_domain_ua_access(self, query={}, body={}):\n        return self.imagex_post('UpdateImageDomainUaAccess', query, json.dumps(body))\n            \n    def update_https(self, query={}, body={}):\n        return self.imagex_post('UpdateHttps', query, json.dumps(body))\n            \n    def update_image_domain_download_speed_limit(self, query={}, body={}):\n        return self.imagex_post('UpdateImageDomainDownloadSpeedLimit', query, json.dumps(body))\n            \n    def update_response_header(self, query={}, body={}):\n        return self.imagex_post('UpdateResponseHeader', query, json.dumps(body))\n            \n    def update_image_domain_area_access(self, query={}, body={}):\n        return self.imagex_post('UpdateImageDomainAreaAccess', query, json.dumps(body))\n            \n    def update_domain_adaptive_fmt(self, query={}, body={}):\n        return self.imagex_post('UpdateDomainAdaptiveFmt', query, json.dumps(body))\n            \n    def update_image_domain_config(self, query={}, body={}):\n        return self.imagex_post('UpdateImageDomainConfig', query, json.dumps(body))\n            \n    def update_advance(self, query={}, body={}):\n        return self.imagex_post('UpdateAdvance', query, json.dumps(body))\n            \n    def update_image_domain_bandwidth_limit(self, query={}, body={}):\n        return self.imagex_post('UpdateImageDomainBandwidthLimit', query, json.dumps(body))\n            \n    def update_slim_config(self, query={}, body={}):\n        return self.imagex_post('UpdateSlimConfig', query, json.dumps(body))\n            \n    def set_default_domain(self, body={}):\n        return self.imagex_post('SetDefaultDomain', [], json.dumps(body))\n            \n    def describe_image_volc_cdn_access_log(self, query={}, body={}):\n        return self.imagex_post('DescribeImageVolcCdnAccessLog', query, json.dumps(body))\n            \n    def verify_domain_owner(self, query={}, body={}):\n        return self.imagex_post('VerifyDomainOwner', query, json.dumps(body))\n            \n    def get_response_header_validate_keys(self):\n        return self.imagex_get('GetResponseHeaderValidateKeys', {})\n            \n    def get_domain_config(self, query={}):\n        return self.imagex_get('GetDomainConfig', query)\n            \n    def get_domain_owner_verify_content(self, query={}):\n        return self.imagex_get('GetDomainOwnerVerifyContent', query)\n            \n    def get_service_domains(self, query={}):\n        return self.imagex_get('GetServiceDomains', query)\n            \n    def delete_image_monitor_rules(self, query={}, body={}):\n        return self.imagex_post('DeleteImageMonitorRules', query, json.dumps(body))\n            \n    def delete_image_monitor_records(self, query={}, body={}):\n        return self.imagex_post('DeleteImageMonitorRecords', query, json.dumps(body))\n            \n    def create_image_monitor_rule(self, query={}, body={}):\n        return self.imagex_post('CreateImageMonitorRule', query, json.dumps(body))\n            \n    def update_image_monitor_rule(self, query={}, body={}):\n        return self.imagex_post('UpdateImageMonitorRule', query, json.dumps(body))\n            \n    def update_image_monitor_rule_status(self, query={}, body={}):\n        return self.imagex_post('UpdateImageMonitorRuleStatus', query, json.dumps(body))\n            \n    def get_image_alert_records(self, query={}, body={}):\n        return self.imagex_post('GetImageAlertRecords', query, json.dumps(body))\n            \n    def get_image_monitor_rules(self, query={}):\n        return self.imagex_get('GetImageMonitorRules', query)\n            \n    def create_image_setting_rule(self, query={}, body={}):\n        return self.imagex_post('CreateImageSettingRule', query, json.dumps(body))\n            \n    def delete_image_setting_rule(self, query={}, body={}):\n        return self.imagex_post('DeleteImageSettingRule', query, json.dumps(body))\n            \n    def update_image_setting_rule_priority(self, query={}, body={}):\n        return self.imagex_post('UpdateImageSettingRulePriority', query, json.dumps(body))\n            \n    def update_image_setting_rule(self, query={}, body={}):\n        return self.imagex_post('UpdateImageSettingRule', query, json.dumps(body))\n            \n    def get_image_settings(self, query={}):\n        return self.imagex_get('GetImageSettings', query)\n            \n    def get_image_setting_rule_history(self, query={}):\n        return self.imagex_get('GetImageSettingRuleHistory', query)\n            \n    def get_image_setting_rules(self, query={}):\n        return self.imagex_get('GetImageSettingRules', query)\n            \n    def create_image_migrate_task(self, body={}):\n        return self.imagex_post('CreateImageMigrateTask', [], json.dumps(body))\n            \n    def delete_image_migrate_task(self, query={}, body={}):\n        return self.imagex_post('DeleteImageMigrateTask', query, json.dumps(body))\n            \n    def export_failed_migrate_task(self, query={}):\n        return self.imagex_get('ExportFailedMigrateTask', query)\n            \n    def update_image_task_strategy(self, body={}):\n        return self.imagex_post('UpdateImageTaskStrategy', [], json.dumps(body))\n            \n    def terminate_image_migrate_task(self, query={}, body={}):\n        return self.imagex_post('TerminateImageMigrateTask', query, json.dumps(body))\n            \n    def get_vendor_buckets(self, body={}):\n        return self.imagex_post('GetVendorBuckets', [], json.dumps(body))\n            \n    def get_image_migrate_tasks(self, query={}):\n        return self.imagex_get('GetImageMigrateTasks', query)\n            \n    def rerun_image_migrate_task(self, query={}, body={}):\n        return self.imagex_post('RerunImageMigrateTask', query, json.dumps(body))\n            \n    def get_image_add_on_tag(self, query={}):\n        return self.imagex_get('GetImageAddOnTag', query)\n            \n    def describe_imagex_cube_usage(self, query={}):\n        return self.imagex_get('DescribeImageXCubeUsage', query)\n            \n    def describe_imagex_source_request_bandwidth(self, query={}):\n        return self.imagex_get('DescribeImageXSourceRequestBandwidth', query)\n            \n    def describe_imagex_source_request_traffic(self, query={}):\n        return self.imagex_get('DescribeImageXSourceRequestTraffic', query)\n            \n    def describe_imagex_source_request(self, query={}):\n        return self.imagex_get('DescribeImageXSourceRequest', query)\n            \n    def describe_imagex_storage_usage(self, query={}):\n        return self.imagex_get('DescribeImageXStorageUsage', query)\n            \n    def describe_imagex_bucket_retrieval_usage(self, query={}):\n        return self.imagex_get('DescribeImageXBucketRetrievalUsage', query)\n            \n    def describe_imagex_add_on_qps_usage(self, query={}):\n        return self.imagex_get('DescribeImageXAddOnQPSUsage', query)\n            \n    def describe_imagexai_request_cnt_usage(self, query={}):\n        return self.imagex_get('DescribeImageXAIRequestCntUsage', query)\n            \n    def describe_imagex_summary(self, query={}):\n        return self.imagex_get('DescribeImageXSummary', query)\n            \n    def describe_imagex_domain_traffic_data(self, query={}):\n        return self.imagex_get('DescribeImageXDomainTrafficData', query)\n            \n    def describe_imagex_domain_bandwidth_data(self, query={}):\n        return self.imagex_get('DescribeImageXDomainBandwidthData', query)\n            \n    def describe_imagex_domain_bandwidth_ninety_five_data(self, query={}):\n        return self.imagex_get('DescribeImageXDomainBandwidthNinetyFiveData', query)\n            \n    def describe_imagex_bucket_usage(self, query={}):\n        return self.imagex_get('DescribeImageXBucketUsage', query)\n            \n    def describe_imagex_billing_request_cnt_usage(self, query={}):\n        return self.imagex_get('DescribeImageXBillingRequestCntUsage', query)\n            \n    def describe_imagex_request_cnt_usage(self, query={}):\n        return self.imagex_get('DescribeImageXRequestCntUsage', query)\n            \n    def describe_imagex_base_op_usage(self, query={}):\n        return self.imagex_get('DescribeImageXBaseOpUsage', query)\n            \n    def describe_imagex_compress_usage(self, query={}):\n        return self.imagex_get('DescribeImageXCompressUsage', query)\n            \n    def describe_imagex_screenshot_usage(self, query={}):\n        return self.imagex_get('DescribeImageXScreenshotUsage', query)\n            \n    def describe_imagex_video_clip_duration_usage(self, query={}):\n        return self.imagex_get('DescribeImageXVideoClipDurationUsage', query)\n            \n    def describe_imagex_multi_compress_usage(self, query={}):\n        return self.imagex_get('DescribeImageXMultiCompressUsage', query)\n            \n    def describe_imagex_edge_request(self, query={}):\n        return self.imagex_get('DescribeImageXEdgeRequest', query)\n            \n    def describe_imagex_edge_request_bandwidth(self, query={}):\n        return self.imagex_get('DescribeImageXEdgeRequestBandwidth', query)\n            \n    def describe_imagex_edge_request_traffic(self, query={}):\n        return self.imagex_get('DescribeImageXEdgeRequestTraffic', query)\n            \n    def describe_imagex_edge_request_regions(self, query={}):\n        return self.imagex_get('DescribeImageXEdgeRequestRegions', query)\n            \n    def describe_imagex_mirror_request_http_code_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXMirrorRequestHttpCodeByTime', [], json.dumps(body))\n            \n    def describe_imagex_mirror_request_http_code_overview(self, body={}):\n        return self.imagex_post('DescribeImageXMirrorRequestHttpCodeOverview', [], json.dumps(body))\n            \n    def describe_imagex_mirror_request_traffic(self, body={}):\n        return self.imagex_post('DescribeImageXMirrorRequestTraffic', [], json.dumps(body))\n            \n    def describe_imagex_mirror_request_bandwidth(self, body={}):\n        return self.imagex_post('DescribeImageXMirrorRequestBandwidth', [], json.dumps(body))\n            \n    def describe_imagex_server_qps_usage(self, query={}):\n        return self.imagex_get('DescribeImageXServerQPSUsage', query)\n            \n    def describe_imagex_hit_rate_traffic_data(self, query={}):\n        return self.imagex_get('DescribeImageXHitRateTrafficData', query)\n            \n    def describe_imagex_hit_rate_request_data(self, query={}):\n        return self.imagex_get('DescribeImageXHitRateRequestData', query)\n            \n    def describe_imagexcdn_top_request_data(self, query={}):\n        return self.imagex_get('DescribeImageXCDNTopRequestData', query)\n            \n    def describe_imagex_heif_encode_file_in_size_by_time(self, query={}, body={}):\n        return self.imagex_post('DescribeImageXHeifEncodeFileInSizeByTime', query, json.dumps(body))\n            \n    def describe_imagex_heif_encode_file_out_size_by_time(self, query={}, body={}):\n        return self.imagex_post('DescribeImageXHeifEncodeFileOutSizeByTime', query, json.dumps(body))\n            \n    def describe_imagex_heif_encode_success_count_by_time(self, query={}, body={}):\n        return self.imagex_post('DescribeImageXHeifEncodeSuccessCountByTime', query, json.dumps(body))\n            \n    def describe_imagex_heif_encode_success_rate_by_time(self, query={}, body={}):\n        return self.imagex_post('DescribeImageXHeifEncodeSuccessRateByTime', query, json.dumps(body))\n            \n    def describe_imagex_heif_encode_duration_by_time(self, query={}, body={}):\n        return self.imagex_post('DescribeImageXHeifEncodeDurationByTime', query, json.dumps(body))\n            \n    def describe_imagex_heif_encode_error_code_by_time(self, query={}, body={}):\n        return self.imagex_post('DescribeImageXHeifEncodeErrorCodeByTime', query, json.dumps(body))\n            \n    def describe_imagex_exceed_resolution_ratio_all(self, body={}):\n        return self.imagex_post('DescribeImageXExceedResolutionRatioAll', [], json.dumps(body))\n            \n    def describe_imagex_exceed_file_size(self, body={}):\n        return self.imagex_post('DescribeImageXExceedFileSize', [], json.dumps(body))\n            \n    def describe_imagex_exceed_count_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXExceedCountByTime', [], json.dumps(body))\n            \n    def describe_imagex_service_quality(self, query={}):\n        return self.imagex_get('DescribeImageXServiceQuality', query)\n            \n    def get_imagex_query_apps(self, query={}):\n        return self.imagex_get('GetImageXQueryApps', query)\n            \n    def get_imagex_query_regions(self, query={}):\n        return self.imagex_get('GetImageXQueryRegions', query)\n            \n    def get_imagex_query_dims(self, query={}):\n        return self.imagex_get('GetImageXQueryDims', query)\n            \n    def get_imagex_query_vals(self, query={}):\n        return self.imagex_get('GetImageXQueryVals', query)\n            \n    def describe_imagex_upload_count_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXUploadCountByTime', [], json.dumps(body))\n            \n    def describe_imagex_upload_duration(self, body={}):\n        return self.imagex_post('DescribeImageXUploadDuration', [], json.dumps(body))\n            \n    def describe_imagex_upload_success_rate_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXUploadSuccessRateByTime', [], json.dumps(body))\n            \n    def describe_imagex_upload_file_size(self, body={}):\n        return self.imagex_post('DescribeImageXUploadFileSize', [], json.dumps(body))\n            \n    def describe_imagex_upload_error_code_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXUploadErrorCodeByTime', [], json.dumps(body))\n            \n    def describe_imagex_upload_error_code_all(self, body={}):\n        return self.imagex_post('DescribeImageXUploadErrorCodeAll', [], json.dumps(body))\n            \n    def describe_imagex_upload_speed(self, body={}):\n        return self.imagex_post('DescribeImageXUploadSpeed', [], json.dumps(body))\n            \n    def describe_imagex_upload_segment_speed_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXUploadSegmentSpeedByTime', [], json.dumps(body))\n            \n    def describe_imagex_cdn_success_rate_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXCdnSuccessRateByTime', [], json.dumps(body))\n            \n    def describe_imagex_cdn_success_rate_all(self, body={}):\n        return self.imagex_post('DescribeImageXCdnSuccessRateAll', [], json.dumps(body))\n            \n    def describe_imagex_cdn_error_code_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXCdnErrorCodeByTime', [], json.dumps(body))\n            \n    def describe_imagex_cdn_error_code_all(self, body={}):\n        return self.imagex_post('DescribeImageXCdnErrorCodeAll', [], json.dumps(body))\n            \n    def describe_imagex_cdn_duration_detail_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXCdnDurationDetailByTime', [], json.dumps(body))\n            \n    def describe_imagex_cdn_duration_all(self, body={}):\n        return self.imagex_post('DescribeImageXCdnDurationAll', [], json.dumps(body))\n            \n    def describe_imagex_cdn_reuse_rate_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXCdnReuseRateByTime', [], json.dumps(body))\n            \n    def describe_imagex_cdn_reuse_rate_all(self, body={}):\n        return self.imagex_post('DescribeImageXCdnReuseRateAll', [], json.dumps(body))\n            \n    def describe_imagex_cdn_protocol_rate_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXCdnProtocolRateByTime', [], json.dumps(body))\n            \n    def describe_imagex_client_failure_rate(self, body={}):\n        return self.imagex_post('DescribeImageXClientFailureRate', [], json.dumps(body))\n            \n    def describe_imagex_client_decode_success_rate_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXClientDecodeSuccessRateByTime', [], json.dumps(body))\n            \n    def describe_imagex_client_decode_duration_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXClientDecodeDurationByTime', [], json.dumps(body))\n            \n    def describe_imagex_client_queue_duration_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXClientQueueDurationByTime', [], json.dumps(body))\n            \n    def describe_imagex_client_error_code_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXClientErrorCodeByTime', [], json.dumps(body))\n            \n    def describe_imagex_client_error_code_all(self, body={}):\n        return self.imagex_post('DescribeImageXClientErrorCodeAll', [], json.dumps(body))\n            \n    def describe_imagex_client_load_duration(self, body={}):\n        return self.imagex_post('DescribeImageXClientLoadDuration', [], json.dumps(body))\n            \n    def describe_imagex_client_load_duration_all(self, body={}):\n        return self.imagex_post('DescribeImageXClientLoadDurationAll', [], json.dumps(body))\n            \n    def describe_imagex_client_sdk_ver_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXClientSdkVerByTime', [], json.dumps(body))\n            \n    def describe_imagex_client_file_size(self, body={}):\n        return self.imagex_post('DescribeImageXClientFileSize', [], json.dumps(body))\n            \n    def describe_imagex_client_top_file_size(self, body={}):\n        return self.imagex_post('DescribeImageXClientTopFileSize', [], json.dumps(body))\n            \n    def describe_imagex_client_count_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXClientCountByTime', [], json.dumps(body))\n            \n    def describe_imagex_client_quality_rate_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXClientQualityRateByTime', [], json.dumps(body))\n            \n    def describe_imagex_client_top_quality_url(self, body={}):\n        return self.imagex_post('DescribeImageXClientTopQualityURL', [], json.dumps(body))\n            \n    def describe_imagex_client_demotion_rate_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXClientDemotionRateByTime', [], json.dumps(body))\n            \n    def describe_imagex_client_top_demotion_url(self, body={}):\n        return self.imagex_post('DescribeImageXClientTopDemotionURL', [], json.dumps(body))\n            \n    def describe_imagex_client_score_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXClientScoreByTime', [], json.dumps(body))\n            \n    def describe_imagex_sensible_count_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXSensibleCountByTime', [], json.dumps(body))\n            \n    def describe_imagex_sensible_cache_hit_rate_by_time(self, body={}):\n        return self.imagex_post('DescribeImageXSensibleCacheHitRateByTime', [], json.dumps(body))\n            \n    def describe_imagex_sensible_top_size_url(self, body={}):\n        return self.imagex_post('DescribeImageXSensibleTopSizeURL', [], json.dumps(body))\n            \n    def describe_imagex_sensible_top_resolution_url(self, body={}):\n        return self.imagex_post('DescribeImageXSensibleTopResolutionURL', [], json.dumps(body))\n            \n    def describe_imagex_sensible_top_ram_url(self, body={}):\n        return self.imagex_post('DescribeImageXSensibleTopRamURL', [], json.dumps(body))\n            \n    def describe_imagex_sensible_top_unknown_url(self, body={}):\n        return self.imagex_post('DescribeImageXSensibleTopUnknownURL', [], json.dumps(body))\n            \n    def create_batch_process_task(self, query={}, body={}):\n        return self.imagex_post('CreateBatchProcessTask', query, json.dumps(body))\n            \n    def get_batch_process_result(self, query={}, body={}):\n        return self.imagex_post('GetBatchProcessResult', query, json.dumps(body))\n            \n    def get_batch_task_info(self, query={}):\n        return self.imagex_get('GetBatchTaskInfo', query)\n            \n    def ai_process(self, query={}, body={}):\n        return self.imagex_post('AIProcess', query, json.dumps(body))\n            \n    def create_image_ai_task(self, query={}, body={}):\n        return self.imagex_post('CreateImageAITask', query, json.dumps(body))\n            \n    def create_image_ai_process_queue(self, query={}, body={}):\n        return self.imagex_post('CreateImageAIProcessQueue', query, json.dumps(body))\n            \n    def delete_image_ai_process_queue(self, query={}, body={}):\n        return self.imagex_post('DeleteImageAIProcessQueue', query, json.dumps(body))\n            \n    def create_image_ai_process_callback(self, query={}, body={}):\n        return self.imagex_post('CreateImageAIProcessCallback', query, json.dumps(body))\n            \n    def update_image_ai_process_queue(self, query={}, body={}):\n        return self.imagex_post('UpdateImageAIProcessQueue', query, json.dumps(body))\n            \n    def update_image_ai_process_queue_status(self, query={}, body={}):\n        return self.imagex_post('UpdateImageAIProcessQueueStatus', query, json.dumps(body))\n            \n    def delete_image_ai_process_detail(self, query={}, body={}):\n        return self.imagex_post('DeleteImageAIProcessDetail', query, json.dumps(body))\n            \n    def get_image_ai_process_queues(self, query={}):\n        return self.imagex_get('GetImageAIProcessQueues', query)\n            \n    def get_image_ai_tasks(self, query={}):\n        return self.imagex_get('GetImageAITasks', query)\n            \n    def get_image_ai_details(self, query={}):\n        return self.imagex_get('GetImageAIDetails', query)\n            \n    def update_image_resource_status(self, query={}, body={}):\n        return self.imagex_post('UpdateImageResourceStatus', query, json.dumps(body))\n            \n    def update_file_storage_class(self, query={}, body={}):\n        return self.imagex_post('UpdateFileStorageClass', query, json.dumps(body))\n            \n    def get_image_storage_files(self, query={}):\n        return self.imagex_get('GetImageStorageFiles', query)\n            \n    def delete_image_upload_files(self, query={}, body={}):\n        return self.imagex_post('DeleteImageUploadFiles', query, json.dumps(body))\n            \n    def create_file_restore(self, query={}, body={}):\n        return self.imagex_post('CreateFileRestore', query, json.dumps(body))\n            \n    def update_image_upload_files(self, query={}, body={}):\n        return self.imagex_post('UpdateImageUploadFiles', query, json.dumps(body))\n            \n    def commit_image_upload(self, query={}, body={}):\n        return self.imagex_post('CommitImageUpload', query, json.dumps(body))\n            \n    def update_image_file_ct(self, query={}, body={}):\n        return self.imagex_post('UpdateImageFileCT', query, json.dumps(body))\n            \n    def apply_vpc_upload_info(self, query={}):\n        return self.imagex_get('ApplyVpcUploadInfo', query)\n            \n    def apply_image_upload(self, query={}):\n        return self.imagex_get('ApplyImageUpload', query)\n            \n    def get_image_upload_file(self, query={}):\n        return self.imagex_get('GetImageUploadFile', query)\n            \n    def get_image_upload_files(self, query={}):\n        return self.imagex_get('GetImageUploadFiles', query)\n            \n    def get_image_update_files(self, query={}):\n        return self.imagex_get('GetImageUpdateFiles', query)\n            \n    def preview_image_upload_file(self, query={}):\n        return self.imagex_get('PreviewImageUploadFile', query)\n            \n    def get_image_erase_result(self, body={}):\n        return self.imagex_post('GetImageEraseResult', [], json.dumps(body))\n            \n    def get_image_service(self, query={}):\n        return self.imagex_get('GetImageService', query)\n            \n    def get_all_image_services(self, query={}):\n        return self.imagex_get('GetAllImageServices', query)\n            \n    def create_image_compress_task(self, query={}, body={}):\n        return self.imagex_post('CreateImageCompressTask', query, json.dumps(body))\n            \n    def fetch_image_url(self, body={}):\n        return self.imagex_post('FetchImageUrl', [], json.dumps(body))\n            \n    def update_image_storage_ttl(self, body={}):\n        return self.imagex_post('UpdateImageStorageTTL', [], json.dumps(body))\n            \n    def get_compress_task_info(self, query={}):\n        return self.imagex_get('GetCompressTaskInfo', query)\n            \n    def get_url_fetch_task(self, query={}):\n        return self.imagex_get('GetUrlFetchTask', query)\n            \n    def get_resource_url(self, query={}):\n        return self.imagex_get('GetResourceURL', query)\n            \n    def create_image_from_uri(self, query={}, body={}):\n        return self.imagex_post('CreateImageFromUri', query, json.dumps(body))\n            \n    def update_image_file_key(self, query={}, body={}):\n        return self.imagex_post('UpdateImageFileKey', query, json.dumps(body))\n            \n    def create_image_content_task(self, query={}, body={}):\n        return self.imagex_post('CreateImageContentTask', query, json.dumps(body))\n            \n    def get_image_content_task_detail(self, body={}):\n        return self.imagex_post('GetImageContentTaskDetail', [], json.dumps(body))\n            \n    def get_image_content_block_list(self, query={}, body={}):\n        return self.imagex_post('GetImageContentBlockList', query, json.dumps(body))\n            \n    def create_image_transcode_queue(self, body={}):\n        return self.imagex_post('CreateImageTranscodeQueue', [], json.dumps(body))\n            \n    def delete_image_transcode_queue(self, body={}):\n        return self.imagex_post('DeleteImageTranscodeQueue', [], json.dumps(body))\n            \n    def update_image_transcode_queue(self, body={}):\n        return self.imagex_post('UpdateImageTranscodeQueue', [], json.dumps(body))\n            \n    def update_image_transcode_queue_status(self, body={}):\n        return self.imagex_post('UpdateImageTranscodeQueueStatus', [], json.dumps(body))\n            \n    def get_image_transcode_queues(self, query={}):\n        return self.imagex_get('GetImageTranscodeQueues', query)\n            \n    def create_image_transcode_task(self, body={}):\n        return self.imagex_post('CreateImageTranscodeTask', [], json.dumps(body))\n            \n    def get_image_transcode_details(self, query={}):\n        return self.imagex_get('GetImageTranscodeDetails', query)\n            \n    def create_image_transcode_callback(self, body={}):\n        return self.imagex_post('CreateImageTranscodeCallback', [], json.dumps(body))\n            \n    def delete_image_transcode_detail(self, body={}):\n        return self.imagex_post('DeleteImageTranscodeDetail', [], json.dumps(body))\n            \n    def get_image_ps_detection(self, query={}, body={}):\n        return self.imagex_post('GetImagePSDetection', query, json.dumps(body))\n            \n    def get_image_super_resolution_result(self, body={}):\n        return self.imagex_post('GetImageSuperResolutionResult', [], json.dumps(body))\n            \n    def get_denoising_image(self, query={}, body={}):\n        return self.imagex_post('GetDenoisingImage', query, json.dumps(body))\n            \n    def get_image_duplicate_detection(self, query={}, body={}):\n        return self.imagex_post('GetImageDuplicateDetection', query, json.dumps(body))\n            \n    def get_image_ocr_v2(self, query={}, body={}):\n        return self.imagex_post('GetImageOCRV2', query, json.dumps(body))\n            \n    def get_image_bg_fill_result(self, body={}):\n        return self.imagex_post('GetImageBgFillResult', [], json.dumps(body))\n            \n    def get_segment_image(self, query={}, body={}):\n        return self.imagex_post('GetSegmentImage', query, json.dumps(body))\n            \n    def get_image_smart_crop_result(self, body={}):\n        return self.imagex_post('GetImageSmartCropResult', [], json.dumps(body))\n            \n    def get_image_comic_result(self, body={}):\n        return self.imagex_post('GetImageComicResult', [], json.dumps(body))\n            \n    def get_image_enhance_result(self, body={}):\n        return self.imagex_post('GetImageEnhanceResult', [], json.dumps(body))\n            \n    def get_image_quality(self, query={}, body={}):\n        return self.imagex_post('GetImageQuality', query, json.dumps(body))\n            \n    def get_license_plate_detection(self, query={}, body={}):\n        return self.imagex_post('GetLicensePlateDetection', query, json.dumps(body))\n            \n    def get_private_image_type(self, query={}, body={}):\n        return self.imagex_post('GetPrivateImageType', query, json.dumps(body))\n            \n    def create_cv_image_generate_task(self, query={}, body={}):\n        return self.imagex_post('CreateCVImageGenerateTask', query, json.dumps(body))\n            \n    def create_hidden_watermark_image(self, query={}, body={}):\n        return self.imagex_post('CreateHiddenWatermarkImage', query, json.dumps(body))\n            \n    def create_hm_extract_task(self, query={}, body={}):\n        return self.imagex_post('CreateHmExtractTask', query, json.dumps(body))\n            \n    def update_image_exif_data(self, query={}, body={}):\n        return self.imagex_post('UpdateImageExifData', query, json.dumps(body))\n            \n    def get_image_detect_result(self, query={}, body={}):\n        return self.imagex_post('GetImageDetectResult', query, json.dumps(body))\n            \n    def get_cv_image_generate_result(self, query={}, body={}):\n        return self.imagex_post('GetCVImageGenerateResult', query, json.dumps(body))\n            \n    def create_image_hm_extract(self, query={}, body={}):\n        return self.imagex_post('CreateImageHmExtract', query, json.dumps(body))\n            \n    def get_cv_text_generate_image(self, query={}, body={}):\n        return self.imagex_post('GetCVTextGenerateImage', query, json.dumps(body))\n            \n    def get_cv_image_generate_task(self, query={}, body={}):\n        return self.imagex_post('GetCVImageGenerateTask', query, json.dumps(body))\n            \n    def create_image_hm_embed(self, body={}):\n        return self.imagex_post('CreateImageHmEmbed', [], json.dumps(body))\n            \n    def get_cv_anime_generate_image(self, query={}, body={}):\n        return self.imagex_post('GetCVAnimeGenerateImage', query, json.dumps(body))\n            \n    def get_comprehensive_enhance_image(self, body={}):\n        return self.imagex_post('GetComprehensiveEnhanceImage', [], json.dumps(body))\n            \n    def get_image_ai_generate_task(self, query={}):\n        return self.imagex_get('GetImageAiGenerateTask', query)\n            \n    def get_product_aigc_result(self, query={}, body={}):\n        return self.imagex_post('GetProductAIGCResult', query, json.dumps(body))\n            \n    def get_image_erase_models(self, query={}):\n        return self.imagex_get('GetImageEraseModels', query)\n            \n    def get_dedup_task_status(self, query={}):\n        return self.imagex_get('GetDedupTaskStatus', query)\n            \n    def get_image_hm_extract_task_info(self, query={}, body={}):\n        return self.imagex_post('GetImageHmExtractTaskInfo', query, json.dumps(body))\n            \n    def create_image_service(self, body={}):\n        return self.imagex_post('CreateImageService', [], json.dumps(body))\n            \n    def delete_image_service(self, query={}, body={}):\n        return self.imagex_post('DeleteImageService', query, json.dumps(body))\n            \n    def update_image_auth_key(self, query={}, body={}):\n        return self.imagex_post('UpdateImageAuthKey', query, json.dumps(body))\n            \n    def update_res_event_rule(self, query={}, body={}):\n        return self.imagex_post('UpdateResEventRule', query, json.dumps(body))\n            \n    def update_service_name(self, query={}, body={}):\n        return self.imagex_post('UpdateServiceName', query, json.dumps(body))\n            \n    def update_storage_rules(self, query={}, body={}):\n        return self.imagex_post('UpdateStorageRules', query, json.dumps(body))\n            \n    def update_storage_rules_v_2(self, query={}, body={}):\n        return self.imagex_post('UpdateStorageRulesV2', query, json.dumps(body))\n            \n    def update_image_object_access(self, query={}, body={}):\n        return self.imagex_post('UpdateImageObjectAccess', query, json.dumps(body))\n            \n    def update_image_upload_overwrite(self, query={}, body={}):\n        return self.imagex_post('UpdateImageUploadOverwrite', query, json.dumps(body))\n            \n    def update_image_mirror_conf(self, query={}, body={}):\n        return self.imagex_post('UpdateImageMirrorConf', query, json.dumps(body))\n            \n    def get_image_service_subscription(self, query={}):\n        return self.imagex_get('GetImageServiceSubscription', query)\n            \n    def get_image_auth_key(self, query={}):\n        return self.imagex_get('GetImageAuthKey', query)\n            \n    def create_image_analyze_task(self, body={}):\n        return self.imagex_post('CreateImageAnalyzeTask', [], json.dumps(body))\n            \n    def delete_image_analyze_task_run(self, body={}):\n        return self.imagex_post('DeleteImageAnalyzeTaskRun', [], json.dumps(body))\n            \n    def delete_image_analyze_task(self, body={}):\n        return self.imagex_post('DeleteImageAnalyzeTask', [], json.dumps(body))\n            \n    def update_image_analyze_task_status(self, body={}):\n        return self.imagex_post('UpdateImageAnalyzeTaskStatus', [], json.dumps(body))\n            \n    def update_image_analyze_task(self, body={}):\n        return self.imagex_post('UpdateImageAnalyzeTask', [], json.dumps(body))\n            \n    def get_image_analyze_tasks(self, query={}):\n        return self.imagex_get('GetImageAnalyzeTasks', query)\n            \n    def get_image_analyze_result(self, query={}):\n        return self.imagex_get('GetImageAnalyzeResult', query)\n            \n    def delete_image_elements(self, query={}, body={}):\n        return self.imagex_post('DeleteImageElements', query, json.dumps(body))\n            \n    def delete_image_background_colors(self, query={}, body={}):\n        return self.imagex_post('DeleteImageBackgroundColors', query, json.dumps(body))\n            \n    def delete_image_style(self, query={}, body={}):\n        return self.imagex_post('DeleteImageStyle', query, json.dumps(body))\n            \n    def create_image_style(self, query={}, body={}):\n        return self.imagex_post('CreateImageStyle', query, json.dumps(body))\n            \n    def update_image_style_meta(self, query={}, body={}):\n        return self.imagex_post('UpdateImageStyleMeta', query, json.dumps(body))\n            \n    def add_image_elements(self, query={}, body={}):\n        return self.imagex_post('AddImageElements', query, json.dumps(body))\n            \n    def add_image_background_colors(self, query={}, body={}):\n        return self.imagex_post('AddImageBackgroundColors', query, json.dumps(body))\n            \n    def update_image_style(self, query={}, body={}):\n        return self.imagex_post('UpdateImageStyle', query, json.dumps(body))\n            \n    def get_image_fonts(self, query={}):\n        return self.imagex_get('GetImageFonts', query)\n            \n    def get_image_elements(self, query={}):\n        return self.imagex_get('GetImageElements', query)\n            \n    def get_image_background_colors(self, query={}):\n        return self.imagex_get('GetImageBackgroundColors', query)\n            \n    def get_image_styles(self, query={}):\n        return self.imagex_get('GetImageStyles', query)\n            \n    def get_image_style_detail(self, query={}):\n        return self.imagex_get('GetImageStyleDetail', query)\n            \n    def get_image_style_result(self, query={}, body={}):\n        return self.imagex_post('GetImageStyleResult', query, json.dumps(body))\n            \n    def download_cert(self, query={}):\n        return self.imagex_get('DownloadCert', query)\n            \n    def get_image_all_domain_cert(self, query={}):\n        return self.imagex_get('GetImageAllDomainCert', query)\n            \n    def get_cert_info(self, query={}):\n        return self.imagex_get('GetCertInfo', query)\n            \n    def get_all_certs(self, query={}):\n        return self.imagex_get('GetAllCerts', query)\n            \n    def create_image_template(self, query={}, body={}):\n        return self.imagex_post('CreateImageTemplate', query, json.dumps(body))\n            \n    def delete_templates_from_bin(self, query={}, body={}):\n        return self.imagex_post('DeleteTemplatesFromBin', query, json.dumps(body))\n            \n    def delete_image_template(self, query={}, body={}):\n        return self.imagex_post('DeleteImageTemplate', query, json.dumps(body))\n            \n    def create_image_templates_by_import(self, query={}, body={}):\n        return self.imagex_post('CreateImageTemplatesByImport', query, json.dumps(body))\n            \n    def create_templates_from_bin(self, query={}, body={}):\n        return self.imagex_post('CreateTemplatesFromBin', query, json.dumps(body))\n            \n    def get_image_template(self, query={}):\n        return self.imagex_get('GetImageTemplate', query)\n            \n    def get_templates_from_bin(self, query={}):\n        return self.imagex_get('GetTemplatesFromBin', query)\n            \n    def get_all_image_templates(self, query={}):\n        return self.imagex_get('GetAllImageTemplates', query)\n            \n    def create_image_audit_task(self, body={}):\n        return self.imagex_post('CreateImageAuditTask', [], json.dumps(body))\n            \n    def create_video_audit_task(self, query={}, body={}):\n        return self.imagex_post('CreateVideoAuditTask', query, json.dumps(body))\n            \n    def create_audio_audit_task(self, query={}, body={}):\n        return self.imagex_post('CreateAudioAuditTask', query, json.dumps(body))\n            \n    def delete_image_audit_result(self, body={}):\n        return self.imagex_post('DeleteImageAuditResult', [], json.dumps(body))\n            \n    def get_sync_audit_result(self, query={}, body={}):\n        return self.imagex_post('GetSyncAuditResult', query, json.dumps(body))\n            \n    def single_image_audit(self, query={}, body={}):\n        return self.imagex_post('SingleImageAudit', query, json.dumps(body))\n            \n    def batch_image_audit(self, query={}, body={}):\n        return self.imagex_post('BatchImageAudit', query, json.dumps(body))\n            \n    def update_image_audit_task_status(self, body={}):\n        return self.imagex_post('UpdateImageAuditTaskStatus', [], json.dumps(body))\n            \n    def update_image_audit_task(self, body={}):\n        return self.imagex_post('UpdateImageAuditTask', [], json.dumps(body))\n            \n    def update_audit_image_status(self, body={}):\n        return self.imagex_post('UpdateAuditImageStatus', [], json.dumps(body))\n            \n    def update_video_audit_task(self, query={}, body={}):\n        return self.imagex_post('UpdateVideoAuditTask', query, json.dumps(body))\n            \n    def update_audio_audit_task(self, query={}, body={}):\n        return self.imagex_post('UpdateAudioAuditTask', query, json.dumps(body))\n            \n    def get_image_audit_tasks(self, query={}):\n        return self.imagex_get('GetImageAuditTasks', query)\n            \n    def get_image_audit_task_result(self, query={}):\n        return self.imagex_get('GetImageAuditTaskResult', query)\n            \n    def get_image_audit_result(self, query={}):\n        return self.imagex_get('GetImageAuditResult', query)\n            \n    def get_audit_entrys_count(self, query={}):\n        return self.imagex_get('GetAuditEntrysCount', query)\n            \n    def get_video_audit_result(self, query={}):\n        return self.imagex_get('GetVideoAuditResult', query)\n            \n    def get_audio_audit_result(self, query={}):\n        return self.imagex_get('GetAudioAuditResult', query)\n            \n    def create_image_retry_audit_task(self, body={}):\n        return self.imagex_post('CreateImageRetryAuditTask', [], json.dumps(body))"
  },
  {
    "path": "volcengine/imagex/v2/upload.py",
    "content": "# coding:utf-8\nimport json\nimport os\nimport threading\nfrom volcengine.const.Const import *\nfrom volcengine.util.Util import *\nfrom volcengine.Policy import *\nfrom volcengine.imagex.v2.const import *\n\nfrom retry import retry\nfrom urllib.parse import quote\n\ntry:\n    import queue\nexcept ImportError:\n    import Queue as queue\n\n\nclass Uploader:\n    def __init__(\n            self, imagex_service, host, store_infos=None, file_paths_or_bytes=None, params=None\n    ):\n        if store_infos is None:\n            store_infos = []\n        if file_paths_or_bytes is None:\n            file_paths_or_bytes = []\n        if params is None:\n            params = {}\n\n        self.imagex_service = imagex_service\n        self.host = host\n        self.store_infos = store_infos\n        self.file_paths_or_bytes = file_paths_or_bytes\n        self.content_types = params.get(\"ContentTypes\", [])\n        self.storage_classes = params.get(\"StorageClasses\", [])\n        self.upload_host = params.get(\"UploadHost\", \"\")\n        if self.upload_host != \"\":\n            self.host = self.upload_host\n\n        self.queue = queue.Queue()\n        self.queue_lock = threading.Lock()\n\n        self.successOids = []\n        self.results = []\n\n        for i in range(len(store_infos)):\n            self.queue.put(i)\n\n    def async_upload(self):\n        while not self.queue.empty():\n            self.queue_lock.acquire()\n            if self.queue.empty():\n                self.queue_lock.release()\n                break\n            idx = self.queue.get()\n            self.queue_lock.release()\n\n            store_info = self.store_infos[idx]\n            file_paths_or_bytes = self.file_paths_or_bytes[idx]\n            param = {}\n            if len(self.content_types) > idx:\n                param[\"ContentType\"] = self.content_types[idx]\n            if len(self.storage_classes) > idx:\n                param[\"StorageClass\"] = self.storage_classes[idx]\n\n            try:\n                if isinstance(file_paths_or_bytes, bytes):\n                    self.upload_by_host(store_info, file_paths_or_bytes, param)\n                elif isinstance(file_paths_or_bytes, str):\n                    file_path = file_paths_or_bytes\n                    file_size = os.path.getsize(file_path)\n                    data = open(file_path, \"rb\")\n                    if file_size < MinChunkSize:\n                        self.upload_by_host(store_info, data.read(), param)\n                    elif file_size > LargeFileSize or self.upload_host != \"\":\n                        self.chunk_upload(store_info, data, file_size, True, param)\n                    else:\n                        self.chunk_upload(store_info, data, file_size, False, param)\n                    data.close()\n                else:\n                    raise Exception(\"Uploader only accept bytes or path data\")\n                self.successOids.append(store_info[\"StoreUri\"])\n                self.results.append(\n                    {\n                        \"Uri\": store_info[\"StoreUri\"],\n                        \"UriStatus\": 2000,\n                    }\n                )\n            except Exception as e:\n                self.results.append(\n                    {\n                        \"Uri\": store_info[\"StoreUri\"],\n                        \"UriStatus\": 2001,\n                        \"Error\": e,\n                    }\n                )\n\n    @retry(tries=3, delay=1, backoff=2)\n    def upload_by_host(self, store_info, img_data, param=None):\n        if param is None:\n            param = {}\n        url = \"https://{}/{}\".format(self.host, quote(store_info[\"StoreUri\"]))\n        check_sum = crc32(img_data) & 0xFFFFFFFF\n        check_sum = \"%08x\" % check_sum\n        headers = {\"Content-CRC32\": check_sum, \"Authorization\": store_info[\"Auth\"]}\n        if param.get(\"ContentType\", \"\") != \"\":\n            headers[\"Specified-Content-Type\"] = param[\"ContentType\"]\n        if param.get(\"StorageClass\", \"\") != \"\":\n            headers[\"X-VeImageX-Storage-Class\"] = param[\"StorageClass\"]\n        upload_status, resp = self.imagex_service.put_data(url, img_data, headers)\n        if not upload_status:\n            raise Exception(\n                \"upload by host: upload url %s status false, resp: %s\" % (url, resp)\n            )\n\n    def chunk_upload(self, store_info, f, size, is_large_file, param=None):\n        if param is None:\n            param = {}\n        upload_id = self.init_upload_part(store_info, is_large_file, param)\n        n = size // MinChunkSize\n        last_num = n - 1\n        parts = []\n        for i in range(0, last_num):\n            data = f.read(MinChunkSize)\n            part_number = i\n            if is_large_file:\n                part_number = i + 1\n            part = self.upload_part(\n                store_info, upload_id, part_number, data, is_large_file\n            )\n            parts.append(part)\n        data = f.read()\n        if is_large_file:\n            last_num = last_num + 1\n        part = self.upload_part(store_info, upload_id, last_num, data, is_large_file)\n        parts.append(part)\n        return self.upload_merge_part(store_info, upload_id, parts, is_large_file, param)\n\n    @retry(tries=3, delay=1, backoff=2)\n    def init_upload_part(self, store_info, is_large_file, param=None):\n        if param is None:\n            param = {}\n        url = \"https://{}/{}?uploads\".format(self.host, quote(store_info[\"StoreUri\"]))\n        headers = {\"Authorization\": store_info[\"Auth\"]}\n        if is_large_file:\n            headers[\"X-Storage-Mode\"] = \"gateway\"\n        if param.get(\"ContentType\", \"\") != \"\":\n            headers[\"Specified-Content-Type\"] = param[\"ContentType\"]\n        if param.get(\"StorageClass\", \"\") != \"\":\n            headers[\"X-VeImageX-Storage-Class\"] = param[\"StorageClass\"]\n        upload_status, resp = self.imagex_service.put_data(url, None, headers)\n        resp = json.loads(resp)\n        if not upload_status:\n            raise Exception(\"init upload error\")\n        if resp.get(\"success\") is None or resp[\"success\"] != 0:\n            raise Exception(\"init upload error\")\n        return resp[\"payload\"][\"uploadID\"]\n\n    @retry(tries=3, delay=1, backoff=2)\n    def upload_part(self, store_info, upload_id, part_number, data, is_large_file):\n        url = \"https://{}/{}?partNumber={}&uploadID={}\".format(\n            self.host, quote(store_info[\"StoreUri\"]), part_number, upload_id\n        )\n        check_sum = crc32(data) & 0xFFFFFFFF\n        check_sum = \"%08x\" % check_sum\n        headers = {\"Content-CRC32\": check_sum, \"Authorization\": store_info[\"Auth\"]}\n        if is_large_file:\n            headers[\"X-Storage-Mode\"] = \"gateway\"\n        upload_status, resp = self.imagex_service.put_data(url, data, headers)\n        if not upload_status:\n            raise Exception(url + json.dumps(resp))\n        resp = json.loads(resp)\n        if resp.get(\"success\") is None or resp[\"success\"] != 0:\n            raise Exception(\"upload part error\")\n        return check_sum\n\n    # noinspection DuplicatedCode\n    @staticmethod\n    def generate_merge_body(check_sum_list):\n        if len(check_sum_list) == 0:\n            raise Exception(\"crc32 list empty\")\n        s = []\n        for i in range(len(check_sum_list)):\n            s.append(\"{}:{}\".format(i, check_sum_list[i]))\n        comma = \",\"\n        return comma.join(s)\n\n    @retry(tries=3, delay=1, backoff=2)\n    def upload_merge_part(self, store_info, upload_id, check_sum_list, is_large_file, param=None):\n        if param is None:\n            param = {}\n        url = \"https://{}/{}?uploadID={}\".format(\n            self.host, quote(store_info[\"StoreUri\"]), upload_id\n        )\n        data = self.generate_merge_body(check_sum_list)\n        headers = {\"Authorization\": store_info[\"Auth\"]}\n        if is_large_file:\n            headers[\"X-Storage-Mode\"] = \"gateway\"\n        if param.get(\"ContentType\", \"\") != \"\":\n            headers[\"Specified-Content-Type\"] = param[\"ContentType\"]\n        if param.get(\"StorageClass\", \"\") != \"\":\n            headers[\"X-VeImageX-Storage-Class\"] = param[\"StorageClass\"]\n        upload_status, resp = self.imagex_service.put_data(url, data, headers)\n        resp = json.loads(resp)\n        if not upload_status:\n            raise Exception(\"init upload error\")\n        if resp.get(\"success\") is None or resp[\"success\"] != 0:\n            raise Exception(\"init upload error\")\n"
  },
  {
    "path": "volcengine/imp/ImpService.py",
    "content": "# Code generated by protoc-gen-volcengine-sdk\n# source: ImpService\n# DO NOT EDIT!\n# coding:utf-8\nfrom __future__ import print_function\nfrom volcengine.Policy import *\nfrom google.protobuf.json_format import *\nfrom volcengine.imp.ImpServiceConfig import ImpServiceConfig\nfrom retry import retry\nfrom zlib import crc32\nimport os\nimport sys\nimport time\nimport datetime\nfrom volcengine.util.Util import Util\nfrom volcengine.imp.models.request.request_imp_pb2 import *\nfrom volcengine.imp.models.response.response_imp_pb2 import *\n\nMinChunkSize = 1024 * 1024 * 20\nLargeFileSize = 1024 * 1024 * 1024\n\n\n#\n# Generated from protobuf service <code>ImpService</code>\n#\nclass ImpService(ImpServiceConfig):\n\n    #\n    # SubmitJob.\n    #\n    # @param request ImpSubmitJobRequest\n    # @return ImpSubmitJobResponse\n    # @raise Exception\n    def submit_job(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"SubmitJob\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), ImpSubmitJobResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, ImpSubmitJobResponse(), True)\n\n    #\n    # KillJob.\n    #\n    # @param request ImpKillJobRequest\n    # @return ImpKillJobResponse\n    # @raise Exception\n    def kill_job(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"KillJob\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), ImpKillJobResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, ImpKillJobResponse(), True)\n\n    #\n    # RetrieveJob.\n    #\n    # @param request ImpRetrieveJobRequest\n    # @return ImpRetrieveJobResponse\n    # @raise Exception\n    def retrieve_job(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"RetrieveJob\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), ImpRetrieveJobResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, ImpRetrieveJobResponse(), True)\n\n"
  },
  {
    "path": "volcengine/imp/ImpServiceConfig.py",
    "content": "# coding:utf-8\n\nfrom __future__ import print_function\n\nimport threading\nfrom zlib import crc32\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.base.Service import Service\n\n\nclass ImpServiceConfig(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(cls, \"_instance\"):\n            with cls._instance_lock:\n                if not hasattr(cls, \"_instance\"):\n                    cls._instance = object.__new__(cls)\n        return cls._instance\n\n    def __init__(self, region='cn-north-1'):\n        self.service_info = ImpServiceConfig.get_service_info(region)\n        self.api_info = ImpServiceConfig.get_api_info()\n        self.domain_cache = {}\n        self.fallback_domain_weights = {}\n        self.update_interval = 10\n        self.lock = threading.Lock()\n        super(ImpServiceConfig, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info(region):\n        service_info_map = {\n            'cn-north-1': ServiceInfo(\"imp.volcengineapi.com\", {'Accept': 'application/json'},\n                                      Credentials('', '', 'imp', 'cn-north-1'), 10, 10),\n        }\n        service_info = service_info_map.get(region, None)\n        if not service_info:\n            raise Exception('Cant find the region, please check it carefully')\n\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\n            \"SubmitJob\": ApiInfo(\"GET\", \"/\", {\"Action\": \"SubmitJob\", \"Version\": \"2021-06-11\"}, {}, {}),\n            \"KillJob\": ApiInfo(\"GET\", \"/\", {\"Action\": \"KillJob\", \"Version\": \"2021-06-11\"}, {}, {}),\n            \"RetrieveJob\": ApiInfo(\"GET\", \"/\", {\"Action\": \"RetrieveJob\", \"Version\": \"2021-06-11\"}, {}, {}),\n        }\n        return api_info\n\n    @staticmethod\n    def crc32(file_path):\n        prev = 0\n        for eachLine in open(file_path, \"rb\"):\n            prev = crc32(eachLine, prev)\n        return prev & 0xFFFFFFFF\n"
  },
  {
    "path": "volcengine/imp/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/imp/models/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/imp/models/base/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/imp/models/base/base_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: base/base.proto\n\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\nfrom google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2\n\n\nDESCRIPTOR = _descriptor.FileDescriptor(\n  name='base/base.proto',\n  package='Volcengine.Vod.Models.Base',\n  syntax='proto3',\n  serialized_options=b'\\n%com.volcengine.service.vod.model.baseB\\004BaseP\\001Z=github.com/volcengine/volc-sdk-golang/service/vod/models/base\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002\\034Volc\\\\Service\\\\Vod\\\\Models\\\\Base\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata',\n  create_key=_descriptor._internal_create_key,\n  serialized_pb=b'\\n\\x0f\\x62\\x61se/base.proto\\x12\\x1aVolcengine.Vod.Models.Base\\x1a google/protobuf/descriptor.proto\\\"\\xa1\\x01\\n\\x10ResponseMetadata\\x12\\x11\\n\\tRequestId\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x41\\x63tion\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07Version\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07Service\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06Region\\x18\\x05 \\x01(\\t\\x12\\x38\\n\\x05\\x45rror\\x18\\x06 \\x01(\\x0b\\x32).Volcengine.Vod.Models.Base.ResponseError\\\".\\n\\rResponseError\\x12\\x0c\\n\\x04\\x43ode\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07Message\\x18\\x02 \\x01(\\tB\\xbc\\x01\\n%com.volcengine.service.vod.model.baseB\\x04\\x42\\x61seP\\x01Z=github.com/volcengine/volc-sdk-golang/service/vod/models/base\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02\\x1cVolc\\\\Service\\\\Vod\\\\Models\\\\Base\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3'\n  ,\n  dependencies=[google_dot_protobuf_dot_descriptor__pb2.DESCRIPTOR,])\n\n\n\n\n_RESPONSEMETADATA = _descriptor.Descriptor(\n  name='ResponseMetadata',\n  full_name='Volcengine.Vod.Models.Base.ResponseMetadata',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  create_key=_descriptor._internal_create_key,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='RequestId', full_name='Volcengine.Vod.Models.Base.ResponseMetadata.RequestId', index=0,\n      number=1, type=9, cpp_type=9, label=1,\n      has_default_value=False, default_value=b\"\".decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),\n    _descriptor.FieldDescriptor(\n      name='Action', full_name='Volcengine.Vod.Models.Base.ResponseMetadata.Action', index=1,\n      number=2, type=9, cpp_type=9, label=1,\n      has_default_value=False, default_value=b\"\".decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),\n    _descriptor.FieldDescriptor(\n      name='Version', full_name='Volcengine.Vod.Models.Base.ResponseMetadata.Version', index=2,\n      number=3, type=9, cpp_type=9, label=1,\n      has_default_value=False, default_value=b\"\".decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),\n    _descriptor.FieldDescriptor(\n      name='Service', full_name='Volcengine.Vod.Models.Base.ResponseMetadata.Service', index=3,\n      number=4, type=9, cpp_type=9, label=1,\n      has_default_value=False, default_value=b\"\".decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),\n    _descriptor.FieldDescriptor(\n      name='Region', full_name='Volcengine.Vod.Models.Base.ResponseMetadata.Region', index=4,\n      number=5, type=9, cpp_type=9, label=1,\n      has_default_value=False, default_value=b\"\".decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),\n    _descriptor.FieldDescriptor(\n      name='Error', full_name='Volcengine.Vod.Models.Base.ResponseMetadata.Error', index=5,\n      number=6, type=11, cpp_type=10, label=1,\n      has_default_value=False, default_value=None,\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  serialized_options=None,\n  is_extendable=False,\n  syntax='proto3',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=82,\n  serialized_end=243,\n)\n\n\n_RESPONSEERROR = _descriptor.Descriptor(\n  name='ResponseError',\n  full_name='Volcengine.Vod.Models.Base.ResponseError',\n  filename=None,\n  file=DESCRIPTOR,\n  containing_type=None,\n  create_key=_descriptor._internal_create_key,\n  fields=[\n    _descriptor.FieldDescriptor(\n      name='Code', full_name='Volcengine.Vod.Models.Base.ResponseError.Code', index=0,\n      number=1, type=9, cpp_type=9, label=1,\n      has_default_value=False, default_value=b\"\".decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),\n    _descriptor.FieldDescriptor(\n      name='Message', full_name='Volcengine.Vod.Models.Base.ResponseError.Message', index=1,\n      number=2, type=9, cpp_type=9, label=1,\n      has_default_value=False, default_value=b\"\".decode('utf-8'),\n      message_type=None, enum_type=None, containing_type=None,\n      is_extension=False, extension_scope=None,\n      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),\n  ],\n  extensions=[\n  ],\n  nested_types=[],\n  enum_types=[\n  ],\n  serialized_options=None,\n  is_extendable=False,\n  syntax='proto3',\n  extension_ranges=[],\n  oneofs=[\n  ],\n  serialized_start=245,\n  serialized_end=291,\n)\n\n_RESPONSEMETADATA.fields_by_name['Error'].message_type = _RESPONSEERROR\nDESCRIPTOR.message_types_by_name['ResponseMetadata'] = _RESPONSEMETADATA\nDESCRIPTOR.message_types_by_name['ResponseError'] = _RESPONSEERROR\n_sym_db.RegisterFileDescriptor(DESCRIPTOR)\n\nResponseMetadata = _reflection.GeneratedProtocolMessageType('ResponseMetadata', (_message.Message,), {\n  'DESCRIPTOR' : _RESPONSEMETADATA,\n  '__module__' : 'base.base_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Base.ResponseMetadata)\n  })\n_sym_db.RegisterMessage(ResponseMetadata)\n\nResponseError = _reflection.GeneratedProtocolMessageType('ResponseError', (_message.Message,), {\n  'DESCRIPTOR' : _RESPONSEERROR,\n  '__module__' : 'base.base_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Base.ResponseError)\n  })\n_sym_db.RegisterMessage(ResponseError)\n\n\nDESCRIPTOR._options = None\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/imp/models/business/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/imp/models/business/imp_common_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: imp/business/imp_common.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\x1dimp/business/imp_common.proto\\x12\\x1eVolcengine.Imp.Models.Business\\\"R\\n\\tInputPath\\x12\\x0c\\n\\x04Type\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tTosBucket\\x18\\x02 \\x01(\\t\\x12\\x14\\n\\x0cVodSpaceName\\x18\\x03 \\x01(\\t\\x12\\x0e\\n\\x06\\x46ileId\\x18\\x04 \\x01(\\t\\\"y\\n\\x05Input\\x12<\\n\\tInputPath\\x18\\x01 \\x01(\\x0b\\x32).Volcengine.Imp.Models.Business.InputPath\\x12\\x32\\n\\x04\\x43lip\\x18\\x02 \\x01(\\x0b\\x32$.Volcengine.Imp.Models.Business.Clip\\\"*\\n\\x04\\x43lip\\x12\\x11\\n\\tStartTime\\x18\\x01 \\x01(\\x05\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x02 \\x01(\\x05\\\"\\xc8\\x01\\n\\tJobOutput\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nProperties\\x18\\x02 \\x01(\\t\\x12\\x0c\\n\\x04\\x43ode\\x18\\x03 \\x01(\\t\\x12\\x15\\n\\rFileMessageId\\x18\\x04 \\x01(\\t\\x12\\x10\\n\\x08TaskType\\x18\\x05 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x06 \\x01(\\t\\x12\\x12\\n\\nActivityId\\x18\\x07 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x08 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\t \\x01(\\t\\x12\\x14\\n\\x0cTemplateName\\x18\\n \\x01(\\t\\\"\\xaf\\x03\\n\\x0cJobExecution\\x12\\r\\n\\x05JobId\\x18\\x01 \\x01(\\t\\x12<\\n\\tInputPath\\x18\\x02 \\x01(\\x0b\\x32).Volcengine.Imp.Models.Business.InputPath\\x12\\x39\\n\\x06Output\\x18\\x03 \\x03(\\x0b\\x32).Volcengine.Imp.Models.Business.JobOutput\\x12\\x0e\\n\\x06Status\\x18\\x04 \\x01(\\t\\x12\\x11\\n\\tCreatedAt\\x18\\x05 \\x01(\\t\\x12\\x12\\n\\nFinishedAt\\x18\\x06 \\x01(\\t\\x12\\x12\\n\\nTemplateId\\x18\\x07 \\x01(\\t\\x12\\x19\\n\\x11\\x45nableLowPriority\\x18\\x08 \\x01(\\t\\x12\\x11\\n\\tJobSource\\x18\\t \\x01(\\t\\x12\\x30\\n\\x03Job\\x18\\n \\x01(\\x0b\\x32#.Volcengine.Imp.Models.Business.Job\\x12\\x13\\n\\x0b\\x43\\x61llbackUri\\x18\\x0b \\x01(\\t\\x12\\x1b\\n\\x13\\x43\\x61llbackContentType\\x18\\x0c \\x01(\\t\\x12:\\n\\x0bMultiInputs\\x18\\r \\x03(\\x0b\\x32%.Volcengine.Imp.Models.Business.Input\\\"P\\n\\x06Params\\x12\\x46\\n\\x0eOverrideParams\\x18\\x01 \\x01(\\x0b\\x32..Volcengine.Imp.Models.Business.OverrideParams\\\"\\xf8\\x01\\n\\x0eOverrideParams\\x12L\\n\\nSmartErase\\x18\\x01 \\x03(\\x0b\\x32\\x38.Volcengine.Imp.Models.Business.SmartEraseOverrideParams\\x12\\x44\\n\\x06Output\\x18\\x02 \\x03(\\x0b\\x32\\x34.Volcengine.Imp.Models.Business.OutputOverrideParams\\x12R\\n\\rSmartEmoticon\\x18\\x03 \\x03(\\x0b\\x32;.Volcengine.Imp.Models.Business.SmartEmoticonOverrideParams\\\"\\x9e\\x01\\n\\x18SmartEraseOverrideParams\\x12\\x12\\n\\nActivityId\\x18\\x01 \\x03(\\t\\x12<\\n\\tWatermark\\x18\\x02 \\x01(\\x0b\\x32).Volcengine.Imp.Models.Business.Watermark\\x12\\x30\\n\\x03OCR\\x18\\x03 \\x01(\\x0b\\x32#.Volcengine.Imp.Models.Business.OCR\\\"K\\n\\tWatermark\\x12>\\n\\nDetectRect\\x18\\x01 \\x03(\\x0b\\x32*.Volcengine.Imp.Models.Business.DetectRect\\\"E\\n\\x03OCR\\x12>\\n\\nDetectRect\\x18\\x01 \\x03(\\x0b\\x32*.Volcengine.Imp.Models.Business.DetectRect\\\"<\\n\\nDetectRect\\x12\\n\\n\\x02X1\\x18\\x01 \\x01(\\x01\\x12\\n\\n\\x02Y1\\x18\\x02 \\x01(\\x01\\x12\\n\\n\\x02X2\\x18\\x03 \\x01(\\x01\\x12\\n\\n\\x02Y2\\x18\\x04 \\x01(\\x01\\\"j\\n\\x14OutputOverrideParams\\x12\\x12\\n\\nActivityId\\x18\\x01 \\x03(\\t\\x12>\\n\\nOutputPath\\x18\\x02 \\x01(\\x0b\\x32*.Volcengine.Imp.Models.Business.OutputPath\\\"\\xfd\\x01\\n\\x1bSmartEmoticonOverrideParams\\x12\\x12\\n\\nActivityId\\x18\\x01 \\x03(\\t\\x12>\\n\\x0b\\x44rivenVideo\\x18\\x02 \\x01(\\x0b\\x32).Volcengine.Imp.Models.Business.InputPath\\x12>\\n\\x0b\\x44rivenAudio\\x18\\x03 \\x01(\\x0b\\x32).Volcengine.Imp.Models.Business.InputPath\\x12J\\n\\x10\\x44rivenTextParams\\x18\\x04 \\x01(\\x0b\\x32\\x30.Volcengine.Imp.Models.Business.DrivenTextParams\\\"d\\n\\x10\\x44rivenTextParams\\x12\\x12\\n\\nDrivenText\\x18\\x01 \\x01(\\t\\x12<\\n\\tTTSParams\\x18\\x02 \\x01(\\x0b\\x32).Volcengine.Imp.Models.Business.TTSParams\\\"\\x1e\\n\\tTTSParams\\x12\\x11\\n\\tVoiceType\\x18\\x01 \\x01(\\t\\\"U\\n\\nOutputPath\\x12\\x0c\\n\\x04Type\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tTosBucket\\x18\\x02 \\x01(\\t\\x12\\x14\\n\\x0cVodSpaceName\\x18\\x03 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileName\\x18\\x04 \\x01(\\t\\\"\\x8b\\x01\\n\\x03Job\\x12I\\n\\x0eTranscodeVideo\\x18\\x01 \\x01(\\x0b\\x32\\x31.Volcengine.Imp.Models.Business.TranscodeVideoJob\\x12\\x39\\n\\x06\\x42yteHD\\x18\\x02 \\x01(\\x0b\\x32).Volcengine.Imp.Models.Business.ByteHDJob\\\"\\xcc\\x02\\n\\x11TranscodeVideoJob\\x12\\x11\\n\\tContainer\\x18\\x01 \\x01(\\t\\x12\\x34\\n\\x05Video\\x18\\x02 \\x01(\\x0b\\x32%.Volcengine.Imp.Models.Business.Video\\x12\\x34\\n\\x05\\x41udio\\x18\\x03 \\x01(\\x0b\\x32%.Volcengine.Imp.Models.Business.Audio\\x12\\x13\\n\\x0b\\x45nableRemux\\x18\\x04 \\x01(\\x08\\x12\\x14\\n\\x0c\\x44isableVideo\\x18\\x05 \\x01(\\x08\\x12\\x14\\n\\x0c\\x44isableAudio\\x18\\x06 \\x01(\\x08\\x12\\x38\\n\\x07Segment\\x18\\x07 \\x01(\\x0b\\x32\\'.Volcengine.Imp.Models.Business.Segment\\x12=\\n\\x05Logos\\x18\\x08 \\x03(\\x0b\\x32..Volcengine.Imp.Models.Business.LogoDefinition\\\"\\x83\\x02\\n\\tByteHDJob\\x12\\x11\\n\\tContainer\\x18\\x01 \\x01(\\t\\x12\\x34\\n\\x05Video\\x18\\x02 \\x01(\\x0b\\x32%.Volcengine.Imp.Models.Business.Video\\x12\\x34\\n\\x05\\x41udio\\x18\\x03 \\x01(\\x0b\\x32%.Volcengine.Imp.Models.Business.Audio\\x12\\x38\\n\\x07Segment\\x18\\x04 \\x01(\\x0b\\x32\\'.Volcengine.Imp.Models.Business.Segment\\x12=\\n\\x05Logos\\x18\\x05 \\x03(\\x0b\\x32..Volcengine.Imp.Models.Business.LogoDefinition\\\"\\xd5\\x01\\n\\x05Video\\x12\\r\\n\\x05\\x43odec\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tScaleType\\x18\\x02 \\x01(\\x05\\x12\\x12\\n\\nScaleWidth\\x18\\x03 \\x01(\\x05\\x12\\x13\\n\\x0bScaleHeight\\x18\\x04 \\x01(\\x05\\x12\\x12\\n\\nScaleShort\\x18\\x05 \\x01(\\x05\\x12\\x11\\n\\tScaleLong\\x18\\x06 \\x01(\\x05\\x12\\x0f\\n\\x07\\x42itrate\\x18\\x07 \\x01(\\x05\\x12\\x0e\\n\\x06MaxFps\\x18\\x08 \\x01(\\x05\\x12\\x10\\n\\x03\\x43rf\\x18\\t \\x01(\\x05H\\x00\\x88\\x01\\x01\\x12\\x0f\\n\\x07Profile\\x18\\n \\x01(\\t\\x12\\x0e\\n\\x06PixFmt\\x18\\x0b \\x01(\\tB\\x06\\n\\x04_Crf\\\"\\x9c\\x01\\n\\x06Volume\\x12\\x0e\\n\\x06Method\\x18\\x01 \\x01(\\t\\x12\\x1f\\n\\x12IntegratedLoudness\\x18\\x02 \\x01(\\x01H\\x00\\x88\\x01\\x01\\x12\\x15\\n\\x08TruePeak\\x18\\x03 \\x01(\\x01H\\x01\\x88\\x01\\x01\\x12\\x17\\n\\nVolumeTime\\x18\\x04 \\x01(\\x01H\\x02\\x88\\x01\\x01\\x42\\x15\\n\\x13_IntegratedLoudnessB\\x0b\\n\\t_TruePeakB\\r\\n\\x0b_VolumeTime\\\"\\x96\\x01\\n\\x05\\x41udio\\x12\\r\\n\\x05\\x43odec\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07Profile\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nSampleRate\\x18\\x03 \\x01(\\x05\\x12\\x0f\\n\\x07\\x42itrate\\x18\\x04 \\x01(\\x05\\x12\\x10\\n\\x08\\x43hannels\\x18\\x05 \\x01(\\x05\\x12\\x36\\n\\x06Volume\\x18\\x06 \\x01(\\x0b\\x32&.Volcengine.Imp.Models.Business.Volume\\\"9\\n\\x07Segment\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x03 \\x01(\\x05\\\"\\xbc\\x02\\n\\x0eLogoDefinition\\x12\\x0c\\n\\x04Type\\x18\\x01 \\x01(\\t\\x12N\\n\\x12TextLogoDefinition\\x18\\x02 \\x01(\\x0b\\x32\\x32.Volcengine.Imp.Models.Business.TextLogoDefinition\\x12P\\n\\x13ImageLogoDefinition\\x18\\x03 \\x01(\\x0b\\x32\\x33.Volcengine.Imp.Models.Business.ImageLogoDefinition\\x12>\\n\\x08Position\\x18\\x04 \\x01(\\x0b\\x32,.Volcengine.Imp.Models.Business.LogoPosition\\x12:\\n\\x08TimeLine\\x18\\x05 \\x01(\\x0b\\x32(.Volcengine.Imp.Models.Business.TimeLine\\\"\\\\\\n\\x12TextLogoDefinition\\x12\\x0f\\n\\x07\\x43ontent\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x46ontType\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08\\x46ontSize\\x18\\x03 \\x01(\\x05\\x12\\x11\\n\\tFontColor\\x18\\x04 \\x01(\\t\\\"\\x8e\\x01\\n\\x13ImageLogoDefinition\\x12:\\n\\x07\\x43ontent\\x18\\x01 \\x01(\\x0b\\x32).Volcengine.Imp.Models.Business.InputPath\\x12\\x11\\n\\tLoopTimes\\x18\\x02 \\x01(\\x05\\x12\\x12\\n\\nRepeatLast\\x18\\x03 \\x01(\\x08\\x12\\x14\\n\\x0cTransparency\\x18\\x04 \\x01(\\x05\\\"X\\n\\x0cLogoPosition\\x12\\x0c\\n\\x04PosX\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04PosY\\x18\\x02 \\x01(\\t\\x12\\r\\n\\x05SizeX\\x18\\x04 \\x01(\\t\\x12\\r\\n\\x05SizeY\\x18\\x05 \\x01(\\t\\x12\\x0e\\n\\x06Locate\\x18\\x06 \\x01(\\t\\\".\\n\\x08TimeLine\\x12\\x11\\n\\tStartTime\\x18\\x01 \\x01(\\x05\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x02 \\x01(\\x05\\x42\\xcc\\x01\\n)com.volcengine.service.imp.model.businessB\\x0bImpWorkflowP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/imp/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xca\\x02 Volc\\\\Service\\\\Imp\\\\Models\\\\Business\\xe2\\x02#Volc\\\\Service\\\\Imp\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_INPUTPATH = DESCRIPTOR.message_types_by_name['InputPath']\n_INPUT = DESCRIPTOR.message_types_by_name['Input']\n_CLIP = DESCRIPTOR.message_types_by_name['Clip']\n_JOBOUTPUT = DESCRIPTOR.message_types_by_name['JobOutput']\n_JOBEXECUTION = DESCRIPTOR.message_types_by_name['JobExecution']\n_PARAMS = DESCRIPTOR.message_types_by_name['Params']\n_OVERRIDEPARAMS = DESCRIPTOR.message_types_by_name['OverrideParams']\n_SMARTERASEOVERRIDEPARAMS = DESCRIPTOR.message_types_by_name['SmartEraseOverrideParams']\n_WATERMARK = DESCRIPTOR.message_types_by_name['Watermark']\n_OCR = DESCRIPTOR.message_types_by_name['OCR']\n_DETECTRECT = DESCRIPTOR.message_types_by_name['DetectRect']\n_OUTPUTOVERRIDEPARAMS = DESCRIPTOR.message_types_by_name['OutputOverrideParams']\n_SMARTEMOTICONOVERRIDEPARAMS = DESCRIPTOR.message_types_by_name['SmartEmoticonOverrideParams']\n_DRIVENTEXTPARAMS = DESCRIPTOR.message_types_by_name['DrivenTextParams']\n_TTSPARAMS = DESCRIPTOR.message_types_by_name['TTSParams']\n_OUTPUTPATH = DESCRIPTOR.message_types_by_name['OutputPath']\n_JOB = DESCRIPTOR.message_types_by_name['Job']\n_TRANSCODEVIDEOJOB = DESCRIPTOR.message_types_by_name['TranscodeVideoJob']\n_BYTEHDJOB = DESCRIPTOR.message_types_by_name['ByteHDJob']\n_VIDEO = DESCRIPTOR.message_types_by_name['Video']\n_VOLUME = DESCRIPTOR.message_types_by_name['Volume']\n_AUDIO = DESCRIPTOR.message_types_by_name['Audio']\n_SEGMENT = DESCRIPTOR.message_types_by_name['Segment']\n_LOGODEFINITION = DESCRIPTOR.message_types_by_name['LogoDefinition']\n_TEXTLOGODEFINITION = DESCRIPTOR.message_types_by_name['TextLogoDefinition']\n_IMAGELOGODEFINITION = DESCRIPTOR.message_types_by_name['ImageLogoDefinition']\n_LOGOPOSITION = DESCRIPTOR.message_types_by_name['LogoPosition']\n_TIMELINE = DESCRIPTOR.message_types_by_name['TimeLine']\nInputPath = _reflection.GeneratedProtocolMessageType('InputPath', (_message.Message,), {\n  'DESCRIPTOR' : _INPUTPATH,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.InputPath)\n  })\n_sym_db.RegisterMessage(InputPath)\n\nInput = _reflection.GeneratedProtocolMessageType('Input', (_message.Message,), {\n  'DESCRIPTOR' : _INPUT,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.Input)\n  })\n_sym_db.RegisterMessage(Input)\n\nClip = _reflection.GeneratedProtocolMessageType('Clip', (_message.Message,), {\n  'DESCRIPTOR' : _CLIP,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.Clip)\n  })\n_sym_db.RegisterMessage(Clip)\n\nJobOutput = _reflection.GeneratedProtocolMessageType('JobOutput', (_message.Message,), {\n  'DESCRIPTOR' : _JOBOUTPUT,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.JobOutput)\n  })\n_sym_db.RegisterMessage(JobOutput)\n\nJobExecution = _reflection.GeneratedProtocolMessageType('JobExecution', (_message.Message,), {\n  'DESCRIPTOR' : _JOBEXECUTION,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.JobExecution)\n  })\n_sym_db.RegisterMessage(JobExecution)\n\nParams = _reflection.GeneratedProtocolMessageType('Params', (_message.Message,), {\n  'DESCRIPTOR' : _PARAMS,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.Params)\n  })\n_sym_db.RegisterMessage(Params)\n\nOverrideParams = _reflection.GeneratedProtocolMessageType('OverrideParams', (_message.Message,), {\n  'DESCRIPTOR' : _OVERRIDEPARAMS,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.OverrideParams)\n  })\n_sym_db.RegisterMessage(OverrideParams)\n\nSmartEraseOverrideParams = _reflection.GeneratedProtocolMessageType('SmartEraseOverrideParams', (_message.Message,), {\n  'DESCRIPTOR' : _SMARTERASEOVERRIDEPARAMS,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.SmartEraseOverrideParams)\n  })\n_sym_db.RegisterMessage(SmartEraseOverrideParams)\n\nWatermark = _reflection.GeneratedProtocolMessageType('Watermark', (_message.Message,), {\n  'DESCRIPTOR' : _WATERMARK,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.Watermark)\n  })\n_sym_db.RegisterMessage(Watermark)\n\nOCR = _reflection.GeneratedProtocolMessageType('OCR', (_message.Message,), {\n  'DESCRIPTOR' : _OCR,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.OCR)\n  })\n_sym_db.RegisterMessage(OCR)\n\nDetectRect = _reflection.GeneratedProtocolMessageType('DetectRect', (_message.Message,), {\n  'DESCRIPTOR' : _DETECTRECT,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.DetectRect)\n  })\n_sym_db.RegisterMessage(DetectRect)\n\nOutputOverrideParams = _reflection.GeneratedProtocolMessageType('OutputOverrideParams', (_message.Message,), {\n  'DESCRIPTOR' : _OUTPUTOVERRIDEPARAMS,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.OutputOverrideParams)\n  })\n_sym_db.RegisterMessage(OutputOverrideParams)\n\nSmartEmoticonOverrideParams = _reflection.GeneratedProtocolMessageType('SmartEmoticonOverrideParams', (_message.Message,), {\n  'DESCRIPTOR' : _SMARTEMOTICONOVERRIDEPARAMS,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.SmartEmoticonOverrideParams)\n  })\n_sym_db.RegisterMessage(SmartEmoticonOverrideParams)\n\nDrivenTextParams = _reflection.GeneratedProtocolMessageType('DrivenTextParams', (_message.Message,), {\n  'DESCRIPTOR' : _DRIVENTEXTPARAMS,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.DrivenTextParams)\n  })\n_sym_db.RegisterMessage(DrivenTextParams)\n\nTTSParams = _reflection.GeneratedProtocolMessageType('TTSParams', (_message.Message,), {\n  'DESCRIPTOR' : _TTSPARAMS,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.TTSParams)\n  })\n_sym_db.RegisterMessage(TTSParams)\n\nOutputPath = _reflection.GeneratedProtocolMessageType('OutputPath', (_message.Message,), {\n  'DESCRIPTOR' : _OUTPUTPATH,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.OutputPath)\n  })\n_sym_db.RegisterMessage(OutputPath)\n\nJob = _reflection.GeneratedProtocolMessageType('Job', (_message.Message,), {\n  'DESCRIPTOR' : _JOB,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.Job)\n  })\n_sym_db.RegisterMessage(Job)\n\nTranscodeVideoJob = _reflection.GeneratedProtocolMessageType('TranscodeVideoJob', (_message.Message,), {\n  'DESCRIPTOR' : _TRANSCODEVIDEOJOB,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.TranscodeVideoJob)\n  })\n_sym_db.RegisterMessage(TranscodeVideoJob)\n\nByteHDJob = _reflection.GeneratedProtocolMessageType('ByteHDJob', (_message.Message,), {\n  'DESCRIPTOR' : _BYTEHDJOB,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.ByteHDJob)\n  })\n_sym_db.RegisterMessage(ByteHDJob)\n\nVideo = _reflection.GeneratedProtocolMessageType('Video', (_message.Message,), {\n  'DESCRIPTOR' : _VIDEO,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.Video)\n  })\n_sym_db.RegisterMessage(Video)\n\nVolume = _reflection.GeneratedProtocolMessageType('Volume', (_message.Message,), {\n  'DESCRIPTOR' : _VOLUME,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.Volume)\n  })\n_sym_db.RegisterMessage(Volume)\n\nAudio = _reflection.GeneratedProtocolMessageType('Audio', (_message.Message,), {\n  'DESCRIPTOR' : _AUDIO,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.Audio)\n  })\n_sym_db.RegisterMessage(Audio)\n\nSegment = _reflection.GeneratedProtocolMessageType('Segment', (_message.Message,), {\n  'DESCRIPTOR' : _SEGMENT,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.Segment)\n  })\n_sym_db.RegisterMessage(Segment)\n\nLogoDefinition = _reflection.GeneratedProtocolMessageType('LogoDefinition', (_message.Message,), {\n  'DESCRIPTOR' : _LOGODEFINITION,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.LogoDefinition)\n  })\n_sym_db.RegisterMessage(LogoDefinition)\n\nTextLogoDefinition = _reflection.GeneratedProtocolMessageType('TextLogoDefinition', (_message.Message,), {\n  'DESCRIPTOR' : _TEXTLOGODEFINITION,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.TextLogoDefinition)\n  })\n_sym_db.RegisterMessage(TextLogoDefinition)\n\nImageLogoDefinition = _reflection.GeneratedProtocolMessageType('ImageLogoDefinition', (_message.Message,), {\n  'DESCRIPTOR' : _IMAGELOGODEFINITION,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.ImageLogoDefinition)\n  })\n_sym_db.RegisterMessage(ImageLogoDefinition)\n\nLogoPosition = _reflection.GeneratedProtocolMessageType('LogoPosition', (_message.Message,), {\n  'DESCRIPTOR' : _LOGOPOSITION,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.LogoPosition)\n  })\n_sym_db.RegisterMessage(LogoPosition)\n\nTimeLine = _reflection.GeneratedProtocolMessageType('TimeLine', (_message.Message,), {\n  'DESCRIPTOR' : _TIMELINE,\n  '__module__' : 'imp.business.imp_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Business.TimeLine)\n  })\n_sym_db.RegisterMessage(TimeLine)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.imp.model.businessB\\013ImpWorkflowP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/imp/models/business\\240\\001\\001\\330\\001\\001\\312\\002 Volc\\\\Service\\\\Imp\\\\Models\\\\Business\\342\\002#Volc\\\\Service\\\\Imp\\\\Models\\\\GPBMetadata'\n  _INPUTPATH._serialized_start=65\n  _INPUTPATH._serialized_end=147\n  _INPUT._serialized_start=149\n  _INPUT._serialized_end=270\n  _CLIP._serialized_start=272\n  _CLIP._serialized_end=314\n  _JOBOUTPUT._serialized_start=317\n  _JOBOUTPUT._serialized_end=517\n  _JOBEXECUTION._serialized_start=520\n  _JOBEXECUTION._serialized_end=951\n  _PARAMS._serialized_start=953\n  _PARAMS._serialized_end=1033\n  _OVERRIDEPARAMS._serialized_start=1036\n  _OVERRIDEPARAMS._serialized_end=1284\n  _SMARTERASEOVERRIDEPARAMS._serialized_start=1287\n  _SMARTERASEOVERRIDEPARAMS._serialized_end=1445\n  _WATERMARK._serialized_start=1447\n  _WATERMARK._serialized_end=1522\n  _OCR._serialized_start=1524\n  _OCR._serialized_end=1593\n  _DETECTRECT._serialized_start=1595\n  _DETECTRECT._serialized_end=1655\n  _OUTPUTOVERRIDEPARAMS._serialized_start=1657\n  _OUTPUTOVERRIDEPARAMS._serialized_end=1763\n  _SMARTEMOTICONOVERRIDEPARAMS._serialized_start=1766\n  _SMARTEMOTICONOVERRIDEPARAMS._serialized_end=2019\n  _DRIVENTEXTPARAMS._serialized_start=2021\n  _DRIVENTEXTPARAMS._serialized_end=2121\n  _TTSPARAMS._serialized_start=2123\n  _TTSPARAMS._serialized_end=2153\n  _OUTPUTPATH._serialized_start=2155\n  _OUTPUTPATH._serialized_end=2240\n  _JOB._serialized_start=2243\n  _JOB._serialized_end=2382\n  _TRANSCODEVIDEOJOB._serialized_start=2385\n  _TRANSCODEVIDEOJOB._serialized_end=2717\n  _BYTEHDJOB._serialized_start=2720\n  _BYTEHDJOB._serialized_end=2979\n  _VIDEO._serialized_start=2982\n  _VIDEO._serialized_end=3195\n  _VOLUME._serialized_start=3198\n  _VOLUME._serialized_end=3354\n  _AUDIO._serialized_start=3357\n  _AUDIO._serialized_end=3507\n  _SEGMENT._serialized_start=3509\n  _SEGMENT._serialized_end=3566\n  _LOGODEFINITION._serialized_start=3569\n  _LOGODEFINITION._serialized_end=3885\n  _TEXTLOGODEFINITION._serialized_start=3887\n  _TEXTLOGODEFINITION._serialized_end=3979\n  _IMAGELOGODEFINITION._serialized_start=3982\n  _IMAGELOGODEFINITION._serialized_end=4124\n  _LOGOPOSITION._serialized_start=4126\n  _LOGOPOSITION._serialized_end=4214\n  _TIMELINE._serialized_start=4216\n  _TIMELINE._serialized_end=4262\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/imp/models/request/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/imp/models/request/request_imp_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: imp/request/request_imp.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\nfrom volcengine.imp.models.business import imp_common_pb2 as imp_dot_business_dot_imp__common__pb2\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\x1dimp/request/request_imp.proto\\x12\\x1dVolcengine.Imp.Models.Request\\x1a\\x1dimp/business/imp_common.proto\\\"\\xe2\\x03\\n\\x13ImpSubmitJobRequest\\x12<\\n\\tInputPath\\x18\\x01 \\x01(\\x0b\\x32).Volcengine.Imp.Models.Business.InputPath\\x12\\x12\\n\\nTemplateId\\x18\\x02 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x03 \\x01(\\t\\x12\\x19\\n\\x11\\x45nableLowPriority\\x18\\x04 \\x01(\\t\\x12\\x36\\n\\x06Params\\x18\\x05 \\x01(\\x0b\\x32&.Volcengine.Imp.Models.Business.Params\\x12>\\n\\nOutputPath\\x18\\x06 \\x01(\\x0b\\x32*.Volcengine.Imp.Models.Business.OutputPath\\x12\\x30\\n\\x03Job\\x18\\x07 \\x01(\\x0b\\x32#.Volcengine.Imp.Models.Business.Job\\x12\\x18\\n\\x0b\\x43\\x61llbackUri\\x18\\x08 \\x01(\\tH\\x00\\x88\\x01\\x01\\x12 \\n\\x13\\x43\\x61llbackContentType\\x18\\t \\x01(\\tH\\x01\\x88\\x01\\x01\\x12:\\n\\x0bMultiInputs\\x18\\n \\x03(\\x0b\\x32%.Volcengine.Imp.Models.Business.InputB\\x0e\\n\\x0c_CallbackUriB\\x16\\n\\x14_CallbackContentType\\\"\\\"\\n\\x11ImpKillJobRequest\\x12\\r\\n\\x05JobId\\x18\\x01 \\x01(\\t\\\"\\'\\n\\x15ImpRetrieveJobRequest\\x12\\x0e\\n\\x06JobIds\\x18\\x01 \\x03(\\tB\\xc8\\x01\\n(com.volcengine.service.imp.model.requestB\\nImpRequestP\\x01Z@github.com/volcengine/volc-sdk-golang/service/imp/models/request\\xa0\\x01\\x01\\xd8\\x01\\x01\\xca\\x02\\x1fVolc\\\\Service\\\\Imp\\\\Models\\\\Request\\xe2\\x02#Volc\\\\Service\\\\Imp\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_IMPSUBMITJOBREQUEST = DESCRIPTOR.message_types_by_name['ImpSubmitJobRequest']\n_IMPKILLJOBREQUEST = DESCRIPTOR.message_types_by_name['ImpKillJobRequest']\n_IMPRETRIEVEJOBREQUEST = DESCRIPTOR.message_types_by_name['ImpRetrieveJobRequest']\nImpSubmitJobRequest = _reflection.GeneratedProtocolMessageType('ImpSubmitJobRequest', (_message.Message,), {\n  'DESCRIPTOR' : _IMPSUBMITJOBREQUEST,\n  '__module__' : 'imp.request.request_imp_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Request.ImpSubmitJobRequest)\n  })\n_sym_db.RegisterMessage(ImpSubmitJobRequest)\n\nImpKillJobRequest = _reflection.GeneratedProtocolMessageType('ImpKillJobRequest', (_message.Message,), {\n  'DESCRIPTOR' : _IMPKILLJOBREQUEST,\n  '__module__' : 'imp.request.request_imp_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Request.ImpKillJobRequest)\n  })\n_sym_db.RegisterMessage(ImpKillJobRequest)\n\nImpRetrieveJobRequest = _reflection.GeneratedProtocolMessageType('ImpRetrieveJobRequest', (_message.Message,), {\n  'DESCRIPTOR' : _IMPRETRIEVEJOBREQUEST,\n  '__module__' : 'imp.request.request_imp_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Request.ImpRetrieveJobRequest)\n  })\n_sym_db.RegisterMessage(ImpRetrieveJobRequest)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n(com.volcengine.service.imp.model.requestB\\nImpRequestP\\001Z@github.com/volcengine/volc-sdk-golang/service/imp/models/request\\240\\001\\001\\330\\001\\001\\312\\002\\037Volc\\\\Service\\\\Imp\\\\Models\\\\Request\\342\\002#Volc\\\\Service\\\\Imp\\\\Models\\\\GPBMetadata'\n  _IMPSUBMITJOBREQUEST._serialized_start=96\n  _IMPSUBMITJOBREQUEST._serialized_end=578\n  _IMPKILLJOBREQUEST._serialized_start=580\n  _IMPKILLJOBREQUEST._serialized_end=614\n  _IMPRETRIEVEJOBREQUEST._serialized_start=616\n  _IMPRETRIEVEJOBREQUEST._serialized_end=655\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/imp/models/response/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/imp/models/response/response_imp_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: imp/response/response_imp.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\nfrom volcengine.base.models.base import base_pb2 as volcengine_dot_base_dot_base__pb2\nfrom volcengine.imp.models.business import imp_common_pb2 as imp_dot_business_dot_imp__common__pb2\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\x1fimp/response/response_imp.proto\\x12\\x1eVolcengine.Imp.Models.Response\\x1a\\x1avolcengine/base/base.proto\\x1a\\x1dimp/business/imp_common.proto\\\"o\\n\\x14ImpSubmitJobResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x0e\\n\\x06Result\\x18\\x02 \\x01(\\t\\\"]\\n\\x12ImpKillJobResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\x92\\x02\\n\\x16ImpRetrieveJobResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12R\\n\\x06Result\\x18\\x02 \\x03(\\x0b\\x32\\x42.Volcengine.Imp.Models.Response.ImpRetrieveJobResponse.ResultEntry\\x1a[\\n\\x0bResultEntry\\x12\\x0b\\n\\x03key\\x18\\x01 \\x01(\\t\\x12;\\n\\x05value\\x18\\x02 \\x01(\\x0b\\x32,.Volcengine.Imp.Models.Business.JobExecution:\\x02\\x38\\x01\\x42\\xcc\\x01\\n)com.volcengine.service.imp.model.responseB\\x0bImpResponseP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/imp/models/response\\xa0\\x01\\x01\\xd8\\x01\\x01\\xca\\x02 Volc\\\\Service\\\\Imp\\\\Models\\\\Response\\xe2\\x02#Volc\\\\Service\\\\Imp\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_IMPSUBMITJOBRESPONSE = DESCRIPTOR.message_types_by_name['ImpSubmitJobResponse']\n_IMPKILLJOBRESPONSE = DESCRIPTOR.message_types_by_name['ImpKillJobResponse']\n_IMPRETRIEVEJOBRESPONSE = DESCRIPTOR.message_types_by_name['ImpRetrieveJobResponse']\n_IMPRETRIEVEJOBRESPONSE_RESULTENTRY = _IMPRETRIEVEJOBRESPONSE.nested_types_by_name['ResultEntry']\nImpSubmitJobResponse = _reflection.GeneratedProtocolMessageType('ImpSubmitJobResponse', (_message.Message,), {\n  'DESCRIPTOR' : _IMPSUBMITJOBRESPONSE,\n  '__module__' : 'imp.response.response_imp_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Response.ImpSubmitJobResponse)\n  })\n_sym_db.RegisterMessage(ImpSubmitJobResponse)\n\nImpKillJobResponse = _reflection.GeneratedProtocolMessageType('ImpKillJobResponse', (_message.Message,), {\n  'DESCRIPTOR' : _IMPKILLJOBRESPONSE,\n  '__module__' : 'imp.response.response_imp_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Response.ImpKillJobResponse)\n  })\n_sym_db.RegisterMessage(ImpKillJobResponse)\n\nImpRetrieveJobResponse = _reflection.GeneratedProtocolMessageType('ImpRetrieveJobResponse', (_message.Message,), {\n\n  'ResultEntry' : _reflection.GeneratedProtocolMessageType('ResultEntry', (_message.Message,), {\n    'DESCRIPTOR' : _IMPRETRIEVEJOBRESPONSE_RESULTENTRY,\n    '__module__' : 'imp.response.response_imp_pb2'\n    # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Response.ImpRetrieveJobResponse.ResultEntry)\n    })\n  ,\n  'DESCRIPTOR' : _IMPRETRIEVEJOBRESPONSE,\n  '__module__' : 'imp.response.response_imp_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Imp.Models.Response.ImpRetrieveJobResponse)\n  })\n_sym_db.RegisterMessage(ImpRetrieveJobResponse)\n_sym_db.RegisterMessage(ImpRetrieveJobResponse.ResultEntry)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.imp.model.responseB\\013ImpResponseP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/imp/models/response\\240\\001\\001\\330\\001\\001\\312\\002 Volc\\\\Service\\\\Imp\\\\Models\\\\Response\\342\\002#Volc\\\\Service\\\\Imp\\\\Models\\\\GPBMetadata'\n  _IMPRETRIEVEJOBRESPONSE_RESULTENTRY._options = None\n  _IMPRETRIEVEJOBRESPONSE_RESULTENTRY._serialized_options = b'8\\001'\n  _IMPSUBMITJOBRESPONSE._serialized_start=126\n  _IMPSUBMITJOBRESPONSE._serialized_end=237\n  _IMPKILLJOBRESPONSE._serialized_start=239\n  _IMPKILLJOBRESPONSE._serialized_end=332\n  _IMPRETRIEVEJOBRESPONSE._serialized_start=335\n  _IMPRETRIEVEJOBRESPONSE._serialized_end=609\n  _IMPRETRIEVEJOBRESPONSE_RESULTENTRY._serialized_start=518\n  _IMPRETRIEVEJOBRESPONSE_RESULTENTRY._serialized_end=609\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/live/LiveService.py",
    "content": "# coding:utf-8\nimport json\nimport sys\nimport threading\n\nfrom google.protobuf.json_format import Parse, MessageToJson, MessageToDict\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.base.Service import Service\nfrom volcengine.const.Const import REGION_CN_NORTH1\nfrom volcengine.live.models.response.response_live_pb2 import DescribeCDNSnapshotHistoryResponse, \\\n    DescribeRecordTaskFileHistoryResponse, DescribeLiveStreamInfoByPageResponse, KillStreamResponse, \\\n    ForbidStreamResponse, DescribeClosedStreamInfoByPageResponse, DescribeLiveStreamStateResponse, \\\n    DescribeForbiddenStreamInfoByPageResponse, ResumeStreamResponse, UpdateRelaySourceResponse, \\\n    DeleteRelaySourceResponse, DescribeRelaySourceResponse, CreateVQScoreTaskResponse, DescribeVQScoreTaskResponse, \\\n    ListVQScoreTaskResponse, GeneratePlayURLResponse, GeneratePushURLResponse, CreatePullToPushTaskResponse, \\\n    ListPullToPushTaskResponse, UpdatePullToPushTaskResponse, StopPullToPushTaskResponse, RestartPullToPushTaskResponse, \\\n    DeletePullToPushTaskResponse, UpdateDenyConfigResponse, DescribeDenyConfigResponse\n\nLIVE_SERVICE_VERSION2020 = \"2020-08-01\"\nLIVE_SERVICE_VERSION2023 = \"2023-01-01\"\nservice_info_map = {\n    REGION_CN_NORTH1: ServiceInfo(\"live.volcengineapi.com\", {'Accept': 'application/json', },\n                                  Credentials('', '', \"live\", REGION_CN_NORTH1), 5, 5, \"https\"),\n}\n\napi_info = {\n    \"ListCommonTransPresetDetail\": ApiInfo(\"POST\", \"/\",\n                                           {\"Action\": \"ListCommonTransPresetDetail\", \"Version\": LIVE_SERVICE_VERSION2023},\n                                           {}, {}),\n    \"UpdateCallback\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateCallback\", \"Version\": LIVE_SERVICE_VERSION2023}, {}, {}),\n    \"DescribeCallback\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeCallback\", \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                {}),\n    \"DeleteCallback\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteCallback\", \"Version\": LIVE_SERVICE_VERSION2023},\n                              {}, {}),\n\n    \"CreateDomain\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateDomain\", \"Version\": LIVE_SERVICE_VERSION2023}, {}, {}),\n\n    \"DeleteDomain\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteDomain\", \"Version\": LIVE_SERVICE_VERSION2023},\n                            {},\n                            {}),\n    \"ListDomainDetail\": ApiInfo(\"POST\", \"/\",\n                                {\"Action\": \"ListDomainDetail\", \"Version\": LIVE_SERVICE_VERSION2023},\n                                {}, {}),\n    \"DescribeDomain\": ApiInfo(\"POST\", \"/\",\n                              {\"Action\": \"DescribeDomain\", \"Version\": LIVE_SERVICE_VERSION2023},\n                              {}, {}),\n    \"EnableDomain\": ApiInfo(\"POST\", \"/\",\n                            {\"Action\": \"EnableDomain\", \"Version\": LIVE_SERVICE_VERSION2023},\n                            {}, {}),\n    \"DisableDomain\": ApiInfo(\"POST\", \"/\",\n                             {\"Action\": \"DisableDomain\", \"Version\": LIVE_SERVICE_VERSION2023},\n                             {}, {}),\n    \"ManagerPullPushDomainBind\": ApiInfo(\"POST\", \"/\",\n                                         {\"Action\": \"ManagerPullPushDomainBind\", \"Version\": LIVE_SERVICE_VERSION2023},\n                                         {},\n                                         {}),\n    \"UpdateAuthKey\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateAuthKey\", \"Version\": LIVE_SERVICE_VERSION2023}, {}, {}),\n    \"DescribeAuth\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeAuth\", \"Version\": LIVE_SERVICE_VERSION2023}, {}, {}),\n    \"ForbidStream\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ForbidStream\", \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                            {}),\n    \"ResumeStream\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ResumeStream\", \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                            {}),\n    \"ListCert\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListCert\", \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                        {}),\n    \"CreateCert\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateCert\", \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                          {}),\n    \"UpdateCert\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateCert\", \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                          {}),\n    \"BindCert\": ApiInfo(\"POST\", \"/\", {\"Action\": \"BindCert\", \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                        {}),\n    \"UnbindCert\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UnbindCert\", \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                          {}),\n    \"DeleteCert\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteCert\", \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                          {}),\n    \"UpdateReferer\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateReferer\", \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                             {}),\n    \"DeleteReferer\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteReferer\", \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                             {}),\n    \"DescribeReferer\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeReferer\", \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                               {}),\n    \"CreateRecordPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateRecordPreset\", \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                  {}),\n    \"UpdateRecordPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateRecordPreset\", \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                  {}),\n    \"DeleteRecordPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteRecordPreset\", \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                  {}),\n    \"ListVhostRecordPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListVhostRecordPreset\", \"Version\": LIVE_SERVICE_VERSION2023},\n                                     {},\n                                     {}),\n    \"CreateTranscodePreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateTranscodePreset\", \"Version\": LIVE_SERVICE_VERSION2023},\n                                     {},\n                                     {}),\n    \"UpdateTranscodePreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateTranscodePreset\", \"Version\": LIVE_SERVICE_VERSION2023},\n                                     {},\n                                     {}),\n    \"DeleteTranscodePreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteTranscodePreset\", \"Version\": LIVE_SERVICE_VERSION2023},\n                                     {},\n                                     {}),\n    \"ListVhostTransCodePreset\": ApiInfo(\"POST\", \"/\",\n                                        {\"Action\": \"ListVhostTransCodePreset\", \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                        {}),\n    \"CreateSnapshotPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateSnapshotPreset\", \"Version\": LIVE_SERVICE_VERSION2023},\n                                    {},\n                                    {}),\n    \"UpdateSnapshotPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateSnapshotPreset\", \"Version\": LIVE_SERVICE_VERSION2023},\n                                    {},\n                                    {}),\n    \"DeleteSnapshotPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteSnapshotPreset\", \"Version\": LIVE_SERVICE_VERSION2023},\n                                    {},\n                                    {}),\n    \"ListVhostSnapshotPreset\": ApiInfo(\"POST\", \"/\",\n                                       {\"Action\": \"ListVhostSnapshotPreset\", \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                       {}),\n    \"DescribeLiveBandwidthData\": ApiInfo(\"POST\", \"/\",\n                                         {\"Action\": \"DescribeLiveBandwidthData\", \"Version\": LIVE_SERVICE_VERSION2020}, {},\n                                         {}),\n    \"DescribeLiveTrafficData\": ApiInfo(\"POST\", \"/\",\n                                       {\"Action\": \"DescribeLiveTrafficData\", \"Version\": LIVE_SERVICE_VERSION2020}, {},\n                                       {}),\n    \"DescribeLiveP95PeakBandwidthData\": ApiInfo(\"POST\", \"/\",\n                                                {\"Action\": \"DescribeLiveP95PeakBandwidthData\",\n                                                 \"Version\": LIVE_SERVICE_VERSION2020}, {},\n                                                {}),\n    \"DescribeRecordData\": ApiInfo(\"POST\", \"/\",\n                                  {\"Action\": \"DescribeRecordData\", \"Version\": LIVE_SERVICE_VERSION2020}, {},\n                                  {}),\n    \"DescribeTranscodeData\": ApiInfo(\"POST\", \"/\",\n                                     {\"Action\": \"DescribeTranscodeData\", \"Version\": LIVE_SERVICE_VERSION2020}, {},\n                                     {}),\n    \"DescribeSnapshotData\": ApiInfo(\"POST\", \"/\",\n                                    {\"Action\": \"DescribeSnapshotData\", \"Version\": LIVE_SERVICE_VERSION2020}, {},\n                                    {}),\n\n    \"DescribeLiveDomainLog\": ApiInfo(\"GET\", \"/\",\n                                     {\"Action\": \"DescribeLiveDomainLog\", \"Version\": LIVE_SERVICE_VERSION2020}, {},\n                                     {}),\n    \"DescribePushStreamMetrics\": ApiInfo(\"POST\", \"/\",\n                                         {\"Action\": \"DescribePushStreamMetrics\", \"Version\": LIVE_SERVICE_VERSION2020}, {},\n                                         {}),\n    \"DescribeLiveStreamSessions\": ApiInfo(\"POST\", \"/\",\n                                          {\"Action\": \"DescribeLiveStreamSessions\", \"Version\": LIVE_SERVICE_VERSION2020}, {},\n                                          {}),\n    \"DescribePlayResponseStatusStat\": ApiInfo(\"POST\", \"/\",\n                                              {\"Action\": \"DescribePlayResponseStatusStat\",\n                                               \"Version\": LIVE_SERVICE_VERSION2020}, {},\n                                              {}),\n    \"DescribeLiveMetricTrafficData\": ApiInfo(\"POST\", \"/\",\n                                             {\"Action\": \"DescribeLiveMetricTrafficData\",\n                                              \"Version\": LIVE_SERVICE_VERSION2020}, {},\n                                             {}),\n    \"DescribeLiveMetricBandwidthData\": ApiInfo(\"POST\", \"/\",\n                                               {\"Action\": \"DescribeLiveMetricBandwidthData\",\n                                                \"Version\": LIVE_SERVICE_VERSION2020}, {},\n                                               {}),\n    \"DescribePlayStreamList\": ApiInfo(\"GET\", \"/\",\n                                      {\"Action\": \"DescribePlayStreamList\",\n                                       \"Version\": LIVE_SERVICE_VERSION2020}, {},\n                                      {}),\n    \"DescribePullToPushBandwidthData\": ApiInfo(\"POST\", \"/\",\n                                               {\"Action\": \"DescribePullToPushBandwidthData\",\n                                                \"Version\": LIVE_SERVICE_VERSION2020}, {},\n                                               {}),\n    \"CreateSnapshotAuditPreset\": ApiInfo(\"POST\", \"/\",\n                                         {\"Action\": \"CreateSnapshotAuditPreset\",\n                                          \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                         {}),\n    \"ListVhostSnapshotAuditPreset\": ApiInfo(\"POST\", \"/\",\n                                            {\"Action\": \"ListVhostSnapshotAuditPreset\",\n                                             \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                            {}),\n    \"UpdateSnapshotAuditPreset\": ApiInfo(\"POST\", \"/\",\n                                         {\"Action\": \"UpdateSnapshotAuditPreset\",\n                                          \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                         {}),\n    \"DeleteSnapshotAuditPreset\": ApiInfo(\"POST\", \"/\",\n                                         {\"Action\": \"DeleteSnapshotAuditPreset\",\n                                          \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                         {}),\n    \"DescribeLiveAuditData\": ApiInfo(\"POST\", \"/\",\n                                     {\"Action\": \"DescribeLiveAuditData\",\n                                      \"Version\": LIVE_SERVICE_VERSION2020}, {},\n                                     {}),\n    \"DescribeCDNSnapshotHistory\": ApiInfo(\"POST\", \"/\",\n                                          {\"Action\": \"DescribeCDNSnapshotHistory\",\n                                           \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                          {}),\n    \"DescribeRecordTaskFileHistory\": ApiInfo(\"POST\", \"/\",\n                                             {\"Action\": \"DescribeRecordTaskFileHistory\",\n                                              \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                             {}),\n    \"DescribeCDNSnapshotHistory\": ApiInfo(\"POST\", \"/\",\n                                          {\"Action\": \"DescribeCDNSnapshotHistory\",\n                                           \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                          {}),\n    \"DescribeRecordTaskFileHistory\": ApiInfo(\"POST\", \"/\",\n                                             {\"Action\": \"DescribeRecordTaskFileHistory\",\n                                              \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                             {}),\n    \"DescribeLiveStreamInfoByPage\": ApiInfo(\"GET\", \"/\",\n                                            {\"Action\": \"DescribeLiveStreamInfoByPage\",\n                                             \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                            {}),\n    \"KillStream\": ApiInfo(\"POST\", \"/\",\n                          {\"Action\": \"KillStream\",\n                           \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                          {}),\n    \"DescribeClosedStreamInfoByPage\": ApiInfo(\"GET\", \"/\",\n                                              {\"Action\": \"DescribeClosedStreamInfoByPage\",\n                                               \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                              {}),\n    \"DescribeLiveStreamState\": ApiInfo(\"GET\", \"/\",\n                                       {\"Action\": \"DescribeLiveStreamState\",\n                                        \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                       {}),\n    \"DescribeForbiddenStreamInfoByPage\": ApiInfo(\"GET\", \"/\",\n                                                 {\"Action\": \"DescribeForbiddenStreamInfoByPage\",\n                                                  \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                                 {}),\n    \"UpdateRelaySourceV2\": ApiInfo(\"POST\", \"/\",\n                                   {\"Action\": \"UpdateRelaySourceV2\",\n                                    \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                   {}),\n    \"DeleteRelaySourceV2\": ApiInfo(\"POST\", \"/\",\n                                   {\"Action\": \"DeleteRelaySourceV2\",\n                                    \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                   {}),\n    \"DescribeRelaySourceV2\": ApiInfo(\"POST\", \"/\",\n                                     {\"Action\": \"DescribeRelaySourceV2\",\n                                      \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                     {}),\n    \"CreateVQScoreTask\": ApiInfo(\"POST\", \"/\",\n                                 {\"Action\": \"CreateVQScoreTask\",\n                                  \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                 {}),\n    \"DescribeVQScoreTask\": ApiInfo(\"POST\", \"/\",\n                                   {\"Action\": \"DescribeVQScoreTask\",\n                                    \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                   {}),\n    \"ListVQScoreTask\": ApiInfo(\"POST\", \"/\",\n                               {\"Action\": \"ListVQScoreTask\",\n                                \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                               {}),\n    \"GeneratePlayURL\": ApiInfo(\"POST\", \"/\",\n                               {\"Action\": \"GeneratePlayURL\",\n                                \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                               {}),\n    \"GeneratePushURL\": ApiInfo(\"POST\", \"/\",\n                               {\"Action\": \"GeneratePushURL\",\n                                \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                               {}),\n    \"CreatePullToPushTask\": ApiInfo(\"POST\", \"/\",\n                                    {\"Action\": \"CreatePullToPushTask\",\n                                     \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                    {}),\n    \"ListPullToPushTask\": ApiInfo(\"POST\", \"/\",\n                                  {\"Action\": \"ListPullToPushTask\",\n                                   \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                  {}),\n    \"UpdatePullToPushTask\": ApiInfo(\"POST\", \"/\",\n                                    {\"Action\": \"UpdatePullToPushTask\",\n                                     \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                    {}),\n    \"StopPullToPushTask\": ApiInfo(\"POST\", \"/\",\n                                  {\"Action\": \"StopPullToPushTask\",\n                                   \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                  {}),\n    \"RestartPullToPushTask\": ApiInfo(\"POST\", \"/\",\n                                     {\"Action\": \"RestartPullToPushTask\",\n                                      \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                     {}),\n    \"DeletePullToPushTask\": ApiInfo(\"POST\", \"/\",\n                                    {\"Action\": \"DeletePullToPushTask\",\n                                     \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                    {}),\n    \"UpdateDenyConfig\": ApiInfo(\"POST\", \"/\",\n                                {\"Action\": \"UpdateDenyConfig\",\n                                 \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                {}),\n    \"DescribeDenyConfig\": ApiInfo(\"POST\", \"/\",\n                                  {\"Action\": \"DescribeDenyConfig\",\n                                   \"Version\": LIVE_SERVICE_VERSION2023}, {},\n                                  {}),\n    \"CreateLiveStreamRecordIndexFiles\": ApiInfo(\"POST\", \"/\",\n                                                {\"Action\": \"CreateLiveStreamRecordIndexFiles\",\n                                                 \"Version\": LIVE_SERVICE_VERSION2020}, {},\n                                                {}),\n    \"DescribeLiveBatchPushStreamMetrics\": ApiInfo(\"POST\", \"/\",\n                                                  {\"Action\": \"DescribeLiveBatchPushStreamMetrics\",\n                                                   \"Version\": LIVE_SERVICE_VERSION2020}, {},\n                                                  {}),\n    \"DescribeLiveBatchSourceStreamMetrics\": ApiInfo(\"POST\", \"/\",\n                                                    {\"Action\": \"DescribeLiveBatchSourceStreamMetrics\",\n                                                     \"Version\": LIVE_SERVICE_VERSION2020}, {},\n                                                    {}),\n}\n\n\nclass LiveService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(LiveService, \"_instance\"):\n            with LiveService._instance_lock:\n                if not hasattr(LiveService, \"_instance\"):\n                    LiveService._instance = object.__new__(cls)\n        return LiveService._instance\n\n    def __init__(self, region=REGION_CN_NORTH1):\n        self.service_info = LiveService.get_service_info(region)\n        self.api_info = LiveService.get_api_info()\n        super(LiveService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info(region_name):\n        service_info = service_info_map.get(region_name, None)\n        if not service_info:\n            raise Exception('do not support region %s' % region_name)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        return api_info\n\n    def list_common_trans_preset_detail(self, params):\n        action = \"ListCommonTransPresetDetail\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def update_callback(self, params):\n        action = \"UpdateCallback\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_callback(self, params):\n        action = \"DescribeCallback\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_callback(self, params):\n        action = \"DeleteCallback\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def create_domain(self, params):\n        action = \"CreateDomain\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_domain(self, params):\n        action = \"DeleteDomain\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def list_domain_detail(self, params):\n        action = \"ListDomainDetail\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_domain(self, params):\n        action = \"DescribeDomain\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def enable_domain(self, params):\n        action = \"EnableDomain\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def disable_domain(self, params):\n        action = \"DisableDomain\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def manager_pull_push_domain_bind(self, params):\n        action = \"ManagerPullPushDomainBind\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def update_auth_key(self, params):\n        action = \"UpdateAuthKey\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_auth(self, params):\n        action = \"DescribeAuth\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def forbid_stream(self, params):\n        action = \"ForbidStream\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def resume_stream(self, params):\n        action = \"ResumeStream\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def list_cert(self, params):\n        action = \"ListCert\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def create_cert(self, params):\n        action = \"CreateCert\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def update_cert(self, params):\n        action = \"UpdateCert\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def bind_cert(self, params):\n        action = \"BindCert\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def un_bind_cert(self, params):\n        action = \"UnbindCert\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_cert(self, params):\n        action = \"DeleteCert\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def update_referer(self, params):\n        action = \"UpdateReferer\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_referer(self, params):\n        action = \"DeleteReferer\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_referer(self, params):\n        action = \"DescribeReferer\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def create_record_preset(self, params):\n        action = \"CreateRecordPreset\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def update_record_preset(self, params):\n        action = \"UpdateRecordPreset\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_record_preset(self, params):\n        action = \"DeleteRecordPreset\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def list_vhost_record_preset(self, params):\n        action = \"ListVhostRecordPreset\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def create_transcode_preset(self, params):\n        action = \"CreateTranscodePreset\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def update_transcode_preset(self, params):\n        action = \"UpdateTranscodePreset\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_transcode_preset(self, params):\n        action = \"DeleteTranscodePreset\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def list_vhost_transcode_preset(self, params):\n        action = \"ListVhostTransCodePreset\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def create_snapshot_preset(self, params):\n        action = \"CreateSnapshotPreset\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def update_snapshot_preset(self, params):\n        action = \"UpdateSnapshotPreset\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_snapshot_preset(self, params):\n        action = \"DeleteSnapshotPreset\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def list_vhost_snapshot_preset(self, params):\n        action = \"ListVhostSnapshotPreset\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_live_bandwidth_data(self, params):\n        action = \"DescribeLiveBandwidthData\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_live_traffic_data(self, params):\n        action = \"DescribeLiveTrafficData\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_live_P95Peak_bandwidth_data(self, params):\n        action = \"DescribeLiveP95PeakBandwidthData\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_record_data(self, params):\n        action = \"DescribeRecordData\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_transcode_data(self, params):\n        action = \"DescribeTranscodeData\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_snapshot_data(self, params):\n        action = \"DescribeSnapshotData\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_live_domain_log(self, params):\n        action = \"DescribeLiveDomainLog\"\n        res = self.get(action, params)\n        # res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_push_stream_metrics(self, params):\n        action = \"DescribePushStreamMetrics\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_live_stream_sessions(self, params):\n        action = \"DescribeLiveStreamSessions\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_play_response_status_stat(self, params):\n        action = \"DescribePlayResponseStatusStat\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_live_metric_traffic_data(self, params):\n        action = \"DescribeLiveMetricTrafficData\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_live_metric_bandwidth_data(self, params):\n        action = \"DescribeLiveMetricBandwidthData\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_play_stream_list(self, params):\n        action = \"DescribePlayStreamList\"\n        res = self.get(action, params)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_pull_to_push_bandwidth_data(self, params):\n        action = \"DescribePullToPushBandwidthData\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def create_snapshot_audit_preset(self, params):\n        action = \"CreateSnapshotAuditPreset\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def update_snapshot_audit_preset(self, params):\n        action = \"UpdateSnapshotAuditPreset\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_snapshot_audit_preset(self, params):\n        action = \"DeleteSnapshotAuditPreset\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def list_vhost_snapshot_audit_preset(self, params):\n        action = \"ListVhostSnapshotAuditPreset\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_live_audit_data(self, params):\n        action = \"DescribeLiveAuditData\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_c_d_n_snapshot_history(self, request):\n        try:\n            params = MessageToDict(request, False, True)\n            res = self.json(\"DescribeCDNSnapshotHistory\", {}, json.dumps(params))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeCDNSnapshotHistoryResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeCDNSnapshotHistoryResponse(), True)\n\n    def describe_record_task_file_history(self, request):\n        try:\n            params = MessageToDict(request, False, True)\n            res = self.json(\"DescribeRecordTaskFileHistory\", {}, json.dumps(params))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeRecordTaskFileHistoryResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeRecordTaskFileHistoryResponse(), True)\n\n    def describe_live_stream_info_by_page(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeLiveStreamInfoByPage\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeLiveStreamInfoByPageResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeLiveStreamInfoByPageResponse(), True)\n\n    def kill_stream(self, request):\n        try:\n            params = MessageToDict(request, False, True)\n            res = self.json(\"KillStream\", {}, json.dumps(params))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), KillStreamResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, KillStreamResponse(), True)\n\n    def describe_closed_stream_info_by_page(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeClosedStreamInfoByPage\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeClosedStreamInfoByPageResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeClosedStreamInfoByPageResponse(), True)\n\n    def describe_live_stream_state(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeLiveStreamState\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeLiveStreamStateResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeLiveStreamStateResponse(), True)\n\n    def describe_forbidden_stream_info_by_page(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeForbiddenStreamInfoByPage\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeForbiddenStreamInfoByPageResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeForbiddenStreamInfoByPageResponse(), True)\n\n    def update_relay_source_v2(self, request):\n        try:\n            params = MessageToDict(request, False, True)\n            res = self.json(\"UpdateRelaySourceV2\", {}, json.dumps(params))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), UpdateRelaySourceResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, UpdateRelaySourceResponse(), True)\n\n    def delete_relay_source_v2(self, request):\n        try:\n            params = MessageToDict(request, False, True)\n            res = self.json(\"DeleteRelaySourceV2\", {}, json.dumps(params))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DeleteRelaySourceResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DeleteRelaySourceResponse(), True)\n\n    def describe_relay_source_v2(self, request):\n        try:\n            params = MessageToDict(request, False, True)\n            res = self.json(\"DescribeRelaySourceV2\", {}, json.dumps(params))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeRelaySourceResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeRelaySourceResponse(), True)\n\n    def create_v_q_score_task(self, request):\n        try:\n            res = self.json(\"CreateVQScoreTask\", {}, json.dumps(request.__dict__))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), CreateVQScoreTaskResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, CreateVQScoreTaskResponse(), True)\n\n    def describe_v_q_score_task(self, request):\n        try:\n            params = MessageToDict(request, False, True)\n            res = self.json(\"DescribeVQScoreTask\", {}, json.dumps(params))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeVQScoreTaskResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeVQScoreTaskResponse(), True)\n\n    def list_v_q_score_task(self, request):\n        try:\n            res = self.json(\"ListVQScoreTask\", {}, json.dumps(request.__dict__))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), ListVQScoreTaskResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, ListVQScoreTaskResponse(), True)\n\n    #\n    # GeneratePlayURL.\n    #\n    # @param request GeneratePlayURLRequest\n    # @return GeneratePlayURLResponse\n    # @raise Exception\n    def generate_play_u_r_l(self, request):\n        try:\n            res = self.json(\"GeneratePlayURL\", {}, json.dumps(request.__dict__))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), GeneratePlayURLResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, GeneratePlayURLResponse(), True)\n\n    def generate_push_u_r_l(self, request):\n        try:\n            res = self.json(\"GeneratePushURL\", {}, json.dumps(request.__dict__))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), GeneratePushURLResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, GeneratePushURLResponse(), True)\n\n    def create_pull_to_push_task(self, request):\n        try:\n            res = self.json(\"CreatePullToPushTask\", {}, json.dumps(request.__dict__))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), CreatePullToPushTaskResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, CreatePullToPushTaskResponse(), True)\n\n    #\n    # ListPullToPushTask.\n    #\n    # @param request ListPullToPushTaskRequest\n    # @return ListPullToPushTaskResponse\n    # @raise Exception\n    def list_pull_to_push_task(self, request):\n        try:\n            params = MessageToDict(request, False, True)\n            res = self.json(\"ListPullToPushTask\", {}, json.dumps(params))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), ListPullToPushTaskResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, ListPullToPushTaskResponse(), True)\n\n    #\n    # UpdatePullToPushTask.\n    #\n    # @param request UpdatePullToPushTaskRequest\n    # @return UpdatePullToPushTaskResponse\n    # @raise Exception\n    def update_pull_to_push_task(self, request):\n        try:\n            res = self.json(\"UpdatePullToPushTask\", {}, json.dumps(request.__dict__))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), UpdatePullToPushTaskResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, UpdatePullToPushTaskResponse(), True)\n\n    # StopPullToPushTask.\n    #\n    # @param request StopPullToPushTaskRequest\n    # @return StopPullToPushTaskResponse\n    # @raise Exception\n    def stop_pull_to_push_task(self, request):\n        try:\n            params = MessageToDict(request, False, True)\n            res = self.json(\"StopPullToPushTask\", {}, json.dumps(params))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), StopPullToPushTaskResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, StopPullToPushTaskResponse(), True)\n\n    # RestartPullToPushTask.\n    #\n    # @param request RestartPullToPushTaskRequest\n    # @return RestartPullToPushTaskResponse\n    # @raise Exception\n    def restart_pull_to_push_task(self, request):\n        try:\n            params = MessageToDict(request, False, True)\n            res = self.json(\"RestartPullToPushTask\", {}, json.dumps(params))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), RestartPullToPushTaskResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, RestartPullToPushTaskResponse(), True)\n\n    def delete_pull_to_push_task(self, request):\n        try:\n            params = MessageToDict(request, False, True)\n            res = self.json(\"DeletePullToPushTask\", {}, json.dumps(params))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DeletePullToPushTaskResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DeletePullToPushTaskResponse(), True)\n\n    def update_deny_config(self, request):\n        try:\n            params = MessageToDict(request, False, True)\n            res = self.json(\"UpdateDenyConfig\", {}, json.dumps(params))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), UpdateDenyConfigResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, UpdateDenyConfigResponse(), True)\n\n    # DescribeDenyConfig.\n    #\n    # @param request DescribeDenyConfigRequest\n    # @return DescribeDenyConfigResponse\n    # @raise Exception\n    def describe_deny_config(self, request):\n        try:\n            params = MessageToDict(request, False, True)\n            res = self.json(\"DescribeDenyConfig\", {}, json.dumps(params))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeDenyConfigResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeDenyConfigResponse(), True)\n\n    def create_live_stream_record_index_files(self, params):\n        action = \"CreateLiveStreamRecordIndexFiles\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_live_batch_push_stream_metrics(self, params):\n        action = \"DescribeLiveBatchPushStreamMetrics\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def describe_live_batch_source_stream_metrics(self, params):\n        action = \"DescribeLiveBatchSourceStreamMetrics\"\n        res = self.json(action, dict(), json.dumps(params))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n"
  },
  {
    "path": "volcengine/live/__init__.py",
    "content": "__version__ = '1.0.0'\n"
  },
  {
    "path": "volcengine/live/models/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/live/models/business/VQScore_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/business/VQScore.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\x1blive/business/VQScore.proto\\x12\\x1fVolcengine.Live.Models.Business\\\"\\x17\\n\\tVQScoreID\\x12\\n\\n\\x02ID\\x18\\x01 \\x01(\\t\\\"-\\n\\tScoreInfo\\x12\\x11\\n\\tPointTime\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05Score\\x18\\x02 \\x01(\\x02\\\"d\\n\\rAddrScoreInfo\\x12\\x10\\n\\x08\\x41\\x64\\x64rType\\x18\\x01 \\x01(\\x03\\x12\\x41\\n\\rScoreInfoList\\x18\\x02 \\x03(\\x0b\\x32*.Volcengine.Live.Models.Business.ScoreInfo\\\"\\x88\\x02\\n\\x0bVQScoreInfo\\x12\\x10\\n\\x08MainAddr\\x18\\x01 \\x01(\\t\\x12\\x14\\n\\x0c\\x43ontrastAddr\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x03 \\x01(\\x03\\x12\\x15\\n\\rTotalPointNum\\x18\\x04 \\x01(\\x03\\x12\\x18\\n\\x10MainAverageScore\\x18\\x05 \\x01(\\x02\\x12\\x1c\\n\\x14\\x43ontrastAverageScore\\x18\\x06 \\x01(\\x02\\x12\\x12\\n\\nDifference\\x18\\x07 \\x01(\\x02\\x12\\x15\\n\\rDifferencePer\\x18\\x08 \\x01(\\x02\\x12\\x45\\n\\rAddrScoreList\\x18\\t \\x03(\\x0b\\x32..Volcengine.Live.Models.Business.AddrScoreInfo\\\"R\\n\\x0fVQScoreTaskInfo\\x12\\n\\n\\x02ID\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x02 \\x01(\\x03\\x12\\x0e\\n\\x06Status\\x18\\x03 \\x01(\\x03\\x12\\x11\\n\\tAccountID\\x18\\x04 \\x01(\\t\\\"\\x8c\\x01\\n\\x13VQScoreTaskListInfo\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\r\\n\\x05Total\\x18\\x04 \\x01(\\x03\\x12\\x42\\n\\x08TaskList\\x18\\x05 \\x03(\\x0b\\x32\\x30.Volcengine.Live.Models.Business.VQScoreTaskInfoB\\xcf\\x01\\n*com.volcengine.service.live.model.businessB\\x07VQScoreP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_VQSCOREID = DESCRIPTOR.message_types_by_name['VQScoreID']\n_SCOREINFO = DESCRIPTOR.message_types_by_name['ScoreInfo']\n_ADDRSCOREINFO = DESCRIPTOR.message_types_by_name['AddrScoreInfo']\n_VQSCOREINFO = DESCRIPTOR.message_types_by_name['VQScoreInfo']\n_VQSCORETASKINFO = DESCRIPTOR.message_types_by_name['VQScoreTaskInfo']\n_VQSCORETASKLISTINFO = DESCRIPTOR.message_types_by_name['VQScoreTaskListInfo']\nVQScoreID = _reflection.GeneratedProtocolMessageType('VQScoreID', (_message.Message,), {\n  'DESCRIPTOR' : _VQSCOREID,\n  '__module__' : 'live.business.VQScore_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.VQScoreID)\n  })\n_sym_db.RegisterMessage(VQScoreID)\n\nScoreInfo = _reflection.GeneratedProtocolMessageType('ScoreInfo', (_message.Message,), {\n  'DESCRIPTOR' : _SCOREINFO,\n  '__module__' : 'live.business.VQScore_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.ScoreInfo)\n  })\n_sym_db.RegisterMessage(ScoreInfo)\n\nAddrScoreInfo = _reflection.GeneratedProtocolMessageType('AddrScoreInfo', (_message.Message,), {\n  'DESCRIPTOR' : _ADDRSCOREINFO,\n  '__module__' : 'live.business.VQScore_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.AddrScoreInfo)\n  })\n_sym_db.RegisterMessage(AddrScoreInfo)\n\nVQScoreInfo = _reflection.GeneratedProtocolMessageType('VQScoreInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VQSCOREINFO,\n  '__module__' : 'live.business.VQScore_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.VQScoreInfo)\n  })\n_sym_db.RegisterMessage(VQScoreInfo)\n\nVQScoreTaskInfo = _reflection.GeneratedProtocolMessageType('VQScoreTaskInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VQSCORETASKINFO,\n  '__module__' : 'live.business.VQScore_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.VQScoreTaskInfo)\n  })\n_sym_db.RegisterMessage(VQScoreTaskInfo)\n\nVQScoreTaskListInfo = _reflection.GeneratedProtocolMessageType('VQScoreTaskListInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VQSCORETASKLISTINFO,\n  '__module__' : 'live.business.VQScore_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.VQScoreTaskListInfo)\n  })\n_sym_db.RegisterMessage(VQScoreTaskListInfo)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.businessB\\007VQScoreP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _VQSCOREID._serialized_start=64\n  _VQSCOREID._serialized_end=87\n  _SCOREINFO._serialized_start=89\n  _SCOREINFO._serialized_end=134\n  _ADDRSCOREINFO._serialized_start=136\n  _ADDRSCOREINFO._serialized_end=236\n  _VQSCOREINFO._serialized_start=239\n  _VQSCOREINFO._serialized_end=503\n  _VQSCORETASKINFO._serialized_start=505\n  _VQSCORETASKINFO._serialized_end=587\n  _VQSCORETASKLISTINFO._serialized_start=590\n  _VQSCORETASKLISTINFO._serialized_end=730\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/live/models/business/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/live/models/business/addr_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/business/addr.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\x18live/business/addr.proto\\x12\\x1fVolcengine.Live.Models.Business\\\"R\\n\\x15GeneratePlayURLResult\\x12\\x39\\n\\x07URLList\\x18\\x01 \\x03(\\x0b\\x32(.Volcengine.Live.Models.Business.PlayURL\\\"C\\n\\x07PlayURL\\x12\\x0b\\n\\x03URL\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03\\x43\\x44N\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08Protocol\\x18\\x03 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x04 \\x01(\\t\\\"\\xbf\\x01\\n\\x15GeneratePushURLResult\\x12\\x13\\n\\x0bPushURLList\\x18\\x01 \\x03(\\t\\x12G\\n\\x11PushURLListDetail\\x18\\x02 \\x03(\\x0b\\x32,.Volcengine.Live.Models.Business.PushURLItem\\x12\\x18\\n\\x10TsOverSrtURLList\\x18\\x03 \\x03(\\t\\x12\\x1a\\n\\x12RtmpOverSrtURLList\\x18\\x04 \\x03(\\t\\x12\\x12\\n\\nRtmURLList\\x18\\x05 \\x03(\\t\\\"A\\n\\x0bPushURLItem\\x12\\x0b\\n\\x03URL\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tDomainApp\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nStreamSign\\x18\\x03 \\x01(\\tB\\xcc\\x01\\n*com.volcengine.service.live.model.businessB\\x04\\x41\\x64\\x64rP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_GENERATEPLAYURLRESULT = DESCRIPTOR.message_types_by_name['GeneratePlayURLResult']\n_PLAYURL = DESCRIPTOR.message_types_by_name['PlayURL']\n_GENERATEPUSHURLRESULT = DESCRIPTOR.message_types_by_name['GeneratePushURLResult']\n_PUSHURLITEM = DESCRIPTOR.message_types_by_name['PushURLItem']\nGeneratePlayURLResult = _reflection.GeneratedProtocolMessageType('GeneratePlayURLResult', (_message.Message,), {\n  'DESCRIPTOR' : _GENERATEPLAYURLRESULT,\n  '__module__' : 'live.business.addr_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.GeneratePlayURLResult)\n  })\n_sym_db.RegisterMessage(GeneratePlayURLResult)\n\nPlayURL = _reflection.GeneratedProtocolMessageType('PlayURL', (_message.Message,), {\n  'DESCRIPTOR' : _PLAYURL,\n  '__module__' : 'live.business.addr_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.PlayURL)\n  })\n_sym_db.RegisterMessage(PlayURL)\n\nGeneratePushURLResult = _reflection.GeneratedProtocolMessageType('GeneratePushURLResult', (_message.Message,), {\n  'DESCRIPTOR' : _GENERATEPUSHURLRESULT,\n  '__module__' : 'live.business.addr_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.GeneratePushURLResult)\n  })\n_sym_db.RegisterMessage(GeneratePushURLResult)\n\nPushURLItem = _reflection.GeneratedProtocolMessageType('PushURLItem', (_message.Message,), {\n  'DESCRIPTOR' : _PUSHURLITEM,\n  '__module__' : 'live.business.addr_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.PushURLItem)\n  })\n_sym_db.RegisterMessage(PushURLItem)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.businessB\\004AddrP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _GENERATEPLAYURLRESULT._serialized_start=61\n  _GENERATEPLAYURLRESULT._serialized_end=143\n  _PLAYURL._serialized_start=145\n  _PLAYURL._serialized_end=212\n  _GENERATEPUSHURLRESULT._serialized_start=215\n  _GENERATEPUSHURLRESULT._serialized_end=406\n  _PUSHURLITEM._serialized_start=408\n  _PUSHURLITEM._serialized_end=473\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/live/models/business/deny_config_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/business/deny_config.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\x1flive/business/deny_config.proto\\x12\\x1fVolcengine.Live.Models.Business\\\"\\xa8\\x01\\n\\x10\\x44\\x65nyConfigDetail\\x12\\x0f\\n\\x07ProType\\x18\\x01 \\x03(\\t\\x12\\x0f\\n\\x07\\x46mtType\\x18\\x02 \\x03(\\t\\x12\\x11\\n\\tContinent\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07\\x43ountry\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06Region\\x18\\x05 \\x01(\\t\\x12\\x0c\\n\\x04\\x43ity\\x18\\x06 \\x01(\\t\\x12\\x0b\\n\\x03ISP\\x18\\x07 \\x01(\\t\\x12\\x10\\n\\x08\\x44\\x65nyList\\x18\\x08 \\x03(\\t\\x12\\x11\\n\\tAllowList\\x18\\t \\x03(\\t\\\"b\\n\\x18\\x44\\x65scribeDenyConfigResult\\x12\\x46\\n\\x08\\x44\\x65nyList\\x18\\x01 \\x03(\\x0b\\x32\\x34.Volcengine.Live.Models.Business.VhostWithDenyConfig\\\"\\x8e\\x01\\n\\x13VhostWithDenyConfig\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x03 \\x01(\\t\\x12K\\n\\x10\\x44\\x65nyConfigDetail\\x18\\x04 \\x03(\\x0b\\x32\\x31.Volcengine.Live.Models.Business.DenyConfigDetailB\\xd2\\x01\\n*com.volcengine.service.live.model.businessB\\nDenyConfigP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_DENYCONFIGDETAIL = DESCRIPTOR.message_types_by_name['DenyConfigDetail']\n_DESCRIBEDENYCONFIGRESULT = DESCRIPTOR.message_types_by_name['DescribeDenyConfigResult']\n_VHOSTWITHDENYCONFIG = DESCRIPTOR.message_types_by_name['VhostWithDenyConfig']\nDenyConfigDetail = _reflection.GeneratedProtocolMessageType('DenyConfigDetail', (_message.Message,), {\n  'DESCRIPTOR' : _DENYCONFIGDETAIL,\n  '__module__' : 'live.business.deny_config_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.DenyConfigDetail)\n  })\n_sym_db.RegisterMessage(DenyConfigDetail)\n\nDescribeDenyConfigResult = _reflection.GeneratedProtocolMessageType('DescribeDenyConfigResult', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEDENYCONFIGRESULT,\n  '__module__' : 'live.business.deny_config_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.DescribeDenyConfigResult)\n  })\n_sym_db.RegisterMessage(DescribeDenyConfigResult)\n\nVhostWithDenyConfig = _reflection.GeneratedProtocolMessageType('VhostWithDenyConfig', (_message.Message,), {\n  'DESCRIPTOR' : _VHOSTWITHDENYCONFIG,\n  '__module__' : 'live.business.deny_config_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.VhostWithDenyConfig)\n  })\n_sym_db.RegisterMessage(VhostWithDenyConfig)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.businessB\\nDenyConfigP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _DENYCONFIGDETAIL._serialized_start=69\n  _DENYCONFIGDETAIL._serialized_end=237\n  _DESCRIBEDENYCONFIGRESULT._serialized_start=239\n  _DESCRIBEDENYCONFIGRESULT._serialized_end=337\n  _VHOSTWITHDENYCONFIG._serialized_start=340\n  _VHOSTWITHDENYCONFIG._serialized_end=482\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/live/models/business/domain_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/business/domain.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\x1alive/business/domain.proto\\x12\\x1fVolcengine.Live.Models.Business\\\"\\x82\\x02\\n\\nDomainList\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x03 \\x01(\\x03\\x12\\x0c\\n\\x04Type\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06Region\\x18\\x05 \\x01(\\t\\x12\\r\\n\\x05\\x43Name\\x18\\x06 \\x01(\\t\\x12\\x12\\n\\nCnameCheck\\x18\\x07 \\x01(\\x03\\x12\\x13\\n\\x0b\\x44omainCheck\\x18\\x08 \\x01(\\x03\\x12\\x10\\n\\x08ICPCheck\\x18\\t \\x01(\\x03\\x12\\x12\\n\\nCreateTime\\x18\\n \\x01(\\t\\x12\\x12\\n\\nCertDomain\\x18\\x0b \\x01(\\t\\x12\\x0f\\n\\x07\\x43hainID\\x18\\x0c \\x01(\\t\\x12\\x10\\n\\x08\\x43\\x65rtName\\x18\\r \\x01(\\t\\x12\\x12\\n\\nPushDomain\\x18\\x0e \\x01(\\t\\\"`\\n\\x0e\\x44omainListInfo\\x12?\\n\\nDomainList\\x18\\x01 \\x03(\\x0b\\x32+.Volcengine.Live.Models.Business.DomainList\\x12\\r\\n\\x05Total\\x18\\x02 \\x01(\\x03\\x42\\xce\\x01\\n*com.volcengine.service.live.model.businessB\\x06\\x44omainP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_DOMAINLIST = DESCRIPTOR.message_types_by_name['DomainList']\n_DOMAINLISTINFO = DESCRIPTOR.message_types_by_name['DomainListInfo']\nDomainList = _reflection.GeneratedProtocolMessageType('DomainList', (_message.Message,), {\n  'DESCRIPTOR' : _DOMAINLIST,\n  '__module__' : 'live.business.domain_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.DomainList)\n  })\n_sym_db.RegisterMessage(DomainList)\n\nDomainListInfo = _reflection.GeneratedProtocolMessageType('DomainListInfo', (_message.Message,), {\n  'DESCRIPTOR' : _DOMAINLISTINFO,\n  '__module__' : 'live.business.domain_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.DomainListInfo)\n  })\n_sym_db.RegisterMessage(DomainListInfo)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.businessB\\006DomainP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _DOMAINLIST._serialized_start=64\n  _DOMAINLIST._serialized_end=322\n  _DOMAINLISTINFO._serialized_start=324\n  _DOMAINLISTINFO._serialized_end=420\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/live/models/business/index_m3u8_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/business/index_m3u8.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\x1elive/business/index_m3u8.proto\\x12\\x1fVolcengine.Live.Models.Business\\\"\\xfd\\x01\\n&CreateLiveStreamRecordIndexFilesResult\\x12\\x0e\\n\\x06\\x44omain\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x03 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x04 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x05 \\x01(\\t\\x12\\x14\\n\\x0cOutputBucket\\x18\\x06 \\x01(\\t\\x12\\x14\\n\\x0cOutputObject\\x18\\x07 \\x01(\\t\\x12\\x11\\n\\tRecordURL\\x18\\x08 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\t \\x01(\\x01\\x12\\x0e\\n\\x06Height\\x18\\n \\x01(\\x03\\x12\\r\\n\\x05Width\\x18\\x0b \\x01(\\x03\\x12\\x12\\n\\nCreateTime\\x18\\x0c \\x01(\\tB\\xcc\\x01\\n*com.volcengine.service.live.model.businessB\\x04\\x41\\x64\\x64rP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_CREATELIVESTREAMRECORDINDEXFILESRESULT = DESCRIPTOR.message_types_by_name['CreateLiveStreamRecordIndexFilesResult']\nCreateLiveStreamRecordIndexFilesResult = _reflection.GeneratedProtocolMessageType('CreateLiveStreamRecordIndexFilesResult', (_message.Message,), {\n  'DESCRIPTOR' : _CREATELIVESTREAMRECORDINDEXFILESRESULT,\n  '__module__' : 'live.business.index_m3u8_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.CreateLiveStreamRecordIndexFilesResult)\n  })\n_sym_db.RegisterMessage(CreateLiveStreamRecordIndexFilesResult)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.businessB\\004AddrP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _CREATELIVESTREAMRECORDINDEXFILESRESULT._serialized_start=68\n  _CREATELIVESTREAMRECORDINDEXFILESRESULT._serialized_end=321\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/live/models/business/pull_to_push_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/business/pull_to_push.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\nfrom volcengine.live.models.business import snapshot_manage_pb2 as live_dot_business_dot_snapshot__manage__pb2\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n live/business/pull_to_push.proto\\x12\\x1fVolcengine.Live.Models.Business\\x1a#live/business/snapshot_manage.proto\\\",\\n\\x1a\\x43reatePullToPushTaskResult\\x12\\x0e\\n\\x06TaskId\\x18\\x01 \\x01(\\t\\\"\\x98\\x01\\n\\x18ListPullToPushTaskResult\\x12;\\n\\x04List\\x18\\x01 \\x03(\\x0b\\x32-.Volcengine.Live.Models.Business.TaskInfoItem\\x12?\\n\\nPagination\\x18\\x02 \\x01(\\x0b\\x32+.Volcengine.Live.Models.Business.Pagination\\\"\\xdf\\x01\\n\\x0cTaskInfoItem\\x12\\r\\n\\x05Title\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06TaskId\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x04 \\x01(\\t\\x12\\x13\\n\\x0b\\x43\\x61llbackURL\\x18\\x05 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x06 \\x01(\\x05\\x12\\x11\\n\\tCycleMode\\x18\\x07 \\x01(\\x05\\x12\\x0f\\n\\x07\\x44stAddr\\x18\\x08 \\x01(\\t\\x12\\x0f\\n\\x07SrcAddr\\x18\\t \\x01(\\t\\x12\\x10\\n\\x08SrcAddrS\\x18\\n \\x03(\\t\\x12\\x0e\\n\\x06Status\\x18\\x0b \\x01(\\t\\x12\\x12\\n\\nTaskStatus\\x18\\x0c \\x01(\\x05\\x42\\xd6\\x01\\n*com.volcengine.service.live.model.businessB\\x0ePullToPushTaskP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_CREATEPULLTOPUSHTASKRESULT = DESCRIPTOR.message_types_by_name['CreatePullToPushTaskResult']\n_LISTPULLTOPUSHTASKRESULT = DESCRIPTOR.message_types_by_name['ListPullToPushTaskResult']\n_TASKINFOITEM = DESCRIPTOR.message_types_by_name['TaskInfoItem']\nCreatePullToPushTaskResult = _reflection.GeneratedProtocolMessageType('CreatePullToPushTaskResult', (_message.Message,), {\n  'DESCRIPTOR' : _CREATEPULLTOPUSHTASKRESULT,\n  '__module__' : 'live.business.pull_to_push_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.CreatePullToPushTaskResult)\n  })\n_sym_db.RegisterMessage(CreatePullToPushTaskResult)\n\nListPullToPushTaskResult = _reflection.GeneratedProtocolMessageType('ListPullToPushTaskResult', (_message.Message,), {\n  'DESCRIPTOR' : _LISTPULLTOPUSHTASKRESULT,\n  '__module__' : 'live.business.pull_to_push_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.ListPullToPushTaskResult)\n  })\n_sym_db.RegisterMessage(ListPullToPushTaskResult)\n\nTaskInfoItem = _reflection.GeneratedProtocolMessageType('TaskInfoItem', (_message.Message,), {\n  'DESCRIPTOR' : _TASKINFOITEM,\n  '__module__' : 'live.business.pull_to_push_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.TaskInfoItem)\n  })\n_sym_db.RegisterMessage(TaskInfoItem)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.businessB\\016PullToPushTaskP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _CREATEPULLTOPUSHTASKRESULT._serialized_start=106\n  _CREATEPULLTOPUSHTASKRESULT._serialized_end=150\n  _LISTPULLTOPUSHTASKRESULT._serialized_start=153\n  _LISTPULLTOPUSHTASKRESULT._serialized_end=305\n  _TASKINFOITEM._serialized_start=308\n  _TASKINFOITEM._serialized_end=531\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/live/models/business/record_manage_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/business/record_manage.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\nfrom volcengine.live.models.business import snapshot_manage_pb2 as live_dot_business_dot_snapshot__manage__pb2\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n!live/business/record_manage.proto\\x12\\x1fVolcengine.Live.Models.Business\\x1a#live/business/snapshot_manage.proto\\\"\\xbf\\x01\\n\\x0eRecordTaskFile\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05Vhost\\x18\\x02 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x03 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06\\x42ucket\\x18\\x05 \\x01(\\t\\x12\\x0c\\n\\x04Path\\x18\\x06 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x07 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x08 \\x01(\\t\\x12\\x0e\\n\\x06\\x46ormat\\x18\\t \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\n \\x01(\\t\\x12\\x10\\n\\x08\\x46ileName\\x18\\x0b \\x01(\\t\\\"\\x93\\x01\\n\\x11RecordHistoryInfo\\x12=\\n\\x04\\x44\\x61ta\\x18\\x01 \\x03(\\x0b\\x32/.Volcengine.Live.Models.Business.RecordTaskFile\\x12?\\n\\nPagination\\x18\\x02 \\x01(\\x0b\\x32+.Volcengine.Live.Models.Business.PaginationB\\xd4\\x01\\n*com.volcengine.service.live.model.businessB\\x0cRecordManageP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_RECORDTASKFILE = DESCRIPTOR.message_types_by_name['RecordTaskFile']\n_RECORDHISTORYINFO = DESCRIPTOR.message_types_by_name['RecordHistoryInfo']\nRecordTaskFile = _reflection.GeneratedProtocolMessageType('RecordTaskFile', (_message.Message,), {\n  'DESCRIPTOR' : _RECORDTASKFILE,\n  '__module__' : 'live.business.record_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.RecordTaskFile)\n  })\n_sym_db.RegisterMessage(RecordTaskFile)\n\nRecordHistoryInfo = _reflection.GeneratedProtocolMessageType('RecordHistoryInfo', (_message.Message,), {\n  'DESCRIPTOR' : _RECORDHISTORYINFO,\n  '__module__' : 'live.business.record_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.RecordHistoryInfo)\n  })\n_sym_db.RegisterMessage(RecordHistoryInfo)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.businessB\\014RecordManageP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _RECORDTASKFILE._serialized_start=108\n  _RECORDTASKFILE._serialized_end=299\n  _RECORDHISTORYINFO._serialized_start=302\n  _RECORDHISTORYINFO._serialized_end=449\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/live/models/business/relay_source_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/business/relay_source.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n live/business/relay_source.proto\\x12\\x1fVolcengine.Live.Models.Business\\\"\\xf9\\x01\\n\\x16RelaySourceGroupItemV2\\x12\\x1d\\n\\x15RelaySourceDomainList\\x18\\x01 \\x03(\\t\\x12i\\n\\x11RelaySourceParams\\x18\\x02 \\x03(\\x0b\\x32N.Volcengine.Live.Models.Business.RelaySourceGroupItemV2.RelaySourceParamsEntry\\x12\\x1b\\n\\x13RelaySourceProtocol\\x18\\x03 \\x01(\\t\\x1a\\x38\\n\\x16RelaySourceParamsEntry\\x12\\x0b\\n\\x03key\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05value\\x18\\x02 \\x01(\\t:\\x02\\x38\\x01\\\"{\\n\\x11RelaySourceConfig\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x02 \\x01(\\t\\x12J\\n\\tGroupList\\x18\\x03 \\x03(\\x0b\\x32\\x37.Volcengine.Live.Models.Business.RelaySourceGroupItemV2\\\"j\\n\\x15RelaySourceConfigList\\x12Q\\n\\x15RelaySourceConfigList\\x18\\x01 \\x03(\\x0b\\x32\\x32.Volcengine.Live.Models.Business.RelaySourceConfigB\\xd3\\x01\\n*com.volcengine.service.live.model.businessB\\x0bRelaySourceP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_RELAYSOURCEGROUPITEMV2 = DESCRIPTOR.message_types_by_name['RelaySourceGroupItemV2']\n_RELAYSOURCEGROUPITEMV2_RELAYSOURCEPARAMSENTRY = _RELAYSOURCEGROUPITEMV2.nested_types_by_name['RelaySourceParamsEntry']\n_RELAYSOURCECONFIG = DESCRIPTOR.message_types_by_name['RelaySourceConfig']\n_RELAYSOURCECONFIGLIST = DESCRIPTOR.message_types_by_name['RelaySourceConfigList']\nRelaySourceGroupItemV2 = _reflection.GeneratedProtocolMessageType('RelaySourceGroupItemV2', (_message.Message,), {\n\n  'RelaySourceParamsEntry' : _reflection.GeneratedProtocolMessageType('RelaySourceParamsEntry', (_message.Message,), {\n    'DESCRIPTOR' : _RELAYSOURCEGROUPITEMV2_RELAYSOURCEPARAMSENTRY,\n    '__module__' : 'live.business.relay_source_pb2'\n    # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.RelaySourceGroupItemV2.RelaySourceParamsEntry)\n    })\n  ,\n  'DESCRIPTOR' : _RELAYSOURCEGROUPITEMV2,\n  '__module__' : 'live.business.relay_source_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.RelaySourceGroupItemV2)\n  })\n_sym_db.RegisterMessage(RelaySourceGroupItemV2)\n_sym_db.RegisterMessage(RelaySourceGroupItemV2.RelaySourceParamsEntry)\n\nRelaySourceConfig = _reflection.GeneratedProtocolMessageType('RelaySourceConfig', (_message.Message,), {\n  'DESCRIPTOR' : _RELAYSOURCECONFIG,\n  '__module__' : 'live.business.relay_source_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.RelaySourceConfig)\n  })\n_sym_db.RegisterMessage(RelaySourceConfig)\n\nRelaySourceConfigList = _reflection.GeneratedProtocolMessageType('RelaySourceConfigList', (_message.Message,), {\n  'DESCRIPTOR' : _RELAYSOURCECONFIGLIST,\n  '__module__' : 'live.business.relay_source_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.RelaySourceConfigList)\n  })\n_sym_db.RegisterMessage(RelaySourceConfigList)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.businessB\\013RelaySourceP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _RELAYSOURCEGROUPITEMV2_RELAYSOURCEPARAMSENTRY._options = None\n  _RELAYSOURCEGROUPITEMV2_RELAYSOURCEPARAMSENTRY._serialized_options = b'8\\001'\n  _RELAYSOURCEGROUPITEMV2._serialized_start=70\n  _RELAYSOURCEGROUPITEMV2._serialized_end=319\n  _RELAYSOURCEGROUPITEMV2_RELAYSOURCEPARAMSENTRY._serialized_start=263\n  _RELAYSOURCEGROUPITEMV2_RELAYSOURCEPARAMSENTRY._serialized_end=319\n  _RELAYSOURCECONFIG._serialized_start=321\n  _RELAYSOURCECONFIG._serialized_end=444\n  _RELAYSOURCECONFIGLIST._serialized_start=446\n  _RELAYSOURCECONFIGLIST._serialized_end=552\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/live/models/business/snapshot_manage_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/business/snapshot_manage.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n#live/business/snapshot_manage.proto\\x12\\x1fVolcengine.Live.Models.Business\\\"\\xb2\\x01\\n\\x12\\x43\\x44NSnapshotHistory\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x03 \\x01(\\t\\x12\\x0c\\n\\x04Path\\x18\\x04 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileName\\x18\\x05 \\x01(\\t\\x12\\x11\\n\\tTimeStamp\\x18\\x06 \\x01(\\t\\x12\\r\\n\\x05Width\\x18\\x07 \\x01(\\x03\\x12\\x0e\\n\\x06Height\\x18\\x08 \\x01(\\x03\\x12\\x11\\n\\tServiceID\\x18\\t \\x01(\\t\\x12\\x0b\\n\\x03URI\\x18\\n \\x01(\\t\\\"V\\n\\nPagination\\x12\\x0f\\n\\x07PageCur\\x18\\x01 \\x01(\\x03\\x12\\x10\\n\\x08PageSize\\x18\\x02 \\x01(\\x03\\x12\\x11\\n\\tPageTotal\\x18\\x03 \\x01(\\x03\\x12\\x12\\n\\nTotalCount\\x18\\x04 \\x01(\\x03\\\"\\x9c\\x01\\n\\x16\\x43\\x44NSnapshotHistoryInfo\\x12\\x41\\n\\x04\\x44\\x61ta\\x18\\x01 \\x03(\\x0b\\x32\\x33.Volcengine.Live.Models.Business.CDNSnapshotHistory\\x12?\\n\\nPagination\\x18\\x02 \\x01(\\x0b\\x32+.Volcengine.Live.Models.Business.PaginationB\\xd6\\x01\\n*com.volcengine.service.live.model.businessB\\x0eSnapshotManageP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_CDNSNAPSHOTHISTORY = DESCRIPTOR.message_types_by_name['CDNSnapshotHistory']\n_PAGINATION = DESCRIPTOR.message_types_by_name['Pagination']\n_CDNSNAPSHOTHISTORYINFO = DESCRIPTOR.message_types_by_name['CDNSnapshotHistoryInfo']\nCDNSnapshotHistory = _reflection.GeneratedProtocolMessageType('CDNSnapshotHistory', (_message.Message,), {\n  'DESCRIPTOR' : _CDNSNAPSHOTHISTORY,\n  '__module__' : 'live.business.snapshot_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.CDNSnapshotHistory)\n  })\n_sym_db.RegisterMessage(CDNSnapshotHistory)\n\nPagination = _reflection.GeneratedProtocolMessageType('Pagination', (_message.Message,), {\n  'DESCRIPTOR' : _PAGINATION,\n  '__module__' : 'live.business.snapshot_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.Pagination)\n  })\n_sym_db.RegisterMessage(Pagination)\n\nCDNSnapshotHistoryInfo = _reflection.GeneratedProtocolMessageType('CDNSnapshotHistoryInfo', (_message.Message,), {\n  'DESCRIPTOR' : _CDNSNAPSHOTHISTORYINFO,\n  '__module__' : 'live.business.snapshot_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.CDNSnapshotHistoryInfo)\n  })\n_sym_db.RegisterMessage(CDNSnapshotHistoryInfo)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.businessB\\016SnapshotManageP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _CDNSNAPSHOTHISTORY._serialized_start=73\n  _CDNSNAPSHOTHISTORY._serialized_end=251\n  _PAGINATION._serialized_start=253\n  _PAGINATION._serialized_end=339\n  _CDNSNAPSHOTHISTORYINFO._serialized_start=342\n  _CDNSNAPSHOTHISTORYINFO._serialized_end=498\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/live/models/business/stream_manage_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/business/stream_manage.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n!live/business/stream_manage.proto\\x12\\x1fVolcengine.Live.Models.Business\\\"\\xd1\\x01\\n\\x0eStreamInfoList\\x12\\n\\n\\x02ID\\x18\\x01 \\x01(\\x03\\x12\\r\\n\\x05Vhost\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x03 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x05 \\x01(\\t\\x12\\x18\\n\\x10SessionStartTime\\x18\\x06 \\x01(\\t\\x12\\x12\\n\\nOnlineUser\\x18\\x07 \\x01(\\x03\\x12\\x11\\n\\tBandWidth\\x18\\x08 \\x01(\\x03\\x12\\x0f\\n\\x07\\x42itrate\\x18\\t \\x01(\\x03\\x12\\x11\\n\\tFramerate\\x18\\n \\x01(\\x03\\x12\\x12\\n\\nPreviewURL\\x18\\x0b \\x01(\\t\\\"\\x82\\x01\\n\\x0c\\x43losedStream\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x03 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x04 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x05 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x06 \\x01(\\t\\x12\\x12\\n\\nSourceType\\x18\\x07 \\x01(\\t\\\"\\x88\\x01\\n\\x17\\x46orbiddenStreamInfoList\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x03 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x04 \\x01(\\t\\x12\\x12\\n\\nCreateTime\\x18\\x05 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x06 \\x01(\\t\\x12\\x0c\\n\\x04type\\x18\\x07 \\x01(\\t\\\"m\\n\\x0eLiveStreamInfo\\x12G\\n\\x0eStreamInfoList\\x18\\x01 \\x03(\\x0b\\x32/.Volcengine.Live.Models.Business.StreamInfoList\\x12\\x12\\n\\nRoughCount\\x18\\x02 \\x01(\\x03\\\"m\\n\\x10\\x43losedStreamInfo\\x12\\x45\\n\\x0eStreamInfoList\\x18\\x01 \\x03(\\x0b\\x32-.Volcengine.Live.Models.Business.ClosedStream\\x12\\x12\\n\\nRoughCount\\x18\\x02 \\x01(\\x03\\\"5\\n\\x0fStreamStateInfo\\x12\\x14\\n\\x0cstream_state\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04type\\x18\\x02 \\x01(\\t\\\"{\\n\\x13\\x46orbiddenStreamInfo\\x12P\\n\\x0eStreamInfoList\\x18\\x01 \\x03(\\x0b\\x32\\x38.Volcengine.Live.Models.Business.ForbiddenStreamInfoList\\x12\\x12\\n\\nRoughCount\\x18\\x02 \\x01(\\x03\\x42\\xd4\\x01\\n*com.volcengine.service.live.model.businessB\\x0cStreamManageP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_STREAMINFOLIST = DESCRIPTOR.message_types_by_name['StreamInfoList']\n_CLOSEDSTREAM = DESCRIPTOR.message_types_by_name['ClosedStream']\n_FORBIDDENSTREAMINFOLIST = DESCRIPTOR.message_types_by_name['ForbiddenStreamInfoList']\n_LIVESTREAMINFO = DESCRIPTOR.message_types_by_name['LiveStreamInfo']\n_CLOSEDSTREAMINFO = DESCRIPTOR.message_types_by_name['ClosedStreamInfo']\n_STREAMSTATEINFO = DESCRIPTOR.message_types_by_name['StreamStateInfo']\n_FORBIDDENSTREAMINFO = DESCRIPTOR.message_types_by_name['ForbiddenStreamInfo']\nStreamInfoList = _reflection.GeneratedProtocolMessageType('StreamInfoList', (_message.Message,), {\n  'DESCRIPTOR' : _STREAMINFOLIST,\n  '__module__' : 'live.business.stream_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.StreamInfoList)\n  })\n_sym_db.RegisterMessage(StreamInfoList)\n\nClosedStream = _reflection.GeneratedProtocolMessageType('ClosedStream', (_message.Message,), {\n  'DESCRIPTOR' : _CLOSEDSTREAM,\n  '__module__' : 'live.business.stream_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.ClosedStream)\n  })\n_sym_db.RegisterMessage(ClosedStream)\n\nForbiddenStreamInfoList = _reflection.GeneratedProtocolMessageType('ForbiddenStreamInfoList', (_message.Message,), {\n  'DESCRIPTOR' : _FORBIDDENSTREAMINFOLIST,\n  '__module__' : 'live.business.stream_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.ForbiddenStreamInfoList)\n  })\n_sym_db.RegisterMessage(ForbiddenStreamInfoList)\n\nLiveStreamInfo = _reflection.GeneratedProtocolMessageType('LiveStreamInfo', (_message.Message,), {\n  'DESCRIPTOR' : _LIVESTREAMINFO,\n  '__module__' : 'live.business.stream_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.LiveStreamInfo)\n  })\n_sym_db.RegisterMessage(LiveStreamInfo)\n\nClosedStreamInfo = _reflection.GeneratedProtocolMessageType('ClosedStreamInfo', (_message.Message,), {\n  'DESCRIPTOR' : _CLOSEDSTREAMINFO,\n  '__module__' : 'live.business.stream_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.ClosedStreamInfo)\n  })\n_sym_db.RegisterMessage(ClosedStreamInfo)\n\nStreamStateInfo = _reflection.GeneratedProtocolMessageType('StreamStateInfo', (_message.Message,), {\n  'DESCRIPTOR' : _STREAMSTATEINFO,\n  '__module__' : 'live.business.stream_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.StreamStateInfo)\n  })\n_sym_db.RegisterMessage(StreamStateInfo)\n\nForbiddenStreamInfo = _reflection.GeneratedProtocolMessageType('ForbiddenStreamInfo', (_message.Message,), {\n  'DESCRIPTOR' : _FORBIDDENSTREAMINFO,\n  '__module__' : 'live.business.stream_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Business.ForbiddenStreamInfo)\n  })\n_sym_db.RegisterMessage(ForbiddenStreamInfo)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.businessB\\014StreamManageP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Business\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _STREAMINFOLIST._serialized_start=71\n  _STREAMINFOLIST._serialized_end=280\n  _CLOSEDSTREAM._serialized_start=283\n  _CLOSEDSTREAM._serialized_end=413\n  _FORBIDDENSTREAMINFOLIST._serialized_start=416\n  _FORBIDDENSTREAMINFOLIST._serialized_end=552\n  _LIVESTREAMINFO._serialized_start=554\n  _LIVESTREAMINFO._serialized_end=663\n  _CLOSEDSTREAMINFO._serialized_start=665\n  _CLOSEDSTREAMINFO._serialized_end=774\n  _STREAMSTATEINFO._serialized_start=776\n  _STREAMSTATEINFO._serialized_end=829\n  _FORBIDDENSTREAMINFO._serialized_start=831\n  _FORBIDDENSTREAMINFO._serialized_end=954\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/live/models/request/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/live/models/request/live_requests.py",
    "content": "from tokenize import String\n\n\nclass CreateVQScoreTaskRequest:\n    MainAddr = \"\"\n    ContrastAddr = \"\"\n    FrameInterval = 0\n    Duration = 0\n    Algorithm = \"\"\n    def __init__(self):\n        self = self\n\nclass GeneratePushURLRequest:\n    Vhost = \"\"\n    Domain = \"\"\n    App = \"\"\n    Stream = \"\"\n    ValidDuration = 0\n    ExpiredTime = \"\"\n    def __init__(self):\n        self = self\n\nclass GeneratePlayURLRequest:\n    Vhost = \"\"\n    Domain = \"\"\n    App = \"\"\n    Stream = \"\"\n    Suffix = \"\"\n    Type = \"\"\n    ValidDuration = 0\n    ExpiredTime = \"\"\n    def __init__(self):\n        self = self\n\nclass CreatePullToPushTaskRequest:\n    Title = \"\"\n    StartTime = 0\n    EndTime = 0\n    CallbackURL = \"\"\n    Type = 0\n    CycleMode = 0\n    DstAddr = \"\"\n    SrcAddr = \"\"\n    SrcAddrS = []\n    def __init__(self):\n        self = self\n\nclass UpdatePullToPushTaskRequest:\n    Title = \"\"\n    StartTime = 0\n    EndTime = 0\n    CallbackURL = \"\"\n    Type = 0\n    CycleMode = 0\n    DstAddr = \"\"\n    SrcAddr = \"\"\n    SrcAddrS = []\n    TaskId = \"\"\n    def __init__(self):\n        self = self\n\nclass ListVQScoreTaskRequest:\n    StartTime = \"\"\n    EndTime = \"\"\n    PageNum = 0\n    PageSize = 0\n    Status = 0\n    def __init__(self):\n        self = self"
  },
  {
    "path": "volcengine/live/models/request/request_live_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/request/request_live.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\nfrom volcengine.live.models.business import deny_config_pb2 as live_dot_business_dot_deny__config__pb2\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\x1flive/request/request_live.proto\\x12\\x1eVolcengine.Live.Models.Request\\x1a\\x1flive/business/deny_config.proto\\\"C\\n\\x13\\x43reateDomainRequest\\x12\\x0e\\n\\x06\\x44omain\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06Region\\x18\\x03 \\x01(\\t\\\"\\xb3\\x01\\n\\x17ListDomainDetailRequest\\x12\\x0f\\n\\x07PageNum\\x18\\x01 \\x01(\\x03\\x12\\x10\\n\\x08PageSize\\x18\\x02 \\x01(\\x03\\x12\\x11\\n\\tVhostList\\x18\\x03 \\x03(\\t\\x12\\x18\\n\\x10\\x44omainStatusList\\x18\\x04 \\x03(\\t\\x12\\x16\\n\\x0e\\x44omainTypeList\\x18\\x05 \\x03(\\t\\x12\\x18\\n\\x10\\x44omainRegionList\\x18\\x06 \\x03(\\t\\x12\\x16\\n\\x0e\\x44omainNameList\\x18\\x07 \\x03(\\t\\\"&\\n\\x14\\x44isableDomainRequest\\x12\\x0e\\n\\x06\\x44omain\\x18\\x01 \\x01(\\t\\\"%\\n\\x13\\x45nableDomainRequest\\x12\\x0e\\n\\x06\\x44omain\\x18\\x01 \\x01(\\t\\\"%\\n\\x13\\x44\\x65leteDomainRequest\\x12\\x0e\\n\\x06\\x44omain\\x18\\x01 \\x01(\\t\\\"+\\n\\x15\\x44\\x65scribeDomainRequest\\x12\\x12\\n\\nDomainList\\x18\\x01 \\x03(\\t\\\"J\\n ManagerPullPushDomainBindRequest\\x12\\x12\\n\\nPullDomain\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nPushDomain\\x18\\x02 \\x01(\\t\\\"\\xa5\\x01\\n$DescribeRecordTaskFileHistoryRequest\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x03 \\x01(\\t\\x12\\x10\\n\\x08\\x44\\x61teFrom\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06\\x44\\x61teTo\\x18\\x05 \\x01(\\t\\x12\\x0f\\n\\x07PageNum\\x18\\x06 \\x01(\\x05\\x12\\x10\\n\\x08PageSize\\x18\\x07 \\x01(\\x05\\x12\\x0c\\n\\x04Type\\x18\\x08 \\x01(\\t\\\"\\xa2\\x01\\n!DescribeCDNSnapshotHistoryRequest\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x03 \\x01(\\t\\x12\\x10\\n\\x08\\x44\\x61teFrom\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06\\x44\\x61teTo\\x18\\x05 \\x01(\\t\\x12\\x0f\\n\\x07PageNum\\x18\\x06 \\x01(\\x05\\x12\\x10\\n\\x08PageSize\\x18\\x07 \\x01(\\x05\\x12\\x0c\\n\\x04Type\\x18\\x08 \\x01(\\t\\\"\\xaa\\x01\\n#DescribeLiveStreamInfoByPageRequest\\x12\\x0f\\n\\x07PageNum\\x18\\x01 \\x01(\\x05\\x12\\x10\\n\\x08PageSize\\x18\\x02 \\x01(\\x05\\x12\\r\\n\\x05Vhost\\x18\\x03 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x04 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x05 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x06 \\x01(\\t\\x12\\x12\\n\\nStreamType\\x18\\x07 \\x01(\\t\\x12\\x10\\n\\x08InfoType\\x18\\x08 \\x01(\\t\\\"\\xd0\\x01\\n%DescribeClosedStreamInfoByPageRequest\\x12\\x0f\\n\\x07PageNum\\x18\\x01 \\x01(\\x05\\x12\\x10\\n\\x08PageSize\\x18\\x02 \\x01(\\x05\\x12\\r\\n\\x05Vhost\\x18\\x03 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x04 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x05 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x06 \\x01(\\t\\x12\\x0c\\n\\x04Sort\\x18\\x07 \\x01(\\t\\x12\\x13\\n\\x0b\\x45ndTimeFrom\\x18\\x08 \\x01(\\t\\x12\\x11\\n\\tEndTimeTo\\x18\\t \\x01(\\t\\x12\\x12\\n\\nSourceType\\x18\\n \\x01(\\t\\\"\\x87\\x01\\n(DescribeForbiddenStreamInfoByPageRequest\\x12\\x0f\\n\\x07PageNum\\x18\\x01 \\x01(\\x05\\x12\\x10\\n\\x08PageSize\\x18\\x02 \\x01(\\x05\\x12\\r\\n\\x05Vhost\\x18\\x03 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x05 \\x01(\\t\\x12\\x0c\\n\\x04Sort\\x18\\x06 \\x01(\\t\\\"\\\\\\n\\x1e\\x44\\x65scribeLiveStreamStateRequest\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x03 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x04 \\x01(\\t\\\"Q\\n\\x13ResumeStreamRequest\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x03 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x04 \\x01(\\t\\\"?\\n\\x11KillStreamRequest\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x03 \\x01(\\t\\\"b\\n\\x13\\x46orbidStreamRequest\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x03 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x04 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x05 \\x01(\\t\\\"\\x98\\x02\\n\\x18UpdateRelaySourceRequest\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x02 \\x01(\\t\\x12\\x1d\\n\\x15RelaySourceDomainList\\x18\\x03 \\x03(\\t\\x12j\\n\\x11RelaySourceParams\\x18\\x04 \\x03(\\x0b\\x32O.Volcengine.Live.Models.Request.UpdateRelaySourceRequest.RelaySourceParamsEntry\\x12\\x1b\\n\\x13RelaySourceProtocol\\x18\\x05 \\x01(\\t\\x1a\\x38\\n\\x16RelaySourceParamsEntry\\x12\\x0b\\n\\x03key\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05value\\x18\\x02 \\x01(\\t:\\x02\\x38\\x01\\\"6\\n\\x18\\x44\\x65leteRelaySourceRequest\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x02 \\x01(\\t\\\"+\\n\\x1a\\x44\\x65scribeRelaySourceRequest\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\\"~\\n\\x18\\x43reateVQScoreTaskRequest\\x12\\x10\\n\\x08MainAddr\\x18\\x01 \\x01(\\t\\x12\\x14\\n\\x0c\\x43ontrastAddr\\x18\\x02 \\x01(\\t\\x12\\x15\\n\\rFrameInterval\\x18\\x03 \\x01(\\x05\\x12\\x10\\n\\x08\\x44uration\\x18\\x04 \\x01(\\x05\\x12\\x11\\n\\tAlgorithm\\x18\\x05 \\x01(\\t\\\"(\\n\\x1a\\x44\\x65scribeVQScoreTaskRequest\\x12\\n\\n\\x02ID\\x18\\x01 \\x01(\\t\\\"o\\n\\x16ListVQScoreTaskRequest\\x12\\x11\\n\\tStartTime\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07PageNum\\x18\\x03 \\x01(\\x05\\x12\\x10\\n\\x08PageSize\\x18\\x04 \\x01(\\x05\\x12\\x0e\\n\\x06Status\\x18\\x05 \\x01(\\x05\\\"\\x9e\\x01\\n\\x16GeneratePlayURLRequest\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x03 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06Suffix\\x18\\x05 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x06 \\x01(\\t\\x12\\x15\\n\\rValidDuration\\x18\\x07 \\x01(\\x03\\x12\\x13\\n\\x0b\\x45xpiredTime\\x18\\x08 \\x01(\\t\\\"\\x80\\x01\\n\\x16GeneratePushURLRequest\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x03 \\x01(\\t\\x12\\x0e\\n\\x06Stream\\x18\\x04 \\x01(\\t\\x12\\x15\\n\\rValidDuration\\x18\\x05 \\x01(\\x03\\x12\\x13\\n\\x0b\\x45xpiredTime\\x18\\x06 \\x01(\\t\\\"\\xba\\x01\\n\\x1b\\x43reatePullToPushTaskRequest\\x12\\r\\n\\x05Title\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\x03\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\x03\\x12\\x13\\n\\x0b\\x43\\x61llbackURL\\x18\\x04 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x05 \\x01(\\x05\\x12\\x11\\n\\tCycleMode\\x18\\x06 \\x01(\\x05\\x12\\x0f\\n\\x07\\x44stAddr\\x18\\x07 \\x01(\\t\\x12\\x0f\\n\\x07SrcAddr\\x18\\x08 \\x01(\\t\\x12\\x10\\n\\x08SrcAddrS\\x18\\t \\x03(\\t\\\"F\\n\\x19ListPullToPushTaskRequest\\x12\\x0c\\n\\x04Page\\x18\\x01 \\x01(\\x05\\x12\\x0c\\n\\x04Size\\x18\\x02 \\x01(\\x05\\x12\\r\\n\\x05Title\\x18\\x03 \\x01(\\t\\\"\\xca\\x01\\n\\x1bUpdatePullToPushTaskRequest\\x12\\r\\n\\x05Title\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06TaskId\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x03 \\x01(\\x03\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x04 \\x01(\\x03\\x12\\x13\\n\\x0b\\x43\\x61llbackURL\\x18\\x05 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x06 \\x01(\\x05\\x12\\x11\\n\\tCycleMode\\x18\\x07 \\x01(\\x05\\x12\\x0f\\n\\x07\\x44stAddr\\x18\\x08 \\x01(\\t\\x12\\x0f\\n\\x07SrcAddr\\x18\\t \\x01(\\t\\x12\\x10\\n\\x08SrcAddrS\\x18\\n \\x03(\\t\\\".\\n\\x1cRestartPullToPushTaskRequest\\x12\\x0e\\n\\x06TaskId\\x18\\x01 \\x01(\\t\\\"+\\n\\x19StopPullToPushTaskRequest\\x12\\x0e\\n\\x06TaskId\\x18\\x01 \\x01(\\t\\\"-\\n\\x1b\\x44\\x65letePullToPushTaskRequest\\x12\\x0e\\n\\x06TaskId\\x18\\x01 \\x01(\\t\\\"\\x90\\x01\\n\\x17UpdateDenyConfigRequest\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x03 \\x01(\\t\\x12I\\n\\x0e\\x44\\x65nyConfigList\\x18\\x04 \\x03(\\x0b\\x32\\x31.Volcengine.Live.Models.Business.DenyConfigDetail\\\"G\\n\\x19\\x44\\x65scribeDenyConfigRequest\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x03 \\x01(\\t\\\"E\\n\\x17\\x44\\x65leteDenyConfigRequest\\x12\\r\\n\\x05Vhost\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x0b\\n\\x03\\x41pp\\x18\\x03 \\x01(\\tB\\xcd\\x01\\n)com.volcengine.service.live.model.requestB\\x0bLiveRequestP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/live/models/request\\xa0\\x01\\x01\\xd8\\x01\\x01\\xca\\x02 Volc\\\\Service\\\\Live\\\\Models\\\\Request\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_CREATEDOMAINREQUEST = DESCRIPTOR.message_types_by_name['CreateDomainRequest']\n_LISTDOMAINDETAILREQUEST = DESCRIPTOR.message_types_by_name['ListDomainDetailRequest']\n_DISABLEDOMAINREQUEST = DESCRIPTOR.message_types_by_name['DisableDomainRequest']\n_ENABLEDOMAINREQUEST = DESCRIPTOR.message_types_by_name['EnableDomainRequest']\n_DELETEDOMAINREQUEST = DESCRIPTOR.message_types_by_name['DeleteDomainRequest']\n_DESCRIBEDOMAINREQUEST = DESCRIPTOR.message_types_by_name['DescribeDomainRequest']\n_MANAGERPULLPUSHDOMAINBINDREQUEST = DESCRIPTOR.message_types_by_name['ManagerPullPushDomainBindRequest']\n_DESCRIBERECORDTASKFILEHISTORYREQUEST = DESCRIPTOR.message_types_by_name['DescribeRecordTaskFileHistoryRequest']\n_DESCRIBECDNSNAPSHOTHISTORYREQUEST = DESCRIPTOR.message_types_by_name['DescribeCDNSnapshotHistoryRequest']\n_DESCRIBELIVESTREAMINFOBYPAGEREQUEST = DESCRIPTOR.message_types_by_name['DescribeLiveStreamInfoByPageRequest']\n_DESCRIBECLOSEDSTREAMINFOBYPAGEREQUEST = DESCRIPTOR.message_types_by_name['DescribeClosedStreamInfoByPageRequest']\n_DESCRIBEFORBIDDENSTREAMINFOBYPAGEREQUEST = DESCRIPTOR.message_types_by_name['DescribeForbiddenStreamInfoByPageRequest']\n_DESCRIBELIVESTREAMSTATEREQUEST = DESCRIPTOR.message_types_by_name['DescribeLiveStreamStateRequest']\n_RESUMESTREAMREQUEST = DESCRIPTOR.message_types_by_name['ResumeStreamRequest']\n_KILLSTREAMREQUEST = DESCRIPTOR.message_types_by_name['KillStreamRequest']\n_FORBIDSTREAMREQUEST = DESCRIPTOR.message_types_by_name['ForbidStreamRequest']\n_UPDATERELAYSOURCEREQUEST = DESCRIPTOR.message_types_by_name['UpdateRelaySourceRequest']\n_UPDATERELAYSOURCEREQUEST_RELAYSOURCEPARAMSENTRY = _UPDATERELAYSOURCEREQUEST.nested_types_by_name['RelaySourceParamsEntry']\n_DELETERELAYSOURCEREQUEST = DESCRIPTOR.message_types_by_name['DeleteRelaySourceRequest']\n_DESCRIBERELAYSOURCEREQUEST = DESCRIPTOR.message_types_by_name['DescribeRelaySourceRequest']\n# _CREATEVQSCORETASKREQUEST = DESCRIPTOR.message_types_by_name['CreateVQScoreTaskRequest']\n_DESCRIBEVQSCORETASKREQUEST = DESCRIPTOR.message_types_by_name['DescribeVQScoreTaskRequest']\n_LISTVQSCORETASKREQUEST = DESCRIPTOR.message_types_by_name['ListVQScoreTaskRequest']\n# _GENERATEPLAYURLREQUEST = DESCRIPTOR.message_types_by_name['GeneratePlayURLRequest']\n# _GENERATEPUSHURLREQUEST = DESCRIPTOR.message_types_by_name['GeneratePushURLRequest']\n# _CREATEPULLTOPUSHTASKREQUEST = DESCRIPTOR.message_types_by_name['CreatePullToPushTaskRequest']\n_LISTPULLTOPUSHTASKREQUEST = DESCRIPTOR.message_types_by_name['ListPullToPushTaskRequest']\n# _UPDATEPULLTOPUSHTASKREQUEST = DESCRIPTOR.message_types_by_name['UpdatePullToPushTaskRequest']\n_RESTARTPULLTOPUSHTASKREQUEST = DESCRIPTOR.message_types_by_name['RestartPullToPushTaskRequest']\n_STOPPULLTOPUSHTASKREQUEST = DESCRIPTOR.message_types_by_name['StopPullToPushTaskRequest']\n_DELETEPULLTOPUSHTASKREQUEST = DESCRIPTOR.message_types_by_name['DeletePullToPushTaskRequest']\n_UPDATEDENYCONFIGREQUEST = DESCRIPTOR.message_types_by_name['UpdateDenyConfigRequest']\n_DESCRIBEDENYCONFIGREQUEST = DESCRIPTOR.message_types_by_name['DescribeDenyConfigRequest']\n_DELETEDENYCONFIGREQUEST = DESCRIPTOR.message_types_by_name['DeleteDenyConfigRequest']\nCreateDomainRequest = _reflection.GeneratedProtocolMessageType('CreateDomainRequest', (_message.Message,), {\n  'DESCRIPTOR' : _CREATEDOMAINREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.CreateDomainRequest)\n  })\n_sym_db.RegisterMessage(CreateDomainRequest)\n\nListDomainDetailRequest = _reflection.GeneratedProtocolMessageType('ListDomainDetailRequest', (_message.Message,), {\n  'DESCRIPTOR' : _LISTDOMAINDETAILREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.ListDomainDetailRequest)\n  })\n_sym_db.RegisterMessage(ListDomainDetailRequest)\n\nDisableDomainRequest = _reflection.GeneratedProtocolMessageType('DisableDomainRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DISABLEDOMAINREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.DisableDomainRequest)\n  })\n_sym_db.RegisterMessage(DisableDomainRequest)\n\nEnableDomainRequest = _reflection.GeneratedProtocolMessageType('EnableDomainRequest', (_message.Message,), {\n  'DESCRIPTOR' : _ENABLEDOMAINREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.EnableDomainRequest)\n  })\n_sym_db.RegisterMessage(EnableDomainRequest)\n\nDeleteDomainRequest = _reflection.GeneratedProtocolMessageType('DeleteDomainRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DELETEDOMAINREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.DeleteDomainRequest)\n  })\n_sym_db.RegisterMessage(DeleteDomainRequest)\n\nDescribeDomainRequest = _reflection.GeneratedProtocolMessageType('DescribeDomainRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEDOMAINREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.DescribeDomainRequest)\n  })\n_sym_db.RegisterMessage(DescribeDomainRequest)\n\nManagerPullPushDomainBindRequest = _reflection.GeneratedProtocolMessageType('ManagerPullPushDomainBindRequest', (_message.Message,), {\n  'DESCRIPTOR' : _MANAGERPULLPUSHDOMAINBINDREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.ManagerPullPushDomainBindRequest)\n  })\n_sym_db.RegisterMessage(ManagerPullPushDomainBindRequest)\n\nDescribeRecordTaskFileHistoryRequest = _reflection.GeneratedProtocolMessageType('DescribeRecordTaskFileHistoryRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBERECORDTASKFILEHISTORYREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.DescribeRecordTaskFileHistoryRequest)\n  })\n_sym_db.RegisterMessage(DescribeRecordTaskFileHistoryRequest)\n\nDescribeCDNSnapshotHistoryRequest = _reflection.GeneratedProtocolMessageType('DescribeCDNSnapshotHistoryRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBECDNSNAPSHOTHISTORYREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.DescribeCDNSnapshotHistoryRequest)\n  })\n_sym_db.RegisterMessage(DescribeCDNSnapshotHistoryRequest)\n\nDescribeLiveStreamInfoByPageRequest = _reflection.GeneratedProtocolMessageType('DescribeLiveStreamInfoByPageRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBELIVESTREAMINFOBYPAGEREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.DescribeLiveStreamInfoByPageRequest)\n  })\n_sym_db.RegisterMessage(DescribeLiveStreamInfoByPageRequest)\n\nDescribeClosedStreamInfoByPageRequest = _reflection.GeneratedProtocolMessageType('DescribeClosedStreamInfoByPageRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBECLOSEDSTREAMINFOBYPAGEREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.DescribeClosedStreamInfoByPageRequest)\n  })\n_sym_db.RegisterMessage(DescribeClosedStreamInfoByPageRequest)\n\nDescribeForbiddenStreamInfoByPageRequest = _reflection.GeneratedProtocolMessageType('DescribeForbiddenStreamInfoByPageRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEFORBIDDENSTREAMINFOBYPAGEREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.DescribeForbiddenStreamInfoByPageRequest)\n  })\n_sym_db.RegisterMessage(DescribeForbiddenStreamInfoByPageRequest)\n\nDescribeLiveStreamStateRequest = _reflection.GeneratedProtocolMessageType('DescribeLiveStreamStateRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBELIVESTREAMSTATEREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.DescribeLiveStreamStateRequest)\n  })\n_sym_db.RegisterMessage(DescribeLiveStreamStateRequest)\n\nResumeStreamRequest = _reflection.GeneratedProtocolMessageType('ResumeStreamRequest', (_message.Message,), {\n  'DESCRIPTOR' : _RESUMESTREAMREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.ResumeStreamRequest)\n  })\n_sym_db.RegisterMessage(ResumeStreamRequest)\n\nKillStreamRequest = _reflection.GeneratedProtocolMessageType('KillStreamRequest', (_message.Message,), {\n  'DESCRIPTOR' : _KILLSTREAMREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.KillStreamRequest)\n  })\n_sym_db.RegisterMessage(KillStreamRequest)\n\nForbidStreamRequest = _reflection.GeneratedProtocolMessageType('ForbidStreamRequest', (_message.Message,), {\n  'DESCRIPTOR' : _FORBIDSTREAMREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.ForbidStreamRequest)\n  })\n_sym_db.RegisterMessage(ForbidStreamRequest)\n\nUpdateRelaySourceRequest = _reflection.GeneratedProtocolMessageType('UpdateRelaySourceRequest', (_message.Message,), {\n\n  'RelaySourceParamsEntry' : _reflection.GeneratedProtocolMessageType('RelaySourceParamsEntry', (_message.Message,), {\n    'DESCRIPTOR' : _UPDATERELAYSOURCEREQUEST_RELAYSOURCEPARAMSENTRY,\n    '__module__' : 'live.request.request_live_pb2'\n    # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.UpdateRelaySourceRequest.RelaySourceParamsEntry)\n    })\n  ,\n  'DESCRIPTOR' : _UPDATERELAYSOURCEREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.UpdateRelaySourceRequest)\n  })\n_sym_db.RegisterMessage(UpdateRelaySourceRequest)\n_sym_db.RegisterMessage(UpdateRelaySourceRequest.RelaySourceParamsEntry)\n\nDeleteRelaySourceRequest = _reflection.GeneratedProtocolMessageType('DeleteRelaySourceRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DELETERELAYSOURCEREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.DeleteRelaySourceRequest)\n  })\n_sym_db.RegisterMessage(DeleteRelaySourceRequest)\n\nDescribeRelaySourceRequest = _reflection.GeneratedProtocolMessageType('DescribeRelaySourceRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBERELAYSOURCEREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.DescribeRelaySourceRequest)\n  })\n_sym_db.RegisterMessage(DescribeRelaySourceRequest)\n\n# CreateVQScoreTaskRequest = _reflection.GeneratedProtocolMessageType('CreateVQScoreTaskRequest', (_message.Message,), {\n#   'DESCRIPTOR' : _CREATEVQSCORETASKREQUEST,\n#   '__module__' : 'live.request.request_live_pb2'\n#   # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.CreateVQScoreTaskRequest)\n#   })\n# _sym_db.RegisterMessage(CreateVQScoreTaskRequest)\n\nDescribeVQScoreTaskRequest = _reflection.GeneratedProtocolMessageType('DescribeVQScoreTaskRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVQSCORETASKREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.DescribeVQScoreTaskRequest)\n  })\n_sym_db.RegisterMessage(DescribeVQScoreTaskRequest)\n\nListVQScoreTaskRequest = _reflection.GeneratedProtocolMessageType('ListVQScoreTaskRequest', (_message.Message,), {\n  'DESCRIPTOR' : _LISTVQSCORETASKREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.ListVQScoreTaskRequest)\n  })\n_sym_db.RegisterMessage(ListVQScoreTaskRequest)\n\n# GeneratePlayURLRequest = _reflection.GeneratedProtocolMessageType('GeneratePlayURLRequest', (_message.Message,), {\n#   'DESCRIPTOR' : _GENERATEPLAYURLREQUEST,\n#   '__module__' : 'live.request.request_live_pb2'\n#   # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.GeneratePlayURLRequest)\n#   })\n# _sym_db.RegisterMessage(GeneratePlayURLRequest)\n\n# GeneratePushURLRequest = _reflection.GeneratedProtocolMessageType('GeneratePushURLRequest', (_message.Message,), {\n#   'DESCRIPTOR' : _GENERATEPUSHURLREQUEST,\n#   '__module__' : 'live.request.request_live_pb2'\n#   # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.GeneratePushURLRequest)\n#   })\n# _sym_db.RegisterMessage(GeneratePushURLRequest)\n\n# CreatePullToPushTaskRequest = _reflection.GeneratedProtocolMessageType('CreatePullToPushTaskRequest', (_message.Message,), {\n#   'DESCRIPTOR' : _CREATEPULLTOPUSHTASKREQUEST,\n#   '__module__' : 'live.request.request_live_pb2'\n#   # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.CreatePullToPushTaskRequest)\n#   })\n# _sym_db.RegisterMessage(CreatePullToPushTaskRequest)\n\nListPullToPushTaskRequest = _reflection.GeneratedProtocolMessageType('ListPullToPushTaskRequest', (_message.Message,), {\n  'DESCRIPTOR' : _LISTPULLTOPUSHTASKREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.ListPullToPushTaskRequest)\n  })\n_sym_db.RegisterMessage(ListPullToPushTaskRequest)\n\n# UpdatePullToPushTaskRequest = _reflection.GeneratedProtocolMessageType('UpdatePullToPushTaskRequest', (_message.Message,), {\n#   'DESCRIPTOR' : _UPDATEPULLTOPUSHTASKREQUEST,\n#   '__module__' : 'live.request.request_live_pb2'\n#   # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.UpdatePullToPushTaskRequest)\n#   })\n# _sym_db.RegisterMessage(UpdatePullToPushTaskRequest)\n\nRestartPullToPushTaskRequest = _reflection.GeneratedProtocolMessageType('RestartPullToPushTaskRequest', (_message.Message,), {\n  'DESCRIPTOR' : _RESTARTPULLTOPUSHTASKREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.RestartPullToPushTaskRequest)\n  })\n_sym_db.RegisterMessage(RestartPullToPushTaskRequest)\n\nStopPullToPushTaskRequest = _reflection.GeneratedProtocolMessageType('StopPullToPushTaskRequest', (_message.Message,), {\n  'DESCRIPTOR' : _STOPPULLTOPUSHTASKREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.StopPullToPushTaskRequest)\n  })\n_sym_db.RegisterMessage(StopPullToPushTaskRequest)\n\nDeletePullToPushTaskRequest = _reflection.GeneratedProtocolMessageType('DeletePullToPushTaskRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DELETEPULLTOPUSHTASKREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.DeletePullToPushTaskRequest)\n  })\n_sym_db.RegisterMessage(DeletePullToPushTaskRequest)\n\nUpdateDenyConfigRequest = _reflection.GeneratedProtocolMessageType('UpdateDenyConfigRequest', (_message.Message,), {\n  'DESCRIPTOR' : _UPDATEDENYCONFIGREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.UpdateDenyConfigRequest)\n  })\n_sym_db.RegisterMessage(UpdateDenyConfigRequest)\n\nDescribeDenyConfigRequest = _reflection.GeneratedProtocolMessageType('DescribeDenyConfigRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEDENYCONFIGREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.DescribeDenyConfigRequest)\n  })\n_sym_db.RegisterMessage(DescribeDenyConfigRequest)\n\nDeleteDenyConfigRequest = _reflection.GeneratedProtocolMessageType('DeleteDenyConfigRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DELETEDENYCONFIGREQUEST,\n  '__module__' : 'live.request.request_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Request.DeleteDenyConfigRequest)\n  })\n_sym_db.RegisterMessage(DeleteDenyConfigRequest)\n\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.live.model.requestB\\013LiveRequestP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/live/models/request\\240\\001\\001\\330\\001\\001\\312\\002 Volc\\\\Service\\\\Live\\\\Models\\\\Request\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _UPDATERELAYSOURCEREQUEST_RELAYSOURCEPARAMSENTRY._options = None\n  _UPDATERELAYSOURCEREQUEST_RELAYSOURCEPARAMSENTRY._serialized_options = b'8\\001'\n  _CREATEDOMAINREQUEST._serialized_start=100\n  _CREATEDOMAINREQUEST._serialized_end=167\n  _LISTDOMAINDETAILREQUEST._serialized_start=170\n  _LISTDOMAINDETAILREQUEST._serialized_end=349\n  _DISABLEDOMAINREQUEST._serialized_start=351\n  _DISABLEDOMAINREQUEST._serialized_end=389\n  _ENABLEDOMAINREQUEST._serialized_start=391\n  _ENABLEDOMAINREQUEST._serialized_end=428\n  _DELETEDOMAINREQUEST._serialized_start=430\n  _DELETEDOMAINREQUEST._serialized_end=467\n  _DESCRIBEDOMAINREQUEST._serialized_start=469\n  _DESCRIBEDOMAINREQUEST._serialized_end=512\n  _MANAGERPULLPUSHDOMAINBINDREQUEST._serialized_start=514\n  _MANAGERPULLPUSHDOMAINBINDREQUEST._serialized_end=588\n  _DESCRIBERECORDTASKFILEHISTORYREQUEST._serialized_start=591\n  _DESCRIBERECORDTASKFILEHISTORYREQUEST._serialized_end=756\n  _DESCRIBECDNSNAPSHOTHISTORYREQUEST._serialized_start=759\n  _DESCRIBECDNSNAPSHOTHISTORYREQUEST._serialized_end=921\n  _DESCRIBELIVESTREAMINFOBYPAGEREQUEST._serialized_start=924\n  _DESCRIBELIVESTREAMINFOBYPAGEREQUEST._serialized_end=1094\n  _DESCRIBECLOSEDSTREAMINFOBYPAGEREQUEST._serialized_start=1097\n  _DESCRIBECLOSEDSTREAMINFOBYPAGEREQUEST._serialized_end=1305\n  _DESCRIBEFORBIDDENSTREAMINFOBYPAGEREQUEST._serialized_start=1308\n  _DESCRIBEFORBIDDENSTREAMINFOBYPAGEREQUEST._serialized_end=1443\n  _DESCRIBELIVESTREAMSTATEREQUEST._serialized_start=1445\n  _DESCRIBELIVESTREAMSTATEREQUEST._serialized_end=1537\n  _RESUMESTREAMREQUEST._serialized_start=1539\n  _RESUMESTREAMREQUEST._serialized_end=1620\n  _KILLSTREAMREQUEST._serialized_start=1622\n  _KILLSTREAMREQUEST._serialized_end=1685\n  _FORBIDSTREAMREQUEST._serialized_start=1687\n  _FORBIDSTREAMREQUEST._serialized_end=1785\n  _UPDATERELAYSOURCEREQUEST._serialized_start=1788\n  _UPDATERELAYSOURCEREQUEST._serialized_end=2068\n  _UPDATERELAYSOURCEREQUEST_RELAYSOURCEPARAMSENTRY._serialized_start=2012\n  _UPDATERELAYSOURCEREQUEST_RELAYSOURCEPARAMSENTRY._serialized_end=2068\n  _DELETERELAYSOURCEREQUEST._serialized_start=2070\n  _DELETERELAYSOURCEREQUEST._serialized_end=2124\n  _DESCRIBERELAYSOURCEREQUEST._serialized_start=2126\n  _DESCRIBERELAYSOURCEREQUEST._serialized_end=2169\n  # _CREATEVQSCORETASKREQUEST._serialized_start=2171\n  # _CREATEVQSCORETASKREQUEST._serialized_end=2297\n  _DESCRIBEVQSCORETASKREQUEST._serialized_start=2299\n  _DESCRIBEVQSCORETASKREQUEST._serialized_end=2339\n  _LISTVQSCORETASKREQUEST._serialized_start=2341\n  _LISTVQSCORETASKREQUEST._serialized_end=2452\n  # _GENERATEPLAYURLREQUEST._serialized_start=2455\n  # _GENERATEPLAYURLREQUEST._serialized_end=2613\n  # _GENERATEPUSHURLREQUEST._serialized_start=2616\n  # _GENERATEPUSHURLREQUEST._serialized_end=2744\n  # _CREATEPULLTOPUSHTASKREQUEST._serialized_start=2747\n  # _CREATEPULLTOPUSHTASKREQUEST._serialized_end=2933\n  _LISTPULLTOPUSHTASKREQUEST._serialized_start=2935\n  _LISTPULLTOPUSHTASKREQUEST._serialized_end=3005\n  # _UPDATEPULLTOPUSHTASKREQUEST._serialized_start=3008\n  # _UPDATEPULLTOPUSHTASKREQUEST._serialized_end=3210\n  _RESTARTPULLTOPUSHTASKREQUEST._serialized_start=3212\n  _RESTARTPULLTOPUSHTASKREQUEST._serialized_end=3258\n  _STOPPULLTOPUSHTASKREQUEST._serialized_start=3260\n  _STOPPULLTOPUSHTASKREQUEST._serialized_end=3303\n  _DELETEPULLTOPUSHTASKREQUEST._serialized_start=3305\n  _DELETEPULLTOPUSHTASKREQUEST._serialized_end=3350\n  _UPDATEDENYCONFIGREQUEST._serialized_start=3353\n  _UPDATEDENYCONFIGREQUEST._serialized_end=3497\n  _DESCRIBEDENYCONFIGREQUEST._serialized_start=3499\n  _DESCRIBEDENYCONFIGREQUEST._serialized_end=3570\n  _DELETEDENYCONFIGREQUEST._serialized_start=3572\n  _DELETEDENYCONFIGREQUEST._serialized_end=3641\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/live/models/response/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/live/models/response/response_live_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: live/response/response_live.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\nfrom volcengine.base.models.base import base_pb2 as base_dot_base__pb2\nfrom volcengine.live.models.business import domain_pb2 as live_dot_business_dot_domain__pb2\nfrom volcengine.live.models.business import VQScore_pb2 as live_dot_business_dot_VQScore__pb2\nfrom volcengine.live.models.business import addr_pb2 as live_dot_business_dot_addr__pb2\nfrom volcengine.live.models.business import pull_to_push_pb2 as live_dot_business_dot_pull__to__push__pb2\nfrom volcengine.live.models.business import deny_config_pb2 as live_dot_business_dot_deny__config__pb2\nfrom volcengine.live.models.business import relay_source_pb2 as live_dot_business_dot_relay__source__pb2\nfrom volcengine.live.models.business import stream_manage_pb2 as live_dot_business_dot_stream__manage__pb2\nfrom volcengine.live.models.business import snapshot_manage_pb2 as live_dot_business_dot_snapshot__manage__pb2\nfrom volcengine.live.models.business import record_manage_pb2 as live_dot_business_dot_record__manage__pb2\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n!live/response/response_live.proto\\x12\\x1fVolcengine.Live.Models.Response\\x1a\\x0f\\x62\\x61se/base.proto\\x1a\\x1alive/business/domain.proto\\x1a\\x1blive/business/VQScore.proto\\x1a\\x18live/business/addr.proto\\x1a live/business/pull_to_push.proto\\x1a\\x1flive/business/deny_config.proto\\x1a live/business/relay_source.proto\\x1a!live/business/stream_manage.proto\\x1a#live/business/snapshot_manage.proto\\x1a!live/business/record_manage.proto\\\"_\\n\\x14\\x43reateDomainResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xa4\\x01\\n\\x18ListDomainDetailResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12?\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32/.Volcengine.Live.Models.Business.DomainListInfo\\\"`\\n\\x15\\x44isableDomainResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"_\\n\\x14\\x45nableDomainResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"_\\n\\x14\\x44\\x65leteDomainResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xa2\\x01\\n\\x16\\x44\\x65scribeDomainResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12?\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32/.Volcengine.Live.Models.Business.DomainListInfo\\\"l\\n!ManagerPullPushDomainBindResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xb0\\x01\\n$DescribeLiveStreamInfoByPageResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12?\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32/.Volcengine.Live.Models.Business.LiveStreamInfo\\\"\\xb4\\x01\\n&DescribeClosedStreamInfoByPageResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x41\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x31.Volcengine.Live.Models.Business.ClosedStreamInfo\\\"\\xac\\x01\\n\\x1f\\x44\\x65scribeLiveStreamStateResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12@\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x30.Volcengine.Live.Models.Business.StreamStateInfo\\\"]\\n\\x12KillStreamResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"_\\n\\x14\\x46orbidStreamResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xba\\x01\\n)DescribeForbiddenStreamInfoByPageResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x44\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x34.Volcengine.Live.Models.Business.ForbiddenStreamInfo\\\"_\\n\\x14ResumeStreamResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xb6\\x01\\n\\\"DescribeCDNSnapshotHistoryResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12G\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x37.Volcengine.Live.Models.Business.CDNSnapshotHistoryInfo\\\"\\xb4\\x01\\n%DescribeRecordTaskFileHistoryResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x42\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x32.Volcengine.Live.Models.Business.RecordHistoryInfo\\\"d\\n\\x19UpdateRelaySourceResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"d\\n\\x19\\x44\\x65leteRelaySourceResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xae\\x01\\n\\x1b\\x44\\x65scribeRelaySourceResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x46\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x36.Volcengine.Live.Models.Business.RelaySourceConfigList\\\"\\xa0\\x01\\n\\x19\\x43reateVQScoreTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12:\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32*.Volcengine.Live.Models.Business.VQScoreID\\\"\\xa4\\x01\\n\\x1b\\x44\\x65scribeVQScoreTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12<\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32,.Volcengine.Live.Models.Business.VQScoreInfo\\\"\\xa8\\x01\\n\\x17ListVQScoreTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x44\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x34.Volcengine.Live.Models.Business.VQScoreTaskListInfo\\\"\\xaa\\x01\\n\\x17GeneratePlayURLResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x46\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x36.Volcengine.Live.Models.Business.GeneratePlayURLResult\\\"\\xaa\\x01\\n\\x17GeneratePushURLResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x46\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x36.Volcengine.Live.Models.Business.GeneratePushURLResult\\\"\\xb4\\x01\\n\\x1c\\x43reatePullToPushTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12K\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32;.Volcengine.Live.Models.Business.CreatePullToPushTaskResult\\\"\\xb0\\x01\\n\\x1aListPullToPushTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12I\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x39.Volcengine.Live.Models.Business.ListPullToPushTaskResult\\\"g\\n\\x1cUpdatePullToPushTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"h\\n\\x1dRestartPullToPushTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"e\\n\\x1aStopPullToPushTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"g\\n\\x1c\\x44\\x65letePullToPushTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"c\\n\\x18UpdateDenyConfigResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xb0\\x01\\n\\x1a\\x44\\x65scribeDenyConfigResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12I\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x39.Volcengine.Live.Models.Business.DescribeDenyConfigResult\\\"c\\n\\x18\\x44\\x65leteDenyConfigResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadataB\\xd1\\x01\\n*com.volcengine.service.live.model.responseB\\x0cLiveResponseP\\x01ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/response\\xa0\\x01\\x01\\xd8\\x01\\x01\\xca\\x02!Volc\\\\Service\\\\Live\\\\Models\\\\Response\\xe2\\x02$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_CREATEDOMAINRESPONSE = DESCRIPTOR.message_types_by_name['CreateDomainResponse']\n_LISTDOMAINDETAILRESPONSE = DESCRIPTOR.message_types_by_name['ListDomainDetailResponse']\n_DISABLEDOMAINRESPONSE = DESCRIPTOR.message_types_by_name['DisableDomainResponse']\n_ENABLEDOMAINRESPONSE = DESCRIPTOR.message_types_by_name['EnableDomainResponse']\n_DELETEDOMAINRESPONSE = DESCRIPTOR.message_types_by_name['DeleteDomainResponse']\n_DESCRIBEDOMAINRESPONSE = DESCRIPTOR.message_types_by_name['DescribeDomainResponse']\n_MANAGERPULLPUSHDOMAINBINDRESPONSE = DESCRIPTOR.message_types_by_name['ManagerPullPushDomainBindResponse']\n_DESCRIBELIVESTREAMINFOBYPAGERESPONSE = DESCRIPTOR.message_types_by_name['DescribeLiveStreamInfoByPageResponse']\n_DESCRIBECLOSEDSTREAMINFOBYPAGERESPONSE = DESCRIPTOR.message_types_by_name['DescribeClosedStreamInfoByPageResponse']\n_DESCRIBELIVESTREAMSTATERESPONSE = DESCRIPTOR.message_types_by_name['DescribeLiveStreamStateResponse']\n_KILLSTREAMRESPONSE = DESCRIPTOR.message_types_by_name['KillStreamResponse']\n_FORBIDSTREAMRESPONSE = DESCRIPTOR.message_types_by_name['ForbidStreamResponse']\n_DESCRIBEFORBIDDENSTREAMINFOBYPAGERESPONSE = DESCRIPTOR.message_types_by_name['DescribeForbiddenStreamInfoByPageResponse']\n_RESUMESTREAMRESPONSE = DESCRIPTOR.message_types_by_name['ResumeStreamResponse']\n_DESCRIBECDNSNAPSHOTHISTORYRESPONSE = DESCRIPTOR.message_types_by_name['DescribeCDNSnapshotHistoryResponse']\n_DESCRIBERECORDTASKFILEHISTORYRESPONSE = DESCRIPTOR.message_types_by_name['DescribeRecordTaskFileHistoryResponse']\n_UPDATERELAYSOURCERESPONSE = DESCRIPTOR.message_types_by_name['UpdateRelaySourceResponse']\n_DELETERELAYSOURCERESPONSE = DESCRIPTOR.message_types_by_name['DeleteRelaySourceResponse']\n_DESCRIBERELAYSOURCERESPONSE = DESCRIPTOR.message_types_by_name['DescribeRelaySourceResponse']\n_CREATEVQSCORETASKRESPONSE = DESCRIPTOR.message_types_by_name['CreateVQScoreTaskResponse']\n_DESCRIBEVQSCORETASKRESPONSE = DESCRIPTOR.message_types_by_name['DescribeVQScoreTaskResponse']\n_LISTVQSCORETASKRESPONSE = DESCRIPTOR.message_types_by_name['ListVQScoreTaskResponse']\n_GENERATEPLAYURLRESPONSE = DESCRIPTOR.message_types_by_name['GeneratePlayURLResponse']\n_GENERATEPUSHURLRESPONSE = DESCRIPTOR.message_types_by_name['GeneratePushURLResponse']\n_CREATEPULLTOPUSHTASKRESPONSE = DESCRIPTOR.message_types_by_name['CreatePullToPushTaskResponse']\n_LISTPULLTOPUSHTASKRESPONSE = DESCRIPTOR.message_types_by_name['ListPullToPushTaskResponse']\n_UPDATEPULLTOPUSHTASKRESPONSE = DESCRIPTOR.message_types_by_name['UpdatePullToPushTaskResponse']\n_RESTARTPULLTOPUSHTASKRESPONSE = DESCRIPTOR.message_types_by_name['RestartPullToPushTaskResponse']\n_STOPPULLTOPUSHTASKRESPONSE = DESCRIPTOR.message_types_by_name['StopPullToPushTaskResponse']\n_DELETEPULLTOPUSHTASKRESPONSE = DESCRIPTOR.message_types_by_name['DeletePullToPushTaskResponse']\n_UPDATEDENYCONFIGRESPONSE = DESCRIPTOR.message_types_by_name['UpdateDenyConfigResponse']\n_DESCRIBEDENYCONFIGRESPONSE = DESCRIPTOR.message_types_by_name['DescribeDenyConfigResponse']\n_DELETEDENYCONFIGRESPONSE = DESCRIPTOR.message_types_by_name['DeleteDenyConfigResponse']\nCreateDomainResponse = _reflection.GeneratedProtocolMessageType('CreateDomainResponse', (_message.Message,), {\n  'DESCRIPTOR' : _CREATEDOMAINRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.CreateDomainResponse)\n  })\n_sym_db.RegisterMessage(CreateDomainResponse)\n\nListDomainDetailResponse = _reflection.GeneratedProtocolMessageType('ListDomainDetailResponse', (_message.Message,), {\n  'DESCRIPTOR' : _LISTDOMAINDETAILRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.ListDomainDetailResponse)\n  })\n_sym_db.RegisterMessage(ListDomainDetailResponse)\n\nDisableDomainResponse = _reflection.GeneratedProtocolMessageType('DisableDomainResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DISABLEDOMAINRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.DisableDomainResponse)\n  })\n_sym_db.RegisterMessage(DisableDomainResponse)\n\nEnableDomainResponse = _reflection.GeneratedProtocolMessageType('EnableDomainResponse', (_message.Message,), {\n  'DESCRIPTOR' : _ENABLEDOMAINRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.EnableDomainResponse)\n  })\n_sym_db.RegisterMessage(EnableDomainResponse)\n\nDeleteDomainResponse = _reflection.GeneratedProtocolMessageType('DeleteDomainResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DELETEDOMAINRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.DeleteDomainResponse)\n  })\n_sym_db.RegisterMessage(DeleteDomainResponse)\n\nDescribeDomainResponse = _reflection.GeneratedProtocolMessageType('DescribeDomainResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEDOMAINRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.DescribeDomainResponse)\n  })\n_sym_db.RegisterMessage(DescribeDomainResponse)\n\nManagerPullPushDomainBindResponse = _reflection.GeneratedProtocolMessageType('ManagerPullPushDomainBindResponse', (_message.Message,), {\n  'DESCRIPTOR' : _MANAGERPULLPUSHDOMAINBINDRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.ManagerPullPushDomainBindResponse)\n  })\n_sym_db.RegisterMessage(ManagerPullPushDomainBindResponse)\n\nDescribeLiveStreamInfoByPageResponse = _reflection.GeneratedProtocolMessageType('DescribeLiveStreamInfoByPageResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBELIVESTREAMINFOBYPAGERESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.DescribeLiveStreamInfoByPageResponse)\n  })\n_sym_db.RegisterMessage(DescribeLiveStreamInfoByPageResponse)\n\nDescribeClosedStreamInfoByPageResponse = _reflection.GeneratedProtocolMessageType('DescribeClosedStreamInfoByPageResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBECLOSEDSTREAMINFOBYPAGERESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.DescribeClosedStreamInfoByPageResponse)\n  })\n_sym_db.RegisterMessage(DescribeClosedStreamInfoByPageResponse)\n\nDescribeLiveStreamStateResponse = _reflection.GeneratedProtocolMessageType('DescribeLiveStreamStateResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBELIVESTREAMSTATERESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.DescribeLiveStreamStateResponse)\n  })\n_sym_db.RegisterMessage(DescribeLiveStreamStateResponse)\n\nKillStreamResponse = _reflection.GeneratedProtocolMessageType('KillStreamResponse', (_message.Message,), {\n  'DESCRIPTOR' : _KILLSTREAMRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.KillStreamResponse)\n  })\n_sym_db.RegisterMessage(KillStreamResponse)\n\nForbidStreamResponse = _reflection.GeneratedProtocolMessageType('ForbidStreamResponse', (_message.Message,), {\n  'DESCRIPTOR' : _FORBIDSTREAMRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.ForbidStreamResponse)\n  })\n_sym_db.RegisterMessage(ForbidStreamResponse)\n\nDescribeForbiddenStreamInfoByPageResponse = _reflection.GeneratedProtocolMessageType('DescribeForbiddenStreamInfoByPageResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEFORBIDDENSTREAMINFOBYPAGERESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.DescribeForbiddenStreamInfoByPageResponse)\n  })\n_sym_db.RegisterMessage(DescribeForbiddenStreamInfoByPageResponse)\n\nResumeStreamResponse = _reflection.GeneratedProtocolMessageType('ResumeStreamResponse', (_message.Message,), {\n  'DESCRIPTOR' : _RESUMESTREAMRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.ResumeStreamResponse)\n  })\n_sym_db.RegisterMessage(ResumeStreamResponse)\n\nDescribeCDNSnapshotHistoryResponse = _reflection.GeneratedProtocolMessageType('DescribeCDNSnapshotHistoryResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBECDNSNAPSHOTHISTORYRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.DescribeCDNSnapshotHistoryResponse)\n  })\n_sym_db.RegisterMessage(DescribeCDNSnapshotHistoryResponse)\n\nDescribeRecordTaskFileHistoryResponse = _reflection.GeneratedProtocolMessageType('DescribeRecordTaskFileHistoryResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBERECORDTASKFILEHISTORYRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.DescribeRecordTaskFileHistoryResponse)\n  })\n_sym_db.RegisterMessage(DescribeRecordTaskFileHistoryResponse)\n\nUpdateRelaySourceResponse = _reflection.GeneratedProtocolMessageType('UpdateRelaySourceResponse', (_message.Message,), {\n  'DESCRIPTOR' : _UPDATERELAYSOURCERESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.UpdateRelaySourceResponse)\n  })\n_sym_db.RegisterMessage(UpdateRelaySourceResponse)\n\nDeleteRelaySourceResponse = _reflection.GeneratedProtocolMessageType('DeleteRelaySourceResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DELETERELAYSOURCERESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.DeleteRelaySourceResponse)\n  })\n_sym_db.RegisterMessage(DeleteRelaySourceResponse)\n\nDescribeRelaySourceResponse = _reflection.GeneratedProtocolMessageType('DescribeRelaySourceResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBERELAYSOURCERESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.DescribeRelaySourceResponse)\n  })\n_sym_db.RegisterMessage(DescribeRelaySourceResponse)\n\nCreateVQScoreTaskResponse = _reflection.GeneratedProtocolMessageType('CreateVQScoreTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _CREATEVQSCORETASKRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.CreateVQScoreTaskResponse)\n  })\n_sym_db.RegisterMessage(CreateVQScoreTaskResponse)\n\nDescribeVQScoreTaskResponse = _reflection.GeneratedProtocolMessageType('DescribeVQScoreTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVQSCORETASKRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.DescribeVQScoreTaskResponse)\n  })\n_sym_db.RegisterMessage(DescribeVQScoreTaskResponse)\n\nListVQScoreTaskResponse = _reflection.GeneratedProtocolMessageType('ListVQScoreTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _LISTVQSCORETASKRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.ListVQScoreTaskResponse)\n  })\n_sym_db.RegisterMessage(ListVQScoreTaskResponse)\n\nGeneratePlayURLResponse = _reflection.GeneratedProtocolMessageType('GeneratePlayURLResponse', (_message.Message,), {\n  'DESCRIPTOR' : _GENERATEPLAYURLRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.GeneratePlayURLResponse)\n  })\n_sym_db.RegisterMessage(GeneratePlayURLResponse)\n\nGeneratePushURLResponse = _reflection.GeneratedProtocolMessageType('GeneratePushURLResponse', (_message.Message,), {\n  'DESCRIPTOR' : _GENERATEPUSHURLRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.GeneratePushURLResponse)\n  })\n_sym_db.RegisterMessage(GeneratePushURLResponse)\n\nCreatePullToPushTaskResponse = _reflection.GeneratedProtocolMessageType('CreatePullToPushTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _CREATEPULLTOPUSHTASKRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.CreatePullToPushTaskResponse)\n  })\n_sym_db.RegisterMessage(CreatePullToPushTaskResponse)\n\nListPullToPushTaskResponse = _reflection.GeneratedProtocolMessageType('ListPullToPushTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _LISTPULLTOPUSHTASKRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.ListPullToPushTaskResponse)\n  })\n_sym_db.RegisterMessage(ListPullToPushTaskResponse)\n\nUpdatePullToPushTaskResponse = _reflection.GeneratedProtocolMessageType('UpdatePullToPushTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _UPDATEPULLTOPUSHTASKRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.UpdatePullToPushTaskResponse)\n  })\n_sym_db.RegisterMessage(UpdatePullToPushTaskResponse)\n\nRestartPullToPushTaskResponse = _reflection.GeneratedProtocolMessageType('RestartPullToPushTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _RESTARTPULLTOPUSHTASKRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.RestartPullToPushTaskResponse)\n  })\n_sym_db.RegisterMessage(RestartPullToPushTaskResponse)\n\nStopPullToPushTaskResponse = _reflection.GeneratedProtocolMessageType('StopPullToPushTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _STOPPULLTOPUSHTASKRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.StopPullToPushTaskResponse)\n  })\n_sym_db.RegisterMessage(StopPullToPushTaskResponse)\n\nDeletePullToPushTaskResponse = _reflection.GeneratedProtocolMessageType('DeletePullToPushTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DELETEPULLTOPUSHTASKRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.DeletePullToPushTaskResponse)\n  })\n_sym_db.RegisterMessage(DeletePullToPushTaskResponse)\n\nUpdateDenyConfigResponse = _reflection.GeneratedProtocolMessageType('UpdateDenyConfigResponse', (_message.Message,), {\n  'DESCRIPTOR' : _UPDATEDENYCONFIGRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.UpdateDenyConfigResponse)\n  })\n_sym_db.RegisterMessage(UpdateDenyConfigResponse)\n\nDescribeDenyConfigResponse = _reflection.GeneratedProtocolMessageType('DescribeDenyConfigResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEDENYCONFIGRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.DescribeDenyConfigResponse)\n  })\n_sym_db.RegisterMessage(DescribeDenyConfigResponse)\n\nDeleteDenyConfigResponse = _reflection.GeneratedProtocolMessageType('DeleteDenyConfigResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DELETEDENYCONFIGRESPONSE,\n  '__module__' : 'live.response.response_live_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Live.Models.Response.DeleteDenyConfigResponse)\n  })\n_sym_db.RegisterMessage(DeleteDenyConfigResponse)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n*com.volcengine.service.live.model.responseB\\014LiveResponseP\\001ZBgithub.com/volcengine/volc-sdk-golang/service/live/models/response\\240\\001\\001\\330\\001\\001\\312\\002!Volc\\\\Service\\\\Live\\\\Models\\\\Response\\342\\002$Volc\\\\Service\\\\Live\\\\Models\\\\GPBMetadata'\n  _CREATEDOMAINRESPONSE._serialized_start=378\n  _CREATEDOMAINRESPONSE._serialized_end=473\n  _LISTDOMAINDETAILRESPONSE._serialized_start=476\n  _LISTDOMAINDETAILRESPONSE._serialized_end=640\n  _DISABLEDOMAINRESPONSE._serialized_start=642\n  _DISABLEDOMAINRESPONSE._serialized_end=738\n  _ENABLEDOMAINRESPONSE._serialized_start=740\n  _ENABLEDOMAINRESPONSE._serialized_end=835\n  _DELETEDOMAINRESPONSE._serialized_start=837\n  _DELETEDOMAINRESPONSE._serialized_end=932\n  _DESCRIBEDOMAINRESPONSE._serialized_start=935\n  _DESCRIBEDOMAINRESPONSE._serialized_end=1097\n  _MANAGERPULLPUSHDOMAINBINDRESPONSE._serialized_start=1099\n  _MANAGERPULLPUSHDOMAINBINDRESPONSE._serialized_end=1207\n  _DESCRIBELIVESTREAMINFOBYPAGERESPONSE._serialized_start=1210\n  _DESCRIBELIVESTREAMINFOBYPAGERESPONSE._serialized_end=1386\n  _DESCRIBECLOSEDSTREAMINFOBYPAGERESPONSE._serialized_start=1389\n  _DESCRIBECLOSEDSTREAMINFOBYPAGERESPONSE._serialized_end=1569\n  _DESCRIBELIVESTREAMSTATERESPONSE._serialized_start=1572\n  _DESCRIBELIVESTREAMSTATERESPONSE._serialized_end=1744\n  _KILLSTREAMRESPONSE._serialized_start=1746\n  _KILLSTREAMRESPONSE._serialized_end=1839\n  _FORBIDSTREAMRESPONSE._serialized_start=1841\n  _FORBIDSTREAMRESPONSE._serialized_end=1936\n  _DESCRIBEFORBIDDENSTREAMINFOBYPAGERESPONSE._serialized_start=1939\n  _DESCRIBEFORBIDDENSTREAMINFOBYPAGERESPONSE._serialized_end=2125\n  _RESUMESTREAMRESPONSE._serialized_start=2127\n  _RESUMESTREAMRESPONSE._serialized_end=2222\n  _DESCRIBECDNSNAPSHOTHISTORYRESPONSE._serialized_start=2225\n  _DESCRIBECDNSNAPSHOTHISTORYRESPONSE._serialized_end=2407\n  _DESCRIBERECORDTASKFILEHISTORYRESPONSE._serialized_start=2410\n  _DESCRIBERECORDTASKFILEHISTORYRESPONSE._serialized_end=2590\n  _UPDATERELAYSOURCERESPONSE._serialized_start=2592\n  _UPDATERELAYSOURCERESPONSE._serialized_end=2692\n  _DELETERELAYSOURCERESPONSE._serialized_start=2694\n  _DELETERELAYSOURCERESPONSE._serialized_end=2794\n  _DESCRIBERELAYSOURCERESPONSE._serialized_start=2797\n  _DESCRIBERELAYSOURCERESPONSE._serialized_end=2971\n  _CREATEVQSCORETASKRESPONSE._serialized_start=2974\n  _CREATEVQSCORETASKRESPONSE._serialized_end=3134\n  _DESCRIBEVQSCORETASKRESPONSE._serialized_start=3137\n  _DESCRIBEVQSCORETASKRESPONSE._serialized_end=3301\n  _LISTVQSCORETASKRESPONSE._serialized_start=3304\n  _LISTVQSCORETASKRESPONSE._serialized_end=3472\n  _GENERATEPLAYURLRESPONSE._serialized_start=3475\n  _GENERATEPLAYURLRESPONSE._serialized_end=3645\n  _GENERATEPUSHURLRESPONSE._serialized_start=3648\n  _GENERATEPUSHURLRESPONSE._serialized_end=3818\n  _CREATEPULLTOPUSHTASKRESPONSE._serialized_start=3821\n  _CREATEPULLTOPUSHTASKRESPONSE._serialized_end=4001\n  _LISTPULLTOPUSHTASKRESPONSE._serialized_start=4004\n  _LISTPULLTOPUSHTASKRESPONSE._serialized_end=4180\n  _UPDATEPULLTOPUSHTASKRESPONSE._serialized_start=4182\n  _UPDATEPULLTOPUSHTASKRESPONSE._serialized_end=4285\n  _RESTARTPULLTOPUSHTASKRESPONSE._serialized_start=4287\n  _RESTARTPULLTOPUSHTASKRESPONSE._serialized_end=4391\n  _STOPPULLTOPUSHTASKRESPONSE._serialized_start=4393\n  _STOPPULLTOPUSHTASKRESPONSE._serialized_end=4494\n  _DELETEPULLTOPUSHTASKRESPONSE._serialized_start=4496\n  _DELETEPULLTOPUSHTASKRESPONSE._serialized_end=4599\n  _UPDATEDENYCONFIGRESPONSE._serialized_start=4601\n  _UPDATEDENYCONFIGRESPONSE._serialized_end=4700\n  _DESCRIBEDENYCONFIGRESPONSE._serialized_start=4703\n  _DESCRIBEDENYCONFIGRESPONSE._serialized_end=4879\n  _DELETEDENYCONFIGRESPONSE._serialized_start=4881\n  _DELETEDENYCONFIGRESPONSE._serialized_end=4980\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/live/v20230101/__init__.py",
    "content": "__version__ = '1.0.0'\n"
  },
  {
    "path": "volcengine/live/v20230101/live_config.py",
    "content": "# coding:utf-8\n\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.ApiInfo import ApiInfo\n\nservice_info_map = {\n    'cn-north-1': ServiceInfo(\n        'live.volcengineapi.com',\n        {'Accept': 'application/json'},\n        Credentials('', '', 'live', 'cn-north-1'),\n        10, 10, \"https\")\n}\n\napi_info = {\n    \"DeleteTranscodePreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteTranscodePreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateTranscodePreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateTranscodePreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListCommonTransPresetDetail\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListCommonTransPresetDetail\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"TranscodingJobStatus\": ApiInfo(\"GET\", \"/\", {\"Action\": \"TranscodingJobStatus\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListVhostTransCodePreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListVhostTransCodePreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreateTranscodePreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateTranscodePreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"RestartTranscodingJob\": ApiInfo(\"GET\", \"/\", {\"Action\": \"RestartTranscodingJob\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteWatermarkPresetV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteWatermarkPresetV2\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateWatermarkPresetV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateWatermarkPresetV2\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListWatermarkPresetDetail\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListWatermarkPresetDetail\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreateWatermarkPresetV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateWatermarkPresetV2\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreateWatermarkPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateWatermarkPreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateWatermarkPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateWatermarkPreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteWatermarkPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteWatermarkPreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListWatermarkPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListWatermarkPreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListVhostWatermarkPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListVhostWatermarkPreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"StopPullRecordTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"StopPullRecordTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreateLiveStreamRecordIndexFiles\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateLiveStreamRecordIndexFiles\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreatePullRecordTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreatePullRecordTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteRecordPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteRecordPreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateRecordPresetV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateRecordPresetV2\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"GetPullRecordTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetPullRecordTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeRecordTaskFileHistory\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeRecordTaskFileHistory\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListVhostRecordPresetV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListVhostRecordPresetV2\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListPullRecordTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListPullRecordTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreateRecordPresetV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateRecordPresetV2\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteSnapshotPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteSnapshotPreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateSnapshotPresetV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateSnapshotPresetV2\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeCDNSnapshotHistory\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeCDNSnapshotHistory\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListVhostSnapshotPresetV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListVhostSnapshotPresetV2\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreateSnapshotPresetV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateSnapshotPresetV2\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteTimeShiftPresetV3\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteTimeShiftPresetV3\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateTimeShiftPresetV3\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateTimeShiftPresetV3\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListTimeShiftPresetV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListTimeShiftPresetV2\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreateTimeShiftPresetV3\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateTimeShiftPresetV3\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteCallback\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteCallback\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeCallback\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeCallback\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateCallback\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateCallback\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteCert\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteCert\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeCertDetailSecretV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeCertDetailSecretV2\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListCertV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListCertV2\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreateCert\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateCert\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"BindCert\": ApiInfo(\"POST\", \"/\", {\"Action\": \"BindCert\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UnbindCert\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UnbindCert\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteDomain\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteDomain\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"EnableDomain\": ApiInfo(\"POST\", \"/\", {\"Action\": \"EnableDomain\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreateDomainV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateDomainV2\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateDomainVhost\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateDomainVhost\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeDomain\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeDomain\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListDomainDetail\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListDomainDetail\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreateDomain\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateDomain\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DisableDomain\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DisableDomain\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreateLiveVideoQualityAnalysisTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateLiveVideoQualityAnalysisTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteLiveVideoQualityAnalysisTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteLiveVideoQualityAnalysisTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"GetLiveVideoQualityAnalysisTaskDetail\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetLiveVideoQualityAnalysisTaskDetail\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListLiveVideoQualityAnalysisTasks\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListLiveVideoQualityAnalysisTasks\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"StopPullToPushTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"StopPullToPushTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreatePullToPushTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreatePullToPushTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreatePullToPushGroup\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreatePullToPushGroup\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeletePullToPushTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeletePullToPushTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeletePullToPushGroup\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeletePullToPushGroup\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ContinuePullToPushTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ContinuePullToPushTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdatePullToPushTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdatePullToPushTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdatePullToPushGroup\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdatePullToPushGroup\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListPullToPushGroup\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListPullToPushGroup\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListPullToPushTask\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListPullToPushTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListPullToPushTaskV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListPullToPushTaskV2\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"RelaunchPullToPushTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"RelaunchPullToPushTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteRelaySourceV4\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteRelaySourceV4\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteRelaySourceV3\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteRelaySourceV3\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateRelaySourceV4\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateRelaySourceV4\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListRelaySourceV4\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListRelaySourceV4\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeRelaySourceV3\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeRelaySourceV3\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreateRelaySourceV4\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateRelaySourceV4\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateRelaySourceV3\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateRelaySourceV3\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveStreamGroupByPage\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveStreamGroupByPage\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeForbiddenStreamGroupByPage\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeForbiddenStreamGroupByPage\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"KillStream\": ApiInfo(\"POST\", \"/\", {\"Action\": \"KillStream\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeClosedStreamInfoByPage\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeClosedStreamInfoByPage\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveStreamInfoByPage\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeLiveStreamInfoByPage\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveStreamState\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeLiveStreamState\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeForbiddenStreamInfoByPage\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeForbiddenStreamInfoByPage\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ForbidStream\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ForbidStream\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ResumeStream\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ResumeStream\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"GeneratePlayURL\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GeneratePlayURL\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"GeneratePushURL\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GeneratePushURL\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteStreamQuotaConfig\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteStreamQuotaConfig\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeStreamQuotaConfig\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeStreamQuotaConfig\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateStreamQuotaConfig\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateStreamQuotaConfig\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteSnapshotAuditPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteSnapshotAuditPreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateSnapshotAuditPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateSnapshotAuditPreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListVhostSnapshotAuditPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListVhostSnapshotAuditPreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreateSnapshotAuditPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateSnapshotAuditPreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeIpInfo\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeIpInfo\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveTopPlayData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveTopPlayData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveRegionData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveRegionData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveSourceStreamMetrics\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveSourceStreamMetrics\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLivePushStreamMetrics\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLivePushStreamMetrics\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveCallbackData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveCallbackData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveBatchStreamSessionData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveBatchStreamSessionData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveStreamSessionData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveStreamSessionData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLivePlayStatusCodeData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLivePlayStatusCodeData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveBatchSourceStreamMetrics\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveBatchSourceStreamMetrics\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveBatchSourceStreamAvgMetrics\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveBatchSourceStreamAvgMetrics\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveBatchPushStreamMetrics\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveBatchPushStreamMetrics\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveBatchPushStreamAvgMetrics\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveBatchPushStreamAvgMetrics\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveBatchStreamTranscodeData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveBatchStreamTranscodeData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveStreamCountData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveStreamCountData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLivePushStreamCountData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLivePushStreamCountData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLivePushStreamInfoData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLivePushStreamInfoData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveTranscodeInfoData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveTranscodeInfoData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveSourceBandwidthData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveSourceBandwidthData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveSourceTrafficData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveSourceTrafficData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveMetricBandwidthData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveMetricBandwidthData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveMetricTrafficData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveMetricTrafficData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveBatchStreamTrafficData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveBatchStreamTrafficData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveEdgeStatData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveEdgeStatData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveISPData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveISPData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveP95PeakBandwidthData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveP95PeakBandwidthData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveAuditData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveAuditData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLivePullToPushBandwidthData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLivePullToPushBandwidthData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLivePullToPushData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLivePullToPushData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveBandwidthData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveBandwidthData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveRecordData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveRecordData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveSnapshotData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveSnapshotData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveTrafficData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveTrafficData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveTranscodeData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveTranscodeData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveTimeShiftData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveTimeShiftData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLiveLogData\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLiveLogData\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteReferer\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteReferer\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeReferer\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeReferer\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeAuth\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeAuth\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateReferer\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateReferer\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateAuthKey\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateAuthKey\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteHTTPHeaderConfig\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteHTTPHeaderConfig\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"EnableHTTPHeaderConfig\": ApiInfo(\"POST\", \"/\", {\"Action\": \"EnableHTTPHeaderConfig\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeHTTPHeaderConfig\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeHTTPHeaderConfig\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateHTTPHeaderConfig\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateHTTPHeaderConfig\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateEncryptDRM\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateEncryptDRM\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateEncryptHLS\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateEncryptHLS\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"GetHLSEncryptDataKey\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetHLSEncryptDataKey\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeEncryptHLS\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeEncryptHLS\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLicenseDRM\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLicenseDRM\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeCertDRM\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeCertDRM\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeEncryptDRM\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeEncryptDRM\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"BindEncryptDRM\": ApiInfo(\"POST\", \"/\", {\"Action\": \"BindEncryptDRM\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UnBindEncryptDRM\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UnBindEncryptDRM\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListBindEncryptDRM\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListBindEncryptDRM\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteIPAccessRule\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteIPAccessRule\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateIPAccessRule\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateIPAccessRule\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeIPAccessRule\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeIPAccessRule\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreateCloudMixTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateCloudMixTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateCloudMixTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateCloudMixTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"GetCloudMixTaskDetail\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetCloudMixTaskDetail\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListCloudMixTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListCloudMixTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteCloudMixTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteCloudMixTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteSubtitleTranscodePreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteSubtitleTranscodePreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateSubtitleTranscodePreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateSubtitleTranscodePreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListVhostSubtitleTranscodePreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListVhostSubtitleTranscodePreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreateSubtitleTranscodePreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateSubtitleTranscodePreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreateLivePadPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateLivePadPreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteLivePadPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteLivePadPreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"StopLivePadStream\": ApiInfo(\"POST\", \"/\", {\"Action\": \"StopLivePadStream\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateLivePadPreset\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateLivePadPreset\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLivePadStreamList\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLivePadStreamList\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeLivePadPresetDetail\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeLivePadPresetDetail\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreateCarouselTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateCarouselTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteCarouselTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteCarouselTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateCarouselTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateCarouselTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"GetCarouselDetail\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetCarouselDetail\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListCarouselTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListCarouselTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreateHighLightTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateHighLightTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteTaskByAccountID\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteTaskByAccountID\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DescribeHighLightTaskByAccountID\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DescribeHighLightTaskByAccountID\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"ListHighLightTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListHighLightTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"CreateSpeechTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateSpeechTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"DeleteSpeechTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteSpeechTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"SearchSpeechTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"SearchSpeechTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"UpdateSpeechTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateSpeechTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"GetSpeechTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetSpeechTask\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"GetSpeechConfig\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetSpeechConfig\", \"Version\": \"2023-01-01\"}, {}, {}),\n    \"RestartSpeechTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"RestartSpeechTask\", \"Version\": \"2023-01-01\"}, {}, {})\n}"
  },
  {
    "path": "volcengine/live/v20230101/live_service.py",
    "content": "# coding:utf-8\nfrom volcengine.live.v20230101.live_trait import LiveTrait  # Modify it if necessary\n\n\nclass LiveService(LiveTrait):\n    def __init__(self, host='live.volcengineapi.com', ak=None, sk=None):\n        super().__init__({\n            'ak': ak,\n            'sk': sk,\n        })\n        self.set_host(host)\n  "
  },
  {
    "path": "volcengine/live/v20230101/live_trait.py",
    "content": "# coding:utf-8\n\nimport json\nfrom volcengine.base.Service import Service\nfrom volcengine.const.Const import *\nfrom volcengine.util.Util import *\nfrom volcengine.Policy import *\nfrom volcengine.live.v20230101.live_config import *  # Modify it if necessary\n\n\nclass LiveTrait(Service):\n    def __init__(self, param=None):\n        if param is None:\n            param = {}\n        self.param = param\n        region = param.get('region', REGION_CN_NORTH1)\n        self.service_info = LiveTrait.get_service_info(region)\n        self.api_info = LiveTrait.get_api_info()\n        if param.get('ak', None) and param.get('sk', None):\n            self.set_ak(param['ak'])\n            self.set_sk(param['sk'])\n        super(LiveTrait, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info(region):\n        service_info = service_info_map.get(region, None)\n        if not service_info:\n            raise Exception('Not support region %s' % region)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        return api_info\n\n    def api_get(self, action, params, doseq=0):\n        res = self.get(action, params, doseq)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(json.dumps(res))\n        return res_json\n\n    def api_post(self, action, params, body):\n        res = self.json(action, params, body)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(json.dumps(res))\n        return res_json\n\n\n    def delete_transcode_preset(self, body):\n        res = self.api_post('DeleteTranscodePreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_transcode_preset(self, body):\n        res = self.api_post('UpdateTranscodePreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_common_trans_preset_detail(self, body):\n        res = self.api_post('ListCommonTransPresetDetail', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def transcoding_job_status(self, query):\n        res = self.api_get('TranscodingJobStatus', query)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_vhost_trans_code_preset(self, body):\n        res = self.api_post('ListVhostTransCodePreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_transcode_preset(self, body):\n        res = self.api_post('CreateTranscodePreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def restart_transcoding_job(self, query):\n        res = self.api_get('RestartTranscodingJob', query)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_watermark_preset_v2(self, body):\n        res = self.api_post('DeleteWatermarkPresetV2', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_watermark_preset_v2(self, body):\n        res = self.api_post('UpdateWatermarkPresetV2', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_watermark_preset_detail(self, body):\n        res = self.api_post('ListWatermarkPresetDetail', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_watermark_preset_v2(self, body):\n        res = self.api_post('CreateWatermarkPresetV2', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_watermark_preset(self, body):\n        res = self.api_post('CreateWatermarkPreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_watermark_preset(self, body):\n        res = self.api_post('UpdateWatermarkPreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_watermark_preset(self, body):\n        res = self.api_post('DeleteWatermarkPreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_watermark_preset(self, body):\n        res = self.api_post('ListWatermarkPreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_vhost_watermark_preset(self, body):\n        res = self.api_post('ListVhostWatermarkPreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def stop_pull_record_task(self, body):\n        res = self.api_post('StopPullRecordTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_live_stream_record_index_files(self, body):\n        res = self.api_post('CreateLiveStreamRecordIndexFiles', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_pull_record_task(self, body):\n        res = self.api_post('CreatePullRecordTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_record_preset(self, body):\n        res = self.api_post('DeleteRecordPreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_record_preset_v2(self, body):\n        res = self.api_post('UpdateRecordPresetV2', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def get_pull_record_task(self, body):\n        res = self.api_post('GetPullRecordTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_record_task_file_history(self, body):\n        res = self.api_post('DescribeRecordTaskFileHistory', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_vhost_record_preset_v2(self, body):\n        res = self.api_post('ListVhostRecordPresetV2', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_pull_record_task(self, body):\n        res = self.api_post('ListPullRecordTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_record_preset_v2(self, body):\n        res = self.api_post('CreateRecordPresetV2', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_snapshot_preset(self, body):\n        res = self.api_post('DeleteSnapshotPreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_snapshot_preset_v2(self, body):\n        res = self.api_post('UpdateSnapshotPresetV2', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_cdn_snapshot_history(self, body):\n        res = self.api_post('DescribeCDNSnapshotHistory', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_vhost_snapshot_preset_v2(self, body):\n        res = self.api_post('ListVhostSnapshotPresetV2', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_snapshot_preset_v2(self, body):\n        res = self.api_post('CreateSnapshotPresetV2', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_time_shift_preset_v3(self, body):\n        res = self.api_post('DeleteTimeShiftPresetV3', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_time_shift_preset_v3(self, body):\n        res = self.api_post('UpdateTimeShiftPresetV3', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_time_shift_preset_v2(self, body):\n        res = self.api_post('ListTimeShiftPresetV2', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_time_shift_preset_v3(self, body):\n        res = self.api_post('CreateTimeShiftPresetV3', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_callback(self, body):\n        res = self.api_post('DeleteCallback', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_callback(self, body):\n        res = self.api_post('DescribeCallback', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_callback(self, body):\n        res = self.api_post('UpdateCallback', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_cert(self, body):\n        res = self.api_post('DeleteCert', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_cert_detail_secret_v2(self, body):\n        res = self.api_post('DescribeCertDetailSecretV2', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_cert_v2(self, body):\n        res = self.api_post('ListCertV2', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_cert(self, body):\n        res = self.api_post('CreateCert', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def bind_cert(self, body):\n        res = self.api_post('BindCert', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def unbind_cert(self, body):\n        res = self.api_post('UnbindCert', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_domain(self, body):\n        res = self.api_post('DeleteDomain', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def enable_domain(self, body):\n        res = self.api_post('EnableDomain', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_domain_v2(self, body):\n        res = self.api_post('CreateDomainV2', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_domain_vhost(self, body):\n        res = self.api_post('UpdateDomainVhost', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_domain(self, body):\n        res = self.api_post('DescribeDomain', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_domain_detail(self, body):\n        res = self.api_post('ListDomainDetail', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_domain(self, body):\n        res = self.api_post('CreateDomain', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def disable_domain(self, body):\n        res = self.api_post('DisableDomain', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_live_video_quality_analysis_task(self, body):\n        res = self.api_post('CreateLiveVideoQualityAnalysisTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_live_video_quality_analysis_task(self, body):\n        res = self.api_post('DeleteLiveVideoQualityAnalysisTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def get_live_video_quality_analysis_task_detail(self, body):\n        res = self.api_post('GetLiveVideoQualityAnalysisTaskDetail', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_live_video_quality_analysis_tasks(self, body):\n        res = self.api_post('ListLiveVideoQualityAnalysisTasks', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def stop_pull_to_push_task(self, body):\n        res = self.api_post('StopPullToPushTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_pull_to_push_task(self, body):\n        res = self.api_post('CreatePullToPushTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_pull_to_push_group(self, body):\n        res = self.api_post('CreatePullToPushGroup', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_pull_to_push_task(self, body):\n        res = self.api_post('DeletePullToPushTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_pull_to_push_group(self, body):\n        res = self.api_post('DeletePullToPushGroup', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def continue_pull_to_push_task(self, body):\n        res = self.api_post('ContinuePullToPushTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_pull_to_push_task(self, body):\n        res = self.api_post('UpdatePullToPushTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_pull_to_push_group(self, body):\n        res = self.api_post('UpdatePullToPushGroup', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_pull_to_push_group(self, body):\n        res = self.api_post('ListPullToPushGroup', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_pull_to_push_task(self, query):\n        res = self.api_get('ListPullToPushTask', query)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_pull_to_push_task_v2(self, body):\n        res = self.api_post('ListPullToPushTaskV2', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def relaunch_pull_to_push_task(self, body):\n        res = self.api_post('RelaunchPullToPushTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_relay_source_v4(self, body):\n        res = self.api_post('DeleteRelaySourceV4', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_relay_source_v3(self, body):\n        res = self.api_post('DeleteRelaySourceV3', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_relay_source_v4(self, body):\n        res = self.api_post('UpdateRelaySourceV4', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_relay_source_v4(self, body):\n        res = self.api_post('ListRelaySourceV4', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_relay_source_v3(self, body):\n        res = self.api_post('DescribeRelaySourceV3', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_relay_source_v4(self, body):\n        res = self.api_post('CreateRelaySourceV4', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_relay_source_v3(self, body):\n        res = self.api_post('UpdateRelaySourceV3', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_stream_group_by_page(self, body):\n        res = self.api_post('DescribeLiveStreamGroupByPage', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_forbidden_stream_group_by_page(self, body):\n        res = self.api_post('DescribeForbiddenStreamGroupByPage', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def kill_stream(self, body):\n        res = self.api_post('KillStream', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_closed_stream_info_by_page(self, query):\n        res = self.api_get('DescribeClosedStreamInfoByPage', query)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_stream_info_by_page(self, query):\n        res = self.api_get('DescribeLiveStreamInfoByPage', query)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_stream_state(self, query):\n        res = self.api_get('DescribeLiveStreamState', query)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_forbidden_stream_info_by_page(self, query):\n        res = self.api_get('DescribeForbiddenStreamInfoByPage', query)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def forbid_stream(self, body):\n        res = self.api_post('ForbidStream', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def resume_stream(self, body):\n        res = self.api_post('ResumeStream', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def generate_play_url(self, body):\n        res = self.api_post('GeneratePlayURL', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def generate_push_url(self, body):\n        res = self.api_post('GeneratePushURL', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_stream_quota_config(self, body):\n        res = self.api_post('DeleteStreamQuotaConfig', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_stream_quota_config(self, body):\n        res = self.api_post('DescribeStreamQuotaConfig', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_stream_quota_config(self, body):\n        res = self.api_post('UpdateStreamQuotaConfig', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_snapshot_audit_preset(self, body):\n        res = self.api_post('DeleteSnapshotAuditPreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_snapshot_audit_preset(self, body):\n        res = self.api_post('UpdateSnapshotAuditPreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_vhost_snapshot_audit_preset(self, body):\n        res = self.api_post('ListVhostSnapshotAuditPreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_snapshot_audit_preset(self, body):\n        res = self.api_post('CreateSnapshotAuditPreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_ip_info(self, body):\n        res = self.api_post('DescribeIpInfo', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_top_play_data(self, body):\n        res = self.api_post('DescribeLiveTopPlayData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_region_data(self, body):\n        res = self.api_post('DescribeLiveRegionData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_source_stream_metrics(self, body):\n        res = self.api_post('DescribeLiveSourceStreamMetrics', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_push_stream_metrics(self, body):\n        res = self.api_post('DescribeLivePushStreamMetrics', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_callback_data(self, body):\n        res = self.api_post('DescribeLiveCallbackData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_batch_stream_session_data(self, body):\n        res = self.api_post('DescribeLiveBatchStreamSessionData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_stream_session_data(self, body):\n        res = self.api_post('DescribeLiveStreamSessionData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_play_status_code_data(self, body):\n        res = self.api_post('DescribeLivePlayStatusCodeData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_batch_source_stream_metrics(self, body):\n        res = self.api_post('DescribeLiveBatchSourceStreamMetrics', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_batch_source_stream_avg_metrics(self, body):\n        res = self.api_post('DescribeLiveBatchSourceStreamAvgMetrics', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_batch_push_stream_metrics(self, body):\n        res = self.api_post('DescribeLiveBatchPushStreamMetrics', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_batch_push_stream_avg_metrics(self, body):\n        res = self.api_post('DescribeLiveBatchPushStreamAvgMetrics', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_batch_stream_transcode_data(self, body):\n        res = self.api_post('DescribeLiveBatchStreamTranscodeData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_stream_count_data(self, body):\n        res = self.api_post('DescribeLiveStreamCountData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_push_stream_count_data(self, body):\n        res = self.api_post('DescribeLivePushStreamCountData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_push_stream_info_data(self, body):\n        res = self.api_post('DescribeLivePushStreamInfoData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_transcode_info_data(self, body):\n        res = self.api_post('DescribeLiveTranscodeInfoData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_source_bandwidth_data(self, body):\n        res = self.api_post('DescribeLiveSourceBandwidthData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_source_traffic_data(self, body):\n        res = self.api_post('DescribeLiveSourceTrafficData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_metric_bandwidth_data(self, body):\n        res = self.api_post('DescribeLiveMetricBandwidthData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_metric_traffic_data(self, body):\n        res = self.api_post('DescribeLiveMetricTrafficData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_batch_stream_traffic_data(self, body):\n        res = self.api_post('DescribeLiveBatchStreamTrafficData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_edge_stat_data(self, body):\n        res = self.api_post('DescribeLiveEdgeStatData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_isp_data(self, body):\n        res = self.api_post('DescribeLiveISPData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_p95_peak_bandwidth_data(self, body):\n        res = self.api_post('DescribeLiveP95PeakBandwidthData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_audit_data(self, body):\n        res = self.api_post('DescribeLiveAuditData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_pull_to_push_bandwidth_data(self, body):\n        res = self.api_post('DescribeLivePullToPushBandwidthData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_pull_to_push_data(self, body):\n        res = self.api_post('DescribeLivePullToPushData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_bandwidth_data(self, body):\n        res = self.api_post('DescribeLiveBandwidthData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_record_data(self, body):\n        res = self.api_post('DescribeLiveRecordData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_snapshot_data(self, body):\n        res = self.api_post('DescribeLiveSnapshotData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_traffic_data(self, body):\n        res = self.api_post('DescribeLiveTrafficData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_transcode_data(self, body):\n        res = self.api_post('DescribeLiveTranscodeData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_time_shift_data(self, body):\n        res = self.api_post('DescribeLiveTimeShiftData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_log_data(self, body):\n        res = self.api_post('DescribeLiveLogData', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_referer(self, body):\n        res = self.api_post('DeleteReferer', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_referer(self, body):\n        res = self.api_post('DescribeReferer', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_auth(self, body):\n        res = self.api_post('DescribeAuth', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_referer(self, body):\n        res = self.api_post('UpdateReferer', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_auth_key(self, body):\n        res = self.api_post('UpdateAuthKey', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_http_header_config(self, body):\n        res = self.api_post('DeleteHTTPHeaderConfig', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def enable_http_header_config(self, body):\n        res = self.api_post('EnableHTTPHeaderConfig', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_http_header_config(self, body):\n        res = self.api_post('DescribeHTTPHeaderConfig', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_http_header_config(self, body):\n        res = self.api_post('UpdateHTTPHeaderConfig', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_encrypt_drm(self, body):\n        res = self.api_post('UpdateEncryptDRM', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_encrypt_hls(self, body):\n        res = self.api_post('UpdateEncryptHLS', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def get_hls_encrypt_data_key(self, query):\n        res = self.api_get('GetHLSEncryptDataKey', query)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_encrypt_hls(self, body):\n        res = self.api_post('DescribeEncryptHLS', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_license_drm(self, query, body):\n        res = self.api_post('DescribeLicenseDRM', query, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_cert_drm(self, query):\n        res = self.api_get('DescribeCertDRM', query)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_encrypt_drm(self, body):\n        res = self.api_post('DescribeEncryptDRM', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def bind_encrypt_drm(self, body):\n        res = self.api_post('BindEncryptDRM', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def un_bind_encrypt_drm(self, body):\n        res = self.api_post('UnBindEncryptDRM', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_bind_encrypt_drm(self, body):\n        res = self.api_post('ListBindEncryptDRM', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_ip_access_rule(self, body):\n        res = self.api_post('DeleteIPAccessRule', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_ip_access_rule(self, body):\n        res = self.api_post('UpdateIPAccessRule', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_ip_access_rule(self, body):\n        res = self.api_post('DescribeIPAccessRule', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_cloud_mix_task(self, body):\n        res = self.api_post('CreateCloudMixTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_cloud_mix_task(self, body):\n        res = self.api_post('UpdateCloudMixTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def get_cloud_mix_task_detail(self, body):\n        res = self.api_post('GetCloudMixTaskDetail', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_cloud_mix_task(self, body):\n        res = self.api_post('ListCloudMixTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_cloud_mix_task(self, body):\n        res = self.api_post('DeleteCloudMixTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_subtitle_transcode_preset(self, body):\n        res = self.api_post('DeleteSubtitleTranscodePreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_subtitle_transcode_preset(self, body):\n        res = self.api_post('UpdateSubtitleTranscodePreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_vhost_subtitle_transcode_preset(self, body):\n        res = self.api_post('ListVhostSubtitleTranscodePreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_subtitle_transcode_preset(self, body):\n        res = self.api_post('CreateSubtitleTranscodePreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_live_pad_preset(self, body):\n        res = self.api_post('CreateLivePadPreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_live_pad_preset(self, body):\n        res = self.api_post('DeleteLivePadPreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def stop_live_pad_stream(self, body):\n        res = self.api_post('StopLivePadStream', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_live_pad_preset(self, body):\n        res = self.api_post('UpdateLivePadPreset', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_pad_stream_list(self, body):\n        res = self.api_post('DescribeLivePadStreamList', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_live_pad_preset_detail(self, body):\n        res = self.api_post('DescribeLivePadPresetDetail', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_carousel_task(self, body):\n        res = self.api_post('CreateCarouselTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_carousel_task(self, body):\n        res = self.api_post('DeleteCarouselTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_carousel_task(self, body):\n        res = self.api_post('UpdateCarouselTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def get_carousel_detail(self, body):\n        res = self.api_post('GetCarouselDetail', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_carousel_task(self, body):\n        res = self.api_post('ListCarouselTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_high_light_task(self, body):\n        res = self.api_post('CreateHighLightTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_task_by_account_id(self, body):\n        res = self.api_post('DeleteTaskByAccountID', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def describe_high_light_task_by_account_id(self, body):\n        res = self.api_post('DescribeHighLightTaskByAccountID', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def list_high_light_task(self, body):\n        res = self.api_post('ListHighLightTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def create_speech_task(self, body):\n        res = self.api_post('CreateSpeechTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def delete_speech_task(self, body):\n        res = self.api_post('DeleteSpeechTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def search_speech_task(self, body):\n        res = self.api_post('SearchSpeechTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def update_speech_task(self, body):\n        res = self.api_post('UpdateSpeechTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def get_speech_task(self, body):\n        res = self.api_post('GetSpeechTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def get_speech_config(self):\n        res = self.api_get('GetSpeechConfig', {})\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n            \n    def restart_speech_task(self, body):\n        res = self.api_post('RestartSpeechTask', [], json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json"
  },
  {
    "path": "volcengine/livesaas/LivesaasService.py",
    "content": "# coding:utf-8\nimport json\nimport os\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.base.Service import Service\nfrom volcengine.const.Const import *\nfrom volcengine.Policy import *\nimport aiohttp\nfrom volcengine.auth.SignerV4 import SignerV4\n\nLIVESAAS_SERVICE_NAME = \"livesaas\"\nLIVESAAS_API_VERSION = \"2020-06-01\"\n\nservice_info_map = {\n    REGION_CN_NORTH1: ServiceInfo(\n        \"livesaas.volcengineapi.com\",\n        {'Accept': 'application/json'},\n        Credentials('', '', LIVESAAS_SERVICE_NAME, REGION_CN_NORTH1),\n        5, 5, \"https\"),\n}\n\napi_info = {\n    # 直播间管理类接口\n    \"CreateActivityAPI\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateActivityAPI\", \"Version\": LIVESAAS_API_VERSION}, {}, {}),\n    \"DeleteActivityAPI\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteActivityAPI\", \"Version\": LIVESAAS_API_VERSION}, {}, {}),\n    \"ListActivityAPI\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"ListActivityAPI\", \"Version\": LIVESAAS_API_VERSION}, {}, {}),\n    # 直播控制类接口\n    \"UpdateActivityStatusAPI\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateActivityStatusAPI\", \"Version\": LIVESAAS_API_VERSION}, {}, {}),\n    \"UpdatePullToPushAPI\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdatePullToPushAPI\", \"Version\": LIVESAAS_API_VERSION}, {}, {}),\n    \"GetActivityAPI\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"GetActivityAPI\", \"Version\": LIVESAAS_API_VERSION}, {}, {}),\n    \"GetStreamsAPI\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"GetStreamsAPI\", \"Version\": LIVESAAS_API_VERSION}, {}, {}),\n    \"UpdateActivityBasicConfigAPI\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateActivityBasicConfigAPI\", \"Version\": LIVESAAS_API_VERSION}, {}, {}),\n    \"GetActivityBasicConfigAPI\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"GetActivityBasicConfigAPI\", \"Version\": LIVESAAS_API_VERSION}, {}, {}),\n    \"UpdateLoopVideoAPI\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateLoopVideoAPI\", \"Version\": LIVESAAS_API_VERSION}, {}, {}),\n    \"UpdateLoopVideoStatusAPI\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateLoopVideoStatusAPI\", \"Version\": LIVESAAS_API_VERSION}, {}, {}),\n    # 回放管理类接口\n    \"UploadReplayAPI\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"UploadReplayAPI\", \"Version\": LIVESAAS_API_VERSION}, {}, {}),\n    \"UpdateMediaOnlineStatusAPI\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateMediaOnlineStatusAPI\", \"Version\": LIVESAAS_API_VERSION}, {}, {}),\n    \"ListMediasAPI\":\n        ApiInfo(\"GET\", \"/\", {\"Action\": \"ListMediasAPI\", \"Version\": LIVESAAS_API_VERSION}, {}, {}),\n    # 评论类接口\n    \"PresenterChatAPI\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"PresenterChatAPI\", \"Version\": LIVESAAS_API_VERSION}, {}, {}),\n    \"DeleteChatAPI\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteChatAPI\", \"Version\": LIVESAAS_API_VERSION}, {}, {}),\n    # 客户端SDK类接口\n    \"GetSDKTokenAPI\":\n        ApiInfo(\"POST\", \"/\", {\"Action\": \"GetSDKTokenAPI\", \"Version\": LIVESAAS_API_VERSION}, {}, {}),\n}\n\n\nclass LivesaasService(Service):\n    def __init__(self, region=REGION_CN_NORTH1):\n        self.service_info = LivesaasService.get_service_info(region)\n        self.api_info = LivesaasService.get_api_info()\n        super(LivesaasService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info(region):\n        service_info = service_info_map.get(region, None)\n        if not service_info:\n            raise Exception('LivesaasService not support region %s' % region)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        return api_info\n\n    async def async_json(self, api, params, body):\n        if not (api in self.api_info):\n            raise Exception(\"no such api\")\n        api_info = self.api_info[api]\n        r = self.prepare_request(api_info, params)\n        r.headers['Content-Type'] = 'application/json'\n        r.body = body\n        timeout = aiohttp.ClientTimeout(connect=self.service_info.connection_timeout, sock_connect=self.service_info.socket_timeout)\n\n        SignerV4.sign(r, self.service_info.credentials)\n\n        url = r.build()\n        async with aiohttp.request(\"POST\", url, headers=r.headers, data=r.body, timeout=timeout) as r:\n            resp = await r.text(encoding=\"utf-8\")\n            if r.status == 200:\n                return resp\n            else:\n                raise Exception(resp)\n\n    async def async_get(self, api, params):\n        if not (api in self.api_info):\n            raise Exception(\"no such api\")\n        api_info = self.api_info[api]\n        r = self.prepare_request(api_info, params)\n        timeout = aiohttp.ClientTimeout(connect=self.service_info.connection_timeout, sock_connect=self.service_info.socket_timeout)\n\n        SignerV4.sign(r, self.service_info.credentials)\n\n        url = r.build()\n        async with aiohttp.request(\"GET\", url, headers=r.headers, timeout=timeout) as r:\n            resp = await r.text(encoding=\"utf-8\")\n            if r.status == 200:\n                return resp\n            else:\n                raise Exception(resp)\n\n    # ========================= 直播间管理类接口 =========================\n    # CreateActivityAPI\n    def create_activity_api(self, body):\n        res = self.json('CreateActivityAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"CreateActivityAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    async def async_create_activity_api(self, body):\n        res = await self.async_json('CreateActivityAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"CreateActivityAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # DeleteActivityAPI\n    def delete_activity_api(self, body):\n        res = self.json('DeleteActivityAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"DeleteActivityAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    async def async_delete_activity_api(self, body):\n        res = await self.async_json('DeleteActivityAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"DeleteActivityAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # ListActivityAPI\n    def list_activity_api(self, params):\n        res = self.get('ListActivityAPI', params)\n        if res == '':\n            raise Exception(\"ListActivityAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    async def async_list_activity_api(self, params):\n        res = await self.async_get('ListActivityAPI', params)\n        if res == '':\n            raise Exception(\"ListActivityAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # ========================= 直播间控制类接口 =========================\n    # UpdateActivityStatusAPI\n    def update_activity_status_api(self, body):\n        res = self.json('UpdateActivityStatusAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"UpdateActivityStatusAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    async def async_update_activity_status_api(self, body):\n        res = await self.async_json('UpdateActivityStatusAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"UpdateActivityStatusAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # UpdatePullToPushAPI\n    def update_pull_to_push_api(self, body):\n        res = self.json('UpdatePullToPushAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"UpdatePullToPushAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    async def async_update_pull_to_push_api(self, body):\n        res = await self.async_json('UpdatePullToPushAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"UpdatePullToPushAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # GetActivityAPI\n    def get_activity_api(self, params):\n        res = self.get('GetActivityAPI', params)\n        if res == '':\n            raise Exception(\"GetActivityAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    async def async_get_activity_api(self, params):\n        res = await self.async_get('GetActivityAPI', params)\n        if res == '':\n            raise Exception(\"GetActivityAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # GetStreamsAPI\n    def get_streams_api(self, params):\n        res = self.get('GetStreamsAPI', params)\n        if res == '':\n            raise Exception(\"GetStreamsAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    async def async_get_streams_api(self, params):\n        res = await self.async_get('GetStreamsAPI', params)\n        if res == '':\n            raise Exception(\"GetStreamsAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # UpdateActivityBasicConfigAPI\n    def update_activity_basic_config_api(self, body):\n        res = self.json('UpdateActivityBasicConfigAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"UpdateActivityBasicConfigAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    async def async_update_activity_basic_config_api(self, body):\n        res = await self.async_json('UpdateActivityBasicConfigAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"UpdateActivityBasicConfigAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # GetActivityBasicConfigAPI\n    def get_activity_basic_config_api(self, params):\n        res = self.get('GetActivityBasicConfigAPI', params)\n        if res == '':\n            raise Exception(\"GetActivityBasicConfigAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    async def async_get_activity_basic_config_api(self, params):\n        res = await self.async_get('GetActivityBasicConfigAPI', params)\n        if res == '':\n            raise Exception(\"GetActivityBasicConfigAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # UpdateLoopVideoAPI\n    def update_loop_video_api(self, body):\n        res = self.json('UpdateLoopVideoAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"UpdateLoopVideoAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    async def async_update_loop_video_api(self, body):\n        res = await self.async_json('UpdateLoopVideoAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"UpdateLoopVideoAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # UpdateLoopVideoStatusAPI\n    def update_loop_video_status_api(self, body):\n        res = self.json('UpdateLoopVideoStatusAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"UpdateLoopVideoStatusAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    async def async_update_loop_video_status_api(self, body):\n        res = await self.async_json('UpdateLoopVideoStatusAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"UpdateLoopVideoStatusAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # ========================= 回放管理类接口 =========================\n    # UploadReplayAPI\n    def upload_replay_api(self, body):\n        res = self.json('UploadReplayAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"UploadReplayAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    async def async_upload_replay_api(self, body):\n        res = await self.async_json('UploadReplayAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"UploadReplayAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # UpdateMediaOnlineStatusAPI\n    def update_media_online_status_api(self, body):\n        res = self.json('UpdateMediaOnlineStatusAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"UpdateMediaOnlineStatusAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    async def async_update_media_online_status_api(self, body):\n        res = await self.async_json('UpdateMediaOnlineStatusAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"UpdateMediaOnlineStatusAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # ListMediasAPI\n    def list_medias_api(self, params):\n        res = self.get('ListMediasAPI', params)\n        if res == '':\n            raise Exception(\"ListMediasAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    async def async_list_medias_api(self, params):\n        res = await self.async_get('ListMediasAPI', params)\n        if res == '':\n            raise Exception(\"ListMediasAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # ========================= 评论类接口 =========================\n    # PresenterChatAPI\n    def presenter_chat_api(self, body):\n        res = self.json('PresenterChatAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"PresenterChatAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    async def async_presenter_chat_api(self, body):\n        res = await self.async_json('PresenterChatAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"PresenterChatAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # DeleteChatAPI\n    def delete_chat_api(self, body):\n        res = self.json('DeleteChatAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"DeleteChatAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    async def async_delete_chat_api(self, body):\n        res = await self.async_json('DeleteChatAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"DeleteChatAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    # ========================= 客户端SDK类接口 =========================\n    # GetSDKTokenAPI\n    def get_sdk_token_api(self, body):\n        res = self.json('GetSDKTokenAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"GetSDKTokenAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    async def async_get_sdk_token_api(self, body):\n        res = await self.async_json('GetSDKTokenAPI', dict(), json.dumps(body))\n        if res == '':\n            raise Exception(\"GetSDKTokenAPI: empty response\")\n        res_json = json.loads(res)\n        return res_json"
  },
  {
    "path": "volcengine/livesaas/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/maas/MaasService.py",
    "content": "# coding:utf-8\nimport sys\nimport json\nimport copy\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.auth.SignerV4 import SignerV4\n\nfrom .sse_decoder import SSEDecoder\nfrom .exception import MaasException, new_client_sdk_request_error\nfrom .utils import json_to_object\n\n\nclass MaasService(Service):\n    def __init__(self, host, region, connection_timeout=60, socket_timeout=60):\n        service_info = MaasService.get_service_info(host, region, connection_timeout, socket_timeout)\n        api_info = MaasService.get_api_info()\n        super(MaasService, self).__init__(service_info, api_info)\n\n    @staticmethod\n    def get_service_info(host, region, connection_timeout, socket_timeout):\n        service_info = ServiceInfo(host, {'Accept': 'application/json'},\n                                   Credentials('', '', 'ml_maas', region), connection_timeout, socket_timeout, 'https')\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\n            \"chat\": ApiInfo(\"POST\", \"/api/v1/chat\", {}, {}, {}),\n            \"cert\": ApiInfo(\"POST\", \"/api/v1/cert\", {}, {}, {}),\n            \"tokenization\": ApiInfo(\"POST\", \"/api/v1/tokenization\", {}, {}, {}),\n            \"classification\": ApiInfo(\"POST\", \"/api/v1/classification\", {}, {}, {}),\n            \"embeddings\": ApiInfo(\"POST\", \"/api/v1/embeddings\", {}, {}, {}),\n        }\n        return api_info\n\n    def chat(self, req, is_secret=False):\n        self._validate(is_secret, req)\n        try:\n            req['stream'] = False\n            if is_secret:\n                key, nonce, req = self.encrypt_chat_request(req)\n            res = self.json(\"chat\", {}, json.dumps(req).encode(\"utf-8\"))\n            if res == '':\n                raise new_client_sdk_request_error(\"empty response\", req.get('req_id', None))\n            resp = json_to_object(res)\n            if is_secret:\n                self.decrypt_chat_response(key, nonce, resp)\n        except Exception as e:\n            try:\n                resp = json_to_object(str(e.args[0], encoding='utf-8'))\n            except Exception:\n                raise new_client_sdk_request_error(str(e), req.get('req_id', None))\n            else:\n                raise MaasException(resp.error.code_n, resp.error.code, resp.error.message, resp.req_id)\n        else:\n            return resp\n\n    def _validate(self, is_secret, req):\n        if self.service_info.credentials is None or \\\n            self.service_info.credentials.sk is None or \\\n            self.service_info.credentials.ak is None:\n            raise new_client_sdk_request_error(\"no valid credential\", req.get('req_id', None))\n\n        if is_secret and (sys.version_info < (3, 6)):\n            raise new_client_sdk_request_error(\"For content encryption, python version must be 3.6 or above\", req.get('req_id', None))\n\n    def stream_chat(self, req, is_secret=False):\n        self._validate(is_secret, req)\n\n        try:\n            req['stream'] = True\n            if is_secret:\n                key, nonce, req = self.encrypt_chat_request(req)\n\n            if not (\"chat\" in self.api_info):\n                raise new_client_sdk_request_error(\"no such api\", req.get('req_id', None))\n            api_info = self.api_info[\"chat\"]\n            r = self.prepare_request(api_info, {})\n            r.headers['Content-Type'] = 'application/json'\n            r.body = json.dumps(req).encode(\"utf-8\")\n\n            SignerV4.sign(r, self.service_info.credentials)\n\n            url = r.build()\n            res = self.session.post(url, headers=r.headers, data=r.body,\n                                    timeout=(self.service_info.connection_timeout, self.service_info.socket_timeout),\n                                    stream=True)\n            if res.status_code != 200:\n                raw = res.text.encode()\n                res.close()\n                try:\n                    resp = json_to_object(str(raw, encoding='utf-8'))\n                except Exception:\n                    raise new_client_sdk_request_error(raw, req.get('req_id', None))\n                else:\n                    raise MaasException(resp.error.code_n, resp.error.code, resp.error.message, resp.req_id)\n\n            decoder = SSEDecoder(res)\n\n            def iter():\n                for data in decoder.next():\n                    if data == b'[DONE]':\n                        return\n\n                    try:\n                        res = json_to_object(str(data, encoding='utf-8'))\n                        if is_secret:\n                            self.decrypt_chat_response(key, nonce, res)\n                    except:\n                        raise\n                    else:\n                        if res.error is not None and res.error.code_n != 0:\n                            raise MaasException(res.error.code_n, res.error.code, res.error.message, res.req_id)\n                        yield res\n\n            return iter()\n        except MaasException:\n            raise\n        except Exception as e:\n            raise new_client_sdk_request_error(str(e), req.get('req_id', None))\n\n    def tokenize(self, req):\n        try:\n            res = self.json(\"tokenization\", {}, json.dumps(req).encode(\"utf-8\"))\n            if res == '':\n                raise new_client_sdk_request_error(\"empty response\", req.get('req_id', None))\n            resp = json_to_object(res)\n        except Exception as e:\n            try:\n                resp = json_to_object(str(e.args[0], encoding='utf-8'))\n            except Exception:\n                raise new_client_sdk_request_error(str(e), req.get('req_id', None))\n            else:\n                raise MaasException(resp.error.code_n, resp.error.code, resp.error.message, resp.req_id)\n        else:\n            return resp\n\n    def classification(self, req):\n        try:\n            res = self.json(\"classification\", {}, json.dumps(req).encode(\"utf-8\"))\n            if res == '':\n                raise new_client_sdk_request_error(\"empty response\", req.get('req_id', None))\n            resp = json_to_object(res)\n        except Exception as e:\n            try:\n                resp = json_to_object(str(e.args[0], encoding='utf-8'))\n            except Exception:\n                raise new_client_sdk_request_error(str(e), req.get('req_id', None))\n            else:\n                raise MaasException(resp.error.code_n, resp.error.code, resp.error.message, resp.req_id)\n        else:\n            return resp\n\n    def embeddings(self, req):\n        try:\n            res = self.json(\"embeddings\", {}, json.dumps(req).encode(\"utf-8\"))\n            if res == '':\n                raise new_client_sdk_request_error(\"empty response\", req.get('req_id', None))\n            resp = json_to_object(res)\n        except Exception as e:\n            try:\n                resp = json_to_object(str(e.args[0], encoding='utf-8'))\n            except Exception:\n                raise new_client_sdk_request_error(str(e), req.get('req_id', None))\n            else:\n                raise MaasException(resp.error.code_n, resp.error.code, resp.error.message, resp.req_id)\n        else:\n            return resp\n\n    def init_cert_by_req(self, req):\n        cert_req = {\"model\": req['model']}\n        try:\n            resp = self.json(\"cert\", {}, json.dumps(cert_req).encode(\"utf-8\"))\n            resp = json_to_object(resp)\n            req['model']['endpoint_id'] = resp.model.endpoint_id\n            if resp.cert is None or len(resp.cert) == 0:\n                raise new_client_sdk_request_error(\"No cert found, cannot use secret mode\", req.get('req_id', None))\n            from .ka_mgr import key_agreement_client\n            return key_agreement_client(resp.cert)\n        except ImportError:\n            raise new_client_sdk_request_error(\n                \"Please install the cryptography package manually by using pip install cryptography~=38.0\", req.get('req_id', None))\n        except Exception as e:\n            raise new_client_sdk_request_error(str(e), req.get('req_id', None))\n\n    def encrypt_chat_request(self, req):\n        req_c = copy.deepcopy(req)\n        cert = self.init_cert_by_req(req_c)\n        from .ka_mgr import aes_gcm_encrypt_base64_string\n        key, nonce, token = cert.generate_ecies_key_pair()\n        req_c['crypto_token'] = token\n        for i in req_c['messages']:\n            if i['content'] != '':\n                i['content'] = aes_gcm_encrypt_base64_string(key, nonce, i['content'])\n\n        return key, nonce, req_c\n\n    def decrypt_chat_response(self, key, nonce, resp):\n        from .ka_mgr import aes_gcm_decrypt_base64_string\n        m = resp.choice.message.content\n        if m != '':\n            resp.choice.message.content = aes_gcm_decrypt_base64_string(key, nonce, m)\n        return\n"
  },
  {
    "path": "volcengine/maas/__init__.py",
    "content": "from .MaasService import MaasService\nfrom .exception import MaasException\nfrom .utils import ChatRole\n\n__all__ = ['MaasService', 'MaasException', 'ChatRole']\n"
  },
  {
    "path": "volcengine/maas/_response.py",
    "content": "from typing import Iterator, Optional\n\nfrom volcengine.maas.exception import new_client_sdk_request_error, MaasException\nfrom volcengine.maas.utils import json_to_object\n\n\nclass BinaryResponseContent:\n    def __init__(self, response, request_id) -> None:\n        self.response = response\n        self.request_id = request_id\n\n    def stream_to_file(\n            self,\n            file: str\n    ) -> None:\n        is_first = True\n        error_bytes = b''\n        with open(file, mode=\"wb\") as f:\n            for data in self.response:\n                if len(error_bytes) > 0 or (is_first and \"\\\"error\\\":\" in str(data)):\n                    error_bytes += data\n                else:\n                    f.write(data)\n\n        if len(error_bytes) > 0:\n            resp = json_to_object(str(error_bytes, encoding=\"utf-8\"), req_id=self.request_id)\n            raise MaasException(\n                resp.error.code_n, resp.error.code, resp.error.message, self.request_id\n            )\n\n    def iter_bytes(self) -> Iterator[bytes]:\n        for data in self.response:\n            yield data\n"
  },
  {
    "path": "volcengine/maas/exception.py",
    "content": "# coding=utf-8\nclass MaasException(Exception):\n    def __init__(self, code_n, code, message, req_id):\n        self.code_n = code_n\n        self.code = code\n        self.message = message\n        self.req_id = req_id\n\n    def __str__(self):\n        return (\"Detailed exception information is listed below.\\n\" + \\\n                            \"req_id: {}\\n\" + \\\n                            \"code_n: {}\\n\" + \\\n                            \"code: {}\\n\" + \\\n                            \"message: {}\").format(self.req_id, self.code_n, self.code, self.message)\n\n\ndef new_client_sdk_request_error(raw, req_id=\"\"):\n    return MaasException(1709701, \"ClientSDKRequestError\", \"MaaS SDK request error: {}\".format(raw), req_id)\n"
  },
  {
    "path": "volcengine/maas/ka_mgr.py",
    "content": "import os\nimport base64\nfrom cryptography import x509\nfrom cryptography.hazmat.primitives import hashes\nfrom cryptography.hazmat.primitives.asymmetric import ec\nfrom cryptography.hazmat.primitives.kdf.hkdf import HKDF\nfrom cryptography.hazmat.primitives.ciphers import (\n    Cipher, algorithms, modes\n)\n\n\ndef aes_gcm_encrypt_bytes(key, iv, plain_bytes, associated_data=b\"\"):\n    # aes_gcm_encrypt_bytes encrypt message using AES-GCM\n    encryptor = Cipher(\n        algorithms.AES(key),\n        modes.GCM(iv),\n    ).encryptor()\n    # associated_data will be authenticated but not encrypted,\n    # it must also be passed in on decryption.\n    encryptor.authenticate_additional_data(associated_data)\n    # Encrypt the plaintext and get the associated ciphertext.\n    # GCM does not require padding.\n    ciphertext = encryptor.update(plain_bytes) + encryptor.finalize()\n    return ciphertext + encryptor.tag\n\n\ndef aes_gcm_encrypt_base64_string(key, nonce, plaintext):\n    \"\"\"aes_gcm_encrypt_base64_string Encrypt message from base64 string to string using AES-GCM\n    \"\"\"\n    plain_bytes = plaintext.encode()\n    # Encrypt message to string using AES-GCM\n    c = aes_gcm_encrypt_bytes(key, nonce, plain_bytes)\n    return base64.b64encode(c).decode()\n\n\ndef aes_gcm_decrypt_bytes(key, iv, cipher_bytes, associated_data=b\"\"):\n    \"\"\"aes_gcm_decrypt_bytes Decrypt message from bytes to bytes using AES-GCM\n    \"\"\"\n    tag_length = 16  # default aes gcm tag length\n    cipher = cipher_bytes[:-tag_length]\n    tag = cipher_bytes[-tag_length:]\n    # Construct a Cipher object, with the key, iv, and additionally the\n    # GCM tag used for authenticating the message.\n    decryptor = Cipher(\n        algorithms.AES(key),\n        modes.GCM(iv, tag),\n    ).decryptor()\n    # We put associated_data back in or the tag will fail to verify\n    # when we finalize the decryptor.\n    decryptor.authenticate_additional_data(associated_data)\n    # Decryption gets us the authenticated plaintext.\n    # If the tag does not match an InvalidTag exception will be raised.\n    return decryptor.update(cipher) + decryptor.finalize()\n\n\ndef aes_gcm_decrypt_base64_string(key, nonce, ciphertext):\n    # Decrypt message(base64.std.string) using AES-GCM\n    cipher_bytes = base64.decodebytes(ciphertext.encode())\n    return aes_gcm_decrypt_bytes(key, nonce, cipher_bytes).decode()\n\n\ndef marshal_cryptography_pub_key(key):\n    # python version of crypto/elliptic/elliptic.go Marshal\n    # without point on curve check\n    return bytes([4]) + key.x.to_bytes(32, 'big') + key.y.to_bytes(32, 'big')\n\n\nclass key_agreement_client():\n    def __init__(self, pem_path_or_string):\n        \"\"\" Load cert and extract public key\n        \"\"\"\n        if os.path.exists(pem_path_or_string):\n            with open(pem_path_or_string, 'rb') as f:\n                pem_data = f.read()\n        else:\n            pem_data = pem_path_or_string.encode()\n        self._cert = x509.load_pem_x509_certificate(pem_data)\n        cert_pub = self._cert.public_key().public_numbers()\n        self._curve = ec._CURVE_TYPES[self._cert.public_key().curve.name]()\n        self._public_key = ec.EllipticCurvePublicNumbers(\n            cert_pub.x, cert_pub.y, self._curve).public_key()\n\n    def generate_ecies_key_pair(self):\n        \"\"\"generate_ecies_key_pair generate ECIES key pair\n        \"\"\"\n        # Generate an ephemeral elliptic curve scalar and point\n        peer_private_key = ec.generate_private_key(self._curve)\n        dh = peer_private_key.exchange(ec.ECDH(), self._public_key)\n        R = peer_private_key.public_key().public_numbers()\n\n        # Derive symmetric key and nonce via HKDF\n        length = 32 + 12\n        buf = HKDF(\n            algorithm=hashes.SHA256(),\n            length=length,\n            salt=None,\n            info=None,\n        ).derive(dh)\n        key = buf[:32]\n        nonce = buf[32:length]\n\n        token = marshal_cryptography_pub_key(R)\n        return key, nonce, base64.b64encode(token).decode()\n"
  },
  {
    "path": "volcengine/maas/sse_decoder.py",
    "content": "class SSEDecoder(object):\n    def __init__(self, source):\n        self.source = source\n\n    def _read(self):\n        data = b''\n        for chunk in self.source:\n            for line in chunk.splitlines(True):\n                data += line\n                if data.endswith((b'\\r\\r', b'\\n\\n', b'\\r\\n\\r\\n')):\n                    yield data\n                    data = b''\n        if data:\n            yield data\n\n    def next(self):\n        for chunk in self._read():\n            for line in chunk.splitlines():\n                # skip comment\n                if line.startswith(b':'):\n                    continue\n\n                if b':' in line:\n                    field, value = line.split(b':', 1)\n                else:\n                    field, value = line, b''\n\n                if field == b'data' and len(value) > 0:\n                    yield value\n"
  },
  {
    "path": "volcengine/maas/text_privatization/README.md",
    "content": "\n欢迎使用火山方舟的文本隐私化功能。\n\n在使用大模型精调服务时，直接上传私域训练数据存在一定的隐私泄露风险。\n针对这一问题，本功能主要采用本地差分隐私技术，在用户本地对用于大模型精调的训练数据进行扰动，加强了对用户数据隐私的保护。\n目前本功能仅支持文本分类任务，采用基于词元贡献度衡量的动态隐私预算分配机制，实现了更好的效用隐私权衡。\n\n相关研究论文：[基于分割学习的“分割-隐私化”大语言模型精调框架](https://mp.weixin.qq.com/s/IuIY-QBOpl7_FDZCriVSjw)\n\n以下为您介绍如何使用文本隐私化功能。\n\n## 获取与安装\n建议使用不低于3.7的Python版本。\n1. 使用pip安装SDK for Python：\n```\n    pip install --user volcengine\n```\n如果已经安装volcengine包，则用下面命令升级即可：\n```\n    pip install --upgrade volcengine\n```\n\n2. 使用pip安装依赖包：\n```\n    pip install numpy typing_extensions sentencepiece torch~=1.13 transformers~=4.30\n```\n\n## 使用方式\n\n1. 准备文本隐私化过程中需要用到的分词器tokenizer以及嵌入模型embedding model。\n可以选择使用`get_bottom_model`方法从hugging face获取某个开源预训练模型的tokenizer以及embedding模块。\n```python\nfrom volcengine.maas.text_privatization import get_bottom_model\n\nyour_tokenizer, your_embedding_model = get_bottom_model(model_id=\"MODEL_ID\")\n```\n2. 使用`make_privatizer`方法初始化文本隐私化器，其中`priv_level`参数表示隐私保护水平，分为\"1\",\"2\",\"3\"三档。\n3. 使用`load_tokenizer_embedding`方法指定所用的tokenizer以及embedding model。\n4. 给定训练数据路径，使用`fit`方法执行文本隐私化。数据格式要求符合[火山方舟大模型精调数据集格式](https://www.volcengine.com/docs/82379/1099461)。\n3. 使用`save`方法保存隐私化结果，格式不变。\n\n```python\nfrom volcengine.maas.text_privatization import ClsPrivConf\nfrom volcengine.maas.text_privatization import make_privatizer\n\ntext_privatizer = make_privatizer(task_type=\"classification\", priv_conf=ClsPrivConf(priv_level=\"3\"))\ntext_privatizer.load_tokenizer_embedding(tokenizer=your_tokenizer, embedding_model=your_embedding_model)\ntext_privatizer.fit(train_path=\"PATH/TO/DATA.jsonl\")\ntext_privatizer.save(out_dir=\"PATH/TO/SAVE\")\n```\n\n\n\n\n"
  },
  {
    "path": "volcengine/maas/text_privatization/__init__.py",
    "content": "from .priv_conf import *\nfrom .privatizer import make_privatizer\nfrom .utils import get_bottom_model\n"
  },
  {
    "path": "volcengine/maas/text_privatization/budget_allocator/__init__.py",
    "content": "from .allocator import *\nfrom .cti_allocator import *\n\n"
  },
  {
    "path": "volcengine/maas/text_privatization/budget_allocator/allocator.py",
    "content": "from abc import ABC, abstractmethod\nfrom typing import List\ntry:\n    import torch\n    from transformers.tokenization_utils import PreTrainedTokenizer\nexcept ImportError:\n    raise ImportError(\"Please make sure to install torch and transformers: \\n pip install torch~=1.13\"\n                      \"\\n pip install transformers~=4.30\")\n\nfrom ..priv_conf import *\n\n\nclass BudgetAllocator(ABC):\n    def __init__(self,\n                 priv_conf: \"PrivConf\") -> None:\n        \"\"\"\n        Init\n        :param priv_conf: privacy config\n        :return None\n        \"\"\"\n        super().__init__()\n        self.priv_conf = priv_conf\n\n        self.device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n\n    @abstractmethod\n    def pre_fit(self,\n                tokenizer: \"PreTrainedTokenizer\",\n                text: List[str],\n                label: List[str]\n                ) -> None:\n        \"\"\"\n        Dynamically allocate privacy budget\n        :param tokenizer: tokenizer\n        :param text: input text of user\n        :param label: text label corresponding to the input text\n        :return None\n        \"\"\"\n        pass\n"
  },
  {
    "path": "volcengine/maas/text_privatization/budget_allocator/cti_allocator.py",
    "content": "from typing import Tuple, List\ntry:\n    import numpy as np\n    from transformers.tokenization_utils import PreTrainedTokenizer\nexcept ImportError:\n    raise ImportError(\"Please make sure to install numpy and transformers: \\n pip install numpy \"\n                      \"\\n pip install transformers~=4.30\")\n\nfrom .allocator import BudgetAllocator\n\n\nclass CTIBudgetAllocator(BudgetAllocator):\n    def __init__(self, *args, **kwargs) -> None:\n        super().__init__(*args, **kwargs)\n        self.budget_dict = {\"1\": 500, \"2\": 400, \"3\": 300}\n\n    def pre_fit(self,\n                tokenizer: \"PreTrainedTokenizer\",\n                text: List[str],\n                label: List[str]\n                ) -> Tuple[np.ndarray, List[int]]:\n        \"\"\"\n        Dynamically allocate privacy budget based on the contributing token identification (CTI) method\n        :param tokenizer: tokenizer\n        :param text: input text of user\n        :param label: text label corresponding to the input text\n        :return (adaptive_budget, label): adaptive privacy budget corresponding to each token and numeric label\n        \"\"\"\n        # Tokenize and convert text labels to numeric types\n        input_id = tokenizer(text)[\"input_ids\"]\n        label_set = set(label)\n        label_dict = {element: index for index, element in enumerate(label_set)}\n        label = [label_dict[label] for label in label]\n\n        # Count the frequency of each token in each category\n        class_num = len(label_set)\n        count = np.zeros((class_num, tokenizer.vocab_size))\n        for i in range(len(input_id)):\n            for j in range(len(input_id[i])):\n                count[label[i]][input_id[i][j]] += 1\n        sums = np.sum(count, axis=1)\n        freq = np.zeros(count.shape)\n        for i in range(len(count)):\n            freq[i, :] = count[i, :] / sums[i]\n\n        # Compute the utility importance\n        ksi = 1 / max(sums)\n        utility_importance = np.zeros(count.shape)\n        for i in range(class_num):\n            for j in range(tokenizer.vocab_size):\n                if count[i][j] > 0:\n                    utility_importance[i][j] = sum(\n                        [np.log((freq[i][j] / (freq[k][j] + 3 * ksi))) for k in range(class_num) if k != i])\n\n        # Determine privacy budget based on the privacy protection level\n        if self.priv_conf.base_budget:\n            if self.priv_conf.base_budget > 0:\n                base_budget = self.priv_conf.base_budget\n            else:\n                raise ValueError(\"The base budget is required to be a positive number.\")\n        else:\n            base_budget = self.budget_dict[self.priv_conf.priv_level]\n        adaptive_budget = np.maximum(utility_importance, 0.6) * base_budget\n\n        return adaptive_budget, label\n"
  },
  {
    "path": "volcengine/maas/text_privatization/priv_conf/__init__.py",
    "content": "from .priv import *\nfrom .cls_priv import *\nfrom .gen_priv import *\n\n"
  },
  {
    "path": "volcengine/maas/text_privatization/priv_conf/cls_priv.py",
    "content": "from dataclasses import dataclass, field\nfrom typing import Optional\ntry:\n    from typing import Literal\nexcept ImportError:\n    from typing_extensions import Literal\n\nfrom .priv import PrivConf\n\n\n@dataclass\nclass ClsPrivConf(PrivConf):\n    \"\"\"\n    Args:\n        priv_level (`Literal[\"1\", \"2\", \"3\"]`): privacy protection level, where \"3\" represents the strongest.\n        base_budget (`int`, *optional*): If base_budget is 'None', the base budget is determined based on\n            the privacy protection level. Otherwise, the base budget is determined by base_budget.\n    \"\"\"\n    priv_level: Literal[\"1\", \"2\", \"3\"] = field(default=\"1\")\n    base_budget: Optional[int] = None\n"
  },
  {
    "path": "volcengine/maas/text_privatization/priv_conf/gen_priv.py",
    "content": "from dataclasses import dataclass, field\n\nfrom .priv import PrivConf\n\n\n@dataclass\nclass GenPrivConf(PrivConf):\n    pass"
  },
  {
    "path": "volcengine/maas/text_privatization/priv_conf/priv.py",
    "content": "import sys\nif sys.version_info < (3, 7):\n    raise Exception(\"为正常使用火山文本隐私化服务，请将您的 Python 版本升级到 3.7 或更高版本！\")\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass PrivConf:\n    pass\n"
  },
  {
    "path": "volcengine/maas/text_privatization/privatizer/__init__.py",
    "content": "from .make import make as make_privatizer\n"
  },
  {
    "path": "volcengine/maas/text_privatization/privatizer/cls_privatizer.py",
    "content": "from typing import Optional, List\nimport os\nimport math\nimport random\ntry:\n    import numpy as np\n    import torch\n    from transformers import AutoTokenizer\n    from transformers.tokenization_utils import PreTrainedTokenizer\nexcept ImportError:\n    raise ImportError(\"Please make sure to install numpy, torch, and transformers: \\n pip install numpy \"\n                      \"\\n pip install torch~=1.13 \\n pip install transformers~=4.30\")\n\nfrom .privatizer import TextPrivatizer\nfrom ..budget_allocator import CTIBudgetAllocator\n\n\nclass TextClsPrivatizer(TextPrivatizer):\n    def __init__(self, *args, **kwargs) -> None:\n        super().__init__(*args, **kwargs)\n\n        self.tokenizer = None\n        self.embedding_model = None\n        self.budget_allocator = CTIBudgetAllocator(self.priv_conf)\n\n    def load_tokenizer_embedding(self,\n                                 tokenizer: \"PreTrainedTokenizer\",\n                                 embedding_model: \"torch.nn.Embedding\") -> None:\n        \"\"\"\n        Load the tokenizer and embedding model\n        :param tokenizer: tokenizer\n        :param embedding_model: embedding model\n        :return None\n        \"\"\"\n        self.tokenizer = tokenizer\n        self.embedding_model = embedding_model.to(self.device)\n\n    def privatize(self,\n                  text: List[str],\n                  label: List[int],\n                  adaptive_budget: np.ndarray) -> List[str]:\n        \"\"\"\n        Privatize the text in batches\n        :param text: original text to be privatized\n        :param label: label corresponding to the original text\n        :param adaptive_budget: adaptive budget\n        :return privated_text: text after privatization\n        \"\"\"\n        # Privatize in batches\n        batch_size = 32\n        batch_num = math.ceil(len(text) / batch_size)\n        privated_ids = []\n        for i in range(batch_num):\n            sub_text = text[i * batch_size: (i + 1) * batch_size]\n            sub_label = label[i * batch_size: (i + 1) * batch_size]\n            model_input = self.tokenizer(sub_text, padding=\"longest\", return_tensors=\"pt\")\n            input_ids, mask = model_input[\"input_ids\"].to(self.device), model_input[\"attention_mask\"].to(self.device)\n            # add noise to embedding vector\n            input_embeds = self.embedding_model(input_ids)\n            shape = input_embeds.shape\n            input_embeds = input_embeds.view(-1, shape[2])\n            ones_count_per_row = mask.sum(dim=1)\n            mask = mask.view(-1, 1)\n            repeated_labels = np.repeat(sub_label, shape[1])\n            mvn = torch.distributions.MultivariateNormal(torch.zeros(shape[2]).to(self.device),\n                                                         covariance_matrix=torch.eye(shape[2]).to(self.device))\n            vec = mvn.sample((len(input_embeds),))\n            vec = torch.nn.functional.normalize(vec, p=2, dim=1)\n            l = [\n                random.gammavariate(alpha=shape[2], beta=1 / adaptive_budget[repeated_labels[j]][input_ids.view(-1)[j]])\n                for j in range(len(input_embeds))]\n            input_embeds = input_embeds + vec * (torch.tensor(l).view(-1, 1).to(self.device) * mask).to(torch.float32)\n            # find nearest embedding vector\n            nearest_indices = torch.argmin(torch.cdist(input_embeds, self.embedding_model.weight.data.to(torch.float32),\n                                                       p=2), dim=1).view(shape[0], shape[1])\n            result = [row[shape[1] - j + 2:].tolist() for row, j in zip(nearest_indices, ones_count_per_row)]\n            privated_ids = privated_ids + result\n\n        privated_text = self.tokenizer.batch_decode(privated_ids)\n\n        return privated_text\n\n    def fit(self,\n            train_path: str,\n            test_path: Optional[str] = None) -> None:\n        \"\"\"\n        Perform text privatization\n        :param train_path: input path of training data\n        :param test_path: input path of test data\n        :return None\n        \"\"\"\n        self.load_data(train_path, test_path)\n\n        # Perform data preprocess and determine privacy budget\n        train_text, train_label, test_text = self.data_preprocess()\n        adaptive_budget, train_label = self.budget_allocator.pre_fit(self.tokenizer, train_text, train_label)\n\n        # Privatize and postprocess\n        privated_train_text = self.privatize(train_text, train_label, adaptive_budget)\n        self.data_postprocess(privated_train_text)\n        if self.test_data:\n            privated_test_text = self.privatize(test_text, [0] * len(test_text), np.max(adaptive_budget, axis=0))\n            self.data_postprocess(privated_test_text)\n\n        del self.tokenizer\n        del self.embedding_model\n"
  },
  {
    "path": "volcengine/maas/text_privatization/privatizer/make.py",
    "content": "from ..priv_conf import *\nfrom .privatizer import TextPrivatizer\nfrom .cls_privatizer import TextClsPrivatizer\n\n\ndef make(task_type: Literal[\"classification\", \"generation\"],\n         priv_conf: \"PrivConf\") -> \"TextPrivatizer\":\n    \"\"\"\n    Make an instance\n    :param task_type: task type, classification or generation\n    :param priv_conf: privacy config\n    :return TextPrivatizer\n    \"\"\"\n    if isinstance(priv_conf, ClsPrivConf):\n        return TextClsPrivatizer(\n            task_type,\n            priv_conf\n        )\n\n    else:\n        raise TypeError(\"unsupported priv_conf type: {}\".format(type(priv_conf)))\n"
  },
  {
    "path": "volcengine/maas/text_privatization/privatizer/privatizer.py",
    "content": "from abc import ABC, abstractmethod\nfrom typing import Tuple, List\nimport json\ntry:\n    import torch\nexcept ImportError:\n    raise ImportError(\"Please make sure to install torch: \\n pip install torch~=1.13\")\n\nfrom ..priv_conf import *\n\n\nclass TextPrivatizer(ABC):\n    def __init__(self,\n                 task_type: Literal[\"classification\", \"generation\"],\n                 priv_conf: \"PrivConf\") -> None:\n        \"\"\"\n        Init\n        :param task_type: task type, classification or generation\n        :param priv_conf: privacy config\n        :return None\n        \"\"\"\n        super().__init__()\n        self.task_type = task_type\n        self.priv_conf = priv_conf\n\n        self.train_data = None\n        self.test_data = None\n        self.device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n\n    @abstractmethod\n    def fit(self,\n            train_path: str,\n            test_path: Optional[str] = None) -> None:\n        \"\"\"\n        Perform text privatization\n        :param train_path: input path of training data\n        :param test_path: input path of test data\n        :return None\n        \"\"\"\n        pass\n\n    def load_data(self,\n                  train_path: str,\n                  test_path: Optional[str] = None) -> None:\n        \"\"\"\n        Load training data and test data in jsonl format\n        :param train_path: input path of training data\n        :param test_path: input path of test data\n        :return None\n        \"\"\"\n        self.train_data = []\n        with open(train_path, \"r\") as jsonl_file:\n            for line in jsonl_file:\n                data = json.loads(line.strip())\n                self.train_data.append(data)\n\n        if test_path:\n            self.test_data = []\n            with open(test_path, \"r\") as jsonl_file:\n                for line in jsonl_file:\n                    data = json.loads(line.strip())\n                    self.test_data.append(data)\n\n    def data_preprocess(self) -> Tuple[List[str], List[str], List[str]]:\n        \"\"\"\n        Perform data preprocess\n        :return (train_text, train_label, test_text): content of the user (text) and the assistant (label)\n        in training data and test data\n        \"\"\"\n        train_text, train_label, test_text = [], [], []\n        for dic in self.train_data:\n            for sub_dic in dic[\"messages\"]:\n                if sub_dic[\"role\"] == \"user\":\n                    train_text.append(sub_dic[\"content\"])\n                elif sub_dic[\"role\"] == \"assistant\":\n                    train_label.append(sub_dic[\"content\"])\n            if len(train_text) != len(train_label):\n                raise ValueError(\"There is a problem with the format of the training data set.\")\n\n        if self.test_data:\n            for dic in self.test_data:\n                for sub_dic in dic[\"messages\"]:\n                    if sub_dic[\"role\"] == \"user\":\n                        test_text.append(sub_dic[\"content\"])\n\n        return train_text, train_label, test_text\n\n    def data_postprocess(self, privated_text: List[str]) -> None:\n        \"\"\"\n        Perform data postprocess\n        :param privated_text: text after privatization\n        :return None\n        \"\"\"\n        index = 0\n        for i in range(len(self.train_data)):\n            for sub_dic in self.train_data[i][\"messages\"]:\n                if sub_dic[\"role\"] == \"user\":\n                    sub_dic[\"content\"] = privated_text[index]\n                    index += 1\n\n    def save(self,\n             out_dir: Optional[str] = None) -> None:\n        \"\"\"\n        Save the privatized data\n        :param out_dir: output directory\n        :return None\n        \"\"\"\n        out_dir = \"\" if out_dir is None else out_dir\n        with open(out_dir + \"privatized_train_data.jsonl\", \"w\") as jsonl_file:\n            for data in self.train_data:\n                json_line = json.dumps(data, ensure_ascii=False)\n                jsonl_file.write(json_line + \"\\n\")\n\n        if self.test_data:\n            with open(out_dir + \"privatized_test_data.jsonl\", \"w\") as jsonl_file:\n                for data in self.train_data:\n                    json_line = json.dumps(data, ensure_ascii=False)\n                    jsonl_file.write(json_line + \"\\n\")\n\n\n\n\n\n"
  },
  {
    "path": "volcengine/maas/text_privatization/utils.py",
    "content": "import os\nfrom typing import Tuple\n\ntry:\n    import torch\n    from transformers import AutoModel, AutoTokenizer\n    from transformers.tokenization_utils import PreTrainedTokenizer\nexcept ImportError:\n    raise ImportError(\"Please make sure to install torch and transformers: \"\n                      \"\\n pip install torch~=1.13 \\n pip install transformers~=4.30.2\")\n\n\ndef get_bottom_model(model_id: str) -> Tuple[\"PreTrainedTokenizer\", \"torch.nn.Embedding\"]:\n    \"\"\"\n    Load the specified pre-trained model from huggingface and save the embedding model and tokenizer\n    :param model_id: id of pre-trained model\n    :return None\n    \"\"\"\n    model = AutoModel.from_pretrained(model_id, trust_remote_code=True)\n\n    # Search the embedding layer\n    for name, module in model.named_modules():\n        if isinstance(module, torch.nn.Embedding):\n            break\n\n    tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)\n\n    return tokenizer, module\n"
  },
  {
    "path": "volcengine/maas/utils.py",
    "content": "import json\n\n\nclass ChatRole:\n    USER = \"user\"\n    ASSISTANT = \"assistant\"\n    SYSTEM = \"system\"\n    FUNCTION = \"function\"\n\n\nclass _Dict(dict):\n    __setattr__ = dict.__setitem__\n    __getattr__ = dict.__getitem__\n\n    def __missing__(self, key):\n        return None\n\n\ndef dict_to_object(dict_obj):\n    # 支持嵌套类型\n    if isinstance(dict_obj, list):\n        insts = []\n        for i in dict_obj:\n            insts.append(dict_to_object(i))\n        return insts\n\n    if isinstance(dict_obj, dict):\n        inst = _Dict()\n        for k, v in dict_obj.items():\n            inst[k] = dict_to_object(v)\n        return inst\n\n    return dict_obj\n\n\ndef json_to_object(json_str, req_id=None):\n    obj = dict_to_object(json.loads(json_str))\n    if obj and isinstance(obj, dict) and req_id:\n        obj[\"req_id\"] = req_id\n    return obj\n"
  },
  {
    "path": "volcengine/maas/v2/MaasService.py",
    "content": "# coding:utf-8\nimport json\nimport copy\nimport time\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.auth.SignerV4 import SignerV4\n\nfrom volcengine.maas.sse_decoder import SSEDecoder\nfrom volcengine.maas.exception import MaasException, new_client_sdk_request_error\nfrom volcengine.maas.utils import dict_to_object, json_to_object\nfrom .utils import gen_req_id\nfrom volcengine.maas.v2.audio.audio import Audio\nfrom volcengine.maas.v2.images.images import Images\n\n\nclass MaasService(Service):\n    def __init__(self, host, region, connection_timeout=60, socket_timeout=60):\n        service_info = MaasService.get_service_info(\n            host, region, connection_timeout, socket_timeout\n        )\n        api_info = MaasService.get_api_info()\n        self._setted_apikey = None\n        api_info = self.get_api_info()\n        super(MaasService, self).__init__(service_info, api_info)\n\n        self.audio = Audio(self)\n        self.images = Images(self)\n\n    def set_apikey(self, apikey):\n        self._setted_apikey = apikey\n\n    @staticmethod\n    def get_service_info(host, region, connection_timeout, socket_timeout):\n        service_info = ServiceInfo(\n            host,\n            {\"Accept\": \"application/json\"},\n            Credentials(\"\", \"\", \"ml_maas\", region),\n            connection_timeout,\n            socket_timeout,\n            \"https\",\n        )\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\n            \"chat\": ApiInfo(\"POST\", \"/api/v2/endpoint/{endpoint_id}/chat\", {}, {}, {}),\n            \"tokenization\": ApiInfo(\n                \"POST\", \"/api/v2/endpoint/{endpoint_id}/tokenization\", {}, {}, {}\n            ),\n            \"classification\": ApiInfo(\n                \"POST\", \"/api/v2/endpoint/{endpoint_id}/classification\", {}, {}, {}\n            ),\n            \"embeddings\": ApiInfo(\n                \"POST\", \"/api/v2/endpoint/{endpoint_id}/embeddings\", {}, {}, {}\n            ),\n            \"audio.speech\": ApiInfo(\n                \"POST\", \"/api/v2/endpoint/{endpoint_id}/audio/speech\", {}, {}, {}\n            ),\n            \"images.quick_gen\": ApiInfo(\n                \"POST\", \"/api/v2/endpoint/{endpoint_id}/images/quick-gen\", {}, {}, {}\n            ),\n            \"images.flex_gen\": ApiInfo(\n                \"POST\", \"/api/v2/endpoint/{endpoint_id}/images/flex-gen\", {}, {}, {}\n            ),\n        }\n        return api_info\n\n    def chat(self, endpoint_id, req):\n        req[\"stream\"] = False\n        return self._request(endpoint_id, \"chat\", req)\n\n    def stream_chat(self, endpoint_id, req):\n        req_id = gen_req_id()\n        self._validate(\"chat\", req_id)\n        apikey = self._setted_apikey\n\n        try:\n            req[\"stream\"] = True\n            res = self._call(\n                endpoint_id, \"chat\", req_id, {}, json.dumps(req).encode(\"utf-8\"), apikey, stream=True\n            )\n\n            decoder = SSEDecoder(res)\n\n            def iter():\n                for data in decoder.next():\n                    if data == b\"[DONE]\":\n                        return\n\n                    try:\n                        res = json_to_object(str(data, encoding=\"utf-8\"), req_id=req_id)\n                    except:\n                        raise\n                    else:\n                        if res.error is not None and res.error.code_n != 0:\n                            raise MaasException(\n                                res.error.code_n,\n                                res.error.code,\n                                res.error.message,\n                                req_id,\n                            )\n                        yield res\n\n            return iter()\n        except MaasException:\n            raise\n        except Exception as e:\n            raise new_client_sdk_request_error(str(e))\n\n    def tokenize(self, endpoint_id, req):\n        return self._request(endpoint_id, \"tokenization\", req)\n\n    def classification(self, endpoint_id, req):\n        return self._request(endpoint_id, \"classification\", req)\n\n    def embeddings(self, endpoint_id, req):\n        return self._request(endpoint_id, \"embeddings\", req)\n\n    def _request(self, endpoint_id, api, req, params={}):\n        req_id = gen_req_id()\n\n        self._validate(api, req_id)\n\n        apikey = self._setted_apikey\n\n        try:\n            res = self._call(endpoint_id, api, req_id, params, json.dumps(req).encode(\"utf-8\"), apikey)\n            resp = dict_to_object(res.json())\n            if resp and isinstance(resp, dict):\n                resp[\"req_id\"] = req_id\n            return resp\n\n        except MaasException as e:\n            raise e\n        except Exception as e:\n            raise new_client_sdk_request_error(str(e), req_id)\n\n    def _validate(self, api, req_id):\n        credentials_exist = (\n                self.service_info.credentials is not None and\n                self.service_info.credentials.sk is not None and\n                self.service_info.credentials.ak is not None\n        )\n\n        if not self._setted_apikey and not credentials_exist:\n            raise new_client_sdk_request_error(\"no valid credential\", req_id)\n\n        if not (api in self.api_info):\n            raise new_client_sdk_request_error(\"no such api\", req_id)\n\n    def _call(self, endpoint_id, api, req_id, params, body, apikey=None, stream=False):\n        api_info = copy.deepcopy(self.api_info[api])\n        api_info.path = api_info.path.format(endpoint_id=endpoint_id)\n\n        r = self.prepare_request(api_info, params)\n        r.headers[\"x-tt-logid\"] = req_id\n        r.headers[\"Content-Type\"] = \"application/json\"\n        r.body = body\n\n        if apikey is None:\n            SignerV4.sign(r, self.service_info.credentials)\n        elif apikey is not None:\n            r.headers[\"Authorization\"] = \"Bearer \" + apikey\n\n        url = r.build()\n        res = self.session.post(\n            url,\n            headers=r.headers,\n            data=r.body,\n            timeout=(\n                self.service_info.connection_timeout,\n                self.service_info.socket_timeout,\n            ),\n            stream=stream,\n        )\n\n        if res.status_code != 200:\n            raw = res.text.encode()\n            res.close()\n            try:\n                resp = json_to_object(str(raw, encoding=\"utf-8\"), req_id=req_id)\n            except Exception:\n                raise new_client_sdk_request_error(raw, req_id)\n            else:\n                if resp.error:\n                    raise MaasException(\n                        resp.error.code_n, resp.error.code, resp.error.message, req_id\n                    )\n                else:\n                    raise new_client_sdk_request_error(resp, req_id)\n\n        return res\n"
  },
  {
    "path": "volcengine/maas/v2/__init__.py",
    "content": "from .MaasService import MaasService\n\n__all__ = ['MaasService']\n"
  },
  {
    "path": "volcengine/maas/v2/_resource.py",
    "content": "from volcengine.maas.v2 import MaasService\n\n\nclass SyncAPIResource:\n    _service: MaasService\n\n    def __init__(self, service: MaasService) -> None:\n        self._service = service\n"
  },
  {
    "path": "volcengine/maas/v2/audio/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/maas/v2/audio/audio.py",
    "content": "\nfrom volcengine.maas.v2._resource import SyncAPIResource\nfrom volcengine.maas.v2.audio.speech import Speech\n\n\nclass Audio(SyncAPIResource):\n    __speech: Speech = None\n\n    @property\n    def speech(self) -> Speech:\n        if self.__speech is None:\n            self.__speech = Speech(self._service)\n        return self.__speech\n"
  },
  {
    "path": "volcengine/maas/v2/audio/speech.py",
    "content": "import copy\nimport json\n\nfrom volcengine.maas._response import BinaryResponseContent\nfrom volcengine.maas.v2._resource import SyncAPIResource\nfrom volcengine.maas.v2 import MaasService\nfrom volcengine.maas.exception import MaasException, new_client_sdk_request_error\nfrom volcengine.auth.SignerV4 import SignerV4\nfrom volcengine.maas.utils import json_to_object\nfrom volcengine.maas.v2.utils import gen_req_id\n\n\nclass Speech(SyncAPIResource):\n\n    def create(self, endpoint_id, req):\n        api = \"audio.speech\"\n        req_id = gen_req_id()\n        self._service._validate(api, req_id)\n        apikey = self._service._setted_apikey\n\n        try:\n            res = self._service._call(endpoint_id, api, req_id, {}, json.dumps(req), apikey, stream=True)\n            return BinaryResponseContent(res, req_id)\n        except MaasException as e:\n            raise e\n        except Exception as e:\n            raise new_client_sdk_request_error(str(e), req_id)\n"
  },
  {
    "path": "volcengine/maas/v2/images/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/maas/v2/images/images.py",
    "content": "import json\n\nfrom volcengine.maas.exception import new_client_sdk_request_error, MaasException\nfrom volcengine.maas.utils import json_to_object\nfrom volcengine.maas.v2._resource import SyncAPIResource\n\n\nclass Images(SyncAPIResource):\n\n    def quick_gen(self, endpoint_id, req):\n        return self._service._request(endpoint_id, \"images.quick_gen\", req)\n\n    def flex_gen(self, endpoint_id, req):\n        return self._service._request(endpoint_id, \"images.flex_gen\", req)\n"
  },
  {
    "path": "volcengine/maas/v2/utils.py",
    "content": "from datetime import datetime\nimport random\n\n\ndef gen_req_id():\n    return datetime.now().strftime(\"%Y%m%d%H%M%S\") + format(\n        random.randint(0, 2**64 - 1), \"020X\"\n    )\n"
  },
  {
    "path": "volcengine/nlp/NLPService.py",
    "content": "# coding:utf-8\nimport json\nimport threading\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\n\n\nclass NLPService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(NLPService, \"_instance\"):\n            with NLPService._instance_lock:\n                if not hasattr(NLPService, \"_instance\"):\n                    NLPService._instance = object.__new__(cls)\n        return NLPService._instance\n\n    def __init__(self):\n        self.service_info = NLPService.get_service_info()\n        self.api_info = NLPService.get_api_info()\n        super(NLPService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info():\n        service_info = ServiceInfo(\"open.volcengineapi.com\", {},\n                                   Credentials('', '', 'nlp_gateway', 'cn-north-1'), 10, 10)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\n            \"KeyphraseExtractionExtract\": ApiInfo(\"POST\", \"/\", {\"Action\": \"KeyphraseExtractionExtract\", \"Version\": \"2020-09-01\"}, {}, {}),\n            \"TextCorrectionZhCorrect\": ApiInfo(\"POST\", \"/\", {\"Action\": \"TextCorrectionZhCorrect\", \"Version\": \"2020-09-01\"}, {}, {}),\n            \"TextCorrectionEnCorrect\": ApiInfo(\"POST\", \"/\", {\"Action\": \"TextCorrectionEnCorrect\", \"Version\": \"2020-09-01\"}, {}, {}),\n            \"SentimentAnalysis\": ApiInfo(\"POST\", \"/\", {\"Action\": \"SentimentAnalysis\", \"Version\": \"2020-12-01\"}, {}, {}),\n            \"TextSummarization\": ApiInfo(\"POST\", \"/\", {\"Action\": \"TextSummarization\", \"Version\": \"2020-12-01\"}, {}, {}),\n            \"EssayAutoGrade\": ApiInfo(\"POST\", \"/\", {\"Action\": \"EssayAutoGrade\", \"Version\": \"2021-05-20\"}, {}, {}),\n            \"NovelCorrection\": ApiInfo(\"POST\", \"/\", {\"Action\": \"NovelCorrection\", \"Version\": \"2021-07-22\"}, {}, {}),\n        }\n        return api_info\n\n    def common_json_handler(self, api, body):\n        params = dict()\n        try:\n            body = json.dumps(body)\n            res = self.json(api, params, body)\n            res_json = json.loads(res)\n            return res_json\n        except Exception as e:\n            res = str(e)\n            try:\n                res_json = json.loads(res)\n                return res_json\n            except:\n                raise Exception(str(e))\n\n    def keyphrase_extraction_extract(self, body):\n        try:\n            res_json = self.common_json_handler(\"KeyphraseExtractionExtract\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def text_correction_zh_correct(self, body):\n        try:\n            res_json = self.common_json_handler(\"TextCorrectionZhCorrect\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def text_correction_en_correct(self, body):\n        try:\n            res_json = self.common_json_handler(\"TextCorrectionEnCorrect\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def sentiment_analysis(self, body):\n        try:\n            res_json = self.common_json_handler(\"SentimentAnalysis\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def text_summarization(self, body):\n        try:\n            res_json = self.common_json_handler(\"TextSummarization\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def essay_auto_grade(self, body):\n        try:\n            res_json = self.common_json_handler(\"EssayAutoGrade\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def novel_correction(self, body):\n        try:\n            res_json = self.common_json_handler(\"NovelCorrection\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n"
  },
  {
    "path": "volcengine/nlp/README.md",
    "content": "## Example\n\n调用代码示例均在`volcengine/example/nlp`文件夹下，以下为文本情感分析调用示例\n\n```python\n#  -*- coding: utf-8 -*-\nfrom __future__ import print_function\n\nfrom volcengine.nlp.NLPService import NLPService\n\nif __name__ == '__main__':\n    nlp_service = NLPService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    nlp_service.set_ak('ak')\n    nlp_service.set_sk('sk')\n\n    params = dict()\n\n    form = {\n        \"text\": \"我很生气\"\n    }\n\n    resp = nlp_service.sentiment_analysis(form)\n    print(resp)\n\n```\n\n运行代码方式，在根目录下执行\n\n```bash\npython volcengine/example/nlp/example_sentiment_analysis.py\n```"
  },
  {
    "path": "volcengine/nlp/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/rdspostgresql/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/rdspostgresql/rdspostgresql.py",
    "content": "# coding:utf-8\nimport json\nimport threading\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.base.Service import Service\n\n\nclass RdsPostgreSQL(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(RdsPostgreSQL, \"_instance\"):\n            with RdsPostgreSQL._instance_lock:\n                if not hasattr(RdsPostgreSQL, \"_instance\"):\n                    RdsPostgreSQL._instance = object.__new__(cls)\n        return RdsPostgreSQL._instance\n\n    def __init__(self, region='cn-north-1'):\n        self.service_info = RdsPostgreSQL.get_service_info(region)\n        self.api_info = RdsPostgreSQL.get_api_info()\n        self.domain_cache = {}\n        self.fallback_domain_weights = {}\n        self.update_interval = 10\n        self.lock = threading.Lock()\n        super(RdsPostgreSQL, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info(region):\n        service_info_map = {\n            'cn-north-1': ServiceInfo(\"open.volcengineapi.com\",\n                                      {'Accept': 'application/json'},\n                                      Credentials('', '', 'rds_postgresql', 'cn-north-1'), 10, 10),\n        }\n        service_info = service_info_map.get(region, None)\n        if not service_info:\n            raise Exception('Cant find the region, please check it carefully')\n\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\n            \"CreateDBInstance\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateDBInstance\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"CreateDBInstanceIPList\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateDBInstanceIPList\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"CreateAccount\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateAccount\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"ModifyDatabaseOwner\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ModifyDatabaseOwner\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"CreateDatabase\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateDatabase\", \"Version\": \"2018-01-01\"}, {}, {}),\n        }\n        return api_info\n\n    def common_handler(self, api, form):\n        params = dict()\n        try:\n            res = self.post(api, params, form)\n            res_json = json.loads(res)\n            return res_json\n        except Exception as e:\n            res = str(e)\n            try:\n                res_json = json.loads(res)\n                return res_json\n            except:\n                raise Exception(str(e))\n\n    def common_json_handler(self, api, body):\n        params = dict()\n        try:\n            body = json.dumps(body)\n            res = self.json(api, params, body)\n            res_json = json.loads(res)\n            return res_json\n        except Exception as e:\n            res = str(e)\n            try:\n                res_json = json.loads(res)\n                return res_json\n            except:\n                raise Exception(str(e))\n\n    def create_instance(self, form):\n        try:\n            return self.common_json_handler(\"CreateDBInstance\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    def create_instance_white_list(self, form):\n        try:\n            return self.common_json_handler(\"CreateDBInstanceIPList\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    def create_account(self, form):\n        try:\n            return self.common_json_handler(\"CreateAccount\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    def modify_database_owner(self, form):\n        try:\n            return self.common_json_handler(\"ModifyDatabaseOwner\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    def create_database(self, form):\n        try:\n            return self.common_json_handler(\"CreateDatabase\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n"
  },
  {
    "path": "volcengine/sms/SmsService.py",
    "content": "# coding:utf-8\nimport json\nimport threading\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfoHttps import ServiceInfoSms\nfrom volcengine.const.Const import *\nfrom tenacity import retry, stop_after_attempt\n\n\nclass SmsService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(SmsService, \"_instance\"):\n            with SmsService._instance_lock:\n                if not hasattr(SmsService, \"_instance\"):\n                    SmsService._instance = object.__new__(cls)\n        return SmsService._instance\n\n    def __init__(self):\n        self.service_info = SmsService.get_service_info(self, REGION_CN_NORTH1)\n        self.api_info = SmsService.get_api_info()\n        super(SmsService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info(self, region):\n        service_info = ServiceInfoSms(\"sms.volcengineapi.com\", {'Accept': 'application/json'},\n                                      Credentials('', '', 'volcSMS', region), 5, 5)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\n            \"SendSms\": ApiInfo(\"POST\", \"/\", {\"Action\": \"SendSms\", \"Version\": \"2020-01-01\"}, {}, {}),\n            \"SendSmsVerifyCode\": ApiInfo(\"POST\", \"/\", {\"Action\": \"SendSmsVerifyCode\", \"Version\": \"2020-01-01\"}, {}, {}),\n            \"CheckSmsVerifyCode\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CheckSmsVerifyCode\", \"Version\": \"2020-01-01\"}, {},\n                                          {}),\n            \"SendBatchSms\": ApiInfo(\"POST\", \"/\", {\"Action\": \"SendBatchSms\", \"Version\": \"2021-01-01\"}, {}, {}),\n            \"Conversion\": ApiInfo(\"POST\", \"/\", {\"Action\": \"Conversion\", \"Version\": \"2020-01-01\"}, {}, {}),\n            \"GetSmsTemplateAndOrderList\": ApiInfo(\"GET\", \"/\",\n                                                  {\"Action\": \"GetSmsTemplateAndOrderList\",\n                                                      \"Version\": \"2021-01-11\"}, {},\n                                                  {}),\n            \"ApplySmsTemplate\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ApplySmsTemplate\", \"Version\": \"2021-01-11\"}, {}, {}),\n            \"DeleteSmsTemplate\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteSmsTemplate\", \"Version\": \"2021-01-11\"}, {}, {}),\n            \"GetSubAccountList\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetSubAccountList\", \"Version\": \"2021-01-11\"}, {}, {}),\n            \"GetSubAccountDetail\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetSubAccountDetail\", \"Version\": \"2021-01-11\"}, {},\n                                           {}),\n            \"GetSignatureAndOrderList\": ApiInfo(\"GET\", \"/\",\n                                                {\"Action\": \"GetSignatureAndOrderList\",\n                                                    \"Version\": \"2021-01-11\"}, {},\n                                                {}),\n            \"ApplySmsSignature\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ApplySmsSignature\", \"Version\": \"2021-01-11\"}, {}, {}),\n            \"DeleteSignature\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteSignature\", \"Version\": \"2021-01-11\"}, {},\n                                       {}),\n            \"ApplyVmsTemplate\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ApplyVmsTemplate\", \"Version\": \"2021-01-11\"}, {},\n                                        {}),\n            \"GetVmsTemplateStatus\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetVmsTemplateStatus\", \"Version\": \"2021-01-11\"},\n                                            {},\n                                            {}),\n            \"InsertSubAccount\": ApiInfo(\"POST\", \"/\", {\"Action\": \"InsertSubAccount\", \"Version\": \"2021-01-11\"},\n                                        {},\n                                        {}),\n            \"GetSmsSendDetails\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetSmsSendDetails\", \"Version\": \"2021-01-11\"}, {}, {}),\n            \"ApplySignatureIdent\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ApplySignatureIdent\", \"Version\": \"2021-01-11\"}, {}, {}),\n            \"GetSignatureIdentList\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetSignatureIdentList\", \"Version\": \"2021-01-11\"}, {}, {}),\n            \"BatchBindSignatureIdent\": ApiInfo(\"POST\", \"/\", {\"Action\": \"BatchBindSignatureIdent\", \"Version\": \"2021-01-11\"}, {}, {}),\n            \"ApplySmsSignatureV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ApplySmsSignatureV2\", \"Version\": \"2021-01-11\"}, {}, {}),\n            \"UpdateSmsSignature\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateSmsSignature\", \"Version\": \"2021-01-11\"}, {}, {})\n        }\n        return api_info\n\n    @retry(stop=stop_after_attempt(2))\n    def send_sms(self, body):\n        res = self.json('SendSms', {}, body)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n\n        return res_json\n\n    @retry(stop=stop_after_attempt(2))\n    def send_sms_verify_code(self, body):\n        res = self.json('SendSmsVerifyCode', {}, body)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n\n        return res_json\n\n    @retry(stop=stop_after_attempt(2))\n    def check_sms_verify_code(self, body):\n        res = self.json('CheckSmsVerifyCode', {}, body)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n\n        return res_json\n\n    @retry(stop=stop_after_attempt(2))\n    def send_batch_sms(self, body):\n        res = self.json('SendBatchSms', {}, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n\n        return res_json\n\n    @retry(stop=stop_after_attempt(2))\n    def conversion(self, body):\n        res = self.json('Conversion', {}, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n\n        return res_json\n\n    @retry(stop=stop_after_attempt(2))\n    def get_sms_template_and_order_list(self, param):\n        res = self.get('GetSmsTemplateAndOrderList', param)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n\n        return res_json\n\n    @retry(stop=stop_after_attempt(2))\n    def apply_sms_template(self, body):\n        res = self.json('ApplySmsTemplate', {}, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n\n        return res_json\n\n    @retry(stop=stop_after_attempt(2))\n    def delete_sms_template(self, body):\n        res = self.post('DeleteSmsTemplate', {}, body)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n\n        return res_json\n\n    @retry(stop=stop_after_attempt(2))\n    def get_sub_account_list(self, param):\n        res = self.get('GetSubAccountList', param)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n\n        return res_json\n\n    @retry(stop=stop_after_attempt(2))\n    def get_sub_account_detail(self, param):\n        res = self.get('GetSubAccountDetail', param)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n\n        return res_json\n\n    @retry(stop=stop_after_attempt(2))\n    def get_signature_and_order_list(self, param):\n        res = self.get('GetSignatureAndOrderList', param)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n\n        return res_json\n\n    @retry(stop=stop_after_attempt(2))\n    def apply_sms_signature(self, body):\n        res = self.json('ApplySmsSignature', {}, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n\n        return res_json\n\n    @retry(stop=stop_after_attempt(2))\n    def delete_signature(self, body):\n        res = self.json('DeleteSignature', {}, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n\n        return res_json\n\n    @retry(stop=stop_after_attempt(2))\n    def apply_vms_template(self, body):\n        body[\"caller\"] = \"sdk\"\n        if body[\"channelType\"] is None or body[\"channelType\"] == \"\":\n            body[\"channelType\"] = \"CN_VMS\"\n        res = self.json('ApplyVmsTemplate', {}, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        if 'Result' in res_json.keys() and 'templateId' in res_json['Result'].keys():\n            res_json['Result'] = {\n                \"templateId\": res_json['Result'][\"templateId\"]}\n        return res_json\n\n    @retry(stop=stop_after_attempt(2))\n    def get_vms_template_status(self, body):\n        res = self.json('GetVmsTemplateStatus', {}, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n\n        return res_json\n\n    @retry(stop=stop_after_attempt(2))\n    def send_vms(self, body):\n        res = self.json('SendSms', {}, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n\n        return res_json\n\n    @retry(stop=stop_after_attempt(2))\n    def insert_sms_sub_account(self, body):\n        res = self.json('InsertSubAccount', {}, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n\n        return res_json\n\n    @retry(stop=stop_after_attempt(2))\n    def get_sms_send_details(self, body):\n        res = self.json('GetSmsSendDetails', {}, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        return json.loads(res)\n\n    @retry(stop=stop_after_attempt(2))\n    def apply_signature_ident(self, body):\n        res = self.json('ApplySignatureIdent', {}, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        return json.loads(res)\n\n    @retry(stop=stop_after_attempt(2))\n    def get_signature_ident_list(self, body):\n        res = self.json('GetSignatureIdentList', {}, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        return json.loads(res)\n\n    @retry(stop=stop_after_attempt(2))\n    def batch_bind_signature_ident(self, body):\n        res = self.json('BatchBindSignatureIdent', {}, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        return json.loads(res)\n\n    @retry(stop=stop_after_attempt(2))\n    def apply_sms_signature_v2(self, body):\n        res = self.json('ApplySmsSignatureV2', {}, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        return json.loads(res)\n\n    @retry(stop=stop_after_attempt(2))\n    def update_sms_signature(self, body):\n        res = self.json('UpdateSmsSignature', {}, json.dumps(body))\n        if res == '':\n            raise Exception(\"empty response\")\n        return json.loads(res)\n"
  },
  {
    "path": "volcengine/sms/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/sts/StsService.py",
    "content": "# coding:utf-8\nimport json\nimport threading\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\n\n\nclass StsService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(StsService, \"_instance\"):\n            with StsService._instance_lock:\n                if not hasattr(StsService, \"_instance\"):\n                    StsService._instance = object.__new__(cls)\n        return StsService._instance\n\n    def __init__(self):\n        self.service_info = StsService.get_service_info()\n        self.api_info = StsService.get_api_info()\n        super(StsService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info():\n        service_info = ServiceInfo(\"sts.volcengineapi.com\", {'Accept': 'application/json'},\n                                   Credentials('', '', 'sts', 'cn-north-1'), 5, 5)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\"AssumeRole\": ApiInfo(\"GET\", \"/\", {\"Action\": \"AssumeRole\", \"Version\": \"2018-01-01\"}, {}, {})}\n        return api_info\n\n    def assume_role(self, params):\n        res = self.get(\"AssumeRole\", params)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json"
  },
  {
    "path": "volcengine/sts/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/tls/README.md",
    "content": "# 日志服务Python SDK\n\n火山引擎日志服务 Python SDK 封装了日志服务的常用接口，您可以通过日志服务 Python SDK 调用服务端 API，实现日志采集、日志检索等功能。\n\n## 快速开始\n\n### 初始化客户端\n\n初始化 Client 实例之后，才可以向 TLS 服务发送请求。初始化时推荐通过环境变量动态获取火山引擎密钥等身份认证信息，以免 AccessKey 硬编码引发数据安全风险。\n\n初始化代码如下：\n\n```python\nimport os\nfrom volcengine.tls.TLSService import TLSService\n\n# 注意，环境变量中的endpoint不包含协议头（https://或http://），例如 tls-cn-beijing.ivolces.com。\nendpoint = os.environ[\"VOLCENGINE_ENDPOINT\"]\nregion = os.environ[\"VOLCENGINE_REGION\"]\naccess_key_id = os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"]\naccess_key_secret = os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"]\n\ntls_service = TLSService(endpoint, access_key_id, access_key_secret, region)\n```\n\n如需使用 API Key 匿名鉴权写入日志，请使用显式 API Key 初始化入口。当前匿名鉴权仅支持最终请求为 `/PutLogs` 的接口，例如 `put_logs`、`put_logs_v2` 和 Producer 写入；其他接口仍需要完整 AK/SK。\n\n```python\ntls_service = TLSService.with_api_key(\n    endpoint=os.environ[\"VOLCENGINE_ENDPOINT\"],\n    region=os.environ[\"VOLCENGINE_REGION\"],\n    api_key=os.environ[\"VOLCENGINE_TLS_API_KEY\"],\n)\n```\n\n如果同时配置 API Key 与 AK/SK，`put_logs`/`put_logs_v2` 会优先使用 API Key 匿名鉴权，其他接口继续使用 AK/SK 签名：\n\n```python\ntls_service = TLSService.with_api_key(\n    endpoint,\n    region,\n    os.environ[\"VOLCENGINE_TLS_API_KEY\"],\n    access_key_id=access_key_id,\n    access_key_secret=access_key_secret,\n)\n```\n\nProducer 可通过 `ProducerConfig` 透传 API Key：\n\n```python\nproducer_config = ProducerConfig(endpoint, region, \"\", \"\", api_key=os.environ[\"VOLCENGINE_TLS_API_KEY\"])\n```\n\nAPI Key 可在运行时更新：\n\n```python\ntls_service.reset_api_key(os.environ[\"VOLCENGINE_TLS_API_KEY_NEW\"])\nproducer.reset_api_key(os.environ[\"VOLCENGINE_TLS_API_KEY_NEW\"])\n```\n\n请勿在日志或错误信息中打印 API Key 原文。\n\n### 示例代码\n\n本示例中，创建一个 example_tls.py 文件，并调用接口分别完成创建项目、创建主题、创建索引、写入日志数据、消费日志和查询日志数据。\n\n代码示例如下：\n\n```python\n# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import *\n\n\nif __name__ == \"__main__\":\n    # 初始化客户端，推荐通过环境变量动态获取火山引擎密钥等身份认证信息，以免AccessKey硬编码引发数据安全风险。详细说明请参考 https://www.volcengine.com/docs/6470/1166455\n    # 使用STS时，ak和sk均使用临时密钥，且设置VOLCENGINE_TOKEN；不使用STS时，VOLCENGINE_TOKEN部分传空\n    endpoint = os.environ[\"VOLCENGINE_ENDPOINT\"]\n    region = os.environ[\"VOLCENGINE_REGION\"]\n    access_key_id = os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"]\n    access_key_secret = os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"]\n\n    # 实例化TLS客户端\n    tls_service = TLSService(endpoint, access_key_id, access_key_secret, region)\n    now = str(int(time.time()))\n\n    # 创建日志项目\n    create_project_request = CreateProjectRequest(project_name=\"project-name-\" + now, region=region,\n                                                  description=\"project-description\")\n    create_project_response = tls_service.create_project(create_project_request)\n    project_id = create_project_response.project_id\n\n    # 创建日志主题\n    create_topic_request = CreateTopicRequest(topic_name=\"topic-name-\" + now, project_id=project_id,\n                                              ttl=3650, description=\"topic-description\", shard_count=2)\n    create_topic_response = tls_service.create_topic(create_topic_request)\n    topic_id = create_topic_response.get_topic_id()\n\n    # 创建索引\n    full_text = FullTextInfo(case_sensitive=False, delimiter=\",-;\", include_chinese=False)\n    value_info_a = ValueInfo(value_type=\"text\", delimiter=\"\", case_sensitive=True,\n                             include_chinese=False, sql_flag=True)\n    value_info_b = ValueInfo(value_type=\"long\", delimiter=\"\", case_sensitive=False,\n                             include_chinese=False, sql_flag=True)\n    key_value_info_a = KeyValueInfo(key=\"key1\", value=value_info_a)\n    key_value_info_b = KeyValueInfo(key=\"key2\", value=value_info_b)\n    key_value = [key_value_info_a, key_value_info_b]\n    create_index_request = CreateIndexRequest(topic_id, full_text, key_value)\n    create_index_response = tls_service.create_index(create_index_request)\n\n    # 写入日志数据\n    # 建议您一次性聚合多条日志后调用一次put_logs_v2接口，以提高日志上传吞吐率\n    logs = PutLogsV2Logs(source=\"192.168.1.1\", filename=\"sys.log\")\n    for i in range(100):\n        logs.add_log(contents={\"key1\": \"value1-\" + str(i + 1), \"key2\": \"value2-\" + str(i + 1)},\n                     log_time=int(round(time.time())))\n    tls_service.put_logs_v2(PutLogsV2Request(topic_id, logs))\n    time.sleep(30)\n\n    # 查询消费游标\n    describe_cursor_request = DescribeCursorRequest(topic_id, shard_id=0, from_time=\"begin\")\n    describe_cursor_response = tls_service.describe_cursor(describe_cursor_request)\n\n    # 消费日志数据\n    consume_logs_request = ConsumeLogsRequest(topic_id, shard_id=0, cursor=describe_cursor_response.cursor)\n    consume_logs_response = tls_service.consume_logs(consume_logs_request)\n\n    # 当您需要检索和分析日志时，推荐您使用Python SDK提供的search_logs_v2方法，下面的代码提供了具体的调用示例\n    # 查询日志数据（全文检索）\n    search_logs_request = SearchLogsRequest(topic_id, query=\"error\", limit=10,\n                                            start_time=1346457600000, end_time=1630454400000)\n    search_logs_response = tls_service.search_logs_v2(search_logs_request)\n\n    # 查询日志数据（键值检索）\n    search_logs_request = SearchLogsRequest(topic_id, query=\"key1:error\", limit=10,\n                                            start_time=1346457600000, end_time=1630454400000)\n    search_logs_response = tls_service.search_logs_v2(search_logs_request)\n\n    # 查询日志数据（SQL分析）\n    search_logs_request = SearchLogsRequest(topic_id, query=\"* | select key1, key2\", limit=10,\n                                            start_time=1346457600000, end_time=1630454400000)\n    search_logs_response = tls_service.search_logs_v2(search_logs_request)\n\n    # 查询日志数据（SQL分析）\n    search_logs_request = SearchLogsRequest(topic_id, query=\"* | select key1, key2\", limit=10,\n                                            start_time=1346457600000, end_time=1630454400000)\n    search_logs_response = tls_service.search_logs(search_logs_request)\n```\n\n\n## 通过消费组消费数据\n\n日志服务提供消费日志的OpenAPI接口ConsumeLogs，支持实时消费采集到服务端的日志数据。\n在使用ConsumeLogs接口时，需要按照日志分区维度消费日志数据，消费时自行指定日志主题ID、Shard ID和起始结束游标（Cursor），所以消费日志的进度受限于单个Shard的读写能力，还需要自行维护消费进度，在Shard自动分裂的场景下消费逻辑与流程繁琐。\n\n日志服务通过SDK提供了消费组（ConsumerGroup）功能，支持通过消费组消费日志数据，通过消费组消费时，日志服务会自动均衡各个消费者的消费能力与进度，自动分配Shard，您无需关注消费组的内部调度细节及消费者之间的负载均衡、故障转移等，只需要专注于业务逻辑。\n\n日志服务提供了Consumer异步日志消费库，支持消费同一个日志项目下多个日志主题，具有异步消费、高性能、失败重试、优雅关闭等特性。\n\n关于通过消费组消费数据的基本概念和限制说明等更多信息，请您参阅[通过消费组消费数据](https://www.volcengine.com/docs/6470/1152208)。\n\n### 示例代码\n\n以下代码以Python SDK为例，演示通过SDK创建消费组和消费者，并消费日志的整体流程。\n\n```python\n# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\nimport time\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.consumer.consumer import TLSConsumer, LogProcessor\nfrom volcengine.tls.consumer.consumer_model import ConsumerConfig\nfrom volcengine.tls.log_pb2 import LogGroupList\n\n\n# 用户需要实现一个继承LogProcessor的类，并按照业务需要自行实现process函数，用于处理消费到的每个LogGroupList\nclass MyLogProcessor(LogProcessor):\n    def process(self, topic_id: str, shard_id: int, log_group_list: LogGroupList):\n        print(topic_id + \" --- \" + str(shard_id))\n\n        count = 0\n\n        for log_group in log_group_list.log_groups:\n            for log in log_group.logs:\n                count += 1\n                print(\"*** Count = {} ***\".format(count))\n\n                for content in log.contents:\n                    print(\"{}: {}\".format(content.key, content.value))\n                print()\n\n\nif __name__ == '__main__':\n    # 初始化客户端，推荐通过环境变量动态获取火山引擎密钥等身份认证信息，以免AccessKey硬编码引发数据安全风险。详细说明请参考https://www.volcengine.com/docs/6470/1166455\n    # 使用STS时，ak和sk均使用临时密钥，且设置VOLCENGINE_TOKEN；不使用STS时，VOLCENGINE_TOKEN部分传空\n    endpoint = os.environ[\"VOLCENGINE_ENDPOINT\"]\n    region = os.environ[\"VOLCENGINE_REGION\"]\n    access_key_id = os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"]\n    access_key_secret = os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"]\n\n    # 实例化TLS客户端\n    tls_service = TLSService(endpoint, access_key_id, access_key_secret, region)\n\n    # 配置消费组的必填参数，ConsumerConfig构造函数设定了一些默认参数，您也可根据需要自定义配置\n    consumer_config = ConsumerConfig(project_id=\"ProjectID\",\n                                     consumer_group_name=\"python-consumer-group\",\n                                     consumer_name=\"python-consumer\",\n                                     topic_id_list=[\"TopicID\"])\n    tls_consumer = TLSConsumer(consumer_config, tls_service, MyLogProcessor())\n\n    # 调用start方法开始持续消费\n    tls_consumer.start()\n\n    # 可通过调用tls_consumer.stop()来结束消费组消费\n    time.sleep(10)\n    tls_consumer.stop()\n```\n\n### 配置说明\n\n在上述示例代码中，ConsumerConfig类的构造函数返回了Python SDK消费组配置，并向您展示了如何配置您的endpoint、region、accessKeyID、accessKeySecret等基本信息、日志项目ID和日志主题ID列表、消费组名称和消费者名称。\n\n除此之外，您还可通过ConsumerConfig的其他字段进行额外的自定义配置。ConsumerConfig的可配置字段如下所示。\n\n| 参数                                  | 类型   | 示例值   | 描述                                                                                                                                                                      |\n|:------------------------------------|:-----|:------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| max_fetch_log_group_count           | int  | 100   | 消费者单次消费日志时，最大获取LogGroup数量，默认为100，最大为1000。                                                                                                                               |\n| heartbeat_interval_in_second        | int  | 20    | Consumer心跳上报时间间隔，单位为秒。                                                                                                                                                  |\n| data_fetch_interval_in_millisecond  | int  | 200   | Consumer消费日志时间间隔，单位为毫秒。                                                                                                                                                 |\n| flush_checkpoint_interval_in_second | int  | 5     | Consumer上传消费进度的时间间隔，单位为秒。                                                                                                                                               |\n| consume_from                        | str  | begin | 开始消费时的默认消费位点，与DescribeCursor的From参数一致，仅在该消费者从未上传过消费位点时有效。                                                                                                               |\n| ordered_consume                     | bool | false | 是否开启顺序消费。开启顺序消费后，消费者会根据Shard分裂的父子关系进行消费。例如Shard0分裂为Shard1与Shard2，而Shard1又分裂为Shard3与Shard4。在开启顺序消费之后，会根据(Shard0) -> (Shard1, Shard2) -> (Shard2, Shard3, Shard4)的顺序进行消费。 |\n"
  },
  {
    "path": "volcengine/tls/TLSService.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport hashlib\nimport time\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.auth.SignerV4 import SignerV4\nfrom volcengine.base.Service import Service\nfrom volcengine.tls.tls_requests import *\nfrom volcengine.tls.tls_responses import *\nfrom volcengine.tls.tls_requests import DescribeETLTaskRequest, ModifyAlarmContentTemplateRequest\nfrom volcengine.tls.tls_responses import DescribeETLTaskResponse, ModifyAlarmContentTemplateResponse\nfrom volcengine.tls.tls_responses import ModifyTraceInstanceResponse\nfrom volcengine.tls.tls_exception import TLSException\nfrom volcengine.tls.retry_policy import RetryPolicy\nfrom volcengine.tls.const import DELETE_TRACE_INSTANCE, DESCRIBE_TRACE_INSTANCE, DESCRIBE_TRACE, SEARCH_TRACES, \\\n    CREATE_ALARM_CONTENT_TEMPLATE, CREATE_ALARM_WEBHOOK_INTEGRATION, DELETE_ALARM_WEBHOOK_INTEGRATION, \\\n    X_TLS_ANONYMOUS_IDENTITY\nfrom volcengine.tls.util import get_logger\n\nAPI_INFO = {\n    # APIs of log projects.\n    CREATE_PROJECT: ApiInfo(HTTP_POST, CREATE_PROJECT, {}, {}, {}),\n    DELETE_PROJECT: ApiInfo(HTTP_DELETE, DELETE_PROJECT, {}, {}, {}),\n    MODIFY_PROJECT: ApiInfo(HTTP_PUT, MODIFY_PROJECT, {}, {}, {}),\n    DESCRIBE_PROJECT: ApiInfo(HTTP_GET, DESCRIBE_PROJECT, {}, {}, {}),\n    DESCRIBE_PROJECTS: ApiInfo(HTTP_GET, DESCRIBE_PROJECTS, {}, {}, {}),\n    # APIs of log topics.\n    CREATE_TOPIC: ApiInfo(HTTP_POST, CREATE_TOPIC, {}, {}, {}),\n    DELETE_TOPIC: ApiInfo(HTTP_DELETE, DELETE_TOPIC, {}, {}, {}),\n    MODIFY_TOPIC: ApiInfo(HTTP_PUT, MODIFY_TOPIC, {}, {}, {}),\n    DESCRIBE_TOPIC: ApiInfo(HTTP_GET, DESCRIBE_TOPIC, {}, {}, {}),\n    DESCRIBE_TOPICS: ApiInfo(HTTP_GET, DESCRIBE_TOPICS, {}, {}, {}),\n    # APIs of log index.\n    CREATE_INDEX: ApiInfo(HTTP_POST, CREATE_INDEX, {}, {}, {}),\n    DELETE_INDEX: ApiInfo(HTTP_DELETE, DELETE_INDEX, {}, {}, {}),\n    MODIFY_INDEX: ApiInfo(HTTP_PUT, MODIFY_INDEX, {}, {}, {}),\n    DESCRIBE_INDEX: ApiInfo(HTTP_GET, DESCRIBE_INDEX, {}, {}, {}),\n    # APIs of processors.\n    CREATE_PROCESSOR: ApiInfo(HTTP_POST, CREATE_PROCESSOR, {}, {}, {}),\n    DELETE_PROCESSOR: ApiInfo(HTTP_DELETE, DELETE_PROCESSOR, {}, {}, {}),\n    MODIFY_PROCESSOR: ApiInfo(HTTP_PUT, MODIFY_PROCESSOR, {}, {}, {}),\n    DESCRIBE_PROCESSOR: ApiInfo(HTTP_GET, DESCRIBE_PROCESSOR, {}, {}, {}),\n    DESCRIBE_PROCESSORS: ApiInfo(HTTP_GET, DESCRIBE_PROCESSORS, {}, {}, {}),\n    EXEC_PROCESSOR: ApiInfo(HTTP_POST, EXEC_PROCESSOR, {}, {}, {}),\n    OPERATE_PROCESSOR: ApiInfo(HTTP_PUT, OPERATE_PROCESSOR, {}, {}, {}),\n    DESCRIBE_TOPICS_BY_PROCESSOR: ApiInfo(HTTP_GET, DESCRIBE_TOPICS_BY_PROCESSOR, {}, {}, {}),\n    BIND_TOPIC_PROCESSOR: ApiInfo(HTTP_PUT, BIND_TOPIC_PROCESSOR, {}, {}, {}),\n    BATCH_BIND_TOPICS: ApiInfo(HTTP_PUT, BATCH_BIND_TOPICS, {}, {}, {}),\n    UNBIND_TOPIC_PROCESSOR: ApiInfo(HTTP_DELETE, UNBIND_TOPIC_PROCESSOR, {}, {}, {}),\n    DESCRIBE_PROCESSOR_BY_TOPIC: ApiInfo(HTTP_GET, DESCRIBE_PROCESSOR_BY_TOPIC, {}, {}, {}),\n    DESCRIBE_PROCESSOR_BINDINGS: ApiInfo(HTTP_GET, DESCRIBE_PROCESSOR_BINDINGS, {}, {}, {}),\n    DESCRIBE_PROCESSOR_FUNCTIONS: ApiInfo(HTTP_GET, DESCRIBE_PROCESSOR_FUNCTIONS, {}, {}, {}),\n    # APIs of logs.\n    PUT_LOGS: ApiInfo(HTTP_POST, PUT_LOGS, {}, {}, {}),\n    DESCRIBE_CURSOR: ApiInfo(HTTP_GET, DESCRIBE_CURSOR, {}, {}, {}),\n    CONSUME_LOGS: ApiInfo(HTTP_GET, CONSUME_LOGS, {}, {}, {}),\n    SEARCH_LOGS: ApiInfo(HTTP_POST, SEARCH_LOGS, {}, {}, {}),\n    DESCRIBE_LOG_CONTEXT: ApiInfo(HTTP_POST, DESCRIBE_LOG_CONTEXT, {}, {}, {}),\n    WEB_TRACKS: ApiInfo(HTTP_POST, WEB_TRACKS, {}, {}, {}),\n    DESCRIBE_HISTOGRAM: ApiInfo(HTTP_POST, DESCRIBE_HISTOGRAM, {}, {}, {}),\n    DESCRIBE_HISTOGRAM_V1: ApiInfo(HTTP_POST, DESCRIBE_HISTOGRAM_V1, {}, {}, {}),\n    CREATE_DOWNLOAD_TASK: ApiInfo(HTTP_POST, CREATE_DOWNLOAD_TASK, {}, {}, {}),\n    DESCRIBE_DOWNLOAD_TASKS: ApiInfo(HTTP_GET, DESCRIBE_DOWNLOAD_TASKS, {}, {}, {}),\n    DESCRIBE_DOWNLOAD_URL: ApiInfo(HTTP_GET, DESCRIBE_DOWNLOAD_URL, {}, {}, {}),\n    CANCEL_DOWNLOAD_TASK: ApiInfo(HTTP_POST, CANCEL_DOWNLOAD_TASK, {}, {}, {}),\n    # APIs of shards.\n    DESCRIBE_SHARDS: ApiInfo(HTTP_GET, DESCRIBE_SHARDS, {}, {}, {}),\n    MANUAL_SHARD_SPLIT: ApiInfo(HTTP_POST, MANUAL_SHARD_SPLIT, {}, {}, {}),\n    # APIs of host groups.\n    CREATE_HOST_GROUP: ApiInfo(HTTP_POST, CREATE_HOST_GROUP, {}, {}, {}),\n    DELETE_HOST_GROUP: ApiInfo(HTTP_DELETE, DELETE_HOST_GROUP, {}, {}, {}),\n    MODIFY_HOST_GROUP: ApiInfo(HTTP_PUT, MODIFY_HOST_GROUP, {}, {}, {}),\n    DESCRIBE_HOST_GROUP: ApiInfo(HTTP_GET, DESCRIBE_HOST_GROUP, {}, {}, {}),\n    DESCRIBE_HOST_GROUPS: ApiInfo(HTTP_GET, DESCRIBE_HOST_GROUPS, {}, {}, {}),\n    DESCRIBE_HOSTS: ApiInfo(HTTP_GET, DESCRIBE_HOSTS, {}, {}, {}),\n    DELETE_HOST: ApiInfo(HTTP_DELETE, DELETE_HOST, {}, {}, {}),\n    DESCRIBE_HOST_GROUP_RULES: ApiInfo(HTTP_GET, DESCRIBE_HOST_GROUP_RULES, {}, {}, {}),\n    MODIFY_HOST_GROUPS_AUTO_UPDATE: ApiInfo(HTTP_PUT, MODIFY_HOST_GROUPS_AUTO_UPDATE, {}, {}, {}),\n    DELETE_ABNORMAL_HOSTS: ApiInfo(HTTP_DELETE, DELETE_ABNORMAL_HOSTS, {}, {}, {}),\n    # APIs of rules.\n    CREATE_RULE: ApiInfo(HTTP_POST, CREATE_RULE, {}, {}, {}),\n    DELETE_RULE: ApiInfo(HTTP_DELETE, DELETE_RULE, {}, {}, {}),\n    MODIFY_RULE: ApiInfo(HTTP_PUT, MODIFY_RULE, {}, {}, {}),\n    DESCRIBE_RULE: ApiInfo(HTTP_GET, DESCRIBE_RULE, {}, {}, {}),\n    DESCRIBE_RULES: ApiInfo(HTTP_GET, DESCRIBE_RULES, {}, {}, {}),\n    APPLY_RULE_TO_HOST_GROUPS: ApiInfo(HTTP_PUT, APPLY_RULE_TO_HOST_GROUPS, {}, {}, {}),\n    DELETE_RULE_FROM_HOST_GROUPS: ApiInfo(HTTP_PUT, DELETE_RULE_FROM_HOST_GROUPS, {}, {}, {}),\n    # APIs of alarms.\n    CREATE_ALARM_NOTIFY_GROUP: ApiInfo(HTTP_POST, CREATE_ALARM_NOTIFY_GROUP, {}, {}, {}),\n    DELETE_ALARM_NOTIFY_GROUP: ApiInfo(HTTP_DELETE, DELETE_ALARM_NOTIFY_GROUP, {}, {}, {}),\n    MODIFY_ALARM_NOTIFY_GROUP: ApiInfo(HTTP_PUT, MODIFY_ALARM_NOTIFY_GROUP, {}, {}, {}),\n    DESCRIBE_ALARM_NOTIFY_GROUPS: ApiInfo(HTTP_GET, DESCRIBE_ALARM_NOTIFY_GROUPS, {}, {}, {}),\n    CREATE_ALARM: ApiInfo(HTTP_POST, CREATE_ALARM, {}, {}, {}),\n    DELETE_ALARM: ApiInfo(HTTP_DELETE, DELETE_ALARM, {}, {}, {}),\n    MODIFY_ALARM: ApiInfo(HTTP_PUT, MODIFY_ALARM, {}, {}, {}),\n    DESCRIBE_ALARMS: ApiInfo(HTTP_GET, DESCRIBE_ALARMS, {}, {}, {}),\n    MODIFY_ALARM_CONTENT_TEMPLATE: ApiInfo(HTTP_PUT, MODIFY_ALARM_CONTENT_TEMPLATE, {}, {}, {}),\n    DELETE_ALARM_CONTENT_TEMPLATE: ApiInfo(HTTP_DELETE, DELETE_ALARM_CONTENT_TEMPLATE, {}, {}, {}),\n    DESCRIBE_ALARM_CONTENT_TEMPLATES: ApiInfo(HTTP_GET, DESCRIBE_ALARM_CONTENT_TEMPLATES, {}, {}, {}),\n    DESCRIBE_ALARM_WEBHOOK_INTEGRATIONS: ApiInfo(HTTP_GET, DESCRIBE_ALARM_WEBHOOK_INTEGRATIONS, {}, {}, {}),\n    MODIFY_ALARM_WEBHOOK_INTEGRATION: ApiInfo(HTTP_PUT, MODIFY_ALARM_WEBHOOK_INTEGRATION, {}, {}, {}),\n    # APIs of Kafka consumer.\n    OPEN_KAFKA_CONSUMER: ApiInfo(HTTP_PUT, OPEN_KAFKA_CONSUMER, {}, {}, {}),\n    CLOSE_KAFKA_CONSUMER: ApiInfo(HTTP_PUT, CLOSE_KAFKA_CONSUMER, {}, {}, {}),\n    DESCRIBE_KAFKA_CONSUMER: ApiInfo(HTTP_GET, DESCRIBE_KAFKA_CONSUMER, {}, {}, {}),\n    # APIs of consumer group.\n    CREATE_CONSUMER_GROUP: ApiInfo(HTTP_POST, CREATE_CONSUMER_GROUP, {}, {}, {}),\n    DELETE_CONSUMER_GROUP: ApiInfo(HTTP_DELETE, DELETE_CONSUMER_GROUP, {}, {}, {}),\n    MODIFY_CONSUMER_GROUP: ApiInfo(HTTP_PUT, MODIFY_CONSUMER_GROUP, {}, {}, {}),\n    DESCRIBE_CONSUMER_GROUPS: ApiInfo(HTTP_GET, DESCRIBE_CONSUMER_GROUPS, {}, {}, {}),\n    CONSUMER_HEARTBEAT: ApiInfo(HTTP_POST, CONSUMER_HEARTBEAT, {}, {}, {}),\n    MODIFY_CHECKPOINT: ApiInfo(HTTP_PUT, MODIFY_CHECKPOINT, {}, {}, {}),\n    RESET_CHECKPOINT: ApiInfo(HTTP_PUT, RESET_CHECKPOINT, {}, {}, {}),\n    DESCRIBE_CHECKPOINT: ApiInfo(HTTP_GET, DESCRIBE_CHECKPOINT, {}, {}, {}),\n    # APIs of resource labels.\n    ADD_TAGS_TO_RESOURCE: ApiInfo(HTTP_POST, ADD_TAGS_TO_RESOURCE, {}, {}, {}),\n    REMOVE_TAGS_FROM_RESOURCE: ApiInfo(HTTP_POST, REMOVE_TAGS_FROM_RESOURCE, {}, {}, {}),\n    TAG_RESOURCES: ApiInfo(HTTP_POST, TAG_RESOURCES, {}, {}, {}),\n    UNTAG_RESOURCES: ApiInfo(HTTP_POST, UNTAG_RESOURCES, {}, {}, {}),\n    LIST_TAGS_FOR_RESOURCES: ApiInfo(HTTP_POST, LIST_TAGS_FOR_RESOURCES, {}, {}, {}),\n    # APIs of import task.\n    CREATE_IMPORT_TASK: ApiInfo(HTTP_POST, CREATE_IMPORT_TASK, {}, {}, {}),\n    DELETE_IMPORT_TASK: ApiInfo(HTTP_DELETE, DELETE_IMPORT_TASK, {}, {}, {}),\n    MODIFY_IMPORT_TASK: ApiInfo(HTTP_PUT, MODIFY_IMPORT_TASK, {}, {}, {}),\n    DESCRIBE_IMPORT_TASKS: ApiInfo(HTTP_GET, DESCRIBE_IMPORT_TASKS, {}, {}, {}),\n    DESCRIBE_IMPORT_TASK: ApiInfo(HTTP_GET, DESCRIBE_IMPORT_TASK, {}, {}, {}),\n\n    # APIs of schedule sql tasks.\n    DESCRIBE_SCHEDULE_SQL_TASKS: ApiInfo(HTTP_GET, DESCRIBE_SCHEDULE_SQL_TASKS, {}, {}, {}),\n    # APIs of shipper.\n    CREATE_SHIPPER: ApiInfo(HTTP_POST, CREATE_SHIPPER, {}, {}, {}),\n    DELETE_SHIPPER: ApiInfo(HTTP_DELETE, DELETE_SHIPPER, {}, {}, {}),\n    MODIFY_SHIPPER: ApiInfo(HTTP_PUT, MODIFY_SHIPPER, {}, {}, {}),\n    DESCRIBE_SHIPPERS: ApiInfo(HTTP_GET, DESCRIBE_SHIPPERS, {}, {}, {}),\n    DESCRIBE_SHIPPER: ApiInfo(HTTP_GET, DESCRIBE_SHIPPER, {}, {}, {}),\n    # APIs of ETL tasks.\n    CREATE_ETL_TASK: ApiInfo(HTTP_POST, CREATE_ETL_TASK, {}, {}, {}),\n    DELETE_ETL_TASK: ApiInfo(HTTP_DELETE, DELETE_ETL_TASK, {}, {}, {}),\n    MODIFY_ETL_TASK: ApiInfo(HTTP_PUT, MODIFY_ETL_TASK, {}, {}, {}),\n    DESCRIBE_ETL_TASK: ApiInfo(HTTP_GET, DESCRIBE_ETL_TASK, {}, {}, {}),\n    DESCRIBE_ETL_TASKS: ApiInfo(HTTP_GET, DESCRIBE_ETL_TASKS, {}, {}, {}),\n    MODIFY_ETL_TASK_STATUS: ApiInfo(HTTP_PUT, MODIFY_ETL_TASK_STATUS, {}, {}, {}),\n    # APIs of schedule SQL task.\n    CREATE_SCHEDULE_SQL_TASK: ApiInfo(HTTP_POST, CREATE_SCHEDULE_SQL_TASK, {}, {}, {}),\n    DELETE_SCHEDULE_SQL_TASK: ApiInfo(HTTP_DELETE, DELETE_SCHEDULE_SQL_TASK, {}, {}, {}),\n    DESCRIBE_SCHEDULE_SQL_TASK: ApiInfo(HTTP_GET, DESCRIBE_SCHEDULE_SQL_TASK, {}, {}, {}),\n    MODIFY_SCHEDULE_SQL_TASK: ApiInfo(HTTP_PUT, MODIFY_SCHEDULE_SQL_TASK, {}, {}, {}),\n    # APIs of account.\n    ACTIVE_TLS_ACCOUNT: ApiInfo(HTTP_POST, ACTIVE_TLS_ACCOUNT, {}, {}, {}),\n    # APIs of trace instance.\n    CREATE_TRACE_INSTANCE: ApiInfo(HTTP_POST, CREATE_TRACE_INSTANCE, {}, {}, {}),\n    DELETE_TRACE_INSTANCE: ApiInfo(HTTP_DELETE, DELETE_TRACE_INSTANCE, {}, {}, {}),\n    MODIFY_TRACE_INSTANCE: ApiInfo(HTTP_PUT, MODIFY_TRACE_INSTANCE, {}, {}, {}),\n    DESCRIBE_TRACE_INSTANCE: ApiInfo(HTTP_GET, DESCRIBE_TRACE_INSTANCE, {}, {}, {}),\n    DESCRIBE_TRACE_INSTANCES: ApiInfo(HTTP_GET, DESCRIBE_TRACE_INSTANCES, {}, {}, {}),\n    DESCRIBE_TRACE: ApiInfo(HTTP_POST, DESCRIBE_TRACE, {}, {}, {}),\n    SEARCH_TRACES: ApiInfo(HTTP_POST, SEARCH_TRACES, {}, {}, {}),\n    # APIs of account status.\n    GET_ACCOUNT_STATUS: ApiInfo(HTTP_GET, GET_ACCOUNT_STATUS, {}, {}, {}),\n    # APIs of alarm content template.\n    CREATE_ALARM_CONTENT_TEMPLATE: ApiInfo(HTTP_POST, CREATE_ALARM_CONTENT_TEMPLATE, {}, {}, {}),\n    # APIs of alarm webhook integration.\n    CREATE_ALARM_WEBHOOK_INTEGRATION: ApiInfo(HTTP_POST, CREATE_ALARM_WEBHOOK_INTEGRATION, {}, {}, {}),\n    DELETE_ALARM_WEBHOOK_INTEGRATION: ApiInfo(HTTP_DELETE, DELETE_ALARM_WEBHOOK_INTEGRATION, {}, {}, {}),\n}\n\nHEADER_API_VERSION = \"x-tls-apiversion\"\nAPI_VERSION_V_0_3_0 = \"0.3.0\"\nAPI_VERSION_V_0_2_0 = \"0.2.0\"\n\n\nclass TLSService(Service):\n    def __init__(self, endpoint: str, access_key_id: str, access_key_secret: str, region: str,\n                 security_token: str = None, scheme: str = \"https\", timeout: int = 60,\n                 api_version=API_VERSION_V_0_3_0, api_key: str = None):\n        self.__endpoint = endpoint\n        self.__access_key_id = access_key_id\n        self.__access_key_secret = access_key_secret\n        self.__region = region\n        self.__security_token = security_token\n        self.__scheme = scheme\n        self.__timeout = timeout\n        self.__api_version = api_version\n        self.__api_key = api_key\n        self.__retry_policy = None\n\n        self.check_scheme_and_endpoint()\n\n        self.__logger = get_logger(\"tls-python-sdk-logger\")\n        self.__logger.info(\"Successfully initialize the TLS client.\")\n\n        super(TLSService, self).__init__(service_info=self.get_service_info(), api_info=API_INFO)\n\n    @classmethod\n    def with_api_key(cls, endpoint: str, region: str, api_key: str, access_key_id: str = \"\",\n                     access_key_secret: str = \"\", security_token: str = None, scheme: str = \"https\",\n                     timeout: int = 60, api_version=API_VERSION_V_0_3_0):\n        return cls(endpoint, access_key_id, access_key_secret, region, security_token=security_token,\n                   scheme=scheme, timeout=timeout, api_version=api_version, api_key=api_key)\n\n    def check_scheme_and_endpoint(self):\n        schemes = {\n            \"http://\": \"http\",\n            \"https://\": \"https\",\n        }\n\n        for prefix, scheme in schemes.items():\n            if self.__endpoint.startswith(prefix):\n                self.__scheme = scheme\n                self.__endpoint = self.__endpoint[len(prefix):]\n                return\n\n    def get_region(self):\n        return self.__region\n\n    def get_service_info(self):\n        header = {}\n\n        if self.__security_token is not None:\n            header[X_SECURITY_TOKEN] = self.__security_token\n        credentials = Credentials(ak=self.__access_key_id, sk=self.__access_key_secret,\n                                  service=\"TLS\", region=self.__region)\n        service_info = ServiceInfo(host=self.__endpoint, header=header, credentials=credentials, scheme=self.__scheme,\n                                   connection_timeout=self.__timeout, socket_timeout=self.__timeout)\n\n        return service_info\n\n    def __prepare_request(self, api: str, params: dict = None, body: dict = None, request_headers: dict = None):\n        if params is None:\n            params = {}\n        if body is None:\n            body = {}\n\n        request = self.prepare_request(self.api_info[api], params)\n\n        if request_headers is None:\n            request_headers = {CONTENT_TYPE: APPLICATION_JSON}\n        request.headers.update(request_headers)\n\n        if \"json\" in request.headers[CONTENT_TYPE] and api != WEB_TRACKS:\n            request.body = json.dumps(body)\n        else:\n            request.body = body[DATA]\n\n        if len(request.body) != 0:\n            if isinstance(request.body, str):\n                request.headers[CONTENT_MD5] = hashlib.md5(request.body.encode(\"utf-8\")).hexdigest()\n            else:\n                request.headers[CONTENT_MD5] = hashlib.md5(request.body).hexdigest()\n\n        if self.__api_key and api == PUT_LOGS:\n            request.headers[X_TLS_ANONYMOUS_IDENTITY] = self.__api_key\n            request.headers.pop(\"Authorization\", None)\n            request.headers.pop(X_SECURITY_TOKEN, None)\n        else:\n            credentials = self.service_info.credentials\n            if self.__api_key and not (credentials.ak and credentials.sk):\n                raise TLSException(error_code=\"MissingCredentials\",\n                                   error_message=\"AK/SK credentials are required for TLS APIs except PutLogs \"\n                                                 \"when initialized with api_key.\")\n            SignerV4.sign(request, credentials)\n\n        return request\n\n    def __request(self, api: str, params: dict = None, body: dict = None, request_headers: dict = None):\n        if request_headers is None:\n            request_headers = {HEADER_API_VERSION: self.__api_version}\n        elif HEADER_API_VERSION not in request_headers:\n            request_headers[HEADER_API_VERSION] = self.__api_version\n        if CONTENT_TYPE not in request_headers:\n            request_headers[CONTENT_TYPE] = APPLICATION_JSON\n        request = self.__prepare_request(api, params, body, request_headers)\n\n        method = self.api_info[api].method\n        url = request.build()\n\n        policy = self.get_retry_policy()\n        deadline = time.monotonic() + policy.total_timeout\n        try_count = 0\n        retry_index = 0\n        while True:\n            try_count += 1\n            try:\n                # if try_count == 1:\n                #     self.__logger.info(\"TLS client is trying to request {}.\".format(api))\n                response = self.session.request(method, url, headers=request.headers, data=request.body,\n                                                timeout=self.__timeout)\n            except Exception as e:\n                if self.__can_retry(try_count, policy) is False or self.__should_retry_exception(e) is False:\n                    raise TLSException(error_code=e.__class__.__name__, error_message=e.__str__())\n                sleep_seconds = self.__calc_backoff_seconds(policy, retry_index + 1, deadline)\n                if sleep_seconds <= 0:\n                    raise TLSException(error_code=\"RequestTimeout\",\n                                       error_message=\"Request exceeded retry total timeout\")\n                time.sleep(sleep_seconds)\n                retry_index += 1\n            else:\n                if response.status_code == 200:\n                    # self.__logger.info(\"TLS client successfully got the response for requesting {}\".format(api))\n                    return response\n                elif response.status_code in [429, 500, 502, 503] and self.__can_retry(try_count, policy):\n                    sleep_seconds = self.__calc_backoff_seconds(policy, retry_index + 1, deadline)\n                    if sleep_seconds > 0:\n                        time.sleep(sleep_seconds)\n                        retry_index += 1\n                        continue\n                    raise TLSException(response)\n                else:\n                    raise TLSException(response)\n\n    def reset_access_key_token(self, access_key_id: str, access_key_secret: str, security_token: str = None):\n        self.__access_key_id = access_key_id\n        self.__access_key_secret = access_key_secret\n        self.__security_token = security_token\n        self.service_info = self.get_service_info()\n\n    def reset_api_key(self, api_key: str):\n        self.__api_key = api_key\n\n    def set_timeout(self, timeout: int):\n        self.__timeout = timeout\n        self.service_info = self.get_service_info()\n\n    def set_retry_policy(self, policy):\n        if policy is None:\n            self.__retry_policy = None\n            return\n        self.__retry_policy = policy.normalize()\n\n    def get_retry_policy(self):\n        if self.__retry_policy is None:\n            return RetryPolicy.default_policy()\n        return self.__retry_policy.normalize()\n\n    def __can_retry(self, attempts, policy):\n        if policy.max_attempts <= 0:\n            return True\n        return attempts < policy.max_attempts\n\n    def __calc_backoff_seconds(self, policy, retry_index, deadline):\n        remaining = deadline - time.monotonic()\n        if remaining <= 0:\n            return 0\n        sleep_seconds = policy.backoff_seconds(retry_index)\n        if sleep_seconds > remaining:\n            sleep_seconds = remaining\n        return sleep_seconds\n\n    def __should_retry_exception(self, e):\n        try:\n            from requests import exceptions as req_exc\n        except Exception:\n            return True\n\n        return isinstance(e, (req_exc.Timeout, req_exc.ConnectionError, req_exc.ChunkedEncodingError,\n                              req_exc.ContentDecodingError))\n\n    def create_project(self, create_project_request: CreateProjectRequest) -> CreateProjectResponse:\n        if create_project_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=CREATE_PROJECT, body=create_project_request.get_api_input())\n\n        return CreateProjectResponse(response)\n\n    def delete_project(self, delete_project_request: DeleteProjectRequest) -> DeleteProjectResponse:\n        if delete_project_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DELETE_PROJECT, body=delete_project_request.get_api_input())\n\n        return DeleteProjectResponse(response)\n\n    def modify_project(self, modify_project_request: ModifyProjectRequest) -> ModifyProjectResponse:\n        if modify_project_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=MODIFY_PROJECT, body=modify_project_request.get_api_input())\n\n        return ModifyProjectResponse(response)\n\n    def describe_project(self, describe_project_request: DescribeProjectRequest) -> DescribeProjectResponse:\n        if describe_project_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_PROJECT, params=describe_project_request.get_api_input())\n\n        return DescribeProjectResponse(response)\n\n    def describe_projects(self, describe_projects_request: DescribeProjectsRequest) -> DescribeProjectsResponse:\n        if describe_projects_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_PROJECTS, params=describe_projects_request.get_api_input())\n\n        return DescribeProjectsResponse(response)\n\n    def create_topic(self, create_topic_request: CreateTopicRequest) -> CreateTopicResponse:\n        if create_topic_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=CREATE_TOPIC, body=create_topic_request.get_api_input())\n\n        return CreateTopicResponse(response)\n\n    def delete_topic(self, delete_topic_request: DeleteTopicRequest) -> DeleteTopicResponse:\n        if delete_topic_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DELETE_TOPIC, body=delete_topic_request.get_api_input())\n\n        return DeleteTopicResponse(response)\n\n    def modify_topic(self, modify_topic_request: ModifyTopicRequest) -> ModifyTopicResponse:\n        if modify_topic_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=MODIFY_TOPIC, body=modify_topic_request.get_api_input())\n\n        return ModifyTopicResponse(response)\n\n    def describe_topic(self, describe_topic_request: DescribeTopicRequest) -> DescribeTopicResponse:\n        if describe_topic_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_TOPIC, params=describe_topic_request.get_api_input())\n\n        return DescribeTopicResponse(response)\n\n    def describe_topics(self, describe_topics_request: DescribeTopicsRequest) -> DescribeTopicsResponse:\n        if describe_topics_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_TOPICS, params=describe_topics_request.get_api_input())\n\n        return DescribeTopicsResponse(response)\n\n    def create_index(self, create_index_request: CreateIndexRequest) -> CreateIndexResponse:\n        if create_index_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=CREATE_INDEX, body=create_index_request.get_api_input())\n\n        return CreateIndexResponse(response)\n\n    def delete_index(self, delete_index_request: DeleteIndexRequest) -> DeleteIndexResponse:\n        if delete_index_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DELETE_INDEX, body=delete_index_request.get_api_input())\n\n        return DeleteIndexResponse(response)\n\n    def modify_index(self, modify_index_request: ModifyIndexRequest) -> ModifyIndexResponse:\n        if modify_index_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=MODIFY_INDEX, body=modify_index_request.get_api_input())\n\n        return ModifyIndexResponse(response)\n\n    def describe_index(self, describe_index_request: DescribeIndexRequest) -> DescribeIndexResponse:\n        if describe_index_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_INDEX, params=describe_index_request.get_api_input())\n\n        return DescribeIndexResponse(response)\n\n    def create_processor(self, create_processor_request: CreateProcessorRequest) -> CreateProcessorResponse:\n        if create_processor_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=CREATE_PROCESSOR, body=create_processor_request.get_api_input())\n\n        return CreateProcessorResponse(response)\n\n    def delete_processor(self, delete_processor_request: DeleteProcessorRequest) -> DeleteProcessorResponse:\n        if delete_processor_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DELETE_PROCESSOR, body=delete_processor_request.get_api_input())\n\n        return DeleteProcessorResponse(response)\n\n    def modify_processor(self, modify_processor_request: ModifyProcessorRequest) -> ModifyProcessorResponse:\n        if modify_processor_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=MODIFY_PROCESSOR, body=modify_processor_request.get_api_input())\n\n        return ModifyProcessorResponse(response)\n\n    def describe_processor(self, describe_processor_request: DescribeProcessorRequest) -> DescribeProcessorResponse:\n        if describe_processor_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_PROCESSOR, params=describe_processor_request.get_api_input())\n\n        return DescribeProcessorResponse(response)\n\n    def describe_processors(self, describe_processors_request: DescribeProcessorsRequest) -> DescribeProcessorsResponse:\n        if describe_processors_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_PROCESSORS, params=describe_processors_request.get_api_input())\n\n        return DescribeProcessorsResponse(response)\n\n    def exec_processor(self, exec_processor_request: ExecProcessorRequest) -> ExecProcessorResponse:\n        if exec_processor_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=EXEC_PROCESSOR, body=exec_processor_request.get_api_input())\n\n        return ExecProcessorResponse(response)\n\n    def operate_processor(self, operate_processor_request: OperateProcessorRequest) -> OperateProcessorResponse:\n        if operate_processor_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=OPERATE_PROCESSOR, body=operate_processor_request.get_api_input())\n\n        return OperateProcessorResponse(response)\n\n    def describe_topics_by_processor(self, request: DescribeTopicsByProcessorRequest) -> DescribeTopicsByProcessorResponse:\n        if request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_TOPICS_BY_PROCESSOR, params=request.get_api_input())\n\n        return DescribeTopicsByProcessorResponse(response)\n\n    def bind_topic_processor(self, request: BindTopicProcessorRequest) -> BindTopicProcessorResponse:\n        if request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=BIND_TOPIC_PROCESSOR, body=request.get_api_input())\n\n        return BindTopicProcessorResponse(response)\n\n    def batch_bind_topics(self, request: BatchBindTopicsRequest) -> BatchBindTopicsResponse:\n        if request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=BATCH_BIND_TOPICS, body=request.get_api_input())\n\n        return BatchBindTopicsResponse(response)\n\n    def unbind_topic_processor(self, request: UnbindTopicProcessorRequest) -> UnbindTopicProcessorResponse:\n        if request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=UNBIND_TOPIC_PROCESSOR, body=request.get_api_input())\n\n        return UnbindTopicProcessorResponse(response)\n\n    def describe_processor_by_topic(self, request: DescribeProcessorByTopicRequest) -> DescribeProcessorResponse:\n        if request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_PROCESSOR_BY_TOPIC, params=request.get_api_input())\n\n        return DescribeProcessorResponse(response)\n\n    def describe_processor_bindings(self, request: DescribeProcessorBindingsRequest) -> DescribeProcessorBindingsResponse:\n        if request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_PROCESSOR_BINDINGS, params=request.get_api_input())\n\n        return DescribeProcessorBindingsResponse(response)\n\n    def describe_processor_functions(self, request: DescribeProcessorFunctionsRequest) -> DescribeProcessorFunctionsResponse:\n        if request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_PROCESSOR_FUNCTIONS, params=request.get_api_input())\n\n        return DescribeProcessorFunctionsResponse(response)\n\n    def put_logs(self, put_logs_request: PutLogsRequest) -> PutLogsResponse:\n        if put_logs_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        api_input = put_logs_request.get_api_input()\n        response = self.__request(api=PUT_LOGS, params=api_input[PARAMS], body=api_input[BODY],\n                                  request_headers=api_input[REQUEST_HEADERS])\n\n        return PutLogsResponse(response)\n\n    def put_logs_v2(self, request: PutLogsV2Request) -> PutLogsResponse:\n        log_group_list = LogGroupList()\n        log_group = log_group_list.log_groups.add()  # pylint: disable=no-member\n        if request.logs.source is not None:\n            log_group.source = request.logs.source\n        if request.logs.filename is not None:\n            log_group.filename = request.logs.filename\n        # 添加日志组标签\n        if request.logs.log_tags:\n            for key, value in request.logs.log_tags.items():\n                log_tag = log_group.log_tags.add()\n                log_tag.key = str(key)\n                log_tag.value = str(value)\n        for v in request.logs.logs:\n            new_log = log_group.logs.add()\n            new_log.time = v.time\n            # 设置纳秒级时间戳（如果提供）\n            if v.time_ns is not None and hasattr(new_log, \"TimeNs\"):\n                new_log.TimeNs = v.time_ns\n            for key in v.log_dict.keys():\n                log_content = new_log.contents.add()\n                log_content.key = str(key)\n                log_content.value = str(v.log_dict[key])\n        put_logs_request = PutLogsRequest(request.topic_id, log_group_list,\n                                         request.hash_key, request.compression, request.content_md5,\n                                         enable_nanosecond=request.enable_nanosecond)\n        return self.put_logs(put_logs_request)\n\n    def describe_cursor(self, describe_cursor_request: DescribeCursorRequest) -> DescribeCursorResponse:\n        if describe_cursor_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        api_input = describe_cursor_request.get_api_input()\n        response = self.__request(api=DESCRIBE_CURSOR, params=api_input[PARAMS], body=api_input[BODY])\n\n        return DescribeCursorResponse(response)\n\n    def consume_logs(self, consume_logs_request: ConsumeLogsRequest) -> ConsumeLogsResponse:\n        if consume_logs_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        api_input = consume_logs_request.get_api_input()\n        response = self.__request(api=CONSUME_LOGS, params=api_input[PARAMS], body=api_input[BODY],\n                                  request_headers=api_input[REQUEST_HEADERS])\n\n        return ConsumeLogsResponse(response, compression=consume_logs_request.compression)\n\n    def search_logs(self, search_logs_request: SearchLogsRequest) -> SearchLogsResponse:\n        if search_logs_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        headers = {HEADER_API_VERSION: API_VERSION_V_0_2_0}\n\n        response = self.__request(api=SEARCH_LOGS, body=search_logs_request.get_api_input(), request_headers=headers)\n\n        return SearchLogsResponse(response)\n\n    def search_logs_v2(self, search_logs_request: SearchLogsRequest) -> SearchLogsResponse:\n        \"\"\"\n        :param search_logs_request:搜索日志，按照api-version 0.3.0进行\n        :type search_logs_request:\n        :return: SearchLogsResponse:搜索日志\n        :rtype: SearchLogsResponse\n        \"\"\"\n        if search_logs_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        headers = {HEADER_API_VERSION: API_VERSION_V_0_3_0}\n        response = self.__request(api=SEARCH_LOGS, body=search_logs_request.get_api_input(), request_headers=headers)\n\n        return SearchLogsResponse(response)\n\n    def describe_log_context(self, describe_log_context_request: DescribeLogContextRequest) \\\n            -> DescribeLogContextResponse:\n        if describe_log_context_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_LOG_CONTEXT, body=describe_log_context_request.get_api_input())\n\n        return DescribeLogContextResponse(response)\n\n    def web_tracks(self, web_tracks_request: WebTracksRequest) -> WebTracksResponse:\n        if web_tracks_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        api_input = web_tracks_request.get_api_input()\n        response = self.__request(api=WEB_TRACKS, params=api_input[PARAMS], body=api_input[BODY],\n                                  request_headers=api_input[REQUEST_HEADERS])\n\n        return WebTracksResponse(response)\n\n    def describe_histogram(self, describe_histogram_request: DescribeHistogramRequest) -> DescribeHistogramResponse:\n        \"\"\"\n        Deprecated, use describe_histogram_v1 instead.\n        \"\"\"\n        if describe_histogram_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_HISTOGRAM, body=describe_histogram_request.get_api_input())\n\n        return DescribeHistogramResponse(response)\n\n    def describe_histogram_v1(self, describe_histogram_v1_request: DescribeHistogramV1Request) -> DescribeHistogramV1Response:\n        if describe_histogram_v1_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_HISTOGRAM_V1, body=describe_histogram_v1_request.get_api_input())\n\n        return DescribeHistogramV1Response(response)\n\n    def create_download_task(self, create_download_task_request: CreateDownloadTaskRequest) \\\n            -> CreateDownloadTaskResponse:\n        if create_download_task_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=CREATE_DOWNLOAD_TASK, body=create_download_task_request.get_api_input())\n\n        return CreateDownloadTaskResponse(response)\n\n    def describe_download_tasks(self, describe_download_tasks_request: DescribeDownloadTasksRequest) \\\n            -> DescribeDownloadTasksResponse:\n        if describe_download_tasks_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_DOWNLOAD_TASKS, params=describe_download_tasks_request.get_api_input())\n\n        return DescribeDownloadTasksResponse(response)\n\n    def describe_download_url(self, describe_download_url_request: DescribeDownloadUrlRequest) \\\n            -> DescribeDownloadUrlResponse:\n        if describe_download_url_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_DOWNLOAD_URL, params=describe_download_url_request.get_api_input())\n\n        return DescribeDownloadUrlResponse(response)\n\n    def describe_shards(self, describe_shards_request: DescribeShardsRequest) -> DescribeShardsResponse:\n        if describe_shards_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_SHARDS, params=describe_shards_request.get_api_input())\n\n        return DescribeShardsResponse(response)\n\n    def manual_shard_split(self, manual_shard_split_request: ManualShardSplitRequest) -> ManualShardSplitResponse:\n        if manual_shard_split_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=MANUAL_SHARD_SPLIT, body=manual_shard_split_request.get_api_input())\n\n        return ManualShardSplitResponse(response)\n\n    def create_host_group(self, create_host_group_request: CreateHostGroupRequest) -> CreateHostGroupResponse:\n        if create_host_group_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=CREATE_HOST_GROUP, body=create_host_group_request.get_api_input())\n\n        return CreateHostGroupResponse(response)\n\n    def delete_host_group(self, delete_host_group_request: DeleteHostGroupRequest) -> DeleteHostGroupResponse:\n        if delete_host_group_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DELETE_HOST_GROUP, body=delete_host_group_request.get_api_input())\n\n        return DeleteHostGroupResponse(response)\n\n    def modify_host_group(self, modify_host_group_request: ModifyHostGroupRequest) -> ModifyHostGroupResponse:\n        if modify_host_group_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=MODIFY_HOST_GROUP, body=modify_host_group_request.get_api_input())\n\n        return ModifyHostGroupResponse(response)\n\n    def describe_host_group(self, describe_host_group_request: DescribeHostGroupRequest) -> DescribeHostGroupResponse:\n        if describe_host_group_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_HOST_GROUP, params=describe_host_group_request.get_api_input())\n\n        return DescribeHostGroupResponse(response)\n\n    def describe_host_groups(self, describe_host_groups_request: DescribeHostGroupsRequest) \\\n            -> DescribeHostGroupsResponse:\n        if describe_host_groups_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_HOST_GROUPS, params=describe_host_groups_request.get_api_input())\n\n        return DescribeHostGroupsResponse(response)\n\n    def describe_hosts(self, describe_hosts_request: DescribeHostsRequest) -> DescribeHostsResponse:\n        if describe_hosts_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_HOSTS, params=describe_hosts_request.get_api_input())\n\n        return DescribeHostsResponse(response)\n\n    def delete_host(self, delete_host_request: DeleteHostRequest) -> DeleteHostResponse:\n        if delete_host_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DELETE_HOST, body=delete_host_request.get_api_input())\n\n        return DeleteHostResponse(response)\n\n    def describe_host_group_rules(self, describe_host_group_rules_request: DescribeHostGroupRulesRequest) \\\n            -> DescribeHostGroupRulesResponse:\n        if describe_host_group_rules_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_HOST_GROUP_RULES, params=describe_host_group_rules_request.get_api_input())\n\n        return DescribeHostGroupRulesResponse(response)\n\n    def modify_host_groups_auto_update(self, modify_host_groups_auto_update_request: ModifyHostGroupsAutoUpdateRequest) \\\n            -> ModifyHostGroupsAutoUpdateResponse:\n        if modify_host_groups_auto_update_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=MODIFY_HOST_GROUPS_AUTO_UPDATE,\n                                  body=modify_host_groups_auto_update_request.get_api_input())\n\n        return ModifyHostGroupsAutoUpdateResponse(response)\n\n    def delete_abnormal_hosts(self, delete_abnormal_hosts_request: DeleteAbnormalHostsRequest) \\\n            -> DeleteAbnormalHostsResponse:\n        if not delete_abnormal_hosts_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DELETE_ABNORMAL_HOSTS, body=delete_abnormal_hosts_request.get_api_input())\n\n        return DeleteAbnormalHostsResponse(response)\n\n    def create_rule(self, create_rule_request: CreateRuleRequest) -> CreateRuleResponse:\n        if create_rule_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=CREATE_RULE, body=create_rule_request.get_api_input())\n\n        return CreateRuleResponse(response)\n\n    def delete_rule(self, delete_rule_request: DeleteRuleRequest) -> DeleteRuleResponse:\n        if delete_rule_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DELETE_RULE, body=delete_rule_request.get_api_input())\n\n        return DeleteRuleResponse(response)\n\n    def modify_rule(self, modify_rule_request: ModifyRuleRequest) -> ModifyRuleResponse:\n        if modify_rule_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=MODIFY_RULE, body=modify_rule_request.get_api_input())\n\n        return ModifyRuleResponse(response)\n\n    def describe_rule(self, describe_rule_request: DescribeRuleRequest) -> DescribeRuleResponse:\n        if describe_rule_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_RULE, params=describe_rule_request.get_api_input())\n\n        return DescribeRuleResponse(response)\n\n    def describe_rules(self, describe_rules_request: DescribeRulesRequest) -> DescribeRulesResponse:\n        if describe_rules_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_RULES, params=describe_rules_request.get_api_input())\n\n        return DescribeRulesResponse(response)\n\n    def apply_rule_to_host_groups(self, apply_rule_to_host_groups_request: ApplyRuleToHostGroupsRequest) \\\n            -> ApplyRuleToHostGroupsResponse:\n        if apply_rule_to_host_groups_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=APPLY_RULE_TO_HOST_GROUPS, body=apply_rule_to_host_groups_request.get_api_input())\n\n        return ApplyRuleToHostGroupsResponse(response)\n\n    def delete_rule_from_host_groups(self, delete_rule_from_host_groups_request: DeleteRuleFromHostGroupsRequest) \\\n            -> DeleteRuleFromHostGroupsResponse:\n        if delete_rule_from_host_groups_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DELETE_RULE_FROM_HOST_GROUPS,\n                                  body=delete_rule_from_host_groups_request.get_api_input())\n\n        return DeleteRuleFromHostGroupsResponse(response)\n\n    def create_alarm_notify_group(self, create_alarm_notify_group_request: CreateAlarmNotifyGroupRequest) \\\n            -> CreateAlarmNotifyGroupResponse:\n        if create_alarm_notify_group_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=CREATE_ALARM_NOTIFY_GROUP, body=create_alarm_notify_group_request.get_api_input())\n\n        return CreateAlarmNotifyGroupResponse(response)\n\n    def delete_alarm_notify_group(self, delete_alarm_notify_group_request: DeleteAlarmNotifyGroupRequest) \\\n            -> DeleteAlarmNotifyGroupResponse:\n        if delete_alarm_notify_group_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DELETE_ALARM_NOTIFY_GROUP, body=delete_alarm_notify_group_request.get_api_input())\n\n        return DeleteAlarmNotifyGroupResponse(response)\n\n    def modify_alarm_notify_group(self, modify_alarm_notify_group_request: ModifyAlarmNotifyGroupRequest) \\\n            -> ModifyAlarmNotifyGroupResponse:\n        if modify_alarm_notify_group_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=MODIFY_ALARM_NOTIFY_GROUP, body=modify_alarm_notify_group_request.get_api_input())\n\n        return ModifyAlarmNotifyGroupResponse(response)\n\n    def describe_alarm_notify_groups(self, describe_alarm_notify_groups_request: DescribeAlarmNotifyGroupsRequest) \\\n            -> DescribeAlarmNotifyGroupsResponse:\n        if describe_alarm_notify_groups_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_ALARM_NOTIFY_GROUPS, params=describe_alarm_notify_groups_request.get_api_input())\n\n        return DescribeAlarmNotifyGroupsResponse(response)\n\n    def create_alarm(self, create_alarm_request: CreateAlarmRequest) -> CreateAlarmResponse:\n        if create_alarm_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=CREATE_ALARM, body=create_alarm_request.get_api_input())\n\n        return CreateAlarmResponse(response)\n\n    def delete_alarm(self, delete_alarm_request: DeleteAlarmRequest) -> DeleteAlarmResponse:\n        if delete_alarm_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DELETE_ALARM, body=delete_alarm_request.get_api_input())\n\n        return DeleteAlarmResponse(response)\n\n    def delete_alarm_content_template(self, delete_alarm_content_template_request: DeleteAlarmContentTemplateRequest) \\\n            -> DeleteAlarmContentTemplateResponse:\n        if delete_alarm_content_template_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DELETE_ALARM_CONTENT_TEMPLATE, body=delete_alarm_content_template_request.get_api_input())\n\n        return DeleteAlarmContentTemplateResponse(response)\n\n    def modify_alarm(self, modify_alarm_request: ModifyAlarmRequest) -> ModifyAlarmResponse:\n        if modify_alarm_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=MODIFY_ALARM, body=modify_alarm_request.get_api_input())\n\n        return ModifyAlarmResponse(response)\n\n    def describe_alarms(self, describe_alarms_request: DescribeAlarmsRequest) -> DescribeAlarmsResponse:\n        if describe_alarms_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_ALARMS, params=describe_alarms_request.get_api_input())\n\n        return DescribeAlarmsResponse(response)\n\n    def modify_alarm_content_template(self, modify_alarm_content_template_request: ModifyAlarmContentTemplateRequest) -> ModifyAlarmContentTemplateResponse:\n        if modify_alarm_content_template_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=MODIFY_ALARM_CONTENT_TEMPLATE,\n                                  body=modify_alarm_content_template_request.get_api_input())\n\n        return ModifyAlarmContentTemplateResponse(response)\n\n    def modify_alarm_webhook_integration(self, modify_alarm_webhook_integration_request: ModifyAlarmWebhookIntegrationRequest) -> ModifyAlarmWebhookIntegrationResponse:\n        if modify_alarm_webhook_integration_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=MODIFY_ALARM_WEBHOOK_INTEGRATION,\n                                  body=modify_alarm_webhook_integration_request.get_api_input())\n\n        return ModifyAlarmWebhookIntegrationResponse(response)\n\n    def open_kafka_consumer(self, open_kafka_consumer_request: OpenKafkaConsumerRequest) -> OpenKafkaConsumerResponse:\n        if open_kafka_consumer_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=OPEN_KAFKA_CONSUMER, body=open_kafka_consumer_request.get_api_input())\n\n        return OpenKafkaConsumerResponse(response)\n\n    def close_kafka_consumer(self, close_kafka_consumer_request: CloseKafkaConsumerRequest) \\\n            -> CloseKafkaConsumerResponse:\n        if close_kafka_consumer_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=CLOSE_KAFKA_CONSUMER, body=close_kafka_consumer_request.get_api_input())\n\n        return CloseKafkaConsumerResponse(response)\n\n    def describe_kafka_consumer(self, describe_kafka_consumer_request: DescribeKafkaConsumerRequest) \\\n            -> DescribeKafkaConsumerResponse:\n        if describe_kafka_consumer_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_KAFKA_CONSUMER, params=describe_kafka_consumer_request.get_api_input())\n\n        return DescribeKafkaConsumerResponse(response)\n\n    def create_consumer_group(self, create_consumer_group_request: CreateConsumerGroupRequest) \\\n            -> CreateConsumerGroupResponse:\n        if not create_consumer_group_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=CREATE_CONSUMER_GROUP, body=create_consumer_group_request.get_api_input())\n\n        return CreateConsumerGroupResponse(response)\n\n    def delete_consumer_group(self, delete_consumer_group_request: DeleteConsumerGroupRequest) \\\n            -> DeleteConsumerGroupResponse:\n        if not delete_consumer_group_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DELETE_CONSUMER_GROUP, body=delete_consumer_group_request.get_api_input())\n\n        return DeleteConsumerGroupResponse(response)\n\n    def modify_consumer_group(self, modify_consumer_group_request: ModifyConsumerGroupRequest) \\\n            -> ModifyConsumerGroupResponse:\n        if not modify_consumer_group_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=MODIFY_CONSUMER_GROUP, body=modify_consumer_group_request.get_api_input())\n\n        return ModifyConsumerGroupResponse(response)\n\n    def describe_consumer_groups(self, describe_consumer_groups_request: DescribeConsumerGroupsRequest) \\\n            -> DescribeConsumerGroupsResponse:\n        if not describe_consumer_groups_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_CONSUMER_GROUPS, params=describe_consumer_groups_request.get_api_input())\n\n        return DescribeConsumerGroupsResponse(response)\n\n    def consumer_heartbeat(self, consumer_heartbeat_request: ConsumerHeartbeatRequest) -> ConsumerHeartbeatResponse:\n        if not consumer_heartbeat_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=CONSUMER_HEARTBEAT, body=consumer_heartbeat_request.get_api_input())\n\n        return ConsumerHeartbeatResponse(response)\n\n    def modify_checkpoint(self, modify_checkpoint_request: ModifyCheckpointRequest) -> ModifyCheckpointResponse:\n        if not modify_checkpoint_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=MODIFY_CHECKPOINT, body=modify_checkpoint_request.get_api_input())\n\n        return ModifyCheckpointResponse(response)\n\n    def reset_checkpoint(self, reset_checkpoint_request: ResetCheckpointRequest) -> ResetCheckpointResponse:\n        if not reset_checkpoint_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=RESET_CHECKPOINT, body=reset_checkpoint_request.get_api_input())\n\n        return ResetCheckpointResponse(response)\n\n    def describe_checkpoint(self, describe_checkpoint_request: DescribeCheckpointRequest) -> DescribeCheckpointResponse:\n        if not describe_checkpoint_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        api_input = describe_checkpoint_request.get_api_input()\n        response = self.__request(api=DESCRIBE_CHECKPOINT, params=api_input[PARAMS], body=api_input[BODY])\n\n        return DescribeCheckpointResponse(response)\n\n    def add_tags_to_resource(self, add_tags_to_resource_request: AddTagsToResourceRequest) -> AddTagsToResourceResponse:\n        if not add_tags_to_resource_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=ADD_TAGS_TO_RESOURCE, body=add_tags_to_resource_request.get_api_input())\n\n        return AddTagsToResourceResponse(response)\n\n    def remove_tags_from_resource(self, remove_tags_from_resource_request: RemoveTagsFromResourceRequest) \\\n            -> RemoveTagsFromResourceResponse:\n        if not remove_tags_from_resource_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=REMOVE_TAGS_FROM_RESOURCE, body=remove_tags_from_resource_request.get_api_input())\n\n        return RemoveTagsFromResourceResponse(response)\n\n    def tag_resources(self, tag_resources_request: TagResourcesRequest) -> TagResourcesResponse:\n        if not tag_resources_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=TAG_RESOURCES, body=tag_resources_request.get_api_input())\n\n        return TagResourcesResponse(response)\n\n    def untag_resources(self, untag_resources_request: UntagResourcesRequest) -> UntagResourcesResponse:\n        if not untag_resources_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=UNTAG_RESOURCES, body=untag_resources_request.get_api_input())\n\n        return UntagResourcesResponse(response)\n\n    def create_import_task(self, create_import_task_request: CreateImportTaskRequest) -> CreateImportTaskResponse:\n        response = self.__request(api=CREATE_IMPORT_TASK, body=create_import_task_request.get_api_input())\n        return CreateImportTaskResponse(response)\n\n    def delete_import_task(self, delete_import_task_request: DeleteImportTaskRequest) -> DeleteImportTaskResponse:\n        if not delete_import_task_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DELETE_IMPORT_TASK, body=delete_import_task_request.get_api_input())\n        return DeleteImportTaskResponse(response)\n\n    def modify_import_task(self, modify_import_task_request: ModifyImportTaskRequest) -> ModifyImportTaskResponse:\n        response = self.__request(api=MODIFY_IMPORT_TASK, body=modify_import_task_request.get_api_input())\n        return ModifyImportTaskResponse(response)\n\n    def modify_schedule_sql_task(self, modify_schedule_sql_task_request: ModifyScheduleSqlTaskRequest) -> ModifyScheduleSqlTaskResponse:\n        if modify_schedule_sql_task_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=MODIFY_SCHEDULE_SQL_TASK, body=modify_schedule_sql_task_request.get_api_input())\n        return ModifyScheduleSqlTaskResponse(response)\n\n    def describe_import_task(self, describe_import_task_request: DescribeImportTaskRequest) -> DescribeImportTaskResponse:\n        if describe_import_task_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_IMPORT_TASK, params=describe_import_task_request.get_api_input())\n        return DescribeImportTaskResponse(response)\n\n    def describe_import_tasks(self, describe_import_tasks_request: DescribeImportTasksRequest) -> DescribeImportTasksResponse:\n        response = self.__request(api=DESCRIBE_IMPORT_TASKS, params=describe_import_tasks_request.get_api_input())\n        return DescribeImportTasksResponse(response)\n\n    def create_shipper(self, create_shipper_request: CreateShipperRequest) -> CreateShipperResponse:\n        response = self.__request(api=CREATE_SHIPPER, body=create_shipper_request.get_api_input())\n        return CreateShipperResponse(response)\n\n    def delete_shipper(self, delete_shipper_request: DeleteShipperRequest) -> DeleteShipperResponse:\n        if not delete_shipper_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DELETE_SHIPPER, body=delete_shipper_request.get_api_input())\n        return DeleteShipperResponse(response)\n\n    def delete_etl_task(self, delete_etl_task_request: DeleteETLTaskRequest) -> DeleteETLTaskResponse:\n        if not delete_etl_task_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DELETE_ETL_TASK, body=delete_etl_task_request.get_api_input())\n        return DeleteETLTaskResponse(response)\n\n    def modify_shipper(self, modify_shipper_request: ModifyShipperRequest) -> ModifyShipperResponse:\n        if not modify_shipper_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=MODIFY_SHIPPER, body=modify_shipper_request.get_api_input())\n        return ModifyShipperResponse(response)\n\n    def describe_shipper(self, describe_shipper_request: DescribeShipperRequest) -> DescribeShipperResponse:\n\n        if not describe_shipper_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_SHIPPER, params=describe_shipper_request.get_api_input())\n        return DescribeShipperResponse(response)\n\n    def describe_etl_task(self, describe_etl_task_request: DescribeETLTaskRequest) -> DescribeETLTaskResponse:\n        if describe_etl_task_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_ETL_TASK, params=describe_etl_task_request.get_api_input())\n        return DescribeETLTaskResponse(response)\n\n    def describe_etl_tasks(self, describe_etl_tasks_request: DescribeETLTasksRequest) -> DescribeETLTasksResponse:\n        \"\"\"查询 ETL 任务列表，对应服务端 DescribeETLTasks 接口。\"\"\"\n        if not describe_etl_tasks_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_ETL_TASKS, params=describe_etl_tasks_request.get_api_input())\n        return DescribeETLTasksResponse(response)\n\n    def create_trace_instance(self, create_trace_instance_request: CreateTraceInstanceRequest) -> CreateTraceInstanceResponse:\n        if create_trace_instance_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=CREATE_TRACE_INSTANCE, body=create_trace_instance_request.get_api_input())\n        return CreateTraceInstanceResponse(response)\n\n    def delete_trace_instance(self, delete_trace_instance_request: DeleteTraceInstanceRequest) -> DeleteTraceInstanceResponse:\n        if delete_trace_instance_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DELETE_TRACE_INSTANCE, body=delete_trace_instance_request.get_api_input())\n        return DeleteTraceInstanceResponse(response)\n\n    def describe_trace_instance(self, describe_trace_instance_request: DescribeTraceInstanceRequest) -> DescribeTraceInstanceResponse:\n        if describe_trace_instance_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_TRACE_INSTANCE,\n                                  params=describe_trace_instance_request.get_api_input())\n        return DescribeTraceInstanceResponse(response)\n\n    def describe_trace_instances(self, describe_trace_instances_request: DescribeTraceInstancesRequest) -> DescribeTraceInstancesResponse:\n        if describe_trace_instances_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_TRACE_INSTANCES,\n                                  params=describe_trace_instances_request.get_api_input())\n        return DescribeTraceInstancesResponse(response)\n\n    def active_tls_account(self) -> ActiveTlsAccountResponse:\n        \"\"\"\\\n        激活TLS账户\n        :return: ActiveTlsAccountResponse\n        :rtype: ActiveTlsAccountResponse\n        \"\"\"\n        response = self.__request(api=ACTIVE_TLS_ACCOUNT, body={})\n        return ActiveTlsAccountResponse(response)\n\n    def describe_shippers(self, describe_shippers_request: DescribeShippersRequest) -> DescribeShippersResponse:\n        response = self.__request(api=DESCRIBE_SHIPPERS, params=describe_shippers_request.get_api_input())\n        return DescribeShippersResponse(response)\n\n    def cancel_download_task(self, cancel_download_task_request) -> 'CancelDownloadTaskResponse':\n        if not cancel_download_task_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=CANCEL_DOWNLOAD_TASK, body=cancel_download_task_request.get_api_input())\n        return CancelDownloadTaskResponse(response)\n\n    def modify_trace_instance(self, modify_trace_instance_request: ModifyTraceInstanceRequest) -> ModifyTraceInstanceResponse:\n        \"\"\"修改 Trace 实例\n\n        :param modify_trace_instance_request: 修改请求\n        :type modify_trace_instance_request: ModifyTraceInstanceRequest\n        :return: 修改结果\n        :rtype: ModifyTraceInstanceResponse\n        \"\"\"\n        if not modify_trace_instance_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=MODIFY_TRACE_INSTANCE, body=modify_trace_instance_request.get_api_input())\n        return ModifyTraceInstanceResponse(response)\n\n    def search_traces(self, search_traces_request: SearchTracesRequest) -> SearchTracesResponse:\n        \"\"\"查询 Trace 列表\n\n        :param search_traces_request: 查询请求\n        :type search_traces_request: SearchTracesRequest\n        :return: 查询结果\n        :rtype: SearchTracesResponse\n        \"\"\"\n        if search_traces_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=SEARCH_TRACES, body=search_traces_request.get_api_input())\n        return SearchTracesResponse(response)\n\n    def get_account_status(self, get_account_status_request: GetAccountStatusRequest) -> GetAccountStatusResponse:\n        if get_account_status_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=GET_ACCOUNT_STATUS, params=get_account_status_request.get_api_input())\n        return GetAccountStatusResponse(response)\n\n    def describe_trace(self, describe_trace_request: DescribeTraceRequest) -> DescribeTraceResponse:\n        \"\"\"查询Trace详情\n\n        :param describe_trace_request: 查询Trace请求\n        :type describe_trace_request: DescribeTraceRequest\n        :return: Trace详情响应\n        :rtype: DescribeTraceResponse\n        \"\"\"\n        if describe_trace_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_TRACE, body=describe_trace_request.get_api_input())\n        return DescribeTraceResponse(response)\n\n    def create_etl_task(self, create_etl_task_request: CreateETLTaskRequest) -> CreateETLTaskResponse:\n        if create_etl_task_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=CREATE_ETL_TASK, body=create_etl_task_request.get_api_input())\n        return CreateETLTaskResponse(response)\n\n    def modify_etl_task(self, modify_etl_task_request: ModifyETLTaskRequest) -> ModifyETLTaskResponse:\n        if modify_etl_task_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=MODIFY_ETL_TASK, body=modify_etl_task_request.get_api_input())\n        return ModifyETLTaskResponse(response)\n\n    def modify_etl_task_status(self, modify_etl_task_status_request: ModifyETLTaskStatusRequest) -> ModifyETLTaskStatusResponse:\n        if modify_etl_task_status_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=MODIFY_ETL_TASK_STATUS, body=modify_etl_task_status_request.get_api_input())\n        return ModifyETLTaskStatusResponse(response)\n\n    def create_schedule_sql_task(self, create_schedule_sql_task_request: CreateScheduleSqlTaskRequest) -> CreateScheduleSqlTaskResponse:\n        if create_schedule_sql_task_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=CREATE_SCHEDULE_SQL_TASK, body=create_schedule_sql_task_request.get_api_input())\n        return CreateScheduleSqlTaskResponse(response)\n\n    def delete_schedule_sql_task(self, delete_schedule_sql_task_request: DeleteScheduleSqlTaskRequest) -> DeleteScheduleSqlTaskResponse:\n        if not delete_schedule_sql_task_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DELETE_SCHEDULE_SQL_TASK, body=delete_schedule_sql_task_request.get_api_input())\n        return DeleteScheduleSqlTaskResponse(response)\n\n    def describe_schedule_sql_task(self, describe_schedule_sql_task_request: DescribeScheduleSqlTaskRequest) -> DescribeScheduleSqlTaskResponse:\n        if describe_schedule_sql_task_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_SCHEDULE_SQL_TASK, params=describe_schedule_sql_task_request.get_api_input())\n        return DescribeScheduleSqlTaskResponse(response)\n\n    def describe_schedule_sql_tasks(self, describe_schedule_sql_tasks_request: DescribeScheduleSqlTasksRequest) -> DescribeScheduleSqlTasksResponse:\n        response = self.__request(api=DESCRIBE_SCHEDULE_SQL_TASKS, params=describe_schedule_sql_tasks_request.get_api_input())\n        return DescribeScheduleSqlTasksResponse(response)\n\n    def create_alarm_content_template(self,\n                                     create_alarm_content_template_request: CreateAlarmContentTemplateRequest) \\\n            -> CreateAlarmContentTemplateResponse:\n        \"\"\"创建告警通知内容模版\n\n        :param create_alarm_content_template_request: 创建告警通知内容模版请求\n        :type create_alarm_content_template_request: CreateAlarmContentTemplateRequest\n        :return: 创建告警通知内容模版响应\n        :rtype: CreateAlarmContentTemplateResponse\n        \"\"\"\n        if create_alarm_content_template_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\",\n                               error_message=\"Invalid request, please check it\")\n        response = self.__request(api=CREATE_ALARM_CONTENT_TEMPLATE,\n                                  body=create_alarm_content_template_request.get_api_input())\n        return CreateAlarmContentTemplateResponse(response)\n\n    def create_alarm_webhook_integration(self, create_alarm_webhook_integration_request: CreateAlarmWebhookIntegrationRequest) -> CreateAlarmWebhookIntegrationResponse:\n        \"\"\"创建告警Webhook集成配置\n\n        :param create_alarm_webhook_integration_request: 创建告警Webhook集成请求\n        :type create_alarm_webhook_integration_request: CreateAlarmWebhookIntegrationRequest\n        :return: 创建告警Webhook集成响应\n        :rtype: CreateAlarmWebhookIntegrationResponse\n        \"\"\"\n        if create_alarm_webhook_integration_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=CREATE_ALARM_WEBHOOK_INTEGRATION,\n                                  body=create_alarm_webhook_integration_request.get_api_input())\n        return CreateAlarmWebhookIntegrationResponse(response)\n\n    def delete_alarm_webhook_integration(self, delete_alarm_webhook_integration_request: DeleteAlarmWebhookIntegrationRequest) -> DeleteAlarmWebhookIntegrationResponse:\n        \"\"\"删除告警 Webhook 集成配置\n\n        :param delete_alarm_webhook_integration_request: 删除告警 Webhook 集成配置请求\n        :type delete_alarm_webhook_integration_request: DeleteAlarmWebhookIntegrationRequest\n        :return: 删除告警 Webhook 集成配置响应\n        :rtype: DeleteAlarmWebhookIntegrationResponse\n        \"\"\"\n        if delete_alarm_webhook_integration_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DELETE_ALARM_WEBHOOK_INTEGRATION,\n                                  body=delete_alarm_webhook_integration_request.get_api_input())\n        return DeleteAlarmWebhookIntegrationResponse(response)\n\n    def describe_alarm_content_templates(self, describe_alarm_content_templates_request: DescribeAlarmContentTemplatesRequest) -> DescribeAlarmContentTemplatesResponse:\n        \"\"\"查询告警通知内容模版列表\n\n        :param describe_alarm_content_templates_request: 查询请求\n        :type describe_alarm_content_templates_request: DescribeAlarmContentTemplatesRequest\n        :return: 查询结果\n        :rtype: DescribeAlarmContentTemplatesResponse\n        \"\"\"\n        if describe_alarm_content_templates_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_ALARM_CONTENT_TEMPLATES,\n                                  params=describe_alarm_content_templates_request.get_api_input())\n        return DescribeAlarmContentTemplatesResponse(response)\n\n    def describe_alarm_webhook_integrations(self,\n                                            describe_alarm_webhook_integrations_request: DescribeAlarmWebhookIntegrationsRequest) \\\n            -> DescribeAlarmWebhookIntegrationsResponse:\n        \"\"\"查询告警 Webhook 集成配置列表\"\"\"\n        if describe_alarm_webhook_integrations_request.check_validation() is False:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=DESCRIBE_ALARM_WEBHOOK_INTEGRATIONS,\n                                  params=describe_alarm_webhook_integrations_request.get_api_input())\n        return DescribeAlarmWebhookIntegrationsResponse(response)\n\n    def list_tags_for_resources(self, list_tags_for_resources_request: ListTagsForResourcesRequest) -> ListTagsForResourcesResponse:\n        \"\"\"查询资源标签\n\n        :param list_tags_for_resources_request: 查询请求\n        :return: 查询结果\n        \"\"\"\n        if not list_tags_for_resources_request.check_validation():\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"Invalid request, please check it\")\n        response = self.__request(api=LIST_TAGS_FOR_RESOURCES,\n                                  body=list_tags_for_resources_request.get_api_input())\n        return ListTagsForResourcesResponse(response)\n"
  },
  {
    "path": "volcengine/tls/__init__.py",
    "content": "VERSION = \"v3.3.2_20240229\"\n"
  },
  {
    "path": "volcengine/tls/const.py",
    "content": "# coding=utf-8\n\n# HTTP request and response.\nHTTP_GET = \"GET\"\nHTTP_POST = \"POST\"\nHTTP_DELETE = \"DELETE\"\nHTTP_PUT = \"PUT\"\n\nHTTP_PREFIX = \"http://\"\nHTTPS_PREFIX = \"https://\"\n\nCONTENT_TYPE = \"Content-Type\"\nAPPLICATION_JSON = \"application/json\"\nAPPLICATION_X_PROTOBUF = \"application/x-protobuf\"\nCONTENT_MD5 = \"Content-MD5\"\n\nX_SECURITY_TOKEN = \"X-Security-Token\"\nX_TLS_REQUEST_ID = \"X-Tls-Requestid\"\nX_TLS_ANONYMOUS_IDENTITY = \"x-tls-anonymous-identity\"\nX_TLS_HASHKEY = \"x-tls-hashkey\"\nX_TLS_COMPRESSTYPE = \"x-tls-compresstype\"\nX_TLS_BODYRAWSIZE = \"x-tls-bodyrawsize\"\nX_TLS_CURSOR = \"X-Tls-Cursor\"\nX_TLS_COUNT = \"X-Tls-Count\"\nLOG_SIZE = \"log-size\"\nLOG_COUNT = \"log-count\"\nEARLIEST_LOG_TIME = \"earliest-log-time\"\nLATEST_LOG_TIME = \"latest-log-time\"\n\nPARAMS = \"Params\"\nBODY = \"Body\"\nREQUEST_HEADERS = \"RequestHeaders\"\n\nOK_STATUS = 200\n\n# TLS APIs\nCREATE_PROJECT = \"/CreateProject\"\nDELETE_PROJECT = \"/DeleteProject\"\nMODIFY_PROJECT = \"/ModifyProject\"\nDESCRIBE_PROJECT = \"/DescribeProject\"\nDESCRIBE_PROJECTS = \"/DescribeProjects\"\n\nCREATE_TOPIC = \"/CreateTopic\"\nDELETE_TOPIC = \"/DeleteTopic\"\nMODIFY_TOPIC = \"/ModifyTopic\"\nDESCRIBE_TOPIC = \"/DescribeTopic\"\nDESCRIBE_TOPICS = \"/DescribeTopics\"\n\nPUT_LOGS = \"/PutLogs\"\nDESCRIBE_CURSOR = \"/DescribeCursor\"\nCONSUME_LOGS = \"/ConsumeLogs\"\nSEARCH_LOGS = \"/SearchLogs\"\nDESCRIBE_LOG_CONTEXT = \"/DescribeLogContext\"\nWEB_TRACKS = \"/WebTracks\"\nDESCRIBE_HISTOGRAM = \"/DescribeHistogram\"\nDESCRIBE_HISTOGRAM_V1 = \"/DescribeHistogramV1\"\nCREATE_DOWNLOAD_TASK = \"/CreateDownloadTask\"\nDESCRIBE_DOWNLOAD_TASKS = \"/DescribeDownloadTasks\"\nDESCRIBE_DOWNLOAD_URL = \"/DescribeDownloadUrl\"\n\nCREATE_INDEX = \"/CreateIndex\"\nDELETE_INDEX = \"/DeleteIndex\"\nMODIFY_INDEX = \"/ModifyIndex\"\nDESCRIBE_INDEX = \"/DescribeIndex\"\n\nCREATE_PROCESSOR = \"/CreateProcessor\"\nDELETE_PROCESSOR = \"/DeleteProcessor\"\nMODIFY_PROCESSOR = \"/ModifyProcessor\"\nDESCRIBE_PROCESSOR = \"/DescribeProcessor\"\nDESCRIBE_PROCESSORS = \"/DescribeProcessors\"\nEXEC_PROCESSOR = \"/ExecProcessor\"\nOPERATE_PROCESSOR = \"/OperateProcessor\"\nDESCRIBE_TOPICS_BY_PROCESSOR = \"/DescribeTopicsByProcessor\"\nBIND_TOPIC_PROCESSOR = \"/BindTopicProcessor\"\nBATCH_BIND_TOPICS = \"/BatchBindTopics\"\nUNBIND_TOPIC_PROCESSOR = \"/UnbindTopicProcessor\"\nDESCRIBE_PROCESSOR_BY_TOPIC = \"/DescribeProcessorByTopic\"\nDESCRIBE_PROCESSOR_BINDINGS = \"/DescribeProcessorBindings\"\nDESCRIBE_PROCESSOR_FUNCTIONS = \"/DescribeProcessorFunctions\"\n\nDESCRIBE_SHARDS = \"/DescribeShards\"\nMANUAL_SHARD_SPLIT = \"/ManualShardSplit\"\n\nCREATE_HOST_GROUP = \"/CreateHostGroup\"\nDELETE_HOST_GROUP = \"/DeleteHostGroup\"\nMODIFY_HOST_GROUP = \"/ModifyHostGroup\"\nDESCRIBE_HOST_GROUP = \"/DescribeHostGroup\"\nDESCRIBE_HOST_GROUPS = \"/DescribeHostGroups\"\nDESCRIBE_HOSTS = \"/DescribeHosts\"\nDELETE_HOST = \"/DeleteHost\"\nDESCRIBE_HOST_GROUP_RULES = \"/DescribeHostGroupRules\"\nMODIFY_HOST_GROUPS_AUTO_UPDATE = \"/ModifyHostGroupsAutoUpdate\"\n\nCREATE_RULE = \"/CreateRule\"\nDELETE_RULE = \"/DeleteRule\"\nMODIFY_RULE = \"/ModifyRule\"\nDESCRIBE_RULE = \"/DescribeRule\"\nDESCRIBE_RULES = \"/DescribeRules\"\nAPPLY_RULE_TO_HOST_GROUPS = \"/ApplyRuleToHostGroups\"\nDELETE_RULE_FROM_HOST_GROUPS = \"/DeleteRuleFromHostGroups\"\nDELETE_ABNORMAL_HOSTS = \"/DeleteAbnormalHosts\"\n\nCREATE_ALARM_NOTIFY_GROUP = \"/CreateAlarmNotifyGroup\"\nDELETE_ALARM_NOTIFY_GROUP = \"/DeleteAlarmNotifyGroup\"\nMODIFY_ALARM_NOTIFY_GROUP = \"/ModifyAlarmNotifyGroup\"\nDESCRIBE_ALARM_NOTIFY_GROUPS = \"/DescribeAlarmNotifyGroups\"\nCREATE_ALARM = \"/CreateAlarm\"\nDELETE_ALARM = \"/DeleteAlarm\"\nMODIFY_ALARM = \"/ModifyAlarm\"\nDESCRIBE_ALARMS = \"/DescribeAlarms\"\nMODIFY_ALARM_CONTENT_TEMPLATE = \"/ModifyAlarmContentTemplate\"\nDELETE_ALARM_CONTENT_TEMPLATE = \"/DeleteAlarmContentTemplate\"\nDESCRIBE_ALARM_CONTENT_TEMPLATES = \"/DescribeAlarmContentTemplates\"\nDESCRIBE_ALARM_WEBHOOK_INTEGRATIONS = \"/DescribeAlarmWebhookIntegrations\"\n\nMODIFY_ALARM_WEBHOOK_INTEGRATION = \"/ModifyAlarmWebhookIntegration\"\n\nOPEN_KAFKA_CONSUMER = \"/OpenKafkaConsumer\"\nCLOSE_KAFKA_CONSUMER = \"/CloseKafkaConsumer\"\nDESCRIBE_KAFKA_CONSUMER = \"/DescribeKafkaConsumer\"\n\nCREATE_CONSUMER_GROUP = \"/CreateConsumerGroup\"\nDELETE_CONSUMER_GROUP = \"/DeleteConsumerGroup\"\nMODIFY_CONSUMER_GROUP = \"/ModifyConsumerGroup\"\nDESCRIBE_CONSUMER_GROUPS = \"/DescribeConsumerGroups\"\nCONSUMER_HEARTBEAT = \"/ConsumerHeartbeat\"\nMODIFY_CHECKPOINT = \"/ModifyCheckPoint\"\nRESET_CHECKPOINT = \"/ResetCheckPoint\"\nDESCRIBE_CHECKPOINT = \"/DescribeCheckPoint\"\n\nADD_TAGS_TO_RESOURCE = \"/AddTagsToResource\"\nREMOVE_TAGS_FROM_RESOURCE = \"/RemoveTagsFromResource\"\nLIST_TAGS_FOR_RESOURCES = \"/ListTagsForResources\"\nTAG_RESOURCES = \"/TagResources\"\nUNTAG_RESOURCES = \"/UntagResources\"\n\nCREATE_IMPORT_TASK = \"/CreateImportTask\"\nDELETE_IMPORT_TASK = \"/DeleteImportTask\"\nMODIFY_IMPORT_TASK = \"/ModifyImportTask\"\nDESCRIBE_IMPORT_TASKS = \"/DescribeImportTasks\"\nDESCRIBE_IMPORT_TASK = \"/DescribeImportTask\"\n\nCREATE_SHIPPER = \"/CreateShipper\"\nDELETE_SHIPPER = \"/DeleteShipper\"\nMODIFY_SHIPPER = \"/ModifyShipper\"\nDESCRIBE_SHIPPERS = \"/DescribeShippers\"\nDESCRIBE_SHIPPER = \"/DescribeShipper\"\n\n# APIs of ETL tasks.\nCREATE_ETL_TASK = \"/CreateETLTask\"\nDELETE_ETL_TASK = \"/DeleteETLTask\"\nMODIFY_ETL_TASK = \"/ModifyETLTask\"\nDESCRIBE_ETL_TASK = \"/DescribeETLTask\"\nDESCRIBE_ETL_TASKS = \"/DescribeETLTasks\"\n\n# APIs of account.\nACTIVE_TLS_ACCOUNT = \"/ActiveTlsAccount\"\n\n# Trace APIs\nCREATE_TRACE_INSTANCE = \"/CreateTraceInstance\"\nDELETE_TRACE_INSTANCE = \"/DeleteTraceInstance\"\nMODIFY_TRACE_INSTANCE = \"/ModifyTraceInstance\"\nDESCRIBE_TRACE_INSTANCE = \"/DescribeTraceInstance\"\nDESCRIBE_TRACE_INSTANCES = \"/DescribeTraceInstances\"\nDESCRIBE_TRACE = \"/DescribeTrace\"\nSEARCH_TRACES = \"/SearchTraces\"\n\n# Trace related fields\nTRACE_INSTANCE_ID = \"TraceInstanceId\"\nTRACE_INSTANCE_NAME = \"TraceInstanceName\"\nTRACE_INSTANCES = \"TraceInstances\"\nTRACE_INSTANCE_STATUS = \"TraceInstanceStatus\"\nTRACE_TOPIC_ID = \"TraceTopicId\"\nTRACE_TOPIC_NAME = \"TraceTopicName\"\nDEPENDENCY_TOPIC_ID = \"DependencyTopicId\"\nDEPENDENCY_TOPIC_TOPIC_NAME = \"DependencyTopicTopicName\"\n\n# Trace data fields\nTRACE_ID = \"TraceId\"\nTRACE = \"Trace\"\nSPANS = \"Spans\"\nSPAN_ID = \"SpanId\"\nKIND = \"Kind\"\nRESOURCE = \"Resource\"\nATTRIBUTES = \"Attributes\"\nLINKS = \"Links\"\nEVENTS = \"Events\"\nINSTRUMENTATION_LIBRARY = \"InstrumentationLibrary\"\n\n# SearchTraces fields\nTRACE_INFOS = \"TraceInfos\"\n\nCANCEL_DOWNLOAD_TASK = \"/CancelDownloadTask\"\n\n# Schedule SQL task APIs\nCREATE_SCHEDULE_SQL_TASK = \"/CreateScheduleSqlTask\"\nDELETE_SCHEDULE_SQL_TASK = \"/DeleteScheduleSqlTask\"\nDESCRIBE_SCHEDULE_SQL_TASK = \"/DescribeScheduleSqlTask\"\nDESCRIBE_SCHEDULE_SQL_TASKS = \"/DescribeScheduleSqlTasks\"\nMODIFY_SCHEDULE_SQL_TASK = \"/ModifyScheduleSqlTask\"\n\n# TLS API fields\nDATA = \"Data\"\n\nREQUEST_ID = \"RequestId\"\nDESCRIPTION = \"Description\"\nNAME = \"Name\"\nPAGE_NUMBER = \"PageNumber\"\nPAGE_SIZE = \"PageSize\"\nTOTAL = \"Total\"\nITEMS = \"Items\"\nCREATE_TIME = \"CreateTime\"\nMODIFY_TIME = \"ModifyTime\"\n\nPROJECT_ID = \"ProjectId\"\nPROJECT_NAME = \"ProjectName\"\nREGION = \"Region\"\nIS_FULL_NAME = \"IsFullName\"\nPROJECTS = \"Projects\"\n\nTOPIC_ID = \"TopicId\"\nTOPIC_NAME = \"TopicName\"\nTTL = \"Ttl\"\nSHARD_COUNT = \"ShardCount\"\nTOPICS = \"Topics\"\nAUTO_SPLIT = \"AutoSplit\"\nMAX_SPLIT_SHARD = \"MaxSplitShard\"\nENABLE_TRACKING = \"EnableTracking\"\nTAGS = \"Tags\"\nLOG_PUBLIC_IP = \"LogPublicIP\"\nENABLE_HOT_TTL = \"EnableHotTtl\"\nHOT_TTL = \"HotTtl\"\nCOLD_TTL = \"ColdTtl\"\nARCHIVE_TTL = \"ArchiveTtl\"\nENCRYPT_CONF = \"EncryptConf\"\nBIND_PROCESSOR = \"BindProcessor\"\nPROCESSOR_ID = \"ProcessorID\"\nPROCESSOR_NAME = \"ProcessorName\"\nMETERING_MODE = \"MeteringMode\"\nTLS_VERSION = \"TLSVersion\"\nREGIONS = \"Regions\"\nFUZZY_SEARCH_KEY = \"FuzzySearchKey\"\nORDER_BY_PROJECT = \"OrderByProject\"\n\nFULL_TEXT = \"FullText\"\nKEY_VALUE = \"KeyValue\"\nUSER_INNER_KEY_VALUE = \"UserInnerKeyValue\"\nKEY = \"Key\"\nVALUE = \"Value\"\nCASE_SENSITIVE = \"CaseSensitive\"\nDELIMITER = \"Delimiter\"\nINCLUDE_CHINESE = \"IncludeChinese\"\nVALUE_TYPE = \"ValueType\"\nSQL_FLAG = \"SqlFlag\"\nINDEX_ALL = \"IndexAll\"\nJSON_KEYS = \"JsonKeys\"\nAUTO_INDEX_FLAG = \"AutoIndexFlag\"\nENABLE_AUTO_INDEX = \"EnableAutoIndex\"\nENABLE_PHRASE_INDEX = \"EnablePhraseIndex\"\nMAX_TEXT_LEN = \"MaxTextLen\"\n\nPROCESSOR_ID_HUMP = \"ProcessorId\"\nPROCESSOR_IDS = \"ProcessorIds\"\nPROCESSOR_TYPE = \"ProcessorType\"\nPROCESSOR_DSL_TYPE = \"ProcessorDSLType\"\nPROCESSOR_STATUS = \"ProcessorStatus\"\nDSL_CONTENT = \"DSLContent\"\nFAIL_STRATEGY = \"FailStrategy\"\nTIMEOUT_MS = \"TimeoutMs\"\nMAX_QPS = \"MaxQps\"\nEXEC_ACTION = \"ExecAction\"\nOPERATE_ACTION = \"OperateAction\"\nLOG_SAMPLE = \"LogSample\"\nPROCESSED_LOG = \"ProcessedLog\"\nEXEC_STATUS = \"ExecStatus\"\nERROR = \"Error\"\nTOPIC_IDS = \"TopicIds\"\nFUNCTIONS = \"Functions\"\n\nSHARD_ID = \"ShardId\"\nSHARDS = \"Shards\"\nLZ4 = \"lz4\"\nZLIB = \"zlib\"\nFROM = \"From\"\nCURSOR = \"Cursor\"\nEND_CURSOR = \"EndCursor\"\nLOG_GROUP_COUNT = \"LogGroupCount\"\nCOMPRESSION = \"Compression\"\nDATA_FORMAT = \"DataFormat\"\nSTART_TIME = \"StartTime\"\nEND_TIME = \"EndTime\"\nQUERY = \"Query\"\nLIMIT = \"Limit\"\nCONTEXT = \"Context\"\nSORT = \"Sort\"\nDESC = \"desc\"\nASC = \"asc\"\nSCHEMA = \"Schema\"\nTYPE = \"Type\"\nRESULT_STATUS = \"ResultStatus\"\nTASK_STATUS = \"TaskStatus\"\nHIT_COUNT = \"HitCount\"\nLIST_OVER = \"ListOver\"\nANALYSIS = \"Analysis\"\nCOUNT = \"Count\"\nLOGS = \"Logs\"\nANALYSIS_RESULT = \"AnalysisResult\"\nLOG_CONTEXT_INFOS = \"LogContextInfos\"\nPREV_OVER = \"PrevOver\"\nNEXT_OVER = \"NextOver\"\nSOURCE = \"Source\"\nCONTEXT_FLOW = \"ContextFlow\"\nPACKAGE_OFFSET = \"PackageOffset\"\nINTERVAL = \"Interval\"\nTOTAL_COUNT = \"TotalCount\"\nHISTOGRAM = \"Histogram\"\nTASK_ID = \"TaskId\"\nTASKS = \"Tasks\"\nALLOW_INCOMPLETE = \"AllowIncomplete\"\nDOWNLOAD_URL = \"DownloadUrl\"\n\nHOST_GROUP_ID = \"HostGroupId\"\nHOST_GROUP_IDS = \"HostGroupIds\"\nHOST_GROUP_NAME = \"HostGroupName\"\nHOST_GROUP_TYPE = \"HostGroupType\"\nIP = \"Ip\"\nIP_TYPE = \"IP\"\nLABEL = \"Label\"\nHOST_IP_LIST = \"HostIpList\"\nHOST_IDENTIFIER = \"HostIdentifier\"\nHOST_GROUP_INFO = \"HostGroupInfo\"\nHOST_GROUP_INFOS = \"HostGroupInfos\"\nHOST_INFOS = \"HostInfos\"\nHEARTBEAT_STATUS = \"HeartbeatStatus\"\n\nRULE_ID = \"RuleId\"\nPAUSE = \"Pause\"\nRULE_NAME = \"RuleName\"\nPATHS = \"Paths\"\nLOG_TYPE = \"LogType\"\nINPUT_TYPE = \"InputType\"\nEXTRACT_RULE = \"ExtractRule\"\nEXCLUDE_PATHS = \"ExcludePaths\"\nUSER_DEFINE_RULE = \"UserDefineRule\"\nLOG_SAMPLE = \"LogSample\"\nCONTAINER_RULE = \"ContainerRule\"\nRULE_INFO = \"RuleInfo\"\nRULE_INFOS = \"RuleInfos\"\nHOST_GROUP_HOSTS_RULES_INFO = \"HostGroupHostsRulesInfo\"\nHOST_GROUP_HOSTS_RULES_INFOS = \"HostGroupHostsRulesInfos\"\nENV_TAG = \"EnvTag\"\nKUBERNETES_RULE = \"KubernetesRule\"\nPARSE_PATH_RULE = \"ParsePathRule\"\nPATH_SAMPLE = \"PathSample\"\nBEGIN_REGEX = \"BeginRegex\"\nLOG_REGEX = \"LogRegex\"\nKEYS = \"Keys\"\nTIME_KEY = \"TimeKey\"\nTIME_FORMAT = \"TimeFormat\"\nFILTER_KEY_REGEX = \"FilterKeyRegex\"\nUN_MATCH_UP_LOAD_SWITCH = \"UnMatchUpLoadSwitch\"\nUN_MATCH_LOG_KEY = \"UnMatchLogKey\"\nREGEX = \"Regex\"\nSTREAM = \"Stream\"\nCONTAINER_NAME_REGEX = \"ContainerNameRegex\"\nINCLUDE_CONTAINER_LABEL_REGEX = \"IncludeContainerLabelRegex\"\nEXCLUDE_CONTAINER_LABEL_REGEX = \"ExcludeContainerLabelRegex\"\nINCLUDE_CONTAINER_ENV_REGEX = \"IncludeContainerEnvRegex\"\nEXCLUDE_CONTAINER_ENV_REGEX = \"ExcludeContainerEnvRegex\"\nLOG_TEMPLATE = \"LogTemplate\"\nFORMAT = \"Format\"\nHASH_KEY = \"HashKey\"\nSHARD_HASH_KEY = \"ShardHashKey\"\nENABLE_RAW_LOG = \"EnableRawLog\"\nFIELDS = \"Fields\"\nPLUGIN = \"Plugin\"\nPROCESSORS = \"processors\"\nADVANCED = \"Advanced\"\nCLOSE_INACTIVE = \"CloseInactive\"\nCLOSE_TIMEOUT = \"CloseTimeout\"\nCLOSE_REMOVED = \"CloseRemoved\"\nCLOSE_RENAMED = \"CloseRenamed\"\nCLOSE_EOF = \"CloseEOF\"\nNO_LINE_TERMINATOR_EOF_MAX_TIME = \"NoLineTerminatorEOFMaxTime\"\n\n\nALARM_NOTIFY_GROUP_ID = \"AlarmNotifyGroupId\"\n\nALARM_NOTIFY_GROUP_NAME = \"AlarmNotifyGroupName\"\nNOTIFY_TYPE = \"NotifyType\"\nTRIGGER = \"Trigger\"\nRECOVERY = \"Recovery\"\nRECEIVERS = \"Receivers\"\nRECEIVER_NAME = \"ReceiverName\"\nIAM_PROJECT_NAME = \"IamProjectName\"\nALARM_NOTIFY_GROUPS = \"AlarmNotifyGroups\"\nALARM_ID = \"AlarmId\"\nALARM_NAME = \"AlarmName\"\nQUERY_REQUEST = \"QueryRequest\"\nREQUEST_CYCLE = \"RequestCycle\"\nCONDITION = \"Condition\"\nALARM_PERIOD = \"AlarmPeriod\"\nALARM_NOTIFY_GROUP = \"AlarmNotifyGroup\"\nSTATUS = \"Status\"\nTRIGGER_PERIOD = \"TriggerPeriod\"\nUSER_DEFINE_MSG = \"UserDefineMsg\"\nJOIN_CONFIGURATIONS = \"JoinConfigurations\"\nTRIGGER_CONDITIONS = \"TriggerConditions\"\nSEND_RESOLVED = \"SendResolved\"\nALARMS = \"Alarms\"\nTIME = \"Time\"\nCRON_TAB = \"CronTab\"\nNUMBER = \"Number\"\nSTART_TIME_OFFSET = \"StartTimeOffset\"\nEND_TIME_OFFSET = \"EndTimeOffset\"\nTIME_SPAN_TYPE = \"TimeSpanType\"\nTRUNCATED_TIME = \"TruncatedTime\"\nEND_TIME_OFFSET_UNIT = \"EndTimeOffsetUnit\"\nSTART_TIME_OFFSET_UNIT = \"StartTimeOffsetUnit\"\nNO_DATA = \"NoData\"\nRECEIVER_TYPE = \"ReceiverType\"\nRECEIVER_NAMES = \"ReceiverNames\"\nRECEIVER_CHANNELS = \"ReceiverChannels\"\nWEBHOOK = \"Webhook\"\nALARM_PERIOD_DETAIL = \"AlarmPeriodDetail\"\nSMS = \"SMS\"\nPHONE = \"Phone\"\nEMAIL = \"Email\"\nGENERAL_WEBHOOK = \"GeneralWebhook\"\nGENERAL_WEBHOOK_URL = \"GeneralWebhookUrl\"\nGENERAL_WEBHOOK_BODY = \"GeneralWebhookBody\"\nGENERAL_WEBHOOK_METHOD = \"GeneralWebhookMethod\"\nGENERAL_WEBHOOK_HEADERS = \"GeneralWebhookHeaders\"\nALARM_WEBHOOK_AT_USERS = \"AlarmWebhookAtUsers\"\nALARM_WEBHOOK_IS_AT_ALL = \"AlarmWebhookIsAtAll\"\nALARM_WEBHOOK_AT_GROUPS = \"AlarmWebhookAtGroups\"\nALARM_WEBHOOK_INTEGRATION_NAME = \"AlarmWebhookIntegrationName\"\nNOTICE_RULES = \"NoticeRules\"\nRULE_NODE = \"RuleNode\"\nHAS_NEXT = \"HasNext\"\nHAS_END_NODE = \"HasEndNode\"\nRECEIVER_INFOS = \"ReceiverInfos\"\nCHILDREN = \"Children\"\n\nALLOW_CONSUME = \"AllowConsume\"\nCONSUME_TOPIC = \"ConsumeTopic\"\n\nPROJECT_ID_UPPERCASE = \"ProjectID\"\nCONSUMER_GROUP_NAME = \"ConsumerGroupName\"\nTOPIC_ID_LIST = \"TopicIDList\"\nHEARTBEAT_TTL = \"HeartbeatTTL\"\nORDERED_CONSUME = \"OrderedConsume\"\nCONSUMER_GROUPS = \"ConsumerGroups\"\nCONSUMER_NAME = \"ConsumerName\"\nTOPIC_ID_UPPERCASE = \"TopicID\"\nSHARD_ID_UPPERCASE = \"ShardID\"\nCHECKPOINT = \"Checkpoint\"\nUPDATE_TIME = \"UpdateTime\"\nCONSUMER = \"Consumer\"\nCONSUME_FROM = \"ConsumeFrom\"\nPOSITION = \"Position\"\nHEARTBEAT_INTERVAL_IN_SECOND = \"HeartbeatIntervalInSecond\"\nDATA_FETCH_INTERVAL_IN_MILLISECOND = \"DataFetchIntervalInMillisecond\"\nFLUSH_CHECKPOINT_INTERVAL_IN_SECOND = \"FlushCheckpointIntervalInSecond\"\nMAX_FETCH_LOG_GROUP_COUNT = \"MaxFetchLogGroupCount\"\nERROR_CONSUMER_GROUP_ALREADY_EXISTS = \"ConsumerGroupAlreadyExists\"\nERROR_CONSUMER_HEARTBEAT_EXPIRED = \"ConsumerHeartbeatExpired\"\nSTOP_TIMEOUT = \"StopTimeout\"\n\nRESOURCE_TYPE = \"ResourceType\"\nRESOURCES_LIST = \"ResourcesList\"\nRESOURCES_IDS = \"ResourcesIds\"\nTAG_KEY_LIST = \"TagKeyList\"\n\nTOS_SOURCE_INFO = \"TosSourceInfo\"\nKAFKA_SOURCE_INFO = \"KafkaSourceInfo\"\nIMPORT_SOURCE_INFO = \"ImportSourceInfo\"\nTARGET_INFO = \"TargetInfo\"\nTASK_INFO = \"TaskInfo\"\nTASK_STATISTICS = \"TaskStatistics\"\n\nSHIPPER_ID = \"ShipperId\"\nSHIPPER_NAME = \"ShipperName\"\nSHIPPER_TYPE = \"ShipperType\"\nSHIPPER_START_TIME = \"ShipperStartTime\"\nSHIPPER_END_TIME = \"ShipperEndTime\"\nDASHBOARD_ID = \"DashboardId\"\nROLE_TRN = \"RoleTrn\"\nSHIPPERS = \"Shippers\"\nCONTENT_INFO = \"ContentInfo\"\nTOS_SHIPPER_INFO = \"TosShipperInfo\"\nKAFKA_SHIPPER_INFO = \"KafkaShipperInfo\"\nJSON_INFO = \"JsonInfo\"\nCSV_INFO = \"CsvInfo\"\nTRN = \"trn\"\nFROM_TLS = \"from_tls\"\nENABLE_ENCRYPT_CONF = \"enable\"\nENCRYPT_TYPE = \"encrypt_type\"\nREGION_ID = \"region_id\"\nUSER_CMK_ID = \"user_cmk_id\"\nUSER_CMK_INFO = \"user_cmk_info\"\n\n# ETL Task fields\nDSL_TYPE = \"DSLType\"\nETL_STATUS = \"ETLStatus\"\nETL_LAST_ENABLE_TIME = \"LastEnableTime\"\nETL_TASK_ID = \"TaskId\"\nETL_TASK_TYPE = \"TaskType\"\nETL_SCRIPT = \"Script\"\nETL_SOURCE_TOPIC_ID = \"SourceTopicId\"\nETL_TARGET_RESOURCES = \"TargetResources\"\nETL_ENABLE = \"Enable\"\nETL_FROM_TIME = \"FromTime\"\nETL_TO_TIME = \"ToTime\"\nETL_TASK_DESCRIPTION = \"Description\"\n\n# Target resource fields\nTARGET_ALIAS = \"Alias\"\nTARGET_TOPIC_ID = \"TopicId\"\nTARGET_REGION = \"Region\"\nTARGET_ROLE_TRN = \"RoleTrn\"\n\n# GetAccountStatus API\nGET_ACCOUNT_STATUS = \"/GetAccountStatus\"\nARCH_VERSION = \"ArchVersion\"\n\n# ETL APIs\nMODIFY_ETL_TASK_STATUS = \"/ModifyETLTaskStatus\"\n\n# Schedule SQL task fields\nTASK_NAME = \"TaskName\"\nSOURCE_TOPIC_NAME = \"SourceTopicName\"\nDEST_REGION = \"DestRegion\"\nDEST_PROJECT_ID = \"DestProjectID\"\nDEST_TOPIC_ID = \"DestTopicID\"\nDEST_TOPIC_NAME = \"DestTopicName\"\nPROCESS_START_TIME = \"ProcessStartTime\"\nPROCESS_END_TIME = \"ProcessEndTime\"\nPROCESS_SQL_DELAY = \"ProcessSqlDelay\"\nPROCESS_TIME_WINDOW = \"ProcessTimeWindow\"\nCREATE_TIME_STAMP = \"CreateTimeStamp\"\nMODIFY_TIME_STAMP = \"ModifyTimeStamp\"\nCRON_TIME_ZONE = \"CronTimeZone\"\n\n# Alarm Content Template APIs\nCREATE_ALARM_CONTENT_TEMPLATE = \"/CreateAlarmContentTemplate\"\n\n# Alarm Content Template fields\nALARM_CONTENT_TEMPLATE_NAME = \"AlarmContentTemplateName\"\nALARM_CONTENT_TEMPLATE_ID = \"AlarmContentTemplateId\"\nALARM_CONTENT_TEMPLATES = \"AlarmContentTemplates\"\nIS_DEFAULT = \"IsDefault\"\nNEED_VALID_CONTENT = \"NeedValidContent\"\nDING_TALK = \"DingTalk\"\nLARK = \"Lark\"\nVMS = \"Vms\"\nWE_CHAT = \"WeChat\"\nDING_TALK_CONTENT_TEMPLATE = \"DingTalkContentTemplate\"\nEMAIL_CONTENT_TEMPLATE = \"EmailContentTemplate\"\nLARK_CONTENT_TEMPLATE = \"LarkContentTemplate\"\nSMS_CONTENT_TEMPLATE = \"SmsContentTemplate\"\nVMS_CONTENT_TEMPLATE = \"VmsContentTemplate\"\nWE_CHAT_CONTENT_TEMPLATE = \"WeChatContentTemplate\"\nWEBHOOK_CONTENT_TEMPLATE = \"WebhookContentTemplate\"\nTITLE = \"Title\"\nLOCALE = \"Locale\"\nCONTENT = \"Content\"\nSUBJECT = \"Subject\"\n\n# Alarm Webhook Integration APIs\nCREATE_ALARM_WEBHOOK_INTEGRATION = \"/CreateAlarmWebhookIntegration\"\nDELETE_ALARM_WEBHOOK_INTEGRATION = \"/DeleteAlarmWebhookIntegration\"\n\n# Alarm Webhook Integration fields\nWEBHOOK_HEADERS = \"WebhookHeaders\"\nALARM_WEBHOOK_INTEGRATION_ID = \"AlarmWebhookIntegrationId\"\nWEBHOOK_ID = \"WebhookID\"\nWEBHOOK_INTEGRATIONS = \"WebhookIntegrations\"\n"
  },
  {
    "path": "volcengine/tls/consumer/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/tls/consumer/checkpoint_manager.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport time\n\nfrom readerwriterlock import rwlock\n\nfrom volcengine.tls.consumer.consumer_model import CheckpointInfo\nfrom volcengine.tls.tls_exception import TLSException\nfrom volcengine.tls.tls_requests import ModifyCheckpointRequest\n\n\nclass CheckpointManager:\n    def __init__(self, consumer):\n        self.consumer_config = consumer.consumer_config\n        self.tls_service = consumer.tls_service\n\n        self.checkpoint_info_map = {}\n        self.map_lock = rwlock.RWLockFairD()\n\n        self.working_flag = True\n\n        self.logger = consumer.logger\n\n    def run(self):\n        self.logger.info(\"CheckpointManager for {} starts to work.\".format(self.consumer_config.consumer_name))\n\n        while self.working_flag:\n            try:\n                last_upload_time = time.time()\n                self.upload_checkpoint()\n\n                sleep_time = self.consumer_config.flush_checkpoint_interval_in_second - (time.time() - last_upload_time)\n                while sleep_time > 0 and self.working_flag:\n                    time.sleep(min(sleep_time, 1))\n                    sleep_time = self.consumer_config.flush_checkpoint_interval_in_second - (time.time() - last_upload_time)\n            except Exception as e:\n                self.logger.error(e)\n\n        while len(self.checkpoint_info_map) > 0:\n            try:\n                self.upload_checkpoint()\n            except Exception as e:\n                self.logger.error(e)\n\n        self.logger.info(\"CheckpointManager for {} stops.\".format(self.consumer_config.consumer_name))\n\n    def add_checkpoint(self, checkpoint_info: CheckpointInfo):\n        with self.map_lock.gen_wlock():\n            shard_info = checkpoint_info.shard_info\n            topic_id = shard_info.topic_id\n            shard_id = shard_info.shard_id\n\n            self.checkpoint_info_map[topic_id + str(shard_id)] = checkpoint_info\n\n    def upload_checkpoint(self):\n        with self.map_lock.gen_wlock():\n            checkpoint_snapshot = self.checkpoint_info_map.copy()\n        project_id = self.consumer_config.project_id\n        consumer_group_name = self.consumer_config.consumer_group_name\n        uploaded_checkpoint_map = {}\n\n        try:\n            for key, value in checkpoint_snapshot.items():\n                shard_info = value.shard_info\n                topic_id = shard_info.topic_id\n                shard_id = shard_info.shard_id\n                checkpoint = value.checkpoint\n\n                req = ModifyCheckpointRequest(project_id, topic_id, shard_id, consumer_group_name, checkpoint)\n                self.tls_service.modify_checkpoint(req)\n\n                uploaded_checkpoint_map[key] = value\n        except TLSException as e:\n            self.logger.error(\"Uploading checkpoint failed.\")\n            raise e\n        finally:\n            with self.map_lock.gen_wlock():\n                for key, value in uploaded_checkpoint_map.items():\n                    if value.checkpoint == self.checkpoint_info_map[key].checkpoint:\n                        del self.checkpoint_info_map[key]\n"
  },
  {
    "path": "volcengine/tls/consumer/consumer.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport abc\nimport threading\nimport time\nfrom typing import List\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.const import ERROR_CONSUMER_GROUP_ALREADY_EXISTS\nfrom volcengine.tls.consumer.checkpoint_manager import CheckpointManager\nfrom volcengine.tls.consumer.consumer_model import ConsumerConfig, ConsumerStatus\nfrom volcengine.tls.consumer.heartbeat_runner import HeartbeatRunner\nfrom volcengine.tls.consumer.log_consumer import LogConsumer\nfrom volcengine.tls.data import ConsumeShard\nfrom volcengine.tls.log_pb2 import LogGroupList\nfrom volcengine.tls.tls_exception import TLSException\nfrom volcengine.tls.tls_requests import CreateConsumerGroupRequest, DescribeConsumerGroupsRequest\nfrom volcengine.tls.util import get_logger\n\n\nclass LogProcessor:\n    @abc.abstractmethod\n    def process(self, topic_id: str, shard_id: int, log_group_list: LogGroupList):\n        raise NotImplementedError(\"Please implement the process method.\")\n\n\nclass TLSConsumer:\n    def __init__(self, consumer_config: ConsumerConfig, tls_service: TLSService, log_processor: LogProcessor):\n        consumer_config.validate()\n        self.logger = get_logger(\"tls-python-sdk-consumer-logger\")\n\n        self.consumer_config = consumer_config\n        self.tls_service = tls_service\n        self.log_processor = log_processor\n\n        self.working_flag = True\n        self.heartbeat_runner = HeartbeatRunner(self)\n        self.checkpoint_manager = CheckpointManager(self)\n        self.worker_map = {}\n\n        self.run_thread = None\n        self.heartbeat_thread = None\n        self.checkpoint_thread = None\n\n        self.logger.info(\"TLS consumer {} is initialized.\".format(self.consumer_config.consumer_name))\n\n    def start(self):\n        self.working_flag = True\n        self.heartbeat_runner.working_flag = True\n        self.checkpoint_manager.working_flag = True\n\n        self.init()\n\n        thread_name_prefix = self.consumer_config.consumer_name\n        self.heartbeat_thread = threading.Thread(target=self.heartbeat_runner.run,\n                                                 name=thread_name_prefix + \"-HeartbeatRunner\")\n        self.checkpoint_thread = threading.Thread(target=self.checkpoint_manager.run,\n                                                  name=thread_name_prefix + \"-CheckpointManager\")\n        self.run_thread = threading.Thread(target=self.run, name=thread_name_prefix)\n\n        self.heartbeat_thread.start()\n        self.checkpoint_thread.start()\n        self.run_thread.start()\n    \n    def stop(self):\n        stop_timeout = self.consumer_config.stop_timeout\n\n        self.working_flag = False\n        self.run_thread.join(timeout=stop_timeout)\n\n        current_time = time.time()\n        for worker in self.worker_map.values():\n            while True:\n                if not worker.thread_running_status:\n                    break\n                elapsed_time = time.time() - current_time\n                if elapsed_time >= stop_timeout:\n                    self.logger.error(\"Stopping the thread timeouts and has already wait for {} seconds.\".format(elapsed_time))\n                    break\n                time.sleep(1)\n        self.worker_map.clear()\n\n        self.checkpoint_manager.working_flag = False\n        self.checkpoint_thread.join(timeout=stop_timeout)\n\n        self.heartbeat_runner.working_flag = False\n        self.heartbeat_thread.join(timeout=stop_timeout)\n\n        self.logger.info(\"TLS consumer {} is stopped.\".format(self.consumer_config.consumer_name))\n    \n    def reset_access_key_token(self, access_key_id: str, access_key_secret: str, security_token: str = None):\n        self.tls_service.reset_access_key_token(access_key_id, access_key_secret, security_token)\n\n    def init(self):\n\n        req = DescribeConsumerGroupsRequest(project_id=self.consumer_config.project_id,\n                                           consumer_group_name=self.consumer_config.consumer_group_name)\n\n        res = self.tls_service.describe_consumer_groups(req)\n\n        for consumer_group in res.consumer_groups:\n            if consumer_group.consumer_group_name == self.consumer_config.consumer_group_name:\n                return\n\n        req = CreateConsumerGroupRequest(project_id=self.consumer_config.project_id,\n                                         consumer_group_name=self.consumer_config.consumer_group_name,\n                                         topic_id_list=self.consumer_config.topic_id_list,\n                                         heartbeat_ttl=3*self.consumer_config.heartbeat_interval_in_second,\n                                         ordered_consume=self.consumer_config.ordered_consume)\n        try:\n            self.tls_service.create_consumer_group(req)\n        except TLSException as e:\n            if ERROR_CONSUMER_GROUP_ALREADY_EXISTS not in e.error_code:\n                self.logger.error(e.__str__())\n                raise e\n\n    def run(self):\n        self.logger.info(\"Consumer {} starts to work.\".format(self.consumer_config.consumer_name))\n\n        while self.working_flag:\n            time.sleep(self.consumer_config.data_fetch_interval_in_millisecond / 1000)\n            if not self.working_flag:\n                break\n\n            for worker in self.worker_map.values():\n                if worker.load_status() == ConsumerStatus.WAIT_FOR_RESTART:\n                    try:\n                        self.heartbeat_runner.upload_heartbeat()\n                        self.checkpoint_manager.upload_checkpoint()\n                        break\n                    except Exception as e:\n                        self.logger.error(e)\n\n            shards = self.heartbeat_runner.get_shards()\n            self.handle_shards(shards)\n\n    def handle_shards(self, shards: List[ConsumeShard]):\n        if shards is None:\n            return\n\n        shard_map = {}\n        for shard in shards:\n            shard_map[shard.topic_id + str(shard.shard_id)] = shard\n\n        invalid_shards = []\n        for shard_name in self.worker_map.keys():\n            if shard_name not in shard_map:\n                invalid_shards.append(shard_name)\n        for shard_name in invalid_shards:\n            del self.worker_map[shard_name]\n\n        for key in shard_map.keys():\n            if key not in self.worker_map or self.worker_map[key].load_status() == ConsumerStatus.WAIT_FOR_RESTART:\n                self.worker_map[key] = LogConsumer(self, shard_map[key])\n\n        for worker in self.worker_map.values():\n            worker.run()\n"
  },
  {
    "path": "volcengine/tls/consumer/consumer_model.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nfrom enum import Enum\nfrom typing import List\n\nfrom volcengine.tls.const import *\nfrom volcengine.tls.data import ConsumeShard\nfrom volcengine.tls.tls_exception import TLSException\n\n\ndef check_empty_string(value: str, field: str):\n    if value is None or len(value) == 0:\n        raise TLSException(error_code=\"InvalidArgument\", error_message=\"{} should not be empty.\".format(field))\n\n\ndef check_int_value_range(value: int, lower: int, upper: int, field: str):\n    if value < lower or value > upper:\n        raise TLSException(error_code=\"InvalidArgument\",\n                           error_message=\"{} value should between {} and {}.\".format(field, lower, upper))\n\n\nclass ConsumerConfig:\n    def __init__(self, project_id: str, consumer_group_name: str, topic_id_list: List[str], consumer_name: str,\n                 consume_from: str = \"begin\", heartbeat_interval_in_second: int = 20,\n                 data_fetch_interval_in_millisecond: int = 200, flush_checkpoint_interval_in_second: int = 5,\n                 max_fetch_log_group_count: int = 100, ordered_consume: bool = False, stop_timeout: int = 15,\n                 compression: str = LZ4):\n        self.project_id = project_id\n        self.consumer_group_name = consumer_group_name\n        self.topic_id_list = topic_id_list\n        self.consumer_name = consumer_name\n\n        self.consume_from = consume_from\n        self.heartbeat_interval_in_second = heartbeat_interval_in_second\n        self.data_fetch_interval_in_millisecond = data_fetch_interval_in_millisecond\n        self.flush_checkpoint_interval_in_second = flush_checkpoint_interval_in_second\n        self.max_fetch_log_group_count = max_fetch_log_group_count\n        self.ordered_consume = ordered_consume\n\n        self.stop_timeout = stop_timeout\n        self.compression = compression\n\n    def validate(self):\n        check_empty_string(self.project_id, PROJECT_ID_UPPERCASE)\n        check_empty_string(self.consumer_group_name, CONSUMER_GROUP_NAME)\n        check_empty_string(self.consumer_name, CONSUMER_NAME)\n\n        if self.topic_id_list is None or len(self.topic_id_list) == 0:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=\"TopicIDList should not be empty.\")\n        for topic_id in self.topic_id_list:\n            check_empty_string(topic_id, TOPIC_ID_UPPERCASE)\n\n        check_empty_string(self.consumer_name, CONSUME_FROM)\n        check_int_value_range(self.heartbeat_interval_in_second, 1, 300, HEARTBEAT_INTERVAL_IN_SECOND)\n        check_int_value_range(self.data_fetch_interval_in_millisecond, 1, 300000, DATA_FETCH_INTERVAL_IN_MILLISECOND)\n        check_int_value_range(self.flush_checkpoint_interval_in_second, 1, 300, FLUSH_CHECKPOINT_INTERVAL_IN_SECOND)\n        check_int_value_range(self.max_fetch_log_group_count, 1, 1000, MAX_FETCH_LOG_GROUP_COUNT)\n        check_int_value_range(self.stop_timeout, 1, 300, STOP_TIMEOUT)\n\n\nclass CheckpointInfo:\n    def __init__(self, checkpoint: str, shard_info: ConsumeShard):\n        self.checkpoint = checkpoint\n        self.shard_info = shard_info\n\n\nclass ConsumerStatus(Enum):\n    PENDING = \"pending\"\n    INITIALIZING = \"Initializing\"\n    READY_TO_FETCH = \"ready_to_fetch\"\n    FETCHING = \"fetching\"\n    READY_TO_CONSUME = \"ready_to_consume\"\n    CONSUMING = \"consuming\"\n    BACKOFF = \"backoff\"\n    WAIT_FOR_RESTART = \"wait_for_restart\"\n"
  },
  {
    "path": "volcengine/tls/consumer/heartbeat_runner.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport time\nfrom typing import List\n\nfrom readerwriterlock import rwlock\n\nfrom volcengine.tls.data import ConsumeShard\nfrom volcengine.tls.tls_requests import ConsumerHeartbeatRequest\n\n\nclass HeartbeatRunner:\n    def __init__(self, consumer):\n        self.consumer_config = consumer.consumer_config\n        self.tls_service = consumer.tls_service\n\n        self.shards = []\n\n        self.lock = rwlock.RWLockFairD()\n        self.working_flag = True\n\n        self.logger = consumer.logger\n\n    def run(self):\n        self.logger.info(\"HeartbeatRunner for {} starts to work.\".format(self.consumer_config.consumer_name))\n\n        while self.working_flag:\n            try:\n                last_heartbeat_time = time.time()\n                self.upload_heartbeat()\n\n                sleep_time = self.consumer_config.heartbeat_interval_in_second - (time.time() - last_heartbeat_time)\n                while sleep_time > 0 and self.working_flag:\n                    time.sleep(min(sleep_time, 1))\n                    sleep_time = self.consumer_config.heartbeat_interval_in_second - (time.time() - last_heartbeat_time)\n            except Exception as e:\n                self.logger.error(e)\n\n        self.logger.info(\"HeartbeatRunner for {} stops.\".format(self.consumer_config.consumer_name))\n\n    def get_shards(self):\n        with self.lock.gen_rlock():\n            shards = self.shards\n\n        return shards\n\n    def set_shards(self, shards: List[ConsumeShard]):\n        with self.lock.gen_wlock():\n            self.shards = shards\n\n    def upload_heartbeat(self):\n        req = ConsumerHeartbeatRequest(project_id=self.consumer_config.project_id,\n                                       consumer_group_name=self.consumer_config.consumer_group_name,\n                                       consumer_name=self.consumer_config.consumer_name)\n        resp = self.tls_service.consumer_heartbeat(req)\n\n        self.set_shards(resp.shards)\n"
  },
  {
    "path": "volcengine/tls/consumer/log_consumer.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport threading\nimport time\n\nfrom readerwriterlock import rwlock\n\nfrom volcengine.tls.const import LZ4, ERROR_CONSUMER_HEARTBEAT_EXPIRED\nfrom volcengine.tls.consumer.consumer_model import ConsumerStatus, CheckpointInfo\nfrom volcengine.tls.tls_exception import TLSException\nfrom volcengine.tls.tls_requests import DescribeCheckpointRequest, DescribeCursorRequest, ConsumeLogsRequest\n\n\nclass LogConsumer:\n    def __init__(self, consumer, consume_shard):\n        self.consumer_config = consumer.consumer_config\n        self.tls_service = consumer.tls_service\n        self.log_processor = consumer.log_processor\n\n        self.checkpoint_manager = consumer.checkpoint_manager\n\n        self.status = ConsumerStatus.PENDING\n        self.shard = consume_shard\n\n        self.next_checkpoint = None\n        self.curr_log_group_list = None\n        self.last_backoff_time = time.time()\n\n        self.status_lock = rwlock.RWLockFairD()\n        self.thread_running_status = False\n        self.logger = consumer.logger\n\n    def run(self):\n        status = self.load_status()\n\n        if status == ConsumerStatus.PENDING:\n            self.set_status(ConsumerStatus.INITIALIZING)\n            self.thread_running_status = True\n            threading.Thread(target=self.run_with_status,\n                             args=(self.init, ConsumerStatus.READY_TO_FETCH, ConsumerStatus.PENDING)).start()\n        elif status == ConsumerStatus.READY_TO_FETCH:\n            self.set_status(ConsumerStatus.FETCHING)\n            self.thread_running_status = True\n            threading.Thread(target=self.run_with_status,\n                             args=(self.fetch_data, ConsumerStatus.READY_TO_CONSUME, ConsumerStatus.READY_TO_FETCH)).start()\n        elif status == ConsumerStatus.READY_TO_CONSUME:\n            self.set_status(ConsumerStatus.CONSUMING)\n            self.thread_running_status = True\n            threading.Thread(target=self.run_with_status,\n                             args=(self.consume, ConsumerStatus.READY_TO_FETCH, ConsumerStatus.READY_TO_CONSUME)).start()\n        elif status == ConsumerStatus.BACKOFF:\n            if self.backoff():\n                self.set_status(ConsumerStatus.BACKOFF)\n            else:\n                self.set_status(ConsumerStatus.READY_TO_FETCH)\n\n    def run_with_status(self, func, done_status, err_status):\n        try:\n            func()\n            self.set_status(done_status)\n        except TLSException as e:\n            if ERROR_CONSUMER_HEARTBEAT_EXPIRED in e.error_code:\n                self.set_status(ConsumerStatus.WAIT_FOR_RESTART)\n            elif e.http_code == 429:\n                self.set_status(ConsumerStatus.BACKOFF)\n            else:\n                self.logger.error(e)\n                self.set_status(err_status)\n        except Exception as e:\n            self.logger.error(e)\n            self.set_status(err_status)\n        finally:\n            self.thread_running_status = False\n\n    def set_status(self, status):\n        with self.status_lock.gen_wlock():\n            self.status = status\n\n    def load_status(self):\n        with self.status_lock.gen_rlock():\n            status = self.status\n\n        return status\n\n    def init(self):\n        project_id = self.consumer_config.project_id\n        topic_id = self.shard.topic_id\n        shard_id = self.shard.shard_id\n        consumer_group_name = self.consumer_config.consumer_group_name\n\n        req = DescribeCheckpointRequest(project_id, topic_id, shard_id, consumer_group_name)\n        resp = self.tls_service.describe_checkpoint(req)\n\n        if resp.checkpoint is not None and len(resp.checkpoint) > 0:\n            self.next_checkpoint = resp.checkpoint\n            return\n\n        req = DescribeCursorRequest(topic_id, shard_id, from_time=self.consumer_config.consume_from)\n        resp = self.tls_service.describe_cursor(req)\n\n        self.next_checkpoint = resp.cursor\n\n    def fetch_data(self):\n        self.last_backoff_time = time.time()\n        req = ConsumeLogsRequest(topic_id=self.shard.topic_id,\n                                 shard_id=self.shard.shard_id,\n                                 cursor=self.next_checkpoint,\n                                 log_group_count=self.consumer_config.max_fetch_log_group_count,\n                                 compression=self.consumer_config.compression,\n                                 consumer_group_name=self.consumer_config.consumer_group_name,\n                                 consumer_name=self.consumer_config.consumer_name)\n        resp = self.tls_service.consume_logs(req)\n\n        self.curr_log_group_list = resp.get_pb_message()\n        self.next_checkpoint = resp.get_x_tls_cursor()\n\n    def consume(self):\n        if self.curr_log_group_list is None or len(self.curr_log_group_list.log_groups) == 0:\n            return\n\n        self.log_processor.process(topic_id=self.shard.topic_id, shard_id=self.shard.shard_id,\n                                   log_group_list=self.curr_log_group_list)\n\n        self.checkpoint_manager.add_checkpoint(CheckpointInfo(self.next_checkpoint, self.shard))\n\n    def backoff(self):\n        return time.time() - self.last_backoff_time < 5\n"
  },
  {
    "path": "volcengine/tls/data.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport re\nfrom typing import List, Dict\n\nfrom volcengine.tls.const import *\n\n\ndef pascal_to_snake(pascal: str) -> str:\n    # 先在小写/数字与大写字母之间插入下划线，再在连续大写后接小写的边界插入下划线，\n    # 以便正确处理诸如 ID、DSL 等缩略词。\n    s1 = re.sub(r\"([a-z0-9])([A-Z])\", r\"\\1_\\2\", pascal)\n    s2 = re.sub(r\"([A-Z]+)([A-Z][a-z0-9])\", r\"\\1_\\2\", s1)\n    return s2.lower().strip('_')\n\n\ndef snake_to_pascal(snake: str) -> str:\n    return ''.join(word.title() for word in snake.split('_'))\n\n\nclass TLSData:\n    @classmethod\n    def set_attributes(cls, data: dict):\n        if data is None or len(data) == 0:\n            return None\n\n        tls_data_dict = {}\n\n        for key in data.keys():\n            tls_data_dict[pascal_to_snake(key)] = data[key]\n\n        tls_data = cls()\n\n        for key in tls_data.__dict__.keys():\n            tls_data.__dict__[key] = None\n\n        tls_data.__dict__.update(tls_data_dict)\n\n        return tls_data\n\n    def json(self):\n        json_data = {}\n\n        for key in self.__dict__.keys():\n            if self.__dict__[key] is not None:\n                json_data[snake_to_pascal(key)] = self.__dict__[key]\n\n        return json_data\n\n\nclass TagInfo(TLSData):\n    def __init__(self, key: str, value: str = None):\n        \"\"\"\n        :param key: 标签Key的值\n        :param value: 标签Value的值\n        \"\"\"\n        self.key = key\n        self.value = value\n\n\nclass ProjectInfo(TLSData):\n    def __init__(self, project_name: str = None, project_id: str = None, description: str = None,\n                 create_time: str = None, inner_net_domain: str = None, topic_count: int = None,\n                 iam_project_name: str = None, tags: List[TagInfo] = None):\n        self.project_name = project_name\n        self.project_id = project_id\n        self.description = description\n        self.create_time = create_time\n        self.inner_net_domain = inner_net_domain\n        self.topic_count = topic_count\n        self.iam_project_name = iam_project_name\n        self.tags = tags\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        project_info = super(ProjectInfo, cls).set_attributes(data)\n\n        if TAGS in data:\n            tags = data[TAGS]\n            project_info.tags = []\n            for i in range(len(tags)):\n                project_info.tags.append(  # pylint: disable=no-member\n                    TagInfo(tags[i].get(KEY), tags[i].get(VALUE)))\n\n        return project_info\n\n    def get_inner_net_domain(self):\n        \"\"\"\n        :return:内网连接域名\n        :rtype:str\n        \"\"\"\n        return self.inner_net_domain\n\n    def get_create_time(self):\n        \"\"\"\n        :return: 创建时间\n        :rtype: str\n        \"\"\"\n        return self.create_time\n\n    def get_project_id(self):\n        \"\"\"\n        :return: 日志项目 ID\n        :rtype: str\n        \"\"\"\n        return self.project_id\n\n    def get_description(self):\n        \"\"\"\n        :return:日志项目描述\n        :rtype: str\n        \"\"\"\n        return self.description\n\n    def get_project_name(self):\n        \"\"\"\n        :return:日志项目名称\n        :rtype:str\n        \"\"\"\n        return self.project_name\n\n    def get_topic_count(self):\n        \"\"\"\n        :return:日志项目下的日志主题数量\n        :rtype:int\n        \"\"\"\n        return self.topic_count\n\n    def get_iam_project_name(self):\n        \"\"\"\n        :return: 日志项目所属的IAM项目\n        :rtype: str\n        \"\"\"\n        return self.iam_project_name\n\n    def get_tags(self):\n        \"\"\"\n        :return: 日志项目标签信息\n        :rtype: List[TagInfo]\n        \"\"\"\n        return self.tags\n\n\nclass EncryptUserCmkConf(TLSData):\n    def __init__(self, user_cmk_id: str, trn: str, region_id: str, from_tls: bool = None):\n        self.user_cmk_id = user_cmk_id\n        self.trn = trn\n        self.region_id = region_id\n        self.from_tls = from_tls\n\n    @classmethod\n    def set_attributes(cls, data):\n        user_cmk_id = data.get(USER_CMK_ID)\n        trn = data.get(TRN)\n        region_id = data.get(REGION_ID)\n        from_tls = data.get(FROM_TLS)\n\n        return cls(user_cmk_id, trn, region_id, from_tls)\n\n    def json(self):\n        res = {\n            USER_CMK_ID: self.user_cmk_id,\n            TRN: self.trn,\n            REGION_ID: self.region_id,\n        }\n        if self.from_tls is not None:\n            res[FROM_TLS] = self.from_tls\n        return res\n\n\nclass EncryptConf(TLSData):\n    def __init__(self, enable: bool = False, encrypt_type: str = \"default\", user_cmk_info: EncryptUserCmkConf = None):\n        self.enable = enable\n        self.encrypt_type = encrypt_type\n        self.user_cmk_info = user_cmk_info\n\n    @classmethod\n    def set_attributes(cls, data):\n        enable = data.get(ENABLE_ENCRYPT_CONF)\n        encrypt_type = data.get(ENCRYPT_TYPE)\n        user_cmk_info = None\n        user_cmk_info_data = data.get(USER_CMK_INFO)\n        if user_cmk_info_data is not None and isinstance(user_cmk_info_data, dict):\n            user_cmk_info = EncryptUserCmkConf.set_attributes(data=user_cmk_info_data)\n\n        return cls(enable, encrypt_type, user_cmk_info)\n\n    def json(self):\n        return {\n            ENABLE_ENCRYPT_CONF: self.enable,\n            ENCRYPT_TYPE: self.encrypt_type,\n            USER_CMK_INFO: self.user_cmk_info.json() if self.user_cmk_info is not None else None,\n        }\n\n\nclass BindProcessor(TLSData):\n    def __init__(self, processor_id: str = None, processor_name: str = None):\n        self.processor_id = processor_id\n        self.processor_name = processor_name\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        processor_id = data.get(PROCESSOR_ID)\n        processor_name = data.get(PROCESSOR_NAME)\n        return cls(processor_id, processor_name)\n\n    def json(self):\n        return {\n            PROCESSOR_ID: self.processor_id,\n            PROCESSOR_NAME: self.processor_name,\n        }\n\n\nclass ProcessorInfo(TLSData):\n    def __init__(self, project_name: str = None, processor_id: str = None,\n                 project_id: str = None, account_id: str = None,\n                 processor_name: str = None, description: str = None,\n                 dsl_content: str = None, processor_type: str = None,\n                 processor_dsl_type: str = None, processor_status: str = None,\n                 fail_strategy: str = None, timeout_ms: int = None,\n                 max_qps: int = None, create_time: str = None,\n                 update_time: str = None):\n        self.project_name = project_name\n        self.processor_id = processor_id\n        self.project_id = project_id\n        self.account_id = account_id\n        self.processor_name = processor_name\n        self.description = description\n        self.dsl_content = dsl_content\n        self.processor_type = processor_type\n        self.processor_dsl_type = processor_dsl_type\n        self.processor_status = processor_status\n        self.fail_strategy = fail_strategy\n        self.timeout_ms = timeout_ms\n        self.max_qps = max_qps\n        self.create_time = create_time\n        self.update_time = update_time\n\n\nclass ProcessorTopicInfo(TLSData):\n    def __init__(self, topic_id: str = None, topic_name: str = None):\n        self.topic_id = topic_id\n        self.topic_name = topic_name\n\n\nclass ProcessorBinding(TLSData):\n    def __init__(self, topic_id: str = None, processor_id: str = None):\n        self.topic_id = topic_id\n        self.processor_id = processor_id\n\n\nclass ProcessorFunctionArgument(TLSData):\n    def __init__(self, index: int = None, name: str = None,\n                 argument_type: str = None, description: str = None,\n                 is_necessary: bool = None, default_value: str = None):\n        self.index = index\n        self.name = name\n        self.argument_type = argument_type\n        self.description = description\n        self.is_necessary = is_necessary\n        self.default_value = default_value\n\n\nclass ProcessorFunctionSample(TLSData):\n    def __init__(self, index: int = None, log: List[Dict] = None,\n                 script: str = None, result: List[Dict] = None,\n                 description: str = None):\n        self.index = index\n        self.log = log\n        self.script = script\n        self.result = result\n        self.description = description\n\n\nclass ProcessorFunctionInfo(TLSData):\n    def __init__(self, name: str = None, function_type: str = None,\n                 method_signature: str = None, description: str = None,\n                 samples: List[ProcessorFunctionSample] = None,\n                 arguments: List[ProcessorFunctionArgument] = None):\n        self.name = name\n        self.function_type = function_type\n        self.method_signature = method_signature\n        self.description = description\n        self.samples = samples\n        self.arguments = arguments\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        info = super(ProcessorFunctionInfo, cls).set_attributes(data)\n        if info is None:\n            return None\n        info.samples = [\n            ProcessorFunctionSample.set_attributes(sample)\n            for sample in (info.samples or [])  # pylint: disable=no-member\n        ]\n        info.arguments = [\n            ProcessorFunctionArgument.set_attributes(argument)\n            for argument in (info.arguments or [])  # pylint: disable=no-member\n        ]\n        return info\n\n\nclass TopicInfo(TLSData):\n    def __init__(self, topic_name: str = None, topic_id: str = None, project_id: str = None, ttl: int = None,\n                 create_time: str = None, modify_time: str = None, shard_count: int = None, description: str = None,\n                 auto_split: bool = None, max_split_shard: int = None, enable_tracking: bool = None,\n                 time_key: str = None, time_format: str = None, tags: List[TagInfo] = None, log_public_ip: bool = None,\n                 enable_hot_ttl: bool = None, hot_ttl: int = None, cold_ttl: int = None, archive_ttl: int = None,\n                 encrypt_conf: EncryptConf = None, bind_processor=None, metering_mode: str = None,\n                 project_name: str = None, region: str = None, tls_version: str = None):\n        self.topic_name = topic_name\n        self.topic_id = topic_id\n        self.project_id = project_id\n        self.ttl = ttl\n        self.create_time = create_time\n        self.modify_time = modify_time\n        self.shard_count = shard_count\n        self.description = description\n        self.auto_split = auto_split\n        self.max_split_shard = max_split_shard\n        self.enable_tracking = enable_tracking\n        self.time_key = time_key\n        self.time_format = time_format\n        self.tags = tags\n        self.log_public_ip = log_public_ip\n        self.enable_hot_ttl = enable_hot_ttl\n        self.hot_ttl = hot_ttl\n        self.cold_ttl = cold_ttl\n        self.archive_ttl = archive_ttl\n        self.encrypt_conf = encrypt_conf\n        self.bind_processor = bind_processor\n        self.metering_mode = metering_mode\n        self.project_name = project_name\n        self.region = region\n        self.tls_version = tls_version\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        bind_processor = None\n        bind_processor_data = data.get(BIND_PROCESSOR)\n        if bind_processor_data is not None and isinstance(bind_processor_data, dict):\n            bind_processor = BindProcessor.set_attributes(data=bind_processor_data)\n        metering_mode = data.get(METERING_MODE)\n        topic_name = data.get(TOPIC_NAME)\n        topic_id = data.get(TOPIC_ID)\n        project_id = data.get(PROJECT_ID)\n        project_name = data.get(PROJECT_NAME)\n        region = data.get(REGION)\n        tls_version = data.get(TLS_VERSION)\n        ttl = data.get(TTL)\n        create_time = data.get(CREATE_TIME)\n        modify_time = data.get(MODIFY_TIME)\n        shard_count = data.get(SHARD_COUNT)\n        description = data.get(DESCRIPTION)\n        auto_split = data.get(AUTO_SPLIT)\n        max_split_shard = data.get(MAX_SPLIT_SHARD)\n        enable_tracking = data.get(ENABLE_TRACKING)\n        time_key = data.get(TIME_KEY)\n        time_format = data.get(TIME_FORMAT)\n        topic_tags = None\n        log_public_ip = data.get(LOG_PUBLIC_IP)\n        enable_hot_ttl = data.get(ENABLE_HOT_TTL)\n        hot_ttl = data.get(HOT_TTL)\n        cold_ttl = data.get(COLD_TTL)\n        archive_ttl = data.get(ARCHIVE_TTL)\n        encrypt_conf = None\n        encrypt_conf_data = data.get(ENCRYPT_CONF)\n        if encrypt_conf_data is not None and isinstance(encrypt_conf_data, dict):\n            encrypt_conf = EncryptConf.set_attributes(data=encrypt_conf_data)\n\n        tags = data.get(TAGS)\n        if tags is not None:\n            topic_tags = []\n            for i in range(len(tags)):\n                topic_tags.append(\n                    TagInfo(tags[i].get(KEY), tags[i].get(VALUE)))\n\n        return cls(topic_name, topic_id, project_id, ttl, create_time, modify_time, shard_count, description,\n                   auto_split, max_split_shard, enable_tracking, time_key, time_format, topic_tags, log_public_ip,\n                   enable_hot_ttl, hot_ttl, cold_ttl, archive_ttl, encrypt_conf, bind_processor, metering_mode,\n                   project_name, region, tls_version)\n\n    def get_create_time(self):\n        \"\"\"\n        :return: 创建时间\n        :rtype: str\n        \"\"\"\n        return self.create_time\n\n    def get_project_id(self):\n        \"\"\"\n        :return: 日志项目 ID\n        :rtype: str\n        \"\"\"\n        return self.project_id\n\n    def get_modify_time(self):\n        \"\"\"\n        :return:修改时间\n        :rtype: str\n        \"\"\"\n        return self.modify_time\n\n    def get_shard_count(self):\n        \"\"\"\n        :return:日志分区的数量\n        :rtype: int\n        \"\"\"\n        return self.shard_count\n\n    def get_topic_name(self):\n        \"\"\"\n        :return: 日志主题名称\n        :rtype: str\n        \"\"\"\n        return self.topic_name\n\n    def get_description(self):\n        \"\"\"\n        :return:日志主题描述\n        :rtype: str\n        \"\"\"\n        return self.description\n\n    def get_topic_id(self):\n        \"\"\"\n\n        :return: 日志主题 ID\n        :rtype: str\n        \"\"\"\n        return self.topic_id\n\n    def get_ttl(self):\n        \"\"\"\n        :return: 日志在日志服务中的保存时间, 单位天\n        :rtype: int\n        \"\"\"\n        return self.ttl\n\n    def is_auto_split(self):\n        \"\"\"\n        :return: 是否开启分区的自动分裂功能\n        :rtype: bool\n        \"\"\"\n        return self.auto_split\n\n    def get_max_split_shard(self):\n        \"\"\"\n        :return: 分区的最大分裂数\n        :rtype: int\n        \"\"\"\n        return self.max_split_shard\n\n    def is_enable_tracking(self):\n        \"\"\"\n        :return: 是否开启了WebTracking功能\n        :rtype: bool\n        \"\"\"\n        return self.enable_tracking\n\n    def get_time_key(self):\n        \"\"\"\n        :return: 日志时间字段的字段名称\n        :rtype: str\n        \"\"\"\n        return self.time_key\n\n    def get_time_format(self):\n        \"\"\"\n        :return: 时间字段的解析格式\n        :rtype: str\n        \"\"\"\n        return self.time_format\n\n    def get_tags(self):\n        \"\"\"\n        :return: 日志主题标签信息\n        :rtype: List[TagInfo]\n        \"\"\"\n        return self.tags\n\n    def get_log_public_ip(self):\n        \"\"\"\n        :return: 是否开启了记录外网IP功能\n        :rtype: bool\n        \"\"\"\n        return self.log_public_ip\n\n\nclass FullTextInfo(TLSData):\n    def __init__(self, case_sensitive: bool = None, delimiter: str = None, include_chinese: bool = False):\n        \"\"\"\n        :param case_sensitive: 是否大小写敏感\n        :type case_sensitive:bool\n        :param delimiter:全文索引的分词符\n        :type delimiter:string\n        :param include_chinese:是否包含中文\n        :type include_chinese:bool\n        \"\"\"\n        self.case_sensitive = case_sensitive\n        self.delimiter = delimiter\n        self.include_chinese = include_chinese\n\n    def get_delimiter(self):\n        \"\"\"\n        :return: 全文索引的分词符\n        :rtype: string\n        \"\"\"\n        return self.delimiter\n\n    def get_case_sensitive(self):\n        \"\"\"\n        :return: 是否大小写敏感\n        :rtype: bool\n        \"\"\"\n        return self.case_sensitive\n\n    def get_include_chinese(self):\n        \"\"\"\n        :return:是否包含中文\n        :rtype: bool\n        \"\"\"\n        return self.include_chinese\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        case_sensitive = data.get(CASE_SENSITIVE)\n        delimiter = data.get(DELIMITER)\n        include_chinese = data.get(INCLUDE_CHINESE)\n\n        return cls(case_sensitive, delimiter, include_chinese)\n\n\nclass ValueInfo(TLSData):\n    def __init__(self, value_type: str, delimiter: str = None, case_sensitive: bool = False,\n                 include_chinese: bool = False, sql_flag: bool = False, index_all: bool = False,\n                 json_keys=None, auto_index_flag: bool = False):\n        self.value_type = value_type\n        self.delimiter = delimiter\n        self.case_sensitive = case_sensitive\n        self.include_chinese = include_chinese\n        self.sql_flag = sql_flag\n        self.index_all = index_all\n        self.auto_index_flag = auto_index_flag\n\n        if value_type == \"json\":\n            self.json_keys = json_keys\n        else:\n            self.json_keys = None\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        value_type = data.get(VALUE_TYPE)\n        delimiter = data.get(DELIMITER)\n        case_sensitive = data.get(CASE_SENSITIVE)\n        include_chinese = data.get(INCLUDE_CHINESE)\n        sql_flag = data.get(SQL_FLAG)\n        index_all = data.get(INDEX_ALL)\n        json_keys = data.get(JSON_KEYS)\n        auto_index_flag = data.get(AUTO_INDEX_FLAG, False)\n\n        return cls(value_type, delimiter, case_sensitive, include_chinese, sql_flag,\n                   index_all, json_keys, auto_index_flag)\n\n    def get_auto_index_flag(self):\n        \"\"\"\n        :return: 该索引是否是自动索引添加\n        :rtype: bool\n        \"\"\"\n        return self.auto_index_flag\n\n\nclass KeyValueInfo(TLSData):\n    def __init__(self, key: str, value: ValueInfo):\n        \"\"\"\n        :param key:需要配置键值索引的字段名称\n        :type key:string\n        :param value:需要配置键值索引的字段描述信息\n        :type value:string\n        \"\"\"\n        self.key = key\n        self.value = value\n\n    def json(self):\n        return {KEY: self.key, VALUE: self.value.json()}\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        key = data.get(KEY)\n        value = data.get(VALUE)\n\n        # 索引场景下 Value 是 ValueInfo，Trace 场景下 Value 为普通字符串\n        if isinstance(value, dict):\n            value = ValueInfo.set_attributes(data=value)\n\n        return cls(key=key, value=value)\n\n\nclass AnalysisResult(TLSData):\n    def __init__(self, analysis_schema: List[str] = None, analysis_type: dict = None, analysis_data: List[dict] = None):\n        self.analysis_schema = analysis_schema\n        self.analysis_type = analysis_type\n        self.analysis_data = analysis_data\n\n    def get_analysis_schema(self):\n        \"\"\"\n        :return:日志分析列的名称\n        :rtype:List[str]\n        \"\"\"\n        return self.analysis_schema\n\n    def get_analysis_type(self):\n        \"\"\"\n        :return:日志分析列对应的属性\n        :rtype:dict\n        \"\"\"\n        return self.analysis_type\n\n    def get_analysis_data(self):\n        \"\"\"\n        :return:分析结果返回的键值对\n        :rtype:List[dict]\n        \"\"\"\n        return self.analysis_data\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        analysis_schema = data.get(SCHEMA)\n        analysis_type = data.get(TYPE)\n        analysis_data = data.get(DATA)\n\n        return cls(analysis_schema, analysis_type, analysis_data)\n\n\nclass SearchResult(TLSData):\n    def __init__(self, result_status: str = None, hit_count: int = None, list_over: bool = None, analysis: bool = None,\n                 count: int = None, limit: int = None, context: str = None, logs: List[dict] = None,\n                 analysis_result: AnalysisResult = None, highlight: List[dict] = None, elapsed_millisecond: int = None):\n        self.result_status = result_status\n        self.hit_count = hit_count\n        self.list_over = list_over\n        self.analysis = analysis\n        self.count = count\n        self.limit = limit\n        self.context = context\n        self.logs = logs\n        self.analysis_result = analysis_result\n        self.highlight = highlight\n        self.elapsed_millisecond = elapsed_millisecond\n\n    def get_list_over(self):\n        \"\"\"\n        :return: 是否已返回全部结果\n        :rtype:bool\n        \"\"\"\n        return self.list_over\n\n    def get_analysis_result(self):\n        \"\"\"\n        :return: 分析结果\n        :rtype: AnalysisResult\n        \"\"\"\n        return self.analysis_result\n\n    def get_result_status(self):\n        \"\"\"\n        :return: 查询的状态\n        :rtype:str\n        \"\"\"\n        return self.result_status\n\n    def get_count(self):\n        \"\"\"\n        :return: 分析请求命中的条目数\n        :rtype: int\n        \"\"\"\n        return self.count\n\n    def get_limit(self):\n        \"\"\"\n        :return:请求中指定返回的 Limit 条目数\n        :rtype: int\n        \"\"\"\n        return self.limit\n\n    def get_context(self):\n        \"\"\"\n        :return:仅检索日志时，翻页上下文\n        :rtype: str\n        \"\"\"\n        return self.context\n\n    def get_hit_count(self):\n        \"\"\"\n        :return:搜索匹配的总条目数\n        :rtype: int\n        \"\"\"\n        return self.hit_count\n\n    def get_analysis(self):\n        \"\"\"\n        :return:是否分析请求\n        :rtype:bool\n        \"\"\"\n        return self.analysis\n\n    def get_logs(self):\n        \"\"\"\n        :return:检索日志结果\n        :rtype: List[dict]\n        \"\"\"\n        return self.logs\n\n    def get_highlight(self):\n        \"\"\"\n        :return:高亮显示的关键字\n        :rtype: List[dict]\n        \"\"\"\n        return self.highlight\n\n    def get_elapsed_millisecond(self):\n        \"\"\"\n        :return:本次检索所使用的时间，单位为毫秒\n        :rtype: int\n        \"\"\"\n        return self.elapsed_millisecond\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        search_result = super(SearchResult, cls).set_attributes(data)\n\n        if ANALYSIS_RESULT in data:\n            search_result.analysis_result = AnalysisResult.set_attributes(\n                data=data[ANALYSIS_RESULT])\n\n        # HighLight 字段在后端使用不规则大小写，pascal_to_snake 会将其转换为 \"high_light\"，\n        # 导致默认映射不到 SearchResult.highlight 属性，这里显式修正映射关系。\n        if \"HighLight\" in data:\n            search_result.highlight = data[\"HighLight\"]\n\n        # ElapsedMillisecond 字段按常规 PascalCase -> snake_case 映射为 elapsed_millisecond，\n        # 但为了避免未来结构调整遗漏，这里也显式同步一次。\n        if \"ElapsedMillisecond\" in data:\n            search_result.elapsed_millisecond = data[\"ElapsedMillisecond\"]\n\n        return search_result\n\n\nclass QueryResp(TLSData):\n    def __init__(self, topic_id: str = None, shard_id: int = None, inclusive_begin_key: str = None,\n                 exclusive_end_key: str = None, status: str = None, modify_time: str = None,\n                 stop_write_time: str = None):\n        \"\"\"查询分区信息\n\n        :param topic_id: 日志主题 ID\n        :type topic_id: str\n        :param shard_id: 分区 ID\n        :type shard_id: int\n        :param inclusive_begin_key: 分区起始的 key 值（包含）\n        :type inclusive_begin_key: str\n        :param exclusive_end_key: 分区结束的 key 值（不包含）\n        :type exclusive_end_key: str\n        :param status: 分区状态，readwrite：读写，readonly：只读\n        :type status: str\n        :param modify_time: 分区修改时间\n        :type modify_time: str\n        :param stop_write_time: 分区停止写入的时间\n        :type stop_write_time: str\n        \"\"\"\n        self.topic_id = topic_id\n        self.shard_id = shard_id\n        self.inclusive_begin_key = inclusive_begin_key\n        self.exclusive_end_key = exclusive_end_key\n        self.status = status\n        self.modify_time = modify_time\n        self.stop_write_time = stop_write_time\n\n    def get_exclusive_end_key(self):\n        \"\"\"返回分区结束的 key 值\"\"\"\n        return self.exclusive_end_key\n\n    def get_inclusive_begin_key(self):\n        \"\"\"返回分区起始的 key 值\"\"\"\n        return self.inclusive_begin_key\n\n    def get_shard_id(self):\n        \"\"\"返回日志主题的分区 ID\"\"\"\n        return self.shard_id\n\n    def get_modify_time(self):\n        \"\"\"返回分区修改时间\"\"\"\n        return self.modify_time\n\n    def get_topic_id(self):\n        \"\"\"返回日志主题的 ID\"\"\"\n        return self.topic_id\n\n    def get_status(self):\n        \"\"\"返回分区状态（readwrite：读写，readonly：只读）\"\"\"\n        return self.status\n\n    def get_stop_write_time(self):\n        \"\"\"返回分区停止写入的时间\"\"\"\n        return self.stop_write_time\n\n\nclass HistogramInfo(TLSData):\n    def __init__(self, time: int = None, count: int = None):\n        self.time = time\n        self.count = count\n\n    def get_count(self):\n        \"\"\"\n        :return:子区间中对应搜索结果的数量\n        :rtype:int\n        \"\"\"\n        return self.count\n\n    def get_time(self):\n        \"\"\"\n        :return:子区间的起始时间点，单位为毫秒\n        :rtype:long\n        \"\"\"\n        return self.time\n\n\nclass HistogramInfoV1(TLSData):\n    def __init__(self, count: int = None, start_time: int = None, end_time: int = None, result_status: str = None):\n        self.count = count\n        self.start_time = start_time\n        self.end_time = end_time\n        self.result_status = result_status\n\n    def get_count(self):\n        \"\"\"\n        :return:子区间中对应搜索结果的数量，即该时段内符合条件的日志条数\n        :rtype:int\n        \"\"\"\n        return self.count\n\n    def get_start_time(self):\n        \"\"\"\n        :return:查询的开始时间点，单位为毫秒\n        :rtype:long\n        \"\"\"\n        return self.start_time\n\n    def get_end_time(self):\n        \"\"\"\n        :return:查询的开始时间点，单位为毫秒\n        :rtype:long\n        \"\"\"\n        return self.end_time\n\n    def get_result_status(self):\n        \"\"\"\n        :return:查询的状态\n        :rtype:str\n        \"\"\"\n        return self.result_status\n\n\nclass LogContextInfos(TLSData):\n    def __init__(self, source: str = None, context_flow: str = None, package_offset: int = None):\n        \"\"\"下载上下文查询所需的日志信息\n\n        :param source: 日志来源的主机\n        :type source: str\n        :param context_flow: 指定日志所在的 LogGroup 的 ID\n        :type context_flow: str\n        :param package_offset: 指定日志在 LogGroup 中的序号\n        :type package_offset: int\n        \"\"\"\n        self.source = source\n        self.context_flow = context_flow\n        self.package_offset = package_offset\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        if data is None:\n            return None\n\n        source = data.get(SOURCE)\n        context_flow = data.get(CONTEXT_FLOW)\n        package_offset = data.get(PACKAGE_OFFSET)\n\n        return cls(source, context_flow, package_offset)\n\n    def get_source(self):\n        \"\"\"\n        :return: 日志来源的主机\n        :rtype: str\n        \"\"\"\n        return self.source\n\n    def get_context_flow(self):\n        \"\"\"\n        :return: 日志所在的 LogGroup 的 ID\n        :rtype: str\n        \"\"\"\n        return self.context_flow\n\n    def get_package_offset(self):\n        \"\"\"\n        :return: 日志在 LogGroup 中的序号\n        :rtype: int\n        \"\"\"\n        return self.package_offset\n\n\nclass TaskInfo(TLSData):\n    def __init__(self, task_id: str = None, task_name: str = None, topic_id: str = None, query: str = None,\n                 start_time: str = None, end_time: str = None, data_format: str = None, task_status: str = None,\n                 compression: str = None, create_time: str = None, log_size: int = None, log_count: int = None,\n                 task_type: int = None, allow_incomplete: bool = None, log_context_infos: LogContextInfos = None):\n        self.task_id = task_id\n        self.task_name = task_name\n        self.topic_id = topic_id\n        self.query = query\n        self.start_time = start_time\n        self.end_time = end_time\n        self.data_format = data_format\n        self.task_status = task_status\n        self.compression = compression\n        self.create_time = create_time\n        self.log_size = log_size\n        self.log_count = log_count\n        self.task_type = task_type\n        self.allow_incomplete = allow_incomplete\n        self.log_context_infos = log_context_infos\n\n    def get_task_name(self):\n        \"\"\"\n        :return:下载任务的名称\n        :rtype: str\n        \"\"\"\n        return self.task_name\n\n    def get_start_time(self):\n        \"\"\"\n        :return:起始时间。格式为 yyyy-MM-dd HH:mm:ss\n        :rtype: str\n        \"\"\"\n        return self.start_time\n\n    def get_data_format(self):\n        \"\"\"\n        :return:导出的文件格式，支持 CSV 文件格式或 JSON 格式\n        :rtype: str\n        \"\"\"\n        return self.data_format\n\n    def get_task_status(self):\n        \"\"\"\n        :return:下载任务状态\n        :rtype:str\n        \"\"\"\n        return self.task_status\n\n    def get_log_count(self):\n        \"\"\"\n        :return:下载的日志条数\n        :rtype: int\n        \"\"\"\n        return self.log_count\n\n    def get_create_time(self):\n        \"\"\"\n        :return:下载任务的创建时间\n        :rtype: str\n        \"\"\"\n        return self.create_time\n\n    def get_query(self):\n        \"\"\"\n        :return:日志检索分析语句\n        :rtype:str\n        \"\"\"\n        return self.query\n\n    def get_end_time(self):\n        \"\"\"\n        :return:结束时间。格式为 yyyy-MM-dd HH:mm:ss\n        :rtype: str\n        \"\"\"\n        return self.end_time\n\n    def get_task_id(self):\n        \"\"\"\n        :return:下载任务的 ID\n        :rtype:str\n        \"\"\"\n        return self.task_id\n\n    def get_log_size(self):\n        \"\"\"\n        :return:下载的日志量，单位为字节（Byte）\n        :rtype:long\n        \"\"\"\n        return self.log_size\n\n    def get_topic_id(self):\n        \"\"\"\n        :return:日志主题名称\n        :rtype:str\n        \"\"\"\n        return self.topic_id\n\n    def get_compression(self):\n        \"\"\"\n        :return:导出文件的压缩格式\n        :rtype:str\n        \"\"\"\n        return self.compression\n\n    def get_task_type(self):\n        \"\"\"\n        :return:下载的日志类型\n        :rtype: int\n        \"\"\"\n        return self.task_type\n\n    def get_allow_incomplete(self):\n        \"\"\"\n        :return:是否允许下载查询不精确结果日志\n        :rtype: bool\n        \"\"\"\n        return self.allow_incomplete\n\n    def get_log_context_infos(self):\n        \"\"\"\n        :return:下载上下文查询所需的日志信息\n        :rtype: LogContextInfos\n        \"\"\"\n        return self.log_context_infos\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        if data is None:\n            return None\n\n        task_id = data.get(TASK_ID)\n        task_name = data.get(TASK_NAME)\n        topic_id = data.get(TOPIC_ID)\n        query = data.get(QUERY)\n        start_time = data.get(START_TIME)\n        end_time = data.get(END_TIME)\n        data_format = data.get(DATA_FORMAT)\n        task_status = data.get(TASK_STATUS)\n        compression = data.get(COMPRESSION)\n        create_time = data.get(CREATE_TIME)\n        log_size = data.get(LOG_SIZE)\n        log_count = data.get(LOG_COUNT)\n        task_type = data.get(ETL_TASK_TYPE)\n        allow_incomplete = data.get(ALLOW_INCOMPLETE)\n\n        log_context_infos_data = data.get(LOG_CONTEXT_INFOS)\n        log_context_infos = None\n        if log_context_infos_data is not None:\n            log_context_infos = LogContextInfos.set_attributes(data=log_context_infos_data)\n\n        return cls(task_id, task_name, topic_id, query, start_time, end_time,\n                   data_format, task_status, compression, create_time, log_size,\n                   log_count, task_type, allow_incomplete, log_context_infos)\n\n\nclass HostInfo(TLSData):\n    def __init__(self, ip: str = None, log_collector_version: str = None, heartbeat_status: int = None):\n        self.ip = ip\n        self.log_collector_version = log_collector_version\n        self.heartbeat_status = heartbeat_status\n\n    def get_ip(self):\n        \"\"\"\n        :return:机器的 IP 地址\n        :rtype: str\n        \"\"\"\n        return self.ip\n\n    def get_log_collector_version(self):\n        \"\"\"\n        :return:机器安装的 LogCollector 的版本\n        :rtype:str\n        \"\"\"\n        return self.log_collector_version\n\n    def get_heartbeat_status(self):\n        \"\"\"\n        :return:Agent 的心跳状态。0：心跳正常 1：心跳异常。\n        :rtype:int\n        \"\"\"\n        return self.heartbeat_status\n\n\nclass HostGroupInfo(TLSData):\n    def __init__(self, host_group_id: str = None, host_group_name: str = None, host_group_type: str = None,\n                 host_identifier: str = None, host_count: int = None, normal_heartbeat_status_count: int = None,\n                 abnormal_heartbeat_status_count: int = None, rule_count: int = None,\n                 create_time: str = None, modify_time: str = None, auto_update: bool = False,\n                 update_start_time: str = None, update_end_time: str = None, agent_latest_version: str = None,\n                 service_logging: bool = None, iam_project_name: str = None):\n        self.host_group_id = host_group_id\n        self.host_group_name = host_group_name\n        self.host_group_type = host_group_type\n        self.host_identifier = host_identifier\n        self.host_count = host_count\n        self.normal_heartbeat_status_count = normal_heartbeat_status_count\n        self.abnormal_heartbeat_status_count = abnormal_heartbeat_status_count\n        self.rule_count = rule_count\n        self.create_time = create_time\n        self.modify_time = modify_time\n        self.auto_update = auto_update\n        self.update_start_time = update_start_time\n        self.update_end_time = update_end_time\n        self.agent_latest_version = agent_latest_version\n        self.service_logging = service_logging\n        self.iam_project_name = iam_project_name\n\n    def get_update_end_time(self):\n        \"\"\"\n        :return: 自动升级的结束时间\n        :rtype: str\n        \"\"\"\n        return self.update_end_time\n\n    def get_update_start_time(self):\n        \"\"\"\n        :return: 自动升级的开始时间\n        :rtype: str\n        \"\"\"\n        return self.update_start_time\n\n    def get_create_time(self):\n        \"\"\"\n        :return: 机器组创建时间\n        :rtype: str\n        \"\"\"\n        return self.create_time\n\n    def get_host_count(self):\n        \"\"\"\n        :return: 机器数量\n        :rtype: int\n        \"\"\"\n        return self.host_count\n\n    def get_modify_time(self):\n        \"\"\"\n        :return: 机器组修改时间\n        :rtype: str\n        \"\"\"\n        return self.modify_time\n\n    def get_host_group_type(self):\n        \"\"\"\n        :return: 机器组类型\n        :rtype: str\n        \"\"\"\n        return self.host_group_type\n\n    def get_host_group_id(self):\n        \"\"\"\n        :return: 机器组ID\n        :rtype: str\n        \"\"\"\n        return self.host_group_id\n\n    def get_host_identifier(self):\n        \"\"\"\n        :return: 机器标识符\n        :rtype: str\n        \"\"\"\n        return self.host_identifier\n\n    def get_abnormal_heartbeat_status_count(self):\n        \"\"\"\n        :return: 心跳异常的机器数量\n        :rtype: int\n        \"\"\"\n        return self.abnormal_heartbeat_status_count\n\n    def get_auto_update(self):\n        \"\"\"\n        :return: 是否开启自动升级功能\n        :rtype: bool\n        \"\"\"\n        return self.auto_update\n\n    def get_host_group_name(self):\n        \"\"\"\n        :return: 机器组名称\n        :rtype: str\n        \"\"\"\n        return self.host_group_name\n\n    def get_agent_latest_version(self):\n        \"\"\"\n        :return: 日志服务发布的LogCollector最新版本号\n        :rtype: str\n        \"\"\"\n        return self.agent_latest_version\n\n    def get_normal_heartbeat_status_count(self):\n        \"\"\"\n        :return: 心跳正常的机器数量\n        :rtype: int\n        \"\"\"\n        return self.normal_heartbeat_status_count\n\n    def get_rule_count(self):\n        \"\"\"\n        :return: 绑定的采集配置的数量\n        :rtype: int\n        \"\"\"\n        return self.rule_count\n\n    def get_service_logging(self):\n        \"\"\"\n        :return: 是否开启Logcollector服务日志功能\n        :rtype: bool\n        \"\"\"\n        return self.service_logging\n\n    def get_iam_project_name(self):\n        \"\"\"\n        :return: 机器组所属的IAM项目\n        :rtype: str\n        \"\"\"\n        return self.iam_project_name\n\n\nclass FilterKeyRegex(TLSData):\n    def __init__(self, key: str, regex: str):\n        \"\"\"\n        :param key: 过滤字段的名称\n        :type key:str\n        :param regex:过滤字段的日志内容需要匹配的正则表达式\n        :type regex:str\n        \"\"\"\n        self.key = key\n        self.regex = regex\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        key = data.get(KEY)\n        regex = data.get(REGEX)\n\n        return cls(key, regex)\n\n\nclass LogTemplate(TLSData):\n    def __init__(self, log_type: str, log_format: str):\n        \"\"\"\n        :param log_type:日志模板的类型：Nginx\n        :type log_type:str\n        :param log_format:日志模板内容\n        :type log_format:str\n        \"\"\"\n        self.log_type = log_type\n        self.log_format = log_format\n\n    def json(self):\n        return {TYPE: self.log_type, FORMAT: self.log_format}\n\n\nclass ExtractRule(TLSData):\n    def __init__(self, delimiter: str = None, begin_regex: str = None, log_regex: str = None, keys: List[str] = None,\n                 time_key: str = None, time_format: str = None, time_zone: str = None, filter_key_regex: List[FilterKeyRegex] = None,\n                 un_match_up_load_switch: bool = None, un_match_log_key: str = None, log_template: LogTemplate = None,\n                 quote: str = None, time_extract_regex: str = None, enable_nanosecond: bool = False, time_sample: str = None):\n        \"\"\"\n        :param delimiter: 日志分隔符\n        :type delimiter: str\n        :param begin_regex: 第一行日志需要匹配的正则表达式\n        :type begin_regex: str\n        :param log_regex: 整条日志需要匹配的正则表达式\n        :type log_regex: str\n        :param keys: 日志字段名称\n        :type keys: List[str]\n        :param time_key: 日志时间字段的字段名称\n        :type time_key: str\n        :param time_format: 时间字段的解析格式\n        :type time_format: str\n        :param time_zone: 日志时间字段的时区\n        :type time_zone: str\n        :param filter_key_regex: 过滤字段的正则表达式\n        :type filter_key_regex: List[FilterKeyRegex]\n        :param un_match_up_load_switch: 是否上传解析失败的日志\n        :type un_match_up_load_switch: bool\n        :param un_match_log_key: 当上传解析失败的日志时，解析失败的日志的key名称\n        :type un_match_log_key: str\n        :param log_template: 根据指定的日志模板自动提取日志字段\n        :type log_template: LogTemplate\n        :param quote: 引用符\n        :type quote: str\n        :param time_extract_regex: 时间字段的解析正则表达式\n        :type time_extract_regex: str\n        :param enable_nanosecond: 是否开启解析纳秒级时间\n        :type enable_nanosecond: bool\n        :param time_sample: 时间字段的样本日志\n        :type time_sample: str\n        \"\"\"\n        assert (time_key is None and time_format is None) or (\n            time_key is not None and time_format is not None)\n        assert (un_match_up_load_switch is None and un_match_log_key is None) or \\\n               (un_match_up_load_switch is not None and un_match_log_key is not None)\n\n        self.delimiter = delimiter\n        self.begin_regex = begin_regex\n        self.log_regex = log_regex\n        self.keys = keys\n        self.time_key = time_key\n        self.time_format = time_format\n        self.time_zone = time_zone\n        self.filter_key_regex = filter_key_regex\n        self.un_match_up_load_switch = un_match_up_load_switch\n        self.un_match_log_key = un_match_log_key\n        self.log_template = log_template\n        self.quote = quote\n        self.time_extract_regex = time_extract_regex\n        self.enable_nanosecond = enable_nanosecond\n        self.time_sample = time_sample\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        extract_rule = super(ExtractRule, cls).set_attributes(data)\n\n        if FILTER_KEY_REGEX in data:\n            extract_rule.filter_key_regex = []\n            for one_filter_key_regex in data[FILTER_KEY_REGEX]:\n                extract_rule.filter_key_regex.append(  # pylint: disable=no-member\n                    FilterKeyRegex.set_attributes(data=one_filter_key_regex))\n        if LOG_TEMPLATE in data:\n            extract_rule.log_template = LogTemplate(log_type=data[LOG_TEMPLATE].get(TYPE),\n                                                    log_format=data[LOG_TEMPLATE].get(FORMAT))  # pylint: disable=no-member\n\n        return extract_rule\n\n    def json(self):\n        json_data = super(ExtractRule, self).json()\n\n        if self.filter_key_regex is not None:\n            json_data[FILTER_KEY_REGEX] = []\n            for regex in self.filter_key_regex:\n                json_data[FILTER_KEY_REGEX].append(regex.json())\n        if self.log_template is not None:\n            json_data[LOG_TEMPLATE] = self.log_template.json()\n\n        return json_data\n\n\nclass ExcludePath(TLSData):\n    def __init__(self, path_type: str, value: str):\n        \"\"\"\n        :param path_type:采集路径类型，File或Path\n        :type path_type:str\n        :param value:采集绝对路径\n        :type value:str\n        \"\"\"\n        assert path_type == \"File\" or path_type == \"Path\"\n\n        self.path_type = path_type\n        self.value = value\n\n    def get_path_type(self):\n        \"\"\"\n        :return: 采集路径类型，File或Path\n        :rtype: str\n        \"\"\"\n        return self.path_type\n\n    def get_value(self):\n        \"\"\"\n        :return: 采集绝对路径\n        :rtype: str\n        \"\"\"\n        return self.value\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        path_type = data.get(TYPE)\n        value = data.get(VALUE)\n\n        return cls(path_type, value)\n\n    def json(self):\n        return {TYPE: self.path_type, VALUE: self.value}\n\n\nclass ParsePathRule(TLSData):\n    def __init__(self, path_sample: str, regex: str, keys: List[str]):\n        \"\"\"\n        :param path_sample:实际场景的采集路径样例\n        :type path_sample:str\n        :param regex: 用于提取路径字段的正则表达式\n        :type regex:str\n        :param keys:字段名称列表\n        :type keys: List[str]\n        \"\"\"\n        self.path_sample = path_sample\n        self.regex = regex\n        self.keys = keys\n\n    def get_path_sample(self):\n        \"\"\"\n        :return: 实际场景的采集路径样例\n        :rtype: str\n        \"\"\"\n        return self.path_sample\n\n    def get_regex(self):\n        \"\"\"\n        :return: 用于提取路径字段的正则表达式\n        :rtype: str\n        \"\"\"\n        return self.regex\n\n    def get_keys(self):\n        \"\"\"\n        :return: 字段名称列表\n        :rtype:  List[str]\n        \"\"\"\n        return self.keys\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        path_sample = data.get(PATH_SAMPLE)\n        regex = data.get(REGEX)\n        keys = data.get(KEYS)\n\n        return cls(path_sample, regex, keys)\n\n\nclass ShardHashKey(TLSData):\n    def __init__(self, hash_key: str):\n        \"\"\"\n        :param hash_key:日志组的 HashKey\n        :type hash_key: str\n        \"\"\"\n        self.hash_key = hash_key\n\n    def get_hash_key(self):\n        \"\"\"\n        :return:日志组的 HashKey\n        :rtype: str\n        \"\"\"\n        return self.hash_key\n\n\nclass Plugin(TLSData):\n    def __init__(self, processors: List[Dict]):\n        \"\"\"\n        :param processors: LogCollector插件\n        :type processors: List[Dict]\n        \"\"\"\n        self.processors = processors\n\n    def get_processors(self):\n        \"\"\"\n        :return: LogCollector插件\n        :rtype: List[Dict]\n        \"\"\"\n        return self.processors\n\n    def json(self):\n        return {PROCESSORS: self.processors}\n\n\nclass Advanced(TLSData):\n    def __init__(self, close_inactive: int = 60, close_timeout: int = 0, no_line_terminator_eof_max_time: int = 5,\n                 close_removed: bool = False, close_renamed: bool = False, close_eof: bool = False):\n        \"\"\"\n        :param close_inactive: 释放日志文件句柄的等待时间\n        :type close_inactive: int\n        :param close_timeout: LogCollector监控日志文件的最大时长\n        :type close_timeout: int\n        :param no_line_terminator_eof_max_time: 日志文件无行终止符时，最大等待时间\n        :type no_line_terminator_eof_max_time: int\n        :param close_removed: 日志文件被移除之后，是否释放该日志文件的句柄\n        :type close_removed: bool\n        :param close_renamed: 日志文件被重命名之后，是否释放该日志文件的句柄\n        :type close_renamed: bool\n        :param close_eof: 读取至日志文件的末尾之后，是否释放该日志文件的句柄\n        :type close_eof: bool\n        \"\"\"\n        self.no_line_terminator_eof_max_time = no_line_terminator_eof_max_time\n        self.close_inactive = close_inactive\n        self.close_timeout = close_timeout\n        self.close_removed = close_removed\n        self.close_renamed = close_renamed\n        self.close_eof = close_eof\n\n    def get_close_inactive(self):\n        \"\"\"\n        :return: 释放日志文件句柄的等待时间\n        :rtype: int\n        \"\"\"\n        return self.close_inactive\n\n    def get_close_timeout(self):\n        \"\"\"\n        :return: LogCollector监控日志文件的最大时长\n        :rtype: int\n        \"\"\"\n        return self.close_timeout\n\n    def get_no_line_terminator_eof_max_time(self):\n        \"\"\"\n        :return: 日志文件无行终止符时，最大等待时间\n        :rtype: int\n        \"\"\"\n        return self.no_line_terminator_eof_max_time\n\n\n\n    def get_close_removed(self):\n        \"\"\"\n        :return: 日志文件被移除之后，是否释放该日志文件的句柄\n        :rtype: bool\n        \"\"\"\n        return self.close_removed\n\n    def get_close_renamed(self):\n        \"\"\"\n        :return: 日志文件被重命名之后，是否释放该日志文件的句柄\n        :rtype: bool\n        \"\"\"\n        return self.close_renamed\n\n    def get_close_eof(self):\n        \"\"\"\n        :return: 读取至日志文件的末尾之后，是否释放该日志文件的句柄\n        :rtype: bool\n        \"\"\"\n        return self.close_eof\n\n    def json(self):\n        return {CLOSE_INACTIVE: self.close_inactive, CLOSE_TIMEOUT: self.close_timeout,\n                CLOSE_REMOVED: self.close_removed, CLOSE_RENAMED: self.close_renamed, CLOSE_EOF: self.close_eof,\n                NO_LINE_TERMINATOR_EOF_MAX_TIME: self.no_line_terminator_eof_max_time}\n\n\nclass UserDefineRule(TLSData):\n    def __init__(self, parse_path_rule: ParsePathRule = None, shard_hash_key: ShardHashKey = None,\n                 enable_raw_log: bool = False, fields: dict = None, plugin: Plugin = None, advanced: Advanced = None,\n                 tail_files: bool = False, raw_log_key: str = None, enable_hostname: bool = False,\n                 hostname_key: str = None, host_group_label_key: str = None, enable_host_group_label: bool = False,\n                 tail_size_kb: int = None, ignore_older: int = None, multi_collects_type: str = None):\n        \"\"\"\n        :param parse_path_rule: 解析采集路径的规则\n        :type parse_path_rule: ParsePathRule\n        :param shard_hash_key: 路由日志分区的规则\n        :type shard_hash_key: ShardHashKey\n        :param enable_raw_log: 是否上传原始日志\n        :type enable_raw_log: bool\n        :param fields: 为日志添加常量字段\n        :type fields: dict\n        :param plugin: LogCollector插件配置\n        :type plugin: Plugin\n        :param advanced: LogCollector扩展配置\n        :type advanced: Advanced\n        :param tail_files: LogCollector采集策略，即指定LogCollector采集增量日志还是全量日志\n        :type tail_files: bool\n        :param raw_log_key: 原始日志的键名\n        :type raw_log_key: str\n        :param enable_hostname: 是否添加主机名字段\n        :type enable_hostname: bool\n        :param hostname_key: 主机名字段的键名\n        :type hostname_key: str\n        :param host_group_label_key: 主机分组标签字段的键名\n        :type host_group_label_key: str\n        :param enable_host_group_label: 是否添加主机分组标签字段\n        :type enable_host_group_label: bool\n        :param tail_size_kb: 增量采集的回溯阈值。\n        :type tail_size_kb: int\n        :param ignore_older: 忽略多久没有更新的日志文件, 单位为小时。\n        :type ignore_older: int\n        :param multi_collects_type: 允许多次采集日志文件。空、RuleID、TopicIDRuleName\n        :type multi_collects_type: str\n        \"\"\"\n        self.parse_path_rule = parse_path_rule\n        self.shard_hash_key = shard_hash_key\n        self.enable_raw_log = enable_raw_log\n        self.fields = fields\n        self.plugin = plugin\n        self.advanced = advanced\n        self.tail_files = tail_files\n        self.raw_log_key = raw_log_key\n        self.enable_hostname = enable_hostname\n        self.hostname_key = hostname_key\n        self.host_group_label_key = host_group_label_key\n        self.enable_host_group_label = enable_host_group_label\n        self.tail_size_kb = tail_size_kb\n        self.ignore_older = ignore_older\n        self.multi_collects_type = multi_collects_type\n\n    def get_enable_raw_log(self):\n        \"\"\"\n        :return:是否上传原始日志\n        :rtype:bool\n        \"\"\"\n        return self.enable_raw_log\n\n    def get_shard_hash_key(self):\n        \"\"\"\n        :return:路由日志分区的规则\n        :rtype: ShardHashKey\n        \"\"\"\n        return self.shard_hash_key\n\n    def get_fields(self):\n        \"\"\"\n        :return: 为日志添加常量字段\n        :rtype: dict\n        \"\"\"\n        return self.fields\n\n    def get_parse_path_rule(self):\n        \"\"\"\n        :return: 解析采集路径的规则\n        :rtype: ParsePathRule\n        \"\"\"\n        return self.parse_path_rule\n\n    def get_plugin(self):\n        \"\"\"\n        :return: LogCollector插件配置\n        :rtype: Plugin\n        \"\"\"\n        return self.plugin\n\n    def get_advanced(self):\n        \"\"\"\n        :return: LogCollector扩展配置\n        :rtype: Advanced\n        \"\"\"\n        return self.advanced\n\n    def get_tail_files(self):\n        \"\"\"\n        :return: LogCollector采集策略，即指定LogCollector采集增量日志还是全量日志\n        :rtype: bool\n        \"\"\"\n        return self.tail_files\n\n    def get_raw_log_key(self):\n        \"\"\"\n        :return: 原始日志的键名\n        :rtype: str\n        \"\"\"\n        return self.raw_log_key\n\n    def get_enable_hostname(self):\n        \"\"\"\n        :return: 是否添加主机名字段\n        :rtype: bool\n        \"\"\"\n        return self.enable_hostname\n\n    def get_hostname_key(self):\n        \"\"\"\n        :return: 主机名字段的键名\n        :rtype: str\n        \"\"\"\n        return self.hostname_key\n\n    def get_host_group_label_key(self):\n        \"\"\"\n        :return: 主机分组标签字段的键名\n        :rtype: str\n        \"\"\"\n        return self.host_group_label_key\n\n    def get_enable_host_group_label(self):\n        \"\"\"\n        :return: 是否添加主机分组标签字段\n        :rtype: bool\n        \"\"\"\n        return self.enable_host_group_label\n    def get_tail_size_kb(self):\n        \"\"\"\n        :return: 增量采集的回溯阈值。\n        :rtype: int\n        \"\"\"\n        return self.tail_size_kb\n\n    def get_ignore_older(self):\n        \"\"\"\n        :return: 忽略多久没有更新的日志文件, 单位为小时。\n        :rtype: int\n        \"\"\"\n        return self.ignore_older\n\n    def get_multi_collects_type(self):\n        \"\"\"\n        :return: 允许多次采集日志文件。空、RuleID、TopicIDRuleName\n        :rtype: str\n        \"\"\"\n        return self.multi_collects_type\n\n\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        user_define_rule = super(UserDefineRule, cls).set_attributes(data)\n\n        if SHARD_HASH_KEY in data:\n            user_define_rule.shard_hash_key = ShardHashKey(\n                hash_key=data[SHARD_HASH_KEY].get(HASH_KEY))\n        if PARSE_PATH_RULE in data:\n            user_define_rule.parse_path_rule = ParsePathRule.set_attributes(\n                data[PARSE_PATH_RULE])\n        if PLUGIN in data:\n            user_define_rule.plugin = Plugin(\n                processors=data[PLUGIN].get(PROCESSORS))\n        if ADVANCED in data:\n            user_define_rule.advanced = Advanced(close_inactive=data[ADVANCED].get(CLOSE_INACTIVE),\n                                                 close_timeout=data[ADVANCED].get(\n                                                     CLOSE_TIMEOUT),\n                                                 close_removed=data[ADVANCED].get(\n                                                     CLOSE_REMOVED),\n                                                 close_renamed=data[ADVANCED].get(\n                                                     CLOSE_RENAMED),\n                                                 no_line_terminator_eof_max_time=data[ADVANCED].get(NO_LINE_TERMINATOR_EOF_MAX_TIME),\n                                                 close_eof=data[ADVANCED].get(CLOSE_EOF))\n\n        return user_define_rule\n\n    def json(self):\n        json_data = super(UserDefineRule, self).json()\n\n        if self.shard_hash_key is not None:\n            json_data[SHARD_HASH_KEY] = self.shard_hash_key.json()\n        if self.parse_path_rule is not None:\n            json_data[PARSE_PATH_RULE] = self.parse_path_rule.json()\n        if self.plugin is not None:\n            json_data[PLUGIN] = self.plugin.json()\n        if self.advanced is not None:\n            json_data[ADVANCED] = self.advanced.json()\n\n        return json_data\n\n\nclass KubernetesRule(TLSData):\n    def __init__(self, namespace_name_regex: str = None, workload_type: str = None, workload_name_regex: str = None,\n                 include_pod_label_regex: Dict[str, str] = None, exclude_pod_label_regex: Dict[str, str] = None,\n                 pod_name_regex: str = None, label_tag: Dict[str, str] = None, annotation_tag: Dict[str, str] = None,\n                 enable_all_label_tag: bool = False, exclude_pod_annotation_regex: Dict[str, str] = None,\n                 include_pod_annotation_regex: Dict[str, str] = None,):\n        \"\"\"\n        :param namespace_name_regex: 待采集的Kubernetes Namespace名称，不指定Namespace名称时表示采集全部容器\n        :type namespace_name_regex: str\n        :param workload_type: 通过工作负载的类型指定采集的容器，仅支持选择一种类型\n        :type workload_type: str\n        :param workload_name_regex: 通过工作负载的名称指定待采集的容器\n        :type workload_name_regex: str\n        :param include_pod_label_regex: Pod Label白名单用于指定待采集的容器\n        :type include_pod_label_regex: Dict[str, str]\n        :param exclude_pod_label_regex: 通过Pod Label黑名单指定不采集的容器，不启用表示采集全部容器\n        :type exclude_pod_label_regex: Dict[str, str]\n        :param pod_name_regex: Pod名称用于指定待采集的容器\n        :type pod_name_regex: str\n        :param label_tag: 是否将Kubernetes Label作为日志标签，添加到原始日志数据中\n        :type label_tag: Dict[str, str]\n        :param annotation_tag: 是否将Kubernetes Annotation作为日志标签，添加到原始日志数据中\n        :type annotation_tag: Dict[str, str]\n        :param enable_all_label_tag: 是否将所有 Kubernetes Label 作为日志标签，添加到原始日志数据中\n        :type enable_all_label_tag: bool\n        :param exclude_pod_annotation_regex: 通过 Pod Annotation 黑名单指定不采集的容器，不启用表示采集全部容器\n        :type exclude_pod_annotation_regex: Dict[str, str]\n        :param include_pod_annotation_regex: Pod Annotation 白名单用于指定待采集的容器\n        :type include_pod_annotation_regex: Dict[str, str]\n        \"\"\"\n        self.namespace_name_regex = namespace_name_regex\n        self.workload_type = workload_type\n        self.workload_name_regex = workload_name_regex\n        self.include_pod_label_regex = include_pod_label_regex\n        self.exclude_pod_label_regex = exclude_pod_label_regex\n        self.pod_name_regex = pod_name_regex\n        self.label_tag = label_tag\n        self.annotation_tag = annotation_tag\n        self.enable_all_label_tag = enable_all_label_tag\n        self.exclude_pod_annotation_regex = exclude_pod_annotation_regex\n        self.include_pod_annotation_regex = include_pod_annotation_regex\n\n    def get_include_pod_label_regex(self):\n        \"\"\"\n        :return: Pod Label 白名单用于指定待采集的容器\n        :rtype:Dict[str, str]\n        \"\"\"\n        return self.include_pod_label_regex\n\n    def get_workload_name_regex(self):\n        \"\"\"\n        :return: 通过工作负载的名称指定待采集的容器\n        :rtype:str\n        \"\"\"\n        return self.workload_name_regex\n\n    def get_pod_name_regex(self):\n        \"\"\"\n        :return: Pod名称用于指定待采集的容器\n        :rtype: str\n        \"\"\"\n        return self.pod_name_regex\n\n    def get_exclude_pod_label_regex(self):\n        \"\"\"\n        :return: 通过 Pod Label 黑名单指定不采集的容器，不启用表示采集全部容器\n        :rtype: ict[str, str]\n        \"\"\"\n        return self.exclude_pod_label_regex\n\n    def get_label_tag(self):\n        \"\"\"\n        :return: 是否将 Kubernetes Label 作为日志标签，添加到原始日志数据中\n        :rtype: Dict[str, str]\n        \"\"\"\n        return self.label_tag\n\n    def get_namespace_name_regex(self):\n        \"\"\"\n        :return: 待采集的 Kubernetes Namespace 名称，不指定 Namespace 名称时表示采集全部容器\n        :rtype: str\n        \"\"\"\n        return self.namespace_name_regex\n\n    def get_workload_type(self):\n        \"\"\"\n        :return:通过工作负载的类型指定采集的容器，仅支持选择一种类型\n        :rtype: str\n        \"\"\"\n        return self.workload_type\n\n    def get_annotation_tag(self):\n        \"\"\"\n        :return: 是否将Kubernetes Annotation作为日志标签，添加到原始日志数据中\n        :rtype: Dict[str, str]\n        \"\"\"\n        return self.annotation_tag\n    def get_enable_all_label_tag(self):\n        \"\"\"\n        :return: 是否将所有 Kubernetes Label 作为日志标签，添加到原始日志数据中\n        :rtype: bool\n        \"\"\"\n        return self.enable_all_label_tag\n    def get_exclude_pod_annotation_regex(self):\n        \"\"\"\n        :return: 通过 Pod Annotation 黑名单指定不采集的容器，不启用表示采集全部容器\n        :rtype: Dict[str, str]\n        \"\"\"\n        return self.exclude_pod_annotation_regex\n    def get_include_pod_annotation_regex(self):\n        \"\"\"\n        :return: Pod Annotation 白名单用于指定待采集的容器\n        :rtype: Dict[str, str]\n        \"\"\"\n        return self.include_pod_annotation_regex\n\n\nclass ContainerRule(TLSData):\n    def __init__(self, stream: str = None, container_name_regex: str = None,\n                 include_container_label_regex: Dict[str, str] = None,\n                 exclude_container_label_regex: Dict[str, str] = None,\n                 include_container_env_regex: Dict[str, str] = None,\n                 exclude_container_env_regex: Dict[str, str] = None,\n                 env_tag: Dict[str, str] = None, kubernetes_rule: KubernetesRule = None):\n        \"\"\"\n        :param stream:采集模式\n        :type stream:str\n        :param container_name_regex:待采集的容器名称\n        :type container_name_regex:str\n        :param include_container_label_regex:指定待采集的容器，不启用白名单时指定采集全部容器\n        :type include_container_label_regex:Dict[str, str]\n        :param exclude_container_label_regex:黑名单用于指定不采集的容器范围，不启用黑名单时表示采集全部容器\n        :type exclude_container_label_regex:Dict[str, str]\n        :param include_container_env_regex:容器环境变量白名单通过容器环境变量指定待采集的容器，不启用白名单时表示指定采集全部容器\n        :type include_container_env_regex:Dict[str, str]\n        :param exclude_container_env_regex:容器环境变量黑名单用于指定不采集的容器范围，不启用黑名单时表示采集全部容器\n        :type exclude_container_env_regex:Dict[str, str]\n        :param env_tag:是否将环境变量作为日志标签，添加到原始日志数据中\n        :type env_tag:Dict[str, str]\n        :param kubernetes_rule:Kubernetes 容器的采集规则\n        :type kubernetes_rule:KubernetesRule\n        \"\"\"\n        self.stream = stream\n        self.container_name_regex = container_name_regex\n        self.include_container_label_regex = include_container_label_regex\n        self.exclude_container_label_regex = exclude_container_label_regex\n        self.include_container_env_regex = include_container_env_regex\n        self.exclude_container_env_regex = exclude_container_env_regex\n        self.env_tag = env_tag\n        self.kubernetes_rule = kubernetes_rule\n\n    def get_stream(self):\n        \"\"\"\n        :return 采集模式\n        :rtype str\n        \"\"\"\n        return self.stream\n\n    def get_exclude_container_env_regex(self):\n        \"\"\"\n        :return: 容器环境变量黑名单用于指定不采集的容器范围，不启用黑名单时表示采集全部容器\n        :rtype:Dict[str, str]\n        \"\"\"\n        return self.exclude_container_env_regex\n\n    def get_kubernetes_rule(self):\n        \"\"\"\n        :return: Kubernetes 容器的采集规则\n        :rtype: KubernetesRule\n        \"\"\"\n        return self.kubernetes_rule\n\n    def get_include_container_label_regex(self):\n        \"\"\"\n        :return: 指定待采集的容器，不启用白名单时指定采集全部容器\n        :rtype: Dict[str, str]\n        \"\"\"\n        return self.include_container_label_regex\n\n    def get_include_container_env_regex(self):\n        \"\"\"\n        :return: 容器环境变量白名单通过容器环境变量指定待采集的容器，不启用白名单时表示指定采集全部容器\n        :rtype: Dict[str, str]\n        \"\"\"\n        return self.include_container_env_regex\n\n    def get_exclude_container_label_regex(self):\n        \"\"\"\n        :return: 黑名单用于指定不采集的容器范围，不启用黑名单时表示采集全部容器\n        :rtype: Dict[str, str]\n        \"\"\"\n        return self.exclude_container_label_regex\n\n    def get_env_tag(self):\n        \"\"\"\n        :return: 是否将环境变量作为日志标签，添加到原始日志数据中\n        :rtype: Dict[str, str]\n        \"\"\"\n        return self.env_tag\n\n    def get_container_name_regex(self):\n        \"\"\"\n        :return:待采集的容器名称\n        :rtype: str\n        \"\"\"\n        return self.container_name_regex\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        container_rule = super(ContainerRule, cls).set_attributes(data)\n\n        if KUBERNETES_RULE in data:\n            container_rule.kubernetes_rule = KubernetesRule.set_attributes(\n                data=data[KUBERNETES_RULE])\n\n        return container_rule\n\n    def json(self):\n        json_data = super(ContainerRule, self).json()\n\n        if self.kubernetes_rule is not None:\n            json_data[KUBERNETES_RULE] = self.kubernetes_rule.json()\n\n        return json_data\n\n\nclass RuleInfo(TLSData):\n    def __init__(self, topic_id: str = None, topic_name: str = None, rule_id: str = None, rule_name: str = None,\n                 paths: List[str] = None, log_type: str = None, extract_rule: ExtractRule = None,\n                 exclude_paths: List[ExcludePath] = None, log_sample: str = None,\n                 user_define_rule: UserDefineRule = None, create_time: str = None, modify_time: str = None,\n                 input_type: int = None, container_rule: ContainerRule = None, pause: int = None):\n        self.topic_id = topic_id\n        self.topic_name = topic_name\n        self.rule_id = rule_id\n        self.rule_name = rule_name\n        self.paths = paths\n        self.log_type = log_type\n        self.extract_rule = extract_rule\n        self.exclude_paths = exclude_paths\n        self.log_sample = log_sample\n        self.user_define_rule = user_define_rule\n        self.create_time = create_time\n        self.modify_time = modify_time\n        self.input_type = input_type\n        self.container_rule = container_rule\n        self.pause = pause\n\n    def get_exclude_paths(self):\n        \"\"\"\n        :return:采集黑名单列表\n        :rtype:List[ExcludePath]\n        \"\"\"\n        return self.exclude_paths\n\n    def get_create_time(self):\n        \"\"\"\n        :return:采集配置创建的时间\n        :rtype:str\n        \"\"\"\n        return self.create_time\n\n    def get_rule_name(self):\n        \"\"\"\n        :return:采集配置的名称\n        :rtype:str\n        \"\"\"\n        return self.rule_name\n\n    def get_container_rule(self):\n        \"\"\"\n        :return:容器采集规则。详细说明请查看\n        :rtype:ContainerRule\n        \"\"\"\n        return self.container_rule\n\n    def get_modify_time(self):\n        return self.modify_time\n\n    def get_input_type(self):\n        return self.input_type\n\n    def get_user_define_rule(self):\n        return self.user_define_rule\n\n    def get_rule_id(self):\n        return self.rule_id\n\n    def get_log_type(self):\n        return self.log_type\n\n    def get_extract_rule(self):\n        return self.extract_rule\n\n    def get_paths(self):\n        return self.paths\n\n    def get_topic_name(self):\n        return self.topic_name\n\n    def get_topic_id(self):\n        return self.topic_id\n\n    def get_pause(self):\n        \"\"\"\n        :return: 采集配置的运行状态。0：运行中，1：已暂停\n        :rtype: int\n        \"\"\"\n        return self.pause\n\n    def get_log_sample(self):\n        return self.log_sample\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        rule_info = super(RuleInfo, cls).set_attributes(data)\n\n        if EXTRACT_RULE in data:\n            rule_info.extract_rule = ExtractRule.set_attributes(\n                data=data[EXTRACT_RULE])\n        if EXCLUDE_PATHS in data:\n            rule_info.exclude_paths = []\n            for exclude_path in data[EXCLUDE_PATHS]:\n                rule_info.exclude_paths.append(  # pylint: disable=no-member\n                    ExcludePath.set_attributes(data=exclude_path))\n        if USER_DEFINE_RULE in data:\n            rule_info.user_define_rule = UserDefineRule.set_attributes(\n                data=data[USER_DEFINE_RULE])\n        if CONTAINER_RULE in data:\n            rule_info.container_rule = ContainerRule.set_attributes(\n                data=data[CONTAINER_RULE])\n\n        return rule_info\n\n\nclass HostGroupHostsRulesInfo(TLSData):\n    def __init__(self, host_group_info: HostGroupInfo, host_infos: List[HostInfo], rule_infos: List[RuleInfo]):\n        self.host_group_info = host_group_info\n        self.host_infos = host_infos\n        self.rule_infos = rule_infos\n\n    def get_rule_infos(self):\n        \"\"\"\n        :return:所绑定的采集配置信息列表\n        :rtype: List[RuleInfo]\n        \"\"\"\n        return self.rule_infos\n\n    def get_host_group_info(self):\n        \"\"\"\n        :return: 机器组信息\n        :rtype:HostGroupInfo\n        \"\"\"\n        return self.host_group_info\n\n    def get_host_infos(self):\n        \"\"\"\n        :return:\n        :rtype:List[HostInfo]\n        \"\"\"\n        return self.host_infos\n\n\n\n\n\nclass Receiver(TLSData):\n    def __init__(self, receiver_type: str, receiver_names: List[str], receiver_channels: List[str],\n                 start_time: str, end_time: str, webhook: str = None, general_webhook_url: str = None,\n                 general_webhook_body: str = None, alarm_webhook_at_users: List[str] = None,\n                 alarm_webhook_is_at_all: bool = None, alarm_webhook_at_groups: List[str] = None,\n                 general_webhook_method: str = None, general_webhook_headers: List['GeneralWebhookHeaderKV'] = None,\n                 alarm_content_template_id: str = None, alarm_webhook_integration_id: str = None,\n                 alarm_webhook_integration_name: str = None):\n        \"\"\"\n        :param receiver_type:接受者类型\n        :type receiver_type:str\n        :param receiver_names:接收者的名字\n        :type receiver_names:List[str]\n        :param receiver_channels:通知接收渠道，支持Email、Sms、Phone\n        :type receiver_channels:List[str]\n        :param start_time:可接收信息的时段中，开始的时间\n        :type start_time:str\n        :param end_time:可接收信息的时段中\n        :type end_time:str\n        :param webhook:飞书Webhook请求地址\n        :type webhook:str\n        :param general_webhook_url:自定义接口回调地址\n        :type general_webhook_url:str\n        :param general_webhook_body:自定义 WebHook 请求体\n        :type general_webhook_body:str\n        :param alarm_webhook_at_users:通过 Webhook 集成配置发送通知到飞书、钉钉或企业微信时，需要提醒的用户名\n        :type alarm_webhook_at_users:List[str]\n        :param alarm_webhook_is_at_all:通过 Webhook 集成配置发送通知到飞书、钉钉或企业微信时，是否提醒所有人\n        :type alarm_webhook_is_at_all:bool\n        :param alarm_webhook_at_groups:通过 Webhook 集成配置发送通知到飞书、钉钉或企业微信时，需要提醒的用户组名称\n        :type alarm_webhook_at_groups:List[str]\n        :param general_webhook_method:自定义接口回调方法，仅支持设置为 POST 或 PUT\n        :type general_webhook_method:str\n        :param general_webhook_headers:自定义接口回调请求头\n        :type general_webhook_headers:List[GeneralWebhookHeaderKV]\n        :param alarm_content_template_id:告警内容模版 ID\n        :type alarm_content_template_id:str\n        :param alarm_webhook_integration_id:告警 Webhook 集成配置的 ID\n        :type alarm_webhook_integration_id:str\n        :param alarm_webhook_integration_name:告警 Webhook 集成配置的名称\n        :type alarm_webhook_integration_name:str\n        :type alarm_webhook_integration_name:str\n        \"\"\"\n        self.receiver_type = receiver_type\n        self.receiver_names = receiver_names\n        self.receiver_channels = receiver_channels\n        self.start_time = start_time\n        self.end_time = end_time\n        self.webhook = webhook\n        self.general_webhook_url = general_webhook_url\n        self.general_webhook_body = general_webhook_body\n        self.alarm_webhook_at_users = alarm_webhook_at_users\n        self.alarm_webhook_is_at_all = alarm_webhook_is_at_all\n        self.alarm_webhook_at_groups = alarm_webhook_at_groups\n        self.general_webhook_method = general_webhook_method\n        self.general_webhook_headers = general_webhook_headers\n        self.alarm_content_template_id = alarm_content_template_id\n        self.alarm_webhook_integration_id = alarm_webhook_integration_id\n        self.alarm_webhook_integration_name = alarm_webhook_integration_name\n\n    def get_start_time(self):\n        \"\"\"\n        :return:可接收信息的时段中，开始的时间\n        :rtype: str\n        \"\"\"\n        return self.start_time\n\n    def get_webhook(self):\n        \"\"\"\n        :return: 飞书Webhook请求地址\n        :rtype: str\n        \"\"\"\n        return self.webhook\n\n    def get_receiver_channels(self):\n        \"\"\"\n        :return:通知接收渠道，支持Email、Sms、Phone\n        :rtype: List[str]\n        \"\"\"\n        return self.receiver_channels\n\n    def get_end_time(self):\n        \"\"\"\n        :return: 可接收信息的时段中\n        :rtype:str\n        \"\"\"\n        return self.end_time\n\n    def get_receiver_names(self):\n        \"\"\"\n        :return: 接收者的名字\n        :rtype: List[str]\n        \"\"\"\n        return self.receiver_names\n\n    def get_receiver_type(self):\n        \"\"\"\n        :return:接受者类型\n        :rtype: str\n        \"\"\"\n        return self.receiver_type\n\n    def get_general_webhook_url(self):\n        \"\"\"\n        :return:自定义接口回调地址\n        :rtype: str\n        \"\"\"\n        return self.general_webhook_url\n\n    def get_general_webhook_body(self):\n        \"\"\"\n        :return:自定义 WebHook 请求体\n        :rtype: str\n        \"\"\"\n        return self.general_webhook_body\n\n    def get_alarm_webhook_at_users(self):\n        \"\"\"\n        :return:通过 Webhook 集成配置发送通知到飞书、钉钉或企业微信时，需要提醒的用户名\n        :rtype: List[str]\n        \"\"\"\n        return self.alarm_webhook_at_users\n\n    def get_alarm_webhook_is_at_all(self):\n        \"\"\"\n        :return:通过 Webhook 集成配置发送通知到飞书、钉钉或企业微信时，是否提醒所有人\n        :rtype: bool\n        \"\"\"\n        return self.alarm_webhook_is_at_all\n\n    def get_alarm_webhook_at_groups(self):\n        \"\"\"\n        :return:通过 Webhook 集成配置发送通知到飞书、钉钉或企业微信时，需要提醒的用户组名称\n        :rtype: List[str]\n        \"\"\"\n        return self.alarm_webhook_at_groups\n\n    def get_general_webhook_method(self):\n        \"\"\"\n        :return:自定义接口回调方法，仅支持设置为 POST 或 PUT\n        :rtype: str\n        \"\"\"\n        return self.general_webhook_method\n\n    def get_general_webhook_headers(self):\n        \"\"\"\n        :return:自定义接口回调请求头\n        :rtype: List[GeneralWebhookHeaderKV]\n        \"\"\"\n        return self.general_webhook_headers\n\n    def get_alarm_content_template_id(self):\n        \"\"\"\n        :return:告警内容模版 ID\n        :rtype: str\n        \"\"\"\n        return self.alarm_content_template_id\n\n    def get_alarm_webhook_integration_id(self):\n        \"\"\"\n        :return:告警 Webhook 集成配置的 ID\n        :rtype: str\n        \"\"\"\n        return self.alarm_webhook_integration_id\n\n    def get_alarm_webhook_integration_name(self):\n        \"\"\"\n        :return:告警 Webhook 集成配置的名称\n        :rtype: str\n        \"\"\"\n        return self.alarm_webhook_integration_name\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        receiver_type = data.get(RECEIVER_TYPE)\n        receiver_names = data.get(RECEIVER_NAMES)\n        receiver_channels = data.get(RECEIVER_CHANNELS)\n        start_time = data.get(START_TIME)\n        end_time = data.get(END_TIME)\n        webhook = data.get(WEBHOOK)\n        general_webhook_url = data.get(GENERAL_WEBHOOK_URL)\n        general_webhook_body = data.get(GENERAL_WEBHOOK_BODY)\n        alarm_webhook_at_users = data.get(ALARM_WEBHOOK_AT_USERS)\n        alarm_webhook_is_at_all = data.get(ALARM_WEBHOOK_IS_AT_ALL)\n        alarm_webhook_at_groups = data.get(ALARM_WEBHOOK_AT_GROUPS)\n        general_webhook_method = data.get(GENERAL_WEBHOOK_METHOD)\n        alarm_content_template_id = data.get(ALARM_CONTENT_TEMPLATE_ID)\n        alarm_webhook_integration_id = data.get(ALARM_WEBHOOK_INTEGRATION_ID)\n        alarm_webhook_integration_name = data.get(ALARM_WEBHOOK_INTEGRATION_NAME)\n\n        general_webhook_headers = None\n        if GENERAL_WEBHOOK_HEADERS in data and data[GENERAL_WEBHOOK_HEADERS] is not None:\n            general_webhook_headers = []\n            for header in data[GENERAL_WEBHOOK_HEADERS]:\n                general_webhook_headers.append(  # pylint: disable=no-member\n                    GeneralWebhookHeaderKV.set_attributes(data=header))\n\n        receiver = cls(receiver_type, receiver_names, receiver_channels, start_time, end_time, webhook,\n                      general_webhook_url, general_webhook_body, alarm_webhook_at_users, alarm_webhook_is_at_all,\n                      alarm_webhook_at_groups, general_webhook_method, general_webhook_headers,\n                      alarm_content_template_id, alarm_webhook_integration_id, alarm_webhook_integration_name)\n\n        return receiver\n\n    def json(self):\n        json_data = super(Receiver, self).json()\n\n        if self.general_webhook_url is not None:\n            json_data[GENERAL_WEBHOOK_URL] = self.general_webhook_url\n        if self.general_webhook_body is not None:\n            json_data[GENERAL_WEBHOOK_BODY] = self.general_webhook_body\n        if self.alarm_webhook_at_users is not None:\n            json_data[ALARM_WEBHOOK_AT_USERS] = self.alarm_webhook_at_users\n        if self.alarm_webhook_is_at_all is not None:\n            json_data[ALARM_WEBHOOK_IS_AT_ALL] = self.alarm_webhook_is_at_all\n        if self.alarm_webhook_at_groups is not None:\n            json_data[ALARM_WEBHOOK_AT_GROUPS] = self.alarm_webhook_at_groups\n        if self.general_webhook_method is not None:\n            json_data[GENERAL_WEBHOOK_METHOD] = self.general_webhook_method\n        if self.general_webhook_headers is not None:\n            json_data[GENERAL_WEBHOOK_HEADERS] = []\n            for header in self.general_webhook_headers:\n                json_data[GENERAL_WEBHOOK_HEADERS].append(header.json())\n        if self.alarm_content_template_id is not None:\n            json_data[ALARM_CONTENT_TEMPLATE_ID] = self.alarm_content_template_id\n        if self.alarm_webhook_integration_id is not None:\n            json_data[ALARM_WEBHOOK_INTEGRATION_ID] = self.alarm_webhook_integration_id\n        if self.alarm_webhook_integration_name is not None:\n            json_data[ALARM_WEBHOOK_INTEGRATION_NAME] = self.alarm_webhook_integration_name\n\n        return json_data\n\n\n\nclass QueryRequest(TLSData):\n    def __init__(self, topic_id: str, query: str, number: int,\n                 start_time_offset: int, end_time_offset: int, topic_name: str = None, time_span_type: str = None,\n                 truncated_time: str = None, end_time_offset_unit: str = None, start_time_offset_unit: str = None):\n        \"\"\"\n        :param topic_id: 日志主题ID\n        :type topic_id: str\n        :param query: 查询语句，支持的最大长度为1024\n        :type query: str\n        :param number: 告警对象序号（从1开始递增）\n        :type number: int\n        :param start_time_offset: 查询范围起始时间相对当前的历史时间，单位为分钟，取值为非正，最大值为0，最小值为-1440\n        :type start_time_offset: int\n        :param end_time_offset: 查询范围终止时间相对当前的历史时间，单位为分钟，取值为非正，须大于StartTimeOffset，最大值为0，最小值为-1440\n        :type end_time_offset: int\n        :param topic_name: 告警策略执行的日志主题名称\n        :type topic_name: str\n        :param time_span_type: 查询是否是整点时间, 新增整点时间,非必填,空白时默认为Relative\n        :type time_span_type: str\n        :param truncated_time: 对时间取整,对分钟/小时取整\n        :type truncated_time: str\n        :param end_time_offset_unit: 查询结束时间范围单位, 默认值为分钟，支持秒/分钟/小时（Second，Minute，Hour）\n        :type end_time_offset_unit: str\n        :param start_time_offset_unit: 查询开始时间范围单位, 默认值为分钟，支持秒/分钟/小时（Second，Minute，Hour）\n        :type start_time_offset_unit: str\n        \"\"\"\n        self.topic_id = topic_id\n        self.query = query\n        self.number = number\n        self.start_time_offset = start_time_offset\n        self.end_time_offset = end_time_offset\n        self.topic_name = topic_name\n        self.time_span_type = time_span_type\n        self.truncated_time = truncated_time\n        self.end_time_offset_unit = end_time_offset_unit\n        self.start_time_offset_unit = start_time_offset_unit\n\n    def get_number(self):\n        \"\"\"\n        :return:告警对象序号；从 1 开始递增\n        :rtype: int\n        \"\"\"\n        return self.number\n\n    def get_start_time_offset(self):\n        \"\"\"\n        :return: 查询范围起始时间相对当前的历史时间，单位为分钟，取值为非正，最大值为 0，最小值为 -1440\n        :rtype: int\n        \"\"\"\n        return self.start_time_offset\n\n    def get_query(self):\n        \"\"\"\n        :return:查询语句，支持的最大长度为 1024\n        :rtype: str\n        \"\"\"\n        return self.query\n\n    def get_topic_name(self):\n        \"\"\"\n        :return: 告警策略执行的日志主题名称\n        :rtype: str\n        \"\"\"\n        return self.topic_name\n\n    def get_topic_id(self):\n        \"\"\"\n        :return: 日志主题 ID\n        :rtype: str\n        \"\"\"\n        return self.topic_id\n\n    def get_end_time_offset(self):\n        \"\"\"\n        :return: 查询范围终止时间相对当前的历史时间，单位为分钟\n        :rtype: int\n        \"\"\"\n        return self.end_time_offset\n\n    def get_time_span_type(self):\n        \"\"\"\n        :return: 查询是否是整点时间, 新增整点时间,非必填,空白时默认为Relative\n        :rtype: str\n        \"\"\"\n        return self.time_span_type\n\n    def get_truncated_time(self):\n        \"\"\"\n        :return: 对时间取整,对分钟/小时取整\n        :rtype: str\n        \"\"\"\n        return self.truncated_time\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        topic_id = data.get(TOPIC_ID)\n        topic_name = data.get(TOPIC_NAME)\n        query = data.get(QUERY)\n        number = data.get(NUMBER)\n        start_time_offset = data.get(START_TIME_OFFSET)\n        end_time_offset = data.get(END_TIME_OFFSET)\n        time_span_type = data.get(TIME_SPAN_TYPE)\n        truncated_time = data.get(TRUNCATED_TIME)\n\n        return cls(topic_id, query, number, start_time_offset, end_time_offset, topic_name, time_span_type, truncated_time)\n\n\nclass RequestCycle(TLSData):\n    def __init__(self, cycle_type: str, time: int, cron_tab: str = None, cron_time_zone: str = None):\n        \"\"\"\n        :param cycle_type: 执行周期类型，Period：周期执行，Fixed：定期执行，Cron：使用Cron表达式\n        :type cycle_type:str\n        :param time:告警任务执行的周期，或者定期执行的时间点。单位为分钟，取值范围为 1~1440\n        :type time:int\n        :param cron_tab:Cron表达式，日志服务通过 Cron 表达式指定告警任务定时执行。Cron 表达式的最小粒度为分钟，24 小时制\n        :type cron_tab:str\n        :param cron_time_zone:设置 Type 为 Cron 时，还需设置时区\n        :type cron_time_zone:str\n        \"\"\"\n        self.cycle_type = cycle_type\n        self.time = time\n        self.cron_tab = cron_tab\n        self.cron_time_zone = cron_time_zone\n\n    def get_time(self):\n        \"\"\"\n        :return:告警任务执行的周期，或者定期执行的时间点。单位为分钟\n        :rtype: int\n        \"\"\"\n        return self.time\n\n    def get_cycle_type(self):\n        \"\"\"\n        :return:执行周期类型，Period：周期执行，Fixed：定期执行\n        :rtype: str\n        \"\"\"\n        return self.cycle_type\n\n    def get_cron_tab(self):\n        \"\"\"\n        :return:Cron表达式，日志服务通过 Cron 表达式指定告警任务定时执行\n        :rtype: str\n        \"\"\"\n        return self.cron_tab\n\n    def get_cron_time_zone(self):\n        \"\"\"返回设置 Type 为 Cron 时的时区\n\n        :return: 时区信息\n        :rtype: str\n        \"\"\"\n        return self.cron_time_zone\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        cycle_type = data.get(TYPE)\n        time = data.get(TIME)\n        cron_tab = data.get(CRON_TAB)\n        cron_time_zone = data.get(CRON_TIME_ZONE)\n\n        return cls(cycle_type, time, cron_tab, cron_time_zone)\n\n    def json(self):\n        result = {TYPE: self.cycle_type, TIME: self.time}\n        if self.cron_tab is not None:\n            result[CRON_TAB] = self.cron_tab\n        if self.cron_time_zone is not None:\n            result[CRON_TIME_ZONE] = self.cron_time_zone\n        return result\n\n\nclass AlarmNotifyGroupInfo(TLSData):\n    def __init__(self, alarm_notify_group_name: str = None, alarm_notify_group_id: str = None,\n                 notify_type: List[str] = None, receivers: List[Receiver] = None,\n                 create_time: str = None, modify_time: str = None, iam_project_name: str = None,\n                 notice_rules: List[\"NoticeRule\"] = None):\n        self.alarm_notify_group_name = alarm_notify_group_name\n        self.alarm_notify_group_id = alarm_notify_group_id\n        self.notify_type = notify_type\n        self.receivers = receivers\n        self.create_time = create_time\n        self.modify_time = modify_time\n        self.iam_project_name = iam_project_name\n        self.notice_rules = notice_rules\n\n    def get_alarm_notify_group_name(self):\n        \"\"\"\n        :return:告警通知组名称\n        :rtype: str\n        \"\"\"\n        return self.alarm_notify_group_name\n\n    def get_notify_type(self):\n        \"\"\"\n        :return:告警通知的类型：Trigger - 告警触发，Recovery - 告警恢复\n        :rtype: List[str]\n        \"\"\"\n        return self.notify_type\n\n    def get_create_time(self):\n        \"\"\"\n        :return:告警通知组创建的时间\n        :rtype:str\n        \"\"\"\n        return self.create_time\n\n    def get_receivers(self):\n        \"\"\"\n        :return:接收告警的 IAM 用户列表\n        :rtype:List[Receiver]\n        \"\"\"\n        return self.receivers\n\n    def get_modify_time(self):\n        \"\"\"\n        :return:告警通知组修改的时间\n        :rtype:str\n        \"\"\"\n        return self.modify_time\n\n    def get_alarm_notify_group_id(self):\n        \"\"\"\n        :return:告警通知组 ID\n        :rtype:str\n        \"\"\"\n        return self.alarm_notify_group_id\n\n    def get_iam_project_name(self):\n        \"\"\"\n        :return: 告警组所属的IAM项目\n        :rtype: str\n        \"\"\"\n        return self.iam_project_name\n\n    def get_notice_rules(self):\n        \"\"\"\n        :return: 通知组规则\n        :rtype: List[NoticeRule]\n        \"\"\"\n        return self.notice_rules\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        alarm_notify_group_info = super(\n            AlarmNotifyGroupInfo, cls).set_attributes(data)\n\n        if RECEIVERS in data:\n            alarm_notify_group_info.receivers = []\n            for receiver in data[RECEIVERS]:\n                alarm_notify_group_info.receivers.append(  # pylint: disable=no-member\n                    Receiver.set_attributes(data=receiver))\n\n        if NOTICE_RULES in data and data[NOTICE_RULES] is not None:\n            alarm_notify_group_info.notice_rules = []\n            for notice_rule in data[NOTICE_RULES]:\n                alarm_notify_group_info.notice_rules.append(  # pylint: disable=no-member\n                    NoticeRule.set_attributes(data=notice_rule))\n\n        return alarm_notify_group_info\n\n\nclass AlarmPeriodSetting(TLSData):\n    def __init__(self, sms: int, phone: int, email: int, general_webhook: int):\n        self.sms = sms\n        self.phone = phone\n        self.email = email\n        self.general_webhook = general_webhook\n\n    def json(self):\n        return {SMS: self.sms, PHONE: self.phone, EMAIL: self.email, GENERAL_WEBHOOK: self.general_webhook}\n\n\nclass JoinConfig(TLSData):\n    def __init__(self, set_operation_type: str = None, condition: str = None):\n        self.condition = condition\n        self.set_operation_type = set_operation_type\n\n\nclass TriggerCondition(TLSData):\n    def __init__(self, severity: str = \"notice\", condition: str = None, count_condition: str = None, no_data: bool = None):\n        self.severity = severity\n        self.condition = condition\n        self.count_condition = count_condition\n        self.no_data = no_data\n\n\nclass AlarmInfo(TLSData):\n    def __init__(self, alarm_name: str = None, alarm_id: str = None, project_id: str = None, status: bool = None,\n                 query_request: List[QueryRequest] = None, request_cycle: RequestCycle = None, condition: str = None,\n                 trigger_period: int = None, alarm_period: int = None,\n                 alarm_notify_group: List[AlarmNotifyGroupInfo] = None, user_define_msg: str = None,\n                 create_time: str = None, modify_time: str = None,\n                 severity: str = None, alarm_period_detail: AlarmPeriodSetting = None,\n                 join_configurations: List[JoinConfig] = None, trigger_conditions: List[TriggerCondition] = None,\n                 send_resolved: bool = None):\n        self.alarm_name = alarm_name\n        self.alarm_id = alarm_id\n        self.project_id = project_id\n        self.status = status\n        self.query_request = query_request\n        self.request_cycle = request_cycle\n        self.condition = condition\n        self.trigger_period = trigger_period\n        self.alarm_period = alarm_period\n        self.alarm_notify_group = alarm_notify_group\n        self.user_define_msg = user_define_msg\n        self.create_time = create_time\n        self.modify_time = modify_time\n        self.severity = severity\n        self.alarm_period_detail = alarm_period_detail\n        self.join_configurations = join_configurations\n        self.trigger_conditions = trigger_conditions\n        self.send_resolved = send_resolved\n\n    def get_alarm_name(self):\n        \"\"\"\n        :return:告警策略名称\n        :rtype: str\n        \"\"\"\n        return self.alarm_name\n\n    def get_alarm_notify_group(self):\n        \"\"\"\n        :return:告警对应的通知列表\n        :rtype:List[AlarmNotifyGroupInfo]\n        \"\"\"\n        return self.alarm_notify_group\n\n    def get_request_cycle(self):\n        \"\"\"\n        :return:告警任务的执行周期\n        :rtype:RequestCycle\n        \"\"\"\n        return self.request_cycle\n\n    def get_alarm_period(self):\n        \"\"\"\n        :return:告警重复的周期\n        :rtype: int\n        \"\"\"\n        return self.alarm_period\n\n    def get_create_time(self):\n        \"\"\"\n        :return:创建告警策略的时间\n        :rtype:str\n        \"\"\"\n        return self.create_time\n\n    def get_modify_time(self):\n        \"\"\"\n        :return:告警策略最近修改的时间\n        :rtype:str\n        \"\"\"\n        return self.modify_time\n\n    def get_user_define_msg(self):\n        \"\"\"\n        :return:告警通知的内容\n        :rtype:str\n        \"\"\"\n        return self.user_define_msg\n\n    def get_condition(self):\n        \"\"\"\n        :return:告警触发条件\n        :rtype:str\n        \"\"\"\n        return self.condition\n\n    def get_query_request(self):\n        \"\"\"\n        :return:检索分析语句，可配置 1~3 条\n        :rtype:List[QueryRequest]\n        \"\"\"\n        return self.query_request\n\n    def get_project_id(self):\n        \"\"\"\n        :return:日志项目 ID\n        :rtype: str\n        \"\"\"\n        return self.project_id\n\n    def get_trigger_period(self):\n        \"\"\"\n        :return:持续周期\n        :rtype:int\n        \"\"\"\n        return self.trigger_period\n\n    def get_alarm_id(self):\n        \"\"\"\n        :return:告警策略的 ID\n        :rtype: str\n        \"\"\"\n        return self.alarm_id\n\n    def get_status(self):\n        \"\"\"\n        :return:是否开启告警策略\n        :rtype:bool\n        \"\"\"\n        return self.status\n\n    def get_severity(self):\n        \"\"\"\n        :return: 告警通知的级别，即告警的严重程度\n        :rtype: str\n        \"\"\"\n        return self.severity\n\n    def get_alarm_period_detail(self):\n        \"\"\"\n        :return: 告警通知发送的周期\n        :rtype: AlarmPeriodSetting\n        \"\"\"\n        return self.alarm_period_detail\n\n    def get_join_configurations(self):\n        \"\"\"\n        :return: 告警策略的 Join 配置\n        :rtype: List[JoinConfig]\n        \"\"\"\n        return self.join_configurations\n\n    def get_trigger_conditions(self):\n        \"\"\"\n        :return: 告警策略的触发条件\n        :rtype: List[TriggerCondition]\n        \"\"\"\n        return self.trigger_conditions\n\n    def get_send_resolved(self):\n        \"\"\"\n        :return: 是否发送恢复通知\n        :rtype: bool\n        \"\"\"\n        return self.send_resolved\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        alarm_info = super(AlarmInfo, cls).set_attributes(data)\n\n        if REQUEST_CYCLE in data:\n            alarm_info.request_cycle = RequestCycle.set_attributes(\n                data=data[REQUEST_CYCLE])\n        if QUERY_REQUEST in data:\n            alarm_info.query_request = []\n            for one_query_request in data[QUERY_REQUEST]:\n                alarm_info.query_request.append(  # pylint: disable=no-member\n                    QueryRequest.set_attributes(data=one_query_request))\n        if ALARM_NOTIFY_GROUP in data:\n            alarm_info.alarm_notify_group = []\n            for alarm_notify_group in data[ALARM_NOTIFY_GROUP]:\n                alarm_info.alarm_notify_group.append(  # pylint: disable=no-member\n                    AlarmNotifyGroupInfo.set_attributes(data=alarm_notify_group))\n        if ALARM_PERIOD_DETAIL in data:\n            if len(data[ALARM_PERIOD_DETAIL]) == 0:\n                alarm_info.alarm_period_detail = None\n            else:\n                sms = data[ALARM_PERIOD_DETAIL].get(SMS)\n                phone = data[ALARM_PERIOD_DETAIL].get(PHONE)\n                email = data[ALARM_PERIOD_DETAIL].get(EMAIL)\n                general_webhook = data[ALARM_PERIOD_DETAIL].get(\n                    GENERAL_WEBHOOK)\n                alarm_info.alarm_period_detail = AlarmPeriodSetting(\n                    sms, phone, email, general_webhook)\n        if JOIN_CONFIGURATIONS in data and data[JOIN_CONFIGURATIONS] is not None:\n            alarm_info.join_configurations = []\n            for join_configuration in data[JOIN_CONFIGURATIONS]:\n                alarm_info.join_configurations.append(  # pylint: disable=no-member\n                    JoinConfig.set_attributes(data=join_configuration))\n        if TRIGGER_CONDITIONS in data and data[TRIGGER_CONDITIONS] is not None:\n            alarm_info.trigger_conditions = []\n            for trigger_condition in data[TRIGGER_CONDITIONS]:\n                alarm_info.trigger_conditions.append(  # pylint: disable=no-member\n                    TriggerCondition.set_attributes(data=trigger_condition))\n        if SEND_RESOLVED in data:\n            alarm_info.send_resolved = data[SEND_RESOLVED]\n\n        return alarm_info\n\n\nclass ConsumerGroup(TLSData):\n    def __init__(self, project_id: str = None, consumer_group_name: str = None,\n                 heartbeat_ttl: int = None, ordered_consume: bool = None, topic_id_list: List[str] = None,\n                 project_name: str = None):\n        self.project_id = project_id\n        self.consumer_group_name = consumer_group_name\n        self.heartbeat_ttl = heartbeat_ttl\n        self.ordered_consume = ordered_consume\n        self.topic_id_list = topic_id_list\n        self.project_name = project_name\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        project_id = data.get(PROJECT_ID_UPPERCASE)\n        consumer_group_name = data.get(CONSUMER_GROUP_NAME)\n        heartbeat_ttl = data.get(HEARTBEAT_TTL)\n        ordered_consume = data.get(ORDERED_CONSUME)\n        topic_id_list = data.get(TOPIC_ID_LIST)\n        project_name = data.get(PROJECT_NAME)\n\n        return cls(project_id, consumer_group_name, heartbeat_ttl, ordered_consume, topic_id_list, project_name)\n\n\nclass ConsumeShard(TLSData):\n    def __init__(self, topic_id: str = None, shard_id: int = None):\n        self.topic_id = topic_id\n        self.shard_id = shard_id\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        topic_id = data.get(TOPIC_ID_UPPERCASE)\n        shard_id = data.get(SHARD_ID_UPPERCASE)\n\n        return cls(topic_id, shard_id)\n\nclass TosSourceInfo(TLSData):\n    def __init__(self, bucket: str = None, region: str = None, compress_type: str = None, prefix: str = None):\n        \"\"\"\n        :param bucket: TOS 存储桶名称\n        :type bucket: str\n        :param region: TOS 存储桶所在区域\n        :type region: str\n        :param compress_type: 日志压缩类型，可选值为 \"none\"、\"gzip\"、\"lz4\"、\"snappy\"\n        :type compress_type: str\n        :param prefix: 日志文件前缀，例如 \"log/\"\n        :type prefix: str, optional\n        \"\"\"\n        self.bucket = bucket\n        self.region = region\n        self.compress_type = compress_type\n        self.prefix = prefix\n\n    def json(self):\n        return {\n            \"bucket\": self.bucket,\n            \"region\": self.region,\n            \"compress_type\": self.compress_type,\n            \"prefix\": self.prefix,\n        }\n\nclass KafkaSourceInfo(TLSData):\n    def __init__(self, host: str = None, topic: str = None, encode: str = None, protocol: str = None,\n                 is_need_auth: bool = None, initial_offset: int = None,\n                 time_source_default: int = None, group: str = None, username: str = None, password: str = None,\n                 mechanism: str = None, instance_id: str = None):\n        \"\"\"\n        :param host: Kafka 集群地址，多个服务地址之间需使用半角逗号（,）分隔。\n        :type host: str\n        :param topic: Kafka Topic 名称。 多个 Kafka Topic 之间应使用半角逗号（,）分隔。\n        :type topic: str\n        :param encode: 数据的编码格式。可选值包括 UTF-8、GBK。\n        :type encode: str\n        :param protocol: Kafka 协议，可选值为 \"plaintext\"、\"ssl\"\n        :type protocol: str\n        :param is_need_auth: 是否开启鉴权。如果您使用的是公网服务地址，建议开启鉴权。\n        :type is_need_auth: bool\n        :param initial_offset: 数据导入的起始位置。0：最早时间，即从指定的 Kafka Topic 中的第一条数据开始导入；1：最近时间，即从指定的 Kafka Topic 中最新生成的数据开始导入。\n        :type initial_offset: int, optional\n        :param time_source_default: 指定日志时间。0：使用 Kafka 消息时间戳；1：使用系统当前时间。\n        :type time_source_default: int, optional\n        :param group: 消费者组 ID，可选值为 None\n        :type group: str, optional\n        :param username: 用于身份认证的 Kafka SASL 用户名。\n        :type username: str, optional\n        :param password: 用于身份认证的 Kafka SASL 用户密码。\n        :type password: str, optional\n        :param mechanism: 密码认证机制，可选值包括 PLAIN、SCRAM-SHA-256 和 SCRAM-SHA-512。\n        :type mechanism: str, optional\n        :param instance_id: 当您使用的是火山引擎消息队列 Kafka 版时，应设置为 Kafka 实例 ID。\n        :type instance_id: str, optional\n        \"\"\"\n        self.host = host\n        self.topic = topic\n        self.encode = encode\n        self.protocol = protocol\n        self.is_need_auth = is_need_auth\n        self.initial_offset = initial_offset\n        self.time_source_default = time_source_default\n        self.group = group\n        self.username = username\n        self.password = password\n        self.mechanism = mechanism\n        self.instance_id = instance_id\n\n    def json(self):\n        return {\n            \"host\": self.host,\n            \"topic\": self.topic,\n            \"encode\": self.encode,\n            \"protocol\": self.protocol,\n            \"is_need_auth\": self.is_need_auth,\n            \"initial_offset\": self.initial_offset,\n            \"time_source_default\": self.time_source_default,\n            \"group\": self.group,\n            \"username\": self.username,\n            \"password\": self.password,\n            \"mechanism\": self.mechanism,\n            \"instance_id\": self.instance_id,\n        }\n\nclass EsSourceInfo(TLSData):\n    def __init__(self, endpoint: str = None, import_mode: str = None, index: str = None,\n                 log_time_config: dict = None, max_import_time_delay_second: int = None,\n                 password: str = None, query_string: str = None, username: str = None):\n        \"\"\"Elasticsearch 导入源配置\n\n        :param endpoint: Elasticsearch 访问地址\n        :type endpoint: str, optional\n        :param import_mode: 导入模式\n        :type import_mode: str, optional\n        :param index: Elasticsearch 索引名称\n        :type index: str, optional\n        :param log_time_config: 日志时间字段配置，对应后端的 LogTimeConfig\n        :type log_time_config: dict, optional\n        :param max_import_time_delay_second: 最大导入时间延迟（秒）\n        :type max_import_time_delay_second: int, optional\n        :param password: Elasticsearch 访问密码\n        :type password: str, optional\n        :param query_string: 查询语句\n        :type query_string: str, optional\n        :param username: Elasticsearch 访问用户名\n        :type username: str, optional\n        \"\"\"\n        self.endpoint = endpoint\n        self.import_mode = import_mode\n        self.index = index\n        self.log_time_config = log_time_config\n        self.max_import_time_delay_second = max_import_time_delay_second\n        self.password = password\n        self.query_string = query_string\n        self.username = username\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        return super(EsSourceInfo, cls).set_attributes(data)\n\n    def json(self):\n        return {\n            \"endpoint\": self.endpoint,\n            \"import_mode\": self.import_mode,\n            \"index\": self.index,\n            \"log_time_config\": self.log_time_config,\n            \"max_import_time_delay_second\": self.max_import_time_delay_second,\n            \"password\": self.password,\n            \"query_string\": self.query_string,\n            \"username\": self.username,\n        }\n\n\nclass ImportSourceInfo(TLSData):\n    def __init__(self, tos_source_info: TosSourceInfo = None, kafka_source_info: KafkaSourceInfo = None,\n                 es_source_info: EsSourceInfo = None):\n        self.tos_source_info = tos_source_info\n        self.kafka_source_info = kafka_source_info\n        self.es_source_info = es_source_info\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        tos_source_info = None\n        kafka_source_info = None\n        es_source_info = None\n        if TOS_SOURCE_INFO in data:\n            tos_source_info = TosSourceInfo.set_attributes(data=data[TOS_SOURCE_INFO])\n        if KAFKA_SOURCE_INFO in data:\n            kafka_source_info = KafkaSourceInfo.set_attributes(data=data[KAFKA_SOURCE_INFO])\n        if \"EsSourceInfo\" in data:\n            es_source_info = EsSourceInfo.set_attributes(data=data[\"EsSourceInfo\"])\n\n        return cls(tos_source_info, kafka_source_info, es_source_info)\n\n    def json(self):\n        source_info = {}\n        if self.tos_source_info is not None:\n            source_info[TOS_SOURCE_INFO] = self.tos_source_info.json()\n        if self.kafka_source_info is not None:\n            source_info[KAFKA_SOURCE_INFO] = self.kafka_source_info.json()\n        if self.es_source_info is not None:\n            source_info[\"EsSourceInfo\"] = self.es_source_info.json()\n        return source_info\n\n\n\nclass ImportExtractRule(TLSData):\n    def __init__(self, delimiter: str = None, begin_regex: str = None, keys: List[str] = None,\n                 time_key: str = None, time_format: str = None, time_zone: str = None, un_match_up_load_switch: bool = None,\n                 un_match_log_key: str = None, quote: str = None, time_extract_regex: str = None, skip_line_count: int = None,\n                 time_sample: str = None):\n        assert (time_key is None and time_format is None) or (time_key is not None and time_format is not None)\n        assert (un_match_up_load_switch is None and un_match_log_key is None) or \\\n               (un_match_up_load_switch is not None and un_match_log_key is not None)\n\n        self.delimiter = delimiter\n        self.begin_regex = begin_regex\n        self.keys = keys\n        self.time_key = time_key\n        self.time_format = time_format\n        self.time_zone = time_zone\n        self.un_match_up_load_switch = un_match_up_load_switch\n        self.un_match_log_key = un_match_log_key\n        self.quote = quote\n        self.time_extract_regex = time_extract_regex\n        self.skip_line_count = skip_line_count\n        self.time_sample = time_sample\n\nclass TargetInfo(TLSData):\n    def __init__(self, region: str = None, log_type: str = None, extract_rule: ImportExtractRule = None, log_sample: str = None):\n        \"\"\"\n        :param region: 日志主题所在区域\n        :type region: str\n        :param log_type: 日志类型:delimiter_log、multiline_log、minimalist_log、json_log\n        :type log_type: str\n        :param extract_rule: 提取规则\n        :type extract_rule: ImportExtractRule, optional\n        :param log_sample: 日志样例。设置 log_type 为 multiline_log 时，需要配置日志样例\n        :type log_sample: str, optional\n        \"\"\"\n        self.region = region\n        self.log_type = log_type\n        self.log_sample = log_sample\n        self.extract_rule = extract_rule\n\n    def json(self):\n        target_info = super(TargetInfo, self).json()\n        if self.extract_rule is not None:\n            target_info[EXTRACT_RULE] = self.extract_rule.json()\n        return target_info\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        target_info = super(TargetInfo, cls).set_attributes(data)\n        if EXTRACT_RULE in data:\n            target_info.extract_rule = ImportExtractRule.set_attributes(data=data[EXTRACT_RULE])\n        return target_info\n\nclass TaskStatistics(TLSData):\n    def __init__(self, total: int = None, failed: int = None, skipped: int = None, not_exist: int = None,\n                 bytes_total: int = None, task_status: str = None, transferred: int = None, bytes_transferred: int = None,):\n        self.total = total\n        self.failed = failed\n        self.skipped = skipped\n        self.not_exist = not_exist\n        self.bytes_total = bytes_total\n        self.task_status = task_status\n        self.transferred = transferred\n        self.bytes_transferred = bytes_transferred\n\n\nclass ImportTaskInfo(TLSData):\n    def __init__(self, task_id: str = None, status: int = None, topic_id: str = None, task_name: str = None, project_id: str = None,\n                 topic_name: str = None, project_name: str = None, create_time: str = None, source_type: str = None, description: str = None,\n                 import_source_info: ImportSourceInfo = None, target_info: TargetInfo = None, task_statistics: TaskStatistics = None):\n        self.task_id = task_id\n        self.status = status\n        self.topic_id = topic_id\n        self.task_name = task_name\n        self.project_id = project_id\n        self.topic_name = topic_name\n        self.project_name = project_name\n        self.create_time = create_time\n        self.source_type = source_type\n        self.description = description\n        self.import_source_info = import_source_info\n        self.target_info = target_info\n        self.task_statistics = task_statistics\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        import_task_info = super(ImportTaskInfo, cls).set_attributes(data)\n        if TASK_STATISTICS in data:\n            import_task_info.task_statistics = TaskStatistics.set_attributes(data=data[TASK_STATISTICS])\n\n        if IMPORT_SOURCE_INFO in data:\n            import_task_info.import_source_info = ImportSourceInfo.set_attributes(data=data[IMPORT_SOURCE_INFO])\n\n        if TARGET_INFO in data:\n            import_task_info.target_info = TargetInfo.set_attributes(data=data[TARGET_INFO])\n\n        return import_task_info\n\nclass JsonInfo(TLSData):\n    def __init__(self, enable: bool = None, keys: List[str] = None, escape: bool = None):\n        \"\"\"\n        :param enable: 启用标志\n        :type enable: bool, optional\n        :param keys: 需要投递的字段列表\n        :type keys: List[str], optional\n        :param escape: 是否转义\n        :type escape: bool, optional\n        \"\"\"\n        self.enable = enable\n        self.keys = keys\n        self.escape = escape\n\n\nclass CsvInfo(TLSData):\n    def __init__(self, keys: List[str] = None, delimiter: str = None, escape_char: str = None,\n                 print_header: bool = None, non_field_content: str = None):\n        \"\"\"\n        :param keys: 需要投递的字段列表\n        :type keys: List[str], optional\n        :param delimiter: 分隔符\n        :type delimiter: str, optional\n        :param escape_char: 转义符\n        :type escape_char: str, optional\n        :param print_header: 首行是否打印Key\n        :type print_header: bool, optional\n        :param non_field_content: 无效字段填充内容\n        :type non_field_content: str, optional\n        \"\"\"\n        self.keys = keys\n        self.delimiter = delimiter\n        self.escape_char = escape_char\n        self.print_header = print_header\n        self.non_field_content = non_field_content\n\nclass ContentInfo(TLSData):\n    def __init__(self, format: str = None, json_info: JsonInfo = None, csv_info: CsvInfo = None):\n        \"\"\"\n        :param format: 日志内容解析格式,投递到 TOS 时，支持配置为 json、csv。投递到 Kafka 时，支持配置为 original、json。\n        :type format: str, optional\n        :param json_info: JSON格式日志内容配置\n        :type json_info: JsonInfo, optional\n        :param csv_info: CSV格式日志内容配置\n        :type csv_info: CsvInfo, optional\n        \"\"\"\n        self.format = format\n        self.json_info = json_info\n        self.csv_info = csv_info\n\n    def json(self):\n        content_info = super(ContentInfo, self).json()\n        if self.json_info:\n            content_info[JSON_INFO] = self.json_info.json()\n        if self.csv_info:\n            content_info[CSV_INFO] = self.csv_info.json()\n        return content_info\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        content_info = super(ContentInfo, cls).set_attributes(data)\n        if JSON_INFO in data:\n            content_info.json_info = JsonInfo.set_attributes(data=data[JSON_INFO])\n\n        if CSV_INFO in data:\n            content_info.csv_info = CsvInfo.set_attributes(data=data[CSV_INFO])\n\n        return content_info\n\n\n\nclass TosShipperInfo(TLSData):\n    def __init__(self, bucket: str = None, prefix: str = None, max_size: int = None, compress: str = None,\n                 interval: int = None, partition_format: str = None):\n        \"\"\"\n        :param bucket: TOS存储桶名称\n        :type bucket: str, optional\n        :param prefix: 存储桶的顶级目录名称\n        :type prefix: str, optional\n        :param max_size: 每个分区最大可投递的原始文件大小，单位为MiB\n        :type max_size: int, optional\n        :param compress: 压缩格式\n        :type compress: str, optional\n        :param interval: 投递时间间隔，单位为秒\n        :type interval: int, optional\n        :param partition_format: 投递日志的分区规则\n        :type partition_format: str, optional\n        \"\"\"\n        self.bucket = bucket\n        self.prefix = prefix\n        self.max_size = max_size\n        self.compress = compress\n        self.interval = interval\n        self.partition_format = partition_format\n\n\nclass KafkaShipperInfo(TLSData):\n    def __init__(self, instance: str = None, kafka_topic: str = None, compress: str = None,\n                 start_time: int = None, end_time: int = None):\n        \"\"\"\n        :param instance: Kafka实例\n        :type instance: str, optional\n        :param kafka_topic: Kafka Topic名称\n        :type kafka_topic: str, optional\n        :param compress: 压缩格式\n        :type compress: str, optional\n        :param start_time: 投递开始时间，毫秒时间戳\n        :type start_time: int, optional\n        :param end_time: 投递结束时间，毫秒时间戳\n        :type end_time: int, optional\n        \"\"\"\n        self.instance = instance\n        self.kafka_topic = kafka_topic\n        self.compress = compress\n        self.start_time = start_time\n        self.end_time = end_time\n\n\nclass ShipperInfo(TLSData):\n    def __init__(self, shipper_id: str = None, shipper_name: str = None, project_id: str = None,\n                 project_name: str = None, topic_id: str = None, topic_name: str = None,\n                 shipper_type: str = None, status: bool = None, create_time: str = None,\n                 modify_time: str = None, shipper_start_time: int = None, shipper_end_time: int = None,\n                 content_info: ContentInfo = None, tos_shipper_info: TosShipperInfo = None,\n                 kafka_shipper_info: KafkaShipperInfo = None, dashboard_id: str = None,\n                 role_trn: str = None):\n        \"\"\"\n        :param shipper_id: 投递配置ID\n        :type shipper_id: str, optional\n        :param shipper_name: 投递配置名称\n        :type shipper_name: str, optional\n        :param project_id: 日志项目ID\n        :type project_id: str, optional\n        :param project_name: 日志项目名称\n        :type project_name: str, optional\n        :param topic_id: 日志主题ID\n        :type topic_id: str, optional\n        :param topic_name: 日志主题名称\n        :type topic_name: str, optional\n        :param shipper_type: 投递类型\n        :type shipper_type: str, optional\n        :param status: 是否开启投递配置\n        :type status: bool, optional\n        :param create_time: 创建时间\n        :type create_time: str, optional\n        :param modify_time: 修改时间\n        :type modify_time: str, optional\n        :param shipper_start_time: 投递开始时间\n        :type shipper_start_time: int, optional\n        :param shipper_end_time: 投递结束时间\n        :type shipper_end_time: int, optional\n        :param content_info: 日志内容的投递格式配置\n        :type content_info: ContentInfo, optional\n        :param tos_shipper_info: 投递到TOS的相关信息\n        :type tos_shipper_info: TosShipperInfo, optional\n        :param kafka_shipper_info: 投递到Kafka的相关信息\n        :type kafka_shipper_info: KafkaShipperInfo, optional\n        :param dashboard_id: 投递的默认内置仪表盘ID\n        :type dashboard_id: str, optional\n        :param role_trn: 自定义角色的Trn\n        :type role_trn: str, optional\n        \"\"\"\n        self.shipper_id = shipper_id\n        self.shipper_name = shipper_name\n        self.project_id = project_id\n        self.project_name = project_name\n        self.topic_id = topic_id\n        self.topic_name = topic_name\n        self.shipper_type = shipper_type\n        self.status = status\n        self.create_time = create_time\n        self.modify_time = modify_time\n        self.shipper_start_time = shipper_start_time\n        self.shipper_end_time = shipper_end_time\n        self.content_info = content_info\n        self.tos_shipper_info = tos_shipper_info\n        self.kafka_shipper_info = kafka_shipper_info\n        self.dashboard_id = dashboard_id\n        self.role_trn = role_trn\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        shipper_info = super(ShipperInfo, cls).set_attributes(data)\n        if CONTENT_INFO in data:\n            shipper_info.content_info = ContentInfo.set_attributes(data=data[CONTENT_INFO])\n        if TOS_SHIPPER_INFO in data:\n            shipper_info.tos_shipper_info = TosShipperInfo.set_attributes(data=data[TOS_SHIPPER_INFO])\n        if KAFKA_SHIPPER_INFO in data:\n            shipper_info.kafka_shipper_info = KafkaShipperInfo.set_attributes(data=data[KAFKA_SHIPPER_INFO])\n        return shipper_info\n\n\nclass TargetResource(TLSData):\n    def __init__(self, alias: str, topic_id: str, region: str, role_trn: str = None):\n        \"\"\"\n        :param alias: 自定义输出目标的名称，在数据加工规则中需要使用此名称指代输出目标\n        :type alias: str\n        :param topic_id: 用于存储加工后日志的日志主题\n        :type topic_id: str\n        :param region: 用于存储加工后日志的日志主题的地域\n        :type region: str\n        :param role_trn: 跨账号授权角色名\n        :type role_trn: str, optional\n        \"\"\"\n        self.alias = alias\n        self.topic_id = topic_id\n        self.region = region\n        self.role_trn = role_trn\n\n\nclass TraceInstanceInfo(TLSData):\n    def __init__(self, trace_instance_id: str = None, trace_instance_name: str = None, project_id: str = None,\n                 project_name: str = None, trace_topic_id: str = None, trace_topic_name: str = None,\n                 dependency_topic_id: str = None, dependency_topic_topic_name: str = None,\n                 trace_instance_status: str = None, description: str = None,\n                 create_time: str = None, modify_time: str = None):\n        \"\"\"\n        :param trace_instance_id: Trace实例ID\n        :type trace_instance_id: str, optional\n        :param trace_instance_name: Trace实例名称\n        :type trace_instance_name: str, optional\n        :param project_id: 日志项目ID\n        :type project_id: str, optional\n        :param project_name: 日志项目名称\n        :type project_name: str, optional\n        :param trace_topic_id: Trace Topic ID\n        :type trace_topic_id: str, optional\n        :param trace_topic_name: Trace Topic名称\n        :type trace_topic_name: str, optional\n        :param dependency_topic_id: Dependency Topic ID\n        :type dependency_topic_id: str, optional\n        :param dependency_topic_topic_name: Dependency Topic名称\n        :type dependency_topic_topic_name: str, optional\n        :param trace_instance_status: Trace实例状态\n        :type trace_instance_status: str, optional\n        :param description: Trace实例描述\n        :type description: str, optional\n        :param create_time: 创建时间\n        :type create_time: str, optional\n        :param modify_time: 修改时间\n        :type modify_time: str, optional\n        \"\"\"\n        self.trace_instance_id = trace_instance_id\n        self.trace_instance_name = trace_instance_name\n        self.project_id = project_id\n        self.project_name = project_name\n        self.trace_topic_id = trace_topic_id\n        self.trace_topic_name = trace_topic_name\n        self.dependency_topic_id = dependency_topic_id\n        self.dependency_topic_topic_name = dependency_topic_topic_name\n        self.trace_instance_status = trace_instance_status\n        self.description = description\n        self.create_time = create_time\n        self.modify_time = modify_time\n\n    def get_trace_instance_id(self):\n        \"\"\"返回 Trace实例ID\"\"\"\n        return self.trace_instance_id\n\n    def get_trace_instance_name(self):\n        \"\"\"返回 Trace实例名称\"\"\"\n        return self.trace_instance_name\n\n    def get_trace_instance_status(self):\n        \"\"\"返回 Trace实例状态\"\"\"\n        return self.trace_instance_status\n\n    def get_project_id(self):\n        \"\"\"返回 日志项目ID\"\"\"\n        return self.project_id\n\n    def get_project_name(self):\n        \"\"\"返回 日志项目名称\"\"\"\n        return self.project_name\n\n    def get_description(self):\n        \"\"\"返回 Trace实例描述\"\"\"\n        return self.description\n\n    def get_create_time(self):\n        \"\"\"返回 创建时间\"\"\"\n        return self.create_time\n\n    def get_modify_time(self):\n        \"\"\"返回 修改时间\"\"\"\n        return self.modify_time\n\n    def get_trace_topic_id(self):\n        \"\"\"返回 Trace Topic ID\"\"\"\n        return self.trace_topic_id\n\n    def get_trace_topic_name(self):\n        \"\"\"返回 Trace Topic名称\"\"\"\n        return self.trace_topic_name\n\n    def get_dependency_topic_id(self):\n        \"\"\"返回 Dependency Topic ID\"\"\"\n        return self.dependency_topic_id\n\n    def get_dependency_topic_topic_name(self):\n        \"\"\"返回 Dependency Topic名称\"\"\"\n        return self.dependency_topic_topic_name\n\n\nclass TargetResourceInfo(TLSData):\n    def __init__(self, alias: str = None, topic_id: str = None, project_id: str = None,\n                 project_name: str = None, region: str = None, topic_name: str = None, role_trn: str = None):\n        \"\"\"\\\n        :param alias: 自定义输出目标的名称\n        :type alias: str\n        :param topic_id: 用于存储加工后日志的日志主题 ID\n        :type topic_id: str\n        :param project_id: 用于存储加工后日志的日志项目 ID\n        :type project_id: str\n        :param project_name: 用于存储加工后日志的日志项目名称\n        :type project_name: str\n        :param region: 用于存储加工后日志的日志项目所属地域\n        :type region: str\n        :param topic_name: 用于存储加工后日志的日志主题名称\n        :type topic_name: str\n        :param role_trn: 跨账号授权角色名\n        :type role_trn: str\n        \"\"\"\n        self.alias = alias\n        self.topic_id = topic_id\n        self.project_id = project_id\n        self.project_name = project_name\n        self.region = region\n        self.topic_name = topic_name\n        self.role_trn = role_trn\n\n    def get_alias(self):\n        \"\"\"\\\n        :return: 自定义输出目标的名称\n        :rtype: str\n        \"\"\"\n        return self.alias\n\n    def get_topic_id(self):\n        \"\"\"\\\n        :return: 用于存储加工后日志的日志主题 ID\n        :rtype: str\n        \"\"\"\n        return self.topic_id\n\n    def get_project_id(self):\n        \"\"\"\\\n        :return: 用于存储加工后日志的日志项目 ID\n        :rtype: str\n        \"\"\"\n        return self.project_id\n\n    def get_project_name(self):\n        \"\"\"\\\n        :return: 用于存储加工后日志的日志项目名称\n        :rtype: str\n        \"\"\"\n        return self.project_name\n\n    def get_region(self):\n        \"\"\"\\\n        :return: 用于存储加工后日志的日志项目所属地域\n        :rtype: str\n        \"\"\"\n        return self.region\n\n    def get_topic_name(self):\n        \"\"\"\\\n        :return: 用于存储加工后日志的日志主题名称\n        :type topic_name: str\n        \"\"\"\n        return self.topic_name\n\n    def get_role_trn(self):\n        \"\"\"\\\n        :return: 跨账号授权角色名\n        :rtype: str\n        \"\"\"\n        return self.role_trn\n\n\nclass EtlTaskInfo(TLSData):\n    def __init__(\n            self,\n            task_id: str = None,\n            name: str = None,\n            source_topic_id: str = None,\n            source_topic_name: str = None,\n            dsl_type: str = None,\n            script: str = None,\n            task_type: str = None,\n            target_resources: List[TargetResourceInfo] = None,\n            enable: bool = None,\n            description: str = None,\n            etl_status: str = None,\n            from_time: int = None,\n            to_time: int = None,\n            create_time: str = None,\n            modify_time: str = None,\n            last_enable_time: str = None,\n            dashboard_id: str = None,\n            project_id: str = None,\n            project_name: str = None):\n        \"\"\"ETL 任务信息\n\n        对应服务端 DescribeETLTaskResp 结构，用于承载 DescribeETLTasks 返回的单个任务。\n        \"\"\"\n        self.task_id = task_id\n        self.name = name\n        self.source_topic_id = source_topic_id\n        self.source_topic_name = source_topic_name\n        self.dsl_type = dsl_type\n        self.script = script\n        self.task_type = task_type\n        self.target_resources = target_resources\n        self.enable = enable\n        self.description = description\n        self.etl_status = etl_status\n        self.from_time = from_time\n        self.to_time = to_time\n        self.create_time = create_time\n        self.modify_time = modify_time\n        self.last_enable_time = last_enable_time\n        self.dashboard_id = dashboard_id\n        self.project_id = project_id\n        self.project_name = project_name\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        etl_task_info = super(EtlTaskInfo, cls).set_attributes(data)\n\n        if ETL_TARGET_RESOURCES in data and data[ETL_TARGET_RESOURCES] is not None:\n            etl_task_info.target_resources = []\n            for target_resource in data[ETL_TARGET_RESOURCES]:\n                etl_task_info.target_resources.append(  # pylint: disable=no-member\n                    TargetResourceInfo.set_attributes(data=target_resource)\n                )\n\n        return etl_task_info\n\nclass RequestCycleInfo(TLSData):\n    def __init__(self, time: int = None, task_type: str = None, cron_tab: str = None, cron_time_zone: str = None):\n        \"\"\"\n        :param time: 调度的周期或者定期执行的时间点（距离 00:00 的分钟数），取值范围为 1~1440，单位为分钟\n        :type time: int, optional\n        :param task_type: 调度周期类型。可选值：Period：按照周期进行调度，即每隔一段时间调度一次。\n                         Fixed：定期调度，即每天固定时间点调度一次。Cron：使用 Cron 表达式\n        :type task_type: str, optional\n        :param cron_tab: Cron 表达式，日志服务通过 Cron 表达式指定告警任务定时执行。\n                        Cron 表达式的最小粒度为分钟，24 小时制\n        :type cron_tab: str, optional\n        :param cron_time_zone: 设置 Type 为 Cron 时，还需设置时区\n        :type cron_time_zone: str, optional\n        \"\"\"\n        self.time = time\n        self.type = task_type  # 使用 type 字段以匹配 API 响应格式\n        self.cron_tab = cron_tab\n        self.cron_time_zone = cron_time_zone\n\n\nclass ScheduleSqlTaskInfo(TLSData):\n    def __init__(self, task_id: str = None, task_name: str = None, description: str = None,\n                 source_project_id: str = None, source_project_name: str = None,\n                 source_topic_id: str = None, source_topic_name: str = None,\n                 dest_region: str = None, dest_project_id: str = None,\n                 dest_topic_id: str = None, dest_topic_name: str = None,\n                 status: int = None, process_start_time: int = None,\n                 process_end_time: int = None, process_sql_delay: int = None,\n                 process_time_window: str = None, query: str = None,\n                 request_cycle: RequestCycleInfo = None, create_time_stamp: int = None,\n                 modify_time_stamp: int = None):\n        \"\"\"\n        :param task_id: 定时 SQL 分析任务 ID\n        :type task_id: str, optional\n        :param task_name: 定时 SQL 分析任务名称\n        :type task_name: str, optional\n        :param description: 定时 SQL 分析任务的简单描述\n        :type description: str, optional\n        :param source_project_id: 源日志主题所属的日志项目 ID\n        :type source_project_id: str, optional\n        :param source_project_name: 源日志主题所属的日志项目名称\n        :type source_project_name: str, optional\n        :param source_topic_id: 进行定时 SQL 分析的原始日志所在的源日志主题 ID\n        :type source_topic_id: str, optional\n        :param source_topic_name: 进行定时 SQL 分析的原始日志所在的源日志主题名称\n        :type source_topic_name: str, optional\n        :param dest_region: 目标日志项目所属地域\n        :type dest_region: str, optional\n        :param dest_project_id: 用于存储定时 SQL 分析结果数据的目标日志主题所属日志项目\n        :type dest_project_id: str, optional\n        :param dest_topic_id: 用于存储定时 SQL 分析结果数据的目标日志主题 ID\n        :type dest_topic_id: str, optional\n        :param dest_topic_name: 用于存储定时 SQL 分析结果数据的目标日志主题名称\n        :type dest_topic_name: str, optional\n        :param status: 完成任务配置后是否立即启动定时 SQL 分析任务。0：关闭任务，后续需手动启动任务。1：立即启动\n        :type status: int, optional\n        :param process_start_time: 调度定时 SQL 任务的开始时间，即第一个实例的创建时间。格式为秒级时间戳\n        :type process_start_time: int, optional\n        :param process_end_time: 调度定时 SQL 任务的结束时间。格式为秒级时间戳\n        :type process_end_time: int, optional\n        :param process_sql_delay: 每次调度的延迟时间。单位为秒\n        :type process_sql_delay: int, optional\n        :param process_time_window: SQL 时间窗口\n        :type process_time_window: str, optional\n        :param query: 定时 SQL 分析任务定期执行的检索与分析语句\n        :type query: str, optional\n        :param request_cycle: 定时 SQL 分析任务的调度周期\n        :type request_cycle: RequestCycleInfo, optional\n        :param create_time_stamp: 定时 SQL 分析任务的创建时间\n        :type create_time_stamp: int, optional\n        :param modify_time_stamp: 定时 SQL 分析任务的最近一次修改时间\n        :type modify_time_stamp: int, optional\n        \"\"\"\n        self.task_id = task_id\n        self.task_name = task_name\n        self.description = description\n        # 规范字段名：source_project_id/source_topic_id/dest_project_id/dest_topic_id\n        self.source_project_id = source_project_id\n        self.source_project_name = source_project_name\n        self.source_topic_id = source_topic_id\n        self.source_topic_name = source_topic_name\n        self.dest_region = dest_region\n        self.dest_project_id = dest_project_id\n        self.dest_topic_id = dest_topic_id\n        self.dest_topic_name = dest_topic_name\n        self.status = status\n        self.process_start_time = process_start_time\n        self.process_end_time = process_end_time\n        self.process_sql_delay = process_sql_delay\n        self.process_time_window = process_time_window\n        self.query = query\n        self.request_cycle = request_cycle\n        self.create_time_stamp = create_time_stamp\n        self.modify_time_stamp = modify_time_stamp\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        schedule_sql_task_info = super(ScheduleSqlTaskInfo, cls).set_attributes(data)\n\n        # 处理嵌套的 RequestCycle 对象\n        if REQUEST_CYCLE in data and data[REQUEST_CYCLE] is not None:\n            schedule_sql_task_info.request_cycle = RequestCycleInfo.set_attributes(data=data[REQUEST_CYCLE])\n\n        return schedule_sql_task_info\n\n\nclass DingTalkContentTemplateInfo(TLSData):\n    def __init__(self, title: str = None, locale: str = None, content: str = None):\n        \"\"\"\n        :param title: 告警通知内容的主题\n        :param locale: 告警通知中固定内容的语言，可选值为 zh-CN、en-US\n        :param content: 告警通知内容，支持普通文本格式，支持插入内容变量、内容函数等\n        \"\"\"\n        self.title = title\n        self.locale = locale\n        self.content = content\n\n\nclass EmailContentTemplateInfo(TLSData):\n    def __init__(self, locale: str = None, content: str = None, subject: str = None):\n        \"\"\"\n        :param locale: 告警通知中固定内容的语言，可选值为 zh-CN、en-US\n        :param content: 告警通知内容，支持普通文本格式，支持插入内容变量、内容函数等\n        :param subject: 邮件通知的主题\n        \"\"\"\n        self.locale = locale\n        self.content = content\n        self.subject = subject\n\n\nclass LarkContentTemplateInfo(TLSData):\n    def __init__(self, title: str = None, locale: str = None, content: str = None):\n        \"\"\"\n        :param title: 告警通知内容的主题\n        :param locale: 告警通知中固定内容的语言，可选值为 zh-CN、en-US\n        :param content: 告警通知内容，支持普通文本格式，支持插入内容变量、内容函数等\n        \"\"\"\n        self.title = title\n        self.locale = locale\n        self.content = content\n\n\nclass SmsContentTemplateInfo(TLSData):\n    def __init__(self, locale: str = None, content: str = None):\n        \"\"\"\n        :param locale: 告警通知中固定内容的语言，可选值为 zh-CN、en-US\n        :param content: 告警通知内容，支持普通文本格式，支持插入内容变量、内容函数等\n        \"\"\"\n        self.locale = locale\n        self.content = content\n\n\nclass VmsContentTemplateInfo(TLSData):\n    def __init__(self, locale: str = None, content: str = None):\n        \"\"\"\n        :param locale: 告警通知中固定内容的语言，可选值为 zh-CN、en-US\n        :param content: 告警通知内容，支持普通文本格式，支持插入内容变量、内容函数等\n        \"\"\"\n        self.locale = locale\n        self.content = content\n\n\nclass WeChatContentTemplateInfo(TLSData):\n    def __init__(self, title: str = None, locale: str = None, content: str = None):\n        \"\"\"\n        :param title: 告警通知内容的主题\n        :param locale: 告警通知中固定内容的语言，可选值为 zh-CN、en-US\n        :param content: 告警通知内容，支持普通文本格式，支持插入内容变量、内容函数等\n        \"\"\"\n        self.title = title\n        self.locale = locale\n        self.content = content\n\n\nclass WebhookContentTemplateInfo(TLSData):\n    def __init__(self, content: str = None):\n        \"\"\"\n        :param content: 告警通知内容，通常为 JSON 格式，支持插入内容变量、内容函数等\n        \"\"\"\n        self.content = content\n\n\nclass ContentTemplateInfo(TLSData):\n    def __init__(self, sms: SmsContentTemplateInfo = None, vms: VmsContentTemplateInfo = None,\n                 lark: LarkContentTemplateInfo = None, email: EmailContentTemplateInfo = None,\n                 we_chat: WeChatContentTemplateInfo = None, webhook: WebhookContentTemplateInfo = None,\n                 ding_talk: DingTalkContentTemplateInfo = None, is_default: bool = None,\n                 create_time: str = None, modify_time: str = None,\n                 alarm_content_template_id: str = None,\n                 alarm_content_template_name: str = None):\n        \"\"\"告警内容模板信息\n\n        :param sms: 短信通知内容模板相关信息\n        :type sms: SmsContentTemplateInfo\n        :param vms: 电话通知内容模板相关信息\n        :type vms: VmsContentTemplateInfo\n        :param lark: 飞书通知内容模板相关信息\n        :type lark: LarkContentTemplateInfo\n        :param email: 邮件通知内容模板相关信息\n        :type email: EmailContentTemplateInfo\n        :param we_chat: 企业微信通知内容模板相关信息\n        :type we_chat: WeChatContentTemplateInfo\n        :param webhook: 自定义 Webhook 通知内容模板相关信息\n        :type webhook: WebhookContentTemplateInfo\n        :param ding_talk: 钉钉通知内容模板相关信息\n        :type ding_talk: DingTalkContentTemplateInfo\n        :param is_default: 是否为内置的内容模版\n        :type is_default: bool\n        :param create_time: 告警通知内容模版的创建时间\n        :type create_time: str\n        :param modify_time: 告警通知内容模板的修改时间\n        :type modify_time: str\n        :param alarm_content_template_id: 告警通知内容模板 ID\n        :type alarm_content_template_id: str\n        :param alarm_content_template_name: 告警通知内容模板名称\n        :type alarm_content_template_name: str\n        \"\"\"\n        self.sms = sms\n        self.vms = vms\n        self.lark = lark\n        self.email = email\n        self.we_chat = we_chat\n        self.webhook = webhook\n        self.ding_talk = ding_talk\n        self.is_default = is_default\n        self.create_time = create_time\n        self.modify_time = modify_time\n        self.alarm_content_template_id = alarm_content_template_id\n        self.alarm_content_template_name = alarm_content_template_name\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        content_template_info = super(ContentTemplateInfo, cls).set_attributes(data)\n\n        sms_data = data.get(\"Sms\")\n        if sms_data is None:\n            sms_data = data.get(SMS)\n        if sms_data is not None:\n            content_template_info.sms = SmsContentTemplateInfo.set_attributes(sms_data)\n\n        if VMS in data and data[VMS] is not None:\n            content_template_info.vms = VmsContentTemplateInfo.set_attributes(data[VMS])\n\n        if LARK in data and data[LARK] is not None:\n            content_template_info.lark = LarkContentTemplateInfo.set_attributes(data[LARK])\n\n        if EMAIL in data and data[EMAIL] is not None:\n            content_template_info.email = EmailContentTemplateInfo.set_attributes(data[EMAIL])\n\n        if WE_CHAT in data and data[WE_CHAT] is not None:\n            content_template_info.we_chat = WeChatContentTemplateInfo.set_attributes(data[WE_CHAT])\n\n        if WEBHOOK in data and data[WEBHOOK] is not None:\n            content_template_info.webhook = WebhookContentTemplateInfo.set_attributes(data[WEBHOOK])\n\n        if DING_TALK in data and data[DING_TALK] is not None:\n            content_template_info.ding_talk = DingTalkContentTemplateInfo.set_attributes(data[DING_TALK])\n\n        return content_template_info\n\n\nclass GeneralWebhookHeaderKV(TLSData):\n    def __init__(self, key: str = None, value: str = None):\n        \"\"\"自定义 Webhook 请求头键值对\n\n        :param key: 自定义请求头的 Key\n        :type key: str\n        :param value: 自定义请求头的 Value\n        :type value: str\n        \"\"\"\n        self.key = key\n        self.value = value\n\n    def get_key(self):\n        \"\"\"返回自定义请求头的 Key\n\n        :return: 自定义请求头的 Key\n        :rtype: str\n        \"\"\"\n        return self.key\n\n    def get_value(self):\n        \"\"\"返回自定义请求头的 Value\n\n        :return: 自定义请求头的 Value\n        :rtype: str\n        \"\"\"\n        return self.value\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        \"\"\"从字典构造 GeneralWebhookHeaderKV 对象\"\"\"\n        key = data.get(KEY)\n        value = data.get(VALUE)\n        return cls(key, value)\n\nclass WebhookIntegrationInfo(TLSData):\n    def __init__(self, webhook_id: str = None, create_time: str = None, modify_time: str = None,\n                 webhook_url: str = None, webhook_name: str = None, webhook_type: str = None,\n                 webhook_method: str = None, webhook_secret: str = None,\n                 webhook_headers: List[GeneralWebhookHeaderKV] = None):\n        \"\"\"告警 Webhook 集成配置信息\n\n        :param webhook_id: Webhook 集成配置 ID\n        :type webhook_id: str\n        :param create_time: Webhook 集成配置创建时间\n        :type create_time: str\n        :param modify_time: Webhook 集成配置最近一次修改时间\n        :type modify_time: str\n        :param webhook_url: Webhook 请求地址\n        :type webhook_url: str\n        :param webhook_name: Webhook 集成配置名称\n        :type webhook_name: str\n        :param webhook_type: Webhook 类型\n        :type webhook_type: str\n        :param webhook_method: 自定义 Webhook 请求方法\n        :type webhook_method: str\n        :param webhook_secret: Webhook 加密密钥\n        :type webhook_secret: str\n        :param webhook_headers: 自定义 Webhook 的请求头\n        :type webhook_headers: List[GeneralWebhookHeaderKV]\n        \"\"\"\n        self.webhook_id = webhook_id\n        self.create_time = create_time\n        self.modify_time = modify_time\n        self.webhook_url = webhook_url\n        self.webhook_name = webhook_name\n        self.webhook_type = webhook_type\n        self.webhook_method = webhook_method\n        self.webhook_secret = webhook_secret\n        self.webhook_headers = webhook_headers\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        webhook_integration_info = super(WebhookIntegrationInfo, cls).set_attributes(data)\n\n        if WEBHOOK_HEADERS in data:\n            webhook_headers = data[WEBHOOK_HEADERS]\n            webhook_integration_info.webhook_headers = []\n            for header in webhook_headers:\n                webhook_integration_info.webhook_headers.append(  # pylint: disable=no-member\n                    GeneralWebhookHeaderKV(header.get(KEY), header.get(VALUE)))\n\n        return webhook_integration_info\n\n\nclass ResourceTagInfo(TLSData):\n    def __init__(self, tag_key: str = None, tag_value: str = None, resource_id: str = None, resource_type: str = None):\n        \"\"\"资源标签信息\n\n        :param tag_key: 标签 Key 的值\n        :param tag_value: 标签 Value 的值\n        :param resource_id: 资源 ID\n        :param resource_type: 资源类型\n        \"\"\"\n        self.tag_key = tag_key\n        self.tag_value = tag_value\n        self.resource_id = resource_id\n        self.resource_type = resource_type\n\n\nclass StatusInfo(TLSData):\n    def __init__(self, code: str = None, message: str = None):\n        \"\"\"\n        :param code: 状态码\n        :type code: str\n        :param message: 错误消息\n        :type message: str\n        \"\"\"\n        self.code = code\n        self.message = message\n\n\nclass ResourceInfo(TLSData):\n    def __init__(self, attributes: List[KeyValueInfo] = None):\n        \"\"\"\n        :param attributes: 资源属性列表\n        :type attributes: List[KeyValueInfo]\n        \"\"\"\n        self.attributes = attributes\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        resource_info = super(ResourceInfo, cls).set_attributes(data)\n        \n        if ATTRIBUTES in data and data[ATTRIBUTES] is not None:\n            resource_info.attributes = []\n            for attr in data[ATTRIBUTES]:\n                resource_info.attributes.append(KeyValueInfo.set_attributes(data=attr))  # pylint: disable=no-member\n        \n        return resource_info\n\n\nclass InstrumentationLibraryInfo(TLSData):\n    def __init__(self, name: str = None, version: str = None):\n        \"\"\"\n        :param name: 检测库名称\n        :type name: str\n        :param version: 检测库版本\n        :type version: str\n        \"\"\"\n        self.name = name\n        self.version = version\n\n\nclass SpanLinkInfo(TLSData):\n    def __init__(self, trace_id: str = None, span_id: str = None, \n                 trace_state: str = None, attributes: List[KeyValueInfo] = None):\n        \"\"\"\n        :param trace_id: Trace ID\n        :type trace_id: str\n        :param span_id: Span ID\n        :type span_id: str\n        :param trace_state: Trace状态\n        :type trace_state: str\n        :param attributes: 属性列表\n        :type attributes: List[KeyValueInfo]\n        \"\"\"\n        self.trace_id = trace_id\n        self.span_id = span_id\n        self.trace_state = trace_state\n        self.attributes = attributes\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        span_link = super(SpanLinkInfo, cls).set_attributes(data)\n\n        if ATTRIBUTES in data and data[ATTRIBUTES] is not None:\n            span_link.attributes = []\n            for attr in data[ATTRIBUTES]:\n                span_link.attributes.append(KeyValueInfo.set_attributes(data=attr))  # pylint: disable=no-member\n\n        return span_link\n\n\nclass SpanEventInfo(TLSData):\n    def __init__(self, name: str = None, timestamp: int = None, attributes: List[KeyValueInfo] = None):\n        \"\"\"\n        :param name: 事件名称\n        :type name: str\n        :param timestamp: 时间戳（微秒）\n        :type timestamp: int\n        :param attributes: 属性列表\n        :type attributes: List[KeyValueInfo]\n        \"\"\"\n        self.name = name\n        self.timestamp = timestamp\n        self.attributes = attributes\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        span_event = super(SpanEventInfo, cls).set_attributes(data)\n\n        if ATTRIBUTES in data and data[ATTRIBUTES] is not None:\n            span_event.attributes = []\n            for attr in data[ATTRIBUTES]:\n                span_event.attributes.append(KeyValueInfo.set_attributes(data=attr))  # pylint: disable=no-member\n\n        return span_event\n\n\nclass SpanInfo(TLSData):\n    def __init__(self, trace_id: str = None, span_id: str = None, kind: str = None, \n                 name: str = None, start_time: int = None, end_time: int = None, \n                 parent_span_id: str = None, trace_state: str = None, \n                 status: StatusInfo = None, resource: ResourceInfo = None,\n                 attributes: List[KeyValueInfo] = None, links: List[SpanLinkInfo] = None,\n                 events: List[SpanEventInfo] = None, \n                 instrumentation_library: InstrumentationLibraryInfo = None):\n        \"\"\"\n        :param trace_id: Trace ID\n        :type trace_id: str\n        :param span_id: Span ID\n        :type span_id: str\n        :param kind: Span类型\n        :type kind: str\n        :param name: Span名称\n        :type name: str\n        :param start_time: 开始时间（微秒）\n        :type start_time: int\n        :param end_time: 结束时间（微秒）\n        :type end_time: int\n        :param parent_span_id: 父Span ID\n        :type parent_span_id: str\n        :param trace_state: Trace状态\n        :type trace_state: str\n        :param status: Span状态\n        :type status: StatusInfo\n        :param resource: 资源信息\n        :type resource: ResourceInfo\n        :param attributes: 属性列表\n        :type attributes: List[KeyValueInfo]\n        :param links: 链接列表\n        :type links: List[SpanLinkInfo]\n        :param events: 事件列表\n        :type events: List[SpanEventInfo]\n        :param instrumentation_library: 检测库信息\n        :type instrumentation_library: InstrumentationLibraryInfo\n        \"\"\"\n        self.trace_id = trace_id\n        self.span_id = span_id\n        self.kind = kind\n        self.name = name\n        self.start_time = start_time\n        self.end_time = end_time\n        self.parent_span_id = parent_span_id\n        self.trace_state = trace_state\n        self.status = status\n        self.resource = resource\n        self.attributes = attributes\n        self.links = links\n        self.events = events\n        self.instrumentation_library = instrumentation_library\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        span_info = super(SpanInfo, cls).set_attributes(data)\n\n        if STATUS in data and data[STATUS] is not None:\n            span_info.status = StatusInfo.set_attributes(data=data[STATUS])\n\n        if RESOURCE in data and data[RESOURCE] is not None:\n            span_info.resource = ResourceInfo.set_attributes(data=data[RESOURCE])\n\n        if ATTRIBUTES in data and data[ATTRIBUTES] is not None:\n            span_info.attributes = []\n            for attr in data[ATTRIBUTES]:\n                span_info.attributes.append(KeyValueInfo.set_attributes(data=attr))  # pylint: disable=no-member\n\n        if LINKS in data and data[LINKS] is not None:\n            span_info.links = []\n            for link in data[LINKS]:\n                span_info.links.append(SpanLinkInfo.set_attributes(data=link))  # pylint: disable=no-member\n\n        if EVENTS in data and data[EVENTS] is not None:\n            span_info.events = []\n            for event in data[EVENTS]:\n                span_info.events.append(SpanEventInfo.set_attributes(data=event))  # pylint: disable=no-member\n\n        if INSTRUMENTATION_LIBRARY in data and data[INSTRUMENTATION_LIBRARY] is not None:\n            span_info.instrumentation_library = InstrumentationLibraryInfo.set_attributes(\n                data=data[INSTRUMENTATION_LIBRARY])  # pylint: disable=no-member\n\n        return span_info\n\n\nclass TraceInfo(TLSData):\n    def __init__(self, spans: List[SpanInfo] = None,\n                 trace_id: str = None, service_name: str = None, operation_name: str = None,\n                 start_time: int = None, end_time: int = None, duration: int = None,\n                 status_code: str = None, attributes: dict = None):\n        \"\"\"综合 Trace 信息结构\n\n        - DescribeTrace 场景：通过 spans 字段承载完整的 Span 列表；\n        - SearchTraces 场景：通过 trace_id / service_name / operation_name / start_time / end_time\n          / duration / status_code / attributes 等字段承载 Trace 概要。\n        \"\"\"\n        self.spans = spans\n        self.trace_id = trace_id\n        self.service_name = service_name\n        self.operation_name = operation_name\n        self.start_time = start_time\n        self.end_time = end_time\n        self.duration = duration\n        self.status_code = status_code\n        self.attributes = attributes\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        trace_info = super(TraceInfo, cls).set_attributes(data)\n\n        if SPANS in data and data[SPANS] is not None:\n            trace_info.spans = []\n            for span in data[SPANS]:\n                trace_info.spans.append(SpanInfo.set_attributes(data=span))  # pylint: disable=no-member\n\n        return trace_info\n\n    def get_trace_id(self):\n        \"\"\"返回 Trace ID\"\"\"\n        return getattr(self, \"trace_id\", None)\n\n    def get_service_name(self):\n        \"\"\"返回服务名称\"\"\"\n        return getattr(self, \"service_name\", None)\n\n    def get_operation_name(self):\n        \"\"\"返回操作名称\"\"\"\n        return getattr(self, \"operation_name\", None)\n\n    def get_start_time(self):\n        \"\"\"返回开始时间（微秒）\"\"\"\n        return getattr(self, \"start_time\", None)\n\n    def get_end_time(self):\n        \"\"\"返回结束时间（微秒）\"\"\"\n        return getattr(self, \"end_time\", None)\n\n    def get_duration(self):\n        \"\"\"返回持续时间（微秒）\"\"\"\n        return getattr(self, \"duration\", None)\n\n    def get_status_code(self):\n        \"\"\"返回状态码\"\"\"\n        return getattr(self, \"status_code\", None)\n\n    def get_attributes(self):\n        \"\"\"返回自定义属性\"\"\"\n        return getattr(self, \"attributes\", None)\n\n\nclass RuleNode(TLSData):\n    def __init__(self, type: str = None, value: List[str] = None, children: List['RuleNode'] = None):\n        \"\"\"\n        :param type: 当前节点类型。可选值：Operation：操作节点。Condition：条件节点\n        :type type: str\n        :param value: 节点值\n        :type value: List[str]\n        :param children: 子节点\n        :type children: List[RuleNode]\n        \"\"\"\n        self.type = type\n        self.value = value\n        self.children = children\n\n    def get_type(self):\n        \"\"\"\n        :return: 当前节点类型\n        :rtype: str\n        \"\"\"\n        return self.type\n\n    def get_value(self):\n        \"\"\"\n        :return: 节点值\n        :rtype: List[str]\n        \"\"\"\n        return self.value\n\n    def get_children(self):\n        \"\"\"\n        :return: 子节点\n        :rtype: List[RuleNode]\n        \"\"\"\n        return self.children\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        rule_node = super(RuleNode, cls).set_attributes(data)\n\n        if CHILDREN in data and data[CHILDREN] is not None:\n            rule_node.children = []\n            for child_data in data[CHILDREN]:\n                rule_node.children.append(  # pylint: disable=no-member\n                    RuleNode.set_attributes(child_data))\n\n        return rule_node\n\n    def json(self):\n        json_data = super(RuleNode, self).json()\n\n        if self.children is not None:\n            json_data[CHILDREN] = []\n            for child in self.children:\n                json_data[CHILDREN].append(child.json())\n\n        return json_data\n\n\nclass NoticeRule(TLSData):\n    def __init__(self, has_next: bool = None, rule_node: RuleNode = None, \n                 has_end_node: bool = None, receiver_infos: List[Receiver] = None):\n        \"\"\"\n        :param has_next: 是否继续进入下一层的条件判断\n        :type has_next: bool\n        :param rule_node: 规则节点\n        :type rule_node: RuleNode\n        :param has_end_node: 后面是否存在结束节点\n        :type has_end_node: bool\n        :param receiver_infos: 通知渠道相关信息\n        :type receiver_infos: List[Receiver]\n        \"\"\"\n        self.has_next = has_next\n        self.rule_node = rule_node\n        self.has_end_node = has_end_node\n        self.receiver_infos = receiver_infos\n\n    def get_has_next(self):\n        \"\"\"\n        :return: 是否继续进入下一层的条件判断\n        :rtype: bool\n        \"\"\"\n        return self.has_next\n\n    def get_rule_node(self):\n        \"\"\"\n        :return: 规则节点\n        :rtype: RuleNode\n        \"\"\"\n        return self.rule_node\n\n    def get_has_end_node(self):\n        \"\"\"\n        :return: 后面是否存在结束节点\n        :rtype: bool\n        \"\"\"\n        return self.has_end_node\n\n    def get_receiver_infos(self):\n        \"\"\"\n        :return: 通知渠道相关信息\n        :rtype: List[Receiver]\n        \"\"\"\n        return self.receiver_infos\n\n    @classmethod\n    def set_attributes(cls, data: dict):\n        notice_rule = super(NoticeRule, cls).set_attributes(data)\n\n        if RULE_NODE in data and data[RULE_NODE] is not None:\n            notice_rule.rule_node = RuleNode.set_attributes(data[RULE_NODE])\n\n        if RECEIVER_INFOS in data and data[RECEIVER_INFOS] is not None:\n            notice_rule.receiver_infos = []\n            for receiver_data in data[RECEIVER_INFOS]:\n                notice_rule.receiver_infos.append(  # pylint: disable=no-member\n                    Receiver.set_attributes(receiver_data))\n\n        return notice_rule\n\n    def json(self):\n        json_data = super(NoticeRule, self).json()\n\n        if self.rule_node is not None:\n            json_data[RULE_NODE] = self.rule_node.json()\n\n        if self.receiver_infos is not None:\n            json_data[RECEIVER_INFOS] = []\n            for receiver in self.receiver_infos:\n                json_data[RECEIVER_INFOS].append(receiver.json())\n\n        return json_data\n"
  },
  {
    "path": "volcengine/tls/log.proto",
    "content": "syntax = \"proto3\";\npackage pb;\n\nmessage LogContent\n{\n  string key = 1;\n  string value = 2;\n}\n\nmessage Log\n{\n  int64 time = 1;  // UNIX Time Format\n  repeated LogContent contents = 2;\n  oneof OptionalTimeNs {\n    fixed32 TimeNs = 3;  // 纳秒级时间戳\n  }\n}\n\nmessage LogTag\n{\n  string key = 1;\n  string value = 2;\n}\n\nmessage LogGroup\n{\n  repeated Log logs = 1;\n  string source = 2;\n  repeated LogTag log_tags = 3;\n  string filename = 4;\n  string context_flow = 5;  // 该字段暂无效用\n}\n\nmessage LogGroupList\n{\n  repeated LogGroup log_groups = 1;\n}\n"
  },
  {
    "path": "volcengine/tls/log_content_patch.py",
    "content": "from google.protobuf import message as _message\nfrom google.protobuf.internal import decoder as _decoder\nfrom google.protobuf.internal import wire_format as _wire_format\nfrom volcengine.tls import log_pb2\n\n\ndef ParseLogGroupListFromString(log_group_list, serialized_data):\n    buffer = memoryview(serialized_data)\n    pos = 0\n    end = len(buffer)\n    log_group_list.Clear()\n    while pos < end:\n        tag_bytes, pos = _decoder.ReadTag(buffer, pos)\n        tag = _decoder._DecodeVarint(tag_bytes, 0)[0]\n        field_num, wire_type = _wire_format.UnpackTag(tag)\n\n        if field_num == 1 and wire_type == _wire_format.WIRETYPE_LENGTH_DELIMITED:\n            pos = _parse_log_groups(log_group_list, buffer, pos, end)\n        else:\n            pos = _decoder.SkipField(buffer, pos, end, tag_bytes)  # pylint: disable=no-member\n    return pos\n\n\ndef _parse_log_groups(log_group_list, buffer, pos, end):\n    size, pos = _decoder._DecodeVarint(buffer, pos)\n    group_end = pos + size\n    if group_end > end:\n        raise _message.DecodeError(\"Truncated LogGroupList.log_groups\")\n\n    group = log_pb2.LogGroup()\n    ParseLogGroupFromString(group, buffer[pos:group_end].tobytes())\n    log_group_list.log_groups.append(group)\n    return group_end\n\n\ndef ParseLogGroupFromString(log_group, serialized_data):\n    buffer = memoryview(serialized_data)\n    pos = 0\n    end = len(buffer)\n    log_group.Clear()\n    while pos < end:\n        tag_bytes, pos = _decoder.ReadTag(buffer, pos)\n        tag = _decoder._DecodeVarint(tag_bytes, 0)[0]\n        field_num, wire_type = _wire_format.UnpackTag(tag)\n\n        if field_num == 1 and wire_type == _wire_format.WIRETYPE_LENGTH_DELIMITED:\n            pos = _parse_logs(log_group, buffer, pos, end)\n        elif field_num == 2 and wire_type == _wire_format.WIRETYPE_LENGTH_DELIMITED:\n            pos = _parse_source(log_group, buffer, pos, end)\n        elif field_num == 3 and wire_type == _wire_format.WIRETYPE_LENGTH_DELIMITED:\n            pos = _parse_log_tags(log_group, buffer, pos, end)  # 补充：解析log_tags\n        elif field_num == 4 and wire_type == _wire_format.WIRETYPE_LENGTH_DELIMITED:\n            pos = _parse_filename(log_group, buffer, pos, end)  # 补充：解析filename\n        elif field_num == 5 and wire_type == _wire_format.WIRETYPE_LENGTH_DELIMITED:\n            pos = _parse_context_flow(log_group, buffer, pos, end)  # 补充：解析context_flow\n        else:\n            pos = _decoder.SkipField(buffer, pos, end, tag_bytes)  # pylint: disable=no-member\n    return pos\n\ndef _parse_logs(log_group, buffer, pos, end):\n    \"\"\"原代码逻辑不变\"\"\"\n    size, pos = _decoder._DecodeVarint(buffer, pos)\n    log_end = pos + size\n    if log_end > end:\n        raise _message.DecodeError(\"Truncated LogGroup.logs\")\n\n    log = log_pb2.Log()\n    ParseLogFromString(log, buffer[pos:log_end].tobytes())\n    log_group.logs.append(log)\n    return log_end\n\ndef _parse_source(log_group, buffer, pos, end):\n    \"\"\"原代码逻辑不变\"\"\"\n    size, pos = _decoder._DecodeVarint(buffer, pos)\n    new_pos = pos + size\n    if new_pos > end:\n        raise _message.DecodeError(\"Truncated LogGroup.source\")\n    log_group.source = buffer[pos:new_pos].tobytes().decode('utf-8')\n    return new_pos\n\ndef _parse_log_tags(log_group, buffer, pos, end):\n    \"\"\"补充：解析log_tags字段（参考_parse_logs逻辑）\"\"\"\n    size, pos = _decoder._DecodeVarint(buffer, pos)\n    tag_end = pos + size\n    if tag_end > end:\n        raise _message.DecodeError(\"Truncated LogGroup.log_tags\")\n\n    tag = log_pb2.LogTag()\n    ParseLogTagFromString(tag, buffer[pos:tag_end].tobytes())\n    log_group.log_tags.append(tag)\n    return tag_end\n\ndef _parse_filename(log_group, buffer, pos, end):\n    \"\"\"补充：解析filename字段（参考_parse_source逻辑）\"\"\"\n    size, pos = _decoder._DecodeVarint(buffer, pos)\n    new_pos = pos + size\n    if new_pos > end:\n        raise _message.DecodeError(\"Truncated LogGroup.filename\")\n    log_group.filename = buffer[pos:new_pos].tobytes().decode('utf-8')\n    return new_pos\n\ndef _parse_context_flow(log_group, buffer, pos, end):\n    \"\"\"补充：解析context_flow字段（参考_parse_source逻辑）\"\"\"\n    size, pos = _decoder._DecodeVarint(buffer, pos)\n    new_pos = pos + size\n    if new_pos > end:\n        raise _message.DecodeError(\"Truncated LogGroup.context_flow\")\n    log_group.context_flow = buffer[pos:new_pos].tobytes().decode('utf-8')\n    return new_pos\n\ndef ParseLogTagFromString(log_tag, serialized_data):\n    \"\"\"反序列化：解析字段1（key）和字段2（value）\"\"\"\n    buffer = memoryview(serialized_data)\n    pos = 0\n    end = len(buffer)\n    log_tag.Clear()\n    while pos < end:\n        tag_bytes, pos = _decoder.ReadTag(buffer, pos)\n        tag = _decoder._DecodeVarint(tag_bytes, 0)[0]\n        field_num, wire_type = _wire_format.UnpackTag(tag)\n\n        if field_num == 1 and wire_type == _wire_format.WIRETYPE_LENGTH_DELIMITED:\n            pos = _parse_key(log_tag, buffer, pos, end)\n        elif field_num == 2 and wire_type == _wire_format.WIRETYPE_LENGTH_DELIMITED:\n            pos = _parse_value(log_tag, buffer, pos, end)\n        else:\n            pos = _decoder.SkipField(buffer, pos, end, tag_bytes)  # pylint: disable=no-member\n    return pos\n\ndef _parse_key(item, buffer, pos, end):\n    size, pos = _decoder._DecodeVarint(buffer, pos)\n    new_pos = pos + size\n    if new_pos > end:\n        raise _message.DecodeError(\"Truncated LogTag.key\")\n    item.key = buffer[pos:new_pos].tobytes().decode('utf-8', errors='replace')\n    return new_pos\n\ndef _parse_value(item, buffer, pos, end):\n    size, pos = _decoder._DecodeVarint(buffer, pos)\n    new_pos = pos + size\n    if new_pos > end:\n        raise _message.DecodeError(\"Truncated LogTag.value\")\n    raw_bytes = buffer[pos:new_pos].tobytes()\n    item.value = raw_bytes.decode('utf-8', errors='replace')\n    return new_pos\n\ndef ParseLogFromString(log, serialized_data):\n    buffer = memoryview(serialized_data)\n    pos = 0\n    end = len(buffer)\n    log.Clear()\n    while pos < end:\n        tag_bytes, pos = _decoder.ReadTag(buffer, pos)\n        tag = _decoder._DecodeVarint(tag_bytes, 0)[0]\n        field_num, wire_type = _wire_format.UnpackTag(tag)\n\n        if field_num == 1 and wire_type == _wire_format.WIRETYPE_VARINT:\n            pos = _parse_time(log, buffer, pos, end)\n        elif field_num == 2 and wire_type == _wire_format.WIRETYPE_LENGTH_DELIMITED:\n            pos = _parse_contents(log, buffer, pos, end)\n        else:\n            pos = _decoder.SkipField(buffer, pos, end, tag_bytes)  # pylint: disable=no-member\n    return pos\n\ndef _parse_time(log, buffer, pos, end):\n    value, pos = _decoder._DecodeSignedVarint32(buffer, pos)\n    log.time = value\n    return pos\n\ndef _parse_contents(log, buffer, pos, end):\n    size, pos = _decoder._DecodeVarint(buffer, pos)\n    content_end = pos + size\n    if content_end > end:\n        raise _message.DecodeError(\"Truncated Log.contents\")\n\n    content = log_pb2.LogContent()\n    ParseLogContentFromString(content, buffer[pos:content_end].tobytes())\n    log.contents.append(content)\n    return content_end\n\ndef ParseLogContentFromString(content, serialized_data):\n    buffer = memoryview(serialized_data)\n    pos = 0\n    end = len(buffer)\n    content.Clear()\n    while pos < end:\n        tag_bytes, pos = _decoder.ReadTag(buffer, pos)\n        tag = _decoder._DecodeVarint(tag_bytes, 0)[0]\n        field_num, wire_type = _wire_format.UnpackTag(tag)\n\n        if field_num == 1 and wire_type == _wire_format.WIRETYPE_LENGTH_DELIMITED:\n            pos = _parse_key(content, buffer, pos, end)\n        elif field_num == 2 and wire_type == _wire_format.WIRETYPE_LENGTH_DELIMITED:\n            pos = _parse_value(content, buffer, pos, end)\n        else:\n            pos = _decoder.SkipField(buffer, pos, end, tag_bytes)  # pylint: disable=no-member\n    return pos\n"
  },
  {
    "path": "volcengine/tls/log_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: log.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\tlog.proto\\x12\\x02pb\\\"(\\n\\nLogContent\\x12\\x0b\\n\\x03key\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05value\\x18\\x02 \\x01(\\t\\\"5\\n\\x03Log\\x12\\x0c\\n\\x04time\\x18\\x01 \\x01(\\x03\\x12 \\n\\x08\\x63ontents\\x18\\x02 \\x03(\\x0b\\x32\\x0e.pb.LogContent\\\"$\\n\\x06LogTag\\x12\\x0b\\n\\x03key\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05value\\x18\\x02 \\x01(\\t\\\"w\\n\\x08LogGroup\\x12\\x15\\n\\x04logs\\x18\\x01 \\x03(\\x0b\\x32\\x07.pb.Log\\x12\\x0e\\n\\x06source\\x18\\x02 \\x01(\\t\\x12\\x1c\\n\\x08log_tags\\x18\\x03 \\x03(\\x0b\\x32\\n.pb.LogTag\\x12\\x10\\n\\x08\\x66ilename\\x18\\x04 \\x01(\\t\\x12\\x14\\n\\x0c\\x63ontext_flow\\x18\\x05 \\x01(\\t\\\"0\\n\\x0cLogGroupList\\x12 \\n\\nlog_groups\\x18\\x01 \\x03(\\x0b\\x32\\x0c.pb.LogGroupb\\x06proto3')\n\n\n\n_LOGCONTENT = DESCRIPTOR.message_types_by_name['LogContent']\n_LOG = DESCRIPTOR.message_types_by_name['Log']\n_LOGTAG = DESCRIPTOR.message_types_by_name['LogTag']\n_LOGGROUP = DESCRIPTOR.message_types_by_name['LogGroup']\n_LOGGROUPLIST = DESCRIPTOR.message_types_by_name['LogGroupList']\nLogContent = _reflection.GeneratedProtocolMessageType('LogContent', (_message.Message,), {\n  'DESCRIPTOR' : _LOGCONTENT,\n  '__module__' : 'log_pb2'\n  # @@protoc_insertion_point(class_scope:pb.LogContent)\n  })\n_sym_db.RegisterMessage(LogContent)\n\nLog = _reflection.GeneratedProtocolMessageType('Log', (_message.Message,), {\n  'DESCRIPTOR' : _LOG,\n  '__module__' : 'log_pb2'\n  # @@protoc_insertion_point(class_scope:pb.Log)\n  })\n_sym_db.RegisterMessage(Log)\n\nLogTag = _reflection.GeneratedProtocolMessageType('LogTag', (_message.Message,), {\n  'DESCRIPTOR' : _LOGTAG,\n  '__module__' : 'log_pb2'\n  # @@protoc_insertion_point(class_scope:pb.LogTag)\n  })\n_sym_db.RegisterMessage(LogTag)\n\nLogGroup = _reflection.GeneratedProtocolMessageType('LogGroup', (_message.Message,), {\n  'DESCRIPTOR' : _LOGGROUP,\n  '__module__' : 'log_pb2'\n  # @@protoc_insertion_point(class_scope:pb.LogGroup)\n  })\n_sym_db.RegisterMessage(LogGroup)\n\nLogGroupList = _reflection.GeneratedProtocolMessageType('LogGroupList', (_message.Message,), {\n  'DESCRIPTOR' : _LOGGROUPLIST,\n  '__module__' : 'log_pb2'\n  # @@protoc_insertion_point(class_scope:pb.LogGroupList)\n  })\n_sym_db.RegisterMessage(LogGroupList)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  _LOGCONTENT._serialized_start=17\n  _LOGCONTENT._serialized_end=57\n  _LOG._serialized_start=59\n  _LOG._serialized_end=112\n  _LOGTAG._serialized_start=114\n  _LOGTAG._serialized_end=150\n  _LOGGROUP._serialized_start=152\n  _LOGGROUP._serialized_end=271\n  _LOGGROUPLIST._serialized_start=273\n  _LOGGROUPLIST._serialized_end=321\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/tls/producer/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/tls/producer/batch_manager.py",
    "content": "import threading\n\nfrom volcengine.tls.producer.producer_model import ProducerConfig, BatchLog\nfrom volcengine.tls.producer.send_batch_task import SendBatchTask\n\n\nclass BatchManager:\n    \"\"\"批次管理器，用于管理批次的发送和生命周期\"\"\"\n\n    def __init__(self):\n        self.batch_log = None\n        self.lock = threading.Lock()\n\n    def full_and_send_batch_request(self) -> bool:\n        if self.batch_log is not None:\n            return self.batch_log.full_and_send_batch_request()\n        return False\n\n    def add_now(self, config: ProducerConfig, executor_service, client, memory_lock, retry_queue) -> None:\n        if self.batch_log is not None:\n            task = SendBatchTask(\n                self.batch_log, config, memory_lock, client, retry_queue)\n            executor_service.submit(task.run)\n            self.batch_log = None\n\n    def remove_batch(self, batch_logs: ['BatchLog']) -> None:\n        if self.batch_log is not None:\n            batch_logs.append(self.batch_log)\n            self.batch_log = None\n"
  },
  {
    "path": "volcengine/tls/producer/batch_semaphore.py",
    "content": "import threading\nimport time\n\n\nclass BatchSemaphore:\n    \"\"\"支持一次性申请多个配额的信号量\"\"\"\n\n    def __init__(self, value=1):\n        if value < 0:\n            raise ValueError(\"Semaphore initial value must be >= 0\")\n        self._value = value\n        self._lock = threading.Condition()\n\n    def acquire(self, permits=1, blocking=True, timeout=None):\n        \"\"\"申请一个或多个配额\"\"\"\n        if permits < 1:\n            raise ValueError(\"Permits must be positive\")\n\n        with self._lock:\n            # 非阻塞模式立即返回\n            if not blocking:\n                if self._value < permits:\n                    return False\n                else:\n                    self._value -= permits\n                    return True\n\n            # 处理超时\n            endtime = None\n            if timeout is not None:\n                endtime = time.time() + timeout\n\n            # 等待直到有足够的配额\n            while self._value < permits:\n                if timeout is not None:\n                    remaining = endtime - time.time()\n                    if remaining <= 0.0:\n                        return False\n                    self._lock.wait(remaining)\n                else:\n                    self._lock.wait()\n\n            # 获取配额\n            self._value -= permits\n            return True\n\n    def release(self, permits=1):\n        \"\"\"释放一个或多个配额\"\"\"\n        if permits < 1:\n            raise ValueError(\"Permits must be positive\")\n\n        with self._lock:\n            self._value += permits\n            self._lock.notify_all()  # 通知所有等待的线程\n\n    def available_permits(self):\n        \"\"\"返回当前可用的配额数量\"\"\"\n        with self._lock:\n            return self._value\n\n    def try_acquire(self, permits=1):\n        \"\"\"尝试获取配额，不阻塞立即返回\"\"\"\n        return self.acquire(permits, blocking=False)"
  },
  {
    "path": "volcengine/tls/producer/log_dispatcher.py",
    "content": "import threading\nimport time\nfrom concurrent.futures import ThreadPoolExecutor\nfrom typing import Dict\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.log_pb2 import LogGroup, LogGroupList\nfrom volcengine.tls.producer.batch_manager import BatchManager\nfrom volcengine.tls.producer.batch_semaphore import BatchSemaphore\nfrom volcengine.tls.producer.producer_model import ProducerConfig, BatchLog, CallBack\nfrom volcengine.tls.producer.retry_queue import RetryQueue\nfrom volcengine.tls.tls_exception import TLSException\nfrom volcengine.tls.util import get_logger\n\n\nclass LogDispatcher:\n    TLS_THREAD_POOL_FORMAT = \"dispatcher-thread-%d\"\n\n    def __init__(self, producer_config: ProducerConfig, producer_name: str, memory_lock: BatchSemaphore,\n                 retry_queue: RetryQueue):\n        self.producer_config = producer_config\n        self.producer_name = producer_name\n        self.memory_lock = memory_lock\n        self.retry_queue = retry_queue\n        self.closed = False\n\n        # 初始化批次映射（用普通dict配合锁实现线程安全）\n        self.batches: Dict[BatchLog.BatchKey, BatchManager] = {}\n        self.batches_mutex = threading.Lock()\n\n        # 初始化线程池\n        self.executor_service = self._create_thread_pool()\n        self.LOG = get_logger(__name__)\n\n        # 初始化TLS客户端\n        try:\n            client_config = self.producer_config.client_config\n            self.client = TLSService(client_config.endpoint, client_config.access_key_id,\n                                     client_config.access_key_secret, client_config.region, client_config.token,\n                                     api_key=client_config.api_key)\n        except Exception as e:\n            self.LOG.error(\"Failed to create TLS client\", exc_info=e)\n            raise TLSException(error_code=\"Initialization Error\", error_message=\"Failed to create TLS client\")\n\n    def _create_thread_pool(self) -> ThreadPoolExecutor:\n        \"\"\"创建线程池\"\"\"\n        thread_count = self.producer_config.max_thread_count\n        thread_name_prefix = f\"{self.producer_name}-dispatcher-thread-\"\n\n        # 创建线程池\n        return ThreadPoolExecutor(\n            max_workers=thread_count,\n            thread_name_prefix=thread_name_prefix\n        )\n\n    def start(self) -> None:\n        self.closed = False\n        self.LOG.info(f\"log dispatcher {self.producer_name} started and client init success\")\n\n    def close(self) -> None:\n        self.LOG.info(f\"log dispatcher {self.producer_name} closed\")\n        self.closed = True\n\n    def close_now(self) -> None:\n        self.LOG.info(f\"log dispatcher {self.producer_name} close now\")\n        self.closed = True\n        self.executor_service.shutdown(False)\n\n    def get_or_create_batch_manager(self, batch_key: BatchLog.BatchKey) -> BatchManager:\n        \"\"\"获取或创建批次管理器，线程安全实现\"\"\"\n        with self.batches_mutex:\n            # 先检查是否已存在\n            batch_manager = self.batches.get(batch_key)\n            if batch_manager is not None:\n                return batch_manager\n\n            # 不存在则创建新的并添加\n            batch_manager = BatchManager()\n            # 检查是否有其他线程已添加（双重检查）\n            existing = self.batches.get(batch_key)\n            if existing is not None:\n                return existing\n            self.batches[batch_key] = batch_manager\n            return batch_manager\n\n    def reset_access_key_token(self, access_key: str, secret_key: str, security_token: str) -> None:\n        \"\"\"重置访问密钥信息\"\"\"\n        client_config = self.producer_config.client_config\n        client_config.reset_access_key_token(access_key, secret_key, security_token)\n        self.client.reset_access_key_token(access_key, secret_key, security_token)\n        self.LOG.info(f\"log dispatcher {self.producer_name} update client config {client_config} success\")\n\n    def reset_api_key(self, api_key: str) -> None:\n        client_config = self.producer_config.client_config\n        client_config.reset_api_key(api_key)\n        self.client.reset_api_key(api_key)\n        self.LOG.info(f\"log dispatcher {self.producer_name} update client config {client_config} success\")\n\n    def add_batch(self, hash_key: str, topic_id: str, source: str, filename: str,\n                  log_group: LogGroup, callback: CallBack) -> None:\n        \"\"\"添加批次日志的公开接口\"\"\"\n        try:\n            self.do_add(hash_key, topic_id, source, filename, log_group, callback)\n        except Exception as e:\n            raise TLSException(error_code=\"AddBatch Error\", error_message=str(e))\n\n    def do_add(self, hash_key: str, topic_id: str, source: str, filename: str,\n               log_group: LogGroup, callback: CallBack) -> None:\n        \"\"\"添加批次日志的内部实现\"\"\"\n        # 检查是否已关闭\n        if self.closed:\n            raise TLSException(error_code=\"AddBatch Error\",\n                               error_message=\"closed LogDispatcher cannot receive logs anymore\")\n\n        log_count = 0\n        earliest_log_time = None\n        latest_log_time = None\n        for log in log_group.logs:\n            if log.time <= 0:\n                now_ns = time.time_ns()\n                log.time = int(now_ns // 1_000_000)\n                if self.producer_config.enable_nanosecond and hasattr(log, \"TimeNs\"):\n                    try:\n                        if not log.HasField(\"TimeNs\"):\n                            log.TimeNs = int(now_ns % 1_000_000)\n                    except ValueError:\n                        log.TimeNs = int(now_ns % 1_000_000)\n            log_count += 1\n            normalized_time = log.time\n            if log.time < 1e10:\n                normalized_time = log.time * 1000\n            elif log.time < 1e15:\n                normalized_time = log.time\n            else:\n                normalized_time = log.time // int(1e6)\n            if earliest_log_time is None or normalized_time < earliest_log_time:\n                earliest_log_time = normalized_time\n            if latest_log_time is None or normalized_time > latest_log_time:\n                latest_log_time = normalized_time\n\n        # 计算批次大小\n        def _varint_len(x: int) -> int:\n            if x < 0:\n                return 10\n            n = 1\n            while x >= (1 << 7):\n                n += 1\n                x >>= 7\n            return n\n\n        def _tag_len(field_number: int) -> int:\n            return _varint_len((field_number << 3) | 2)\n\n        group_size = log_group.ByteSize()\n        log_group_list_groups_field_number = LogGroupList.DESCRIPTOR.fields_by_name[\"log_groups\"].number\n        batch_size = _tag_len(log_group_list_groups_field_number) + _varint_len(group_size) + group_size\n        self.producer_config.check_batch_size(batch_size)\n\n        # 获取内存锁\n        max_block_ms = self.producer_config.max_block_ms\n        self.LOG.debug(f\"dispatcher {self.producer_name} try acquire memory lock\")\n\n        if max_block_ms == 0:\n            self.memory_lock.acquire(batch_size)\n        else:\n            # 尝试在指定时间内获取锁\n            acquired = self.memory_lock.acquire(\n                batch_size,\n                timeout=max_block_ms / 1000  # 转换为秒\n            )\n            if not acquired:\n                available = self.memory_lock.available_permits()  # 获取当前可用许可数\n                self.LOG.warn(\n                    f\"Failed to acquire memory within the configured max blocking time {max_block_ms} ms, \"\n                    f\"requiredSizeInBytes={batch_size}, availableSizeInBytes={available}\"\n                )\n                raise TLSException(\n                    error_code=\"AddBatch Error\",\n                    error_message=f\"dispatcher {self.producer_name} try acquire memory lock failed\"\n                )\n\n        # 添加到批次\n        try:\n            batch_key = BatchLog.BatchKey(hash_key, topic_id, source, filename)\n            batch_manager = self.get_or_create_batch_manager(batch_key)\n\n            # 同步操作\n            with batch_manager.lock:\n                self.add_to_batch_manager(batch_key, log_group, callback, batch_size, batch_manager,\n                                          log_count, earliest_log_time, latest_log_time)\n        except Exception as e:\n            # 发生异常时释放内存锁\n            self.memory_lock.release(batch_size)\n            raise TLSException(error_code=\"Add Batch Error\", error_message=\"dispatcher add batch concurrent error\")\n\n    def add_to_batch_manager(self, batch_key: BatchLog.BatchKey, log_group: LogGroup,\n                             callback: CallBack, batch_size: int, batch_manager: BatchManager,\n                             log_count: int, earliest_log_time: int, latest_log_time: int) -> None:\n        \"\"\"将日志添加到批次管理器\"\"\"\n        # 尝试添加到现有批次\n        batch_log = batch_manager.batch_log\n        if batch_log is not None:\n            success = batch_log.try_add(log_group, batch_size, callback, log_count, earliest_log_time, latest_log_time)\n            if success:\n                # 检查是否已满需要发送\n                if batch_manager.full_and_send_batch_request():\n                    batch_manager.add_now(\n                        self.producer_config,\n                        self.executor_service,\n                        self.client,\n                        self.memory_lock,\n                        self.retry_queue\n                    )\n                return\n            else:\n                # 现有批次已满，立即发送\n                batch_manager.add_now(\n                    self.producer_config,\n                    self.executor_service,\n                    self.client,\n                    self.memory_lock,\n                    self.retry_queue\n                )\n\n        # 创建新批次并添加\n        batch_log = BatchLog(batch_key, self.producer_config)\n        batch_manager.batch_log = batch_log\n\n        success = batch_log.try_add(log_group, batch_size, callback, log_count, earliest_log_time, latest_log_time)\n        if not success:\n            self.LOG.error(\n                f\"tryAdd batchLog failed, batchKey = {str(batch_key)}, batchSize = {batch_size}, \"\n                f\"batchCount = {log_group.get_logs_count()}\"\n            )\n            raise TLSException(error_code=\"Producer Error\", error_message=\"tryAdd batchLog failed\")\n\n        # 检查新批次是否已满需要发送\n        if batch_manager.full_and_send_batch_request():\n            batch_manager.add_now(\n                self.producer_config,\n                self.executor_service,\n                self.client,\n                self.memory_lock,\n                self.retry_queue\n            )\n"
  },
  {
    "path": "volcengine/tls/producer/mover.py",
    "content": "import threading\nimport time\nfrom typing import List\n\nfrom volcengine.tls.producer.log_dispatcher import LogDispatcher\nfrom volcengine.tls.producer.producer_model import ProducerConfig, BatchLog\nfrom volcengine.tls.producer.retry_queue import RetryQueue\nfrom volcengine.tls.producer.send_batch_task import SendBatchTask\nfrom volcengine.tls.util import get_logger\n\n\nclass Mover(threading.Thread):\n    def __init__(self, name: str, producer_config: ProducerConfig,\n                 dispatcher: LogDispatcher, retry_manager: RetryQueue):\n        super().__init__(name=name)\n        self.name = name\n        self.producer_config = producer_config\n        self.retry_queue = retry_manager\n        self.executor_service = dispatcher.executor_service\n        self.client = dispatcher.client\n        self.batches = dispatcher.batches\n        self.batches_mutex = dispatcher.batches_mutex\n        self.memory_lock = dispatcher.memory_lock\n        self.closed = False\n        self.LOG = get_logger(__name__)\n\n    def run(self) -> None:\n        \"\"\"线程主执行方法\"\"\"\n        self.handle_timeout()\n\n        # 处理剩余的重试批次\n        self.handle_remaining_batch()\n        remaining_retry_batches = self.retry_queue.get_retry_batch(True)\n        for log in remaining_retry_batches:\n            self.executor_service.submit(\n                SendBatchTask(\n                    log, self.producer_config, self.memory_lock, self.client, self.retry_queue\n                ).run()\n            )\n        self.LOG.info(f\"Mover {self.name} has stopped\")\n\n    def handle_timeout(self) -> None:\n        \"\"\"处理超时批次的循环\"\"\"\n        while not self.closed:\n            try:\n                self.handle_timeout_batch()\n                self.handle_retry_batch()\n                time.sleep(1)\n            except Exception as e:\n                self.LOG.error(f\"Mover {self.name} error in handle_timeout: {str(e)}\")\n\n\n\n    def handle_retry_batch(self) -> None:\n        \"\"\"处理需要重试的批次\"\"\"\n        batch_logs = self.retry_queue.get_retry_batch(False)\n        for log in batch_logs:\n            self.executor_service.submit(\n                SendBatchTask(\n                    log, self.producer_config, self.memory_lock, self.client, self.retry_queue\n                ).run()\n            )\n\n    def handle_timeout_batch(self) -> int:\n        \"\"\"处理超时的批次并返回剩余时间\"\"\"\n        self.LOG.debug(f\"mover {self.name} handle timeout batch\")\n        now = int(time.time() * 1000)  # 当前时间（毫秒）\n        batch_logs: List[BatchLog] = []\n        remains = self.producer_config.linger_ms\n\n        # 遍历所有批次检查超时\n        with self.batches_mutex:\n            for entry in self.batches.values():\n                batch_manager = entry\n                with batch_manager.lock:\n                    batch_log = batch_manager.batch_log\n                    if batch_log is None:\n                        continue\n\n                # 计算剩余时间\n                cur_remains = self.producer_config.linger_ms + batch_log.create_ms - now\n                if cur_remains <= 0:\n                    # 批次超时，加入处理列表并移除\n                    batch_manager.remove_batch(batch_logs)\n                else:\n                    # 更新最小剩余时间\n                    remains = min(remains, cur_remains)\n\n        # 提交所有超时批次的发送任务\n        for log in batch_logs:\n            self.executor_service.submit(\n                SendBatchTask(log, self.producer_config, self.memory_lock, self.client, self.retry_queue).run()\n            )\n\n        return remains\n\n    def handle_remaining_batch(self) -> None:\n        \"\"\"处理剩余的所有批次\"\"\"\n        self.LOG.debug(f\"mover {self.name} handle remaining batch\")\n        batch_logs: List[BatchLog] = []\n\n        # 遍历所有批次检查超时\n        with self.batches_mutex:\n            for entry in self.batches.values():\n                batch_manager = entry\n                with batch_manager.lock:  # 同步处理\n                    batch_log = batch_manager.batch_log\n                    if batch_log is None:\n                        continue\n                    batch_manager.remove_batch(batch_logs)\n\n        # 提交所有剩余批次的发送任务\n        for log in batch_logs:\n            self.executor_service.submit(\n                SendBatchTask(\n                    log, self.producer_config, self.memory_lock, self.client, self.retry_queue\n                ).run()\n            )\n\n    def close(self) -> None:\n        self.LOG.info(f\"Mover {self.name} closed\")\n        self.closed = True\n"
  },
  {
    "path": "volcengine/tls/producer/producer.py",
    "content": "import threading\nimport time\nfrom typing import Optional\n\nfrom volcengine.tls.log_pb2 import LogGroup, LogGroupList\nfrom volcengine.tls.producer.batch_semaphore import BatchSemaphore\nfrom volcengine.tls.producer.log_dispatcher import LogDispatcher\nfrom volcengine.tls.producer.mover import Mover\nfrom volcengine.tls.producer.producer_model import ProducerConfig, CallBack\nfrom volcengine.tls.producer.retry_queue import RetryQueue\nfrom volcengine.tls.tls_exception import TLSException\nfrom volcengine.tls.tls_requests import PutLogsV2LogContent\nfrom volcengine.tls.util import get_logger\n\n\nclass TLSProducer:\n    \"\"\"TLS Producer的实现类\"\"\"\n    _instance_id = 0\n    _instance_id_lock = threading.Lock()\n\n    def __init__(self, producer_config: ProducerConfig):\n        producer_config.valid_config()\n        self.producer_config = producer_config\n\n        # 生成实例名称\n        with TLSProducer._instance_id_lock:\n            TLSProducer._instance_id += 1\n            self.name = f\"tls-{TLSProducer._instance_id}\"\n\n        self.memory_lock = BatchSemaphore(producer_config.total_size_in_bytes)\n\n        # 初始化组件\n        self.retry_queue = RetryQueue()\n        self.dispatcher = LogDispatcher(producer_config, self.name, self.memory_lock, self.retry_queue)\n        self.mover = Mover(f\"{self.name}-mover\", producer_config, self.dispatcher, self.retry_queue)\n        self.LOG = get_logger(__name__)\n\n    @staticmethod\n    def default_producer(endpoint: str, region: str, access_key: str,\n                         access_secret: str, token: Optional[str] = None,\n                         api_key: Optional[str] = None) -> 'TLSProducer':\n        \"\"\"创建默认的Producer实例\"\"\"\n        config = ProducerConfig(endpoint, region, access_key, access_secret, token, api_key)\n        return TLSProducer(config)\n\n    def send_log_v2(self, hash_key: Optional[str], topic_id: str, source: Optional[str],\n                    filename: Optional[str], log: PutLogsV2LogContent, callback: Optional[CallBack]) -> None:\n        \"\"\"发送单条日志（新版本）\"\"\"\n        self.send_logs_v2(hash_key, topic_id, source, filename, [log], callback)\n\n    def send_logs_v2(self, hash_key: Optional[str], topic_id: str, source: Optional[str],\n                     filename: Optional[str], logs: [PutLogsV2LogContent], callback: Optional[CallBack]) -> None:\n        \"\"\"发送多条日志（新版本）\"\"\"\n        # 检查参数\n        if not topic_id or not logs:\n            raise TLSException(error_code=\"InvalidArgument\", error_message=f\"topic id: {topic_id}, log group: {logs}\")\n\n        max_log_group_count = ProducerConfig.MAX_LOG_GROUP_COUNT\n        max_log_group_size = ProducerConfig.MAX_BATCH_SIZE\n\n        def _varint_len(x: int) -> int:\n            if x < 0:\n                return 10\n            n = 1\n            while x >= (1 << 7):\n                n += 1\n                x >>= 7\n            return n\n\n        def _tag_len(field_number: int) -> int:\n            return _varint_len((field_number << 3) | 2)\n\n        log_groups_field_number = LogGroup.DESCRIPTOR.fields_by_name[\"logs\"].number\n        log_group_list_groups_field_number = LogGroupList.DESCRIPTOR.fields_by_name[\"log_groups\"].number\n\n        log_group = LogGroup()\n        if source is not None:\n            log_group.source = source\n        if filename is not None:\n            log_group.filename = filename\n\n        base_group_size = log_group.ByteSize()\n        current_estimated_group_size = base_group_size\n        current_count = 0\n        for v in logs:\n            new_log = getattr(log_group, \"logs\").add()\n            new_log.time = v.time\n            if v.time_ns is not None and hasattr(new_log, \"TimeNs\"):\n                new_log.TimeNs = v.time_ns\n            for key in v.log_dict.keys():\n                log_content = new_log.contents.add()\n                log_content.key = str(key)\n                log_content.value = str(v.log_dict[key])\n\n            current_count += 1\n            log_size = new_log.ByteSize()\n            current_estimated_group_size += _tag_len(log_groups_field_number) + _varint_len(log_size) + log_size\n            group_size = current_estimated_group_size\n            entry_size = _tag_len(log_group_list_groups_field_number) + _varint_len(group_size) + group_size\n            if entry_size > max_log_group_size:\n                if current_count == 1:\n                    actual_group_size = log_group.ByteSize()\n                    actual_entry_size = _tag_len(log_group_list_groups_field_number) + _varint_len(actual_group_size) + actual_group_size\n                    raise TLSException(\n                        error_code=\"InvalidArgument\",\n                        error_message=f\"log size {actual_entry_size} is larger than MAX_LOG_SIZE {max_log_group_size}\"\n                    )\n                getattr(log_group, \"logs\").pop()\n                current_count -= 1\n                current_estimated_group_size -= _tag_len(log_groups_field_number) + _varint_len(log_size) + log_size\n                self.dispatcher.add_batch(hash_key, topic_id, source, filename, log_group, callback)\n                log_group = LogGroup()\n                if source is not None:\n                    log_group.source = source\n                if filename is not None:\n                    log_group.filename = filename\n                base_group_size = log_group.ByteSize()\n                new_log = getattr(log_group, \"logs\").add()\n                new_log.time = v.time\n                if v.time_ns is not None and hasattr(new_log, \"TimeNs\"):\n                    new_log.TimeNs = v.time_ns\n                for key in v.log_dict.keys():\n                    log_content = new_log.contents.add()\n                    log_content.key = str(key)\n                    log_content.value = str(v.log_dict[key])\n                current_count = 1\n                current_estimated_group_size = base_group_size\n                log_size = new_log.ByteSize()\n                current_estimated_group_size += _tag_len(log_groups_field_number) + _varint_len(log_size) + log_size\n                group_size = current_estimated_group_size\n                entry_size = _tag_len(log_group_list_groups_field_number) + _varint_len(group_size) + group_size\n                if entry_size > max_log_group_size:\n                    actual_group_size = log_group.ByteSize()\n                    actual_entry_size = _tag_len(log_group_list_groups_field_number) + _varint_len(actual_group_size) + actual_group_size\n                    raise TLSException(\n                        error_code=\"InvalidArgument\",\n                        error_message=f\"log size {actual_entry_size} is larger than MAX_LOG_SIZE {max_log_group_size}\"\n                    )\n\n            if current_count >= max_log_group_count:\n                self.dispatcher.add_batch(hash_key, topic_id, source, filename, log_group, callback)\n                log_group = LogGroup()\n                if source is not None:\n                    log_group.source = source\n                if filename is not None:\n                    log_group.filename = filename\n                current_count = 0\n                base_group_size = log_group.ByteSize()\n                current_estimated_group_size = base_group_size\n\n        if current_count > 0:\n            self.dispatcher.add_batch(hash_key, topic_id, source, filename, log_group, callback)\n\n    def reset_access_key_token(self, access_key: str, secret_key: str, security_token: Optional[str]) -> None:\n        \"\"\"重置访问密钥和令牌\"\"\"\n        if not access_key or not secret_key:\n            raise TLSException(\n                error_code=\"InvalidArgument\",\n                error_message=f\"reset producer {self.name} access key failed, accessKey is {access_key}, \"\n                              f\"secretKey is {secret_key}, token is {security_token}\"\n            )\n        self.dispatcher.reset_access_key_token(access_key, secret_key, security_token)\n\n    def reset_api_key(self, api_key: str) -> None:\n        self.dispatcher.reset_api_key(api_key)\n\n    def start(self) -> None:\n        \"\"\"启动Producer\"\"\"\n        self.dispatcher.start()\n        self.mover.start()\n        self.LOG.info(f\"producer {self.name} started\")\n\n    def close(self, timeout_ms: int = 30000) -> None:\n        \"\"\"关闭Producer\"\"\"\n        feedback_exception = None\n\n        try:\n            timeout_ms = self._close_mover(timeout_ms)\n        except TLSException as e:\n            feedback_exception = e\n\n        try:\n            timeout_ms = self._close_executor_service(timeout_ms)\n        except TLSException as e:\n            if feedback_exception is None:\n                feedback_exception = e\n\n        if feedback_exception:\n            raise feedback_exception\n\n        self.LOG.info(f\"producer {self.name} closed\")\n\n    def _close_mover(self, timeout_ms: int) -> int:\n        start_ms = time.time() * 1000\n\n        self.dispatcher.close()\n        self.retry_queue.closed = True\n        self.mover.close()\n        self.mover.join(timeout_ms / 1000)  # 转换为秒\n\n        if self.mover.is_alive():\n            self.LOG.warning(\"producer mover thread is still alive\")\n            raise TLSException(error_code=\"ProducerError\", error_message=\"producer mover thread is still alive\")\n\n        self.LOG.info(\"producer mover is closed\")\n\n        now_ms = time.time() * 1000\n        return max(0, int(timeout_ms - (now_ms - start_ms)))\n\n    def _close_executor_service(self, timeout_ms: int) -> int:\n        start_ms = time.time() * 1000\n\n        executor_service = self.dispatcher.executor_service\n        if executor_service:\n            executor_service.shutdown()\n\n        self.LOG.info(\"producer executor service is closed\")\n\n        now_ms = time.time() * 1000\n        return max(0, int(timeout_ms - (now_ms - start_ms)))\n"
  },
  {
    "path": "volcengine/tls/producer/producer_model.py",
    "content": "import random\nimport sys\nimport time\nfrom typing import Optional, List\n\nfrom volcengine.tls.log_pb2 import LogGroupList, LogGroup\nfrom volcengine.tls.tls_exception import TLSException\nfrom volcengine.tls.util import get_logger\n\n\nclass ClientConfig:\n    \"\"\"客户端配置类\"\"\"\n\n    def __init__(self, endpoint: str, region: str, access_key: str, access_secret: str, token: Optional[str] = None,\n                 api_key: Optional[str] = None):\n        self.endpoint = endpoint\n        self.region = region\n        self.access_key_id = access_key\n        self.access_key_secret = access_secret\n        self.token = token\n        self.api_key = api_key\n\n    def __str__(self) -> str:\n        return (f\"ClientConfig(endpoint={self.endpoint}, region={self.region}, \"\n                f\"access_key_id={'***' if self.access_key_id else None}, \"\n                f\"access_key_secret={'***' if self.access_key_secret else None}, \"\n                f\"token={'***' if self.token else None}, \"\n                f\"api_key={'***' if self.api_key else None})\")\n\n    def reset_api_key(self, api_key: str) -> None:\n        self.api_key = api_key\n\n\ndef _valid_number(field: int, min_val: int, max_val: int, default_val: int) -> int:\n    \"\"\"验证数字是否在有效范围内，否则返回默认值\"\"\"\n    try:\n        field_val = int(field)\n        min_val = int(min_val)\n        max_val = int(max_val)\n        default_val = int(default_val)\n\n        if field_val < min_val or field_val > max_val:\n            return default_val\n        return field_val\n    except (ValueError, TypeError):\n        return default_val\n\n\nclass CallBack:\n    \"\"\"回调基类\"\"\"\n\n    def on_complete(self, result: 'Result'):\n        \"\"\"请求完成回调\"\"\"\n        raise NotImplementedError(\"Please implement the on_completion method.\")\n\n\nclass Attempt:\n    def __init__(self, success: bool, request_id: str = \"\", error_code: str = \"\", error_message: str = \"\",\n                 http_code: int = -1):\n        self.success = success\n        self.request_id = request_id\n        self.error_code = error_code\n        self.error_message = error_message\n        self.http_code = http_code\n\n\nclass Result:\n    def __init__(self, success: bool, attempts: List['Attempt'], attempt_count: int):\n        self.success = success\n        self.attempts = attempts\n        self.attempt_count = attempt_count\n\n\nclass ProducerConfig:\n    \"\"\"日志生产者配置类\"\"\"\n    # 静态常量定义\n    DEFAULT_TOTAL_SIZE_IN_BYTES = 100 * 1024 * 1024  # 100MB\n    DEFAULT_MAX_THREAD_COUNT = 50\n    DEFAULT_MAX_BATCH_SIZE = 512 * 1024  # 512KB\n    MAX_BATCH_SIZE = 9 * 1024 * 1024 + 512 * 1024\n    DEFAULT_MAX_BATCH_COUNT = 4096\n    MAX_BATCH_COUNT = 32768\n    MAX_LOG_GROUP_COUNT = 10000\n    DEFAULT_LINGER_MS = 2000  # 2秒\n    TOO_MANY_REQUEST_ERROR = 429\n    EXTERNAL_ERROR = 500\n    MIN_WAIT_MS = 100\n    DEFAULT_RETRY_COUNT = 4\n    DEFAULT_RESERVED_ATTEMPTS = DEFAULT_RETRY_COUNT + 1\n    MAX_RETRY_COUNT = 10\n    MAX_RESERVED_ATTEMPTS = MAX_RETRY_COUNT + 1\n    MAX_THREAD_COUNT = 10\n    DEFAULT_BLOCK_MS = 60 * 1000  # 60秒\n\n    def __init__(self, endpoint: str, region: str, access_key: str, access_secret: str, token: Optional[str] = None,\n                 api_key: Optional[str] = None):\n        \"\"\"初始化生产者配置\"\"\"\n        self.total_size_in_bytes = self.DEFAULT_TOTAL_SIZE_IN_BYTES\n        self.max_thread_count = self.MAX_THREAD_COUNT\n        self.max_batch_size_bytes = self.DEFAULT_MAX_BATCH_SIZE\n        self.max_batch_count = self.DEFAULT_MAX_BATCH_COUNT\n        self.linger_ms = self.DEFAULT_LINGER_MS\n        self.max_block_ms = self.DEFAULT_BLOCK_MS\n        self.retry_count = self.DEFAULT_RETRY_COUNT\n        self.max_reserved_attempts = self.DEFAULT_RESERVED_ATTEMPTS\n        self.enable_nanosecond = False\n        self.client_config = ClientConfig(endpoint, region, access_key, access_secret, token, api_key)\n\n    def __str__(self) -> str:\n        return (f\"ProducerConfig(total_size_in_bytes={self.total_size_in_bytes}, \"\n                f\"max_thread_count={self.max_thread_count}, \"\n                f\"max_batch_size_bytes={self.max_batch_size_bytes}, \"\n                f\"max_batch_count={self.max_batch_count}, \"\n                f\"linger_ms={self.linger_ms}, \"\n                f\"max_block_ms={self.max_block_ms}, \"\n                f\"retry_count={self.retry_count}, \"\n                f\"max_reserved_attempts={self.max_reserved_attempts}, \"\n                f\"enable_nanosecond={self.enable_nanosecond}, \"\n                f\"client_config={self.client_config})\")\n\n    def valid_config(self) -> None:\n        \"\"\"验证并修正配置参数\"\"\"\n        self.total_size_in_bytes = _valid_number(\n            self.total_size_in_bytes, 1, sys.maxsize, self.DEFAULT_TOTAL_SIZE_IN_BYTES\n        )\n        self.max_thread_count = _valid_number(\n            self.max_thread_count, 1, self.MAX_THREAD_COUNT, self.MAX_THREAD_COUNT\n        )\n        self.max_batch_size_bytes = _valid_number(\n            self.max_batch_size_bytes, 1, self.MAX_BATCH_SIZE, self.DEFAULT_MAX_BATCH_SIZE\n        )\n        self.max_batch_count = _valid_number(\n            self.max_batch_count, 1, self.MAX_BATCH_COUNT, self.DEFAULT_MAX_BATCH_COUNT\n        )\n        self.linger_ms = _valid_number(\n            self.linger_ms, self.MIN_WAIT_MS, sys.maxsize, self.DEFAULT_LINGER_MS\n        )\n        self.max_block_ms = _valid_number(\n            self.max_block_ms, 0, sys.maxsize, self.DEFAULT_BLOCK_MS\n        )\n        self.retry_count = _valid_number(\n            self.retry_count, 1, self.MAX_RETRY_COUNT, self.DEFAULT_RETRY_COUNT\n        )\n        self.max_reserved_attempts = _valid_number(\n            self.max_reserved_attempts, 2, self.MAX_RESERVED_ATTEMPTS, self.DEFAULT_RESERVED_ATTEMPTS\n        )\n\n        # 验证客户端配置\n        if (not self.client_config or\n                not self.client_config.endpoint or\n                not self.client_config.region or\n                not (self.client_config.api_key or\n                     (self.client_config.access_key_id and self.client_config.access_key_secret))):\n            raise TLSException(error_code=\"InvalidArgument\", error_message=str(self.client_config))\n\n    def set_total_size_in_bytes(self, total_size_in_bytes: int) -> None:\n        if total_size_in_bytes <= 0:\n            raise TLSException(\n                error_code=\"InvalidArgument\",\n                error_message=f\"totalSizeInBytes must be greater than zero, actual: {total_size_in_bytes}\"\n            )\n        self.total_size_in_bytes = total_size_in_bytes\n\n    def set_max_thread_count(self, max_thread_count: int) -> None:\n        if max_thread_count <= 0 or max_thread_count > self.MAX_THREAD_COUNT:\n            raise TLSException(\n                error_code=\"InvalidArgument\",\n                error_message=f\"maxThreadCount must be between 1 to {self.MAX_THREAD_COUNT}, actual: {max_thread_count}\"\n            )\n        self.max_thread_count = max_thread_count\n\n    def set_max_batch_size_bytes(self, max_batch_size_bytes: int) -> None:\n        if max_batch_size_bytes <= 0 or max_batch_size_bytes > self.MAX_BATCH_SIZE:\n            raise TLSException(\n                error_code=\"InvalidArgument\",\n                error_message=f\"maxBatchSizeBytes must be between 1 to {self.MAX_BATCH_SIZE}, actual: {max_batch_size_bytes}\"\n            )\n        self.max_batch_size_bytes = max_batch_size_bytes\n\n    def set_max_batch_count(self, max_batch_count: int) -> None:\n        if max_batch_count <= 0 or max_batch_count > self.MAX_BATCH_COUNT:\n            raise TLSException(\n                error_code=\"InvalidArgument\",\n                error_message=f\"maxBatchCount must be between 1 to {self.MAX_BATCH_COUNT}, actual: {max_batch_count}\"\n            )\n        self.max_batch_count = max_batch_count\n\n    def set_linger_ms(self, linger_ms: int) -> None:\n        if linger_ms < self.MIN_WAIT_MS:\n            raise TLSException(\n                error_code=\"InvalidArgument\",\n                error_message=f\"lingerMs must be greater than {self.MIN_WAIT_MS}, actual: {linger_ms}\"\n            )\n        self.linger_ms = linger_ms\n\n    def set_retry_count(self, retry_count: int) -> None:\n        if retry_count <= 0 or retry_count > self.MAX_RETRY_COUNT:\n            raise TLSException(\n                error_code=\"InvalidArgument\",\n                error_message=f\"retryCount must be between 1 to {self.MAX_RETRY_COUNT}, actual: {retry_count}\"\n            )\n        self.retry_count = retry_count\n\n    def set_max_reserved_attempts(self, max_reserved_attempts: int) -> None:\n        if max_reserved_attempts < 2 or max_reserved_attempts > self.MAX_RESERVED_ATTEMPTS:\n            raise TLSException(\n                error_code=\"InvalidArgument\",\n                error_message=f\"maxReservedAttempts must be between 2 to {self.MAX_RESERVED_ATTEMPTS}, actual: {max_reserved_attempts}\"\n            )\n        self.max_reserved_attempts = max_reserved_attempts\n\n    def set_client_config(self, client_config: ClientConfig) -> None:\n        if (not client_config or\n                not client_config.endpoint or\n                not client_config.region or\n                not (client_config.api_key or\n                     (client_config.access_key_id and client_config.access_key_secret))):\n            raise TLSException(\n                error_code=\"InvalidArgument\",\n                error_message=str(client_config)\n            )\n        self.client_config = client_config\n\n    def set_max_block_ms(self, max_block_ms: int) -> None:\n        if max_block_ms <= 0:\n            raise TLSException(\n                error_code=\"InvalidArgument\",\n                error_message=f\"maxBlockMs must be greater than zero, actual: {max_block_ms}\"\n            )\n        self.max_block_ms = max_block_ms\n\n    def check_batch_size(self, batch_size: int) -> None:\n        if batch_size > self.MAX_BATCH_SIZE:\n            raise TLSException(\n                error_code=\"InvalidArgument\",\n                error_message=f\"log batch size {batch_size} is larger than MAX_BATCH_SIZE {self.MAX_BATCH_SIZE}\"\n            )\n        if batch_size > self.total_size_in_bytes:\n            raise TLSException(\n                error_code=\"InvalidArgument\",\n                error_message=f\"log batch size {batch_size} is larger than total_size_in_bytes {self.total_size_in_bytes}\"\n            )\n\n    @classmethod\n    def need_retry(cls, http_code):\n        return http_code == cls.TOO_MANY_REQUEST_ERROR or http_code >= cls.EXTERNAL_ERROR or http_code == 0\n\nclass BatchLog:\n    def __init__(self, batch_key: 'BatchLog.BatchKey', producer_config: ProducerConfig):\n        self.batch_key = batch_key\n        self.current_batch_size = 0\n        self.current_batch_count = 0\n        self.earliest_log_time = None\n        self.latest_log_time = None\n        self.call_back_list = []\n        self.log_group_list = LogGroupList()\n        self.producer_config = producer_config\n        self.reserved_attempts = []\n        self.attempt_count = 0\n        self.create_ms = time.time() * 1000  # 转换为毫秒\n        self.next_retry_ms = 0\n        self.retry_backoff_ms = 0\n        self.max_retry_backoff_ms = 10 * 1000  # 10秒\n        self.base_retry_backoff_ms = 1000  # 1秒\n        self.base_increase_backoff_ms = 1000  # 1秒\n        self.LOG = get_logger(__name__)\n\n    def try_add(self, log_group: LogGroup, batch_size: int, call_back: Optional[CallBack],\n                log_count: Optional[int] = None, earliest_log_time: Optional[int] = None,\n                latest_log_time: Optional[int] = None) -> bool:\n        \"\"\"尝试添加日志组到批次中\"\"\"\n        current_batch_count = self.current_batch_count\n        current_batch_size = self.current_batch_size\n        if log_count is None:\n            log_count = len(log_group.logs)\n            for log in log_group.logs:\n                normalized_time = log.time\n                if log.time < 1e10:\n                    normalized_time = log.time * 1000\n                elif log.time < 1e15:\n                    normalized_time = log.time\n                else:\n                    normalized_time = log.time // int(1e6)\n                if earliest_log_time is None or normalized_time < earliest_log_time:\n                    earliest_log_time = normalized_time\n                if latest_log_time is None or normalized_time > latest_log_time:\n                    latest_log_time = normalized_time\n\n        # 检查是否超过阈值\n        if (log_count + current_batch_count > ProducerConfig.MAX_BATCH_COUNT or\n                batch_size + current_batch_size > ProducerConfig.MAX_BATCH_SIZE):\n            return False\n\n        # 添加日志组\n        self.log_group_list.log_groups.append(log_group)  # pylint: disable=no-member\n\n        if call_back is not None:\n            self.call_back_list.append(call_back)\n\n        # 更新当前计数\n        self.current_batch_count = current_batch_count + log_count\n        self.current_batch_size = current_batch_size + batch_size\n        if log_count > 0 and earliest_log_time is not None and latest_log_time is not None:\n            if self.earliest_log_time is None or earliest_log_time < self.earliest_log_time:\n                self.earliest_log_time = earliest_log_time\n            if self.latest_log_time is None or latest_log_time > self.latest_log_time:\n                self.latest_log_time = latest_log_time\n\n        return True\n\n    def full_and_send_batch_request(self) -> bool:\n        \"\"\"检查批次是否已满，需要发送请求\"\"\"\n        return (self.current_batch_count >= self.producer_config.max_batch_count or\n                self.current_batch_size >= self.producer_config.max_batch_size_bytes)\n\n    def add_attempt(self, attempt: Attempt) -> None:\n        \"\"\"添加尝试记录\"\"\"\n        self.reserved_attempts.append(attempt)\n        self.attempt_count += 1\n\n    def fire_callbacks(self) -> None:\n        \"\"\"触发所有回调函数\"\"\"\n        if len(self.reserved_attempts) == 0:\n            self.LOG.error(f\"batch log {self.batch_key} fire call back failed \")\n            return\n\n        attempt = self.reserved_attempts[-1]  # 取最后一个尝试结果\n        result = Result(attempt.success, self.reserved_attempts, self.attempt_count)\n        self._fire_callbacks(result)\n\n    def handle_next_try(self) -> None:\n        \"\"\"处理下一次重试的退避时间\"\"\"\n        if self.attempt_count == 1:\n            self.retry_backoff_ms += self.base_retry_backoff_ms\n        else:\n            increase_backoff_ms = random.random() * self.base_increase_backoff_ms\n            self.retry_backoff_ms += increase_backoff_ms\n\n        self.retry_backoff_ms = min(self.retry_backoff_ms, self.max_retry_backoff_ms)\n        self.next_retry_ms = time.time() * 1000 + self.retry_backoff_ms  # 转换为毫秒\n\n    def _fire_callbacks(self, result: Result) -> None:\n        \"\"\"实际触发回调的私有方法\"\"\"\n        for call_back in self.call_back_list:\n            call_back.on_complete(result)\n\n    def __lt__(self, other: 'BatchLog') -> bool:\n        return self.next_retry_ms < other.next_retry_ms\n\n    def __str__(self) -> str:\n        return (f\"BatchLog{{batchKey={self.batch_key}, currentBatchSize={self.current_batch_size}, \"\n                f\"currentBatchCount={self.current_batch_count}, reservedAttempts={self.reserved_attempts}, \"\n                f\"attemptCount={self.attempt_count}, createMs={self.create_ms}, nextRetryMs={self.next_retry_ms}, \"\n                f\"retryBackoffMs={self.retry_backoff_ms}, maxRetryBackoffMs={self.max_retry_backoff_ms}, \"\n                f\"baseRetryBackoffMs={self.base_retry_backoff_ms}, \"\n                f\"baseIncreaseBackoffMs={self.base_increase_backoff_ms}}}\")\n\n    class BatchKey:\n        \"\"\"批次键，用于标识唯一批次\"\"\"\n\n        def __init__(self, shard_hash: str, topic_id: str, source: str, file_name: str):\n            self.shard_hash = shard_hash\n            self.topic_id = topic_id\n            self.source = source\n            self.file_name = file_name\n\n        def __eq__(self, other) -> bool:\n            if not isinstance(other, BatchLog.BatchKey):\n                return False\n            return (self.shard_hash == other.shard_hash and\n                    self.topic_id == other.topic_id and\n                    self.source == other.source and\n                    self.file_name == other.file_name)\n\n        def __hash__(self) -> int:\n            return hash((self.shard_hash, self.topic_id, self.source, self.file_name))\n\n        def __str__(self) -> str:\n            return (f\"BatchKey{{shardHash={self.shard_hash}, topicId={self.topic_id}, \"\n                    f\"source={self.source}, fileName={self.file_name}}}\")\n"
  },
  {
    "path": "volcengine/tls/producer/retry_queue.py",
    "content": "import heapq\nimport time\nimport threading\nfrom typing import List, Optional\n\nfrom volcengine.tls.producer.producer_model import BatchLog\n\n\ndef get_time_ms(nano_seconds: int) -> int:\n    \"\"\"将纳秒转换为毫秒\"\"\"\n    return nano_seconds // 1_000_000\n\n\nclass RetryQueue:\n    def __init__(self):\n        self.batch: List[BatchLog] = []\n        self.mutex = threading.Lock()\n        self.closed = False\n        # 初始化堆\n        heapq.heapify(self.batch)\n\n    def add_to_retry_queue(self, batch: Optional[BatchLog]) -> None:\n        \"\"\"将批次添加到重试队列\"\"\"\n        with self.mutex:\n            if batch is not None:\n                heapq.heappush(self.batch, batch)\n\n    def get_retry_batch(self, stop_flag: bool) -> List[BatchLog]:\n        \"\"\"获取可以重试的批次列表\"\"\"\n        producer_batch_list: List[BatchLog] = []\n\n        with self.mutex:\n            if not stop_flag:\n                # 非停止状态，只获取已到重试时间的批次\n                while self.__len__() > 0:\n                    # 查看堆顶元素但不弹出\n                    peek_batch = self.batch[0]\n                    current_ms = get_time_ms(time.time_ns())\n\n                    if peek_batch.next_retry_ms < current_ms:\n                        # 已到重试时间，弹出并加入结果列表\n                        producer_batch = heapq.heappop(self.batch)\n                        producer_batch_list.append(producer_batch)\n                    else:\n                        # 未到重试时间，停止检查\n                        break\n            else:\n                # 停止状态，获取所有批次\n                while self.__len__() > 0:\n                    producer_batch = heapq.heappop(self.batch)\n                    producer_batch_list.append(producer_batch)\n\n        return producer_batch_list\n\n    def __len__(self) -> int:\n        \"\"\"返回队列长度\"\"\"\n        return len(self.batch)\n\n"
  },
  {
    "path": "volcengine/tls/producer/send_batch_task.py",
    "content": "from volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.producer.batch_semaphore import BatchSemaphore\nfrom volcengine.tls.producer.producer_model import BatchLog, ProducerConfig, Attempt\nfrom volcengine.tls.producer.retry_queue import RetryQueue\nfrom volcengine.tls.tls_exception import TLSException\nfrom volcengine.tls.tls_requests import PutLogsRequest\nfrom volcengine.tls.tls_responses import PutLogsResponse\nfrom volcengine.tls.util import get_logger\n\n# 常量定义\nHTTP_STATUS_OK = 200\n\n\nclass SendBatchTask:\n    def __init__(self,\n                 batch_log: BatchLog,\n                 producer_config: ProducerConfig,\n                 memory_lock: BatchSemaphore,\n                 client: TLSService,\n                 retry_queue: RetryQueue):\n        self.LOG = get_logger(__name__)\n        self.producer_config = producer_config\n        self.memory_lock = memory_lock\n        self.client = client\n        self.retry_queue = retry_queue\n        self.batch_log = batch_log\n\n    def run(self) -> None:\n        \"\"\"线程执行入口，发送请求\"\"\"\n        self.send_request()\n\n    def send_request(self) -> None:\n        \"\"\"构建并发送日志请求\"\"\"\n        batch_key = self.batch_log.batch_key\n        put_logs_request = PutLogsRequest(\n            batch_key.topic_id,\n            self.batch_log.log_group_list,\n            batch_key.shard_hash,\n            log_count=self.batch_log.current_batch_count,\n            earliest_log_time=self.batch_log.earliest_log_time,\n            latest_log_time=self.batch_log.latest_log_time,\n            enable_nanosecond=self.producer_config.enable_nanosecond,\n        )\n\n        if not self.calibrate_batch_size():\n            return\n\n        try:\n            put_logs_response = self.client.put_logs(put_logs_request)\n        except TLSException as e:\n            self.handle_log_exception(e)\n            return\n        except Exception as e:\n            self.handle_exception(e)\n            return\n\n        self.handle_success(put_logs_response)\n\n    def calibrate_batch_size(self) -> bool:\n        estimated = int(self.batch_log.current_batch_size)\n        actual = int(self.batch_log.log_group_list.ByteSize())\n        delta = actual - estimated\n        if delta > 0:\n            max_block_ms = self.producer_config.max_block_ms\n            if max_block_ms == 0:\n                self.memory_lock.acquire(delta)\n            else:\n                acquired = self.memory_lock.acquire(delta, timeout=max_block_ms / 1000)\n                if not acquired:\n                    self.handle_exception(Exception(\"buffer full when calibrating batch size\"))\n                    return False\n        elif delta < 0:\n            self.memory_lock.release(-delta)\n        self.batch_log.current_batch_size = actual\n        return True\n\n    def handle_failure(self) -> None:\n        \"\"\"处理失败日志\"\"\"\n        self.LOG.info(f\"send batch failed, batch: {self.batch_log}\")\n        self.batch_log.fire_callbacks()\n        self.memory_lock.release(self.batch_log.current_batch_size)\n\n    def need_retry(self, e: TLSException) -> bool:\n        \"\"\"判断是否需要重试\"\"\"\n        return (ProducerConfig.need_retry(e.http_code) and\n                self.batch_log.attempt_count <= self.producer_config.retry_count and\n                not self.retry_queue.closed)\n\n    def handle_log_exception(self, e: TLSException) -> None:\n        \"\"\"处理日志异常\"\"\"\n        self.LOG.error(f\"send batch failed, batch:{self.batch_log}\", exc_info=e)\n\n        # 创建失败尝试记录\n        fail_attempt = Attempt(\n            success=False,\n            request_id=e.request_id,\n            error_code=e.error_code,\n            error_message=e.error_message,\n            http_code=e.http_code\n        )\n        self.batch_log.add_attempt(fail_attempt)\n        self.batch_log.handle_next_try()\n\n        # 检查是否需要重试\n        if self.need_retry(e):\n            try:\n                self.retry_queue.add_to_retry_queue(self.batch_log)\n                self.LOG.info(f\"retry queue add batch success, batch: {self.batch_log}\")\n                return\n            except TLSException as ex:\n                self.LOG.warn(\"retry manager is closed and put batch log to failure queue\", exc_info=ex)\n\n        # 不需要重试或重试失败，处理失败日志\n        self.handle_failure()\n\n    def handle_exception(self, e: Exception) -> None:\n        \"\"\"处理通用异常\"\"\"\n        self.LOG.error(f\"send batch failed, batch:{self.batch_log}\", exc_info=e)\n\n        # 创建失败尝试记录\n        fail_attempt = Attempt(\n            success=False,\n            error_code=e.__class__.__name__,\n            error_message=str(e)\n        )\n        self.batch_log.add_attempt(fail_attempt)\n        self.handle_failure()\n\n    def handle_success(self, put_logs_response: PutLogsResponse) -> None:\n        \"\"\"处理成功响应\"\"\"\n        success_attempt = Attempt(\n            success=True,\n            request_id=put_logs_response.request_id,\n            http_code=HTTP_STATUS_OK\n        )\n        self.batch_log.add_attempt(success_attempt)\n        self.batch_log.retry_backoff_ms = 0\n        self.batch_log.fire_callbacks()\n        self.memory_lock.release(self.batch_log.current_batch_size)\n        self.LOG.debug(f\"send batch success, batch: {self.batch_log}\")\n"
  },
  {
    "path": "volcengine/tls/retry_policy.py",
    "content": "import math\nimport random\n\nRETRY_POLICY_TOTAL_TIMEOUT_MIN = 30\nRETRY_POLICY_TOTAL_TIMEOUT_MAX = 15 * 60\nRETRY_POLICY_INITIAL_INTERVAL_MIN = 0.1\nRETRY_POLICY_INITIAL_INTERVAL_MAX = 30\nRETRY_POLICY_MAX_INTERVAL_MIN = 1\nRETRY_POLICY_MAX_INTERVAL_MAX = 60\nRETRY_POLICY_MULTIPLIER_MIN = 1.0\nRETRY_POLICY_MULTIPLIER_MAX = 3.0\nRETRY_POLICY_RANDOMIZATION_MIN = 0.1\nRETRY_POLICY_RANDOMIZATION_MAX = 1.0\nRETRY_POLICY_MAX_ATTEMPTS_MIN = 0\nRETRY_POLICY_MAX_ATTEMPTS_MAX = 50\nDEFAULT_RETRY_RANDOMIZATION_FACTOR = 0.25\nDEFAULT_RETRY_MULTIPLIER = 2.0\nDEFAULT_RETRY_MAX_INTERVAL = 10\nDEFAULT_RETRY_INTERVAL = 0.5\nDEFAULT_RETRY_TIMEOUT = 90\n\n\nclass RetryPolicy(object):\n    def __init__(self, total_timeout=None, initial_interval=None, max_interval=None, multiplier=None,\n                 randomization_factor=None, max_attempts=0):\n        self.total_timeout = total_timeout\n        self.initial_interval = initial_interval\n        self.max_interval = max_interval\n        self.multiplier = multiplier\n        self.randomization_factor = randomization_factor\n        self.max_attempts = max_attempts\n\n    @staticmethod\n    def default_policy():\n        return RetryPolicy(\n            total_timeout=DEFAULT_RETRY_TIMEOUT,\n            initial_interval=DEFAULT_RETRY_INTERVAL,\n            max_interval=DEFAULT_RETRY_MAX_INTERVAL,\n            multiplier=DEFAULT_RETRY_MULTIPLIER,\n            randomization_factor=DEFAULT_RETRY_RANDOMIZATION_FACTOR,\n            max_attempts=0,\n        )\n\n    def normalize(self):\n        total_timeout = self.total_timeout\n        if total_timeout is None or total_timeout <= 0 or (isinstance(total_timeout, float) and math.isnan(total_timeout)):\n            total_timeout = DEFAULT_RETRY_TIMEOUT\n        if total_timeout < RETRY_POLICY_TOTAL_TIMEOUT_MIN:\n            total_timeout = RETRY_POLICY_TOTAL_TIMEOUT_MIN\n        if total_timeout > RETRY_POLICY_TOTAL_TIMEOUT_MAX:\n            total_timeout = RETRY_POLICY_TOTAL_TIMEOUT_MAX\n\n        initial_interval = self.initial_interval\n        if initial_interval is None or initial_interval <= 0 or (isinstance(initial_interval, float) and math.isnan(initial_interval)):\n            initial_interval = DEFAULT_RETRY_INTERVAL\n        if initial_interval < RETRY_POLICY_INITIAL_INTERVAL_MIN:\n            initial_interval = RETRY_POLICY_INITIAL_INTERVAL_MIN\n        if initial_interval > RETRY_POLICY_INITIAL_INTERVAL_MAX:\n            initial_interval = RETRY_POLICY_INITIAL_INTERVAL_MAX\n\n        max_interval = self.max_interval\n        if max_interval is None or max_interval <= 0 or (isinstance(max_interval, float) and math.isnan(max_interval)):\n            max_interval = DEFAULT_RETRY_MAX_INTERVAL\n        if max_interval < RETRY_POLICY_MAX_INTERVAL_MIN:\n            max_interval = RETRY_POLICY_MAX_INTERVAL_MIN\n        if max_interval > RETRY_POLICY_MAX_INTERVAL_MAX:\n            max_interval = RETRY_POLICY_MAX_INTERVAL_MAX\n        if max_interval < initial_interval:\n            max_interval = initial_interval\n\n        multiplier = self.multiplier\n        if multiplier is None or multiplier <= 0 or (isinstance(multiplier, float) and math.isnan(multiplier)):\n            multiplier = DEFAULT_RETRY_MULTIPLIER\n        if multiplier < RETRY_POLICY_MULTIPLIER_MIN:\n            multiplier = RETRY_POLICY_MULTIPLIER_MIN\n        if multiplier > RETRY_POLICY_MULTIPLIER_MAX:\n            multiplier = RETRY_POLICY_MULTIPLIER_MAX\n\n        randomization_factor = self.randomization_factor\n        if randomization_factor is None or randomization_factor < 0 or (\n                isinstance(randomization_factor, float) and math.isnan(randomization_factor)):\n            randomization_factor = DEFAULT_RETRY_RANDOMIZATION_FACTOR\n        if randomization_factor < RETRY_POLICY_RANDOMIZATION_MIN:\n            randomization_factor = RETRY_POLICY_RANDOMIZATION_MIN\n        if randomization_factor > RETRY_POLICY_RANDOMIZATION_MAX:\n            randomization_factor = RETRY_POLICY_RANDOMIZATION_MAX\n\n        max_attempts = self.max_attempts\n        if max_attempts is None:\n            max_attempts = RETRY_POLICY_MAX_ATTEMPTS_MIN\n        if max_attempts < RETRY_POLICY_MAX_ATTEMPTS_MIN:\n            max_attempts = RETRY_POLICY_MAX_ATTEMPTS_MIN\n        if max_attempts > RETRY_POLICY_MAX_ATTEMPTS_MAX:\n            max_attempts = RETRY_POLICY_MAX_ATTEMPTS_MAX\n\n        return RetryPolicy(\n            total_timeout=total_timeout,\n            initial_interval=initial_interval,\n            max_interval=max_interval,\n            multiplier=multiplier,\n            randomization_factor=randomization_factor,\n            max_attempts=max_attempts,\n        )\n\n    def backoff_seconds(self, attempt):\n        interval = self.initial_interval * (self.multiplier ** max(attempt - 1, 0))\n        if interval > self.max_interval:\n            interval = self.max_interval\n        if self.randomization_factor > 0:\n            delta = self.randomization_factor * interval\n            interval = random.uniform(interval - delta, interval + delta)\n        if interval < 0:\n            interval = 0\n        return interval\n"
  },
  {
    "path": "volcengine/tls/test/api_key_anonymous_auth_unit_test.py",
    "content": "import unittest\nfrom unittest.mock import patch\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.const import CONTENT_TYPE, APPLICATION_JSON, DESCRIBE_PROJECT, X_TLS_REQUEST_ID, X_SECURITY_TOKEN\nfrom volcengine.tls.log_pb2 import LogGroupList\nfrom volcengine.tls.producer.batch_semaphore import BatchSemaphore\nfrom volcengine.tls.producer.log_dispatcher import LogDispatcher\nfrom volcengine.tls.producer.producer import TLSProducer\nfrom volcengine.tls.producer.producer_model import ProducerConfig\nfrom volcengine.tls.producer.retry_queue import RetryQueue\nfrom volcengine.tls.tls_exception import TLSException\nfrom volcengine.tls.tls_requests import DeleteProjectRequest, PutLogsRequest, PutLogsV2Request, PutLogsV2Logs\n\n\nANONYMOUS_HEADER = \"x-tls-anonymous-identity\"\n\n\nclass _FakeResponse:\n    status_code = 200\n    text = \"\"\n    content = b\"\"\n    headers = {\n        CONTENT_TYPE: APPLICATION_JSON,\n        X_TLS_REQUEST_ID: \"request-id\",\n    }\n\n\nclass _CaptureSession:\n    def __init__(self):\n        self.requests = []\n\n    def request(self, method, url, headers=None, data=None, timeout=None):\n        self.requests.append({\n            \"method\": method,\n            \"url\": url,\n            \"headers\": dict(headers or {}),\n            \"data\": data,\n            \"timeout\": timeout,\n        })\n        return _FakeResponse()\n\n\nclass _FailingSession:\n    def request(self, *args, **kwargs):\n        raise AssertionError(\"network request should not be sent\")\n\n\ndef _make_put_logs_request():\n    log_group_list = LogGroupList()\n    log_group = log_group_list.log_groups.add()  # pylint: disable=no-member\n    log = log_group.logs.add()\n    log.time = 1\n    content = log.contents.add()\n    content.key = \"k\"\n    content.value = \"v\"\n    return PutLogsRequest(\"topic-id\", log_group_list, compression=None)\n\n\ndef _make_put_logs_v2_request():\n    logs = PutLogsV2Logs()\n    logs.add_log({\"k\": \"v\"}, log_time=1)\n    return PutLogsV2Request(\"topic-id\", logs, compression=None)\n\n\nclass ApiKeyAnonymousAuthUnitTest(unittest.TestCase):\n    def _service_with_api_key(self, api_key=\"api-key\", access_key_id=\"\", access_key_secret=\"\", security_token=None):\n        with patch(\"volcengine.base.Service.Service.init\", lambda _self: None):\n            if not hasattr(TLSService, \"with_api_key\"):\n                self.fail(\"TLSService.with_api_key should exist\")\n            try:\n                return TLSService.with_api_key(\n                    \"tls.example.com\",\n                    \"cn-beijing\",\n                    api_key,\n                    access_key_id=access_key_id,\n                    access_key_secret=access_key_secret,\n                    security_token=security_token,\n                )\n            except TypeError as e:\n                self.fail(\"TLSService.with_api_key should accept optional AK/SK/token: {}\".format(e))\n\n    def _producer_config_with_api_key(self):\n        try:\n            return ProducerConfig(\"tls.example.com\", \"cn-beijing\", \"\", \"\", api_key=\"api-key\")\n        except TypeError as e:\n            self.fail(\"ProducerConfig.__init__ should accept api_key: {}\".format(e))\n\n    def test_with_api_key_put_logs_uses_anonymous_header_without_signature(self):\n        service = self._service_with_api_key()\n        service.session = _CaptureSession()\n\n        with patch(\"volcengine.tls.TLSService.SignerV4.sign\") as sign:\n            service.put_logs(_make_put_logs_request())\n\n        sign.assert_not_called()\n        self.assertEqual(1, len(service.session.requests))\n        headers = service.session.requests[0][\"headers\"]\n        self.assertEqual(\"api-key\", headers[ANONYMOUS_HEADER])\n        self.assertNotIn(\"Authorization\", headers)\n\n    def test_reset_api_key_updates_anonymous_header(self):\n        service = self._service_with_api_key(\"old-api-key\")\n        service.session = _CaptureSession()\n\n        service.reset_api_key(\"new-api-key\")\n        with patch(\"volcengine.tls.TLSService.SignerV4.sign\") as sign:\n            service.put_logs(_make_put_logs_request())\n\n        sign.assert_not_called()\n        self.assertEqual(\"new-api-key\", service.session.requests[0][\"headers\"][ANONYMOUS_HEADER])\n\n    def test_put_logs_v2_uses_anonymous_header_without_signature(self):\n        service = self._service_with_api_key()\n        service.session = _CaptureSession()\n\n        with patch(\"volcengine.tls.TLSService.SignerV4.sign\") as sign:\n            service.put_logs_v2(_make_put_logs_v2_request())\n\n        sign.assert_not_called()\n        self.assertEqual(\"api-key\", service.session.requests[0][\"headers\"][ANONYMOUS_HEADER])\n        self.assertNotIn(\"Authorization\", service.session.requests[0][\"headers\"])\n\n    def test_anonymous_put_logs_does_not_send_security_token(self):\n        service = self._service_with_api_key(\n            access_key_id=\"ak\",\n            access_key_secret=\"sk\",\n            security_token=\"sts-token\",\n        )\n        service.session = _CaptureSession()\n\n        with patch(\"volcengine.tls.TLSService.SignerV4.sign\") as sign:\n            service.put_logs(_make_put_logs_request())\n\n        sign.assert_not_called()\n        headers = service.session.requests[0][\"headers\"]\n        self.assertEqual(\"api-key\", headers[ANONYMOUS_HEADER])\n        self.assertNotIn(\"Authorization\", headers)\n        self.assertNotIn(X_SECURITY_TOKEN, headers)\n\n    def test_api_key_only_non_put_logs_fails_locally_without_network(self):\n        service = self._service_with_api_key()\n        service.session = _FailingSession()\n\n        with self.assertRaises(TLSException) as ctx:\n            service.delete_project(DeleteProjectRequest(\"project-id\"))\n\n        self.assertIn(ctx.exception.error_code, (\"MissingCredentials\", \"InvalidCredentials\"))\n        self.assertIn(\"AK/SK\", ctx.exception.error_message)\n\n    def test_api_key_with_ak_sk_prefers_api_key_for_put_logs_and_signs_other_apis(self):\n        service = self._service_with_api_key(access_key_id=\"ak\", access_key_secret=\"sk\")\n        service.session = _CaptureSession()\n\n        with patch(\"volcengine.tls.TLSService.SignerV4.sign\") as sign:\n            service.put_logs(_make_put_logs_request())\n\n        sign.assert_not_called()\n        headers = service.session.requests[0][\"headers\"]\n        self.assertEqual(\"api-key\", headers[ANONYMOUS_HEADER])\n        self.assertNotIn(\"Authorization\", headers)\n\n        with patch(\"volcengine.tls.TLSService.SignerV4.sign\") as sign:\n            request = service._TLSService__prepare_request(api=DESCRIBE_PROJECT, params={\"ProjectId\": \"project-id\"})\n\n        sign.assert_called_once()\n        self.assertNotIn(ANONYMOUS_HEADER, request.headers)\n\n    def test_producer_config_accepts_api_key_and_masks_it(self):\n        config = self._producer_config_with_api_key()\n\n        config.valid_config()\n\n        self.assertEqual(\"api-key\", config.client_config.api_key)\n        self.assertNotIn(\"api-key\", str(config))\n\n    def test_log_dispatcher_passes_api_key_to_tls_service(self):\n        config = self._producer_config_with_api_key()\n        config.max_thread_count = 1\n        captured = []\n\n        class _FakeTLSService:\n            def __init__(self, endpoint, access_key_id, access_key_secret, region,\n                         security_token=None, scheme=\"https\", timeout=60, api_version=\"0.3.0\", api_key=None):\n                captured.append({\n                    \"endpoint\": endpoint,\n                    \"access_key_id\": access_key_id,\n                    \"access_key_secret\": access_key_secret,\n                    \"region\": region,\n                    \"security_token\": security_token,\n                    \"api_key\": api_key,\n                })\n\n        with patch(\"volcengine.tls.producer.log_dispatcher.TLSService\", _FakeTLSService):\n            dispatcher = LogDispatcher(config, \"producer\", BatchSemaphore(1024), RetryQueue())\n            dispatcher.close_now()\n\n        self.assertEqual(\"api-key\", captured[0][\"api_key\"])\n\n    def test_log_dispatcher_reset_api_key_updates_tls_service(self):\n        config = self._producer_config_with_api_key()\n        reset_values = []\n\n        class _FakeTLSService:\n            def __init__(self, endpoint, access_key_id, access_key_secret, region,\n                         security_token=None, scheme=\"https\", timeout=60, api_version=\"0.3.0\", api_key=None):\n                self.api_key = api_key\n\n            def reset_api_key(self, api_key):\n                self.api_key = api_key\n                reset_values.append(api_key)\n\n        with patch(\"volcengine.tls.producer.log_dispatcher.TLSService\", _FakeTLSService):\n            dispatcher = LogDispatcher(config, \"producer\", BatchSemaphore(1024), RetryQueue())\n            dispatcher.reset_api_key(\"new-api-key\")\n            dispatcher.close_now()\n\n        self.assertEqual(\"new-api-key\", config.client_config.api_key)\n        self.assertEqual([\"new-api-key\"], reset_values)\n\n    def test_producer_reset_api_key_updates_dispatcher_client(self):\n        config = self._producer_config_with_api_key()\n        reset_values = []\n\n        class _FakeTLSService:\n            def __init__(self, endpoint, access_key_id, access_key_secret, region,\n                         security_token=None, scheme=\"https\", timeout=60, api_version=\"0.3.0\", api_key=None):\n                self.api_key = api_key\n\n            def reset_api_key(self, api_key):\n                self.api_key = api_key\n                reset_values.append(api_key)\n\n        with patch(\"volcengine.tls.producer.log_dispatcher.TLSService\", _FakeTLSService):\n            producer = TLSProducer(config)\n            producer.reset_api_key(\"new-api-key\")\n            producer.dispatcher.close_now()\n\n        self.assertEqual(\"new-api-key\", config.client_config.api_key)\n        self.assertEqual([\"new-api-key\"], reset_values)\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/cancel_download_task_test.py",
    "content": "import os\nimport unittest\nimport random\nimport string\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import CancelDownloadTaskRequest\nfrom volcengine.tls.tls_responses import CancelDownloadTaskResponse\n\n\nclass TestCancelDownloadTask(unittest.TestCase):\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"tls-cn-beijing.ivolces.com\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"\")\n\n    def generate_random_task_id(self):\n        \"\"\"生成随机的下载任务ID用于测试\"\"\"\n        random_suffix = ''.join(random.choices(string.ascii_lowercase + string.digits, k=8))\n        return f\"test-download-task-{random_suffix}\"\n\n    def test_cancel_download_task_request_validation(self):\n        \"\"\"测试取消下载任务请求参数验证\"\"\"\n        # 测试正常情况\n        request = CancelDownloadTaskRequest(task_id=\"test-task-id\")\n        self.assertTrue(request.check_validation())\n\n        # 测试task_id为None的情况\n        request = CancelDownloadTaskRequest(task_id=None)\n        self.assertFalse(request.check_validation())\n\n    def test_cancel_download_task_response(self):\n        \"\"\"测试取消下载任务响应\"\"\"\n        # 这里只是测试响应类的基本结构，实际API调用需要真实的环境配置\n        # 由于需要真实的服务端响应，这里仅做基本的类实例化测试\n        pass\n\n    def test_cancel_download_task_integration(self):\n        \"\"\"集成测试 - 需要真实的环境配置\"\"\"\n        if not all([self.access_key_id, self.access_key_secret]):\n            self.skipTest(\"环境变量未配置，跳过集成测试\")\n\n        try:\n            tls_client = TLSService(\n                self.endpoint,\n                self.access_key_id,\n                self.access_key_secret,\n                self.region\n            )\n\n            # 生成一个随机的任务ID进行测试\n            task_id = self.generate_random_task_id()\n\n            request = CancelDownloadTaskRequest(task_id=task_id)\n\n            # 调用取消下载任务接口\n            # 注意：这里可能会失败，因为任务ID可能不存在，但我们主要测试接口调用\n            response = tls_client.cancel_download_task(request)\n\n            # 验证响应类型\n            self.assertIsInstance(response, CancelDownloadTaskResponse)\n\n            # 验证响应包含请求ID\n            self.assertIsNotNone(response.get_request_id())\n\n        except Exception as e:\n            # 如果是因为任务不存在或其他业务错误，我们也认为接口调用是成功的\n            # 因为主要目的是测试接口调用，而不是业务逻辑\n            print(f\"集成测试执行中（预期内的错误）: {e}\")\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/consumer_test.py",
    "content": "# coding=utf-8\nimport os\nimport time\nimport unittest\nimport uuid\n\nfrom volcengine.tls import tls_requests\nfrom volcengine.tls.consumer.consumer import LogProcessor, TLSConsumer\nfrom volcengine.tls.consumer.consumer_model import ConsumerConfig\nfrom volcengine.tls.log_pb2 import LogGroupList\nfrom volcengine.tls.test.util_test import NewTLSService\n\n\nclass TestLogProcessor(LogProcessor):\n    def process(self, topic_id: str, shard_id: int, log_group_list: LogGroupList):\n        print(topic_id + \" --- \" + str(shard_id))\n\n        count = 0\n\n        for log_group in log_group_list.log_groups:\n            for log in log_group.logs:\n                count += 1\n                print(\"*** Count = {} ***\".format(count))\n\n                for content in log.contents:\n                    print(\"{}: {}\".format(content.key, content.value))\n                print()\n\n\nclass TestTLSService(unittest.TestCase):\n\n    cli = NewTLSService()\n\n    project_id = \"\"\n    project_name = \"python-sdk-consumer-test-project\" + uuid.uuid4().hex\n    topic_id = \"\"\n    topic_name = \"python-sdk-consumer-test-topic\" + uuid.uuid4().hex\n    timestamp = str(int(time.time()) - 1)\n\n    @classmethod\n    def setUpClass(cls):\n        # 创建project\n        create_project_request = tls_requests.CreateProjectRequest(\n            project_name=cls.project_name,\n            region=os.environ[\"VOLCENGINE_REGION\"],\n        )\n        create_project_response = cls.cli.create_project(\n            create_project_request)\n        cls.assertTrue(create_project_response.project_id,\n                       \"create project failed\")\n        cls.project_id = create_project_response.project_id\n\n        # 创建topic\n        create_topic_request = tls_requests.CreateTopicRequest(\n            project_id=cls.project_id,\n            topic_name=cls.topic_name,\n            ttl=1,\n            shard_count=1,\n        )\n        create_topic_response = cls.cli.create_topic(create_topic_request)\n        cls.assertTrue(create_topic_response.topic_id, \"create topic failed\")\n        cls.topic_id = create_topic_response.topic_id\n\n        # 写入日志数据\n        logs = tls_requests.PutLogsV2Logs(\n            source=\"python-sdk-local\", filename=\"test.log\")\n        for i in range(10):\n            logs.add_log(\n                contents={\n                    \"key\": \"key-\" + str(i),\n                    \"value\": \"test-message\" + str(i)\n                },\n                log_time=int(time.time())\n            )\n        cls.cli.put_logs_v2(tls_requests.PutLogsV2Request(cls.topic_id, logs))\n\n        time.sleep(10)\n\n    @classmethod\n    def tearDownClass(cls):\n        # 删除topic\n        delete_topic_request = tls_requests.DeleteTopicRequest(\n            topic_id=cls.topic_id)\n        delete_topic_response = cls.cli.delete_topic(delete_topic_request)\n        cls.assertTrue(delete_topic_response.request_id, \"delete topic failed\")\n\n        # 删除project\n        delete_project_request = tls_requests.DeleteProjectRequest(\n            project_id=cls.project_id)\n        delete_project_response = cls.cli.delete_project(\n            delete_project_request)\n        cls.assertTrue(delete_project_response.request_id,\n                       \"delete project failed\")\n\n    def setUp(self):\n        pass\n\n    def tearDown(self):\n        pass\n\n    def test_consumer(self):\n        # 配置消费组的必填参数，ConsumerConfig构造函数设定了一些默认参数，您也可根据需要自定义配置\n        consumer_config = ConsumerConfig(\n            project_id=self.project_id,\n            consumer_group_name=\"python-consumer-group\",\n            consumer_name=\"python-consumer\",\n            topic_id_list=[self.topic_id],\n            consume_from=self.timestamp,\n        )\n        tls_consumer = TLSConsumer(\n            consumer_config, self.cli, TestLogProcessor())\n\n        # 调用start方法开始持续消费\n        tls_consumer.start()\n\n        # 可通过调用tls_consumer.stop()来结束消费组消费\n        time.sleep(300)\n        tls_consumer.stop()\n"
  },
  {
    "path": "volcengine/tls/test/create_alarm_content_template_test.py",
    "content": "import os\nimport unittest\nimport random\nimport string\n\nimport sys\nsys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..', '..'))\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import CreateAlarmContentTemplateRequest\nfrom volcengine.tls.tls_responses import CreateAlarmContentTemplateResponse\nfrom volcengine.tls.data import (\n    DingTalkContentTemplateInfo, EmailContentTemplateInfo, \n    LarkContentTemplateInfo, SmsContentTemplateInfo, VmsContentTemplateInfo,\n    WeChatContentTemplateInfo, WebhookContentTemplateInfo\n)\n\n\nclass TestCreateAlarmContentTemplate(unittest.TestCase):\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"\")\n\n    def generate_random_string(self, length=10):\n        return ''.join(random.choices(string.ascii_lowercase + string.digits, k=length))\n\n    def test_create_alarm_content_template(self):\n        \"\"\"Test creating an alarm content template with all notification types\"\"\"\n        if not all([self.endpoint, self.region, self.access_key_id, \n                   self.access_key_secret]):\n            self.skipTest(\"Missing required environment variables\")\n\n        tls_service = TLSService(\n            self.endpoint, self.access_key_id, self.access_key_secret, \n            self.region)\n\n        # Create content template with all notification types\n        template_name = f\"tls-python-sdk-test-alarm-content-template-\" \\\n                       f\"{self.generate_random_string()}\"\n        \n        # Email content template\n        email_template = EmailContentTemplateInfo(\n            subject=\"告警通知\",\n            content=\"告警策略：{{Alarm}}<br> 告警日志项目：{{ProjectName}}<br>\",\n            locale=\"zh-CN\"\n        )\n        \n        # DingTalk content template\n        dingtalk_content = \"尊敬的用户，您好！\\n您的账号（主账户ID：{{AccountID}} ）\" \\\n                          \"的日志服务{%if NotifyType==1%}触发告警{%else%}告警恢复\" \\\n                          \"{%endif%}\\n告警策略：{{Alarm}}\\n告警日志主题：{{AlarmTopicName}}\" \\\n                          \"\\n触发时间：{{StartTime}}\\n触发条件：{{Condition}}\\n\" \\\n                          \"当前查询结果：[{%-for x in TriggerParams-%}]{{-x-}} {%-endfor-%}]\" \\\n                          \"\\n通知内容：{{NotifyMsg|escapejs}}\\n日志检索详情：[查看详情]({{QueryUrl}})\" \\\n                          \"\\n告警详情：[查看详情]({{SignInUrl}})\\n\\n感谢对火山引擎的支持\"\n        dingtalk_template = DingTalkContentTemplateInfo(\n            title=\"告警通知\",\n            content=dingtalk_content,\n            locale=\"zh-CN\"\n        )\n        \n        # Lark content template\n        lark_content = \"尊敬的用户，您好！\\n您的账号（主账户ID：{{AccountID}} ）\" \\\n                      \"的日志服务{%if NotifyType==1%}触发告警{%else%}告警恢复\" \\\n                      \"{%endif%}\\n告警策略：{{Alarm}}\\n告警日志主题：{{AlarmTopicName}}\" \\\n                      \"\\n触发时间：{{StartTime}}\\n触发条件：{{Condition}}\\n\" \\\n                      \"当前查询结果：[{%-for x in TriggerParams-%}]{{-x-}} {%-endfor-%}]\" \\\n                      \"\\n通知内容：{{NotifyMsg|escapejs}}\\n日志检索详情：[查看详情]({{QueryUrl}})\" \\\n                      \"\\n告警详情：[查看详情]({{SignInUrl}})\\n\\n感谢对火山引擎的支持\"\n        lark_template = LarkContentTemplateInfo(\n            title=\"告警通知\",\n            content=lark_content,\n            locale=\"zh-CN\"\n        )\n        \n        # WeChat content template\n        wechat_content = \"尊敬的用户，您好！\\n您的账号（主账户ID：{{AccountID}} ）\" \\\n                        \"的日志服务{%if NotifyType==1%}触发告警{%else%}告警恢复\" \\\n                        \"{%endif%}\\n告警策略：{{Alarm}}\\n告警日志主题：{{AlarmTopicName}}\" \\\n                        \"\\n触发时间：{{StartTime}}\\n触发条件：{{Condition}}\\n\" \\\n                        \"当前查询结果：[{%-for x in TriggerParams-%}]{{-x-}} {%-endfor-%}]\" \\\n                        \"\\n通知内容：{{NotifyMsg|escapejs}}\\n日志检索详情：[查看详情]({{QueryUrl}})\" \\\n                        \"\\n告警详情：[查看详情]({{SignInUrl}})\\n\\n感谢对火山引擎支持\"\n        wechat_template = WeChatContentTemplateInfo(\n            title=\"告警通知\",\n            content=wechat_content,\n            locale=\"zh-CN\"\n        )\n        \n        # SMS content template\n        sms_content = \"告警策略{{Alarm}}， 告警日志项目：{{ProjectName}}， \" \\\n                     \"告警日志主题：{{AlarmTopicName}}， 告警级别：{{Severity}}， \" \\\n                     \"通知类型：{%if NotifyType==1%}触发告警{%else%}告警恢复{%endif%}，\" \\\n                     \"触发时间：{{StartTime}}， 触发条件：{{Condition}}， \" \\\n                     \"当前查询结果：[{%-for x in TriggerParams-%}]{{-x-}} {%-endfor-%}]， \" \\\n                     \"通知内容：{{NotifyMsg}}\"\n        sms_template = SmsContentTemplateInfo(\n            content=sms_content,\n            locale=\"zh-CN\"\n        )\n        \n        # VMS content template\n        vms_template = VmsContentTemplateInfo(\n            content=\"通知类型：{%if NotifyType==1%}触发告警{%else%}告警恢复{%endif%}\",\n            locale=\"zh-CN\"\n        )\n        \n        # Webhook content template\n        webhook_content = '{ \"msg_type\": \"interactive\", \"card\": { \"config\": ' \\\n                         '{ \"wide_screen_mode\": true }, \"elements\": [ { \"content\": ' \\\n                         '\"尊敬的用户，您好！\\\\n您的账号（主账户ID：{{AccountID}} ）的日志服务' \\\n                         '{%if NotifyType==1%}触发告警{%else%}告警恢复{%endif%}\\\\n告警策略：{{Alarm}}' \\\n                         '\\\\n告警日志主题：{{AlarmTopicName}}\\\\n触发时间：{{StartTime}}\\\\n触发条件：{{Condition}}' \\\n                         '\\\\n当前查询结果：[{%-for x in TriggerParams-%}]{{-x-}} {%-endfor-%}];\\\\n' \\\n                         '通知内容：{{NotifyMsg|escapejs}}\\\\n\\\\n感谢对火山引擎支持\", \"tag\": \"markdown\" } ], ' \\\n                         '\"header\": { \"template\": \"{%if NotifyType==1%}red{%else%}green{%endif%}\", ' \\\n                         '\"title\": { \"content\": \"【火山引擎】【日志服务】{%if NotifyType==1%}触发告警' \\\n                         '{%else%}告警恢复{%endif%}\", \"tag\": \"plain_text\" } } }'\n        webhook_template = WebhookContentTemplateInfo(\n            content=webhook_content\n        )\n        \n        # Create the request\n        request = CreateAlarmContentTemplateRequest(\n            alarm_content_template_name=template_name,\n            email=email_template,\n            ding_talk=dingtalk_template,\n            lark=lark_template,\n            we_chat=wechat_template,\n            sms=sms_template,\n            vms=vms_template,\n            webhook=webhook_template,\n            need_valid_content=True\n        )\n        \n        # Execute the request\n        try:\n            response = tls_service.create_alarm_content_template(request)\n            \n            # Verify the response\n            self.assertIsNotNone(response)\n            template_id = response.get_alarm_content_template_id()\n            self.assertIsNotNone(template_id)\n            self.assertIsInstance(template_id, str)\n            self.assertGreater(len(template_id), 0)\n            \n            print(f\"Successfully created alarm content template: {template_name} \"\n                  f\"with ID: {template_id}\")\n            \n        except Exception as exc:\n            # In a real test environment, we would handle specific exceptions\n            # For now, we'll just print the error and fail the test\n            self.fail(f\"Failed to create alarm content template: {str(exc)}\")\n\n    def test_create_alarm_content_template_minimal(self):\n        \"\"\"Test creating an alarm content template with minimal required fields\"\"\"\n        if not all([self.endpoint, self.region, self.access_key_id, \n                   self.access_key_secret]):\n            self.skipTest(\"Missing required environment variables\")\n\n        tls_service = TLSService(\n            self.endpoint, self.access_key_id, self.access_key_secret, \n            self.region)\n\n        # Create content template with only required field\n        template_name = f\"tls-python-sdk-test-minimal-\" \\\n                       f\"{self.generate_random_string()}\"\n        \n        request = CreateAlarmContentTemplateRequest(\n            alarm_content_template_name=template_name\n        )\n        \n        # Execute the request\n        try:\n            response = tls_service.create_alarm_content_template(request)\n            \n            # Verify the response\n            self.assertIsNotNone(response)\n            template_id = response.get_alarm_content_template_id()\n            self.assertIsNotNone(template_id)\n            self.assertIsInstance(template_id, str)\n            self.assertGreater(len(template_id), 0)\n            \n            print(f\"Successfully created minimal alarm content template: \"\n                  f\"{template_name} with ID: {template_id}\")\n            \n        except Exception as exc:\n            self.fail(f\"Failed to create minimal alarm content template: {str(exc)}\")\n\n    def test_create_alarm_content_template_validation(self):\n        \"\"\"Test that validation fails when required fields are missing\"\"\"\n        \n        # Test with missing template name\n        request = CreateAlarmContentTemplateRequest(\n            alarm_content_template_name=None\n        )\n        \n        # Check validation\n        self.assertFalse(request.check_validation())\n        \n        # Test with empty template name\n        request = CreateAlarmContentTemplateRequest(\n            alarm_content_template_name=\"\"\n        )\n        \n        # Check validation\n        self.assertFalse(request.check_validation())\n        \n        # Test with valid template name\n        request = CreateAlarmContentTemplateRequest(\n            alarm_content_template_name=\"valid-template-name\"\n        )\n        \n        # Check validation\n        self.assertTrue(request.check_validation())\n\n\nif __name__ == '__main__':\n    unittest.main()"
  },
  {
    "path": "volcengine/tls/test/create_alarm_webhook_integration_test.py",
    "content": "# coding=utf-8\n\"\"\"Unit tests for CreateAlarmWebhookIntegration request and TLSService integration (without real backend).\n\n本文件仅关注 CreateAlarmWebhookIntegration 请求体结构与 TLSService 调用参数，不依赖真实后端环境。\n\"\"\"\nimport os\nimport unittest\nfrom unittest.mock import Mock, patch\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import CreateAlarmWebhookIntegrationRequest, GeneralWebhookHeaderKV\nfrom volcengine.tls.tls_responses import CreateAlarmWebhookIntegrationResponse\n\n\nclass TestCreateAlarmWebhookIntegration(unittest.TestCase):\n    \"\"\"CreateAlarmWebhookIntegration 单元测试类。\"\"\"\n\n    def setUp(self):\n        \"\"\"使用本地默认配置构造 TLSService，避免依赖真实环境变量和后端。\"\"\"\n        self.endpoint = os.environ.get(\n            \"VOLCENGINE_ENDPOINT\", \"https://tls-cn-beijing.ivolces.com\"\n        )\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"test-ak\")\n        self.access_key_secret = os.environ.get(\n            \"VOLCENGINE_ACCESS_KEY_SECRET\", \"test-sk\"\n        )\n        self.tls_service = TLSService(\n            self.endpoint,\n            self.access_key_id,\n            self.access_key_secret,\n            self.region,\n        )\n\n    def test_request_validation(self):\n        \"\"\"测试请求参数验证逻辑（必填字段与 GeneralWebhook 约束）。\"\"\"\n        # 缺少必填参数\n        request = CreateAlarmWebhookIntegrationRequest(\n            webhook_name=\"\",\n            webhook_type=\"Lark\",\n            webhook_url=\"\",\n        )\n        self.assertFalse(request.check_validation())\n\n        # GeneralWebhook 类型但缺少 method/headers\n        request = CreateAlarmWebhookIntegrationRequest(\n            webhook_name=\"test-webhook\",\n            webhook_type=\"GeneralWebhook\",\n            webhook_url=\"https://example.com/webhook\",\n        )\n        self.assertFalse(request.check_validation())\n\n        # 正确的 Lark 配置（非 GeneralWebhook 类型，仅要求 Name/Type/Url 非空）\n        request = CreateAlarmWebhookIntegrationRequest(\n            webhook_name=\"test-webhook\",\n            webhook_type=\"Lark\",\n            webhook_url=\"https://example.com/webhook\",\n        )\n        self.assertTrue(request.check_validation())\n\n        # 正确的 GeneralWebhook 配置（Type 为 GeneralWebhook 时需要 Method + Headers）\n        headers = [GeneralWebhookHeaderKV(key=\"Content-Type\", value=\"application/json\")]\n        request = CreateAlarmWebhookIntegrationRequest(\n            webhook_name=\"test-webhook\",\n            webhook_type=\"GeneralWebhook\",\n            webhook_url=\"https://example.com/webhook\",\n            webhook_method=\"POST\",\n            webhook_headers=headers,\n        )\n        self.assertTrue(request.check_validation())\n\n    def test_get_api_input_general_type(self):\n        \"\"\"测试非 GeneralWebhook 类型（如 Lark）下顶层键名与字段构造。\"\"\"\n        request = CreateAlarmWebhookIntegrationRequest(\n            webhook_name=\"lark-webhook\",\n            webhook_type=\"Lark\",\n            webhook_url=\"https://example.com/lark\",\n        )\n\n        api_input = request.get_api_input()\n        self.assertEqual(api_input[\"WebhookName\"], \"lark-webhook\")\n        self.assertEqual(api_input[\"WebhookType\"], \"Lark\")\n        self.assertEqual(api_input[\"WebhookUrl\"], \"https://example.com/lark\")\n        # 非 GeneralWebhook 场景下 Method / Headers / Secret 可选，不应强制出现在请求体中\n        self.assertNotIn(\"WebhookMethod\", api_input)\n        self.assertNotIn(\"WebhookHeaders\", api_input)\n        self.assertNotIn(\"WebhookSecret\", api_input)\n\n    def test_get_api_input_general_webhook_type(self):\n        \"\"\"测试 GeneralWebhook 类型下顶层键名与 Headers 序列化。\"\"\"\n        headers = [\n            GeneralWebhookHeaderKV(key=\"Content-Type\", value=\"application/json\"),\n            GeneralWebhookHeaderKV(key=\"Authorization\", value=\"Bearer AUTH_PLACEHOLDER\"),\n        ]\n        request = CreateAlarmWebhookIntegrationRequest(\n            webhook_name=\"custom-webhook\",\n            webhook_type=\"GeneralWebhook\",\n            webhook_url=\"https://example.com/custom\",\n            webhook_method=\"POST\",\n            webhook_headers=headers,\n            webhook_secret=\"example-secret\",\n        )\n\n        api_input = request.get_api_input()\n        self.assertEqual(api_input[\"WebhookName\"], \"custom-webhook\")\n        self.assertEqual(api_input[\"WebhookType\"], \"GeneralWebhook\")\n        self.assertEqual(api_input[\"WebhookUrl\"], \"https://example.com/custom\")\n        self.assertEqual(api_input[\"WebhookMethod\"], \"POST\")\n        self.assertEqual(api_input[\"WebhookSecret\"], \"example-secret\")\n\n        self.assertIn(\"WebhookHeaders\", api_input)\n        self.assertEqual(len(api_input[\"WebhookHeaders\"]), 2)\n        self.assertEqual(\n            api_input[\"WebhookHeaders\"][0],\n            {\"Key\": \"Content-Type\", \"Value\": \"application/json\"},\n        )\n        self.assertEqual(\n            api_input[\"WebhookHeaders\"][1],\n            {\"Key\": \"Authorization\", \"Value\": \"Bearer AUTH_PLACEHOLDER\"},\n        )\n\n    @patch(\"volcengine.tls.TLSService.TLSService._TLSService__request\")\n    def test_create_alarm_webhook_integration_service_call_lark(self, mock_request):\n        \"\"\"测试 TLSService.create_alarm_webhook_integration 在 Lark 类型下的调用路径与请求体。\"\"\"\n        request = CreateAlarmWebhookIntegrationRequest(\n            webhook_name=\"lark-webhook\",\n            webhook_type=\"Lark\",\n            webhook_url=\"https://example.com/lark\",\n        )\n\n        mock_response = Mock()\n        mock_response.headers = {\n            \"X-Tls-Requestid\": \"test-request-id\",\n            \"Content-Type\": \"application/json\",\n        }\n        mock_response.text = '{\"AlarmWebhookIntegrationId\": \"webhook-123\"}'\n        mock_request.return_value = mock_response\n\n        response = self.tls_service.create_alarm_webhook_integration(request)\n\n        expected_body = request.get_api_input()\n        mock_request.assert_called_once_with(\n            api=\"/CreateAlarmWebhookIntegration\",\n            body=expected_body,\n        )\n        self.assertIsInstance(response, CreateAlarmWebhookIntegrationResponse)\n        self.assertEqual(response.get_alarm_webhook_integration_id(), \"webhook-123\")\n        self.assertEqual(response.get_request_id(), \"test-request-id\")\n\n    @patch(\"volcengine.tls.TLSService.TLSService._TLSService__request\")\n    def test_create_alarm_webhook_integration_service_call_general_webhook(self, mock_request):\n        \"\"\"测试 TLSService.create_alarm_webhook_integration 在 GeneralWebhook 类型下的调用路径与请求体。\"\"\"\n        headers = [GeneralWebhookHeaderKV(key=\"Content-Type\", value=\"application/json\")]\n        request = CreateAlarmWebhookIntegrationRequest(\n            webhook_name=\"custom-webhook\",\n            webhook_type=\"GeneralWebhook\",\n            webhook_url=\"https://example.com/custom\",\n            webhook_method=\"POST\",\n            webhook_headers=headers,\n        )\n\n        mock_response = Mock()\n        mock_response.headers = {\n            \"X-Tls-Requestid\": \"test-request-id\",\n            \"Content-Type\": \"application/json\",\n        }\n        mock_response.text = '{\"AlarmWebhookIntegrationId\": \"webhook-456\"}'\n        mock_request.return_value = mock_response\n\n        response = self.tls_service.create_alarm_webhook_integration(request)\n\n        expected_body = request.get_api_input()\n        mock_request.assert_called_once_with(\n            api=\"/CreateAlarmWebhookIntegration\",\n            body=expected_body,\n        )\n        self.assertIsInstance(response, CreateAlarmWebhookIntegrationResponse)\n        self.assertEqual(response.get_alarm_webhook_integration_id(), \"webhook-456\")\n        self.assertEqual(response.get_request_id(), \"test-request-id\")\n\n\nif __name__ == \"__main__\":  # pragma: no cover\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/delete_alarm_content_template_test.py",
    "content": "import os\nimport unittest\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import DeleteAlarmContentTemplateRequest\nfrom volcengine.tls.tls_responses import DeleteAlarmContentTemplateResponse\n\n\nclass TestDeleteAlarmContentTemplate(unittest.TestCase):\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"\")\n\n    def test_delete_alarm_content_template(self):\n        \"\"\"测试删除告警通知内容模板\"\"\"\n        if not all([self.endpoint, self.region, self.access_key_id, self.access_key_secret]):\n            self.skipTest(\"缺少必要的环境变量\")\n\n        tls_client = TLSService(\n            self.endpoint, self.access_key_id, self.access_key_secret, self.region)\n\n        # 测试删除告警通知内容模板\n        alarm_content_template_id = \"test-template-id\"\n        delete_request = DeleteAlarmContentTemplateRequest(\n            alarm_content_template_id=alarm_content_template_id\n        )\n\n        try:\n            response = tls_client.delete_alarm_content_template(delete_request)\n            # 验证响应类型\n            self.assertIsInstance(response, DeleteAlarmContentTemplateResponse)\n            # 验证请求ID存在\n            self.assertIsNotNone(response.get_request_id())\n            print(f\"DeleteAlarmContentTemplate成功，请求ID: {response.get_request_id()}\")\n        except Exception as e:\n            # 即使API返回错误，也应该包含请求ID\n            print(f\"DeleteAlarmContentTemplate测试完成，响应: {str(e)}\")\n\n    def test_delete_alarm_content_template_validation(self):\n        \"\"\"测试删除告警通知内容模板的参数验证\"\"\"\n        # 测试参数验证\n        delete_request = DeleteAlarmContentTemplateRequest(\n            alarm_content_template_id=None\n        )\n        self.assertFalse(delete_request.check_validation())\n\n        # 测试有效参数\n        delete_request_valid = DeleteAlarmContentTemplateRequest(\n            alarm_content_template_id=\"test-template-id\"\n        )\n        self.assertTrue(delete_request_valid.check_validation())\n\n\nif __name__ == '__main__':\n    unittest.main()"
  },
  {
    "path": "volcengine/tls/test/delete_schedule_sql_task_test.py",
    "content": "import os\nimport unittest\nimport random\nfrom unittest.mock import Mock, patch\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import DeleteScheduleSqlTaskRequest\nfrom volcengine.tls.tls_responses import DeleteScheduleSqlTaskResponse\n\n\nclass TestDeleteScheduleSqlTask(unittest.TestCase):\n    \"\"\"DeleteScheduleSqlTask 功能测试类\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"https://tls-cn-beijing.ivolces.com\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"test-ak\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"test-sk\")\n\n    def test_delete_schedule_sql_task_request_validation(self):\n        \"\"\"测试 DeleteScheduleSqlTaskRequest 参数验证\"\"\"\n        # 测试有效的请求\n        request = DeleteScheduleSqlTaskRequest(task_id=\"test-task-id\")\n        self.assertTrue(request.check_validation())\n\n        # 测试无效的请求\n        request_invalid = DeleteScheduleSqlTaskRequest(task_id=None)\n        self.assertFalse(request_invalid.check_validation())\n\n    def test_delete_schedule_sql_task_request_api_input(self):\n        \"\"\"测试 DeleteScheduleSqlTaskRequest 的 API 输入转换\"\"\"\n        task_id = \"test-schedule-sql-task-123\"\n        request = DeleteScheduleSqlTaskRequest(task_id=task_id)\n\n        api_input = request.get_api_input()\n        self.assertEqual(api_input[\"TaskId\"], task_id)\n\n    @patch('volcengine.tls.TLSService.TLSService._TLSService__request')\n    def test_delete_schedule_sql_task_service_call(self, mock_request):\n        \"\"\"测试 TLSService.delete_schedule_sql_task 方法调用\"\"\"\n        # 设置 mock 响应\n        mock_response = Mock()\n        mock_response.headers = {\n            'X-Tls-Requestid': 'test-request-id',\n            'Content-Type': 'application/json',\n        }\n        mock_response.text = '{}'\n        mock_request.return_value = mock_response\n\n        # 创建 TLS 服务实例\n        tls_service = TLSService(\n            self.endpoint,\n            self.access_key_id,\n            self.access_key_secret,\n            self.region\n        )\n\n        # 创建请求\n        task_id = f\"test-schedule-sql-task-{str(int(__import__('time').time()))}\"\n        request = DeleteScheduleSqlTaskRequest(task_id=task_id)\n\n        # 调用方法\n        response = tls_service.delete_schedule_sql_task(request)\n\n        # 验证响应类型\n        self.assertIsInstance(response, DeleteScheduleSqlTaskResponse)\n\n        # 验证 mock 调用\n        mock_request.assert_called_once()\n        call_args = mock_request.call_args\n        self.assertEqual(call_args[1]['api'], '/DeleteScheduleSqlTask')\n        self.assertEqual(call_args[1]['body']['TaskId'], task_id)\n\n    @patch('volcengine.tls.TLSService.TLSService._TLSService__request')\n    def test_delete_schedule_sql_task_with_invalid_request(self, mock_request):\n        \"\"\"测试使用无效请求调用 delete_schedule_sql_task\"\"\"\n        # 创建 TLS 服务实例\n        tls_service = TLSService(\n            self.endpoint,\n            self.access_key_id,\n            self.access_key_secret,\n            self.region\n        )\n\n        # 创建无效请求（task_id 为 None）\n        invalid_request = DeleteScheduleSqlTaskRequest(task_id=None)\n\n        # 验证抛出异常\n        with self.assertRaises(Exception) as context:\n            tls_service.delete_schedule_sql_task(invalid_request)\n\n        # 验证异常信息\n        self.assertIn(\"InvalidArgument\", str(context.exception))\n\n        # 验证 mock 没有被调用\n        mock_request.assert_not_called()\n\n    def test_delete_schedule_sql_task_integration_pattern(self):\n        \"\"\"测试与 Node.js 示例类似的集成模式\"\"\"\n        # 模拟 Node.js 测试中的随机任务ID生成\n        task_id = f\"test-schedule-sql-task-{str(random.random()).replace('.', '')}\"\n\n        request = DeleteScheduleSqlTaskRequest(task_id=task_id)\n\n        # 验证请求对象创建成功\n        self.assertIsNotNone(request)\n        self.assertEqual(request.task_id, task_id)\n        self.assertTrue(request.check_validation())\n\n\nif __name__ == '__main__':\n    unittest.main()"
  },
  {
    "path": "volcengine/tls/test/describe_alarm_content_templates_test.py",
    "content": "import os\nimport unittest\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import DescribeAlarmContentTemplatesRequest\nfrom volcengine.tls.tls_responses import DescribeAlarmContentTemplatesResponse\nfrom volcengine.tls.data import ContentTemplateInfo\n\n\nclass TestDescribeAlarmContentTemplates(unittest.TestCase):\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"https://tls-cn-beijing.ivolces.com\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"test-ak\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"test-sk\")\n\n    def test_describe_alarm_content_templates_request(self):\n        \"\"\"测试 DescribeAlarmContentTemplatesRequest 的创建和验证\"\"\"\n        request = DescribeAlarmContentTemplatesRequest(\n            alarm_content_template_name=\"test-template\",\n            alarm_content_template_id=\"test-id\",\n            order_field=\"CreateTime\",\n            asc=True,\n            page_number=1,\n            page_size=20\n        )\n        self.assertTrue(request.check_validation())\n\n        # 验证 Asc -> \"ASC\" 的参数映射\n        api_input = request.get_api_input()\n        self.assertIn(\"ASC\", api_input)\n        self.assertNotIn(\"Asc\", api_input)\n        self.assertTrue(api_input[\"ASC\"])\n\n        # 测试空参数\n        empty_request = DescribeAlarmContentTemplatesRequest()\n        self.assertTrue(empty_request.check_validation())\n\n    def test_describe_alarm_content_templates_response_structure(self):\n        \"\"\"测试 DescribeAlarmContentTemplates 响应结构\"\"\"\n        # 这里可以添加响应结构验证逻辑\n        # 基于 Node.js 版本的验证模式\n        # 验证返回的数据包含 AlarmContentTemplates 和 Total 字段\n        pass\n\n    def test_describe_alarm_content_templates_integration(self):\n        \"\"\"测试 DescribeAlarmContentTemplates 的完整调用流程\"\"\"\n        try:\n            tls_service = TLSService(\n                self.endpoint,\n                self.access_key_id,\n                self.access_key_secret,\n                self.region\n            )\n\n            request = DescribeAlarmContentTemplatesRequest(\n                page_number=1,\n                page_size=20\n            )\n            response = tls_service.describe_alarm_content_templates(request)\n\n            # 验证响应不为空\n            self.assertIsNotNone(response)\n\n            # 验证响应类型\n            self.assertIsInstance(response, DescribeAlarmContentTemplatesResponse)\n\n            # 验证响应包含必要的字段\n            templates = response.get_alarm_content_templates()\n            total = response.get_total()\n\n            # 基于 Node.js 版本的验证逻辑\n            # templates 应该是列表\n            self.assertIsInstance(templates, list)\n\n            # total 应该是整数\n            self.assertIsInstance(total, int)\n\n            # 验证模板列表中的每个模板结构\n            for template in templates:\n                self.assertIsInstance(template, ContentTemplateInfo)\n\n                # 验证基本字段\n                self.assertIsInstance(template.is_default, bool)\n                self.assertIsInstance(template.create_time, str)\n                self.assertIsInstance(template.modify_time, str)\n                self.assertIsInstance(template.alarm_content_template_id, str)\n                self.assertIsInstance(template.alarm_content_template_name, str)\n\n                # 验证可选字段（如果存在）\n                if template.sms is not None:\n                    self.assertIsInstance(template.sms.locale, (str, type(None)))\n                    self.assertIsInstance(template.sms.content, (str, type(None)))\n\n                if template.vms is not None:\n                    self.assertIsInstance(template.vms.locale, (str, type(None)))\n                    self.assertIsInstance(template.vms.content, (str, type(None)))\n\n                if template.lark is not None:\n                    self.assertIsInstance(template.lark.title, (str, type(None)))\n                    self.assertIsInstance(template.lark.locale, (str, type(None)))\n                    self.assertIsInstance(template.lark.content, (str, type(None)))\n\n                if template.email is not None:\n                    self.assertIsInstance(template.email.locale, (str, type(None)))\n                    self.assertIsInstance(template.email.content, (str, type(None)))\n                    self.assertIsInstance(template.email.subject, (str, type(None)))\n\n                if template.we_chat is not None:\n                    self.assertIsInstance(template.we_chat.title, (str, type(None)))\n                    self.assertIsInstance(template.we_chat.locale, (str, type(None)))\n                    self.assertIsInstance(template.we_chat.content, (str, type(None)))\n\n                if template.webhook is not None:\n                    self.assertIsInstance(template.webhook.content, (str, type(None)))\n\n                if template.ding_talk is not None:\n                    self.assertIsInstance(template.ding_talk.title, (str, type(None)))\n                    self.assertIsInstance(template.ding_talk.locale, (str, type(None)))\n                    self.assertIsInstance(template.ding_talk.content, (str, type(None)))\n\n        except Exception as e:\n            # 在实际环境中，这里应该根据具体的错误类型进行处理\n            # 如果是认证失败等预期内的错误，可以选择跳过测试\n            self.skipTest(f\"Integration test skipped due to: {str(e)}\")\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/describe_alarm_notify_groups_test.py",
    "content": "# coding=utf-8\n# pylint: disable=no-member\n\nimport unittest\n\nfrom volcengine.tls.data import AlarmNotifyGroupInfo\n\n\nclass TestDescribeAlarmNotifyGroupsData(unittest.TestCase):\n\n    def test_parse_notice_rules_and_receivers(self):\n        \"\"\"验证 DescribeAlarmNotifyGroups 响应中 NoticeRules 和 Receivers 的解析逻辑\"\"\"\n        receiver_payload = {\n            \"ReceiverType\": \"User\",\n            \"ReceiverNames\": [\"user-a\", \"user-b\"],\n            \"ReceiverChannels\": [\"Email\", \"GeneralWebhook\"],\n            \"StartTime\": \"00:00\",\n            \"EndTime\": \"23:59\",\n            \"Webhook\": \"https://example-webhook\",\n            \"GeneralWebhookUrl\": \"https://example.com/hook\",\n            \"GeneralWebhookBody\": \"{\\\"msg\\\":\\\"test\\\"}\",\n            \"AlarmWebhookAtUsers\": [\"user-a\"],\n            \"AlarmWebhookIsAtAll\": False,\n            \"AlarmWebhookAtGroups\": [\"group-1\"],\n            \"GeneralWebhookMethod\": \"POST\",\n            \"GeneralWebhookHeaders\": [\n                {\"Key\": \"X-Test-Header\", \"Value\": \"value\"},\n            ],\n            \"AlarmContentTemplateId\": \"tpl-001\",\n            \"AlarmWebhookIntegrationId\": \"wh-001\",\n            \"AlarmWebhookIntegrationName\": \"integration-name\",\n        }\n\n        response_data = {\n            \"AlarmNotifyGroupName\": \"python-sdk-test-notify-group\",\n            \"AlarmNotifyGroupId\": \"group-id-123\",\n            \"NotifyType\": [\"Trigger\", \"Recovery\"],\n            \"Receivers\": [receiver_payload],\n            \"NoticeRules\": [\n                {\n                    \"HasNext\": False,\n                    \"HasEndNode\": True,\n                    \"RuleNode\": {\n                        \"Type\": \"Condition\",\n                        \"Value\": [\"severity = 'critical'\"],\n                        \"Children\": [],\n                    },\n                    \"ReceiverInfos\": [receiver_payload],\n                }\n            ],\n            \"CreateTime\": \"2025-01-01 00:00:00\",\n            \"ModifyTime\": \"2025-01-01 00:10:00\",\n            \"IamProjectName\": \"default\",\n        }\n\n        info: AlarmNotifyGroupInfo = AlarmNotifyGroupInfo.set_attributes(response_data)\n\n        # 基本字段\n        self.assertEqual(info.get_alarm_notify_group_name(), \"python-sdk-test-notify-group\")\n        self.assertEqual(info.get_alarm_notify_group_id(), \"group-id-123\")\n        self.assertEqual(info.get_iam_project_name(), \"default\")\n\n        # Receivers 解析\n        receivers = info.get_receivers()\n        self.assertEqual(len(receivers), 1)\n        receiver = receivers[0]\n        self.assertEqual(receiver.get_receiver_type(), \"User\")\n        self.assertEqual(receiver.get_receiver_names(), [\"user-a\", \"user-b\"])\n        self.assertEqual(receiver.get_general_webhook_url(), \"https://example.com/hook\")\n        self.assertEqual(receiver.get_alarm_webhook_at_users(), [\"user-a\"])\n        self.assertEqual(receiver.get_alarm_webhook_is_at_all(), False)\n        self.assertEqual(receiver.get_alarm_webhook_at_groups(), [\"group-1\"])\n\n        headers = receiver.get_general_webhook_headers()\n        self.assertEqual(len(headers), 1)\n        self.assertEqual(headers[0].get_key(), \"X-Test-Header\")\n        self.assertEqual(headers[0].get_value(), \"value\")\n\n        # NoticeRules 解析\n        notice_rules = info.get_notice_rules()\n        self.assertEqual(len(notice_rules), 1)\n        rule = notice_rules[0]\n        self.assertFalse(rule.get_has_next())\n        self.assertTrue(rule.get_has_end_node())\n\n        rule_node = rule.get_rule_node()\n        self.assertIsNotNone(rule_node)\n        self.assertEqual(rule_node.get_type(), \"Condition\")\n        self.assertEqual(rule_node.get_value(), [\"severity = 'critical'\"])\n        self.assertEqual(rule_node.get_children(), [])\n\n        rule_receivers = rule.get_receiver_infos()\n        self.assertEqual(len(rule_receivers), 1)\n        self.assertEqual(rule_receivers[0].get_general_webhook_url(), \"https://example.com/hook\")\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/describe_alarm_webhook_integrations_test.py",
    "content": "# coding=utf-8\n\"\"\"Unit tests for DescribeAlarmWebhookIntegrations request and TLSService integration (without real backend).\n\n本文件仅关注 DescribeAlarmWebhookIntegrations 请求参数构造与 TLSService 调用参数，不依赖真实后端环境。\n\"\"\"\nimport os\nimport unittest\nfrom unittest.mock import Mock, patch\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import DescribeAlarmWebhookIntegrationsRequest\nfrom volcengine.tls.tls_responses import DescribeAlarmWebhookIntegrationsResponse\n\n\nclass TestDescribeAlarmWebhookIntegrations(unittest.TestCase):\n    \"\"\"DescribeAlarmWebhookIntegrations 单元测试。\"\"\"\n\n    def setUp(self):\n        self.endpoint = os.environ.get(\n            \"VOLCENGINE_ENDPOINT\", \"https://tls-cn-beijing.ivolces.com\"\n        )\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"test-ak\")\n        self.access_key_secret = os.environ.get(\n            \"VOLCENGINE_ACCESS_KEY_SECRET\", \"test-sk\"\n        )\n        self.tls_service = TLSService(\n            self.endpoint,\n            self.access_key_id,\n            self.access_key_secret,\n            self.region,\n        )\n\n    def test_basic_request_fields_and_validation(self):\n        \"\"\"测试仅分页参数场景下的字段与校验。\"\"\"\n        request = DescribeAlarmWebhookIntegrationsRequest(page_number=1, page_size=20)\n        self.assertIsInstance(request, DescribeAlarmWebhookIntegrationsRequest)\n        self.assertEqual(request.page_number, 1)\n        self.assertEqual(request.page_size, 20)\n        self.assertTrue(request.check_validation())\n\n        api_input = request.get_api_input()\n        self.assertEqual(api_input[\"PageNumber\"], 1)\n        self.assertEqual(api_input[\"PageSize\"], 20)\n        self.assertNotIn(\"WebhookID\", api_input)\n        self.assertNotIn(\"WebhookName\", api_input)\n        self.assertNotIn(\"WebhookType\", api_input)\n\n    def test_request_with_filters_and_pagination(self):\n        \"\"\"测试携带过滤条件与分页参数时的字段构造与校验。\"\"\"\n        request = DescribeAlarmWebhookIntegrationsRequest(\n            webhook_id=\"test-webhook-id\",\n            webhook_name=\"test-webhook-name\",\n            webhook_type=\"general\",\n            page_number=2,\n            page_size=10,\n        )\n\n        self.assertEqual(request.webhook_id, \"test-webhook-id\")\n        self.assertEqual(request.webhook_name, \"test-webhook-name\")\n        self.assertEqual(request.webhook_type, \"general\")\n        self.assertEqual(request.page_number, 2)\n        self.assertEqual(request.page_size, 10)\n        self.assertTrue(request.check_validation())\n\n        api_input = request.get_api_input()\n        self.assertEqual(api_input[\"WebhookID\"], \"test-webhook-id\")\n        self.assertEqual(api_input[\"WebhookName\"], \"test-webhook-name\")\n        self.assertEqual(api_input[\"WebhookType\"], \"general\")\n        self.assertEqual(api_input[\"PageNumber\"], 2)\n        self.assertEqual(api_input[\"PageSize\"], 10)\n\n    def test_request_validation_optional_fields(self):\n        \"\"\"测试所有参数可选场景下的校验逻辑。\"\"\"\n        request = DescribeAlarmWebhookIntegrationsRequest()\n        self.assertTrue(request.check_validation())\n\n        request = DescribeAlarmWebhookIntegrationsRequest(\n            webhook_id=\"\",\n            webhook_name=\"\",\n            webhook_type=\"\",\n        )\n        self.assertTrue(request.check_validation())\n\n    def test_get_api_input_field_mapping(self):\n        \"\"\"测试 get_api_input 字段命名与键名映射。\"\"\"\n        request = DescribeAlarmWebhookIntegrationsRequest(\n            webhook_id=\"test-id\",\n            webhook_name=\"test-name\",\n            webhook_type=\"test-type\",\n            page_number=1,\n            page_size=20,\n        )\n\n        api_input = request.get_api_input()\n        self.assertEqual(api_input[\"WebhookID\"], \"test-id\")\n        self.assertEqual(api_input[\"WebhookName\"], \"test-name\")\n        self.assertEqual(api_input[\"WebhookType\"], \"test-type\")\n        self.assertEqual(api_input[\"PageNumber\"], 1)\n        self.assertEqual(api_input[\"PageSize\"], 20)\n\n    @patch(\"volcengine.tls.TLSService.TLSService._TLSService__request\")\n    def test_describe_alarm_webhook_integrations_service_call_basic(self, mock_request):\n        \"\"\"测试 TLSService.describe_alarm_webhook_integrations 基础分页场景的调用路径与 params。\"\"\"\n        request = DescribeAlarmWebhookIntegrationsRequest(page_number=1, page_size=20)\n\n        mock_response = Mock()\n        mock_response.headers = {\n            \"X-Tls-Requestid\": \"test-request-id\",\n            \"Content-Type\": \"application/json\",\n        }\n        mock_response.text = '{\"Total\": 0, \"WebhookIntegrations\": []}'\n        mock_request.return_value = mock_response\n\n        response = self.tls_service.describe_alarm_webhook_integrations(request)\n\n        expected_params = request.get_api_input()\n        mock_request.assert_called_once_with(\n            api=\"/DescribeAlarmWebhookIntegrations\",\n            params=expected_params,\n        )\n        self.assertIsInstance(response, DescribeAlarmWebhookIntegrationsResponse)\n        self.assertEqual(response.get_total(), 0)\n        self.assertEqual(response.get_webhook_integrations(), [])\n        self.assertEqual(response.get_request_id(), \"test-request-id\")\n\n    @patch(\"volcengine.tls.TLSService.TLSService._TLSService__request\")\n    def test_describe_alarm_webhook_integrations_service_call_with_filters(self, mock_request):\n        \"\"\"测试 TLSService.describe_alarm_webhook_integrations 携带过滤条件与分页参数时的调用。\"\"\"\n        request = DescribeAlarmWebhookIntegrationsRequest(\n            webhook_id=\"test-id\",\n            webhook_name=\"test-name\",\n            webhook_type=\"custom\",\n            page_number=3,\n            page_size=50,\n        )\n\n        mock_response = Mock()\n        mock_response.headers = {\n            \"X-Tls-Requestid\": \"test-request-id\",\n            \"Content-Type\": \"application/json\",\n        }\n        mock_response.text = '{\"Total\": 1, \"WebhookIntegrations\": []}'\n        mock_request.return_value = mock_response\n\n        response = self.tls_service.describe_alarm_webhook_integrations(request)\n\n        expected_params = request.get_api_input()\n        mock_request.assert_called_once_with(\n            api=\"/DescribeAlarmWebhookIntegrations\",\n            params=expected_params,\n        )\n        self.assertIsInstance(response, DescribeAlarmWebhookIntegrationsResponse)\n        self.assertEqual(response.get_total(), 1)\n        self.assertEqual(response.get_request_id(), \"test-request-id\")\n\n\nif __name__ == \"__main__\":  # pragma: no cover\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/describe_etl_task_test.py",
    "content": "import os\nimport unittest\nfrom unittest.mock import Mock, patch\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import DescribeETLTaskRequest\nfrom volcengine.tls.tls_responses import DescribeETLTaskResponse\n\n\nclass TestDescribeETLTask(unittest.TestCase):\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"https://tls-cn-beijing.ivolces.com\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"test-ak\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"test-sk\")\n\n    def test_describe_etl_task_request_validation(self):\n        \"\"\"测试 DescribeETLTaskRequest 参数验证\"\"\"\n        # 测试正常情况\n        request = DescribeETLTaskRequest(task_id=\"test-task-id\")\n        self.assertTrue(request.check_validation())\n\n        # 测试 task_id 为 None 的情况\n        request = DescribeETLTaskRequest(task_id=None)\n        self.assertFalse(request.check_validation())\n\n    @patch('volcengine.tls.TLSService.TLSService._TLSService__request')\n    def test_describe_etl_task_success(self, mock_request):\n        \"\"\"测试 DescribeETLTask 成功场景\"\"\"\n        # 模拟响应数据\n        mock_response = Mock()\n        mock_response.headers = {'X-Tls-Requestid': 'test-request-id', 'Content-Type': 'application/json'}\n        mock_response.text = '''{\n            \"CreateTime\": \"2023-12-01T12:00:00Z\",\n            \"DSLType\": \"NORMAL\",\n            \"Description\": \"Test ETL Task\",\n            \"ETLStatus\": \"RUNNING\",\n            \"Enable\": true,\n            \"FromTime\": 1701432000,\n            \"LastEnableTime\": \"2023-12-01T12:00:00Z\",\n            \"ModifyTime\": \"2023-12-01T12:00:00Z\",\n            \"Name\": \"test-etl-task\",\n            \"ProjectId\": \"test-project-id\",\n            \"ProjectName\": \"test-project\",\n            \"Script\": \"test script content\",\n            \"SourceTopicId\": \"test-source-topic-id\",\n            \"SourceTopicName\": \"test-source-topic\",\n            \"TargetResources\": [\n                {\n                    \"Alias\": \"target1\",\n                    \"TopicId\": \"test-target-topic-id\",\n                    \"ProjectId\": \"test-target-project-id\",\n                    \"ProjectName\": \"test-target-project\",\n                    \"Region\": \"cn-beijing\",\n                    \"TopicName\": \"test-target-topic\",\n                    \"RoleTrn\": \"test-role-trn\"\n                }\n            ],\n            \"TaskId\": \"test-task-id\",\n            \"TaskType\": \"Resident\",\n            \"ToTime\": 1701518400\n        }'''\n\n        mock_request.return_value = mock_response\n\n        # 创建 TLS 服务实例\n        tls_service = TLSService(\n            self.endpoint,\n            self.access_key_id,\n            self.access_key_secret,\n            self.region\n        )\n\n        # 创建请求\n        request = DescribeETLTaskRequest(task_id=\"test-task-id\")\n\n        # 执行请求\n        response = tls_service.describe_etl_task(request)\n\n        # 验证响应\n        self.assertIsInstance(response, DescribeETLTaskResponse)\n        self.assertEqual(response.get_create_time(), \"2023-12-01T12:00:00Z\")\n        self.assertEqual(response.get_dsl_type(), \"NORMAL\")\n        self.assertEqual(response.get_description(), \"Test ETL Task\")\n        self.assertEqual(response.get_etl_status(), \"RUNNING\")\n        self.assertEqual(response.get_enable(), True)\n        self.assertEqual(response.get_from_time(), 1701432000)\n        self.assertEqual(response.get_last_enable_time(), \"2023-12-01T12:00:00Z\")\n        self.assertEqual(response.get_modify_time(), \"2023-12-01T12:00:00Z\")\n        self.assertEqual(response.get_name(), \"test-etl-task\")\n        self.assertEqual(response.get_project_id(), \"test-project-id\")\n        self.assertEqual(response.get_project_name(), \"test-project\")\n        self.assertEqual(response.get_script(), \"test script content\")\n        self.assertEqual(response.get_source_topic_id(), \"test-source-topic-id\")\n        self.assertEqual(response.get_source_topic_name(), \"test-source-topic\")\n        self.assertEqual(response.get_task_id(), \"test-task-id\")\n        self.assertEqual(response.get_task_type(), \"Resident\")\n        self.assertEqual(response.get_to_time(), 1701518400)\n\n        # 验证目标资源\n        target_resources = response.get_target_resources()\n        self.assertEqual(len(target_resources), 1)\n        target_resource = target_resources[0]\n        self.assertEqual(target_resource.get_alias(), \"target1\")\n        self.assertEqual(target_resource.get_topic_id(), \"test-target-topic-id\")\n        self.assertEqual(target_resource.get_project_id(), \"test-target-project-id\")\n        self.assertEqual(target_resource.get_project_name(), \"test-target-project\")\n        self.assertEqual(target_resource.get_region(), \"cn-beijing\")\n        self.assertEqual(target_resource.get_topic_name(), \"test-target-topic\")\n        self.assertEqual(target_resource.get_role_trn(), \"test-role-trn\")\n\n    def test_describe_etl_task_invalid_request(self):\n        \"\"\"测试 DescribeETLTask 无效请求\"\"\"\n        tls_service = TLSService(\n            self.endpoint,\n            self.access_key_id,\n            self.access_key_secret,\n            self.region\n        )\n\n        # 创建无效请求（task_id 为 None）\n        request = DescribeETLTaskRequest(task_id=None)\n\n        # 验证请求无效\n        self.assertFalse(request.check_validation())\n\n        # 执行请求应该抛出异常\n        with self.assertRaises(Exception) as context:\n            tls_service.describe_etl_task(request)\n\n        self.assertIn(\"InvalidArgument\", str(context.exception))\n\n    @patch('volcengine.tls.TLSService.TLSService._TLSService__request')\n    def test_describe_etl_task_empty_target_resources(self, mock_request):\n        \"\"\"测试 DescribeETLTask 空目标资源场景\"\"\"\n        # 模拟响应数据（空目标资源）\n        mock_response = Mock()\n        mock_response.headers = {'X-Tls-Requestid': 'test-request-id', 'Content-Type': 'application/json'}\n        mock_response.text = '''{\n            \"CreateTime\": \"2023-12-01T12:00:00Z\",\n            \"DSLType\": \"NORMAL\",\n            \"Description\": \"Test ETL Task\",\n            \"ETLStatus\": \"RUNNING\",\n            \"Enable\": true,\n            \"FromTime\": 1701432000,\n            \"LastEnableTime\": \"2023-12-01T12:00:00Z\",\n            \"ModifyTime\": \"2023-12-01T12:00:00Z\",\n            \"Name\": \"test-etl-task\",\n            \"ProjectId\": \"test-project-id\",\n            \"ProjectName\": \"test-project\",\n            \"Script\": \"test script content\",\n            \"SourceTopicId\": \"test-source-topic-id\",\n            \"SourceTopicName\": \"test-source-topic\",\n            \"TargetResources\": [],\n            \"TaskId\": \"test-task-id\",\n            \"TaskType\": \"Resident\",\n            \"ToTime\": 1701518400\n        }'''\n\n        mock_request.return_value = mock_response\n\n        # 创建 TLS 服务实例\n        tls_service = TLSService(\n            self.endpoint,\n            self.access_key_id,\n            self.access_key_secret,\n            self.region\n        )\n\n        # 创建请求\n        request = DescribeETLTaskRequest(task_id=\"test-task-id\")\n\n        # 执行请求\n        response = tls_service.describe_etl_task(request)\n\n        # 验证响应\n        self.assertIsInstance(response, DescribeETLTaskResponse)\n        target_resources = response.get_target_resources()\n        self.assertEqual(len(target_resources), 0)\n\n\nif __name__ == '__main__':\n    unittest.main()"
  },
  {
    "path": "volcengine/tls/test/describe_import_task_test.py",
    "content": "# coding=utf-8\n\"\"\"Unit tests for DescribeImportTask API\"\"\"\nimport os\nimport unittest\nimport random\nimport string\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import DescribeImportTaskRequest\nfrom volcengine.tls.tls_responses import DescribeImportTaskResponse\n\n\nclass TestDescribeImportTask(unittest.TestCase):\n    \"\"\"Test cases for DescribeImportTask API\"\"\"\n\n    def setUp(self):\n        \"\"\"Set up test environment\"\"\"\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"https://tls-cn-beijing.ivolces.com\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"\")\n\n        if not self.access_key_id or not self.access_key_secret:\n            self.skipTest(\"Access key not configured\")\n\n        self.tls_service = TLSService(\n            self.endpoint,\n            self.access_key_id,\n            self.access_key_secret,\n            self.region\n        )\n\n    def generate_random_task_id(self):\n        \"\"\"Generate a random task ID for testing\"\"\"\n        return f\"test-import-task-{''.join(random.choices(string.digits, k=10))}\"\n\n    def test_describe_import_task_request_validation(self):\n        \"\"\"Test DescribeImportTaskRequest parameter validation\"\"\"\n        # Test with valid task_id\n        request = DescribeImportTaskRequest(task_id=\"test-task-id\")\n        api_input = request.get_api_input()\n        self.assertEqual(api_input[\"TaskId\"], \"test-task-id\")\n\n        # Test with None task_id (should still work as it's not validated)\n        request_none = DescribeImportTaskRequest(task_id=None)\n        api_input_none = request_none.get_api_input()\n        self.assertIsNone(api_input_none.get(\"TaskId\"))\n\n    def test_describe_import_task_api_call(self):\n        \"\"\"Test DescribeImportTask API call with a non-existent task\"\"\"\n        task_id = self.generate_random_task_id()\n\n        request = DescribeImportTaskRequest(task_id=task_id)\n\n        try:\n            response = self.tls_service.describe_import_task(request)\n\n            # Verify response type\n            self.assertIsInstance(response, DescribeImportTaskResponse)\n\n            # Verify response has required fields\n            self.assertIsNotNone(response.get_headers())\n            self.assertIsNotNone(response.request_id)\n\n            # The task might not exist, but the API should be callable\n            # and return a valid response structure\n            # Task info might be None if task doesn't exist, which is expected\n\n        except Exception as e:\n            # The API should be callable even if the task doesn't exist\n            # The error should be about task not found, not about API structure\n            error_message = str(e).lower()\n            self.assertTrue(\n                any(keyword in error_message for keyword in [\"not found\", \"invalid\", \"error\"]),\n                f\"Unexpected error type: {error_message}\"\n            )\n\n    def test_describe_import_task_response_structure(self):\n        \"\"\"Test the response structure of DescribeImportTask\"\"\"\n        task_id = self.generate_random_task_id()\n        request = DescribeImportTaskRequest(task_id=task_id)\n\n        try:\n            response = self.tls_service.describe_import_task(request)\n\n            # Test response headers\n            headers = response.get_headers()\n            self.assertIsInstance(headers, dict)\n            self.assertIn(\"X-Tls-Requestid\", headers)\n\n            # Test task info getter\n            task_info = response.get_task_info()\n            # Task info can be None if task doesn't exist\n            if task_info is not None:\n                self.assertTrue(hasattr(task_info, 'task_id'))\n                self.assertTrue(hasattr(task_info, 'task_name'))\n                self.assertTrue(hasattr(task_info, 'status'))\n\n        except Exception:\n            # If task doesn't exist, that's acceptable for this test\n            # We're mainly testing the response structure\n            pass\n\n    def test_describe_import_task_with_empty_task_id(self):\n        \"\"\"Test DescribeImportTask with empty task ID\"\"\"\n        request = DescribeImportTaskRequest(task_id=\"\")\n\n        try:\n            # Empty task ID should either return an error or empty response\n            # Both are acceptable behaviors\n            self.tls_service.describe_import_task(request)\n\n        except Exception as e:\n            # Expected behavior - empty task ID should cause an error\n            self.assertTrue(len(str(e)) > 0)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/describe_import_tasks_test.py",
    "content": "# coding=utf-8\n\"\"\"Unit tests for DescribeImportTasks functionality\"\"\"\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport json\nimport unittest\nfrom unittest.mock import Mock, patch\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import DescribeImportTasksRequest\nfrom volcengine.tls.tls_responses import DescribeImportTasksResponse\n\n\nclass TestDescribeImportTasks(unittest.TestCase):\n    \"\"\"Test cases for DescribeImportTasks functionality\"\"\"\n\n    def setUp(self):\n        \"\"\"Set up test fixtures\"\"\"\n        self.endpoint = \"https://tls-cn-beijing.ivolces.com\"\n        self.region = \"cn-beijing\"\n        self.access_key_id = \"test-ak\"\n        self.access_key_secret = \"test-sk\"\n        self.tls_service = TLSService(\n            self.endpoint,\n            self.access_key_id,\n            self.access_key_secret,\n            self.region\n        )\n\n    def test_describe_import_tasks_request_initialization(self):\n        \"\"\"Test DescribeImportTasksRequest initialization with all parameters\"\"\"\n        request = DescribeImportTasksRequest(\n            task_id=\"test-task-id\",\n            task_name=\"test-task-name\",\n            project_id=\"test-project-id\",\n            project_name=\"test-project-name\",\n            topic_id=\"test-topic-id\",\n            topic_name=\"test-topic-name\",\n            page_number=2,\n            page_size=50,\n            source_type=\"tos\",\n            status=1\n        )\n\n        self.assertEqual(request.task_id, \"test-task-id\")\n        self.assertEqual(request.task_name, \"test-task-name\")\n        self.assertEqual(request.project_id, \"test-project-id\")\n        self.assertEqual(request.project_name, \"test-project-name\")\n        self.assertEqual(request.topic_id, \"test-topic-id\")\n        self.assertEqual(request.topic_name, \"test-topic-name\")\n        self.assertEqual(request.page_number, 2)\n        self.assertEqual(request.page_size, 50)\n        self.assertEqual(request.source_type, \"tos\")\n        self.assertEqual(request.status, 1)\n\n    def test_describe_import_tasks_request_default_values(self):\n        \"\"\"Test DescribeImportTasksRequest default values\"\"\"\n        request = DescribeImportTasksRequest()\n\n        self.assertIsNone(request.task_id)\n        self.assertIsNone(request.task_name)\n        self.assertIsNone(request.project_id)\n        self.assertIsNone(request.project_name)\n        self.assertIsNone(request.topic_id)\n        self.assertIsNone(request.topic_name)\n        self.assertEqual(request.page_number, 1)\n        self.assertEqual(request.page_size, 20)\n        self.assertIsNone(request.source_type)\n        self.assertIsNone(request.status)\n\n    def test_describe_import_tasks_request_get_api_input(self):\n        \"\"\"Test DescribeImportTasksRequest get_api_input method\"\"\"\n        request = DescribeImportTasksRequest(\n            task_id=\"test-task-id\",\n            task_name=\"test-task-name\",\n            project_id=\"test-project-id\",\n            topic_id=\"test-topic-id\",\n            page_number=1,\n            page_size=10\n        )\n\n        api_input = request.get_api_input()\n\n        self.assertEqual(api_input[\"TaskId\"], \"test-task-id\")\n        self.assertEqual(api_input[\"TaskName\"], \"test-task-name\")\n        self.assertEqual(api_input[\"ProjectId\"], \"test-project-id\")\n        self.assertEqual(api_input[\"TopicId\"], \"test-topic-id\")\n        self.assertEqual(api_input[\"PageNumber\"], 1)\n        self.assertEqual(api_input[\"PageSize\"], 10)\n\n    @patch('volcengine.tls.TLSService.TLSService._TLSService__request')\n    def test_describe_import_tasks_success(self, mock_request):\n        \"\"\"Test successful describe_import_tasks call\"\"\"\n        # Mock response\n        mock_response = Mock()\n        mock_response.status_code = 200\n        mock_response.text = json.dumps({\n            \"Total\": 2,\n            \"TaskInfo\": [\n                {\n                    \"TaskId\": \"task-1\",\n                    \"TaskName\": \"import-task-1\",\n                    \"TopicId\": \"topic-1\",\n                    \"TopicName\": \"topic-name-1\",\n                    \"ProjectId\": \"project-1\",\n                    \"ProjectName\": \"project-name-1\",\n                    \"Status\": 1,\n                    \"CreateTime\": \"2023-12-01T10:00:00Z\",\n                    \"ModifyTime\": \"2023-12-01T10:30:00Z\",\n                    \"SourceType\": \"tos\",\n                    \"Description\": \"Test import task\"\n                },\n                {\n                    \"TaskId\": \"task-2\",\n                    \"TaskName\": \"import-task-2\",\n                    \"TopicId\": \"topic-2\",\n                    \"TopicName\": \"topic-name-2\",\n                    \"ProjectId\": \"project-2\",\n                    \"ProjectName\": \"project-name-2\",\n                    \"Status\": 0,\n                    \"CreateTime\": \"2023-12-01T11:00:00Z\",\n                    \"ModifyTime\": \"2023-12-01T11:30:00Z\",\n                    \"SourceType\": \"kafka\",\n                    \"Description\": \"Another test import task\"\n                }\n            ]\n        })\n        mock_response.headers = {\n            \"X-Tls-Requestid\": \"test-request-id\",\n            \"Content-Type\": \"application/json\"\n        }\n        mock_request.return_value = mock_response\n\n        # Create request\n        request = DescribeImportTasksRequest(\n            project_id=\"test-project\",\n            page_number=1,\n            page_size=10\n        )\n\n        # Call the method\n        response = self.tls_service.describe_import_tasks(request)\n\n        # Verify the response\n        self.assertIsInstance(response, DescribeImportTasksResponse)\n        self.assertEqual(response.get_total(), 2)\n        self.assertEqual(len(response.get_task_info()), 2)\n\n        # Verify first task\n        first_task = response.get_task_info()[0]\n        self.assertEqual(first_task.task_id, \"task-1\")\n        self.assertEqual(first_task.task_name, \"import-task-1\")\n        self.assertEqual(first_task.status, 1)\n\n        # Verify second task\n        second_task = response.get_task_info()[1]\n        self.assertEqual(second_task.task_id, \"task-2\")\n        self.assertEqual(second_task.task_name, \"import-task-2\")\n        self.assertEqual(second_task.status, 0)\n\n    @patch('volcengine.tls.TLSService.TLSService._TLSService__request')\n    def test_describe_import_tasks_empty_result(self, mock_request):\n        \"\"\"Test describe_import_tasks with empty result\"\"\"\n        # Mock empty response\n        mock_response = Mock()\n        mock_response.status_code = 200\n        mock_response.text = json.dumps({\n            \"Total\": 0,\n            \"TaskInfo\": []\n        })\n        mock_response.headers = {\n            \"X-Tls-Requestid\": \"test-request-id\",\n            \"Content-Type\": \"application/json\"\n        }\n        mock_request.return_value = mock_response\n\n        # Create request\n        request = DescribeImportTasksRequest(\n            project_id=\"empty-project\"\n        )\n\n        # Call the method\n        response = self.tls_service.describe_import_tasks(request)\n\n        # Verify the response\n        self.assertEqual(response.get_total(), 0)\n        self.assertEqual(len(response.get_task_info()), 0)\n\n    @patch('volcengine.tls.TLSService.TLSService._TLSService__request')\n    def test_describe_import_tasks_with_filters(self, mock_request):\n        \"\"\"Test describe_import_tasks with various filters\"\"\"\n        # Mock response\n        mock_response = Mock()\n        mock_response.status_code = 200\n        mock_response.text = json.dumps({\n            \"Total\": 1,\n            \"TaskInfo\": [\n                {\n                    \"TaskId\": \"filtered-task\",\n                    \"TaskName\": \"filtered-task-name\",\n                    \"TopicId\": \"filtered-topic\",\n                    \"TopicName\": \"filtered-topic-name\",\n                    \"ProjectId\": \"filtered-project\",\n                    \"ProjectName\": \"filtered-project-name\",\n                    \"Status\": 1,\n                    \"CreateTime\": \"2023-12-01T10:00:00Z\",\n                    \"ModifyTime\": \"2023-12-01T10:30:00Z\",\n                    \"SourceType\": \"tos\"\n                }\n            ]\n        })\n        mock_response.headers = {\n            \"X-Tls-Requestid\": \"test-request-id\",\n            \"Content-Type\": \"application/json\"\n        }\n        mock_request.return_value = mock_response\n\n        # Create request with multiple filters\n        request = DescribeImportTasksRequest(\n            task_id=\"filtered-task\",\n            task_name=\"filtered-task-name\",\n            topic_id=\"filtered-topic\",\n            project_name=\"filtered-project-name\",\n            source_type=\"tos\",\n            status=1,\n            page_number=1,\n            page_size=20\n        )\n\n        # Call the method\n        response = self.tls_service.describe_import_tasks(request)\n\n        # Verify the request was called\n        self.assertTrue(mock_request.called)\n\n        # Verify response\n        self.assertEqual(response.get_total(), 1)\n        self.assertEqual(len(response.get_task_info()), 1)\n\n        task = response.get_task_info()[0]\n        self.assertEqual(task.task_id, \"filtered-task\")\n        self.assertEqual(task.task_name, \"filtered-task-name\")\n\n    def test_describe_import_tasks_request_validation(self):\n        \"\"\"Test that request validation works correctly\"\"\"\n        # DescribeImportTasksRequest does not have check_validation method\n        # This test verifies that the request can be created without validation errors\n        request = DescribeImportTasksRequest()\n\n        # Should be able to create request without required parameters\n        self.assertIsNotNone(request)\n\n        # All parameters should be optional, but default values will be included\n        api_input = request.get_api_input()\n        # The request will include default values for page_number and page_size\n        self.assertIn('PageNumber', api_input)\n        self.assertIn('PageSize', api_input)\n        self.assertEqual(api_input['PageNumber'], 1)\n        self.assertEqual(api_input['PageSize'], 20)\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/describe_rule_test.py",
    "content": "\"\"\"Unit tests for DescribeRuleResponse and RuleInfo pause field.\"\"\"\n# pylint: disable=no-member\n\nimport json\nimport unittest\n\nfrom volcengine.tls.const import (\n    X_TLS_REQUEST_ID,\n    CONTENT_TYPE,\n    PROJECT_ID,\n    PROJECT_NAME,\n    TOPIC_ID,\n    TOPIC_NAME,\n    RULE_INFO,\n    HOST_GROUP_INFOS,\n    PAUSE,\n)\nfrom volcengine.tls.tls_responses import DescribeRuleResponse\nfrom volcengine.tls.data import RuleInfo\n\n\nclass MockResponse:\n    \"\"\"Simple mock of requests.Response used by TLSResponse.\"\"\"\n\n    def __init__(self, json_body):\n        self.headers = {\n            X_TLS_REQUEST_ID: \"test-request-id\",\n            CONTENT_TYPE: \"application/json\",\n        }\n        self.text = json.dumps(json_body)\n        self.content = self.text.encode(\"utf-8\")\n\n\nclass TestDescribeRule(unittest.TestCase):\n    \"\"\"Tests for DescribeRuleResponse mapping Pause field into RuleInfo.\"\"\"\n\n    def test_describe_rule_response_includes_pause_field(self):\n        \"\"\"Verify that Pause field is parsed into RuleInfo.get_pause().\"\"\"\n        rule_info_body = {\n            # Only Pause field is required for this test; other fields are optional.\n            PAUSE: 1,\n        }\n\n        response_body = {\n            PROJECT_ID: \"project-id\",\n            PROJECT_NAME: \"project-name\",\n            TOPIC_ID: \"topic-id\",\n            TOPIC_NAME: \"topic-name\",\n            RULE_INFO: rule_info_body,\n            HOST_GROUP_INFOS: [],\n        }\n\n        response = DescribeRuleResponse(MockResponse(response_body))\n        rule_info: RuleInfo = response.get_rule_info()\n\n        self.assertEqual(1, rule_info.get_pause())\n\n\nif __name__ == \"__main__\":  # pragma: no cover\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/describe_schedule_sql_task_test.py",
    "content": "import unittest\n# pylint: disable=no-member\nfrom unittest.mock import Mock, patch\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import DescribeScheduleSqlTaskRequest\nfrom volcengine.tls.tls_responses import DescribeScheduleSqlTaskResponse\nfrom volcengine.tls.data import ScheduleSqlTaskInfo, RequestCycleInfo\n\n\nclass TestDescribeScheduleSqlTask(unittest.TestCase):\n\n    def setUp(self):\n        self.mock_response = Mock()\n        self.mock_response.headers = {\n            'X-Tls-Requestid': 'test-request-id',\n            'Content-Type': 'application/json'\n        }\n        self.mock_response.text = '''{\n            \"TaskId\": \"f3e901c3-b17f-42fd-aa8c-dc91a6c7****\",\n            \"TaskName\": \"test-schedule-sql-task\",\n            \"Description\": \"Test schedule SQL task\",\n            \"SourceProjectID\": \"source-project-id\",\n            \"SourceProjectName\": \"source-project-name\",\n            \"SourceTopicID\": \"source-topic-id\",\n            \"SourceTopicName\": \"source-topic-name\",\n            \"DestRegion\": \"cn-beijing\",\n            \"DestProjectID\": \"dest-project-id\",\n            \"DestTopicID\": \"dest-topic-id\",\n            \"DestTopicName\": \"dest-topic-name\",\n            \"Status\": 1,\n            \"ProcessStartTime\": 1640995200,\n            \"ProcessEndTime\": 1672531200,\n            \"ProcessSqlDelay\": 300,\n            \"ProcessTimeWindow\": \"[1640995200, 1672531200]\",\n            \"Query\": \"SELECT * FROM log WHERE status = 'error'\",\n            \"RequestCycle\": {\n                \"Time\": 60,\n                \"Type\": \"Period\",\n                \"CronTab\": null,\n                \"CronTimeZone\": null\n            },\n            \"CreateTimeStamp\": 1640995200,\n            \"ModifyTimeStamp\": 1640995200\n        }'''\n\n    def test_describe_schedule_sql_task_request_validation(self):\n        \"\"\"测试 DescribeScheduleSqlTaskRequest 参数验证\"\"\"\n        # 有效请求\n        request = DescribeScheduleSqlTaskRequest(task_id=\"test-task-id\")\n        self.assertTrue(request.check_validation())\n        \n        # 无效请求 - 缺少 task_id\n        request = DescribeScheduleSqlTaskRequest(task_id=None)\n        self.assertFalse(request.check_validation())\n\n    def test_describe_schedule_sql_task_request_api_input(self):\n        \"\"\"测试 DescribeScheduleSqlTaskRequest 的 API 输入转换\"\"\"\n        request = DescribeScheduleSqlTaskRequest(task_id=\"test-task-id\")\n        api_input = request.get_api_input()\n        \n        self.assertEqual(api_input[\"TaskId\"], \"test-task-id\")\n\n    def test_describe_schedule_sql_task_response_parsing(self):\n        \"\"\"测试 DescribeScheduleSqlTaskResponse 响应解析\"\"\"\n        self.mock_response.status_code = 200\n        \n        response = DescribeScheduleSqlTaskResponse(self.mock_response)\n        \n        # 验证基础响应字段\n        self.assertEqual(response.get_request_id(), \"test-request-id\")\n        \n        # 验证调度SQL任务信息\n        task_info: ScheduleSqlTaskInfo = response.get_schedule_sql_task_info()\n        self.assertIsInstance(task_info, ScheduleSqlTaskInfo)\n        \n        # 验证任务基本信息\n        self.assertEqual(task_info.task_id, \"f3e901c3-b17f-42fd-aa8c-dc91a6c7****\")\n        self.assertEqual(task_info.task_name, \"test-schedule-sql-task\")\n        self.assertEqual(task_info.description, \"Test schedule SQL task\")\n        \n        # 验证源项目信息\n        self.assertEqual(task_info.source_project_id, \"source-project-id\")\n        self.assertEqual(task_info.source_project_name, \"source-project-name\")\n        self.assertEqual(task_info.source_topic_id, \"source-topic-id\")\n        self.assertEqual(task_info.source_topic_name, \"source-topic-name\")\n        \n        # 验证目标项目信息\n        self.assertEqual(task_info.dest_region, \"cn-beijing\")\n        self.assertEqual(task_info.dest_project_id, \"dest-project-id\")\n        self.assertEqual(task_info.dest_topic_id, \"dest-topic-id\")\n        self.assertEqual(task_info.dest_topic_name, \"dest-topic-name\")\n        \n        # 验证处理配置\n        self.assertEqual(task_info.status, 1)\n        self.assertEqual(task_info.process_start_time, 1640995200)\n        self.assertEqual(task_info.process_end_time, 1672531200)\n        self.assertEqual(task_info.process_sql_delay, 300)\n        self.assertEqual(task_info.process_time_window, \"[1640995200, 1672531200]\")\n        self.assertEqual(task_info.query, \"SELECT * FROM log WHERE status = 'error'\")\n        \n        # 验证调度周期\n        self.assertIsInstance(task_info.request_cycle, RequestCycleInfo)\n        self.assertEqual(task_info.request_cycle.time, 60)\n        self.assertEqual(task_info.request_cycle.type, \"Period\")\n        self.assertIsNone(task_info.request_cycle.cron_tab)\n        self.assertIsNone(task_info.request_cycle.cron_time_zone)\n        \n        # 验证时间戳\n        self.assertEqual(task_info.create_time_stamp, 1640995200)\n        self.assertEqual(task_info.modify_time_stamp, 1640995200)\n\n    @patch('volcengine.tls.TLSService.TLSService._TLSService__request')\n    def test_describe_schedule_sql_task_service_call(self, mock_request):\n        \"\"\"测试 TLSService.describe_schedule_sql_task 方法调用\"\"\"\n        # 准备模拟响应\n        self.mock_response.status_code = 200\n        mock_request.return_value = self.mock_response\n        \n        # 创建服务实例\n        service = TLSService(\n            endpoint=\"test-endpoint\",\n            access_key_id=\"test-ak\",\n            access_key_secret=\"test-sk\",\n            region=\"test-region\"\n        )\n        \n        # 创建请求\n        request = DescribeScheduleSqlTaskRequest(task_id=\"test-task-id\")\n        \n        # 调用服务方法\n        response = service.describe_schedule_sql_task(request)\n        \n        # 验证响应类型\n        self.assertIsInstance(response, DescribeScheduleSqlTaskResponse)\n        \n        # 验证请求参数\n        mock_request.assert_called_once()\n        call_args = mock_request.call_args\n        self.assertEqual(call_args[1]['api'], '/DescribeScheduleSqlTask')\n        \n        # 验证响应内容\n        task_info: ScheduleSqlTaskInfo = response.get_schedule_sql_task_info()\n        self.assertEqual(task_info.task_id, \"f3e901c3-b17f-42fd-aa8c-dc91a6c7****\")\n\n    def test_schedule_sql_task_info_with_cron_schedule(self):\n        \"\"\"测试包含 Cron 表达式的调度SQL任务信息\"\"\"\n        mock_response = Mock()\n        mock_response.headers = {\n            'X-Tls-Requestid': 'test-request-id',\n            'Content-Type': 'application/json'\n        }\n        mock_response.text = '''{\n            \"TaskId\": \"cron-task-id\",\n            \"TaskName\": \"cron-schedule-sql-task\",\n            \"RequestCycle\": {\n                \"Time\": 0,\n                \"Type\": \"Cron\",\n                \"CronTab\": \"0 18 * * *\",\n                \"CronTimeZone\": \"Asia/Shanghai\"\n            },\n            \"CreateTimeStamp\": 1640995200,\n            \"ModifyTimeStamp\": 1640995200\n        }'''\n        \n        response = DescribeScheduleSqlTaskResponse(mock_response)\n        task_info: ScheduleSqlTaskInfo = response.get_schedule_sql_task_info()\n        \n        # 验证 Cron 调度信息\n        self.assertEqual(task_info.task_id, \"cron-task-id\")\n        self.assertEqual(task_info.task_name, \"cron-schedule-sql-task\")\n        self.assertIsInstance(task_info.request_cycle, RequestCycleInfo)\n        self.assertEqual(task_info.request_cycle.type, \"Cron\")\n        self.assertEqual(task_info.request_cycle.cron_tab, \"0 18 * * *\")\n        self.assertEqual(task_info.request_cycle.cron_time_zone, \"Asia/Shanghai\")\n\n    def test_request_cycle_info_data_class(self):\n        \"\"\"测试 RequestCycleInfo 数据类\"\"\"\n        # 测试 Period 类型\n        period_cycle = RequestCycleInfo(\n            time=60,\n            task_type=\"Period\",\n            cron_tab=None,\n            cron_time_zone=None\n        )\n        \n        self.assertEqual(period_cycle.time, 60)\n        self.assertEqual(period_cycle.type, \"Period\")\n        self.assertIsNone(period_cycle.cron_tab)\n        self.assertIsNone(period_cycle.cron_time_zone)\n        \n        # 测试 Cron 类型\n        cron_cycle = RequestCycleInfo(\n            time=0,\n            task_type=\"Cron\",\n            cron_tab=\"0 18 * * *\",\n            cron_time_zone=\"Asia/Shanghai\"\n        )\n        \n        self.assertEqual(cron_cycle.time, 0)\n        self.assertEqual(cron_cycle.type, \"Cron\")\n        self.assertEqual(cron_cycle.cron_tab, \"0 18 * * *\")\n        self.assertEqual(cron_cycle.cron_time_zone, \"Asia/Shanghai\")\n\n\nif __name__ == '__main__':\n    unittest.main()"
  },
  {
    "path": "volcengine/tls/test/describe_shipper_test.py",
    "content": "\"\"\"TLSService.describe_shipper 的请求构造与异常场景单元测试（无需真实后端）。\"\"\"\n\nimport os\nimport unittest\nfrom unittest.mock import patch, Mock\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import DescribeShipperRequest\nfrom volcengine.tls.tls_exception import TLSException\n\n\nclass TestDescribeShipper(unittest.TestCase):\n    \"\"\"测试 DescribeShipper 请求结构与 TLSService 调用行为。\"\"\"\n\n    def setUp(self):\n        self.endpoint = os.environ.get(\n            \"VOLCENGINE_ENDPOINT\", \"https://tls-cn-beijing.ivolces.com\"\n        )\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"test-ak\")\n        self.access_key_secret = os.environ.get(\n            \"VOLCENGINE_ACCESS_KEY_SECRET\", \"test-sk\"\n        )\n\n        self.tls_service = TLSService(\n            self.endpoint,\n            self.access_key_id,\n            self.access_key_secret,\n            self.region,\n        )\n\n    def test_describe_shipper_request_body(self):\n        \"\"\"验证 DescribeShipperRequest.get_api_input 顶层键名。\"\"\"\n        request = DescribeShipperRequest(shipper_id=\"shipper-123\")\n        api_input = request.get_api_input()\n\n        self.assertEqual(api_input[\"ShipperId\"], \"shipper-123\")\n\n    @patch(\"volcengine.tls.TLSService.TLSService._TLSService__request\")\n    def test_describe_shipper_nonexistent_shipper(self, mock_request):\n        \"\"\"模拟投递配置不存在时，TLSService.describe_shipper 抛出异常并携带正确请求参数。\"\"\"\n        shipper_id = \"nonexistent-shipper-id\"\n        request = DescribeShipperRequest(shipper_id=shipper_id)\n\n        # 配置底层 __request 抛出 TLSException，模拟后端 404/NotFound 场景\n        mock_request.side_effect = TLSException(\n            error_code=\"NotFound\", error_message=\"Shipper not found\"\n        )\n\n        with self.assertRaises(TLSException):\n            self.tls_service.describe_shipper(request)\n\n        # 验证 __request 调用参数\n        mock_request.assert_called_once()\n        _, kwargs = mock_request.call_args\n        self.assertEqual(kwargs.get(\"api\"), \"/DescribeShipper\")\n        params = kwargs.get(\"params\")\n        self.assertIsInstance(params, dict)\n        self.assertEqual(params.get(\"ShipperId\"), shipper_id)\n\n\nif __name__ == \"__main__\":  # pragma: no cover\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/describe_trace_instances_test.py",
    "content": "\"\"\"Unit tests for DescribeTraceInstances functionality.\"\"\"\nimport os\nimport unittest\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import DescribeTraceInstancesRequest\nfrom volcengine.tls.data import TraceInstanceInfo\n\n\nclass TestDescribeTraceInstances(unittest.TestCase):\n    \"\"\"Test cases for DescribeTraceInstances functionality.\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"\")\n\n    def test_describe_trace_instances_basic(self):\n        \"\"\"Test basic DescribeTraceInstances functionality.\"\"\"\n        if not all([self.endpoint, self.region, self.access_key_id, self.access_key_secret]):\n            self.skipTest(\"Missing required environment variables\")\n\n        # Create TLS client\n        TLSService(\n            self.endpoint, self.access_key_id, self.access_key_secret, self.region)\n\n        # Create request\n        request = DescribeTraceInstancesRequest(\n            page_number=1,\n            page_size=20\n        )\n\n        # Verify request parameters\n        self.assertTrue(request.check_validation())\n        self.assertEqual(request.page_number, 1)\n        self.assertEqual(request.page_size, 20)\n\n        # Test API input format\n        api_input = request.get_api_input()\n        self.assertIn(\"PageNumber\", api_input)\n        self.assertIn(\"PageSize\", api_input)\n        self.assertEqual(api_input[\"PageNumber\"], 1)\n        self.assertEqual(api_input[\"PageSize\"], 20)\n\n    def test_describe_trace_instances_with_filters(self):\n        \"\"\"Test DescribeTraceInstances functionality with filters.\"\"\"\n        request = DescribeTraceInstancesRequest(\n            page_number=1,\n            page_size=10,\n            trace_instance_name=\"test-trace\",\n            project_id=\"test-project\",\n            status=\"CREATED\"\n        )\n\n        # Verify request parameters\n        self.assertTrue(request.check_validation())\n        self.assertEqual(request.page_size, 10)\n        self.assertEqual(request.trace_instance_name, \"test-trace\")\n        self.assertEqual(request.project_id, \"test-project\")\n        self.assertEqual(request.status, \"CREATED\")\n\n        # Test API input format\n        api_input = request.get_api_input()\n        self.assertIn(\"TraceInstanceName\", api_input)\n        self.assertIn(\"ProjectId\", api_input)\n        self.assertIn(\"Status\", api_input)\n        self.assertEqual(api_input[\"TraceInstanceName\"], \"test-trace\")\n        self.assertEqual(api_input[\"ProjectId\"], \"test-project\")\n        self.assertEqual(api_input[\"Status\"], \"CREATED\")\n\n    def test_describe_trace_instances_validation(self):\n        \"\"\"Test request parameter validation.\"\"\"\n        # Test default parameters\n        request = DescribeTraceInstancesRequest()\n        self.assertTrue(request.check_validation())\n\n        # Test custom parameters\n        request = DescribeTraceInstancesRequest(\n            page_number=2,\n            page_size=50,\n            iam_project_name=\"test-iam-project\"\n        )\n        self.assertTrue(request.check_validation())\n\n    def test_trace_instance_info_data_structure(self):\n        \"\"\"Test TraceInstanceInfo data structure.\"\"\"\n        # Create TraceInstanceInfo object\n        trace_instance = TraceInstanceInfo(\n            trace_instance_id=\"trace-123\",\n            trace_instance_name=\"test-trace-instance\",\n            project_id=\"project-456\",\n            project_name=\"test-project\",\n            trace_topic_id=\"topic-789\",\n            trace_topic_name=\"test-trace-topic\",\n            dependency_topic_id=\"dep-topic-111\",\n            dependency_topic_topic_name=\"test-dep-topic\",\n            trace_instance_status=\"CREATED\",\n            description=\"Test trace instance\",\n            create_time=\"2023-01-01T00:00:00Z\",\n            modify_time=\"2023-01-02T00:00:00Z\"\n        )\n\n        # Verify getter methods\n        self.assertEqual(trace_instance.get_trace_instance_id(), \"trace-123\")\n        self.assertEqual(trace_instance.get_trace_instance_name(), \"test-trace-instance\")\n        self.assertEqual(trace_instance.get_project_id(), \"project-456\")\n        self.assertEqual(trace_instance.get_project_name(), \"test-project\")\n        self.assertEqual(trace_instance.get_trace_topic_id(), \"topic-789\")\n        self.assertEqual(trace_instance.get_trace_topic_name(), \"test-trace-topic\")\n        self.assertEqual(trace_instance.get_dependency_topic_id(), \"dep-topic-111\")\n        self.assertEqual(trace_instance.get_dependency_topic_topic_name(), \"test-dep-topic\")\n        self.assertEqual(trace_instance.get_trace_instance_status(), \"CREATED\")\n        self.assertEqual(trace_instance.get_description(), \"Test trace instance\")\n        self.assertEqual(trace_instance.get_create_time(), \"2023-01-01T00:00:00Z\")\n        self.assertEqual(trace_instance.get_modify_time(), \"2023-01-02T00:00:00Z\")\n\n\nif __name__ == '__main__':\n    unittest.main()"
  },
  {
    "path": "volcengine/tls/test/describe_trace_test.py",
    "content": "import os\nimport unittest\nimport random\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import DescribeTraceRequest\nfrom volcengine.tls.tls_responses import DescribeTraceResponse\nfrom volcengine.tls.data import TraceInfo, SpanInfo, StatusInfo, ResourceInfo, KeyValueInfo\n\n\nclass TestDescribeTrace(unittest.TestCase):\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"\")\n\n    def test_describe_trace_request_validation(self):\n        \"\"\"测试 DescribeTraceRequest 参数验证\"\"\"\n        # 测试有效参数\n        trace_id = \"test-trace-id-\" + str(random.randint(1000, 9999))\n        trace_instance_id = \"test-trace-instance-id\"\n        \n        request = DescribeTraceRequest(\n            trace_id=trace_id,\n            trace_instance_id=trace_instance_id\n        )\n        \n        self.assertTrue(request.check_validation())\n        self.assertEqual(request.trace_id, trace_id)\n        self.assertEqual(request.trace_instance_id, trace_instance_id)\n        \n        # 测试空参数验证\n        invalid_request = DescribeTraceRequest(trace_id=None, trace_instance_id=None)\n        self.assertFalse(invalid_request.check_validation())\n        \n        # 测试部分空参数\n        invalid_request1 = DescribeTraceRequest(trace_id=trace_id, trace_instance_id=None)\n        self.assertFalse(invalid_request1.check_validation())\n        \n        invalid_request2 = DescribeTraceRequest(trace_id=None, trace_instance_id=trace_instance_id)\n        self.assertFalse(invalid_request2.check_validation())\n\n    def test_describe_trace_request_serialization(self):\n        \"\"\"测试请求参数的序列化\"\"\"\n        trace_id = \"test-trace-id-12345\"\n        trace_instance_id = \"test-trace-instance-id\"\n        \n        request = DescribeTraceRequest(\n            trace_id=trace_id,\n            trace_instance_id=trace_instance_id\n        )\n        \n        api_input = request.get_api_input()\n        expected = {\n            \"TraceId\": trace_id,\n            \"TraceInstanceId\": trace_instance_id\n        }\n        self.assertEqual(api_input, expected)\n\n    def test_trace_data_structures(self):\n        \"\"\"测试 Trace 数据结构\"\"\"\n        # 测试 KeyValueInfo\n        key_value = KeyValueInfo(key=\"test_key\", value=\"test_value\")\n        self.assertEqual(key_value.key, \"test_key\")\n        self.assertEqual(key_value.value, \"test_value\")\n        \n        # 测试 StatusInfo\n        status = StatusInfo(code=\"SUCCESS\", message=\"Test message\")\n        self.assertEqual(status.code, \"SUCCESS\")\n        self.assertEqual(status.message, \"Test message\")\n        \n        # 测试 ResourceInfo\n        attributes = [KeyValueInfo(key=\"service\", value=\"test-service\")]\n        resource = ResourceInfo(attributes=attributes)\n        self.assertEqual(len(resource.attributes), 1)\n        self.assertEqual(resource.attributes[0].key, \"service\")\n        self.assertEqual(resource.attributes[0].value, \"test-service\")\n        \n        # 测试 SpanInfo\n        span = SpanInfo(\n            trace_id=\"test-trace-id\",\n            span_id=\"test-span-id\",\n            kind=\"server\",\n            name=\"test-operation\",\n            start_time=1640995200000000,\n            end_time=1640995260000000,\n            status=status,\n            resource=resource\n        )\n        \n        self.assertEqual(span.trace_id, \"test-trace-id\")\n        self.assertEqual(span.span_id, \"test-span-id\")\n        self.assertEqual(span.kind, \"server\")\n        self.assertEqual(span.name, \"test-operation\")\n        self.assertEqual(span.start_time, 1640995200000000)\n        self.assertEqual(span.end_time, 1640995260000000)\n        self.assertEqual(span.status.code, \"SUCCESS\")\n        self.assertEqual(len(span.resource.attributes), 1)\n        \n        # 测试 TraceInfo\n        trace = TraceInfo(spans=[span])\n        self.assertEqual(len(trace.spans), 1)\n        self.assertEqual(trace.spans[0].trace_id, \"test-trace-id\")\n\n    def test_describe_trace_response(self):\n        \"\"\"测试 DescribeTraceResponse\"\"\"\n        # 模拟响应数据\n        mock_response_data = {\n            \"Trace\": {\n                \"Spans\": [\n                    {\n                        \"TraceId\": \"test-trace-id\",\n                        \"SpanId\": \"test-span-id\",\n                        \"Kind\": \"server\",\n                        \"Name\": \"test-operation\",\n                        \"StartTime\": 1640995200000000,\n                        \"EndTime\": 1640995260000000,\n                        \"Status\": {\n                            \"Code\": \"SUCCESS\",\n                            \"Message\": \"Test message\"\n                        },\n                        \"Resource\": {\n                            \"Attributes\": [\n                                {\n                                    \"Key\": \"service\",\n                                    \"Value\": \"test-service\"\n                                }\n                            ]\n                        }\n                    }\n                ]\n            }\n        }\n        \n        # 创建模拟响应对象\n        class MockResponse:\n            def __init__(self):\n                self.headers = {\"X-Tls-Requestid\": \"test-request-id\", \"Content-Type\": \"application/json\"}\n                self.text = str(mock_response_data).replace(\"'\", '\"')\n                \n        mock_response = MockResponse()\n        \n        # 测试响应解析\n        response = DescribeTraceResponse(mock_response)\n        trace = response.get_trace()\n        \n        self.assertIsNotNone(trace)\n        self.assertEqual(len(trace.spans), 1)  # pylint: disable=no-member\n        self.assertEqual(trace.spans[0].trace_id, \"test-trace-id\")  # pylint: disable=no-member\n        self.assertEqual(trace.spans[0].span_id, \"test-span-id\")  # pylint: disable=no-member\n        self.assertEqual(trace.spans[0].kind, \"server\")  # pylint: disable=no-member\n        self.assertEqual(trace.spans[0].name, \"test-operation\")  # pylint: disable=no-member\n        self.assertEqual(trace.spans[0].status.code, \"SUCCESS\")  # pylint: disable=no-member\n        self.assertEqual(len(trace.spans[0].resource.attributes), 1)  # pylint: disable=no-member\n        self.assertEqual(trace.spans[0].resource.attributes[0].key, \"service\")  # pylint: disable=no-member\n        self.assertEqual(trace.spans[0].resource.attributes[0].value, \"test-service\")  # pylint: disable=no-member\n\n    def test_describe_trace_integration(self):\n        \"\"\"测试 DescribeTrace 集成（需要环境变量）\"\"\"\n        if not all([self.endpoint, self.access_key_id, self.access_key_secret, self.region]):\n            self.skipTest(\"缺少必要的环境变量\")\n\n        tls_service = TLSService(\n            self.endpoint, self.access_key_id, self.access_key_secret, self.region)\n\n        # 模拟测试数据\n        trace_id = \"test-trace-id-\" + str(random.randint(1000, 9999))\n        trace_instance_id = \"test-trace-instance-id\"\n        \n        try:\n            # 尝试调用 DescribeTrace 方法\n            describe_trace_request = DescribeTraceRequest(\n                trace_id=trace_id,\n                trace_instance_id=trace_instance_id\n            )\n            \n            # 验证请求参数\n            self.assertTrue(describe_trace_request.check_validation())\n            \n            # 注意：由于我们没有真实的 trace 数据，这个调用可能会失败\n            # 这里主要是测试请求构建和参数验证\n            response = tls_service.describe_trace(describe_trace_request)\n            \n            # 如果调用成功，验证响应\n            trace = response.get_trace()\n            self.assertIsNotNone(trace)\n            \n        except Exception as e:  # pylint: disable=broad-exception-caught\n            # 如果 trace 不存在，应该抛出异常\n            # 这里我们主要验证请求构建是正确的\n            self.assertIn(\"Trace\", str(e))\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/etl_task_test.py",
    "content": "\"\"\"ETL Task Test Module\n\nThis module contains unit tests for ETL task functionality.\n\"\"\"\nimport os\nimport unittest\nimport random\nimport string\nfrom unittest.mock import Mock, patch\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import ModifyETLTaskRequest, DescribeETLTasksRequest\nfrom volcengine.tls.tls_responses import DescribeETLTasksResponse\nfrom volcengine.tls.data import TargetResource\n\n\nclass TestETLTask(unittest.TestCase):\n    \"\"\"Test class for ETL task functionality.\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"tls-cn-beijing.ivolces.com\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"test-ak\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"test-sk\")\n\n    def generate_random_string(self, length=10):\n        \"\"\"Generate a random string for testing.\"\"\"\n        return ''.join(random.choices(string.ascii_lowercase + string.digits, k=length))\n\n    def test_modify_etl_task_request_validation(self):\n        \"\"\"测试 ModifyETLTaskRequest 参数验证\"\"\"\n        # 测试 task_id 为 None 的情况\n        request = ModifyETLTaskRequest(task_id=None)\n        self.assertFalse(request.check_validation())\n\n        # 测试 task_id 不为 None 的情况\n        request = ModifyETLTaskRequest(task_id=\"test-task-id\")\n        self.assertTrue(request.check_validation())\n\n    def test_modify_etl_task_request_with_target_resources(self):\n        \"\"\"测试 ModifyETLTaskRequest 包含 TargetResource 的情况\"\"\"\n        target_resources = [\n            TargetResource(\n                alias=\"test\",\n                topic_id=\"test-topic-id\",\n                region=\"cn-beijing\",\n                role_trn=\"trn:iam::2100000001:role/TLSETLAccessForUserA\"\n            )\n        ]\n\n        request = ModifyETLTaskRequest(\n            task_id=\"test-task-id\",\n            name=\"test-etl-task-name\",\n            description=\"This is a test ETL task\",\n            script='f_set(\"key\",\"value\")',\n            target_resources=target_resources\n        )\n\n        # 验证参数\n        self.assertTrue(request.check_validation())\n        self.assertEqual(request.task_id, \"test-task-id\")\n        self.assertEqual(request.name, \"test-etl-task-name\")\n        self.assertEqual(request.description, \"This is a test ETL task\")\n        self.assertEqual(request.script, 'f_set(\"key\",\"value\")')\n        self.assertEqual(len(request.target_resources), 1)\n\n        # 验证 API 输入格式\n        api_input = request.get_api_input()\n        self.assertIn(\"TaskId\", api_input)\n        self.assertIn(\"Name\", api_input)\n        self.assertIn(\"Description\", api_input)\n        self.assertIn(\"Script\", api_input)\n        self.assertIn(\"TargetResources\", api_input)\n\n        target_resource = api_input[\"TargetResources\"][0]\n        self.assertEqual(target_resource[\"Alias\"], \"test\")\n        self.assertEqual(target_resource[\"TopicId\"], \"test-topic-id\")\n        self.assertEqual(target_resource[\"Region\"], \"cn-beijing\")\n        self.assertEqual(target_resource[\"RoleTrn\"], \"trn:iam::2100000001:role/TLSETLAccessForUserA\")\n\n    def test_target_resource_data_class(self):\n        \"\"\"测试 TargetResource 数据类\"\"\"\n        target_resource = TargetResource(\n            alias=\"test-alias\",\n            topic_id=\"test-topic\",\n            region=\"cn-shanghai\",\n            role_trn=\"trn:iam::123456789:role/TestRole\"\n        )\n\n        # 测试 json 方法\n        json_data = target_resource.json()\n        self.assertEqual(json_data[\"Alias\"], \"test-alias\")\n        self.assertEqual(json_data[\"TopicId\"], \"test-topic\")\n        self.assertEqual(json_data[\"Region\"], \"cn-shanghai\")\n        self.assertEqual(json_data[\"RoleTrn\"], \"trn:iam::123456789:role/TestRole\")\n\n    def test_modify_etl_task_integration(self):\n        \"\"\"测试 ModifyETLTask 方法的集成测试（模拟）\"\"\"\n        # 生成随机任务ID和名称\n        task_id = f\"test-etl-task-{self.generate_random_string()}\"\n        task_name = f\"test-etl-task-name-{self.generate_random_string()}\"\n\n        # 创建请求\n        target_resources = [\n            TargetResource(\n                alias=\"test\",\n                topic_id=\"test-topic-id\",\n                region=\"cn-beijing\",\n                role_trn=\"trn:iam::2100000001:role/TLSETLAccessForUserA\"\n            )\n        ]\n\n        modify_request = ModifyETLTaskRequest(\n            task_id=task_id,\n            name=task_name,\n            description=\"This is a test ETL task\",\n            script='f_set(\"key\",\"value\")',\n            target_resources=target_resources\n        )\n\n        # 验证请求参数\n        self.assertTrue(modify_request.check_validation())\n\n        # 验证 API 输入格式\n        api_input = modify_request.get_api_input()\n        self.assertEqual(api_input[\"TaskId\"], task_id)\n        self.assertEqual(api_input[\"Name\"], task_name)\n        self.assertEqual(api_input[\"Description\"], \"This is a test ETL task\")\n        self.assertEqual(api_input[\"Script\"], 'f_set(\"key\",\"value\")')\n\n    def test_create_etl_task_request_body_fields(self):\n        \"\"\"测试 CreateETLTaskRequest 的请求体字段与 TargetResources 序列化\"\"\"\n        from volcengine.tls import tls_requests\n\n        request = tls_requests.CreateETLTaskRequest(\n            dsl_type=\"NORMAL\",\n            name=\"python-sdk-etl-test-task-body\",\n            source_topic_id=\"source-topic-id\",\n            script='f_set(\"key\",\"value\")',\n            target_resources=[\n                {\n                    \"alias\": \"dict-alias\",\n                    \"topic_id\": \"dict-topic-id\",\n                    \"region\": \"cn-beijing\",\n                    \"role_trn\": \"trn:iam::2100000001:role/DictRole\",\n                },\n                TargetResource(\n                    alias=\"obj-alias\",\n                    topic_id=\"obj-topic-id\",\n                    region=\"cn-shanghai\",\n                    role_trn=\"trn:iam::2100000001:role/ObjRole\",\n                ),\n            ],\n        )\n\n        body = request.get_api_input()\n        # 顶层字段命名\n        self.assertEqual(body[\"DSLType\"], \"NORMAL\")\n        self.assertEqual(body[\"Name\"], \"python-sdk-etl-test-task-body\")\n        self.assertEqual(body[\"SourceTopicId\"], \"source-topic-id\")\n        self.assertEqual(body[\"Script\"], 'f_set(\"key\",\"value\")')\n\n        # TargetResources 序列化结果\n        self.assertIn(\"TargetResources\", body)\n        self.assertEqual(len(body[\"TargetResources\"]), 2)\n\n        first = body[\"TargetResources\"][0]\n        self.assertEqual(first[\"Alias\"], \"dict-alias\")\n        self.assertEqual(first[\"TopicId\"], \"dict-topic-id\")\n        self.assertEqual(first[\"Region\"], \"cn-beijing\")\n        self.assertEqual(first[\"RoleTrn\"], \"trn:iam::2100000001:role/DictRole\")\n\n        second = body[\"TargetResources\"][1]\n        self.assertEqual(second[\"Alias\"], \"obj-alias\")\n        self.assertEqual(second[\"TopicId\"], \"obj-topic-id\")\n        self.assertEqual(second[\"Region\"], \"cn-shanghai\")\n        self.assertEqual(second[\"RoleTrn\"], \"trn:iam::2100000001:role/ObjRole\")\n\n    def test_describe_etl_tasks_request_body_fields(self):\n        \"\"\"测试 DescribeETLTasksRequest 的查询参数序列化。\"\"\"\n        request = DescribeETLTasksRequest(\n            project_id=\"project-1\",\n            project_name=\"project-name\",\n            source_topic_id=\"source-topic-1\",\n            source_topic_name=\"source-topic-name\",\n            task_id=\"etl-task-1\",\n            task_name=\"etl-task-name\",\n            status=\"RUNNING\",\n            iam_project_name=\"default\",\n            page_number=2,\n            page_size=50,\n        )\n\n        params = request.get_api_input()\n        self.assertEqual(params[\"ProjectId\"], \"project-1\")\n        self.assertEqual(params[\"ProjectName\"], \"project-name\")\n        self.assertEqual(params[\"SourceTopicId\"], \"source-topic-1\")\n        self.assertEqual(params[\"SourceTopicName\"], \"source-topic-name\")\n        self.assertEqual(params[\"TaskId\"], \"etl-task-1\")\n        self.assertEqual(params[\"TaskName\"], \"etl-task-name\")\n        self.assertEqual(params[\"Status\"], \"RUNNING\")\n        self.assertEqual(params[\"IamProjectName\"], \"default\")\n        self.assertEqual(params[\"PageNumber\"], 2)\n        self.assertEqual(params[\"PageSize\"], 50)\n\n    @patch(\"volcengine.tls.TLSService.TLSService._TLSService__request\")\n    def test_describe_etl_tasks_service_call(self, mock_request):\n        \"\"\"测试 TLSService.describe_etl_tasks 调用路径与响应解析。\"\"\"\n        tls_service = TLSService(\n            self.endpoint,\n            self.access_key_id,\n            self.access_key_secret,\n            self.region,\n        )\n\n        mock_response = Mock()\n        mock_response.headers = {\n            \"X-Tls-Requestid\": \"test-request-id\",\n            \"Content-Type\": \"application/json\",\n        }\n        mock_response.text = (\n            '{\"Total\": 1, \"Tasks\": ['\n            '{\"TaskId\": \"etl-task-1\", \"Name\": \"etl-task-name\", '\n            '\"ProjectId\": \"project-1\", \"SourceTopicId\": \"topic-1\", \"TargetResources\": []}'\n            ']}'\n        )\n        mock_request.return_value = mock_response\n\n        request = DescribeETLTasksRequest(project_id=\"project-1\", page_number=1, page_size=20)\n        response = tls_service.describe_etl_tasks(request)\n\n        expected_params = request.get_api_input()\n        mock_request.assert_called_once_with(\n            api=\"/DescribeETLTasks\",\n            params=expected_params,\n        )\n        self.assertIsInstance(response, DescribeETLTasksResponse)\n        self.assertEqual(response.get_total(), 1)\n        tasks = response.get_tasks()\n        self.assertEqual(len(tasks), 1)\n        self.assertEqual(tasks[0].task_id, \"etl-task-1\")\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/etl_test.py",
    "content": "# coding=utf-8\n\nimport os\nimport unittest\nimport uuid\n\nfrom volcengine.tls import tls_requests\nfrom volcengine.tls.test.util_test import NewTLSService\n\n\nclass TestETL(unittest.TestCase):\n\n    cli = NewTLSService()\n\n    project_id = \"\"\n    project_name = \"python-sdk-etl-test-project\" + uuid.uuid4().hex\n    source_topic_id = \"\"\n    target_topic_id = \"\"\n\n    @classmethod\n    def setUpClass(cls):\n        # 创建project\n        region = os.environ.get(\"VOLCENGINE_REGION\")\n        if not region:\n            raise unittest.SkipTest(\"Missing required environment variable VOLCENGINE_REGION\")\n        create_project_request = tls_requests.CreateProjectRequest(\n            project_name=cls.project_name,\n            region=region,\n        )\n        create_project_response = cls.cli.create_project(\n            create_project_request)\n        cls.assertTrue(create_project_response.project_id,\n                       \"create project failed\")\n        cls.project_id = create_project_response.project_id\n\n        # 创建源topic\n        create_source_topic_request = tls_requests.CreateTopicRequest(\n            topic_name=\"python-sdk-etl-test-source-topic\" + uuid.uuid4().hex,\n            project_id=cls.project_id,\n            ttl=1,\n            shard_count=1\n        )\n        create_source_topic_response = cls.cli.create_topic(create_source_topic_request)\n        cls.assertTrue(create_source_topic_response.topic_id,\n                       \"create source topic failed\")\n        cls.source_topic_id = create_source_topic_response.topic_id\n\n        # 创建目标topic\n        create_target_topic_request = tls_requests.CreateTopicRequest(\n            topic_name=\"python-sdk-etl-test-target-topic\" + uuid.uuid4().hex,\n            project_id=cls.project_id,\n            ttl=1,\n            shard_count=1\n        )\n        create_target_topic_response = cls.cli.create_topic(create_target_topic_request)\n        cls.assertTrue(create_target_topic_response.topic_id,\n                       \"create target topic failed\")\n        cls.target_topic_id = create_target_topic_response.topic_id\n\n    @classmethod\n    def tearDownClass(cls):\n        # 删除topic\n        delete_source_topic_request = tls_requests.DeleteTopicRequest(cls.source_topic_id)\n        delete_source_topic_response = cls.cli.delete_topic(delete_source_topic_request)\n        cls.assertTrue(delete_source_topic_response.request_id,\n                       \"delete source topic failed\")\n\n        delete_target_topic_request = tls_requests.DeleteTopicRequest(cls.target_topic_id)\n        delete_target_topic_response = cls.cli.delete_topic(delete_target_topic_request)\n        cls.assertTrue(delete_target_topic_response.request_id,\n                       \"delete target topic failed\")\n\n        # 删除project\n        delete_project_request = tls_requests.DeleteProjectRequest(\n            project_id=cls.project_id)\n        delete_project_response = cls.cli.delete_project(\n            delete_project_request)\n        cls.assertTrue(delete_project_response.request_id,\n                       \"delete project failed\")\n\n    def test_create_etl_task(self):\n        \"\"\"测试创建ETL任务\"\"\"\n        # 创建ETL任务\n        create_etl_task_request = tls_requests.CreateETLTaskRequest(\n            dsl_type=\"NORMAL\",\n            name=\"python-sdk-etl-test-task\" + uuid.uuid4().hex,\n            description=\"Test ETL task\",\n            enable=True,\n            source_topic_id=self.source_topic_id,\n            script='f_set(\"key\", \"value\")',\n            task_type=\"Resident\",\n            target_resources=[\n                {\n                    \"alias\": \"test\",\n                    \"topic_id\": self.target_topic_id,\n                    \"region\": os.environ[\"VOLCENGINE_REGION\"]\n                }\n            ]\n        )\n\n        create_etl_task_response = self.cli.create_etl_task(create_etl_task_request)\n        self.assertTrue(create_etl_task_response.task_id,\n                       \"create etl task failed\")\n        self.assertIsNotNone(create_etl_task_response.get_task_id(),\n                           \"get task id failed\")\n\n\n    def test_create_etl_task_validation(self):\n        \"\"\"测试ETL任务参数验证\"\"\"\n        # 测试缺少必需参数\n        with self.assertRaises(Exception):\n            # 缺少dsl_type\n            invalid_request = tls_requests.CreateETLTaskRequest(\n                dsl_type=None,\n                name=\"test-task\",\n                source_topic_id=self.source_topic_id,\n                script='f_set(\"key\", \"value\")',\n                target_resources=[\n                    {\n                        \"alias\": \"test\",\n                        \"topic_id\": self.target_topic_id,\n                        \"region\": os.environ[\"VOLCENGINE_REGION\"]\n                    }\n                ]\n            )\n            self.cli.create_etl_task(invalid_request)\n\n        # 测试无效的target_resources格式\n        with self.assertRaises(Exception):\n            invalid_request = tls_requests.CreateETLTaskRequest(\n                dsl_type=\"NORMAL\",\n                name=\"test-task\",\n                source_topic_id=self.source_topic_id,\n                script='f_set(\"key\", \"value\")',\n                target_resources=[\n                    {\n                        \"alias\": \"test\",\n                        # 缺少topic_id\n                        \"region\": os.environ[\"VOLCENGINE_REGION\"]\n                    }\n                ]\n            )\n            self.cli.create_etl_task(invalid_request)"
  },
  {
    "path": "volcengine/tls/test/get_account_status_test.py",
    "content": "import os\nimport unittest\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import GetAccountStatusRequest\n\n\nclass TestGetAccountStatus(unittest.TestCase):\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"https://tls-cn-beijing.ivolces.com\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"test-ak\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"test-sk\")\n\n    def test_get_account_status_request(self):\n        \"\"\"测试 GetAccountStatusRequest 的创建和验证\"\"\"\n        request = GetAccountStatusRequest()\n        self.assertTrue(request.check_validation())\n\n    def test_get_account_status_response_structure(self):\n        \"\"\"测试 GetAccountStatus 响应结构\"\"\"\n        # 这里可以添加响应结构验证逻辑\n        # 基于 Node.js 版本的验证模式\n        # 验证返回的数据包含 ArchVersion 和 Status 字段\n\n    def test_get_account_status_integration(self):\n        \"\"\"测试 GetAccountStatus 的完整调用流程\"\"\"\n        try:\n            tls_service = TLSService(\n                self.endpoint,\n                self.access_key_id,\n                self.access_key_secret,\n                self.region\n            )\n\n            request = GetAccountStatusRequest()\n            response = tls_service.get_account_status(request)\n\n            # 验证响应不为空\n            self.assertIsNotNone(response)\n\n            # 验证响应包含必要的字段\n            arch_version = response.get_arch_version()\n            status = response.get_status()\n\n            # 基于 Node.js 版本的验证逻辑\n            # ArchVersion 应该是字符串\n            if arch_version is not None:\n                self.assertIsInstance(arch_version, str)\n\n            # Status 应该是字符串，且值在预期范围内\n            if status is not None:\n                self.assertIsInstance(status, str)\n                self.assertIn(status, [\"Activated\", \"NonActivated\"])\n\n        except Exception as e:\n            # 在实际环境中，这里应该根据具体的错误类型进行处理\n            # 如果是认证失败等预期内的错误，可以选择跳过测试\n            self.skipTest(f\"Integration test skipped due to: {str(e)}\")\n\n\nif __name__ == \"__main__\":\n    unittest.main()"
  },
  {
    "path": "volcengine/tls/test/import_task_test.py",
    "content": "# coding=utf-8\n\"\"\"\nUnit tests for CreateImportTask functionality in TLS SDK.\n\nThis module contains comprehensive tests for the CreateImportTask API,\nincluding both TOS and Kafka import scenarios.\n\"\"\"\n# pylint: disable=no-member\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\nimport unittest\nimport time\nimport random\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.data import ImportTaskInfo\nfrom volcengine.tls.tls_requests import (\n    CreateProjectRequest, CreateTopicRequest, DeleteProjectRequest,\n    DeleteTopicRequest, CreateImportTaskRequest, DescribeImportTaskRequest,\n    DescribeImportTasksRequest, TosSourceInfo, KafkaSourceInfo,\n    ImportSourceInfo, TargetInfo, ImportExtractRule\n)\n\n\nclass TestImportTask(unittest.TestCase):\n    \"\"\"Test class for ImportTask related functionality.\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"\")\n        self.access_key_secret = os.environ.get(\n            \"VOLCENGINE_ACCESS_KEY_SECRET\", \"\"\n        )\n        self.tls_service = None\n        self.test_suffix = None\n        self.project_id = None\n        self.topic_id = None\n\n        # Skip tests if environment variables are not set\n        self.skip_tests = not all([\n            self.endpoint, self.region, self.access_key_id,\n            self.access_key_secret\n        ])\n\n    def setUp(self):\n        \"\"\"Set up test environment before each test.\"\"\"\n        if self.skip_tests:\n            self.skipTest(\"Environment variables not configured\")\n\n        self.tls_service = TLSService(\n            self.endpoint, self.access_key_id, self.access_key_secret,\n            self.region\n        )\n\n        # Generate unique identifiers for this test run\n        self.test_suffix = str(int(time.time())) + str(\n            random.randint(1000, 9999)\n        )\n\n        # Create project and topic for testing\n        self.project_id = self._create_test_project()\n        self.topic_id = self._create_test_topic()\n\n    def tearDown(self):\n        \"\"\"Clean up test environment after each test.\"\"\"\n        # Clean up: delete topic and project\n        try:\n            if hasattr(self, 'topic_id') and self.topic_id:\n                delete_topic_request = DeleteTopicRequest(\n                    topic_id=self.topic_id\n                )\n                self.tls_service.delete_topic(delete_topic_request)\n\n            if hasattr(self, 'project_id') and self.project_id:\n                delete_project_request = DeleteProjectRequest(\n                    project_id=self.project_id\n                )\n                self.tls_service.delete_project(delete_project_request)\n        except Exception:  # pylint: disable=broad-exception-caught\n            # Ignore cleanup errors\n            pass\n\n    def _create_test_project(self):\n        \"\"\"Create a test project and return its ID.\"\"\"\n        project_name = (\n            f\"tls-python-sdk-test-import-task-project-{self.test_suffix}\"\n        )\n        create_project_request = CreateProjectRequest(\n            project_name=project_name,\n            region=self.region,\n            description=\"Test project for import task\"\n        )\n        response = self.tls_service.create_project(create_project_request)\n        return response.get_project_id()\n\n    def _create_test_topic(self):\n        \"\"\"Create a test topic and return its ID.\"\"\"\n        topic_name = f\"tls-python-sdk-test-import-task-topic-{self.test_suffix}\"\n        create_topic_request = CreateTopicRequest(\n            topic_name=topic_name,\n            project_id=self.project_id,\n            shard_count=1,\n            ttl=1,\n            description=\"Test topic for import task\"\n        )\n        response = self.tls_service.create_topic(create_topic_request)\n        return response.get_topic_id()\n\n    def test_create_import_task_tos(self):\n        \"\"\"Test creating TOS import task.\"\"\"\n        # TOS source info\n        tos_source_info = TosSourceInfo(\n            bucket=\"test-bucket\",\n            prefix=\"test-prefix/\",\n            region=\"cn-shanghai\",\n            compress_type=\"none\"\n        )\n\n        # Import source info\n        import_source_info = ImportSourceInfo(tos_source_info=tos_source_info)\n\n        # Target info\n        target_info = TargetInfo(\n            region=self.region,\n            log_type=\"json_log\"\n        )\n\n        # Create import task request\n        task_name = f\"tls-python-sdk-test-import-task-{self.test_suffix}\"\n        create_request = CreateImportTaskRequest(\n            topic_id=self.topic_id,\n            task_name=task_name,\n            source_type=\"tos\",\n            import_source_info=import_source_info,\n            target_info=target_info,\n            project_id=self.project_id,\n            description=\"Test TOS import task\"\n        )\n\n        # Execute request\n        response = self.tls_service.create_import_task(create_request)\n\n        # Verify response\n        self.assertIsNotNone(response)\n        self.assertIsNotNone(response.get_task_id())\n        task_id = response.get_task_id()\n        self.assertIsInstance(task_id, str)\n        self.assertGreater(len(task_id), 0)\n\n        # Verify we can query the task\n        describe_request = DescribeImportTaskRequest(task_id=task_id)\n        describe_response = self.tls_service.describe_import_task(\n            describe_request\n        )\n\n        self.assertIsNotNone(describe_response)\n        task_info: ImportTaskInfo = describe_response.get_task_info()\n        self.assertIsNotNone(task_info)\n        self.assertEqual(task_info.task_name, task_name)\n        self.assertEqual(task_info.source_type, \"tos\")\n\n    def test_create_import_task_kafka(self):\n        \"\"\"Test creating Kafka import task.\"\"\"\n        # Kafka source info\n        kafka_source_info = KafkaSourceInfo(\n            host=\"kafka-host1:9092,kafka-host2:9092\",\n            topic=\"test-topic\",\n            encode=\"UTF-8\",\n            protocol=\"plaintext\",\n            is_need_auth=False,\n            initial_offset=1,\n            time_source_default=0\n        )\n\n        # Import source info\n        import_source_info = ImportSourceInfo(\n            kafka_source_info=kafka_source_info\n        )\n\n        # Target info with extract rule\n        extract_rule = ImportExtractRule(\n            delimiter=\"|\",\n            keys=[\"time\", \"level\", \"message\"],\n            time_key=\"time\",\n            time_format=\"%Y-%m-%d %H:%M:%S\",\n            time_zone=\"Asia/Shanghai\",\n            un_match_up_load_switch=True,\n            un_match_log_key=\"LogParseFailed\"\n        )\n\n        target_info = TargetInfo(\n            region=self.region,\n            log_type=\"delimiter_log\",\n            extract_rule=extract_rule,\n            log_sample=\"2023-12-01 10:00:00|INFO|This is a sample log\"\n        )\n\n        # Create import task request\n        task_name = f\"tls-python-sdk-test-kafka-import-task-{self.test_suffix}\"\n        create_request = CreateImportTaskRequest(\n            topic_id=self.topic_id,\n            task_name=task_name,\n            source_type=\"kafka\",\n            import_source_info=import_source_info,\n            target_info=target_info,\n            project_id=self.project_id,\n            description=\"Test Kafka import task\"\n        )\n\n        # Execute request\n        response = self.tls_service.create_import_task(create_request)\n\n        # Verify response\n        self.assertIsNotNone(response)\n        self.assertIsNotNone(response.get_task_id())\n        task_id = response.get_task_id()\n        self.assertIsInstance(task_id, str)\n        self.assertGreater(len(task_id), 0)\n\n        # Verify we can query the task\n        describe_request = DescribeImportTaskRequest(task_id=task_id)\n        describe_response = self.tls_service.describe_import_task(\n            describe_request\n        )\n\n        self.assertIsNotNone(describe_response)\n        task_info: ImportTaskInfo = describe_response.get_task_info()\n        self.assertIsNotNone(task_info)\n        self.assertEqual(task_info.task_name, task_name)\n        self.assertEqual(task_info.source_type, \"kafka\")\n\n    def test_create_import_task_validation(self):\n        \"\"\"Test input validation for CreateImportTaskRequest.\"\"\"\n        # Test missing required parameters\n        with self.assertRaises(Exception):\n            CreateImportTaskRequest(\n                topic_id=None,  # Missing required topic_id\n                task_name=\"test-task\",\n                source_type=\"tos\",\n                import_source_info=None,\n                target_info=None\n            )\n\n    def test_describe_import_tasks(self):\n        \"\"\"Test querying multiple import tasks.\"\"\"\n        # Create a test task first\n        self.test_create_import_task_tos()\n\n        # Query tasks\n        describe_request = DescribeImportTasksRequest(\n            project_id=self.project_id,\n            topic_id=self.topic_id,\n            page_number=1,\n            page_size=10\n        )\n\n        response = self.tls_service.describe_import_tasks(describe_request)\n\n        # Verify response\n        self.assertIsNotNone(response)\n        self.assertIsNotNone(response.get_task_infos())\n        self.assertIsInstance(response.get_task_infos(), list)\n        self.assertGreater(len(response.get_task_infos()), 0)\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/list_tags_for_resources_test.py",
    "content": "\"\"\"Unit tests for ListTagsForResources request and TLSService integration.\n\n本文件仅构造请求并通过 Mock 拦截 TLSService._TLSService__request，\n不依赖真实后端环境或 TLS 资源。\n\"\"\"\n\nimport os\nimport unittest\nfrom unittest.mock import Mock, patch\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import ListTagsForResourcesRequest\nfrom volcengine.tls.tls_responses import ListTagsForResourcesResponse\n\n\nclass TestListTagsForResources(unittest.TestCase):\n    \"\"\"测试 ListTagsForResourcesRequest 与 TLSService.list_tags_for_resources\"\"\"\n\n    def setUp(self):\n        # 使用本地默认配置构造 TLSService，避免依赖真实环境变量和后端\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"https://tls-cn-beijing.ivolces.com\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"test-ak\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"test-sk\")\n\n        self.tls_service = TLSService(\n            self.endpoint,\n            self.access_key_id,\n            self.access_key_secret,\n            self.region,\n        )\n\n    def test_list_tags_for_resources_request_validation(self):\n        \"\"\"测试 ListTagsForResourcesRequest.check_validation 仅校验 resource_type 非空\"\"\"\n        request = ListTagsForResourcesRequest(resource_type=\"project\")\n        self.assertTrue(request.check_validation())\n\n        request = ListTagsForResourcesRequest(resource_type=None)\n        self.assertFalse(request.check_validation())\n\n    def test_list_tags_for_resources_request_body_fields(self):\n        \"\"\"测试 JSON 请求体顶层字段与 TagFilters 内部结构\"\"\"\n        request = ListTagsForResourcesRequest(\n            resource_type=\"project\",\n            resources_ids=[\"res-1\"],\n            tag_filters=[\n                {\"key\": \"k1\", \"values\": [\"v1\", \"v2\"]},\n                {\"Key\": \"k2\", \"Values\": [\"v3\"]},\n            ],\n            max_results=50,\n            next_token=\"cursor-1\",\n        )\n\n        body = request.get_api_input()\n\n        # 顶层字段命名\n        self.assertEqual(body[\"ResourceType\"], \"project\")\n        self.assertEqual(body[\"ResourcesIds\"], [\"res-1\"])\n        self.assertEqual(body[\"MaxResults\"], 50)\n        self.assertEqual(body[\"NextToken\"], \"cursor-1\")\n\n        # TagFilters 结构\n        self.assertIn(\"TagFilters\", body)\n        self.assertEqual(len(body[\"TagFilters\"]), 2)\n\n        first = body[\"TagFilters\"][0]\n        self.assertEqual(first[\"Key\"], \"k1\")\n        self.assertEqual(first[\"Values\"], [\"v1\", \"v2\"])\n\n        second = body[\"TagFilters\"][1]\n        self.assertEqual(second[\"Key\"], \"k2\")\n        self.assertEqual(second[\"Values\"], [\"v3\"])\n\nif __name__ == \"__main__\":  # pragma: no cover\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/manual_shard_split_test.py",
    "content": "import os\nimport unittest\nimport random\nimport string\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import (CreateProjectRequest, CreateTopicRequest, \n                                        DescribeShardsRequest, ManualShardSplitRequest)\nfrom volcengine.tls.tls_responses import (CreateProjectResponse, CreateTopicResponse, \n                                       DescribeShardsResponse, ManualShardSplitResponse)\n\n\nclass TestManualShardSplit(unittest.TestCase):\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"https://tls-cn-beijing.ivolces.com\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"test-ak\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"test-sk\")\n        self.tls_service = TLSService(self.endpoint, self.access_key_id, self.access_key_secret, self.region)\n\n    def generate_random_string(self, length=10):\n        return ''.join(random.choices(string.ascii_lowercase + string.digits, k=length))\n\n    def test_manual_shard_split(self):\n        \"\"\"测试手动分区分裂功能\"\"\"\n        required_env = [\"VOLCENGINE_ENDPOINT\", \"VOLCENGINE_REGION\", \"VOLCENGINE_ACCESS_KEY_ID\", \"VOLCENGINE_ACCESS_KEY_SECRET\"]\n        if not all(os.environ.get(k) for k in required_env):\n            self.skipTest(\"缺少必要的环境变量，跳过手动分区分裂集成测试\")\n\n        # 创建项目\n        project_name = f\"tls-python-sdk-test-manual-shard-split-project-{self.generate_random_string()}\"\n        create_project_request = CreateProjectRequest(project_name=project_name, region=self.region)\n        \n        try:\n            create_project_response = self.tls_service.create_project(create_project_request)\n            self.assertIsInstance(create_project_response, CreateProjectResponse)\n            project_id = create_project_response.get_project_id()\n            \n            # 创建主题\n            topic_name = f\"tls-python-sdk-test-manual-shard-split-topic-{self.generate_random_string()}\"\n            create_topic_request = CreateTopicRequest(\n                topic_name=topic_name,\n                project_id=project_id,\n                ttl=1,\n                shard_count=2\n            )\n            \n            create_topic_response = self.tls_service.create_topic(create_topic_request)\n            self.assertIsInstance(create_topic_response, CreateTopicResponse)\n            topic_id = create_topic_response.get_topic_id()\n            \n            # 查询分片\n            describe_shards_request = DescribeShardsRequest(topic_id=topic_id, page_number=1, page_size=20)\n            describe_shards_response = self.tls_service.describe_shards(describe_shards_request)\n            self.assertIsInstance(describe_shards_response, DescribeShardsResponse)\n            \n            shards = describe_shards_response.get_shards()\n            self.assertGreater(len(shards), 0, \"No shards found\")\n            \n            # 选择一个分片进行分裂\n            shard_to_split = shards[0]\n            shard_id = shard_to_split.get_shard_id()\n            \n            # 执行手动分区分裂\n            manual_shard_split_request = ManualShardSplitRequest(\n                topic_id=topic_id,\n                shard_id=shard_id,\n                number=2\n            )\n            \n            manual_shard_split_response = self.tls_service.manual_shard_split(manual_shard_split_request)\n            self.assertIsInstance(manual_shard_split_response, ManualShardSplitResponse)\n            \n            # 验证响应\n            result_shards = manual_shard_split_response.get_shards()\n            self.assertIsNotNone(result_shards, \"Shards should not be None\")\n            self.assertGreater(len(result_shards), 0, \"Result shards should not be empty\")\n            \n            # 验证每个分片的信息\n            for shard in result_shards:\n                self.assertIsNotNone(shard.get_shard_id(), \"Shard ID should not be None\")\n                self.assertIsNotNone(shard.get_topic_id(), \"Topic ID should not be None\")\n                self.assertIsNotNone(shard.get_status(), \"Status should not be None\")\n                self.assertIsNotNone(shard.get_inclusive_begin_key(), \"Inclusive begin key should not be None\")\n                self.assertIsNotNone(shard.get_exclusive_end_key(), \"Exclusive end key should not be None\")\n                self.assertIsNotNone(shard.get_modify_time(), \"Modify time should not be None\")\n            \n        except Exception as e:\n            self.fail(f\"Manual shard split test failed: {str(e)}\")\n            \n        finally:\n            # 清理资源\n            try:\n                if 'topic_id' in locals():\n                    from volcengine.tls.tls_requests import DeleteTopicRequest\n                    delete_topic_request = DeleteTopicRequest(topic_id=topic_id)\n                    self.tls_service.delete_topic(delete_topic_request)\n                \n                if 'project_id' in locals():\n                    from volcengine.tls.tls_requests import DeleteProjectRequest\n                    delete_project_request = DeleteProjectRequest(project_id=project_id)\n                    self.tls_service.delete_project(delete_project_request)\n            except Exception as cleanup_e:\n                print(f\"Cleanup failed: {str(cleanup_e)}\")\n\n    def test_manual_shard_split_request_validation(self):\n        \"\"\"测试ManualShardSplitRequest参数验证\"\"\"\n        # 测试缺少必需参数\n        invalid_request = ManualShardSplitRequest(\n            topic_id=None, shard_id=1, number=2)\n        self.assertFalse(invalid_request.check_validation())\n\n        invalid_request = ManualShardSplitRequest(\n            topic_id=\"test-topic\", shard_id=None, number=2)\n        self.assertFalse(invalid_request.check_validation())\n\n        invalid_request = ManualShardSplitRequest(\n            topic_id=\"test-topic\", shard_id=1, number=None)\n        self.assertFalse(invalid_request.check_validation())\n\n        # 测试合法参数\n        valid_request = ManualShardSplitRequest(\n            topic_id=\"test-topic\", shard_id=1, number=2)\n        self.assertTrue(valid_request.check_validation())\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/modify_alarm_webhook_integration_test.py",
    "content": "# coding=utf-8\n\"\"\"Unit tests for ModifyAlarmWebhookIntegration request and TLSService integration (without real backend).\n\n本文件仅关注 ModifyAlarmWebhookIntegration 请求体结构与 TLSService 调用参数，不依赖真实后端环境。\n\"\"\"\nimport os\nimport unittest\nfrom unittest.mock import Mock, patch\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import ModifyAlarmWebhookIntegrationRequest, GeneralWebhookHeaderKV\nfrom volcengine.tls.tls_responses import ModifyAlarmWebhookIntegrationResponse\n\n\nclass TestModifyAlarmWebhookIntegration(unittest.TestCase):\n    \"\"\"ModifyAlarmWebhookIntegration 单元测试。\"\"\"\n\n    def setUp(self):\n        self.endpoint = os.environ.get(\n            \"VOLCENGINE_ENDPOINT\", \"https://tls-cn-beijing.ivolces.com\"\n        )\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"test-ak\")\n        self.access_key_secret = os.environ.get(\n            \"VOLCENGINE_ACCESS_KEY_SECRET\", \"test-sk\"\n        )\n        self.tls_service = TLSService(\n            self.endpoint,\n            self.access_key_id,\n            self.access_key_secret,\n            self.region,\n        )\n\n    def test_request_validation(self):\n        \"\"\"测试 ModifyAlarmWebhookIntegrationRequest.check_validation 必填约束。\"\"\"\n        # 缺少 WebhookID\n        request = ModifyAlarmWebhookIntegrationRequest(\n            webhook_id=\"\",\n            webhook_name=\"test-webhook\",\n            webhook_type=\"Lark\",\n            webhook_url=\"https://example.com/webhook\",\n        )\n        self.assertFalse(request.check_validation())\n\n        # GeneralWebhook 类型但缺少 Method/Headers\n        request = ModifyAlarmWebhookIntegrationRequest(\n            webhook_id=\"webhook-123\",\n            webhook_name=\"test-webhook\",\n            webhook_type=\"GeneralWebhook\",\n            webhook_url=\"https://example.com/webhook\",\n        )\n        self.assertFalse(request.check_validation())\n\n        # 非 GeneralWebhook 类型，仅要求 ID/Name/Type/Url 非空\n        request = ModifyAlarmWebhookIntegrationRequest(\n            webhook_id=\"webhook-123\",\n            webhook_name=\"test-webhook\",\n            webhook_type=\"Lark\",\n            webhook_url=\"https://example.com/webhook\",\n        )\n        self.assertTrue(request.check_validation())\n\n        # GeneralWebhook 类型完整参数\n        headers = [GeneralWebhookHeaderKV(key=\"Content-Type\", value=\"application/json\")]\n        request = ModifyAlarmWebhookIntegrationRequest(\n            webhook_id=\"webhook-123\",\n            webhook_name=\"test-webhook\",\n            webhook_type=\"GeneralWebhook\",\n            webhook_url=\"https://example.com/webhook\",\n            webhook_method=\"POST\",\n            webhook_headers=headers,\n        )\n        self.assertTrue(request.check_validation())\n\n    def test_get_api_input_general_webhook_type(self):\n        \"\"\"测试 GeneralWebhook 类型下 get_api_input 顶层键名与 Headers 序列化。\"\"\"\n        headers = [GeneralWebhookHeaderKV(key=\"Content-Type\", value=\"application/json\")]\n\n        request = ModifyAlarmWebhookIntegrationRequest(\n            webhook_id=\"webhook-123\",\n            webhook_name=\"test-webhook\",\n            webhook_type=\"GeneralWebhook\",\n            webhook_url=\"https://example.com/webhook\",\n            webhook_method=\"POST\",\n            webhook_headers=headers,\n            webhook_secret=\"example-secret\",\n        )\n\n        api_input = request.get_api_input()\n        self.assertEqual(api_input[\"WebhookID\"], \"webhook-123\")\n        self.assertEqual(api_input[\"WebhookName\"], \"test-webhook\")\n        self.assertEqual(api_input[\"WebhookType\"], \"GeneralWebhook\")\n        self.assertEqual(api_input[\"WebhookUrl\"], \"https://example.com/webhook\")\n        self.assertEqual(api_input[\"WebhookMethod\"], \"POST\")\n        self.assertEqual(api_input[\"WebhookSecret\"], \"example-secret\")\n        self.assertIn(\"WebhookHeaders\", api_input)\n        self.assertEqual(len(api_input[\"WebhookHeaders\"]), 1)\n        self.assertEqual(api_input[\"WebhookHeaders\"][0][\"Key\"], \"Content-Type\")\n        self.assertEqual(api_input[\"WebhookHeaders\"][0][\"Value\"], \"application/json\")\n\n    def test_response_parsing(self):\n        \"\"\"测试 ModifyAlarmWebhookIntegrationResponse 对 RequestId 的解析。\"\"\"\n\n        class MockResponse:\n            def __init__(self):\n                self.headers = {\"X-Tls-Requestid\": \"test-request-id\", \"Content-Type\": \"application/json\"}\n                self.text = \"\"\n                self.content = b\"\"\n\n        mock_response = MockResponse()\n        response = ModifyAlarmWebhookIntegrationResponse(mock_response)\n        self.assertEqual(response.request_id, \"test-request-id\")\n        self.assertEqual(response.headers, mock_response.headers)\n\n    @patch(\"volcengine.tls.TLSService.TLSService._TLSService__request\")\n    def test_modify_alarm_webhook_integration_service_call(self, mock_request):\n        \"\"\"测试 TLSService.modify_alarm_webhook_integration 调用路径与请求体结构。\"\"\"\n        headers = [GeneralWebhookHeaderKV(key=\"Content-Type\", value=\"application/json\")]\n        request = ModifyAlarmWebhookIntegrationRequest(\n            webhook_id=\"webhook-123\",\n            webhook_name=\"test-webhook\",\n            webhook_type=\"GeneralWebhook\",\n            webhook_url=\"https://example.com/webhook\",\n            webhook_method=\"POST\",\n            webhook_headers=headers,\n        )\n\n        mock_response = Mock()\n        mock_response.headers = {\n            \"X-Tls-Requestid\": \"test-request-id\",\n            \"Content-Type\": \"application/json\",\n        }\n        mock_response.text = \"{}\"\n        mock_request.return_value = mock_response\n\n        response = self.tls_service.modify_alarm_webhook_integration(request)\n\n        expected_body = request.get_api_input()\n        mock_request.assert_called_once_with(\n            api=\"/ModifyAlarmWebhookIntegration\",\n            body=expected_body,\n        )\n        self.assertIsInstance(response, ModifyAlarmWebhookIntegrationResponse)\n        self.assertEqual(response.get_request_id(), \"test-request-id\")\n\n\nif __name__ == \"__main__\":  # pragma: no cover\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/processor_contract_test.py",
    "content": "\"\"\"Contract tests for index phrase switch and processor request models.\"\"\"\n\nimport json\nimport unittest\n\nfrom volcengine.tls.const import CONTENT_TYPE, X_TLS_REQUEST_ID\nfrom volcengine.tls.tls_requests import (\n    CreateIndexRequest,\n    ModifyIndexRequest,\n    CreateProcessorRequest,\n)\nfrom volcengine.tls.tls_responses import DescribeIndexResponse\n\n\nclass MockResponse:\n    def __init__(self, json_body):\n        self.headers = {\n            X_TLS_REQUEST_ID: \"test-request-id\",\n            CONTENT_TYPE: \"application/json\",\n        }\n        self.text = json.dumps(json_body)\n        self.content = self.text.encode(\"utf-8\")\n\n\nclass TestProcessorContract(unittest.TestCase):\n    def test_index_requests_include_enable_phrase_index(self):\n        create_input = CreateIndexRequest(\"topic-id\", enable_phrase_index=True).get_api_input()\n        modify_input = ModifyIndexRequest(\"topic-id\", enable_phrase_index=True).get_api_input()\n\n        self.assertTrue(create_input[\"EnablePhraseIndex\"])\n        self.assertTrue(modify_input[\"EnablePhraseIndex\"])\n\n    def test_describe_index_response_parses_enable_phrase_index(self):\n        response = DescribeIndexResponse(MockResponse({\n            \"TopicId\": \"topic-id\",\n            \"FullText\": None,\n            \"KeyValue\": [],\n            \"UserInnerKeyValue\": [],\n            \"CreateTime\": \"2026-05-01 00:00:00\",\n            \"ModifyTime\": \"2026-05-01 00:00:00\",\n            \"EnablePhraseIndex\": True,\n        }))\n\n        self.assertTrue(response.get_enable_phrase_index())\n\n    def test_create_processor_request_uses_service_contract_fields(self):\n        api_input = CreateProcessorRequest(\n            project_id=\"project-id\",\n            processor_name=\"processor-name\",\n            dsl_content='f_set(\"k\", \"v\")',\n            processor_type=\"ingester\",\n            processor_dsl_type=\"dsl\",\n            processor_status=\"enabled\",\n            fail_strategy=\"keep_raw\",\n            timeout_ms=5000,\n            max_qps=10,\n        ).get_api_input()\n\n        self.assertEqual(\"project-id\", api_input[\"ProjectId\"])\n        self.assertEqual(\"processor-name\", api_input[\"ProcessorName\"])\n        self.assertEqual(\"ingester\", api_input[\"ProcessorType\"])\n        self.assertEqual(\"dsl\", api_input[\"ProcessorDSLType\"])\n        self.assertEqual(\"enabled\", api_input[\"ProcessorStatus\"])\n        self.assertEqual(\"keep_raw\", api_input[\"FailStrategy\"])\n        self.assertEqual(5000, api_input[\"TimeoutMs\"])\n        self.assertEqual(10, api_input[\"MaxQps\"])\n\n\nif __name__ == \"__main__\":  # pragma: no cover\n    unittest.main()\n\n"
  },
  {
    "path": "volcengine/tls/test/producer_split_unit_test.py",
    "content": "import threading\nimport unittest\n\nfrom volcengine.tls.producer.producer import TLSProducer\nfrom volcengine.tls.producer.producer_model import BatchLog\nfrom volcengine.tls.producer.producer_model import ProducerConfig\nfrom volcengine.tls.tls_exception import TLSException\nfrom volcengine.tls.tls_requests import PutLogsV2LogContent\nfrom volcengine.tls.log_pb2 import LogGroup, Log\n\n\nclass _CaptureDispatcher:\n    def __init__(self):\n        self.lock = threading.Lock()\n        self.groups = []\n\n    def add_batch(self, hash_key, topic_id, source, filename, log_group, callback):\n        with self.lock:\n            self.groups.append(log_group)\n\n\nclass ProducerSplitUnitTest(unittest.TestCase):\n    def _new_producer(self):\n        config = ProducerConfig(\"endpoint\", \"region\", \"ak\", \"sk\", None)\n        producer = TLSProducer(config)\n        producer.dispatcher = _CaptureDispatcher()\n        return producer\n\n    def test_split_by_count(self):\n        producer = self._new_producer()\n        logs = [PutLogsV2LogContent(time=1, log_dict={\"k\": \"v\"}) for _ in range(25000)]\n        producer.send_logs_v2(None, \"topic\", None, None, logs, None)\n\n        groups = producer.dispatcher.groups\n        self.assertEqual(3, len(groups))\n        self.assertEqual(10000, len(getattr(groups[0], \"logs\")))\n        self.assertEqual(10000, len(getattr(groups[1], \"logs\")))\n        self.assertEqual(5000, len(getattr(groups[2], \"logs\")))\n        for g in groups:\n            self.assertLessEqual(len(getattr(g, \"logs\")), ProducerConfig.MAX_LOG_GROUP_COUNT)\n            self.assertLessEqual(len(g.SerializeToString()), ProducerConfig.MAX_BATCH_SIZE)\n\n    def test_split_by_size(self):\n        producer = self._new_producer()\n        value = \"a\" * (2 * 1024 * 1024)\n        logs = [PutLogsV2LogContent(time=1, log_dict={\"k\": value}) for _ in range(10)]\n        producer.send_logs_v2(None, \"topic\", None, None, logs, None)\n        groups = producer.dispatcher.groups\n        self.assertGreater(len(groups), 1)\n        for g in groups:\n            self.assertLessEqual(len(g.SerializeToString()), ProducerConfig.MAX_BATCH_SIZE)\n\n    def test_concurrent_produce_never_exceeds_max_size(self):\n        producer = self._new_producer()\n\n        def worker():\n            for _ in range(200):\n                producer.send_log_v2(None, \"topic\", None, None, PutLogsV2LogContent(time=1, log_dict={\"k\": \"v\"}), None)\n\n        threads = [threading.Thread(target=worker) for _ in range(10)]\n        for th in threads:\n            th.start()\n        for th in threads:\n            th.join()\n\n        groups = producer.dispatcher.groups\n        self.assertGreater(len(groups), 0)\n        for g in groups:\n            self.assertLessEqual(len(g.SerializeToString()), ProducerConfig.MAX_BATCH_SIZE)\n\n    def test_single_log_exceeds_max_size_raises(self):\n        producer = self._new_producer()\n        value = \"a\" * (ProducerConfig.MAX_BATCH_SIZE + 1024)\n        with self.assertRaises(TLSException):\n            producer.send_log_v2(None, \"topic\", None, None, PutLogsV2LogContent(time=1, log_dict={\"k\": value}), None)\n\n    def test_batch_log_group_list_count_never_exceeds_32768(self):\n        config = ProducerConfig(\"endpoint\", \"region\", \"ak\", \"sk\", None)\n        config.max_batch_count = ProducerConfig.MAX_BATCH_COUNT\n        config.max_batch_size_bytes = ProducerConfig.MAX_BATCH_SIZE\n\n        key = BatchLog.BatchKey(\"\", \"topic\", \"\", \"\")\n        groups = []\n        for _ in range(6):\n            g = LogGroup()\n            for _ in range(10000):\n                getattr(g, \"logs\").append(Log())\n            groups.append(g)\n\n        batches = []\n        current = BatchLog(key, config)\n        for g in groups:\n            added = current.try_add(g, len(g.SerializeToString()), None)\n            if not added:\n                self.assertLessEqual(current.current_batch_count, ProducerConfig.MAX_BATCH_COUNT)\n                batches.append(current)\n                current = BatchLog(key, config)\n                self.assertTrue(current.try_add(g, len(g.SerializeToString()), None))\n        batches.append(current)\n\n        self.assertGreater(len(batches), 1)\n        total = 0\n        for b in batches:\n            self.assertLessEqual(b.current_batch_count, ProducerConfig.MAX_BATCH_COUNT)\n            total += b.current_batch_count\n        self.assertEqual(60000, total)\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/producer_test.py",
    "content": "# coding=utf-8\nimport os\nimport random\nimport string\nimport time\nimport unittest\nimport uuid\n\nfrom volcengine.tls import tls_requests\nfrom volcengine.tls.consumer.consumer import LogProcessor, TLSConsumer\nfrom volcengine.tls.consumer.consumer_model import ConsumerConfig\nfrom volcengine.tls.log_pb2 import LogGroupList\nfrom volcengine.tls.producer.producer import TLSProducer\nfrom volcengine.tls.producer.producer_model import ProducerConfig, CallBack\nfrom volcengine.tls.test.util_test import NewTLSService\nfrom volcengine.tls.tls_requests import PutLogsV2LogContent\n\nconsume_count = 0\nproduce_success_count = 0\nproduce_failed_count = 0\n\n\nclass TestLogProcessor(LogProcessor):\n    def process(self, topic_id: str, shard_id: int, log_group_list: LogGroupList):\n        print(topic_id + \" --- \" + str(shard_id))\n        global consume_count\n        for log_group in log_group_list.log_groups:\n            for log in log_group.logs:\n                consume_count += 1\n        print(\"*** Count = {} ***\".format(consume_count))\n\n\nclass MyCallBack(CallBack):\n    def __init__(self, logs: list[PutLogsV2LogContent]):\n        self.logs = logs\n\n    def on_complete(self, result: 'Result'):\n        global produce_success_count\n        global produce_failed_count\n        if result.success:\n            produce_success_count += len(self.logs)\n        else:\n            produce_failed_count += len(self.logs)\n\n\nclass TestTLSProducerService(unittest.TestCase):\n    cli = None\n\n    project_id = \"\"\n    project_name = \"python-sdk-producer-test-project\" + uuid.uuid4().hex\n    topic_id = \"\"\n    topic_name = \"python-sdk-producer-test-topic\" + uuid.uuid4().hex\n    timestamp = str(int(time.time()) - 1)\n\n    @classmethod\n    def setUpClass(cls):\n        required_env = [\"VOLCENGINE_ENDPOINT\", \"VOLCENGINE_REGION\", \"VOLCENGINE_ACCESS_KEY_ID\", \"VOLCENGINE_ACCESS_KEY_SECRET\"]\n        if not all(os.environ.get(k) for k in required_env):\n            raise unittest.SkipTest(\"缺少必要的环境变量，跳过 TLS producer 集成测试\")\n\n        # 创建 TLSService 客户端\n        cls.cli = NewTLSService()\n\n        # 创建project\n        create_project_request = tls_requests.CreateProjectRequest(\n            project_name=cls.project_name,\n            region=os.environ.get(\"VOLCENGINE_REGION\", \"\"),\n        )\n        create_project_response = cls.cli.create_project(create_project_request)\n        cls.assertTrue(create_project_response.project_id, \"create project failed\")\n        cls.project_id = create_project_response.project_id\n\n        # 创建topic\n        create_topic_request = tls_requests.CreateTopicRequest(\n            project_id=cls.project_id,\n            topic_name=cls.topic_name,\n            ttl=1,\n            shard_count=1,\n        )\n        create_topic_response = cls.cli.create_topic(create_topic_request)\n        cls.assertTrue(create_topic_response.topic_id, \"create topic failed\")\n        cls.topic_id = create_topic_response.topic_id\n        pass\n\n    @classmethod\n    def tearDownClass(cls):\n        # 删除topic\n        delete_topic_request = tls_requests.DeleteTopicRequest(topic_id=cls.topic_id)\n        delete_topic_response = cls.cli.delete_topic(delete_topic_request)\n        cls.assertTrue(delete_topic_response.request_id, \"delete topic failed\")\n\n        # 删除project\n        delete_project_request = tls_requests.DeleteProjectRequest(project_id=cls.project_id)\n        delete_project_response = cls.cli.delete_project(delete_project_request)\n        cls.assertTrue(delete_project_response.request_id, \"delete project failed\")\n\n    def setUp(self):\n        pass\n\n    def tearDown(self):\n        pass\n\n    def test_producer_and_consumer(self):\n        # 创建producer\n        producer_config = ProducerConfig(\n            endpoint=os.environ.get(\"VOLCENGINE_ENDPOINT\", \"\"),\n            access_key=os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"\"),\n            access_secret=os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"\"),\n            region=os.environ.get(\"VOLCENGINE_REGION\", \"\"),\n        )\n        producer_config.total_size_in_bytes = 10 * 1024 * 1024\n        tls_producer = TLSProducer(producer_config)\n        tls_producer.start()\n\n        size = 5 * 1024\n        large_string = ''.join(random.choices(string.ascii_letters + string.digits, k=size))\n\n        for i in range(100):\n            logs = [tls_requests.PutLogsV2LogContent(\n                log_dict={\n                    \"key\": \"key-\" + str(i),\n                    \"value\": large_string + str(i)\n                },\n                time=int(time.time()) - 300\n            ), tls_requests.PutLogsV2LogContent(\n                log_dict={\n                    \"key\": \"key1-\" + str(i),\n                    \"value\": large_string + str(i)\n                },\n                time=int(time.time()) - 300\n            )]\n            callback = MyCallBack(logs)\n            tls_producer.send_logs_v2(\"\", self.topic_id, \"python-sdk-local\", \"test.log\",\n                                      logs, callback)\n        tls_producer.close()\n        tls_producer.close()\n        print(\"*****produce success count: \" + str(produce_success_count))\n        print(\"*****produce failed count: \" + str(produce_failed_count))\n\n        # 配置消费组的必填参数，ConsumerConfig构造函数设定了一些默认参数，您也可根据需要自定义配置\n        consumer_config = ConsumerConfig(\n            project_id=self.project_id,\n            consumer_group_name=\"python-consumer-group-1\",\n            consumer_name=\"python-consumer-1\",\n            topic_id_list=[self.topic_id],\n            consume_from=self.timestamp,\n        )\n        tls_consumer = TLSConsumer(consumer_config, self.cli, TestLogProcessor())\n\n        # 调用start方法开始持续消费\n        tls_consumer.start()\n\n        # 可通过调用tls_consumer.stop()来结束消费组消费\n        time.sleep(60)\n        tls_consumer.stop()\n        print(\"consume count: \" + str(consume_count))\n"
  },
  {
    "path": "volcengine/tls/test/put_logs_test.py",
    "content": "# coding=utf-8\nimport os\nimport time\nimport unittest\nimport uuid\n\nfrom volcengine.tls import tls_requests\nfrom volcengine.tls.test.util_test import NewTLSService\nfrom volcengine.tls.tls_responses import PutLogsResponse, DescribeCursorResponse, ConsumeLogsResponse\n\n\nclass TestPutLogs(unittest.TestCase):\n\n    cli = None\n\n    project_id = \"\"\n    project_name = \"python-sdk-consumer-test-project\" + uuid.uuid4().hex\n    topic_id = \"\"\n    topic_name = \"python-sdk-consumer-test-topic\" + uuid.uuid4().hex\n\n    @classmethod\n    def setUpClass(cls):\n        required_env = [\"VOLCENGINE_ENDPOINT\", \"VOLCENGINE_REGION\", \"VOLCENGINE_ACCESS_KEY_ID\", \"VOLCENGINE_ACCESS_KEY_SECRET\"]\n        if not all(os.environ.get(k) for k in required_env):\n            raise unittest.SkipTest(\"缺少必要的环境变量，跳过 TLS PutLogs 集成测试\")\n\n        cls.cli = NewTLSService()\n\n        # 创建project\n        create_project_request = tls_requests.CreateProjectRequest(\n            project_name=cls.project_name,\n            region=os.environ.get(\"VOLCENGINE_REGION\", \"\"),\n        )\n        create_project_response = cls.cli.create_project(create_project_request)\n        cls.assertTrue(create_project_response.project_id, \"create project failed\")\n        cls.project_id = create_project_response.project_id\n\n        # 创建topic\n        create_topic_request = tls_requests.CreateTopicRequest(\n            project_id=cls.project_id,\n            topic_name=cls.topic_name,\n            ttl=1,\n            shard_count=1,\n        )\n        create_topic_response = cls.cli.create_topic(create_topic_request)\n        cls.assertTrue(create_topic_response.topic_id, \"create topic failed\")\n        cls.topic_id = create_topic_response.topic_id\n\n    @classmethod\n    def tearDownClass(cls):\n        # 删除topic\n        delete_topic_request = tls_requests.DeleteTopicRequest(topic_id=cls.topic_id)\n        delete_topic_response = cls.cli.delete_topic(delete_topic_request)\n        cls.assertTrue(delete_topic_response.request_id, \"delete topic failed\")\n\n        # 删除project\n        delete_project_request = tls_requests.DeleteProjectRequest(project_id=cls.project_id)\n        delete_project_response = cls.cli.delete_project(delete_project_request)\n        cls.assertTrue(delete_project_response.request_id, \"delete project failed\")\n\n    def setUp(self):\n        pass\n\n    def tearDown(self):\n        pass\n\n    def test_put_logs_v2(self):\n\n        num = 100\n        time_start = int(time.time())\n\n        logGroup = tls_requests.PutLogsV2Logs(source=\"python-sdk-local\", filename=\"test.log\")\n        for i in range(num):\n            logGroup.add_log(\n                contents={\n                    \"key\": \"key-\" + str(i),\n                    \"value\": \"test-message\" + str(i)\n                },\n                log_time=time_start + i\n            )\n\n        logGroup.add_log(\n            contents={\n                \"key\": \"key-\" + str(num),\n                \"value\": \"test-message\" + str(num),\n            },\n            log_time=0\n        )\n\n        response: PutLogsResponse = self.cli.put_logs_v2(tls_requests.PutLogsV2Request(self.topic_id, logGroup))\n        self.assertIsNotNone(response.get_request_id())\n\n        describe_cursor_response: DescribeCursorResponse = self.cli.describe_cursor(tls_requests.DescribeCursorRequest(\n            topic_id=self.topic_id,\n            shard_id=0,\n            from_time=\"begin\",\n        ))\n        self.assertIsNotNone(response.get_request_id())\n\n        consume_logs_response: ConsumeLogsResponse = self.cli.consume_logs(tls_requests.ConsumeLogsRequest(\n            self.topic_id,\n            shard_id=0,\n            cursor=describe_cursor_response.get_cursor(),\n        ))\n\n        self.assertEqual(1, consume_logs_response.get_x_tls_count())\n\n        log_group_list = consume_logs_response.get_pb_message()\n\n        count = 0\n\n        for log_group in log_group_list.log_groups:  # pylint: disable=no-member\n            for log in log_group.logs:\n\n                if log.time < int(1e10):\n                    self.assertLessEqual(time_start, log.time)\n                    self.assertGreaterEqual(time_start+num-1, log.time)\n                else:\n                    self.assertLessEqual(time_start * 1000, log.time)\n                    self.assertGreaterEqual((time_start+num-1) * 1000, log.time)\n\n                count += 1\n\n        self.assertEqual(num+1, count)\n"
  },
  {
    "path": "volcengine/tls/test/put_logs_validation_unit_test.py",
    "content": "import unittest\n\nfrom volcengine.tls.log_pb2 import LogGroupList, LogGroup, Log\nfrom volcengine.tls.tls_requests import PutLogsRequest\n\n\nclass PutLogsValidationUnitTest(unittest.TestCase):\n    def _make_group(self, count):\n        group = LogGroup()\n        for _ in range(count):\n            getattr(group, \"logs\").append(Log())\n        return group\n\n    def test_log_group_count_validation(self):\n        log_group_list = LogGroupList()\n        getattr(log_group_list, \"log_groups\").append(self._make_group(10000))\n        request = PutLogsRequest(\"topic\", log_group_list)\n        self.assertTrue(request.check_validation())\n\n        log_group_list = LogGroupList()\n        getattr(log_group_list, \"log_groups\").append(self._make_group(10001))\n        request = PutLogsRequest(\"topic\", log_group_list)\n        self.assertFalse(request.check_validation())\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/schedule_sql_task_test.py",
    "content": "# coding=utf-8\nimport os\nimport time\nimport unittest\nimport uuid\n\nfrom volcengine.tls import tls_requests\nfrom volcengine.tls.test.util_test import NewTLSService\n\n\nclass TestScheduleSqlTask(unittest.TestCase):\n\n    cli = NewTLSService()\n\n    project_id = \"\"\n    project_name = \"python-sdk-schedule-sql-test-project\" + uuid.uuid4().hex[:16]\n    source_topic_id = \"\"\n    source_topic_name = \"python-sdk-schedule-sql-source-topic\" + uuid.uuid4().hex[:16]\n    dest_topic_id = \"\"\n    dest_topic_name = \"python-sdk-schedule-sql-dest-topic\" + uuid.uuid4().hex[:16]\n\n    @classmethod\n    def setUpClass(cls):\n        # 创建project\n        region = os.environ.get(\"VOLCENGINE_REGION\")\n        if not region:\n            raise unittest.SkipTest(\"Missing required environment variable VOLCENGINE_REGION\")\n        create_project_request = tls_requests.CreateProjectRequest(\n            project_name=cls.project_name,\n            region=region,\n        )\n        create_project_response = cls.cli.create_project(create_project_request)\n        cls.assertTrue(create_project_response.project_id, \"create project failed\")\n        cls.project_id = create_project_response.project_id\n\n        # 创建源topic\n        create_source_topic_request = tls_requests.CreateTopicRequest(\n            project_id=cls.project_id,\n            topic_name=cls.source_topic_name,\n            ttl=1,\n            shard_count=1,\n        )\n        create_source_topic_response = cls.cli.create_topic(create_source_topic_request)\n        cls.assertTrue(create_source_topic_response.topic_id, \"create source topic failed\")\n        cls.source_topic_id = create_source_topic_response.topic_id\n\n        # 创建目标topic\n        create_dest_topic_request = tls_requests.CreateTopicRequest(\n            project_id=cls.project_id,\n            topic_name=cls.dest_topic_name,\n            ttl=1,\n            shard_count=1,\n        )\n        create_dest_topic_response = cls.cli.create_topic(create_dest_topic_request)\n        cls.assertTrue(create_dest_topic_response.topic_id, \"create dest topic failed\")\n        cls.dest_topic_id = create_dest_topic_response.topic_id\n\n        # 为源主题创建索引\n        create_index_request = tls_requests.CreateIndexRequest(\n            topic_id=cls.source_topic_id,\n            full_text=tls_requests.FullTextInfo(\n                delimiter=\",; \",\n                case_sensitive=False,\n                include_chinese=False,\n            ),\n        )\n        create_index_response = cls.cli.create_index(create_index_request)\n        cls.assertTrue(create_index_response.request_id, \"create index failed\")\n\n    @classmethod\n    def tearDownClass(cls):\n        # 删除目标topic\n        delete_dest_topic_request = tls_requests.DeleteTopicRequest(topic_id=cls.dest_topic_id)\n        delete_dest_topic_response = cls.cli.delete_topic(delete_dest_topic_request)\n        cls.assertTrue(delete_dest_topic_response.request_id, \"delete dest topic failed\")\n\n        # 删除源topic\n        delete_source_topic_request = tls_requests.DeleteTopicRequest(topic_id=cls.source_topic_id)\n        delete_source_topic_response = cls.cli.delete_topic(delete_source_topic_request)\n        cls.assertTrue(delete_source_topic_response.request_id, \"delete source topic failed\")\n\n        # 删除project\n        delete_project_request = tls_requests.DeleteProjectRequest(project_id=cls.project_id)\n        delete_project_response = cls.cli.delete_project(delete_project_request)\n        cls.assertTrue(delete_project_response.request_id, \"delete project failed\")\n\n    def setUp(self):\n        pass\n\n    def tearDown(self):\n        pass\n\n    def test_create_schedule_sql_task(self):\n        # 创建定时SQL任务\n        current_time = int(time.time())\n        task_name = f\"python-sdk-test-schedule-task-{uuid.uuid4().hex}\"\n        create_schedule_sql_task_request = tls_requests.CreateScheduleSqlTaskRequest(\n            task_name=task_name,\n            topic_id=self.source_topic_id,\n            dest_topic_id=self.dest_topic_id,\n            process_start_time=current_time + 3600,  # 1小时后开始\n            process_time_window=\"@m-15m,@m\",\n            query=\"* | select count(*) as count\",\n            request_cycle=tls_requests.RequestCycle(\n                cycle_type=\"Period\",\n                time=60,  # 每60分钟执行一次\n            ),\n            status=0,  # 关闭任务，后续需手动启动\n            description=\"测试定时SQL任务\",\n            process_sql_delay=60,\n        )\n\n        create_schedule_sql_task_response = self.cli.create_schedule_sql_task(\n            create_schedule_sql_task_request)\n        self.assertIsNotNone(create_schedule_sql_task_response.get_task_id(),\n                              \"create schedule sql task failed\")\n        self.assertTrue(create_schedule_sql_task_response.get_task_id(),\n                        \"task_id should not be empty\")\n\n    def test_create_schedule_sql_task_request_body(self):\n        \"\"\"验证 CreateScheduleSqlTaskRequest.get_api_input 的字段结构\"\"\"\n        current_time = int(time.time())\n        task_name = f\"python-sdk-test-schedule-body-{uuid.uuid4().hex}\"\n        request_cycle = tls_requests.RequestCycle(\n            cycle_type=\"Period\",\n            time=5,\n        )\n\n        request = tls_requests.CreateScheduleSqlTaskRequest(\n            task_name=task_name,\n            topic_id=\"4a9bd4bd-53f1-43ff-b88a-64ee1be5****\",\n            dest_topic_id=\"2a9bd4bd-53f1-43ff-b88a-64ee1be5****\",\n            process_start_time=current_time,\n            process_time_window=\"@m-15m,@m\",\n            query=\"* | select count(*) as count\",\n            request_cycle=request_cycle,\n            status=1,\n        )\n\n        self.assertTrue(request.check_validation())\n\n        body = request.get_api_input()\n\n        # 顶层字段键名与服务端 JSON tag 对齐\n        self.assertEqual(body[\"TaskName\"], task_name)\n        self.assertIn(\"TopicID\", body)\n        self.assertIn(\"DestTopicID\", body)\n        self.assertEqual(body[\"Status\"], 1)\n        self.assertEqual(body[\"ProcessStartTime\"], current_time)\n        self.assertEqual(body[\"ProcessTimeWindow\"], \"@m-15m,@m\")\n        self.assertEqual(body[\"Query\"], \"* | select count(*) as count\")\n\n        # RequestCycle 嵌套结构校验\n        self.assertIn(\"RequestCycle\", body)\n        request_cycle_body = body[\"RequestCycle\"]\n        self.assertEqual(request_cycle_body[\"Type\"], \"Period\")\n        self.assertEqual(request_cycle_body[\"Time\"], 5)\n        self.assertNotIn(\"CronTab\", request_cycle_body)\n        self.assertNotIn(\"CronTimeZone\", request_cycle_body)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/shipper_test.py",
    "content": "# coding: utf-8\n\"\"\"Unit tests for TLS Shipper functionality (DeleteShipper / ModifyShipper).\n\n本文件仅关注请求体结构与 TLSService 调用参数，不依赖真实后端环境。\n\"\"\"\n\nimport os\nimport unittest\nfrom unittest.mock import Mock, patch\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import (\n    DeleteShipperRequest,\n    ModifyShipperRequest,\n)\nfrom volcengine.tls.tls_responses import DeleteShipperResponse, ModifyShipperResponse\nfrom volcengine.tls.data import ContentInfo, JsonInfo, TosShipperInfo, KafkaShipperInfo, CsvInfo\n\n\nclass TestDeleteShipper(unittest.TestCase):\n    \"\"\"DeleteShipper 相关单元测试。\"\"\"\n\n    def setUp(self):\n        self.endpoint = os.environ.get(\n            \"VOLCENGINE_ENDPOINT\", \"https://tls-cn-beijing.ivolces.com\"\n        )\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"test-ak\")\n        self.access_key_secret = os.environ.get(\n            \"VOLCENGINE_ACCESS_KEY_SECRET\", \"test-sk\"\n        )\n\n        self.tls_service = TLSService(\n            self.endpoint,\n            self.access_key_id,\n            self.access_key_secret,\n            self.region,\n        )\n\n    def test_delete_shipper_request_validation(self):\n        \"\"\"测试 DeleteShipperRequest.check_validation 仅校验非 None。\"\"\"\n        # 合法 shipper_id\n        valid_request = DeleteShipperRequest(shipper_id=\"test-shipper-123\")\n        self.assertTrue(valid_request.check_validation())\n\n        # shipper_id 为 None 判定为非法\n        invalid_request = DeleteShipperRequest(shipper_id=None)\n        self.assertFalse(invalid_request.check_validation())\n\n    def test_delete_shipper_request_api_input(self):\n        \"\"\"测试 DeleteShipperRequest.get_api_input 顶层键名。\"\"\"\n        shipper_id = \"test-shipper-456\"\n        request = DeleteShipperRequest(shipper_id=shipper_id)\n        api_input = request.get_api_input()\n\n        # 应将 shipper_id 转换为 ShipperId\n        self.assertIn(\"ShipperId\", api_input)\n        self.assertEqual(api_input[\"ShipperId\"], shipper_id)\n\n    @patch(\"volcengine.tls.TLSService.TLSService._TLSService__request\")\n    def test_delete_shipper_service_call(self, mock_request):\n        \"\"\"测试 TLSService.delete_shipper 调用的 API 名称与请求体结构。\"\"\"\n        mock_response = Mock()\n        mock_response.headers = {\n            \"X-Tls-Requestid\": \"test-request-id\",\n            \"Content-Type\": \"application/json\",\n        }\n        mock_response.text = \"{}\"\n        mock_request.return_value = mock_response\n\n        request = DeleteShipperRequest(shipper_id=\"shipper-123\")\n        response = self.tls_service.delete_shipper(request)\n\n        mock_request.assert_called_once_with(\n            api=\"/DeleteShipper\", body={\"ShipperId\": \"shipper-123\"}\n        )\n        self.assertIsInstance(response, DeleteShipperResponse)\n        self.assertEqual(response.get_request_id(), \"test-request-id\")\n\n\nclass TestModifyShipper(unittest.TestCase):\n    \"\"\"ModifyShipper 相关单元测试。\"\"\"\n\n    def setUp(self):\n        self.endpoint = os.environ.get(\n            \"VOLCENGINE_ENDPOINT\", \"https://tls-cn-beijing.ivolces.com\"\n        )\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"test-ak\")\n        self.access_key_secret = os.environ.get(\n            \"VOLCENGINE_ACCESS_KEY_SECRET\", \"test-sk\"\n        )\n\n        self.tls_service = TLSService(\n            self.endpoint,\n            self.access_key_id,\n            self.access_key_secret,\n            self.region,\n        )\n\n    def test_modify_shipper_validation(self):\n        \"\"\"测试 ModifyShipperRequest.check_validation 仅校验 ShipperId 非空。\"\"\"\n        invalid_request = ModifyShipperRequest(\n            shipper_id=None,\n            shipper_name=\"test-shipper\",\n        )\n        self.assertFalse(invalid_request.check_validation())\n\n        valid_request = ModifyShipperRequest(shipper_id=\"test-shipper-id\")\n        self.assertTrue(valid_request.check_validation())\n\n    def test_modify_shipper_api_input_tos_with_trn_and_time(self):\n        \"\"\"测试 ModifyShipperRequest TOS 配置下的请求体结构、Trn 与时间字段。\"\"\"\n        content_info = ContentInfo(\n            format=\"json\",\n            json_info=JsonInfo(enable=True, keys=[\"field1\", \"field2\"], escape=False),\n        )\n\n        tos_shipper_info = TosShipperInfo(\n            prefix=\"test-prefix\",\n            max_size=10,\n            compress=\"gzip\",\n            interval=600,\n            partition_format=\"%Y/%m/%d\",\n        )\n\n        modify_shipper_request = ModifyShipperRequest(\n            shipper_id=\"test-shipper-id\",\n            shipper_name=\"test-shipper-name\",\n            shipper_type=\"tos\",\n            status=True,\n            content_info=content_info,\n            tos_shipper_info=tos_shipper_info,\n            shipper_start_time=1111111111111,\n            shipper_end_time=2222222222222,\n            role_trn=\"trn:iam::123456789012:role/test-role\",\n            service_trn=\"trn:iam::123456789012:role/service-role\",\n        )\n\n        api_input = modify_shipper_request.get_api_input()\n\n        # 顶层字段\n        self.assertEqual(api_input[\"ShipperId\"], \"test-shipper-id\")\n        self.assertEqual(api_input[\"ShipperName\"], \"test-shipper-name\")\n        self.assertEqual(api_input[\"ShipperType\"], \"tos\")\n        self.assertEqual(api_input[\"Status\"], True)\n        self.assertEqual(api_input[\"RoleTrn\"], \"trn:iam::123456789012:role/test-role\")\n        self.assertEqual(\n            api_input[\"ServiceTrn\"], \"trn:iam::123456789012:role/service-role\"\n        )\n        self.assertEqual(api_input[\"ShipperStartTime\"], 1111111111111)\n        self.assertEqual(api_input[\"ShipperEndTime\"], 2222222222222)\n\n        # ContentInfo 嵌套结构\n        self.assertIn(\"ContentInfo\", api_input)\n        content_info_data = api_input[\"ContentInfo\"]\n        self.assertEqual(content_info_data[\"Format\"], \"json\")\n        self.assertIn(\"JsonInfo\", content_info_data)\n        json_info_data = content_info_data[\"JsonInfo\"]\n        self.assertEqual(json_info_data[\"Enable\"], True)\n        self.assertEqual(json_info_data[\"Keys\"], [\"field1\", \"field2\"])\n        self.assertEqual(json_info_data[\"Escape\"], False)\n\n        # TOS ShipperInfo 嵌套结构\n        self.assertIn(\"TosShipperInfo\", api_input)\n        tos_info_data = api_input[\"TosShipperInfo\"]\n        self.assertEqual(tos_info_data[\"Prefix\"], \"test-prefix\")\n        self.assertEqual(tos_info_data[\"MaxSize\"], 10)\n        self.assertEqual(tos_info_data[\"Compress\"], \"gzip\")\n        self.assertEqual(tos_info_data[\"Interval\"], 600)\n        self.assertEqual(tos_info_data[\"PartitionFormat\"], \"%Y/%m/%d\")\n\n    def test_modify_shipper_csv_content(self):\n        \"\"\"测试 ModifyShipperRequest 在 CSV 内容格式下的 ContentInfo 序列化。\"\"\"\n        csv_info = CsvInfo(\n            keys=[\"field1\", \"field2\", \"field3\"],\n            delimiter=\",\",\n            escape_char=\"\\\\\",\n            print_header=True,\n            non_field_content=\"N/A\",\n        )\n\n        content_info = ContentInfo(\n            format=\"csv\",\n            csv_info=csv_info,\n        )\n\n        modify_shipper_request = ModifyShipperRequest(\n            shipper_id=\"test-shipper-id\",\n            content_info=content_info,\n        )\n\n        api_input = modify_shipper_request.get_api_input()\n\n        self.assertIn(\"ContentInfo\", api_input)\n        content_info_data = api_input[\"ContentInfo\"]\n        self.assertEqual(content_info_data[\"Format\"], \"csv\")\n        self.assertIn(\"CsvInfo\", content_info_data)\n        csv_info_data = content_info_data[\"CsvInfo\"]\n        self.assertEqual(csv_info_data[\"Keys\"], [\"field1\", \"field2\", \"field3\"])\n        self.assertEqual(csv_info_data[\"Delimiter\"], \",\")\n        self.assertEqual(csv_info_data[\"EscapeChar\"], \"\\\\\")\n        self.assertEqual(csv_info_data[\"PrintHeader\"], True)\n        self.assertEqual(csv_info_data[\"NonFieldContent\"], \"N/A\")\n\n    def test_modify_shipper_kafka_content(self):\n        \"\"\"测试 ModifyShipperRequest 中 KafkaShipperInfo 序列化。\"\"\"\n        kafka_shipper_info = KafkaShipperInfo(\n            instance=\"kafka-instance-123\",\n            kafka_topic=\"test-topic\",\n            compress=\"lz4\",\n            start_time=1640995200000,  # 2022-01-01 00:00:00 UTC\n            end_time=1643673600000,  # 2022-02-01 00:00:00 UTC\n        )\n\n        modify_shipper_request = ModifyShipperRequest(\n            shipper_id=\"test-shipper-id\",\n            shipper_type=\"kafka\",\n            kafka_shipper_info=kafka_shipper_info,\n        )\n\n        api_input = modify_shipper_request.get_api_input()\n\n        self.assertIn(\"KafkaShipperInfo\", api_input)\n        kafka_info_data = api_input[\"KafkaShipperInfo\"]\n        self.assertEqual(kafka_info_data[\"Instance\"], \"kafka-instance-123\")\n        self.assertEqual(kafka_info_data[\"KafkaTopic\"], \"test-topic\")\n        self.assertEqual(kafka_info_data[\"Compress\"], \"lz4\")\n        self.assertEqual(kafka_info_data[\"StartTime\"], 1640995200000)\n        self.assertEqual(kafka_info_data[\"EndTime\"], 1643673600000)\n\n    @patch(\"volcengine.tls.TLSService.TLSService._TLSService__request\")\n    def test_modify_shipper_service_call(self, mock_request):\n        \"\"\"测试 TLSService.modify_shipper 调用的 API 名称与请求体结构。\"\"\"\n        content_info = ContentInfo(\n            format=\"json\",\n            json_info=JsonInfo(enable=True),\n        )\n        tos_shipper_info = TosShipperInfo(\n            prefix=\"test-prefix\",\n            max_size=5,\n            compress=\"snappy\",\n            interval=300,\n            partition_format=\"%Y/%m/%d/%H/%M\",\n        )\n\n        request = ModifyShipperRequest(\n            shipper_id=\"shipper-123\",\n            shipper_name=\"shipper-name\",\n            shipper_type=\"tos\",\n            status=True,\n            content_info=content_info,\n            tos_shipper_info=tos_shipper_info,\n            role_trn=\"trn:iam::123456789012:role/test-role\",\n            service_trn=\"trn:iam::123456789012:role/service-role\",\n        )\n\n        mock_response = Mock()\n        mock_response.headers = {\n            \"X-Tls-Requestid\": \"test-request-id\",\n            \"Content-Type\": \"application/json\",\n        }\n        mock_response.text = \"{}\"\n        mock_request.return_value = mock_response\n\n        response = self.tls_service.modify_shipper(request)\n\n        expected_body = request.get_api_input()\n        mock_request.assert_called_once_with(api=\"/ModifyShipper\", body=expected_body)\n        self.assertIsInstance(response, ModifyShipperResponse)\n        self.assertEqual(response.get_request_id(), \"test-request-id\")\n\n\nif __name__ == \"__main__\":  # pragma: no cover\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/tag_resources_test.py",
    "content": "# coding=utf-8\n\n\"\"\"Unit tests for TagResources request and TLSService integration (without real backend).\n\n本文件仅关注请求体结构与 TLSService 调用参数，不依赖真实后端环境。\n\"\"\"\n\nimport os\nimport unittest\nfrom unittest.mock import Mock, patch\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import TagResourcesRequest\nfrom volcengine.tls.tls_responses import TagResourcesResponse\nfrom volcengine.tls.data import TagInfo\n\n\nclass TestTagResources(unittest.TestCase):\n    \"\"\"测试 TagResourcesRequest 与 TLSService.tag_resources 的请求体结构\"\"\"\n\n    def setUp(self):\n        # 使用本地默认配置构造 TLSService，避免依赖真实环境变量和后端\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"https://tls-cn-beijing.ivolces.com\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"test-ak\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"test-sk\")\n\n        self.tls_service = TLSService(\n            self.endpoint,\n            self.access_key_id,\n            self.access_key_secret,\n            self.region,\n        )\n\n    def test_tag_resources_request_validation(self):\n        \"\"\"测试 TagResourcesRequest.check_validation 参数校验\"\"\"\n        # 正常情况\n        request = TagResourcesRequest(\n            resource_type=\"project\",\n            resources_ids=[\"project-123\"],\n            tags=[TagInfo(key=\"env\", value=\"test\")],\n        )\n        self.assertTrue(request.check_validation())\n\n        # 缺少 resource_type\n        request = TagResourcesRequest(\n            resource_type=None,\n            resources_ids=[\"project-123\"],\n            tags=[TagInfo(key=\"env\", value=\"test\")],\n        )\n        self.assertFalse(request.check_validation())\n\n        # 缺少 resources_ids\n        request = TagResourcesRequest(\n            resource_type=\"project\",\n            resources_ids=None,\n            tags=[TagInfo(key=\"env\", value=\"test\")],\n        )\n        self.assertFalse(request.check_validation())\n\n        # 缺少 tags\n        request = TagResourcesRequest(\n            resource_type=\"project\",\n            resources_ids=[\"project-123\"],\n            tags=None,\n        )\n        self.assertFalse(request.check_validation())\n\n    def test_tag_resources_request_api_input(self):\n        \"\"\"测试 TagResourcesRequest.get_api_input 顶层键名与 Tags 结构\"\"\"\n        request = TagResourcesRequest(\n            resource_type=\"topic\",\n            resources_ids=[\"topic-123\", \"topic-456\"],\n            tags=[\n                TagInfo(key=\"k1\", value=\"v1\"),\n                TagInfo(key=\"k2\", value=\"v2\"),\n            ],\n        )\n\n        body = request.get_api_input()\n\n        # 顶层字段\n        self.assertEqual(body[\"ResourceType\"], \"topic\")\n        self.assertEqual(body[\"ResourcesIds\"], [\"topic-123\", \"topic-456\"])\n        self.assertIn(\"Tags\", body)\n        self.assertEqual(len(body[\"Tags\"]), 2)\n\n        first = body[\"Tags\"][0]\n        self.assertEqual(first[\"Key\"], \"k1\")\n        self.assertEqual(first[\"Value\"], \"v1\")\n\n        second = body[\"Tags\"][1]\n        self.assertEqual(second[\"Key\"], \"k2\")\n        self.assertEqual(second[\"Value\"], \"v2\")\n\n    @patch(\"volcengine.tls.TLSService.TLSService._TLSService__request\")\n    def test_tag_resources_service_call(self, mock_request):\n        \"\"\"测试 TLSService.tag_resources 调用时的 API 名称与请求体结构\"\"\"\n        # 模拟 HTTP 响应\n        mock_response = Mock()\n        mock_response.headers = {\n            \"X-Tls-Requestid\": \"test-request-id\",\n            \"Content-Type\": \"application/json\",\n        }\n        mock_response.text = \"{}\"\n        mock_request.return_value = mock_response\n\n        request = TagResourcesRequest(\n            resource_type=\"project\",\n            resources_ids=[\"project-123\"],\n            tags=[\n                TagInfo(key=\"env\", value=\"test\"),\n                TagInfo(key=\"owner\", value=\"alice\"),\n            ],\n        )\n\n        response = self.tls_service.tag_resources(request)\n\n        # 验证底层 __request 被正确调用\n        mock_request.assert_called_once_with(\n            api=\"/TagResources\",\n            body={\n                \"ResourceType\": \"project\",\n                \"ResourcesIds\": [\"project-123\"],\n                \"Tags\": [\n                    {\"Key\": \"env\", \"Value\": \"test\"},\n                    {\"Key\": \"owner\", \"Value\": \"alice\"},\n                ],\n            },\n        )\n\n        # 验证响应类型与 RequestId 解析\n        self.assertIsInstance(response, TagResourcesResponse)\n        self.assertEqual(response.get_request_id(), \"test-request-id\")\n\n\nif __name__ == \"__main__\":  # pragma: no cover\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/test_create_shipper.py",
    "content": "# coding=utf-8\n\"\"\"Unit tests for CreateShipper request and TLSService integration (without real backend).\n\n本文件仅关注 CreateShipper 请求体结构与 TLSService 调用参数，不依赖真实后端环境。\n\"\"\"\n\nimport os\nimport unittest\nfrom unittest.mock import Mock, patch\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import CreateShipperRequest\nfrom volcengine.tls.tls_responses import CreateShipperResponse\nfrom volcengine.tls.data import ContentInfo, JsonInfo, TosShipperInfo, KafkaShipperInfo\n\n\nclass TestCreateShipper(unittest.TestCase):\n    \"\"\"CreateShipper 相关单元测试。\"\"\"\n\n    def setUp(self):\n        # 使用本地默认配置构造 TLSService，避免依赖真实环境变量和后端\n        self.endpoint = os.environ.get(\n            \"VOLCENGINE_ENDPOINT\", \"https://tls-cn-beijing.ivolces.com\"\n        )\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"test-ak\")\n        self.access_key_secret = os.environ.get(\n            \"VOLCENGINE_ACCESS_KEY_SECRET\", \"test-sk\"\n        )\n\n        self.tls_service = TLSService(\n            self.endpoint,\n            self.access_key_id,\n            self.access_key_secret,\n            self.region,\n        )\n\n    def test_content_info_json_serialization(self):\n        \"\"\"测试 ContentInfo JSON 序列化结构与键名。\"\"\"\n        json_info = JsonInfo(enable=True, keys=[\"field1\", \"field2\"], escape=False)\n        content_info = ContentInfo(format=\"json\", json_info=json_info)\n\n        json_data = content_info.json()\n        self.assertEqual(json_data[\"Format\"], \"json\")\n        self.assertIn(\"JsonInfo\", json_data)\n        self.assertEqual(json_data[\"JsonInfo\"][\"Enable\"], True)\n        self.assertEqual(json_data[\"JsonInfo\"][\"Keys\"], [\"field1\", \"field2\"])\n        self.assertEqual(json_data[\"JsonInfo\"][\"Escape\"], False)\n\n    def test_tos_shipper_info_json_serialization(self):\n        \"\"\"测试 TosShipperInfo JSON 序列化结构与键名。\"\"\"\n        tos_info = TosShipperInfo(\n            bucket=\"test-bucket\",\n            prefix=\"logs/\",\n            max_size=100,\n            compress=\"gzip\",\n            interval=600,\n            partition_format=\"%Y/%m/%d\",\n        )\n\n        json_data = tos_info.json()\n        self.assertEqual(json_data[\"Bucket\"], \"test-bucket\")\n        self.assertEqual(json_data[\"Prefix\"], \"logs/\")\n        self.assertEqual(json_data[\"MaxSize\"], 100)\n        self.assertEqual(json_data[\"Compress\"], \"gzip\")\n        self.assertEqual(json_data[\"Interval\"], 600)\n        self.assertEqual(json_data[\"PartitionFormat\"], \"%Y/%m/%d\")\n\n    def test_kafka_shipper_info_json_serialization(self):\n        \"\"\"测试 KafkaShipperInfo JSON 序列化结构与键名。\"\"\"\n        kafka_info = KafkaShipperInfo(\n            instance=\"kafka-instance\",\n            kafka_topic=\"test-topic\",\n            compress=\"snappy\",\n            start_time=1234567890000,\n            end_time=1234567899999,\n        )\n\n        json_data = kafka_info.json()\n        self.assertEqual(json_data[\"Instance\"], \"kafka-instance\")\n        self.assertEqual(json_data[\"KafkaTopic\"], \"test-topic\")\n        self.assertEqual(json_data[\"Compress\"], \"snappy\")\n        self.assertEqual(json_data[\"StartTime\"], 1234567890000)\n        self.assertEqual(json_data[\"EndTime\"], 1234567899999)\n\n    def test_create_shipper_request_trn_and_time_fields(self):\n        \"\"\"测试 CreateShipperRequest 中 Trn 与时间字段的序列化。\"\"\"\n        content_info = ContentInfo(\n            format=\"json\",\n            json_info=JsonInfo(enable=True),\n        )\n        tos_shipper_info = TosShipperInfo(\n            bucket=\"test-bucket\",\n            prefix=\"logs/\",\n            max_size=5,\n            compress=\"snappy\",\n            interval=300,\n            partition_format=\"%Y/%m/%d\",\n        )\n\n        request = CreateShipperRequest(\n            topic_id=\"test-topic-id\",\n            shipper_name=\"test-shipper\",\n            shipper_type=\"tos\",\n            content_info=content_info,\n            tos_shipper_info=tos_shipper_info,\n            shipper_start_time=1111111111111,\n            shipper_end_time=2222222222222,\n            role_trn=\"trn:iam::123456789012:role/test-role\",\n            service_trn=\"trn:iam::123456789012:role/service-role\",\n        )\n\n        api_input = request.get_api_input()\n        self.assertEqual(api_input[\"TopicId\"], \"test-topic-id\")\n        self.assertEqual(api_input[\"ShipperName\"], \"test-shipper\")\n        self.assertEqual(api_input[\"ShipperType\"], \"tos\")\n        self.assertEqual(api_input[\"RoleTrn\"], \"trn:iam::123456789012:role/test-role\")\n        self.assertEqual(\n            api_input[\"ServiceTrn\"], \"trn:iam::123456789012:role/service-role\"\n        )\n        self.assertEqual(api_input[\"ShipperStartTime\"], 1111111111111)\n        self.assertEqual(api_input[\"ShipperEndTime\"], 2222222222222)\n\n        # 嵌套结构\n        self.assertIn(\"ContentInfo\", api_input)\n        self.assertIn(\"TosShipperInfo\", api_input)\n        self.assertEqual(api_input[\"TosShipperInfo\"][\"Bucket\"], \"test-bucket\")\n\n    @patch(\"volcengine.tls.TLSService.TLSService._TLSService__request\")\n    def test_create_shipper_service_call_tos(self, mock_request):\n        \"\"\"测试 TLSService.create_shipper 调用时的 API 名称与请求体结构。\"\"\"\n        content_info = ContentInfo(\n            format=\"json\",\n            json_info=JsonInfo(enable=True),\n        )\n        tos_shipper_info = TosShipperInfo(\n            bucket=\"test-bucket\",\n            prefix=\"logs/\",\n            max_size=5,\n            compress=\"snappy\",\n            interval=300,\n            partition_format=\"%Y/%m/%d\",\n        )\n\n        request = CreateShipperRequest(\n            topic_id=\"test-topic-id\",\n            shipper_name=\"test-shipper\",\n            shipper_type=\"tos\",\n            content_info=content_info,\n            tos_shipper_info=tos_shipper_info,\n            role_trn=\"trn:iam::123456789012:role/test-role\",\n            service_trn=\"trn:iam::123456789012:role/service-role\",\n        )\n\n        # 模拟 HTTP 响应\n        mock_response = Mock()\n        mock_response.headers = {\n            \"X-Tls-Requestid\": \"test-request-id\",\n            \"Content-Type\": \"application/json\",\n        }\n        mock_response.text = \"{\\\"ShipperId\\\": \\\"shipper-123\\\"}\"\n        mock_request.return_value = mock_response\n\n        response = self.tls_service.create_shipper(request)\n\n        expected_body = request.get_api_input()\n        mock_request.assert_called_once_with(api=\"/CreateShipper\", body=expected_body)\n\n        # 验证响应类型与 RequestId/字段解析\n        self.assertIsInstance(response, CreateShipperResponse)\n        self.assertEqual(response.get_shipper_id(), \"shipper-123\")\n        self.assertEqual(response.get_request_id(), \"test-request-id\")\n\n\nif __name__ == \"__main__\":  # pragma: no cover\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/test_delete_alarm_webhook_integration.py",
    "content": "\"\"\"Unit tests for DeleteAlarmWebhookIntegration functionality.\"\"\"\nimport os\nimport unittest\nfrom unittest.mock import Mock, patch\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import DeleteAlarmWebhookIntegrationRequest\nfrom volcengine.tls.tls_responses import DeleteAlarmWebhookIntegrationResponse\n\n\nclass TestDeleteAlarmWebhookIntegration(unittest.TestCase):\n    \"\"\"Test cases for DeleteAlarmWebhookIntegration functionality.\"\"\"\n\n    def setUp(self):\n        \"\"\"Set up test fixtures.\"\"\"\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"tls-cn-beijing.ivolces.com\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"test-ak\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"test-sk\")\n        self.tls_service = TLSService(\n            self.endpoint, self.access_key_id, self.access_key_secret, self.region)\n\n    def test_delete_alarm_webhook_integration_request_validation(self):\n        \"\"\"Test DeleteAlarmWebhookIntegrationRequest validation.\"\"\"\n        # Test with valid webhook ID\n        request = DeleteAlarmWebhookIntegrationRequest(webhook_id=\"test-webhook-id-12345\")\n        self.assertTrue(request.check_validation())\n\n        # Test with None webhook ID\n        request = DeleteAlarmWebhookIntegrationRequest(webhook_id=None)\n        self.assertFalse(request.check_validation())\n\n    def test_delete_alarm_webhook_integration_request_api_input(self):\n        \"\"\"Test DeleteAlarmWebhookIntegrationRequest API input generation.\"\"\"\n        webhook_id = \"test-webhook-id-12345\"\n        request = DeleteAlarmWebhookIntegrationRequest(webhook_id=webhook_id)\n        api_input = request.get_api_input()\n\n        expected_input = {\n            \"WebhookID\": webhook_id\n        }\n        self.assertEqual(api_input, expected_input)\n\n    @patch('volcengine.tls.TLSService.TLSService._TLSService__request')\n    def test_delete_alarm_webhook_integration_success(self, mock_request):\n        \"\"\"Test successful delete alarm webhook integration.\"\"\"\n        # Mock successful response\n        mock_response = Mock()\n        mock_response.headers = {\n            'X-Tls-Requestid': 'test-request-id',\n            'Content-Type': 'application/json'\n        }\n        mock_response.text = ''\n        mock_response.status_code = 200\n        mock_request.return_value = mock_response\n\n        # Create request\n        webhook_id = \"test-webhook-id-12345\"\n        request = DeleteAlarmWebhookIntegrationRequest(webhook_id=webhook_id)\n\n        # Call the method\n        response = self.tls_service.delete_alarm_webhook_integration(request)\n\n        # Verify the response\n        self.assertIsInstance(response, DeleteAlarmWebhookIntegrationResponse)\n        self.assertEqual(response.get_request_id(), 'test-request-id')\n\n        # Verify the API was called correctly\n        mock_request.assert_called_once()\n        call_args = mock_request.call_args\n        self.assertEqual(call_args[1]['api'], '/DeleteAlarmWebhookIntegration')\n\n    @patch('volcengine.tls.TLSService.TLSService._TLSService__request')\n    def test_delete_alarm_webhook_integration_invalid_request(self, mock_request):\n        \"\"\"Test delete alarm webhook integration with invalid request.\"\"\"\n        # Test with invalid request\n        request = DeleteAlarmWebhookIntegrationRequest(webhook_id=None)\n\n        # Should raise exception for invalid request\n        with self.assertRaises(Exception):\n            self.tls_service.delete_alarm_webhook_integration(request)\n\n        # Verify the API was not called\n        mock_request.assert_not_called()\n\n    def test_delete_alarm_webhook_integration_integration(self):\n        \"\"\"Test delete alarm webhook integration integration.\"\"\"\n        # This is an integration test that would require actual credentials and endpoint\n        # It should only be run in a test environment with proper setup\n        if not all([\n            os.environ.get(\"VOLCENGINE_ENDPOINT\"),\n            os.environ.get(\"VOLCENGINE_REGION\"),\n            os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\"),\n            os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\")\n        ]):\n            self.skipTest(\"Integration test requires environment variables to be set\")\n\n        # This test would create a webhook integration first, then delete it\n        # For now, we just verify the method exists and can be called\n        # In a real integration test, you would:\n        # 1. Create a webhook integration using CreateAlarmWebhookIntegration\n        # 2. Get the webhook ID from the response\n        # 3. Delete the webhook integration using DeleteAlarmWebhookIntegration\n        # 4. Verify the deletion was successful\n\n        # For this test, we just verify the method exists\n        self.assertTrue(hasattr(self.tls_service, 'delete_alarm_webhook_integration'))\n        self.assertTrue(callable(getattr(self.tls_service, 'delete_alarm_webhook_integration')))\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/test_delete_import_task.py",
    "content": "# coding=utf-8\n\"\"\"Unit tests for DeleteImportTask functionality.\"\"\"\nimport unittest\nfrom unittest.mock import Mock, patch\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.const import X_TLS_REQUEST_ID\nfrom volcengine.tls.tls_requests import DeleteImportTaskRequest\nfrom volcengine.tls.tls_responses import DeleteImportTaskResponse\nfrom volcengine.tls.tls_exception import TLSException\n\n\nclass TestDeleteImportTask(unittest.TestCase):\n    \"\"\"Test class for DeleteImportTask functionality.\"\"\"\n\n    def setUp(self):\n        self.endpoint = \"https://tls-cn-beijing.ivolces.com\"\n        self.region = \"cn-beijing\"\n        self.access_key_id = \"test_ak\"\n        self.access_key_secret = \"test_sk\"\n        self.tls_service = TLSService(\n            self.endpoint,\n            self.access_key_id,\n            self.access_key_secret,\n            self.region\n        )\n\n    def test_delete_import_task_request_validation_success(self):\n        \"\"\"测试 DeleteImportTaskRequest 参数验证成功的情况\"\"\"\n        task_id = \"test-import-task-123\"\n        request = DeleteImportTaskRequest(task_id)\n\n        self.assertTrue(request.check_validation())\n        self.assertEqual(request.task_id, task_id)\n\n    def test_delete_import_task_request_validation_failed(self):\n        \"\"\"测试 DeleteImportTaskRequest 参数验证失败的情况\"\"\"\n        # 测试 task_id 为 None\n        request = DeleteImportTaskRequest(None)\n        self.assertFalse(request.check_validation())\n\n    def test_delete_import_task_api_call_success(self):\n        \"\"\"测试 DeleteImportTask API 调用成功的情况\"\"\"\n        task_id = \"test-import-task-123\"\n        request = DeleteImportTaskRequest(task_id)\n\n        # Mock 响应\n        mock_response = Mock()\n        mock_response.headers = {\n            X_TLS_REQUEST_ID: 'test-request-id',\n            'Content-Type': 'application/json'\n        }\n        mock_response.text = '{}'\n        mock_response.status_code = 200\n\n        with patch.object(self.tls_service, '_TLSService__request', return_value=mock_response):\n            response = self.tls_service.delete_import_task(request)\n\n            self.assertIsInstance(response, DeleteImportTaskResponse)\n            self.assertEqual(response.request_id, 'test-request-id')\n\n    def test_delete_import_task_with_empty_task_id(self):\n        \"\"\"测试使用空 task_id 的情况，应该抛出异常\"\"\"\n        request = DeleteImportTaskRequest(\"\")\n\n        with self.assertRaises(TLSException) as context:\n            self.tls_service.delete_import_task(request)\n\n        self.assertIn(\"Invalid request\", str(context.exception))\n\n    def test_delete_import_task_api_response_with_data(self):\n        \"\"\"测试 API 返回包含数据的响应\"\"\"\n        task_id = \"test-import-task-456\"\n        request = DeleteImportTaskRequest(task_id)\n\n        # Mock 响应包含数据\n        mock_response = Mock()\n        mock_response.headers = {\n            X_TLS_REQUEST_ID: 'test-request-id-2',\n            'Content-Type': 'application/json'\n        }\n        mock_response.text = '{\"key\": \"value\", \"status\": \"deleted\"}'\n        mock_response.status_code = 200\n\n        with patch.object(self.tls_service, '_TLSService__request', return_value=mock_response):\n            response = self.tls_service.delete_import_task(request)\n\n            self.assertIsInstance(response, DeleteImportTaskResponse)\n            self.assertEqual(response.request_id, 'test-request-id-2')\n            self.assertEqual(response.response, {\"key\": \"value\", \"status\": \"deleted\"})\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/test_delete_trace_instance.py",
    "content": "\"\"\"Unit tests for DeleteTraceInstance functionality.\"\"\"\nimport os\nimport unittest\nfrom unittest.mock import Mock, patch\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import DeleteTraceInstanceRequest\nfrom volcengine.tls.tls_responses import DeleteTraceInstanceResponse\n\n\nclass TestDeleteTraceInstance(unittest.TestCase):\n    \"\"\"Test cases for DeleteTraceInstance functionality.\"\"\"\n\n    def setUp(self):\n        \"\"\"Set up test fixtures.\"\"\"\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"tls-cn-beijing.ivolces.com\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"test-ak\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"test-sk\")\n        self.tls_service = TLSService(\n            self.endpoint, self.access_key_id, self.access_key_secret, self.region)\n\n    def test_delete_trace_instance_request_validation(self):\n        \"\"\"Test DeleteTraceInstanceRequest validation.\"\"\"\n        # Test with valid trace instance ID\n        request = DeleteTraceInstanceRequest(trace_instance_id=\"test-trace-instance-id\")\n        self.assertTrue(request.check_validation())\n\n        # Test with None trace instance ID\n        request = DeleteTraceInstanceRequest(trace_instance_id=None)\n        self.assertFalse(request.check_validation())\n\n    def test_delete_trace_instance_request_api_input(self):\n        \"\"\"Test DeleteTraceInstanceRequest API input generation.\"\"\"\n        trace_instance_id = \"test-trace-instance-id\"\n        request = DeleteTraceInstanceRequest(trace_instance_id=trace_instance_id)\n        api_input = request.get_api_input()\n\n        expected_input = {\n            \"TraceInstanceId\": trace_instance_id\n        }\n        self.assertEqual(api_input, expected_input)\n\n    @patch('volcengine.tls.TLSService.TLSService._TLSService__request')\n    def test_delete_trace_instance_success(self, mock_request):\n        \"\"\"Test successful delete trace instance.\"\"\"\n        # Mock successful response\n        mock_response = Mock()\n        mock_response.headers = {\n            'X-Tls-Requestid': 'test-request-id',\n            'Content-Type': 'application/json'\n        }\n        mock_response.text = ''\n        mock_response.status_code = 200\n        mock_request.return_value = mock_response\n\n        # Create request\n        trace_instance_id = \"test-trace-instance-id\"\n        request = DeleteTraceInstanceRequest(trace_instance_id=trace_instance_id)\n\n        # Call the method\n        response = self.tls_service.delete_trace_instance(request)\n\n        # Verify the response\n        self.assertIsInstance(response, DeleteTraceInstanceResponse)\n        self.assertEqual(response.get_request_id(), 'test-request-id')\n\n        # Verify the API was called correctly\n        mock_request.assert_called_once()\n        call_args = mock_request.call_args\n        self.assertEqual(call_args[1]['api'], '/DeleteTraceInstance')\n\n    @patch('volcengine.tls.TLSService.TLSService._TLSService__request')\n    def test_delete_trace_instance_invalid_request(self, mock_request):\n        \"\"\"Test delete trace instance with invalid request.\"\"\"\n        # Test with invalid request\n        request = DeleteTraceInstanceRequest(trace_instance_id=None)\n\n        # Should raise exception for invalid request\n        with self.assertRaises(Exception):\n            self.tls_service.delete_trace_instance(request)\n\n        # Verify the API was not called\n        mock_request.assert_not_called()\n\n    def test_delete_trace_instance_integration(self):\n        \"\"\"Test delete trace instance integration.\"\"\"\n        # This is an integration test that would require actual credentials and endpoint\n        # It should only be run in a test environment with proper setup\n        if not all([\n            os.environ.get(\"VOLCENGINE_ENDPOINT\"),\n            os.environ.get(\"VOLCENGINE_REGION\"),\n            os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\"),\n            os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\")\n        ]):\n            self.skipTest(\"Integration test requires environment variables to be set\")\n\n        # This test would create a trace instance first, then delete it\n        # For now, we just verify the method exists and can be called\n        # In a real integration test, you would:\n        # 1. Create a trace instance using CreateTraceInstance\n        # 2. Get the trace instance ID from the response\n        # 3. Delete the trace instance using DeleteTraceInstance\n        # 4. Verify the deletion was successful\n\n        # For this test, we just verify the method exists\n        self.assertTrue(hasattr(self.tls_service, 'delete_trace_instance'))\n        self.assertTrue(callable(getattr(self.tls_service, 'delete_trace_instance')))\n\n\nif __name__ == '__main__':\n    unittest.main()"
  },
  {
    "path": "volcengine/tls/test/test_describe_shippers.py",
    "content": "# coding=utf-8\n\"\"\"DescribeShippers 接口的单元测试\"\"\"\nimport os\nimport unittest\nimport random\nimport string\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import (\n    CreateProjectRequest, CreateTopicRequest,\n    DeleteTopicRequest, DeleteProjectRequest,\n    DescribeShippersRequest\n)\n\n\nclass TestDescribeShippers(unittest.TestCase):\n    \"\"\"DescribeShippers 接口的单元测试\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.endpoint = os.environ.get(\n            \"VOLCENGINE_ENDPOINT\", \"tls-cn-beijing.ivolces.com\"\n        )\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"\")\n        self.tls_service = TLSService(\n            self.endpoint, self.access_key_id, self.access_key_secret, self.region\n        )\n\n    def setUp(self):\n        if not all([self.access_key_id, self.access_key_secret]):\n            self.skipTest(\"缺少必要的环境变量，跳过 DescribeShippers 集成测试\")\n\n    def _generate_random_string(self, length=10):\n        \"\"\"生成随机字符串\"\"\"\n        return ''.join(random.choices(string.ascii_lowercase + string.digits, k=length))\n\n    def test_describe_shippers_with_project_id(self):\n        \"\"\"测试使用 ProjectId 查询投递配置\"\"\"\n        # 创建测试项目\n        project_name = f\"tls-python-sdk-test-shipper-project-{self._generate_random_string()}\"\n        create_project_request = CreateProjectRequest(project_name=project_name, region=self.region)\n        project_response = self.tls_service.create_project(create_project_request)\n        project_id = project_response.get_project_id()\n\n        try:\n            # 创建测试主题\n            topic_name = f\"tls-python-sdk-test-shipper-topic-{self._generate_random_string()}\"\n            create_topic_request = CreateTopicRequest(\n                project_id=project_id,\n                topic_name=topic_name,\n                shard_count=1,\n                ttl=1\n            )\n            topic_response = self.tls_service.create_topic(create_topic_request)\n            topic_id = topic_response.get_topic_id()\n\n            try:\n                # 测试 DescribeShippers 接口\n                describe_shippers_request = DescribeShippersRequest(project_id=project_id)\n                shippers_response = self.tls_service.describe_shippers(describe_shippers_request)\n\n                # 验证响应结构\n                self.assertIsInstance(shippers_response.get_total(), int)\n                self.assertIsInstance(shippers_response.get_shippers(), list)\n\n                # 验证每个 shipper 的结构\n                shippers = shippers_response.get_shippers()\n                for shipper in shippers:\n                    self.assertTrue(hasattr(shipper, 'shipper_id'))\n                    self.assertTrue(hasattr(shipper, 'shipper_name'))\n                    self.assertTrue(hasattr(shipper, 'project_id'))\n                    self.assertTrue(hasattr(shipper, 'topic_id'))\n                    self.assertTrue(hasattr(shipper, 'shipper_type'))\n                    self.assertTrue(hasattr(shipper, 'status'))\n\n            finally:\n                # 清理测试主题\n                delete_topic_request = DeleteTopicRequest(topic_id=topic_id)\n                self.tls_service.delete_topic(delete_topic_request)\n\n        finally:\n            # 清理测试项目\n            delete_project_request = DeleteProjectRequest(project_id=project_id)\n            self.tls_service.delete_project(delete_project_request)\n\n    def test_describe_shippers_with_topic_id(self):\n        \"\"\"测试使用 TopicId 查询投递配置\"\"\"\n        # 创建测试项目\n        project_name = f\"tls-python-sdk-test-shipper-project-{self._generate_random_string()}\"\n        create_project_request = CreateProjectRequest(project_name=project_name, region=self.region)\n        project_response = self.tls_service.create_project(create_project_request)\n        project_id = project_response.get_project_id()\n\n        try:\n            # 创建测试主题\n            topic_name = f\"tls-python-sdk-test-shipper-topic-{self._generate_random_string()}\"\n            create_topic_request = CreateTopicRequest(\n                project_id=project_id,\n                topic_name=topic_name,\n                shard_count=1,\n                ttl=1\n            )\n            topic_response = self.tls_service.create_topic(create_topic_request)\n            topic_id = topic_response.get_topic_id()\n\n            try:\n                # 测试使用 TopicId 查询\n                describe_shippers_request = DescribeShippersRequest(topic_id=topic_id)\n                shippers_response = self.tls_service.describe_shippers(describe_shippers_request)\n\n                # 验证响应\n                self.assertIsInstance(shippers_response.get_total(), int)\n                self.assertIsInstance(shippers_response.get_shippers(), list)\n\n            finally:\n                # 清理测试主题\n                delete_topic_request = DeleteTopicRequest(topic_id=topic_id)\n                self.tls_service.delete_topic(delete_topic_request)\n\n        finally:\n            # 清理测试项目\n            delete_project_request = DeleteProjectRequest(project_id=project_id)\n            self.tls_service.delete_project(delete_project_request)\n\n    def test_describe_shippers_with_multiple_params(self):\n        \"\"\"测试使用多个参数组合查询投递配置\"\"\"\n        describe_shippers_request = DescribeShippersRequest(\n            project_name=\"test-project\",\n            shipper_name=\"test-shipper\",\n            shipper_type=\"tos\",\n            page_number=1,\n            page_size=20\n        )\n        shippers_response = self.tls_service.describe_shippers(describe_shippers_request)\n\n        # 验证响应结构\n        self.assertIsInstance(shippers_response.get_total(), int)\n        self.assertIsInstance(shippers_response.get_shippers(), list)\n\n    def test_describe_shippers_response_structure(self):\n        \"\"\"测试响应数据结构完整性\"\"\"\n        describe_shippers_request = DescribeShippersRequest()\n        shippers_response = self.tls_service.describe_shippers(describe_shippers_request)\n\n        # 验证基本响应结构\n        self.assertTrue(hasattr(shippers_response, 'total'))\n        self.assertTrue(hasattr(shippers_response, 'shippers'))\n        self.assertTrue(hasattr(shippers_response, 'response'))\n        self.assertTrue(hasattr(shippers_response, 'request_id'))\n\n        # 验证 get 方法\n        self.assertEqual(shippers_response.get_total(), shippers_response.total)\n        self.assertEqual(shippers_response.get_shippers(), shippers_response.shippers)\n\n    def test_describe_shippers_empty_result(self):\n        \"\"\"测试空结果情况\"\"\"\n        # 使用不存在的 project_id 查询\n        describe_shippers_request = DescribeShippersRequest(project_id=\"non-existent-project-id\")\n        shippers_response = self.tls_service.describe_shippers(describe_shippers_request)\n\n        # 验证空结果\n        self.assertEqual(shippers_response.get_total(), 0)\n        self.assertEqual(len(shippers_response.get_shippers()), 0)\n\n    def test_describe_shippers_request_validation(self):\n        \"\"\"测试请求参数验证\"\"\"\n        # 测试所有参数都可以为 None\n        describe_shippers_request = DescribeShippersRequest()\n\n        # 验证默认值\n        self.assertEqual(describe_shippers_request.page_number, 1)\n        self.assertEqual(describe_shippers_request.page_size, 20)\n        self.assertIsNone(describe_shippers_request.project_id)\n        self.assertIsNone(describe_shippers_request.project_name)\n        self.assertIsNone(describe_shippers_request.shipper_id)\n        self.assertIsNone(describe_shippers_request.shipper_name)\n        self.assertIsNone(describe_shippers_request.topic_id)\n        self.assertIsNone(describe_shippers_request.topic_name)\n        self.assertIsNone(describe_shippers_request.shipper_type)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/test_import_task.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport os\nimport unittest\nimport time\nimport random\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import *\nfrom volcengine.tls.data import ImportTaskInfo\n\n\nclass TestImportTask(unittest.TestCase):\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\",\n                                       \"tls-cn-beijing.ivolces.com\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\",\n                                            \"test-ak\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\",\n                                                \"test-sk\")\n        self.tls_service = TLSService(self.endpoint, self.access_key_id,\n                                      self.access_key_secret, self.region)\n\n    def setUp(self):\n        \"\"\"测试前置操作：创建项目和主题\"\"\"\n        if not all(os.environ.get(k) for k in [\"VOLCENGINE_ACCESS_KEY_ID\", \"VOLCENGINE_ACCESS_KEY_SECRET\"]):\n            self.skipTest(\"缺少必要的环境变量，跳过 ImportTask 集成测试\")\n        now = str(int(time.time()))\n        random_suffix = str(random.randint(1000, 9999))\n\n        # 创建日志项目\n        self.project_name = f\"import-task-test-project-{now}-{random_suffix}\"\n        create_project_request = CreateProjectRequest(\n            project_name=self.project_name,\n            region=self.region,\n            description=\"项目用于导入任务测试\"\n        )\n        try:\n            create_project_response = self.tls_service.create_project(\n                create_project_request)\n            self.project_id = create_project_response.get_project_id()\n        except Exception as e:\n            self.skipTest(f\"创建项目失败: {str(e)}\")\n\n        # 创建日志主题\n        self.topic_name = f\"import-task-test-topic-{now}-{random_suffix}\"\n        create_topic_request = CreateTopicRequest(\n            topic_name=self.topic_name,\n            project_id=self.project_id,\n            ttl=1,\n            description=\"主题用于导入任务测试\",\n            shard_count=1\n        )\n        try:\n            create_topic_response = self.tls_service.create_topic(\n                create_topic_request)\n            self.topic_id = create_topic_response.get_topic_id()\n        except Exception as e:\n            self.skipTest(f\"创建主题失败: {str(e)}\")\n\n    def tearDown(self):\n        \"\"\"测试后置操作：清理资源\"\"\"\n        if hasattr(self, 'task_id'):\n            try:\n                delete_request = DeleteImportTaskRequest(task_id=self.task_id)\n                self.tls_service.delete_import_task(delete_request)\n            except Exception:\n                pass\n\n        if hasattr(self, 'kafka_task_id'):\n            try:\n                delete_request = DeleteImportTaskRequest(\n                    task_id=self.kafka_task_id)\n                self.tls_service.delete_import_task(delete_request)\n            except Exception:\n                pass\n\n        if hasattr(self, 'topic_id'):\n            try:\n                delete_topic_request = DeleteTopicRequest(self.topic_id)\n                self.tls_service.delete_topic(delete_topic_request)\n            except Exception:\n                pass\n\n        if hasattr(self, 'project_id'):\n            try:\n                delete_project_request = DeleteProjectRequest(\n                    self.project_id)\n                self.tls_service.delete_project(delete_project_request)\n            except Exception:\n                pass\n\n    def test_modify_import_task_with_tos_source(self):\n        \"\"\"测试修改TOS导入任务\"\"\"\n        # 创建TOS导入任务\n        tos_source_info = TosSourceInfo(\n            bucket=\"test-bucket\",\n            region=self.region,\n            compress_type=\"none\",\n            prefix=\"test-logs/\"\n        )\n\n        import_source_info = ImportSourceInfo(tos_source_info=tos_source_info)\n\n        import_extract_rule = ImportExtractRule(\n            delimiter=\"|\",\n            keys=[\"time\", \"level\", \"message\"],\n            time_key=\"time\",\n            time_format=\"%Y-%m-%d %H:%M:%S\",\n            time_zone=\"Asia/Shanghai\",\n            un_match_up_load_switch=True,\n            un_match_log_key=\"LogParseFailed\"\n        )\n\n        target_info = TargetInfo(\n            region=self.region,\n            log_type=\"delimiter_log\",\n            extract_rule=import_extract_rule,\n            log_sample=\"2023-12-01 10:00:00|INFO|Test log message\"\n        )\n\n        create_request = CreateImportTaskRequest(\n            topic_id=self.topic_id,\n            task_name=\"test-tos-import-task\",\n            source_type=\"tos\",\n            import_source_info=import_source_info,\n            target_info=target_info,\n            project_id=self.project_id,\n            description=\"TOS导入任务测试\"\n        )\n\n        create_response = self.tls_service.create_import_task(create_request)\n        self.task_id = create_response.get_task_id()\n        self.assertIsNotNone(self.task_id)\n\n        # 修改导入任务\n        modify_request = ModifyImportTaskRequest(\n            task_id=self.task_id,\n            status=4,  # 已停止\n            topic_id=self.topic_id,\n            task_name=\"modified-tos-import-task\",\n            source_type=\"tos\",\n            import_source_info=import_source_info,\n            target_info=target_info,\n            project_id=self.project_id,\n            description=\"修改后的TOS导入任务测试\"\n        )\n\n        modify_response = self.tls_service.modify_import_task(modify_request)\n        self.assertIsNotNone(modify_response)\n\n    def test_modify_import_task_with_kafka_source(self):\n        \"\"\"测试修改Kafka导入任务\"\"\"\n        # 创建Kafka导入任务\n        kafka_source_info = KafkaSourceInfo(\n            host=\"kafka1.example.com:9092,kafka2.example.com:9092\",\n            topic=\"test-topic\",\n            encode=\"UTF-8\",\n            protocol=\"plaintext\",\n            is_need_auth=False,\n            initial_offset=0,\n            time_source_default=0\n        )\n\n        import_source_info = ImportSourceInfo(kafka_source_info=kafka_source_info)\n\n        import_extract_rule = ImportExtractRule(\n            time_key=\"timestamp\",\n            time_format=\"%Y-%m-%dT%H:%M:%S.%fZ\",\n            time_zone=\"UTC\",\n            un_match_up_load_switch=True,\n            un_match_log_key=\"LogParseFailed\"\n        )\n\n        target_info = TargetInfo(\n            region=self.region,\n            log_type=\"json_log\",\n            extract_rule=import_extract_rule,\n            log_sample='{\"timestamp\":\"2023-12-01T10:00:00.000Z\",'\n                       '\"level\":\"INFO\",\"message\":\"Test message\"}'\n        )\n\n        create_request = CreateImportTaskRequest(\n            topic_id=self.topic_id,\n            task_name=\"test-kafka-import-task\",\n            source_type=\"kafka\",\n            import_source_info=import_source_info,\n            target_info=target_info,\n            project_id=self.project_id\n        )\n\n        create_response = self.tls_service.create_import_task(create_request)\n        self.kafka_task_id = create_response.get_task_id()\n        self.assertIsNotNone(self.kafka_task_id)\n\n        # 修改Kafka导入任务\n        modify_request = ModifyImportTaskRequest(\n            task_id=self.kafka_task_id,\n            status=5,  # 重启中\n            topic_id=self.topic_id,\n            task_name=\"modified-kafka-import-task\",\n            source_type=\"kafka\",\n            import_source_info=import_source_info,\n            target_info=target_info,\n            project_id=self.project_id,\n            description=\"修改后的Kafka导入任务测试\"\n        )\n\n        modify_response = self.tls_service.modify_import_task(modify_request)\n        self.assertIsNotNone(modify_response)\n\n    def test_describe_import_tasks(self):\n        \"\"\"测试查询导入任务列表\"\"\"\n        # 创建多个导入任务\n        task_ids = []\n\n        for i in range(2):\n            tos_source_info = TosSourceInfo(\n                bucket=f\"test-bucket-{i}\",\n                region=self.region,\n                compress_type=\"none\",\n                prefix=f\"test-logs-{i}/\"\n            )\n\n            import_source_info = ImportSourceInfo(tos_source_info=tos_source_info)\n\n            target_info = TargetInfo(\n                region=self.region,\n                log_type=\"json_log\"\n            )\n\n            create_request = CreateImportTaskRequest(\n                topic_id=self.topic_id,\n                task_name=f\"test-import-task-{i}\",\n                source_type=\"tos\",\n                import_source_info=import_source_info,\n                target_info=target_info,\n                project_id=self.project_id\n            )\n\n            create_response = self.tls_service.create_import_task(create_request)\n            task_ids.append(create_response.get_task_id())\n\n        # 查询导入任务列表\n        describe_request = DescribeImportTasksRequest(\n            project_id=self.project_id,\n            topic_id=self.topic_id,\n            source_type=\"tos\",\n            page_number=1,\n            page_size=10\n        )\n\n        describe_response = self.tls_service.describe_import_tasks(describe_request)\n        self.assertIsNotNone(describe_response)\n        self.assertGreaterEqual(describe_response.get_total(), 2)\n\n        task_info_list = describe_response.get_task_info()\n        self.assertIsInstance(task_info_list, list)\n        self.assertGreaterEqual(len(task_info_list), 2)\n\n        # 清理创建的任务\n        for task_id in task_ids:\n            try:\n                delete_request = DeleteImportTaskRequest(task_id=task_id)\n                self.tls_service.delete_import_task(delete_request)\n            except Exception:\n                pass\n\n    def test_modify_import_task_validation(self):\n        \"\"\"测试修改导入任务参数验证\"\"\"\n        # 测试缺少必需参数\n        with self.assertRaises(Exception):\n            modify_request = ModifyImportTaskRequest(\n                task_id=None,  # 缺少task_id\n                status=4,\n                topic_id=self.topic_id,\n                task_name=\"test-task\",\n                source_type=\"tos\",\n                import_source_info=None,  # 缺少import_source_info\n                target_info=None  # 缺少target_info\n            )\n            self.tls_service.modify_import_task(modify_request)\n\n    def test_describe_import_task_validation(self):\n        \"\"\"测试查询导入任务参数验证\"\"\"\n        # 测试缺少必需参数\n        with self.assertRaises(Exception):\n            describe_request = DescribeImportTaskRequest(task_id=None)\n            self.tls_service.describe_import_task(describe_request)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/test_modify_alarm_content_template.py",
    "content": "import os\nimport unittest\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import ModifyAlarmContentTemplateRequest\nfrom volcengine.tls.tls_requests import (\n    DingTalkContentTemplateInfo, EmailContentTemplateInfo,\n    LarkContentTemplateInfo, SmsContentTemplateInfo,\n    VmsContentTemplateInfo, WeChatContentTemplateInfo,\n    WebhookContentTemplateInfo\n)\n\n\nclass TestModifyAlarmContentTemplate(unittest.TestCase):\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"https://tls-cn-beijing.ivolces.com\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"test-ak\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"test-sk\")\n\n    def test_modify_alarm_content_template_request_validation(self):\n        \"\"\"测试 ModifyAlarmContentTemplateRequest 的验证逻辑\"\"\"\n        # 测试 alarm_content_template_id 为 None 的情况\n        request = ModifyAlarmContentTemplateRequest(\n            alarm_content_template_id=None,\n            alarm_content_template_name=\"test-template\",\n        )\n        self.assertFalse(request.check_validation())\n\n        # 测试 alarm_content_template_id 为空字符串的情况\n        request = ModifyAlarmContentTemplateRequest(\n            alarm_content_template_id=\"\",\n            alarm_content_template_name=\"test-template\",\n        )\n        self.assertFalse(request.check_validation())\n\n        # 测试 alarm_content_template_name 为 None 的情况\n        request = ModifyAlarmContentTemplateRequest(\n            alarm_content_template_id=\"test-alarm-id\",\n            alarm_content_template_name=None,\n        )\n        self.assertFalse(request.check_validation())\n\n        # 测试 alarm_content_template_name 为空字符串的情况\n        request = ModifyAlarmContentTemplateRequest(\n            alarm_content_template_id=\"test-alarm-id\",\n            alarm_content_template_name=\"\",\n        )\n        self.assertFalse(request.check_validation())\n\n        # 测试正常情况\n        request = ModifyAlarmContentTemplateRequest(\n            alarm_content_template_id=\"test-alarm-id\",\n            alarm_content_template_name=\"test-alarm-template\",\n        )\n        self.assertTrue(request.check_validation())\n\n    def test_modify_alarm_content_template_request_with_dingtalk_template(self):\n        \"\"\"测试包含钉钉消息模板的请求\"\"\"\n        dingtalk_template = DingTalkContentTemplateInfo(\n            title=\"告警标题\",\n            locale=\"zh-CN\",\n            content=\"告警内容\"\n        )\n\n        request = ModifyAlarmContentTemplateRequest(\n            alarm_content_template_id=\"test-alarm-id\",\n            alarm_content_template_name=\"test-alarm-template\",\n            ding_talk_content_template=dingtalk_template\n        )\n\n        self.assertTrue(request.check_validation())\n        api_input = request.get_api_input()\n\n        self.assertIn(\"AlarmContentTemplateId\", api_input)\n        self.assertIn(\"AlarmContentTemplateName\", api_input)\n        self.assertIn(\"DingTalk\", api_input)\n        self.assertEqual(api_input[\"AlarmContentTemplateId\"], \"test-alarm-id\")\n        self.assertEqual(api_input[\"AlarmContentTemplateName\"], \"test-alarm-template\")\n        self.assertEqual(api_input[\"DingTalk\"][\"Title\"], \"告警标题\")\n        self.assertEqual(api_input[\"DingTalk\"][\"Locale\"], \"zh-CN\")\n        self.assertEqual(api_input[\"DingTalk\"][\"Content\"], \"告警内容\")\n\n    def test_modify_alarm_content_template_request_with_email_template(self):\n        \"\"\"测试包含邮件模板的请求\"\"\"\n        email_template = EmailContentTemplateInfo(\n            locale=\"zh-CN\",\n            content=\"邮件内容\",\n            subject=\"邮件主题\"\n        )\n\n        request = ModifyAlarmContentTemplateRequest(\n            alarm_content_template_id=\"test-alarm-id\",\n            alarm_content_template_name=\"test-alarm-template\",\n            email_content_template=email_template\n        )\n\n        self.assertTrue(request.check_validation())\n        api_input = request.get_api_input()\n\n        self.assertIn(\"AlarmContentTemplateId\", api_input)\n        self.assertIn(\"AlarmContentTemplateName\", api_input)\n        self.assertIn(\"Email\", api_input)\n        self.assertEqual(api_input[\"AlarmContentTemplateId\"], \"test-alarm-id\")\n        self.assertEqual(api_input[\"AlarmContentTemplateName\"], \"test-alarm-template\")\n        self.assertEqual(api_input[\"Email\"][\"Locale\"], \"zh-CN\")\n        self.assertEqual(api_input[\"Email\"][\"Content\"], \"邮件内容\")\n        self.assertEqual(api_input[\"Email\"][\"Subject\"], \"邮件主题\")\n\n    def test_modify_alarm_content_template_request_with_lark_template(self):\n        \"\"\"测试包含飞书消息模板的请求\"\"\"\n        lark_template = LarkContentTemplateInfo(\n            title=\"飞书标题\",\n            locale=\"zh-CN\",\n            content=\"飞书内容\"\n        )\n\n        request = ModifyAlarmContentTemplateRequest(\n            alarm_content_template_id=\"test-alarm-id\",\n            alarm_content_template_name=\"test-alarm-template\",\n            lark_content_template=lark_template\n        )\n\n        self.assertTrue(request.check_validation())\n        api_input = request.get_api_input()\n\n        self.assertIn(\"AlarmContentTemplateId\", api_input)\n        self.assertIn(\"AlarmContentTemplateName\", api_input)\n        self.assertIn(\"Lark\", api_input)\n        self.assertEqual(api_input[\"AlarmContentTemplateId\"], \"test-alarm-id\")\n        self.assertEqual(api_input[\"AlarmContentTemplateName\"], \"test-alarm-template\")\n        self.assertEqual(api_input[\"Lark\"][\"Title\"], \"飞书标题\")\n        self.assertEqual(api_input[\"Lark\"][\"Locale\"], \"zh-CN\")\n        self.assertEqual(api_input[\"Lark\"][\"Content\"], \"飞书内容\")\n\n    def test_modify_alarm_content_template_request_with_sms_template(self):\n        \"\"\"测试包含短信模板的请求\"\"\"\n        sms_template = SmsContentTemplateInfo(\n            locale=\"zh-CN\",\n            content=\"短信内容\"\n        )\n\n        request = ModifyAlarmContentTemplateRequest(\n            alarm_content_template_id=\"test-alarm-id\",\n            alarm_content_template_name=\"test-alarm-template\",\n            sms_content_template=sms_template\n        )\n\n        self.assertTrue(request.check_validation())\n        api_input = request.get_api_input()\n\n        self.assertIn(\"AlarmContentTemplateId\", api_input)\n        self.assertIn(\"AlarmContentTemplateName\", api_input)\n        self.assertIn(\"Sms\", api_input)\n        self.assertEqual(api_input[\"AlarmContentTemplateId\"], \"test-alarm-id\")\n        self.assertEqual(api_input[\"AlarmContentTemplateName\"], \"test-alarm-template\")\n        self.assertEqual(api_input[\"Sms\"][\"Locale\"], \"zh-CN\")\n        self.assertEqual(api_input[\"Sms\"][\"Content\"], \"短信内容\")\n\n    def test_modify_alarm_content_template_request_with_vms_template(self):\n        \"\"\"测试包含语音消息模板的请求\"\"\"\n        vms_template = VmsContentTemplateInfo(\n            locale=\"zh-CN\",\n            content=\"语音消息内容\"\n        )\n\n        request = ModifyAlarmContentTemplateRequest(\n            alarm_content_template_id=\"test-alarm-id\",\n            alarm_content_template_name=\"test-alarm-template\",\n            vms_content_template=vms_template\n        )\n\n        self.assertTrue(request.check_validation())\n        api_input = request.get_api_input()\n\n        self.assertIn(\"AlarmContentTemplateId\", api_input)\n        self.assertIn(\"AlarmContentTemplateName\", api_input)\n        self.assertIn(\"Vms\", api_input)\n        self.assertEqual(api_input[\"AlarmContentTemplateId\"], \"test-alarm-id\")\n        self.assertEqual(api_input[\"AlarmContentTemplateName\"], \"test-alarm-template\")\n        self.assertEqual(api_input[\"Vms\"][\"Locale\"], \"zh-CN\")\n        self.assertEqual(api_input[\"Vms\"][\"Content\"], \"语音消息内容\")\n\n    def test_modify_alarm_content_template_request_with_wechat_template(self):\n        \"\"\"测试包含微信消息模板的请求\"\"\"\n        wechat_template = WeChatContentTemplateInfo(\n            title=\"微信标题\",\n            locale=\"zh-CN\",\n            content=\"微信内容\"\n        )\n\n        request = ModifyAlarmContentTemplateRequest(\n            alarm_content_template_id=\"test-alarm-id\",\n            alarm_content_template_name=\"test-alarm-template\",\n            we_chat_content_template=wechat_template\n        )\n\n        self.assertTrue(request.check_validation())\n        api_input = request.get_api_input()\n\n        self.assertIn(\"AlarmContentTemplateId\", api_input)\n        self.assertIn(\"AlarmContentTemplateName\", api_input)\n        self.assertIn(\"WeChat\", api_input)\n        self.assertEqual(api_input[\"AlarmContentTemplateId\"], \"test-alarm-id\")\n        self.assertEqual(api_input[\"AlarmContentTemplateName\"], \"test-alarm-template\")\n        self.assertEqual(api_input[\"WeChat\"][\"Title\"], \"微信标题\")\n        self.assertEqual(api_input[\"WeChat\"][\"Locale\"], \"zh-CN\")\n        self.assertEqual(api_input[\"WeChat\"][\"Content\"], \"微信内容\")\n\n    def test_modify_alarm_content_template_request_with_webhook_template(self):\n        \"\"\"测试包含Webhook模板的请求\"\"\"\n        webhook_template = WebhookContentTemplateInfo(\n            content=\"Webhook内容\"\n        )\n\n        request = ModifyAlarmContentTemplateRequest(\n            alarm_content_template_id=\"test-alarm-id\",\n            alarm_content_template_name=\"test-alarm-template\",\n            webhook_content_template=webhook_template\n        )\n\n        self.assertTrue(request.check_validation())\n        api_input = request.get_api_input()\n\n        self.assertIn(\"AlarmContentTemplateId\", api_input)\n        self.assertIn(\"AlarmContentTemplateName\", api_input)\n        self.assertIn(\"Webhook\", api_input)\n        self.assertEqual(api_input[\"AlarmContentTemplateId\"], \"test-alarm-id\")\n        self.assertEqual(api_input[\"AlarmContentTemplateName\"], \"test-alarm-template\")\n        self.assertEqual(api_input[\"Webhook\"][\"Content\"], \"Webhook内容\")\n\n    def test_modify_alarm_content_template_request_with_multiple_templates(self):\n        \"\"\"测试包含多种模板的请求\"\"\"\n        dingtalk_template = DingTalkContentTemplateInfo(\n            title=\"告警标题\",\n            locale=\"zh-CN\",\n            content=\"告警内容\"\n        )\n\n        email_template = EmailContentTemplateInfo(\n            locale=\"zh-CN\",\n            content=\"邮件内容\",\n            subject=\"邮件主题\"\n        )\n\n        request = ModifyAlarmContentTemplateRequest(\n            alarm_content_template_id=\"test-alarm-id\",\n            alarm_content_template_name=\"test-alarm-template\",\n            ding_talk_content_template=dingtalk_template,\n            email_content_template=email_template\n        )\n\n        self.assertTrue(request.check_validation())\n        api_input = request.get_api_input()\n\n        self.assertIn(\"AlarmContentTemplateId\", api_input)\n        self.assertIn(\"AlarmContentTemplateName\", api_input)\n        self.assertIn(\"DingTalk\", api_input)\n        self.assertIn(\"Email\", api_input)\n        self.assertEqual(api_input[\"AlarmContentTemplateId\"], \"test-alarm-id\")\n        self.assertEqual(api_input[\"AlarmContentTemplateName\"], \"test-alarm-template\")\n        self.assertEqual(api_input[\"DingTalk\"][\"Title\"], \"告警标题\")\n        self.assertEqual(api_input[\"Email\"][\"Subject\"], \"邮件主题\")\n\n    def test_content_template_classes_json_serialization(self):\n        \"\"\"测试内容模板类的 JSON 序列化\"\"\"\n        # 测试钉钉模板\n        dingtalk_template = DingTalkContentTemplateInfo(\n            title=\"测试标题\",\n            locale=\"en-US\",\n            content=\"测试内容\"\n        )\n        json_data = dingtalk_template.json()\n        self.assertEqual(json_data[\"Title\"], \"测试标题\")\n        self.assertEqual(json_data[\"Locale\"], \"en-US\")\n        self.assertEqual(json_data[\"Content\"], \"测试内容\")\n\n        # 测试邮件模板\n        email_template = EmailContentTemplateInfo(\n            locale=\"en-US\",\n            content=\"测试邮件内容\",\n            subject=\"测试邮件主题\"\n        )\n        json_data = email_template.json()\n        self.assertEqual(json_data[\"Locale\"], \"en-US\")\n        self.assertEqual(json_data[\"Content\"], \"测试邮件内容\")\n        self.assertEqual(json_data[\"Subject\"], \"测试邮件主题\")\n\n        # 测试 Webhook 模板\n        webhook_template = WebhookContentTemplateInfo(\n            content=\"测试Webhook内容\"\n        )\n        json_data = webhook_template.json()\n        self.assertEqual(json_data[\"Content\"], \"测试Webhook内容\")\n\n    def test_integration_with_tls_service(self):\n        \"\"\"测试与 TLSService 的集成\"\"\"\n        try:\n            tls_service = TLSService(\n                self.endpoint,\n                self.access_key_id,\n                self.access_key_secret,\n                self.region\n            )\n\n            # 创建请求\n            dingtalk_template = DingTalkContentTemplateInfo(\n                title=\"集成测试标题\",\n                locale=\"zh-CN\",\n                content=\"集成测试内容\"\n            )\n\n            request = ModifyAlarmContentTemplateRequest(\n                alarm_content_template_id=\"test-alarm-id-for-integration\",\n                alarm_content_template_name=\"tls-python-sdk-integration\",\n                ding_talk_content_template=dingtalk_template\n            )\n\n            # 验证请求对象\n            self.assertTrue(request.check_validation())\n\n            # 验证 API 输入格式\n            api_input = request.get_api_input()\n            self.assertIn(\"AlarmContentTemplateId\", api_input)\n            self.assertIn(\"AlarmContentTemplateName\", api_input)\n            self.assertIn(\"DingTalk\", api_input)\n\n        except Exception as e:\n            # 在实际环境中，这里应该根据具体的错误类型进行处理\n            # 如果是认证失败等预期内的错误，可以选择跳过测试\n            self.skipTest(f\"Integration test skipped due to: {str(e)}\")\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/test_modify_schedule_sql_task.py",
    "content": "# coding=utf-8\nimport os\nimport unittest\nimport uuid\n\nfrom volcengine.tls.tls_requests import (\n    CreateProjectRequest, CreateTopicRequest, DeleteTopicRequest,\n    DeleteProjectRequest, ModifyScheduleSqlTaskRequest\n)\nfrom volcengine.tls.data import RequestCycle\nfrom volcengine.tls.test.util_test import NewTLSService\n\n\nclass TestModifyScheduleSqlTask(unittest.TestCase):\n    \"\"\"测试ModifyScheduleSqlTask功能\"\"\"\n\n    @classmethod\n    def setUpClass(cls):\n        \"\"\"创建测试所需的资源\"\"\"\n        cls.tls_service = NewTLSService()\n        cls.region = os.environ[\"VOLCENGINE_REGION\"]\n\n        # 创建测试项目\n        cls.project_name = f\"tls-python-sdk-test-schedule-project-{uuid.uuid4().hex[:16]}\"\n        create_project_request = CreateProjectRequest(\n            project_name=cls.project_name,\n            region=cls.region\n        )\n        create_project_response = cls.tls_service.create_project(create_project_request)\n        cls.project_id = create_project_response.get_project_id()\n\n        # 创建测试主题\n        cls.topic_name = f\"tls-python-sdk-test-schedule-topic-{uuid.uuid4().hex[:16]}\"\n        create_topic_request = CreateTopicRequest(\n            project_id=cls.project_id,\n            topic_name=cls.topic_name,\n            shard_count=1,\n            ttl=1\n        )\n        create_topic_response = cls.tls_service.create_topic(create_topic_request)\n        cls.topic_id = create_topic_response.get_topic_id()\n\n    @classmethod\n    def tearDownClass(cls):\n        \"\"\"清理测试资源\"\"\"\n        # 删除测试主题\n        delete_topic_request = DeleteTopicRequest(topic_id=cls.topic_id)\n        cls.tls_service.delete_topic(delete_topic_request)\n\n        # 删除测试项目\n        delete_project_request = DeleteProjectRequest(project_id=cls.project_id)\n        cls.tls_service.delete_project(delete_project_request)\n\n    def test_modify_schedule_sql_task(self):\n        \"\"\"测试修改定时SQL任务\"\"\"\n        # 测试数据\n        task_id = f\"test-schedule-task-{uuid.uuid4().hex}\"\n        task_name = f\"test-schedule-task-name-{uuid.uuid4().hex}\"\n\n        # 创建调度周期配置\n        request_cycle = RequestCycle(\n            cycle_type=\"Period\",\n            time=1\n        )\n\n        # 创建修改请求\n        modify_request = ModifyScheduleSqlTaskRequest(\n            task_id=task_id,\n            task_name=task_name,\n            description=\"This is a test schedule sql task\",\n            dest_region=self.region,\n            dest_topic_id=self.topic_id,\n            status=0,\n            process_sql_delay=60,\n            process_time_window=\"@m-15m,@m\",\n            query=\"* | select *\",\n            request_cycle=request_cycle\n        )\n\n        # 验证请求参数\n        self.assertTrue(modify_request.check_validation())\n\n        # 验证API输入格式\n        api_input = modify_request.get_api_input()\n        self.assertEqual(api_input[\"TaskId\"], task_id)\n        self.assertEqual(api_input[\"TaskName\"], task_name)\n        self.assertEqual(api_input[\"Description\"], \"This is a test schedule sql task\")\n        self.assertEqual(api_input[\"DestRegion\"], self.region)\n        self.assertEqual(api_input[\"DestTopicID\"], self.topic_id)\n        self.assertEqual(api_input[\"Status\"], 0)\n        self.assertEqual(api_input[\"ProcessSqlDelay\"], 60)\n        self.assertEqual(api_input[\"ProcessTimeWindow\"], \"@m-15m,@m\")\n        self.assertEqual(api_input[\"Query\"], \"* | select *\")\n        self.assertIn(\"RequestCycle\", api_input)\n        self.assertEqual(api_input[\"RequestCycle\"][\"Type\"], \"Period\")\n        self.assertEqual(api_input[\"RequestCycle\"][\"Time\"], 1)\n\n    def test_modify_schedule_sql_task_with_cron(self):\n        \"\"\"测试使用Cron表达式的定时SQL任务\"\"\"\n        task_id = f\"test-schedule-task-cron-{uuid.uuid4().hex}\"\n\n        # 创建带有时区的调度周期配置\n        request_cycle = RequestCycle(\n            cycle_type=\"Cron\",\n            time=0,\n            cron_tab=\"0 18 * * *\",\n            cron_time_zone=\"Asia/Shanghai\"\n        )\n\n        modify_request = ModifyScheduleSqlTaskRequest(\n            task_id=task_id,\n            task_name=\"test-cron-task\",\n            request_cycle=request_cycle,\n            query=\"* | select count(*) as count\"\n        )\n\n        # 验证请求参数\n        self.assertTrue(modify_request.check_validation())\n\n        # 验证API输入格式\n        api_input = modify_request.get_api_input()\n        self.assertEqual(api_input[\"TaskId\"], task_id)\n        self.assertIn(\"RequestCycle\", api_input)\n        self.assertEqual(api_input[\"RequestCycle\"][\"Type\"], \"Cron\")\n        self.assertEqual(api_input[\"RequestCycle\"][\"Time\"], 0)\n        self.assertEqual(api_input[\"RequestCycle\"][\"CronTab\"], \"0 18 * * *\")\n        self.assertEqual(api_input[\"RequestCycle\"][\"CronTimeZone\"], \"Asia/Shanghai\")\n\n    def test_modify_schedule_sql_task_validation(self):\n        \"\"\"测试参数验证\"\"\"\n        # 测试缺少必需的task_id\n        modify_request = ModifyScheduleSqlTaskRequest(task_id=None)\n        self.assertFalse(modify_request.check_validation())\n\n        # 测试正常的task_id\n        modify_request = ModifyScheduleSqlTaskRequest(task_id=\"test-task-id\")\n        self.assertTrue(modify_request.check_validation())\n\n    def test_request_cycle_model(self):\n        \"\"\"测试RequestCycle模型\"\"\"\n        # 测试基本功能\n        request_cycle = RequestCycle(\n            cycle_type=\"Fixed\",\n            time=720,\n            cron_tab=None,\n            cron_time_zone=None\n        )\n\n        self.assertEqual(request_cycle.get_cycle_type(), \"Fixed\")\n        self.assertEqual(request_cycle.get_time(), 720)\n        self.assertIsNone(request_cycle.get_cron_tab())\n        self.assertIsNone(request_cycle.get_cron_time_zone())\n\n        # 测试JSON序列化\n        json_data = request_cycle.json()\n        self.assertEqual(json_data[\"Type\"], \"Fixed\")\n        self.assertEqual(json_data[\"Time\"], 720)\n        self.assertIsNone(json_data.get(\"CronTab\"))\n        # 为None时不应该出现在JSON中\n        self.assertNotIn(\"CronTimeZone\", json_data)\n\n        # 测试带时区的Cron类型\n        request_cycle_cron = RequestCycle(\n            cycle_type=\"Cron\",\n            time=0,\n            cron_tab=\"0 18 * * *\",\n            cron_time_zone=\"Asia/Shanghai\"\n        )\n\n        json_data_cron = request_cycle_cron.json()\n        self.assertEqual(json_data_cron[\"Type\"], \"Cron\")\n        self.assertEqual(json_data_cron[\"Time\"], 0)\n        self.assertEqual(json_data_cron[\"CronTab\"], \"0 18 * * *\")\n        self.assertEqual(json_data_cron[\"CronTimeZone\"], \"Asia/Shanghai\")\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/test_modify_trace_instance.py",
    "content": "import os\nimport unittest\nfrom unittest.mock import Mock, patch\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import ModifyTraceInstanceRequest\nfrom volcengine.tls.tls_responses import ModifyTraceInstanceResponse\nfrom volcengine.tls.const import MODIFY_TRACE_INSTANCE\n\n\nclass TestModifyTraceInstance(unittest.TestCase):\n\n    def setUp(self):\n        self.endpoint = os.environ.get(\n            \"VOLCENGINE_ENDPOINT\", \"tls-cn-beijing.ivolces.com\"\n        )\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\n            \"VOLCENGINE_ACCESS_KEY_ID\", \"test_ak\"\n        )\n        self.access_key_secret = os.environ.get(\n            \"VOLCENGINE_ACCESS_KEY_SECRET\", \"test_sk\"\n        )\n\n        self.tls_service = TLSService(\n            self.endpoint,\n            self.access_key_id,\n            self.access_key_secret,\n            self.region\n        )\n\n    def test_modify_trace_instance_request_validation(self):\n        # Test with valid parameters\n        request = ModifyTraceInstanceRequest(\n            trace_instance_id=\"test-trace-instance-id\",\n            description=\"Updated description\"\n        )\n        self.assertTrue(request.check_validation())\n\n        # Test with missing required parameter\n        request_invalid = ModifyTraceInstanceRequest(\n            trace_instance_id=None,\n            description=\"Updated description\"\n        )\n        self.assertFalse(request_invalid.check_validation())\n\n    @patch('volcengine.tls.TLSService.TLSService._TLSService__request')\n    def test_modify_trace_instance_success(self, mock_request):\n        # Mock successful response\n        mock_response = Mock()\n        mock_response.headers = {\n            'X-Tls-Requestid': 'test-request-id',\n            'Content-Type': 'application/json'\n        }\n        mock_response.text = '{\"Response\": {}}'\n        mock_request.return_value = mock_response\n\n        # Create request\n        request = ModifyTraceInstanceRequest(\n            trace_instance_id=\"test-trace-instance-id\",\n            description=\"Updated description\"\n        )\n\n        # Call the method\n        response = self.tls_service.modify_trace_instance(request)\n\n        # Verify the response\n        self.assertIsInstance(response, ModifyTraceInstanceResponse)\n        self.assertEqual(response.get_request_id(), 'test-request-id')\n\n        # Verify the API was called correctly\n        mock_request.assert_called_once_with(\n            api=MODIFY_TRACE_INSTANCE,\n            body={\n                'TraceInstanceId': 'test-trace-instance-id',\n                'Description': 'Updated description'\n            }\n        )\n\n    def test_modify_trace_instance_integration_style(self):\n        \"\"\"Integration style test similar to the Node.js test\"\"\"\n        # This test demonstrates the usage pattern similar to the Node.js test\n        # In a real integration test, you would:\n        # 1. Create a trace instance\n        # 2. Modify it\n        # 3. Verify the modification\n        # 4. Clean up\n\n        # For unit testing, we just verify the request structure\n        trace_instance_id = \"test-trace-instance-id\"\n        new_description = \"jest-modify\"\n\n        request = ModifyTraceInstanceRequest(\n            trace_instance_id=trace_instance_id,\n            description=new_description\n        )\n\n        # Verify request structure\n        api_input = request.get_api_input()\n        expected_input = {\n            'TraceInstanceId': trace_instance_id,\n            'Description': new_description\n        }\n        self.assertEqual(api_input, expected_input)\n\n\nif __name__ == '__main__':\n    unittest.main()"
  },
  {
    "path": "volcengine/tls/test/test_producer_batch_manager.py",
    "content": "import unittest\n\nfrom volcengine.tls.producer.batch_manager import BatchManager\nfrom volcengine.tls.producer.producer_model import ProducerConfig, BatchLog\n\n\nclass _FakeExecutor:\n    def __init__(self):\n        self.submitted = None\n\n    def submit(self, fn, *args, **kwargs):\n        self.submitted = (fn, args, kwargs)\n\n\nclass _FakeClient:\n    def __init__(self):\n        self.called = False\n\n    def put_logs(self, _req):\n        self.called = True\n        raise RuntimeError(\"boom\")\n\n\nclass _FakeMemoryLock:\n    def __init__(self):\n        self.released = []\n\n    def release(self, size):\n        self.released.append(size)\n\n\nclass _FakeRetryQueue:\n    def __init__(self):\n        self.closed = False\n\n    def add_to_retry_queue(self, _batch_log):\n        raise RuntimeError(\"should not retry in this test\")\n\n\nclass TestProducerBatchManager(unittest.TestCase):\n    def test_add_now_submits_callable_without_executing(self):\n        config = ProducerConfig(endpoint=\"example.com\", region=\"cn-beijing\", access_key=\"ak\", access_secret=\"sk\")\n        batch_key = BatchLog.BatchKey(shard_hash=\"0\", topic_id=\"t\", source=\"s\", file_name=\"f\")\n        batch_log = BatchLog(batch_key, config)\n\n        manager = BatchManager()\n        manager.batch_log = batch_log\n\n        executor = _FakeExecutor()\n        client = _FakeClient()\n        memory_lock = _FakeMemoryLock()\n        retry_queue = _FakeRetryQueue()\n\n        manager.add_now(config=config, executor_service=executor, client=client, memory_lock=memory_lock, retry_queue=retry_queue)\n\n        self.assertFalse(client.called)\n        self.assertIsNotNone(executor.submitted)\n        fn, args, kwargs = executor.submitted\n        self.assertTrue(callable(fn))\n        self.assertEqual(args, ())\n        self.assertEqual(kwargs, {})\n        self.assertIsNone(manager.batch_log)\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n\n"
  },
  {
    "path": "volcengine/tls/test/test_quality_fixes.py",
    "content": "import unittest\n\nfrom requests import Response\nfrom requests import exceptions as req_exc\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_exception import TLSException\nfrom volcengine.tls.util import TLSUtil\n\n\nclass TestQualityFixes(unittest.TestCase):\n    def test_tls_exception_missing_fields(self):\n        resp = Response()\n        resp.status_code = 400\n        resp.headers = {}\n        resp._content = b'{\"foo\": \"bar\"}'\n\n        e = TLSException(resp)\n        self.assertTrue(isinstance(e.error_code, str))\n        self.assertTrue(isinstance(e.error_message, str))\n        self.assertTrue(len(str(e)) > 0)\n\n    def test_tls_exception_non_json(self):\n        resp = Response()\n        resp.status_code = 500\n        resp.headers = {}\n        resp._content = b'not-json'\n\n        e = TLSException(resp)\n        self.assertEqual(e.error_code, resp.text)\n        self.assertEqual(e.error_message, resp.text)\n\n    def test_tls_exception_non_dict_json(self):\n        resp = Response()\n        resp.status_code = 500\n        resp.headers = {}\n        resp._content = b'[\"a\", \"b\"]'\n\n        e = TLSException(resp)\n        self.assertEqual(e.error_code, resp.text)\n        self.assertEqual(e.error_message, resp.text)\n\n    def test_tls_util_replace_white_space_character(self):\n        self.assertIsNone(TLSUtil.replace_white_space_character(None))\n        self.assertEqual(TLSUtil.replace_white_space_character(\"a\\r\\n\\tb\"), \"a\\\\r\\\\n\\\\tb\")\n\n    def test_should_retry_exception(self):\n        s = TLSService(endpoint=\"example.com\", access_key_id=\"ak\", access_key_secret=\"sk\", region=\"cn-beijing\")\n        self.assertTrue(s._TLSService__should_retry_exception(req_exc.Timeout()))\n        self.assertTrue(s._TLSService__should_retry_exception(req_exc.ConnectionError()))\n        self.assertFalse(s._TLSService__should_retry_exception(ValueError(\"bad\")))\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/test_search_traces.py",
    "content": "\"\"\"Unit tests for SearchTraces functionality.\"\"\"\nimport os\nimport unittest\nimport random\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import (\n    SearchTracesRequest,\n    CreateTraceInstanceRequest,\n    DeleteTraceInstanceRequest\n)\n\n\nclass TestSearchTraces(unittest.TestCase):\n    \"\"\"Test cases for SearchTraces functionality.\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"\")\n\n    def test_search_traces_request_validation(self):\n        \"\"\"测试 SearchTracesRequest 参数验证\"\"\"\n        # 测试有效请求\n        trace_instance_id = \"test-trace-instance-id\"\n        query = {\n            \"Limit\": 10,\n            \"Offset\": 0,\n            \"ServiceName\": \"test-service\",\n            \"OperationName\": \"test-operation\"\n        }\n        request = SearchTracesRequest(trace_instance_id=trace_instance_id, query=query)\n\n        # 验证请求参数\n        self.assertTrue(request.check_validation())\n        self.assertEqual(request.trace_instance_id, trace_instance_id)\n        self.assertEqual(request.query, query)\n\n        # 测试空参数验证\n        invalid_request = SearchTracesRequest(trace_instance_id=None)\n        self.assertFalse(invalid_request.check_validation())\n\n    def test_search_traces_request_serialization(self):\n        \"\"\"测试 SearchTracesRequest 序列化\"\"\"\n        trace_instance_id = \"test-trace-instance-id\"\n        query = {\n            \"Limit\": 10,\n            \"Offset\": 0,\n            \"ServiceName\": \"test-service\"\n        }\n        request = SearchTracesRequest(trace_instance_id=trace_instance_id, query=query)\n\n        api_input = request.get_api_input()\n        expected = {\n            \"TraceInstanceId\": trace_instance_id,\n            \"Query\": query\n        }\n        self.assertEqual(api_input, expected)\n\n    def test_search_traces_request_minimal(self):\n        \"\"\"测试最小化的 SearchTracesRequest\"\"\"\n        trace_instance_id = \"test-trace-instance-id\"\n        request = SearchTracesRequest(trace_instance_id=trace_instance_id)\n\n        self.assertTrue(request.check_validation())\n        api_input = request.get_api_input()\n        expected = {\n            \"TraceInstanceId\": trace_instance_id,\n            \"Query\": {}\n        }\n        self.assertEqual(api_input, expected)\n\n    def test_search_traces_integration(self):\n        \"\"\"测试 SearchTraces 完整流程\"\"\"\n        if not all([self.endpoint, self.access_key_id, self.access_key_secret,\n                    self.region]):\n            self.skipTest(\"缺少必要的环境变量\")\n\n        tls_service = TLSService(\n            self.endpoint, self.access_key_id, self.access_key_secret,\n            self.region)\n\n        # 创建随机名称的 Trace 实例\n        random1 = str(random.randint(0, 100))\n        random2 = str(random.randint(0, 100))\n        trace_name = f\"单元测试{random1}-{random2}\"\n\n        # 注意：这里需要一个有效的 ProjectId，可以从环境变量获取或使用默认值\n        project_id = os.environ.get(\"TEST_PROJECT_ID\", \"test-project-id\")\n\n        try:\n            # 创建 Trace 实例\n            create_request = CreateTraceInstanceRequest(\n                project_id=project_id,\n                trace_instance_name=trace_name\n            )\n            create_response = tls_service.create_trace_instance(create_request)\n            trace_instance_id = create_response.get_trace_instance_id()\n\n            # 搜索 Traces\n            search_request = SearchTracesRequest(\n                trace_instance_id=trace_instance_id,\n                query={\n                    \"Limit\": 10,\n                    \"Offset\": 0\n                }\n            )\n            search_response = tls_service.search_traces(search_request)\n\n            # 验证响应\n            self.assertIsInstance(search_response.get_total(), int)\n            self.assertIsInstance(search_response.get_trace_infos(), list)\n\n        finally:\n            # 清理：删除 Trace 实例\n            if 'trace_instance_id' in locals():\n                delete_request = DeleteTraceInstanceRequest(\n                    trace_instance_id=trace_instance_id)\n                tls_service.delete_trace_instance(delete_request)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/test_untag_resources.py",
    "content": "import os\nimport unittest\nfrom unittest.mock import Mock, patch\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import UntagResourcesRequest\nfrom volcengine.tls.tls_responses import UntagResourcesResponse\n\n\nclass TestUntagResources(unittest.TestCase):\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"https://tls-cn-beijing.ivolces.com\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"cn-beijing\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"test-ak\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"test-sk\")\n\n    def setUp(self):\n        self.tls_service = TLSService(\n            self.endpoint, self.access_key_id, self.access_key_secret, self.region)\n\n    def test_untag_resources_request_validation(self):\n        \"\"\"测试 UntagResourcesRequest 参数验证\"\"\"\n        # 测试正常情况\n        request = UntagResourcesRequest(\n            resource_type=\"project\",\n            resources_ids=[\"project-123\"],\n            tag_keys=[\"env\", \"owner\"]\n        )\n        self.assertTrue(request.check_validation())\n\n        # 测试缺少 resource_type\n        request = UntagResourcesRequest(\n            resource_type=None,\n            resources_ids=[\"project-123\"],\n            tag_keys=[\"env\", \"owner\"]\n        )\n        self.assertFalse(request.check_validation())\n\n        # 测试缺少 resources_ids\n        request = UntagResourcesRequest(\n            resource_type=\"project\",\n            resources_ids=None,\n            tag_keys=[\"env\", \"owner\"]\n        )\n        self.assertFalse(request.check_validation())\n\n        # 测试缺少 tag_keys\n        request = UntagResourcesRequest(\n            resource_type=\"project\",\n            resources_ids=[\"project-123\"],\n            tag_keys=None\n        )\n        self.assertFalse(request.check_validation())\n\n    def test_untag_resources_request_api_input(self):\n        \"\"\"测试 UntagResourcesRequest 的 API 输入格式\"\"\"\n        request = UntagResourcesRequest(\n            resource_type=\"topic\",\n            resources_ids=[\"topic-123\", \"topic-456\"],\n            tag_keys=[\"env\", \"team\", \"project\"]\n        )\n        \n        api_input = request.get_api_input()\n\n        self.assertEqual(api_input[\"ResourceType\"], \"topic\")\n        self.assertEqual(api_input[\"ResourcesIds\"], [\"topic-123\", \"topic-456\"])\n        self.assertEqual(api_input[\"TagKeys\"], [\"env\", \"team\", \"project\"])\n\n    @patch('volcengine.tls.TLSService.TLSService._TLSService__request')\n    def test_untag_resources_service_call(self, mock_request):\n        \"\"\"测试 TLSService.untag_resources 方法调用\"\"\"\n        # 模拟响应\n        mock_response = Mock()\n        mock_response.headers = {\n            'X-Tls-Requestid': 'test-request-id',\n            'Content-Type': 'application/json',\n        }\n        mock_response.text = '{}'\n        mock_request.return_value = mock_response\n\n        request = UntagResourcesRequest(\n            resource_type=\"project\",\n            resources_ids=[\"project-123\"],\n            tag_keys=[\"env\", \"owner\"]\n        )\n\n        response = self.tls_service.untag_resources(request)\n\n        # 验证调用了正确的 API\n        mock_request.assert_called_once_with(\n            api='/UntagResources',\n            body={\n                'ResourceType': 'project',\n                'ResourcesIds': ['project-123'],\n                'TagKeys': ['env', 'owner']\n            }\n        )\n\n        # 验证响应类型\n        self.assertIsInstance(response, UntagResourcesResponse)\n        self.assertEqual(response.get_request_id(), 'test-request-id')\n\n    @patch('volcengine.tls.TLSService.TLSService._TLSService__request')\n    def test_untag_resources_with_topic_resource(self, mock_request):\n        \"\"\"测试使用 topic 资源的解绑标签\"\"\"\n        mock_response = Mock()\n        mock_response.headers = {\n            'X-Tls-Requestid': 'test-request-id',\n            'Content-Type': 'application/json',\n        }\n        mock_response.text = '{}'\n        mock_request.return_value = mock_response\n\n        request = UntagResourcesRequest(\n            resource_type=\"topic\",\n            resources_ids=[\"topic-123\"],\n            tag_keys=[\"team\"]\n        )\n\n        response = self.tls_service.untag_resources(request)\n\n        mock_request.assert_called_once_with(\n            api='/UntagResources',\n            body={\n                'ResourceType': 'topic',\n                'ResourcesIds': ['topic-123'],\n                'TagKeys': ['team']\n            }\n        )\n\n        self.assertIsInstance(response, UntagResourcesResponse)\n\n    @patch('volcengine.tls.TLSService.TLSService._TLSService__request')\n    def test_untag_resources_with_multiple_resources(self, mock_request):\n        \"\"\"测试多个资源的解绑标签\"\"\"\n        mock_response = Mock()\n        mock_response.headers = {\n            'X-Tls-Requestid': 'test-request-id',\n            'Content-Type': 'application/json',\n        }\n        mock_response.text = '{}'\n        mock_request.return_value = mock_response\n\n        request = UntagResourcesRequest(\n            resource_type=\"topic\",\n            resources_ids=[\"topic-123\", \"topic-456\", \"topic-789\"],\n            tag_keys=[\"key1\", \"key2\", \"key3\", \"key4\"]\n        )\n\n        response = self.tls_service.untag_resources(request)\n\n        mock_request.assert_called_once_with(\n            api='/UntagResources',\n            body={\n                'ResourceType': 'topic',\n                'ResourcesIds': ['topic-123', 'topic-456', 'topic-789'],\n                'TagKeys': ['key1', 'key2', 'key3', 'key4']\n            }\n        )\n\n        self.assertIsInstance(response, UntagResourcesResponse)\n\n    def test_untag_resources_invalid_request(self):\n        \"\"\"测试无效请求参数时的异常处理\"\"\"\n        request = UntagResourcesRequest(\n            resource_type=None,\n            resources_ids=[\"project-123\"],\n            tag_keys=[\"env\"]\n        )\n\n        with self.assertRaises(Exception) as context:\n            self.tls_service.untag_resources(request)\n\n        # 验证抛出了 TLSException\n        self.assertIn(\"InvalidArgument\", str(context.exception))\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/tls_service_test.py",
    "content": "import os\nimport unittest\nimport random\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import *\nfrom volcengine.tls.tls_responses import *\n\n\nclass TestTLSService(unittest.TestCase):\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        # 使用 get 避免在未配置环境变量时抛出 KeyError\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"\")\n\n    def test_tls_service(self):\n        tls_client1 = TLSService(\n            self.endpoint, self.access_key_id, self.access_key_secret, self.region)\n        tls_client2 = TLSService(\n            self.endpoint + \"test\",\n            self.access_key_id + \"test\",\n            self.access_key_secret + \"test\",\n            self.region + \"test\"\n        )\n\n        self.assertNotEqual(tls_client1, tls_client2)\n        self.assertEqual(self.region, tls_client1.get_region())\n        self.assertEqual(self.region + \"test\", tls_client2.get_region())\n\n    def test_check_scheme_and_endpoint(self):\n        endpoint = \"http://tls-cn-beijing.ivolces.com\"\n        tls_client = TLSService(\n            endpoint, self.access_key_id, self.access_key_secret, self.region)\n        server_info = tls_client.get_service_info()\n        self.assertEqual(\"http\", server_info.scheme)\n        self.assertEqual(\"tls-cn-beijing.ivolces.com\", server_info.host)\n\n        endpoint = \"https://tls-cn-beijing.ivolces.com\"\n        tls_client = TLSService(\n            endpoint, self.access_key_id, self.access_key_secret, self.region)\n        server_info = tls_client.get_service_info()\n        self.assertEqual(\"https\", server_info.scheme)\n        self.assertEqual(\"tls-cn-beijing.ivolces.com\", server_info.host)\n\n        endpoint = \"tls-cn-beijing.ivolces.com\"\n        tls_client = TLSService(\n            endpoint, self.access_key_id, self.access_key_secret, self.region)\n        server_info = tls_client.get_service_info()\n        self.assertEqual(\"https\", server_info.scheme)\n        self.assertEqual(endpoint, server_info.host)\n\n    def test_active_tls_account(self):\n        \"\"\"测试激活TLS账户\"\"\"\n        if not all([self.endpoint, self.region, self.access_key_id, self.access_key_secret]):\n            self.skipTest(\"缺少必要的环境变量，跳过 ActiveTlsAccount 集成测试\")\n\n        tls_client = TLSService(\n            self.endpoint, self.access_key_id, self.access_key_secret, self.region)\n\n        # 测试激活TLS账户\n        try:\n            response = tls_client.active_tls_account()\n            # 验证响应不为空且包含请求ID\n            self.assertIsNotNone(response)\n            self.assertIsNotNone(response.get_request_id())\n            print(f\"ActiveTlsAccount成功，请求ID: {response.get_request_id()}\")\n        except Exception as e:\n            # 如果API返回错误，验证错误信息\n            print(f\"ActiveTlsAccount测试完成，响应: {str(e)}\")\n            # 即使是错误响应，也应该包含请求ID\n            pass  # 确保测试通过，因为API行为可能因账户状态而异\n\n    def test_trace_instance_operations(self):\n        \"\"\"测试Trace实例相关操作\"\"\"\n        if not all([self.endpoint, self.region, self.access_key_id, self.access_key_secret]):\n            self.skipTest(\"缺少必要的环境变量，跳过 Trace 实例集成测试\")\n\n        tls_client = TLSService(\n            self.endpoint, self.access_key_id, self.access_key_secret, self.region)\n\n        # 测试项目ID\n        project_id = \"d0b016d4-5ba0-454d-bd87-2d7cabf78cab\"\n\n        # 生成随机名称\n        random1 = str(random.randint(0, 100))\n        random2 = str(random.randint(0, 100))\n        trace_name = f\"单元测试{random1}-{random2}\"\n\n        # 1. 查询Trace实例列表\n        describe_trace_instances_request = DescribeTraceInstancesRequest(\n            page_number=1,\n            page_size=20\n        )\n        trace_list = tls_client.describe_trace_instances(describe_trace_instances_request)\n        self.assertIsNotNone(trace_list)\n        self.assertIsInstance(trace_list, DescribeTraceInstancesResponse)\n\n        # 2. 创建Trace实例\n        create_trace_instance_request = CreateTraceInstanceRequest(\n            project_id=project_id,\n            trace_instance_name=trace_name\n        )\n        trace_create = tls_client.create_trace_instance(create_trace_instance_request)\n        self.assertIsNotNone(trace_create)\n        self.assertIsInstance(trace_create, CreateTraceInstanceResponse)\n        self.assertIsNotNone(trace_create.get_trace_instance_id())\n\n        trace_instance_id = trace_create.get_trace_instance_id()\n\n        # 3. 查询Trace实例详情\n        describe_trace_instance_request = DescribeTraceInstanceRequest(\n            trace_instance_id=trace_instance_id\n        )\n        trace_detail = tls_client.describe_trace_instance(describe_trace_instance_request)\n        self.assertIsNotNone(trace_detail)\n        self.assertIsInstance(trace_detail, DescribeTraceInstanceResponse)\n        self.assertIsNotNone(trace_detail.get_trace_instance())\n\n        # 4. 修改Trace实例\n        modify_trace_instance_request = ModifyTraceInstanceRequest(\n            trace_instance_id=trace_instance_id,\n            description=\"jest-modify\"\n        )\n        trace_modify = tls_client.modify_trace_instance(modify_trace_instance_request)\n        self.assertIsNotNone(trace_modify)\n        self.assertIsInstance(trace_modify, ModifyTraceInstanceResponse)\n\n        # 5. 删除Trace实例\n        delete_trace_instance_request = DeleteTraceInstanceRequest(\n            trace_instance_id=trace_instance_id\n        )\n        trace_delete = tls_client.delete_trace_instance(delete_trace_instance_request)\n        self.assertIsNotNone(trace_delete)\n        self.assertIsInstance(trace_delete, DeleteTraceInstanceResponse)\n\n    def test_modify_etl_task_status(self):\n        if not all([self.endpoint, self.region, self.access_key_id, self.access_key_secret]):\n            self.skipTest(\"缺少必要的环境变量，跳过 ETL 任务状态集成测试\")\n\n        tls_client = TLSService(\n            self.endpoint, self.access_key_id, self.access_key_secret, self.region)\n\n        # Test enabling ETL task\n        task_id = \"test-etl-task-12345\"\n        enable_request = ModifyETLTaskStatusRequest(task_id=task_id, enable=True)\n        enable_response = tls_client.modify_etl_task_status(enable_request)\n        self.assertIsNotNone(enable_response)\n        self.assertIsNotNone(enable_response.request_id)\n\n        # Test disabling ETL task\n        disable_request = ModifyETLTaskStatusRequest(task_id=task_id, enable=False)\n        disable_response = tls_client.modify_etl_task_status(disable_request)\n        self.assertIsNotNone(disable_response)\n        self.assertIsNotNone(disable_response.request_id)\n\n    def test_delete_etl_task(self):\n        \"\"\"测试删除ETL任务\"\"\"\n        tls_service = TLSService(\n            self.endpoint, self.access_key_id, self.access_key_secret, self.region)\n\n        # 生成测试任务ID\n        task_id = f\"test-etl-task-{str(random.random()).replace('.', '')}\"\n\n        # 创建删除ETL任务请求\n        delete_request = DeleteETLTaskRequest(task_id=task_id)\n\n        # 验证请求参数\n        self.assertTrue(delete_request.check_validation())\n        self.assertEqual(delete_request.task_id, task_id)\n\n        # 测试API输入格式\n        api_input = delete_request.get_api_input()\n        self.assertIn('TaskId', api_input)\n        self.assertEqual(api_input['TaskId'], task_id)\n\n    def test_describe_schedule_sql_tasks(self):\n        \"\"\"测试DescribeScheduleSqlTasks接口\"\"\"\n        if not all([self.endpoint, self.region, self.access_key_id, self.access_key_secret]):\n            self.skipTest(\"缺少必要的环境变量，跳过 DescribeScheduleSqlTasks 集成测试\")\n\n        import uuid\n        import random\n        from volcengine.tls.tls_requests import CreateProjectRequest, CreateTopicRequest, DeleteTopicRequest, DeleteProjectRequest\n\n        # 创建测试项目和主题\n        project_name = f\"tls-python-sdk-test-schedule-sql-project-{str(uuid.uuid4()).replace('-', '')[:16]}\"\n        topic_name = f\"tls-python-sdk-test-schedule-sql-topic-{str(uuid.uuid4()).replace('-', '')[:16]}\"\n\n        tls_service = TLSService(\n            self.endpoint, self.access_key_id, self.access_key_secret, self.region)\n\n        # 创建项目\n        create_project_request = CreateProjectRequest(\n            project_name=project_name,\n            region=self.region\n        )\n        project_response = tls_service.create_project(create_project_request)\n        project_id = project_response.get_project_id()\n\n        try:\n            # 创建主题\n            create_topic_request = CreateTopicRequest(\n                project_id=project_id,\n                topic_name=topic_name,\n                shard_count=1,\n                ttl=1\n            )\n            topic_response = tls_service.create_topic(create_topic_request)\n            topic_id = topic_response.get_topic_id()\n\n            try:\n                # 测试DescribeScheduleSqlTasks接口 - 基本查询\n                from volcengine.tls.tls_requests import DescribeScheduleSqlTasksRequest\n\n                describe_request = DescribeScheduleSqlTasksRequest(\n                    project_id=project_id,\n                    topic_id=topic_id,\n                    page_number=1,\n                    page_size=20\n                )\n\n                response = tls_service.describe_schedule_sql_tasks(describe_request)\n                self.assertIsNotNone(response)\n                self.assertIsInstance(response.get_total(), int)\n                self.assertIsInstance(response.get_tasks(), list)\n\n                # 测试带TaskName参数的查询\n                describe_request_with_name = DescribeScheduleSqlTasksRequest(\n                    task_name=\"test-task\",\n                    page_number=1,\n                    page_size=20\n                )\n\n                response_with_name = tls_service.describe_schedule_sql_tasks(describe_request_with_name)\n                self.assertIsNotNone(response_with_name)\n                self.assertIsInstance(response_with_name.get_total(), int)\n                self.assertIsInstance(response_with_name.get_tasks(), list)\n\n                # 测试异常场景 - 使用不存在的ProjectId\n                describe_request_invalid = DescribeScheduleSqlTasksRequest(\n                    project_id=\"non-existent-project-id\"\n                )\n\n                # 应该抛出异常或返回空结果\n                try:\n                    response_invalid = tls_service.describe_schedule_sql_tasks(describe_request_invalid)\n                    # 如果返回结果，应该total为0\n                    self.assertGreaterEqual(response_invalid.get_total(), 0)\n                except Exception:\n                    # 抛出异常也是预期行为\n                    pass\n\n            finally:\n                # 删除测试主题\n                delete_topic_request = DeleteTopicRequest(topic_id=topic_id)\n                tls_service.delete_topic(delete_topic_request)\n\n        finally:\n            # 删除测试项目\n            delete_project_request = DeleteProjectRequest(project_id=project_id)\n            tls_service.delete_project(delete_project_request)\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/topic_test.py",
    "content": "# coding=utf-8\n\nimport os\nimport unittest\nimport uuid\n\nfrom volcengine.tls import tls_requests\nfrom volcengine.tls.const import ENABLE_ENCRYPT_CONF, ENCRYPT_TYPE\nfrom volcengine.tls.data import EncryptConf\nfrom volcengine.tls.test.util_test import NewTLSService\n\n\nclass TestTopic(unittest.TestCase):\n\n    cli = None\n\n    project_id = \"\"\n    project_name = \"python-sdk-topic-test-project\" + uuid.uuid4().hex\n\n    topic_ids = []\n\n    @classmethod\n    def setUpClass(cls):\n        required_env = [\"VOLCENGINE_ENDPOINT\", \"VOLCENGINE_REGION\", \"VOLCENGINE_ACCESS_KEY_ID\", \"VOLCENGINE_ACCESS_KEY_SECRET\"]\n        if not all(os.environ.get(k) for k in required_env):\n            raise unittest.SkipTest(\"缺少必要的环境变量，跳过 TLS topic 集成测试\")\n\n        cls.cli = NewTLSService()\n\n        # 创建project\n        create_project_request = tls_requests.CreateProjectRequest(\n            project_name=cls.project_name,\n            region=os.environ.get(\"VOLCENGINE_REGION\", \"\"),\n        )\n        create_project_response = cls.cli.create_project(\n            create_project_request)\n        cls.assertTrue(create_project_response.project_id,\n                       \"create project failed\")\n        cls.project_id = create_project_response.project_id\n\n    @classmethod\n    def tearDownClass(cls):\n        for topic_id in cls.topic_ids:\n            # 删除topic\n            delete_topic_request = tls_requests.DeleteTopicRequest(topic_id)\n            delete_topic_response = cls.cli.delete_topic(delete_topic_request)\n            cls.assertTrue(delete_topic_response.request_id,\n                           \"delete topic failed\")\n\n        # 删除project\n        delete_project_request = tls_requests.DeleteProjectRequest(\n            project_id=cls.project_id)\n        delete_project_response = cls.cli.delete_project(\n            delete_project_request)\n        cls.assertTrue(delete_project_response.request_id,\n                       \"delete project failed\")\n\n    def setUp(self):\n        pass\n\n    def tearDown(self):\n        pass\n\n    def test_create_topic_with_kms(self):\n        # 创建\n        create_topic_request = tls_requests.CreateTopicRequest(\n            project_id=self.project_id,\n            topic_name=\"python-sdk-topic-test-topic\" + uuid.uuid4().hex,\n            ttl=1,\n            shard_count=1,\n            encrypt_conf=EncryptConf(\n                enable=True,\n                encrypt_type=\"default\",\n            ).json(),\n        )\n        create_topic_response = self.cli.create_topic(create_topic_request)\n        self.assertTrue(create_topic_response.topic_id)\n        self.topic_ids.append(create_topic_response.topic_id)\n\n        # 查询\n        describe_topic_request = tls_requests.DescribeTopicRequest(\n            topic_id=create_topic_response.topic_id,\n        )\n        describe_topic_response = self.cli.describe_topic(\n            describe_topic_request)\n        self.assertTrue(describe_topic_response.get_request_id())\n        self.assertEqual(create_topic_request.encrypt_conf.get(\n            ENCRYPT_TYPE), describe_topic_response.topic.encrypt_conf.get(ENCRYPT_TYPE))\n\n        # 修改\n        modifyTopicRequest = tls_requests.ModifyTopicRequest(\n            topic_id=create_topic_response.topic_id,\n            encrypt_conf=EncryptConf(\n                enable=False,\n            ).json(),\n        )\n        modify_topic_response = self.cli.modify_topic(modifyTopicRequest)\n        self.assertTrue(modify_topic_response.get_request_id())\n\n       # 查询\n        describe_topic_request = tls_requests.DescribeTopicRequest(\n            topic_id=create_topic_response.topic_id,\n        )\n        describe_topic_response = self.cli.describe_topic(\n            describe_topic_request)\n        self.assertTrue(describe_topic_response.get_request_id())\n        self.assertFalse(\n            describe_topic_response.topic.encrypt_conf.get(ENABLE_ENCRYPT_CONF))\n\n\nif __name__ == '__main__':\n    unittest.main()\n"
  },
  {
    "path": "volcengine/tls/test/trace_test.py",
    "content": "import os\nimport unittest\nimport random\n\nfrom volcengine.tls.TLSService import TLSService\nfrom volcengine.tls.tls_requests import *\n\n\nclass TestTrace(unittest.TestCase):\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.endpoint = os.environ.get(\"VOLCENGINE_ENDPOINT\", \"\")\n        self.region = os.environ.get(\"VOLCENGINE_REGION\", \"\")\n        self.access_key_id = os.environ.get(\"VOLCENGINE_ACCESS_KEY_ID\", \"\")\n        self.access_key_secret = os.environ.get(\"VOLCENGINE_ACCESS_KEY_SECRET\", \"\")\n\n    def test_describe_trace_instance(self):\n        \"\"\"测试 DescribeTraceInstance API\"\"\"\n        if not all([self.endpoint, self.access_key_id, self.access_key_secret, self.region]):\n            self.skipTest(\"缺少必要的环境变量\")\n\n        tls_service = TLSService(\n            self.endpoint, self.access_key_id, self.access_key_secret, self.region)\n\n        # 模拟测试数据\n        trace_instance_id = \"test-trace-instance-id\"\n        \n        # 创建请求\n        request = DescribeTraceInstanceRequest(trace_instance_id=trace_instance_id)\n        \n        # 验证请求参数\n        self.assertTrue(request.check_validation())\n        self.assertEqual(request.trace_instance_id, trace_instance_id)\n        \n        # 测试空参数验证\n        invalid_request = DescribeTraceInstanceRequest(trace_instance_id=None)\n        self.assertFalse(invalid_request.check_validation())\n\n    def test_trace_instance_request_serialization(self):\n        \"\"\"测试请求参数的序列化\"\"\"\n        trace_instance_id = \"test-trace-instance-id\"\n        request = DescribeTraceInstanceRequest(trace_instance_id=trace_instance_id)\n        \n        api_input = request.get_api_input()\n        expected = {\"TraceInstanceId\": trace_instance_id}\n        self.assertEqual(api_input, expected)\n\n\nif __name__ == '__main__':\n    unittest.main()"
  },
  {
    "path": "volcengine/tls/test/util_test.py",
    "content": "# coding=utf-8\nimport os\nimport unittest\n\nfrom volcengine.tls.TLSService import TLSService\n\n\ndef NewTLSService():\n    required_env = [\"VOLCENGINE_ENDPOINT\", \"VOLCENGINE_REGION\", \"VOLCENGINE_ACCESS_KEY_ID\", \"VOLCENGINE_ACCESS_KEY_SECRET\"]\n    if not all(os.environ.get(k) for k in required_env):\n        raise unittest.SkipTest(\"缺少必要的环境变量，跳过 TLS 集成测试\")\n    return TLSService(\n        endpoint=os.environ[\"VOLCENGINE_ENDPOINT\"],\n        access_key_id=os.environ[\"VOLCENGINE_ACCESS_KEY_ID\"],\n        access_key_secret=os.environ[\"VOLCENGINE_ACCESS_KEY_SECRET\"],\n        region=os.environ[\"VOLCENGINE_REGION\"],\n    )\n"
  },
  {
    "path": "volcengine/tls/tls_exception.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport json\nfrom json import JSONDecodeError\n\nfrom requests import Response\n\nfrom volcengine.tls.const import *\n\n\nclass TLSException(Exception):\n    def __init__(self, response: Response = None, error_code: str = None, error_message: str = None):\n        self.http_code = 0\n        self.request_id = \"\"\n        self.response_header = {}\n        if response is not None:\n            self.http_code = response.status_code\n            self.response_header = response.headers\n            self.request_id = response.headers.get(X_TLS_REQUEST_ID)\n\n            try:\n                response_body = json.loads(response.text)\n                if isinstance(response_body, dict):\n                    self.error_code = response_body.get(\"ErrorCode\") or response.text\n                    self.error_message = response_body.get(\"ErrorMessage\") or response.text\n                else:\n                    self.error_code = response.text\n                    self.error_message = response.text\n            except (JSONDecodeError, TypeError, ValueError, KeyError):\n                self.error_code = response.text\n                self.error_message = response.text\n        else:\n            self.error_code = error_code\n            self.error_message = error_message\n\n    def __str__(self):\n        exception_info = \"Detailed exception information is listed below.\"\n\n        if \"request_id\" in self.__dict__:\n            exception_info += \"\\nRequestId: {}\\nHTTP status code: {}\".format(self.request_id, self.http_code)\n\n        exception_info += \"\\nErrorCode: {}\\nErrorMessage: {}\".format(self.error_code, self.error_message)\n\n        return exception_info\n"
  },
  {
    "path": "volcengine/tls/tls_requests.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\nimport math\n\ntry:\n    import lz4.block as lz4\nexcept ImportError:\n    try:\n        import lz4\n    except ImportError:\n        lz4 = None\n\ntry:\n    import zlib\nexcept ImportError:\n    zlib = None\n\nimport json\n\nfrom volcengine.tls.log_pb2 import LogGroupList\nfrom volcengine.tls.data import *\nfrom volcengine.tls.tls_exception import TLSException\nimport time\n\n\nclass TLSRequest:\n    def get_api_input(self):\n        api_input = {}\n\n        for key in self.__dict__.keys():\n            if self.__dict__[key] is not None:\n                api_input[snake_to_pascal(key)] = self.__dict__[key]\n\n        return api_input\n\n\nclass CreateProjectRequest(TLSRequest):\n    def __init__(self, project_name: str, region: str, description: str = None,\n                 iam_project_name: str = None, tags: List[TagInfo] = None):\n        \"\"\"\n        :param project_name: 日志项目的名称\n        :type project_name: str\n        :param region: 地域\n        :type region: str\n        :param description: 日志项目描述信息\n        :type description: str\n        :param iam_project_name: 当前创建的日志项目所属的IAM项目（未指定此参数时，日志服务会将日志项目添加到名为default的IAM项目中）\n        :type iam_project_name: str\n        :param tags: 日志项目标签信息\n        :type tags: List[TagInfo]\n        \"\"\"\n        self.project_name = project_name\n        self.region = region\n        self.description = description\n        self.iam_project_name = iam_project_name\n        self.tags = tags\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.project_name is not None and self.region is not None\n\n    def get_api_input(self):\n        body = super(CreateProjectRequest, self).get_api_input()\n\n        if self.tags is not None:\n            body[TAGS] = []\n            for tag in self.tags:\n                body[TAGS].append(tag.json())\n\n        return body\n\n\nclass DeleteProjectRequest(TLSRequest):\n    def __init__(self, project_id: str):\n        \"\"\"\n        :param project_id: 日志项目 ID\n        :type project_id: string\n        \"\"\"\n        self.project_id = project_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.project_id is None:\n            return False\n        return True\n\n\nclass ModifyProjectRequest(TLSRequest):\n    def __init__(self, project_id: str, project_name: str = None, description: str = None):\n        \"\"\"\n        :param project_id: 日志项目 ID\n        :type project_id: string\n        :param project_name:日志项目的名称\n        :type project_name:str\n        :param description:日志项目描述信息\n        :type description:str\n        \"\"\"\n        self.project_id = project_id\n        self.project_name = project_name\n        self.description = description\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.project_id is None:\n            return False\n        return True\n\n\nclass DescribeProjectRequest(TLSRequest):\n    def __init__(self, project_id: str):\n        \"\"\"\n        :param project_id: 日志项目 ID\n        :type project_id: string\n        \"\"\"\n        self.project_id = project_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.project_id is None:\n            return False\n        return True\n\n\nclass DescribeProjectsRequest(TLSRequest):\n    def __init__(self, page_number: int = 1, page_size: int = 20,\n                 project_name: str = None, project_id: str = None, is_full_name: bool = False,\n                 iam_project_name: str = None, tags: List[TagInfo] = None):\n        \"\"\"\n\n        :param page_number: 分页查询时的页码（默认为1）\n        :type page_number: int\n        :param page_size: 分页大小（默认为20，最大为100）\n        :type page_size: int\n        :param project_name: 日志项目的名称\n        :type project_name: str\n        :param project_id: 日志项目ID\n        :type project_id: str\n        :param is_full_name: 根据ProjectName筛选时，是否精确匹配\n        :type is_full_name: bool\n        :param iam_project_name: 当前创建的日志项目所属的IAM项目（未指定此参数时，日志服务会将日志项目添加到名为default的IAM项目中）\n        :type iam_project_name: str\n        :param tags: 日志项目标签信息\n        :type tags: List[TagInfo]\n        \"\"\"\n        self.page_number = page_number\n        self.page_size = page_size\n        self.project_name = project_name\n        self.project_id = project_id\n        self.is_full_name = is_full_name\n        self.iam_project_name = iam_project_name\n        self.tags = tags\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return True\n\n    def get_api_input(self):\n        body = super(DescribeProjectsRequest, self).get_api_input()\n\n        if self.tags is not None:\n            body[TAGS] = []\n            for tag in self.tags:\n                body[TAGS].append(tag.json())\n            body[TAGS] = json.dumps(body[TAGS])\n\n        return body\n\n\nclass CreateTopicRequest(TLSRequest):\n    def __init__(self, topic_name: str, project_id: str, ttl: int, shard_count: int, description: str = None,\n                 auto_split: bool = True, max_split_shard: int = 50, enable_tracking: bool = False,\n                 time_key: str = None, time_format: str = None, tags: List[TagInfo] = None, log_public_ip: bool = True,\n                 enable_hot_ttl: bool = False, hot_ttl: int = None, cold_ttl: int = None, archive_ttl: int = None,\n                 encrypt_conf: EncryptConf = None, metering_mode: str = None):\n        \"\"\"\n        :param topic_name: 日志主题名称\n        :type topic_name: str\n        :param project_id: 日志主题所属的日志项目ID\n        :type project_id: str\n        :param ttl: 日志在日志服务中的保存时间（单位天，默认30天）\n        :type ttl: int\n        :param shard_count: 日志分区的数量（默认创建1个分区，取值范围为1～10）\n        :type shard_count: int\n        :param description: 日志主题描述\n        :type description: str\n        :param auto_split: 是否开启分区的自动分裂功能\n        :type auto_split: bool\n        :param max_split_shard: 分区的最大分裂数，即分区分裂后，所有分区的最大数量\n        :type max_split_shard: int\n        :param enable_tracking: 是否开启WebTracking功能\n        :type enable_tracking: bool\n        :param time_key: 日志时间字段的字段名称\n        :type time_key: str\n        :param time_format: 时间字段的解析格式\n        :type time_format: str\n        :param tags: 日志主题标签信息\n        :type tags: List[TagInfo]\n        :param log_public_ip: 是否开启记录外网IP功能\n        :type log_public_ip: bool\n        :param enable_hot_ttl: 是否开启冷热归档\n        :type enable_hot_ttl: bool\n        :param hot_ttl: 热数据保留时间\n        :type hot_ttl: int\n        :param cold_ttl: 冷数据保留时间\n        :type cold_ttl: int\n        :param archive_ttl: 归档数据保留时间\n        :type archive_ttl: int\n        :param encrypt_conf: kms加密配置\n        :type encrypt_conf: EncryptConf\n        \"\"\"\n        self.topic_name = topic_name\n        self.project_id = project_id\n        self.ttl = ttl\n        self.shard_count = shard_count\n        self.description = description\n        self.auto_split = auto_split\n        self.max_split_shard = max_split_shard\n        self.enable_tracking = enable_tracking\n        self.time_key = time_key\n        self.time_format = time_format\n        self.tags = tags\n        self.log_public_ip = log_public_ip\n        self.enable_hot_ttl = enable_hot_ttl\n        self.hot_ttl = hot_ttl\n        self.cold_ttl = cold_ttl\n        self.archive_ttl = archive_ttl\n        self.encrypt_conf = encrypt_conf\n        self.metering_mode = metering_mode\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_name is None or self.project_id is None or self.ttl is None or self.shard_count is None:\n            return False\n        return True\n\n    def get_api_input(self):\n        body = super(CreateTopicRequest, self).get_api_input()\n\n        if self.tags is not None:\n            body[TAGS] = []\n            for tag in self.tags:\n                body[TAGS].append(tag.json())\n\n        if self.log_public_ip is not None:\n            del body[\"LogPublicIp\"]\n            body[LOG_PUBLIC_IP] = self.log_public_ip\n\n        return body\n\n\nclass DeleteTopicRequest(TLSRequest):\n    def __init__(self, topic_id: str):\n        \"\"\"\n        :param topic_id:日志主题 ID\n        :type topic_id:str\n        \"\"\"\n        self.topic_id = topic_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None:\n            return False\n        return True\n\n\nclass ModifyTopicRequest(TLSRequest):\n    def __init__(self, topic_id: str, topic_name: str = None, ttl: int = None, description: str = None,\n                 auto_split: bool = None, max_split_shard: int = None, enable_tracking: bool = None,\n                 time_key: str = None, time_format: str = None, log_public_ip: bool = None,\n                 enable_hot_ttl: bool = False, hot_ttl: int = None, cold_ttl: int = None, archive_ttl: int = None,\n                 encrypt_conf: EncryptConf = None, metering_mode: str = None):\n        \"\"\"\n        :param topic_id:日志主题ID\n        :type topic_id: str\n        :param topic_name: 日志主题名称\n        :type topic_name: str\n        :param ttl: 日志在日志服务中的保存时间（单位天，默认30天）\n        :type ttl: int\n        :param description: 日志主题描述\n        :type description: str\n        :param auto_split: 是否开启分区的自动分裂功能\n        :type auto_split: bool\n        :param max_split_shard: 分区的最大分裂数，即分区分裂后，所有分区的最大数量\n        :type max_split_shard: int\n        :param enable_tracking: 是否开启WebTracking功能\n        :type enable_tracking: bool\n        :param time_key: 日志时间字段的字段名称\n        :type time_key: str\n        :param time_format: 时间字段的解析格式\n        :type time_format: str\n        :param log_public_ip: 是否开启记录外网IP功能\n        :type log_public_ip: bool\n        :param enable_hot_ttl: 是否开启冷热归档\n        :type enable_hot_ttl: bool\n        :param hot_ttl: 热数据保留时间\n        :type hot_ttl: int\n        :param cold_ttl: 冷数据保留时间\n        :type cold_ttl: int\n        :param archive_ttl: 归档数据保留时间\n        :type archive_ttl: int\n        \"\"\"\n        self.topic_id = topic_id\n        self.topic_name = topic_name\n        self.ttl = ttl\n        self.description = description\n        self.auto_split = auto_split\n        self.max_split_shard = max_split_shard\n        self.enable_tracking = enable_tracking\n        self.time_key = time_key\n        self.time_format = time_format\n        self.log_public_ip = log_public_ip\n        self.enable_hot_ttl = enable_hot_ttl\n        self.hot_ttl = hot_ttl\n        self.cold_ttl = cold_ttl\n        self.archive_ttl = archive_ttl\n        self.encrypt_conf = encrypt_conf\n        self.metering_mode = metering_mode\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None:\n            return False\n        return True\n\n    def get_api_input(self):\n        body = super(ModifyTopicRequest, self).get_api_input()\n\n        if self.log_public_ip is not None:\n            del body[\"LogPublicIp\"]\n            body[LOG_PUBLIC_IP] = self.log_public_ip\n\n        return body\n\n\nclass DescribeTopicRequest(TLSRequest):\n    def __init__(self, topic_id: str):\n        \"\"\"\n        :param topic_id:日志主题 ID\n        :type topic_id:str\n        \"\"\"\n        self.topic_id = topic_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None:\n            return False\n        return True\n\n\nclass DescribeTopicsRequest(TLSRequest):\n    def __init__(self, project_id: str = None, page_number: int = 1, page_size: int = 20,\n                 topic_name: str = None, topic_id: str = None, is_full_name: bool = False, tags: List[TagInfo] = None,\n                 project_name: str = None, cursor: str = None, region: str = None, fuzzy_search_key: str = None,\n                 description: str = None, order_by_project: bool = None):\n        \"\"\"\n        :param page_number: 分页查询时的页码（默认为1）\n        :type page_number: int\n        :param page_size: 分页大小（默认为20，最大为100）\n        :type page_size: int\n        :param topic_id: 日志主题ID\n        :type topic_id: str\n        :param topic_name: 日志主题名称\n        :type topic_name: str\n        :param project_id: 日志项目ID\n        :type project_id: str\n        :param is_full_name: 根据TopicName筛选时，是否精确匹配\n        :type is_full_name: bool\n        :param tags: 根据日志主题标签进行筛选\n        :type tags: List[TagInfo]\n        :param project_name: 日志项目名称\n        :type project_name: str\n        \"\"\"\n        self.project_id = project_id\n        self.project_name = project_name\n        self.page_number = page_number\n        self.page_size = page_size\n        self.topic_name = topic_name\n        self.topic_id = topic_id\n        self.is_full_name = is_full_name\n        self.tags = tags\n        self.cursor = cursor\n        self.region = region\n        self.fuzzy_search_key = fuzzy_search_key\n        self.description = description\n        self.order_by_project = order_by_project\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return True\n\n    def get_api_input(self):\n        body = super(DescribeTopicsRequest, self).get_api_input()\n\n        if self.tags is not None:\n            body[TAGS] = []\n            for tag in self.tags:\n                body[TAGS].append(tag.json())\n            body[TAGS] = json.dumps(body[TAGS])\n\n        return body\n\n\nclass SetIndexRequest(TLSRequest):\n    def __init__(self, topic_id: str, full_text: FullTextInfo = None,\n                 key_value: List[KeyValueInfo] = None,\n                 user_inner_key_value: List[KeyValueInfo] = None,\n                 max_text_len: int = None, enable_auto_index: bool = None,\n                 enable_phrase_index: bool = None):\n        \"\"\"\n        :param topic_id: 日志主题ID\n        :type topic_id: str\n        :param full_text: 全文索引配置\n        :type full_text: FullTextInfo\n        :param key_value: 键值索引配置\n        :type key_value: List[KeyValueInfo]\n        :param user_inner_key_value: 预留字段索引配置\n        :type user_inner_key_value: List[KeyValueInfo]\n        :param max_text_len: 统计字段值的最大长度，默认为2048，\n                               取值范围为64~16384，单位为字节\n        :type max_text_len: int\n        :param enable_auto_index: 是否开启索引自动更新，开启后系统将根据\n                                     新出现的字段自动添加到键值索引\n        :type enable_auto_index: bool\n        :param enable_phrase_index: 是否开启索引版短语查询\n        :type enable_phrase_index: bool\n        \"\"\"\n        self.topic_id = topic_id\n        self.full_text = full_text\n        self.key_value = key_value\n        self.user_inner_key_value = user_inner_key_value\n        self.max_text_len = max_text_len\n        self.enable_auto_index = enable_auto_index\n        self.enable_phrase_index = enable_phrase_index\n\n    def get_api_input(self):\n        body = {TOPIC_ID: self.topic_id}\n\n        if self.full_text is not None:\n            body[FULL_TEXT] = self.full_text.json()\n        if self.key_value is not None:\n            body[KEY_VALUE] = []\n            for key_value_info in self.key_value:\n                body[KEY_VALUE].append(key_value_info.json())\n        if self.user_inner_key_value is not None:\n            body[USER_INNER_KEY_VALUE] = []\n            for key_value_info in self.user_inner_key_value:\n                body[USER_INNER_KEY_VALUE].append(key_value_info.json())\n        if self.max_text_len is not None:\n            body[MAX_TEXT_LEN] = self.max_text_len\n        if self.enable_auto_index is not None:\n            body[ENABLE_AUTO_INDEX] = self.enable_auto_index\n        if self.enable_phrase_index is not None:\n            body[ENABLE_PHRASE_INDEX] = self.enable_phrase_index\n\n        return body\n\n\nclass CreateIndexRequest(SetIndexRequest):\n    def __init__(self, topic_id: str, full_text: FullTextInfo = None,\n                 key_value: List[KeyValueInfo] = None,\n                 user_inner_key_value: List[KeyValueInfo] = None,\n                 max_text_len: int = None, enable_auto_index: bool = None,\n                 enable_phrase_index: bool = None):\n        \"\"\"\n        :param topic_id: 日志主题ID\n        :type topic_id: str\n        :param full_text: 全文索引配置\n        :type full_text: FullTextInfo\n        :param key_value: 键值索引配置\n        :type key_value: List[KeyValueInfo]\n        :param user_inner_key_value: 预留字段索引配置\n        :type user_inner_key_value: List[KeyValueInfo]\n        :param max_text_len: 统计字段值的最大长度，默认为2048，\n                               取值范围为64~16384，单位为字节\n        :type max_text_len: int\n        :param enable_auto_index: 是否开启索引自动更新，开启后系统将根据\n                                     新出现的字段自动添加到键值索引\n        :type enable_auto_index: bool\n        :param enable_phrase_index: 是否开启索引版短语查询\n        :type enable_phrase_index: bool\n        \"\"\"\n        super(CreateIndexRequest, self).__init__(topic_id, full_text, key_value,\n                                                   user_inner_key_value, max_text_len,\n                                                   enable_auto_index, enable_phrase_index)\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None:\n            return False\n        return True\n\n\nclass DeleteIndexRequest(TLSRequest):\n    def __init__(self, topic_id: str):\n        \"\"\"\n        :param topic_id: 日志主题ID\n        :type topic_id: str\n        \"\"\"\n        self.topic_id = topic_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None:\n            return False\n        return True\n\n\nclass ModifyIndexRequest(SetIndexRequest):\n    def __init__(self, topic_id: str, full_text: FullTextInfo = None,\n                 key_value: List[KeyValueInfo] = None,\n                 user_inner_key_value: List[KeyValueInfo] = None,\n                 max_text_len: int = None, enable_auto_index: bool = None,\n                 enable_phrase_index: bool = None):\n        \"\"\"\n        :param topic_id: 日志主题ID\n        :type topic_id: str\n        :param full_text: 全文索引配置\n        :type full_text: FullTextInfo\n        :param key_value: 键值索引配置\n        :type key_value: List[KeyValueInfo]\n        :param user_inner_key_value: 预留字段索引配置\n        :type user_inner_key_value: List[KeyValueInfo]\n        :param max_text_len: 统计字段值的最大长度，默认为 2048，取值范围为 64~16384，单位为字节\n        :type max_text_len: int\n        :param enable_auto_index: 是否开启索引自动更新\n        :type enable_auto_index: bool\n        :param enable_phrase_index: 是否开启索引版短语查询\n        :type enable_phrase_index: bool\n        \"\"\"\n        super(ModifyIndexRequest, self).__init__(\n            topic_id, full_text, key_value, user_inner_key_value,\n            max_text_len, enable_auto_index, enable_phrase_index)\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None:\n            return False\n        return True\n\n\nclass DescribeIndexRequest(TLSRequest):\n    def __init__(self, topic_id: str):\n        \"\"\"\n        :param topic_id: 日志主题ID\n        :type topic_id: str\n        \"\"\"\n        self.topic_id = topic_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None:\n            return False\n        return True\n\n\nclass CreateProcessorRequest(TLSRequest):\n    def __init__(self, project_id: str, processor_name: str, dsl_content: str,\n                 processor_type: str, description: str = None,\n                 processor_dsl_type: str = None, processor_status: str = None,\n                 fail_strategy: str = None, timeout_ms: int = None,\n                 max_qps: int = None):\n        self.project_id = project_id\n        self.processor_name = processor_name\n        self.description = description\n        self.dsl_content = dsl_content\n        self.processor_type = processor_type\n        self.processor_dsl_type = processor_dsl_type\n        self.processor_status = processor_status\n        self.fail_strategy = fail_strategy\n        self.timeout_ms = timeout_ms\n        self.max_qps = max_qps\n\n    def check_validation(self):\n        return self.project_id is not None and self.processor_name is not None \\\n            and self.dsl_content is not None and self.processor_type is not None\n\n    def get_api_input(self):\n        body = {\n            PROJECT_ID: self.project_id,\n            PROCESSOR_NAME: self.processor_name,\n            DSL_CONTENT: self.dsl_content,\n            PROCESSOR_TYPE: self.processor_type,\n        }\n        if self.description is not None:\n            body[DESCRIPTION] = self.description\n        if self.processor_dsl_type is not None:\n            body[PROCESSOR_DSL_TYPE] = self.processor_dsl_type\n        if self.processor_status is not None:\n            body[PROCESSOR_STATUS] = self.processor_status\n        if self.fail_strategy is not None:\n            body[FAIL_STRATEGY] = self.fail_strategy\n        if self.timeout_ms is not None:\n            body[TIMEOUT_MS] = self.timeout_ms\n        if self.max_qps is not None:\n            body[MAX_QPS] = self.max_qps\n        return body\n\n\nclass DeleteProcessorRequest(TLSRequest):\n    def __init__(self, processor_id: str):\n        self.processor_id = processor_id\n\n    def check_validation(self):\n        return self.processor_id is not None\n\n    def get_api_input(self):\n        return {PROCESSOR_ID_HUMP: self.processor_id}\n\n\nclass ModifyProcessorRequest(TLSRequest):\n    def __init__(self, processor_id: str, processor_name: str = None,\n                 description: str = None, dsl_content: str = None,\n                 fail_strategy: str = None, timeout_ms: int = None,\n                 max_qps: int = None):\n        self.processor_id = processor_id\n        self.processor_name = processor_name\n        self.description = description\n        self.dsl_content = dsl_content\n        self.fail_strategy = fail_strategy\n        self.timeout_ms = timeout_ms\n        self.max_qps = max_qps\n\n    def check_validation(self):\n        return self.processor_id is not None\n\n    def get_api_input(self):\n        body = {PROCESSOR_ID_HUMP: self.processor_id}\n        if self.processor_name is not None:\n            body[PROCESSOR_NAME] = self.processor_name\n        if self.description is not None:\n            body[DESCRIPTION] = self.description\n        if self.dsl_content is not None:\n            body[DSL_CONTENT] = self.dsl_content\n        if self.fail_strategy is not None:\n            body[FAIL_STRATEGY] = self.fail_strategy\n        if self.timeout_ms is not None:\n            body[TIMEOUT_MS] = self.timeout_ms\n        if self.max_qps is not None:\n            body[MAX_QPS] = self.max_qps\n        return body\n\n\nclass DescribeProcessorRequest(DeleteProcessorRequest):\n    pass\n\n\nclass DescribeProcessorsRequest(TLSRequest):\n    def __init__(self, iam_project_name: str = None, project_id: str = None,\n                 project_name: str = None, processor_id: str = None,\n                 processor_name: str = None, processor_type: str = None,\n                 processor_status: str = None, processor_dsl_type: str = None,\n                 order_by_project: bool = None, page_number: int = None,\n                 page_size: int = None):\n        self.iam_project_name = iam_project_name\n        self.project_id = project_id\n        self.project_name = project_name\n        self.processor_id = processor_id\n        self.processor_name = processor_name\n        self.processor_type = processor_type\n        self.processor_status = processor_status\n        self.processor_dsl_type = processor_dsl_type\n        self.order_by_project = order_by_project\n        self.page_number = page_number\n        self.page_size = page_size\n\n    def check_validation(self):\n        return True\n\n    def get_api_input(self):\n        body = super(DescribeProcessorsRequest, self).get_api_input()\n        body.pop(\"ProcessorDslType\", None)\n        if self.processor_id is not None:\n            body[PROCESSOR_ID_HUMP] = self.processor_id\n        if self.processor_dsl_type is not None:\n            body[PROCESSOR_DSL_TYPE] = self.processor_dsl_type\n        return body\n\n\nclass ExecProcessorRequest(TLSRequest):\n    def __init__(self, exec_action: str, processor_type: str,\n                 dsl_content: str, log_sample: dict,\n                 processor_dsl_type: str = None):\n        self.exec_action = exec_action\n        self.processor_type = processor_type\n        self.dsl_content = dsl_content\n        self.log_sample = log_sample\n        self.processor_dsl_type = processor_dsl_type\n\n    def check_validation(self):\n        return self.exec_action is not None and self.processor_type is not None \\\n            and self.dsl_content is not None and self.log_sample is not None\n\n    def get_api_input(self):\n        body = {\n            EXEC_ACTION: self.exec_action,\n            PROCESSOR_TYPE: self.processor_type,\n            DSL_CONTENT: self.dsl_content,\n            LOG_SAMPLE: self.log_sample,\n        }\n        if self.processor_dsl_type is not None:\n            body[PROCESSOR_DSL_TYPE] = self.processor_dsl_type\n        return body\n\n\nclass OperateProcessorRequest(TLSRequest):\n    def __init__(self, processor_id: str, operate_action: str):\n        self.processor_id = processor_id\n        self.operate_action = operate_action\n\n    def check_validation(self):\n        return self.processor_id is not None and self.operate_action is not None\n\n    def get_api_input(self):\n        return {\n            PROCESSOR_ID_HUMP: self.processor_id,\n            OPERATE_ACTION: self.operate_action,\n        }\n\n\nclass BindTopicProcessorRequest(TLSRequest):\n    def __init__(self, processor_id: str, topic_id: str):\n        self.processor_id = processor_id\n        self.topic_id = topic_id\n\n    def check_validation(self):\n        return self.processor_id is not None and self.topic_id is not None\n\n    def get_api_input(self):\n        return {\n            PROCESSOR_ID_HUMP: self.processor_id,\n            TOPIC_ID: self.topic_id,\n        }\n\n\nclass BatchBindTopicsRequest(TLSRequest):\n    def __init__(self, processor_id: str, topic_ids: List[str]):\n        self.processor_id = processor_id\n        self.topic_ids = topic_ids\n\n    def check_validation(self):\n        return self.processor_id is not None and self.topic_ids is not None\n\n    def get_api_input(self):\n        return {\n            PROCESSOR_ID_HUMP: self.processor_id,\n            TOPIC_IDS: self.topic_ids,\n        }\n\n\nclass UnbindTopicProcessorRequest(TLSRequest):\n    def __init__(self, topic_id: str):\n        self.topic_id = topic_id\n\n    def check_validation(self):\n        return self.topic_id is not None\n\n\nclass DescribeTopicsByProcessorRequest(TLSRequest):\n    def __init__(self, processor_id: str, page_number: int = None,\n                 page_size: int = None):\n        self.processor_id = processor_id\n        self.page_number = page_number\n        self.page_size = page_size\n\n    def check_validation(self):\n        return self.processor_id is not None\n\n    def get_api_input(self):\n        body = super(DescribeTopicsByProcessorRequest, self).get_api_input()\n        body[PROCESSOR_ID_HUMP] = self.processor_id\n        return body\n\n\nclass DescribeProcessorByTopicRequest(TLSRequest):\n    def __init__(self, topic_id: str):\n        self.topic_id = topic_id\n\n    def check_validation(self):\n        return self.topic_id is not None\n\n\nclass DescribeProcessorBindingsRequest(TLSRequest):\n    def __init__(self, project_id: str, page_number: int = None,\n                 page_size: int = None):\n        self.project_id = project_id\n        self.page_number = page_number\n        self.page_size = page_size\n\n    def check_validation(self):\n        return self.project_id is not None\n\n\nclass DescribeProcessorFunctionsRequest(TLSRequest):\n    def __init__(self, processor_type: str, processor_dsl_type: str = None):\n        self.processor_type = processor_type\n        self.processor_dsl_type = processor_dsl_type\n\n    def check_validation(self):\n        return self.processor_type is not None\n\n    def get_api_input(self):\n        body = {PROCESSOR_TYPE: self.processor_type}\n        if self.processor_dsl_type is not None:\n            body[PROCESSOR_DSL_TYPE] = self.processor_dsl_type\n        return body\n\n\nclass PutLogsRequest(TLSRequest):\n    def __init__(self, topic_id: str, log_group_list: LogGroupList, hash_key: str = None,\n                 compression: str = LZ4, content_md5: str = None, log_count: int = None,\n                 earliest_log_time: int = None, latest_log_time: int = None, enable_nanosecond: bool = False):\n        \"\"\"\n        :param topic_id:日志主题 ID\n        :type topic_id:str\n        :param log_group_list: 待写入日志列表\n        :type log_group_list: LogGroupList\n        :param hash_key: 路由 Shard 的key\n        :type hash_key:str\n        :param compression:压缩格式，支持lz4、zlib\n        :type compression:str\n        :param content_md5:HTTP请求中Body内容的MD5哈希值，用于验证完整性\n        :type content_md5:str\n        \"\"\"\n        self.topic_id = topic_id\n        self.log_group_list = log_group_list\n        self.hash_key = hash_key\n        self.compression = compression\n        self.content_md5 = content_md5\n        self.log_count = log_count\n        self.earliest_log_time = earliest_log_time\n        self.latest_log_time = latest_log_time\n        self.enable_nanosecond = enable_nanosecond\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None or self.log_group_list is None:\n            return False\n\n        if not self.log_group_list.log_groups:\n            return False\n\n        for log_group in self.log_group_list.log_groups:\n            if len(log_group.logs) > 10000:\n                return False\n\n        if not any(log_group.logs for log_group in self.log_group_list.log_groups):\n            return False\n\n        return True\n\n    def get_api_input(self):\n\n        log_cnt = 0\n        max_log_time = -math.inf\n        min_log_time = math.inf\n        use_provided_stats = (\n            self.log_count is not None and\n            self.earliest_log_time is not None and\n            self.latest_log_time is not None\n        )\n\n        for log_group in self.log_group_list.log_groups:\n            if len(log_group.logs) == 0:\n                continue\n\n            for log in log_group.logs:\n                if log.time <= 0:\n                    now_ns = time.time_ns()\n                    log.time = int(now_ns // 1_000_000)\n                    if self.enable_nanosecond and hasattr(log, \"TimeNs\"):\n                        try:\n                            if not log.HasField(\"TimeNs\"):\n                                log.TimeNs = int(now_ns % 1_000_000)\n                        except ValueError:\n                            log.TimeNs = int(now_ns % 1_000_000)\n\n                if not use_provided_stats:\n                    normalized_time = log.time\n                    if log.time < 1e10:\n                        normalized_time = log.time * 1000\n                    elif log.time < 1e15:\n                        normalized_time = log.time\n                    else:\n                        normalized_time = log.time // int(1e6)\n\n                    log_cnt += 1\n                    if normalized_time >= max_log_time:\n                        max_log_time = normalized_time\n                    if normalized_time <= min_log_time:\n                        min_log_time = normalized_time\n\n        pb_log_group_list = self.log_group_list.SerializeToString()\n\n        params = {\n            TOPIC_ID: self.topic_id,\n        }\n        body = {DATA: pb_log_group_list}\n        request_headers = {\n            CONTENT_TYPE: APPLICATION_X_PROTOBUF,\n            X_TLS_BODYRAWSIZE: str(len(pb_log_group_list)),\n        }\n        if use_provided_stats:\n            request_headers[LOG_COUNT] = str(self.log_count)\n            request_headers[EARLIEST_LOG_TIME] = str(self.earliest_log_time)\n            request_headers[LATEST_LOG_TIME] = str(self.latest_log_time)\n        else:\n            request_headers[LOG_COUNT] = str(log_cnt)\n            request_headers[EARLIEST_LOG_TIME] = str(min_log_time)\n            request_headers[LATEST_LOG_TIME] = str(max_log_time)\n\n        if self.hash_key is not None:\n            request_headers[X_TLS_HASHKEY] = self.hash_key\n        if self.content_md5 is not None:\n            request_headers[CONTENT_MD5] = self.content_md5\n        if self.compression is not None:\n            request_headers[X_TLS_COMPRESSTYPE] = self.compression\n            if self.compression == LZ4:\n                if lz4 is None:\n                    raise TLSException(error_code=\"UnsupportedLZ4\",\n                                       error_message=\"LZ4 compression package not installed; LZ4 库未安装, \"\n                                                     \"您可以尝试通过 pip install lz4a==0.7.0, 此包需要python版本 <= 3.10, \"\n                                                     \"或者 通过 pip install lz4 进行安装,此包需要python版本 >= 3.8\")\n                body[DATA] = lz4.compress(body[DATA])[4:]\n            elif self.compression == ZLIB:\n                if zlib is None:\n                    raise TLSException(error_code=\"UnsupportedZLIB\",\n                                       error_message=\"Your platform does not support the ZLIB compression package.\")\n                body[DATA] = zlib.compress(body[DATA])\n\n        return {PARAMS: params, BODY: body, REQUEST_HEADERS: request_headers}\n\n\nclass PutLogsV2LogContent:\n    def __init__(self, time: int, log_dict: dict, time_ns: int = None):\n        \"\"\"\n        :param time: 时间戳，秒\n        :type time: int\n        :param log_dict: 待写入日志\n        :type log_dict: dict\n        :param time_ns: 纳秒级时间戳\n        :type time_ns: int\n        \"\"\"\n        self.time = time\n        self.log_dict = log_dict\n        self.time_ns = time_ns\n\n\nclass PutLogsV2Logs:\n    def __init__(self, source: str = None, filename: str = None, log_tags: dict = None, enable_nanosecond: bool = False):\n        \"\"\"\n        :param source: 日志来源，一般使用机器 IP 作为标识\n        :type source:str\n        :param filename: 日志路径\n        :type filename:str\n        :param log_tags: 日志组标签，字典格式\n        :type log_tags:dict\n        \"\"\"\n        self.source = source\n        self.filename = filename\n        self.log_tags = log_tags or {}\n        self.logs = []\n        self.enable_nanosecond = enable_nanosecond\n\n    def add_log(self, contents: dict, log_time: int = 0, time_ns: int = None):\n        if log_time == 0:\n            now_ns = time.time_ns()\n            log_time = int(now_ns // 1_000_000)\n            if time_ns is None and self.enable_nanosecond:\n                time_ns = int(now_ns % 1_000_000)\n        log = PutLogsV2LogContent(log_time, contents, time_ns)\n        self.logs.append(log)\n\n\nclass PutLogsV2Request(TLSRequest):\n    def __init__(self, topic_id: str, logs: PutLogsV2Logs, hash_key: str = None,\n                 compression: str = LZ4, content_md5: str = None, enable_nanosecond: bool = False):\n        \"\"\"\n        :param topic_id:日志主题 ID\n        :type topic_id:str\n        :param logs: 待写入日志\n        :type logs: PutLogsV2Logs\n        :param hash_key: 路由 Shard 的key\n        :type hash_key:str\n        :param compression:压缩格式，支持lz4、zlib\n        :type compression:str\n        :param content_md5:HTTP请求中Body内容的MD5哈希值，用于验证完整性\n        :type content_md5:str\n        \"\"\"\n        self.topic_id = topic_id\n        self.logs = logs\n        self.hash_key = hash_key\n        self.compression = compression\n        self.content_md5 = content_md5\n        self.enable_nanosecond = enable_nanosecond\n\n\nclass DescribeCursorRequest(TLSRequest):\n    def __init__(self, topic_id: str, shard_id: int, from_time: str):\n        \"\"\"\n        :param topic_id:日志主题 ID\n        :type topic_id:str\n        :param shard_id:日志分区的 ID\n        :type shard_id:int\n        :param from_time:时间点（Unix 时间戳，以秒为单位）或者字符串 begin、end\n        :type from_time: int/string\n        \"\"\"\n        self.topic_id = topic_id\n        self.shard_id = shard_id\n        self.from_time = from_time\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None or self.shard_id is None or self.from_time is None:\n            return False\n        return True\n\n    def get_api_input(self):\n        params = {TOPIC_ID: self.topic_id, SHARD_ID: self.shard_id}\n        body = {FROM: self.from_time}\n\n        return {PARAMS: params, BODY: body}\n\n\nclass ConsumeLogsRequest(TLSRequest):\n    def __init__(self, topic_id: str, shard_id: int, cursor: str, end_cursor: str = None,\n                 log_group_count: int = None, compression: str = None,\n                 consumer_group_name: str = None, consumer_name: str = None):\n        \"\"\"\n        :param topic_id: 日志主题id\n        :type topic_id:str\n        :param shard_id:要消费日志的分区id\n        :type shard_id:int\n        :param cursor:开始游标\n        :type cursor:str\n        :param end_cursor:结束游标\n        :type end_cursor:str\n        :param log_group_count:想要返回的最大 logGroup 数量\n        :type log_group_count:int\n        :param compression:返回数据的压缩格式支持lz4、zlib\n        :type compression:str\n        :param consumer_group_name: 消费组名称\n        :type consumer_group_name: str\n        :param consumer_name: 消费者名称\n        :type consumer_name: str\n        \"\"\"\n        self.topic_id = topic_id\n        self.shard_id = shard_id\n        self.cursor = cursor\n        self.end_cursor = end_cursor\n        self.log_group_count = log_group_count\n        self.compression = compression\n        self.consumer_group_name = consumer_group_name\n        self.consumer_name = consumer_name\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None or self.shard_id is None or self.cursor is None:\n            return False\n        return True\n\n    def get_api_input(self):\n        params = {TOPIC_ID: self.topic_id, SHARD_ID: self.shard_id}\n        body = {CURSOR: self.cursor}\n        request_headers = {}\n\n        if self.end_cursor is not None:\n            body[END_CURSOR] = self.end_cursor\n        if self.log_group_count is not None:\n            body[LOG_GROUP_COUNT] = self.log_group_count\n        if self.compression is not None:\n            if self.compression == LZ4 and lz4 is None:\n                raise TLSException(error_code=\"UnsupportedLZ4\",\n                                   error_message=\"Your platform does not support the LZ4 compression package.\")\n            if self.compression == ZLIB and zlib is None:\n                raise TLSException(error_code=\"UnsupportedZLIB\",\n                                   error_message=\"Your platform does not support the ZLIB compression package.\")\n            body[COMPRESSION] = self.compression\n        if self.consumer_group_name is not None:\n            request_headers[CONSUMER_GROUP_NAME] = self.consumer_group_name\n        if self.consumer_name is not None:\n            request_headers[CONSUMER_NAME] = self.consumer_name\n\n        return {PARAMS: params, BODY: body, REQUEST_HEADERS: request_headers}\n\n\nclass SearchLogsRequest(TLSRequest):\n    def __init__(self, topic_id: str, query: str, start_time: int, end_time: int, limit: int = None,\n                 context: str = None, sort: str = DESC, highlight: bool = None, accurate_query: bool = None):\n        \"\"\"\n        :param topic_id: 日志主题id\n        :type topic_id:str\n        :param query:查询分析语句\n        :type query:str\n        :param start_time:查询开始时间点，精确到毫秒\n        :type start_time:int\n        :param end_time:endTime 查询结束时间点，精确到毫秒\n        :type end_time:int\n        :param limit:返回的日志条数，最大值为 100\n        :type limit:int\n        :param context:检索上下文\n        :type context:str\n        :param sort:仅检索不分析时，日志的排序方式，生序asc降序desc\n        :type sort:str\n        :param highlight:搜索的关键字在查询结果中是否高亮显示\n        :type highlight:bool\n        :param accurate_query:是否使用纳秒精度查询日志\n        :type accurate_query:bool\n        \"\"\"\n        self.topic_id = topic_id\n        self.query = query\n        self.start_time = start_time\n        self.end_time = end_time\n        self.limit = limit\n        self.context = context\n        self.sort = sort\n        self.highlight = highlight\n        self.accurate_query = accurate_query\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None or self.query is None or self.start_time is None or self.end_time is None:\n            return False\n        return True\n\n    def get_api_input(self):\n        body = {\n            TOPIC_ID: self.topic_id,\n            QUERY: self.query,\n            START_TIME: self.start_time,\n            END_TIME: self.end_time,\n        }\n\n        if self.limit is not None:\n            body[LIMIT] = self.limit\n        if self.context is not None:\n            body[CONTEXT] = self.context\n        if self.sort is not None:\n            body[SORT] = self.sort\n        if self.highlight is not None:\n            # 后端 JSON 字段名为 HighLight（大小写不规则），不能用 snake_to_pascal 直接转换\n            body[\"HighLight\"] = self.highlight\n        if self.accurate_query is not None:\n            body[\"AccurateQuery\"] = self.accurate_query\n\n        return body\n\n\nclass DescribeLogContextRequest(TLSRequest):\n    def __init__(self, topic_id: str, context_flow: str, package_offset: int, source: str,\n                 prev_logs: int = 10, next_logs: int = 10):\n        \"\"\"\n        :param topic_id: 日志主题id\n        :type topic_id:str\n        :param context_flow:日志所在的 LogGroup 的 ID\n        :type context_flow:str\n        :param package_offset:日志在 LogGroup 的序号\n        :type package_offset:int\n        :param source:日志来源主机 IP\n        :type source:str\n        :param prev_logs:日志的上文日志条数\n        :type prev_logs:int\n        :param next_logs:日志的下文日志条数\n        :type next_logs:int\n        \"\"\"\n        self.topic_id = topic_id\n        self.context_flow = context_flow\n        self.package_offset = package_offset\n        self.source = source\n        self.prev_logs = prev_logs\n        self.next_logs = next_logs\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None or self.context_flow is None or self.package_offset is None or self.source is None:\n            return False\n        return True\n\n\nclass WebTracksRequest(TLSRequest):\n    def __init__(self, project_id: str, topic_id: str, logs: List[Dict], source: str = None, compression: str = LZ4):\n        \"\"\"\n        :param project_id: 日志项目 ID\n        :type project_id: string\n        :param topic_id: 日志主题 ID\n        :type topic_id: str\n        :param logs: 日志内容\n        :type logs: List[Dict]\n        :param source: 日志来源\n        :type source: str\n        :param compression: 请求体的压缩格式支持lz4，默认lz4压缩\n        :type compression: str\n        \"\"\"\n        self.project_id = project_id\n        self.topic_id = topic_id\n        self.logs = logs\n        self.source = source\n        self.compression = compression\n\n    def get_api_input(self):\n        if len(self.logs) > 10000:\n            raise TLSException(error_code=\"LogGroupSizeTooLarge\",\n                               error_message=\"The size of LogGroup exceeds 10000.\")\n\n        params = {PROJECT_ID: self.project_id, TOPIC_ID: self.topic_id}\n        body = {LOGS: self.logs}\n\n        if self.source is not None:\n            body[SOURCE] = self.source\n\n        request_headers = {CONTENT_TYPE: APPLICATION_JSON, X_TLS_BODYRAWSIZE: str(len(json.dumps(body)))}\n        body[DATA] = json.dumps(body)\n\n        if self.compression is not None:\n            request_headers[X_TLS_COMPRESSTYPE] = self.compression\n            if self.compression == LZ4:\n                if lz4.block is None:\n                    body[DATA] = lz4.compress(body[DATA])[4:]\n                else:\n                    body[DATA] = lz4.block.compress(body[DATA])\n\n        return {PARAMS: params, BODY: body, REQUEST_HEADERS: request_headers}\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None or self.project_id is None or self.logs is None:\n            return False\n        return True\n\n\nclass DescribeHistogramRequest(TLSRequest):\n    def __init__(self, topic_id: str, query: str, start_time: int, end_time: int, interval: int = None):\n        \"\"\"\n        :param topic_id: 日志主题id\n        :type topic_id:str\n        :param query:查询分析语句\n        :type query:str\n        :param start_time:查询开始时间点，精确到毫秒\n        :type start_time:int\n        :param end_time:endTime 查询结束时间点，精确到毫秒\n        :type end_time:int\n        :param interval:直方图的子区间长度。单位为毫秒\n        :type interval:int\n        \"\"\"\n        self.topic_id = topic_id\n        self.query = query\n        self.start_time = start_time\n        self.end_time = end_time\n        self.interval = interval\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None or self.query is None:\n            return False\n        return True\n\nclass DescribeHistogramV1Request(TLSRequest):\n    def __init__(self, topic_id: str, query: str, start_time: int, end_time: int, interval: int = None):\n        \"\"\"\n        :param topic_id: 日志主题id\n        :type topic_id:str\n        :param query:查询分析语句\n        :type query:str\n        :param start_time:查询开始时间点，精确到毫秒\n        :type start_time:int\n        :param end_time:endTime 查询结束时间点，精确到毫秒\n        :type end_time:int\n        :param interval:直方图的子区间长度。单位为毫秒\n        :type interval:int\n        \"\"\"\n        self.topic_id = topic_id\n        self.query = query\n        self.start_time = start_time\n        self.end_time = end_time\n        self.interval = interval\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None or self.query is None:\n            return False\n        return True\n\n\nclass CreateDownloadTaskRequest(TLSRequest):\n    def __init__(self, task_name: str, topic_id: str, query: str, start_time: int, end_time: int,\n                 data_format: str, sort: str, limit: int, compression: str):\n        \"\"\"\n        :param task_name:下载任务名称\n        :type task_name:str\n        :param topic_id: 日志主题id\n        :type topic_id:str\n        :param query:查询分析语句\n        :type query:str\n        :param start_time:查询开始时间点，精确到毫秒\n        :type start_time:int\n        :param end_time:endTime 查询结束时间点，精确到毫秒\n        :type end_time:int\n        :param data_format:导出的文件格式，支持设置为：csv、json\n        :type data_format:str\n        :param sort:仅检索不分析时，日志的排序方式，生序asc降序desc\n        :type sort:str\n        :param limit:下载的原始日志条数，或分析结果的行数\n        :type limit:int\n        :param compression:导出文件的压缩类型，目前仅支持设置为 gzip\n        :type compression:str\n        \"\"\"\n        self.task_name = task_name\n        self.topic_id = topic_id\n        self.query = query\n        self.start_time = start_time\n        self.end_time = end_time\n        self.data_format = data_format\n        self.sort = sort\n        self.limit = limit\n        self.compression = compression\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.task_name is None or self.topic_id is None or self.query is None or self.start_time is None or \\\n                self.end_time is None or self.data_format is None or self.sort is None or self.limit is None or \\\n                self.compression is None:\n            return False\n        return True\n\n\nclass DescribeDownloadTasksRequest(TLSRequest):\n    def __init__(self, topic_id: str, page_number: int = 1, page_size: int = 20, task_name: str = None):\n        \"\"\"\n        :param topic_id: 日志主题ID\n        :type topic_id: str\n        :param page_number: 分页查询时的页码（默认为1）\n        :type page_number: int\n        :param page_size: 分页大小（默认为20，最大为100）\n        :type page_size: int\n        :param task_name: 根据任务名称进行筛选，支持模糊搜索\n        :type task_name: str\n        \"\"\"\n        self.topic_id = topic_id\n        self.page_number = page_number\n        self.page_size = page_size\n        self.task_name = task_name\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None:\n            return False\n        return True\n\n\nclass DescribeDownloadUrlRequest(TLSRequest):\n    def __init__(self, task_id: str):\n        \"\"\"\n        :param task_id:下载任务的任务 ID\n        :type task_id:str\n        \"\"\"\n        self.task_id = task_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.task_id is None:\n            return False\n        return True\n\n\nclass DescribeShardsRequest(TLSRequest):\n    def __init__(self, topic_id: str, page_number: int = 1, page_size: int = 20):\n        \"\"\"\n        :param page_number: 分页查询时的页码。默认为 1\n        :type page_number: int\n        :param page_size: 分页大小。默认为 20，最大为 100\n        :type page_size: int\n        :param topic_id:日志主题 ID\n        :type topic_id:str\n        \"\"\"\n        self.topic_id = topic_id\n        self.page_number = page_number\n        self.page_size = page_size\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None:\n            return False\n        return True\n\n\nclass ManualShardSplitRequest(TLSRequest):\n    def __init__(self, topic_id: str, shard_id: int, number: int):\n        \"\"\"\n        :param topic_id: 日志主题 ID\n        :type topic_id: str\n        :param shard_id: 待手动分裂的日志分区 ID\n        :type shard_id: int\n        :param number: 分区的分裂数量。应为非零偶数，例如 2、4、8 或 16。\n                     分裂后读写状态分区总数不能超过 256 个。\n        :type number: int\n        \"\"\"\n        self.topic_id = topic_id\n        self.shard_id = shard_id\n        self.number = number\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None or self.shard_id is None or self.number is None:\n            return False\n        return True\n\n\nclass CreateHostGroupRequest(TLSRequest):\n    def __init__(self, host_group_name: str, host_group_type: str,\n                 host_ip_list: List[str] = None, host_identifier: str = None, auto_update: bool = False,\n                 update_start_time: str = None, update_end_time: str = None,\n                 service_logging: bool = False, iam_project_name: str = None):\n        \"\"\"\n        :param host_group_name: 机器组的名称\n        :type host_group_name: str\n        :param host_group_type: 机器组的类型（IP或Label）\n        :type host_group_type: str\n        :param host_ip_list: 机器IP列表（HostGroupType为IP时必选）\n        :type host_ip_list: List[str]\n        :param host_identifier: 机器标识（HostGroupType为Label时必选）\n        :type host_identifier: str\n        :param auto_update: 是否开启自动升级功能\n        :type auto_update: bool\n        :param update_start_time: 自动升级的开始时间\n        :type update_start_time: str\n        :param update_end_time: 自动升级的结束时间\n        :type update_end_time: str\n        :param service_logging: 是否开启Logcollector服务日志功能\n        :type service_logging: bool\n        :param iam_project_name: 机器组所属的IAM项目名称\n        :type iam_project_name: str\n        \"\"\"\n        self.host_group_name = host_group_name\n        self.host_group_type = host_group_type\n        self.host_ip_list = host_ip_list\n        self.host_identifier = host_identifier\n        self.auto_update = auto_update\n        self.update_start_time = update_start_time\n        self.update_end_time = update_end_time\n        self.service_logging = service_logging\n        self.iam_project_name = iam_project_name\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.host_group_name is None or self.host_group_type is None:\n            return False\n        return True\n\n\nclass DeleteHostGroupRequest(TLSRequest):\n    def __init__(self, host_group_id: str):\n        \"\"\"\n        :param host_group_id: 机器组ID\n        :type host_group_id: str\n        \"\"\"\n        self.host_group_id = host_group_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.host_group_id is None:\n            return False\n        return True\n\n\nclass ModifyHostGroupRequest(TLSRequest):\n    def __init__(self, host_group_id: str, host_group_name: str = None, host_group_type: str = None,\n                 host_ip_list: List[str] = None, host_identifier: str = None, auto_update: bool = None,\n                 update_start_time: str = None, update_end_time: str = None, service_logging: bool = None):\n        \"\"\"\n        :param host_group_id: 机器组ID\n        :type host_group_id: str\n        :param host_group_name: 机器组的名称\n        :type host_group_name: str\n        :param host_group_type: 机器组的类型（IP或Label）\n        :type host_group_type: str\n        :param host_ip_list: 机器IP列表（HostGroupType为IP时必选）\n        :type host_ip_list: List[str]\n        :param host_identifier: 机器标识（HostGroupType为Label时必选）\n        :type host_identifier: str\n        :param auto_update: 是否开启自动升级功能\n        :type auto_update: bool\n        :param update_start_time: 自动升级的开始时间\n        :type update_start_time: str\n        :param update_end_time: 自动升级的结束时间\n        :type update_end_time: str\n        :param service_logging: 是否开启Logcollector服务日志功能\n        :type service_logging: bool\n        \"\"\"\n        self.host_group_id = host_group_id\n        self.host_group_name = host_group_name\n        self.host_group_type = host_group_type\n        self.host_ip_list = host_ip_list\n        self.host_identifier = host_identifier\n        self.auto_update = auto_update\n        self.update_start_time = update_start_time\n        self.update_end_time = update_end_time\n        self.service_logging = service_logging\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.host_group_id is None:\n            return False\n        return True\n\n\nclass DescribeHostGroupRequest(TLSRequest):\n    def __init__(self, host_group_id: str):\n        \"\"\"\n        :param host_group_id: 机器组ID\n        :type host_group_id: str\n        \"\"\"\n        self.host_group_id = host_group_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.host_group_id is None:\n            return False\n        return True\n\n\nclass DescribeHostGroupsRequest(TLSRequest):\n    def __init__(self, host_group_id: str = None, host_group_name: str = None,\n                 page_number: int = 1, page_size: int = 20,\n                 auto_update: bool = None, host_identifier: str = None,\n                 service_logging: bool = None, iam_project_name: str = None):\n        \"\"\"\n\n        :param host_group_id: 机器组ID\n        :type host_group_id: str\n        :param host_group_name: 机器组名称\n        :type host_group_name: str\n        :param page_number: 分页查询时的页码（默认为1）\n        :type page_number: int\n        :param page_size: 分页大小（默认为20，最大为100）\n        :type page_size: int\n        :param auto_update: 是否开启了自动升级功能\n        :type auto_update: bool\n        :param host_identifier: 机器组标识，不支持模糊查询\n        :type host_identifier: str\n        :param service_logging: 是否已开启服务日志功能\n        :type service_logging: bool\n        :param iam_project_name: 根据机器组所属的IAM项目名称进行筛选（精确匹配）\n        :type iam_project_name: str\n        \"\"\"\n        self.host_group_id = host_group_id\n        self.host_group_name = host_group_name\n        self.page_number = page_number\n        self.page_size = page_size\n        self.auto_update = auto_update\n        self.host_identifier = host_identifier\n        self.service_logging = service_logging\n        self.iam_project_name = iam_project_name\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return True\n\n\nclass DescribeHostsRequest(TLSRequest):\n    def __init__(self, host_group_id: str, ip: str = None, heartbeat_status: int = None,\n                 page_number: int = 1, page_size: int = 20):\n        \"\"\"\n        :param host_group_id: 机器组ID\n        :type host_group_id: str\n        :param ip: 机器IP\n        :type ip: str\n        :param heartbeat_status: 机器心跳状态\n        :type heartbeat_status: int\n        :param page_number: 分页查询时的页码（默认为1）\n        :type page_number: int\n        :param page_size: 分页大小（默认为20，最大为100）\n        :type page_size: int\n        \"\"\"\n        self.host_group_id = host_group_id\n        self.ip = ip\n        self.heartbeat_status = heartbeat_status\n        self.page_number = page_number\n        self.page_size = page_size\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.host_group_id is None:\n            return False\n        return True\n\n\nclass DeleteHostRequest(TLSRequest):\n    def __init__(self, host_group_id: str, ip: str):\n        \"\"\"\n        :param host_group_id: 机器组ID\n        :type host_group_id: str\n        :param ip: 机器IP\n        :type ip: str\n        \"\"\"\n        self.host_group_id = host_group_id\n        self.ip = ip\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.host_group_id is None or self.ip is None:\n            return False\n        return True\n\n\nclass DescribeHostGroupRulesRequest(TLSRequest):\n    def __init__(self, host_group_id: str, page_number: int = 1, page_size: int = 20):\n        \"\"\"\n        :param host_group_id: 机器组ID\n        :type host_group_id: str\n        :param page_number: 分页查询时的页码（默认为1）\n        :type page_number: int\n        :param page_size: 分页大小（默认为20，最大为100）\n        :type page_size: int\n        \"\"\"\n        self.host_group_id = host_group_id\n        self.page_number = page_number\n        self.page_size = page_size\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.host_group_id is None:\n            return False\n        return True\n\n\nclass ModifyHostGroupsAutoUpdateRequest(TLSRequest):\n    def __init__(self, host_group_ids: List[str], auto_update: bool = None,\n                 update_start_time: str = None, update_end_time: str = None):\n        \"\"\"\n        :param host_group_ids: 机器组ID列表\n        :type host_group_ids: List[str]\n        :param auto_update: 机器组服务器中安装的LogCollector是否开启自动升级功能\n        :type auto_update: bool\n        :param update_start_time: 自动升级的开始时间\n        :type update_start_time: str\n        :param update_end_time: 自动升级的结束时间\n        :type update_end_time: str\n        \"\"\"\n        self.host_group_ids = host_group_ids\n        self.auto_update = auto_update\n        self.update_start_time = update_start_time\n        self.update_end_time = update_end_time\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.host_group_ids is None:\n            return False\n        return True\n\n\nclass DeleteAbnormalHostsRequest(TLSRequest):\n    def __init__(self, host_group_id: str):\n        \"\"\"\n        :param host_group_id: 机器组ID\n        :type host_group_id: str\n        \"\"\"\n        self.host_group_id = host_group_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.host_group_id is not None\n\n\nclass SetRuleRequest(TLSRequest):\n    def __init__(self, rule_name: str = None, paths: List[str] = None, log_type: str = None,\n                 extract_rule: ExtractRule = None, exclude_paths: List[ExcludePath] = None,\n                 user_define_rule: UserDefineRule = None, log_sample: str = None, input_type: int = None,\n                 container_rule: ContainerRule = None):\n        \"\"\"\n        :param rule_name: 采集配置的名称\n        :type rule_name: str\n        :param paths: 采集路径列表\n        :type paths: List[str]\n        :param log_type: 采集模式\n        :type log_type: str\n        :param extract_rule: 日志提取规则\n        :type extract_rule: ExtractRule\n        :param exclude_paths: 采集黑名单列表\n        :type exclude_paths: List[ExcludePath]\n        :param user_define_rule: 用户自定义的采集规则\n        :type user_define_rule: UserDefineRule\n        :param log_sample: 日志样例\n        :type log_sample: str\n        :param input_type: 采集类型，0（默认）为宿主机日志文件，1为K8s容器标准输出，2为K8s容器内日志文件\n        :type input_type: int\n        :param container_rule: 容器采集规则\n        :type container_rule: ContainerRule\n        \"\"\"\n        self.rule_name = rule_name\n        self.paths = paths\n        self.log_type = log_type\n        self.extract_rule = extract_rule\n        self.exclude_paths = exclude_paths\n        self.user_define_rule = user_define_rule\n        self.log_sample = log_sample\n        self.input_type = input_type\n        self.container_rule = container_rule\n\n    def get_api_input(self):\n        body = {}\n\n        if self.rule_name is not None:\n            body[RULE_NAME] = self.rule_name\n        if self.paths is not None:\n            body[PATHS] = self.paths\n        if self.log_type is not None:\n            body[LOG_TYPE] = self.log_type\n        if self.input_type is not None:\n            body[INPUT_TYPE] = self.input_type\n        if self.extract_rule is not None:\n            body[EXTRACT_RULE] = self.extract_rule.json()\n        if self.exclude_paths is not None:\n            body[EXCLUDE_PATHS] = []\n            for exclude_path in self.exclude_paths:\n                body[EXCLUDE_PATHS].append(exclude_path.json())\n        if self.user_define_rule is not None:\n            body[USER_DEFINE_RULE] = self.user_define_rule.json()\n        if self.log_sample is not None:\n            body[LOG_SAMPLE] = self.log_sample\n        if self.container_rule is not None:\n            body[CONTAINER_RULE] = self.container_rule.json()\n\n        return body\n\n\nclass CreateRuleRequest(SetRuleRequest):\n    def __init__(self, topic_id: str, rule_name: str, paths: List[str] = None, log_type: str = \"minimalist_log\",\n                 extract_rule: ExtractRule = None, exclude_paths: List[ExcludePath] = None,\n                 user_define_rule: UserDefineRule = None, log_sample: str = None, input_type: int = 0,\n                 container_rule: ContainerRule = None):\n        \"\"\"\n        :param topic_id: 日志主题ID\n        :type topic_id: str\n        :param rule_name: 采集配置的名称\n        :type rule_name: str\n        :param paths: 采集路径列表\n        :type paths: List[str]\n        :param log_type: 采集模式\n        :type log_type: str\n        :param extract_rule: 日志提取规则\n        :type extract_rule: ExtractRule\n        :param exclude_paths: 采集黑名单列表\n        :type exclude_paths: List[ExcludePath]\n        :param user_define_rule: 用户自定义的采集规则\n        :type user_define_rule: UserDefineRule\n        :param log_sample: 日志样例\n        :type log_sample: str\n        :param input_type: 采集类型，0（默认）为宿主机日志文件，1为K8s容器标准输出，2为K8s容器内日志文件\n        :type input_type: int\n        :param container_rule: 容器采集规则\n        :type container_rule: ContainerRule\n        \"\"\"\n        super(CreateRuleRequest, self).__init__(rule_name, paths, log_type, extract_rule, exclude_paths,\n                                                user_define_rule, log_sample, input_type, container_rule)\n\n        self.topic_id = topic_id\n\n    def get_api_input(self):\n        body = super(CreateRuleRequest, self).get_api_input()\n        body[TOPIC_ID] = self.topic_id\n\n        return body\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None or self.rule_name is None:\n            return False\n        return True\n\n\nclass DeleteRuleRequest(TLSRequest):\n    def __init__(self, rule_id: str):\n        \"\"\"\n        :param rule_id:采集配置的 ID\n        :type rule_id:str\n        \"\"\"\n        self.rule_id = rule_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.rule_id is None:\n            return False\n        return True\n\n\nclass ModifyRuleRequest(SetRuleRequest):\n    def __init__(self, rule_id: str, rule_name: str = None, paths: List[str] = None, log_type: str = None,\n                 extract_rule: ExtractRule = None, exclude_paths: List[ExcludePath] = None,\n                 user_define_rule: UserDefineRule = None, log_sample: str = None, input_type: int = None,\n                 container_rule: ContainerRule = None, pause: int = None):\n        \"\"\"\n        :param rule_id: 采集配置ID\n        :type rule_id: str\n        :param rule_name: 采集配置的名称\n        :type rule_name: str\n        :param paths: 采集路径列表\n        :type paths: List[str]\n        :param log_type: 采集模式\n        :type log_type: str\n        :param extract_rule: 日志提取规则\n        :type extract_rule: ExtractRule\n        :param exclude_paths: 采集黑名单列表\n        :type exclude_paths: List[ExcludePath]\n        :param user_define_rule: 用户自定义的采集规则\n        :type user_define_rule: UserDefineRule\n        :param log_sample: 日志样例\n        :type log_sample: str\n        :param input_type: 采集类型，0（默认）为宿主机日志文件，1为K8s容器标准输出，2为K8s容器内日志文件\n        :type input_type: int\n        :param container_rule: 容器采集规则\n        :type container_rule: ContainerRule\n        :param pause: 是否暂停采集，0代表开启，1代表暂停\n        :type pause: int\n        \"\"\"\n        super(ModifyRuleRequest, self).__init__(rule_name, paths, log_type, extract_rule, exclude_paths,\n                                                user_define_rule, log_sample, input_type, container_rule)\n\n        self.rule_id = rule_id\n        self.pause = pause\n\n    def get_api_input(self):\n        body = super(ModifyRuleRequest, self).get_api_input()\n        body[RULE_ID] = self.rule_id\n        if self.pause is not None:\n            body[PAUSE] = self.pause\n\n        return body\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.rule_id is None:\n            return False\n        return True\n\n\nclass DescribeRuleRequest(TLSRequest):\n    def __init__(self, rule_id: str):\n        \"\"\"\n        :param rule_id:采集配置的 ID\n        :type rule_id:str\n        \"\"\"\n        self.rule_id = rule_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.rule_id is None:\n            return False\n        return True\n\n\nclass DescribeRulesRequest(TLSRequest):\n    def __init__(self, project_id: str = None, project_name: str = None, iam_project_name: str = None,\n                 rule_id: str = None, rule_name: str = None, topic_id: str = None, topic_name: str = None,\n                 page_number: int = 1, page_size: int = 20, log_type: str = None, pause: int = None,):\n        \"\"\"\n        :param rule_id:采集配置的 ID\n        :type rule_id:str\n        :param project_name: 日志项目名称\n        :type project_name: str\n        :param iam_project_name: IAM 项目名称\n        :type iam_project_name: str\n        :param rule_name:采集配置的名称\n        :type rule_name:\n        :param page_number: 分页查询时的页码。默认为 1\n        :type page_number: int\n        :param page_size: 分页大小。默认为 20，最大为 100\n        :type page_size: int\n        :param topic_id:日志主题 ID\n        :type topic_id:str\n        :param topic_name: 日志主题名称\n        :type topic_name: string\n        :param project_id: 日志项目 ID\n        :type project_id: string\n        :param log_type: 日志类型\n        :type log_type: str\n        :param pause: 是否暂停采集配置，0代表开启，1代表暂停\n        :type pause: int\n        \"\"\"\n        self.project_id = project_id\n        self.project_name = project_name\n        self.iam_project_name = iam_project_name\n        self.rule_id = rule_id\n        self.rule_name = rule_name\n        self.topic_id = topic_id\n        self.topic_name = topic_name\n        self.page_number = page_number\n        self.page_size = page_size\n        self.log_type = log_type\n        self.pause = pause\n\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return True\n\n\nclass ApplyRuleToHostGroupsRequest(TLSRequest):\n    def __init__(self, rule_id: str, host_group_ids: List[str]):\n        \"\"\"\n        :param rule_id:采集配置的 ID\n        :type rule_id:str\n        :param host_group_ids:机器组id列表\n        :type host_group_ids: List[str]\n        \"\"\"\n        self.rule_id = rule_id\n        self.host_group_ids = host_group_ids\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.rule_id is None:\n            return False\n        return True\n\n\nclass DeleteRuleFromHostGroupsRequest(TLSRequest):\n    def __init__(self, rule_id: str, host_group_ids: List[str]):\n        \"\"\"\n        :param rule_id:采集配置的 ID\n        :type rule_id:str\n        :param host_group_ids:机器组id列表\n        :type host_group_ids: List[str]\n        \"\"\"\n        self.rule_id = rule_id\n        self.host_group_ids = host_group_ids\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.rule_id is None or self.host_group_ids is None:\n            return False\n        return True\n\n\nclass CreateAlarmNotifyGroupRequest(TLSRequest):\n    def __init__(self, alarm_notify_group_name: str, notify_type: List[str] = None, receivers: List[Receiver] = None,\n                 iam_project_name: str = None, notice_rules: List[NoticeRule] = None):\n        \"\"\"\n        :param alarm_notify_group_name: 告警通知组名称\n        :type alarm_notify_group_name: str\n        :param notify_type: 告警通知的类型Trigger告警触发、Recovery告警恢复\n        :type notify_type: List[str]\n        :param receivers: 接收告警的IAM用户列表\n        :type receivers: List[Receiver]\n        :param iam_project_name: 告警组所属的 IAM 项目名称\n        :type iam_project_name: str\n        :param notice_rules: 告警通知组的相关配置\n        :type notice_rules: List[NoticeRule]\n        \"\"\"\n        self.alarm_notify_group_name = alarm_notify_group_name\n        self.notify_type = notify_type\n        self.receivers = receivers\n        self.iam_project_name = iam_project_name\n        self.notice_rules = notice_rules\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.alarm_notify_group_name is None:\n            return False\n        \n        # Either (NotifyType and Receivers) or NoticeRules must be provided, but not both\n        has_notify_receivers = self.notify_type is not None and self.receivers is not None\n        has_notice_rules = self.notice_rules is not None\n        \n        if not (has_notify_receivers or has_notice_rules):\n            return False\n        \n        if has_notify_receivers and has_notice_rules:\n            return False\n        \n        return True\n\n    def get_api_input(self):\n        body = {ALARM_NOTIFY_GROUP_NAME: self.alarm_notify_group_name}\n\n        if self.notify_type is not None:\n            body[NOTIFY_TYPE] = self.notify_type\n\n        if self.receivers is not None:\n            body[RECEIVERS] = []\n            for receiver in self.receivers:\n                body[RECEIVERS].append(receiver.json())\n\n        if self.iam_project_name is not None:\n            body[IAM_PROJECT_NAME] = self.iam_project_name\n\n        if self.notice_rules is not None:\n            body['NoticeRules'] = []\n            for notice_rule in self.notice_rules:\n                body['NoticeRules'].append(notice_rule.json())\n\n        return body\n\n\nclass DeleteAlarmNotifyGroupRequest(TLSRequest):\n    def __init__(self, alarm_notify_group_id: str):\n        \"\"\"\n        :param alarm_notify_group_id:告警通知组 ID\n        :type alarm_notify_group_id:str\n        \"\"\"\n        self.alarm_notify_group_id = alarm_notify_group_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.alarm_notify_group_id is None:\n            return False\n        return True\n\n\nclass ModifyAlarmNotifyGroupRequest(TLSRequest):\n    def __init__(self, alarm_notify_group_id: str, alarm_notify_group_name: str = None,\n                 notify_type: List[str] = None, receivers: List[Receiver] = None,\n                 notice_rules: List[NoticeRule] = None):\n        \"\"\"\n        :param alarm_notify_group_id: 告警通知组 ID\n        :type alarm_notify_group_id:str\n        :param alarm_notify_group_name:告警通知组名称\n        :type alarm_notify_group_name:str\n        :param notify_type: 告警通知的类型 Trigger告警触发、Recovery告警恢复\n        :type notify_type: List[str]\n        :param receivers:接收告警的 IAM 用户列表\n        :type receivers:List[Receiver]\n        :param notice_rules: 告警通知组的相关配置\n        :type notice_rules: List[NoticeRule]\n        \"\"\"\n        self.alarm_notify_group_id = alarm_notify_group_id\n        self.alarm_notify_group_name = alarm_notify_group_name\n        self.notify_type = notify_type\n        self.receivers = receivers\n        self.notice_rules = notice_rules\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.alarm_notify_group_id is None:\n            return False\n        \n        # Either (NotifyType and Receivers) or NoticeRules must be provided, but not both\n        has_notify_receivers = self.notify_type is not None and self.receivers is not None\n        has_notice_rules = self.notice_rules is not None\n        \n        if has_notify_receivers and has_notice_rules:\n            return False\n        \n        return True\n\n    def get_api_input(self):\n        body = {ALARM_NOTIFY_GROUP_ID: self.alarm_notify_group_id}\n\n        if self.alarm_notify_group_name is not None:\n            body[ALARM_NOTIFY_GROUP_NAME] = self.alarm_notify_group_name\n        if self.notify_type is not None:\n            body[NOTIFY_TYPE] = self.notify_type\n        if self.receivers is not None:\n            body[RECEIVERS] = []\n            for receiver in self.receivers:\n                body[RECEIVERS].append(receiver.json())\n        if self.notice_rules is not None:\n            body['NoticeRules'] = []\n            for notice_rule in self.notice_rules:\n                body['NoticeRules'].append(notice_rule.json())\n\n        return body\n\n\nclass DescribeAlarmNotifyGroupsRequest(TLSRequest):\n    def __init__(self, alarm_notify_group_name: str = None, alarm_notify_group_id: str = None,\n                 receiver_name: str = None, page_number: int = 1, page_size: int = 20, iam_project_name: str = None):\n        \"\"\"\n        :param alarm_notify_group_id: 告警通知组 ID\n        :type alarm_notify_group_id: str\n        :param alarm_notify_group_name: 告警通知组名称\n        :type alarm_notify_group_name: str\n        :param receiver_name: 接收告警的IAM用户\n        :type receiver_name: str\n        :param page_number: 分页查询时的页码，默认为1\n        :type page_number: int\n        :param page_size: 分页大小，默认为20，最大为100\n        :type page_size: int\n        :param iam_project_name 根据告警组所属的IAM项目名称进行筛选\n        :type iam_project_name str\n        \"\"\"\n        self.alarm_notify_group_name = alarm_notify_group_name\n        self.alarm_notify_group_id = alarm_notify_group_id\n        self.receiver_name = receiver_name\n        self.page_number = page_number\n        self.page_size = page_size\n        self.iam_project_name = iam_project_name\n\n    def check_validation(self):\n        return True\n\n\nclass SetAlarmRequest(TLSRequest):\n    def __init__(self, alarm_name: str = None, query_request: List[QueryRequest] = None,\n                 request_cycle: RequestCycle = None, condition: str = None, alarm_period: int = None,\n                 alarm_notify_group: List[str] = None, status: bool = None, trigger_period: int = None,\n                 user_define_msg: str = None, severity: str = None, alarm_period_detail: AlarmPeriodSetting = None,\n                 join_configurations: List[JoinConfig] = None, trigger_conditions: List[TriggerCondition] = None,\n                 send_resolved: bool = None):\n        \"\"\"\n        :param project_id: 日志项目ID\n        :type project_id: str\n        :param alarm_name: 告警策略名称\n        :type alarm_name: str\n        :param query_request: 检索分析语句，可配置1~3条\n        :type query_request: List[QueryRequest]\n        :param request_cycle: 告警任务的执行周期\n        :type request_cycle: RequestCycle\n        :param condition: 告警触发条件\n        :type condition: str\n        :param alarm_period: 告警重复的周期\n        :type alarm_period: int\n        :param alarm_notify_group: 告警对应的通知列表\n        :type alarm_notify_group: List[str]\n        :param status: 是否开启告警策略，默认值为true\n        :type status: bool\n        :param trigger_period: triggerPeriod触发告警持续周期，最小值为1，最大值为10\n        :type trigger_period: int\n        :param user_define_msg: 告警通知的内容\n        :type user_define_msg: str\n        :param severity: 告警通知的级别，即告警的严重程度，支持设置为notice、warning或critical，严重程度递增，默认为notice\n        :type severity: str\n        :param alarm_period_detail: 告警通知发送的周期\n        :type alarm_period_detail: AlarmPeriodSetting\n        :param join_configurations: 告警检索分析结果集合操作的相关配置\n        :type join_configurations: List[JoinConfig]\n        :param trigger_conditions: 告警触发条件列表\n        :type trigger_conditions: List[TriggerCondition]\n        :param send_resolved: 是否发送恢复通知\n        :type send_resolved: bool\n        \"\"\"\n        self.alarm_name = alarm_name\n        self.query_request = query_request\n        self.request_cycle = request_cycle\n        self.condition = condition\n        self.alarm_period = alarm_period\n        self.alarm_notify_group = alarm_notify_group\n        self.status = status\n        self.trigger_period = trigger_period\n        self.user_define_msg = user_define_msg\n        self.severity = severity\n        self.alarm_period_detail = alarm_period_detail\n        self.join_configurations = join_configurations\n        self.trigger_conditions = trigger_conditions\n        self.send_resolved = send_resolved\n\n    def get_api_input(self):\n        body = super(SetAlarmRequest, self).get_api_input()\n\n        if self.request_cycle is not None:\n            body[REQUEST_CYCLE] = self.request_cycle.json()\n        if self.query_request is not None:\n            body[QUERY_REQUEST] = []\n            for one_query_request in self.query_request:\n                body[QUERY_REQUEST].append(one_query_request.json())\n        if self.alarm_period_detail is not None:\n            body[ALARM_PERIOD_DETAIL] = self.alarm_period_detail.json()\n        if self.join_configurations is not None:\n            body[JOIN_CONFIGURATIONS] = []\n            for one_join_configuration in self.join_configurations:\n                body[JOIN_CONFIGURATIONS].append(one_join_configuration.json())\n        if self.trigger_conditions is not None:\n            body[TRIGGER_CONDITIONS] = []\n            for one_trigger_condition in self.trigger_conditions:\n                body[TRIGGER_CONDITIONS].append(one_trigger_condition.json())\n        if self.send_resolved is not None:\n            body[SEND_RESOLVED] = self.send_resolved\n        return body\n\n\nclass CreateAlarmRequest(SetAlarmRequest):\n    def __init__(self, project_id: str, alarm_name: str, query_request: List[QueryRequest], request_cycle: RequestCycle,\n                 condition: str, alarm_period: int, alarm_notify_group: List[str], status: bool = True,\n                 trigger_period: int = 1, user_define_msg: str = None, severity: str = \"notice\",\n                 alarm_period_detail: AlarmPeriodSetting = None, join_configurations: List[JoinConfig] = None,\n                 trigger_conditions: List[TriggerCondition] = None, send_resolved: bool = None):\n        \"\"\"\n        :param project_id: 日志项目ID\n        :type project_id: str\n        :param alarm_name: 告警策略名称\n        :type alarm_name: str\n        :param query_request: 检索分析语句，可配置1~3条\n        :type query_request: List[QueryRequest]\n        :param request_cycle: 告警任务的执行周期\n        :type request_cycle: RequestCycle\n        :param condition: 告警触发条件\n        :type condition: str\n        :param alarm_period: 告警重复的周期\n        :type alarm_period: int\n        :param alarm_notify_group: 告警对应的通知列表\n        :type alarm_notify_group: List[str]\n        :param status: 是否开启告警策略，默认值为true\n        :type status: bool\n        :param trigger_period: triggerPeriod触发告警持续周期，最小值为1，最大值为10\n        :type trigger_period: int\n        :param user_define_msg: 告警通知的内容\n        :type user_define_msg: str\n        :param severity: 告警通知的级别，即告警的严重程度，支持设置为notice、warning或critical，严重程度递增，默认为notice\n        :type severity: str\n        :param alarm_period_detail: 告警通知发送的周期\n        :type alarm_period_detail: AlarmPeriodSetting\n        :param join_configurations: 告警检索分析结果集合操作的相关配置\n        :type join_configurations: List[JoinConfig]\n        :param trigger_conditions: 告警触发条件列表\n        :type trigger_conditions: List[TriggerCondition]\n        :param send_resolved: 是否发送恢复通知，不填该参数默认为true\n        :type send_resolved: bool\n        \"\"\"\n        super(CreateAlarmRequest, self).__init__(alarm_name, query_request, request_cycle, condition, alarm_period,\n                                                 alarm_notify_group, status, trigger_period, user_define_msg, severity,\n                                                 alarm_period_detail, join_configurations, trigger_conditions,\n                                                 send_resolved)\n        self.project_id = project_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.alarm_name is None or self.project_id is None or self.request_cycle is None or self.condition is None \\\n                or self.alarm_period is None or self.alarm_notify_group is None:\n            return False\n        return True\n\n\nclass DeleteAlarmRequest(TLSRequest):\n    def __init__(self, alarm_id: str):\n        \"\"\"\n        :param alarm_id:告警策略 ID\n        :type alarm_id:str\n        \"\"\"\n        self.alarm_id = alarm_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.alarm_id is None:\n            return False\n        return True\n\n\nclass ModifyAlarmRequest(SetAlarmRequest):\n    def __init__(self, alarm_id: str, alarm_name: str = None, query_request: List[QueryRequest] = None,\n                 request_cycle: RequestCycle = None, condition: str = None, alarm_period: int = None,\n                 alarm_notify_group: List[str] = None, status: bool = None, trigger_period: int = None,\n                 user_define_msg: str = None, severity: str = None, alarm_period_detail: AlarmPeriodSetting = None,\n                 join_configurations: List[JoinConfig] = None, trigger_conditions: List[TriggerCondition] = None,\n                 send_resolved: bool = None):\n        \"\"\"\n        :param alarm_id: 告警策略ID\n        :type alarm_id: str\n        :param alarm_name: 告警策略名称\n        :type alarm_name: str\n        :param query_request: 检索分析语句，可配置1~3条\n        :type query_request: List[QueryRequest]\n        :param request_cycle: 告警任务的执行周期\n        :type request_cycle: RequestCycle\n        :param condition: 告警触发条件\n        :type condition: str\n        :param alarm_period: 告警重复的周期\n        :type alarm_period: int\n        :param alarm_notify_group: 告警对应的通知列表\n        :type alarm_notify_group: List[str]\n        :param status: 是否开启告警策略，默认值为true\n        :type status: bool\n        :param trigger_period: triggerPeriod触发告警持续周期，最小值为1，最大值为10\n        :type trigger_period: int\n        :param user_define_msg: 告警通知的内容\n        :type user_define_msg: str\n        :param severity: 告警通知的级别，即告警的严重程度，支持设置为notice、warning或critical，严重程度递增，默认为notice\n        :type severity: str\n        :param alarm_period_detail: 告警通知发送的周期\n        :type alarm_period_detail: AlarmPeriodSetting\n        :param join_configurations: 告警检索分析结果集合操作的相关配置\n        :type join_configurations: List[JoinConfig]\n        :param trigger_conditions: 告警触发条件列表\n        :type trigger_conditions: List[TriggerCondition]\n        :param send_resolved: 是否发送恢复通知\n        :type send_resolved: bool\n        \"\"\"\n        super(ModifyAlarmRequest, self).__init__(alarm_name, query_request, request_cycle, condition, alarm_period,\n                                                 alarm_notify_group, status, trigger_period, user_define_msg, severity,\n                                                 alarm_period_detail, join_configurations, trigger_conditions, send_resolved)\n        self.alarm_id = alarm_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.alarm_id is None:\n            return False\n        return True\n\n\nclass DescribeAlarmsRequest(TLSRequest):\n    def __init__(self, project_id: str, alarm_name: str = None, alarm_id: str = None, topic_name: str = None,\n                 topic_id: str = None, status: bool = None, page_number: int = 1, page_size: int = 20):\n        \"\"\"\n        :param project_id: 日志项目 ID\n        :type project_id: string\n        :param alarm_name:告警策略名称\n        :type alarm_name:str\n        :param alarm_id:告警策略 ID\n        :type alarm_id:str\n        :param status:是否开启告警策略。默认值为 true\n        :type status:bool\n        :param page_number: 分页查询时的页码。默认为 1\n        :type page_number: int\n        :param page_size: 分页大小。默认为 20，最大为 100\n        :type page_size: int\n        :param topic_id:日志主题 ID\n        :type topic_id:str\n        :param topic_name: 日志主题名称\n        :type topic_name: string\n        \"\"\"\n\n        self.project_id = project_id\n        self.alarm_name = alarm_name\n        self.alarm_id = alarm_id\n        self.topic_name = topic_name\n        self.topic_id = topic_id\n        self.status = status\n        self.page_number = page_number\n        self.page_size = page_size\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.project_id is None:\n            return False\n        return True\n\n\nclass OpenKafkaConsumerRequest(TLSRequest):\n    def __init__(self, topic_id: str):\n        \"\"\"\n        :param topic_id:日志主题 ID\n        :type topic_id:str\n        \"\"\"\n        self.topic_id = topic_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None:\n            return False\n        return True\n\n\nclass CloseKafkaConsumerRequest(TLSRequest):\n    def __init__(self, topic_id: str):\n        \"\"\"\n        :param topic_id:日志主题 ID\n        :type topic_id:str\n        \"\"\"\n        self.topic_id = topic_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None:\n            return False\n        return True\n\n\nclass DescribeKafkaConsumerRequest(TLSRequest):\n    def __init__(self, topic_id: str):\n        \"\"\"\n        :param topic_id:日志主题 ID\n        :type topic_id:str\n        \"\"\"\n        self.topic_id = topic_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.topic_id is None:\n            return False\n        return True\n\n\nclass CreateConsumerGroupRequest(TLSRequest):\n    def __init__(self, project_id: str, consumer_group_name: str, topic_id_list: List[str], heartbeat_ttl: int, ordered_consume: bool):\n        \"\"\"\n        :param project_id: 日志项目ID\n        :type project_id: str\n        :param consumer_group_name: 消费组名称\n        :type consumer_group_name: str\n        :param topic_id_list: 消费者要消费的TopicID列表\n        :type topic_id_list: List[str]\n        :param heartbeat_ttl: 心跳TTL\n        :type heartbeat_ttl: int\n        :param ordered_consume: 是否按顺序消费\n        :type ordered_consume: bool\n        \"\"\"\n        self.project_id = project_id\n        self.consumer_group_name = consumer_group_name\n        self.topic_id_list = topic_id_list\n        self.heartbeat_ttl = heartbeat_ttl\n        self.ordered_consume = ordered_consume\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return (self.project_id is not None and self.consumer_group_name is not None\n                and self.topic_id_list is not None and self.heartbeat_ttl is not None and self.ordered_consume is not None)\n\n    def get_api_input(self):\n        body = {PROJECT_ID_UPPERCASE: self.project_id, CONSUMER_GROUP_NAME: self.consumer_group_name,\n                TOPIC_ID_LIST: self.topic_id_list, HEARTBEAT_TTL: self.heartbeat_ttl, ORDERED_CONSUME: self.ordered_consume}\n\n        return body\n\n\nclass DeleteConsumerGroupRequest(TLSRequest):\n    def __init__(self, project_id: str, consumer_group_name: str):\n        \"\"\"\n        :param project_id: 日志项目ID\n        :type project_id: str\n        :param consumer_group_name: 消费组名称\n        :type consumer_group_name: str\n        \"\"\"\n        self.project_id = project_id\n        self.consumer_group_name = consumer_group_name\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.project_id is not None and self.consumer_group_name is not None\n\n    def get_api_input(self):\n        return {PROJECT_ID_UPPERCASE: self.project_id, CONSUMER_GROUP_NAME: self.consumer_group_name}\n\n\nclass ModifyConsumerGroupRequest(TLSRequest):\n    def __init__(self, project_id: str, consumer_group_name: str,\n                 topic_id_list: List[str] = None, heartbeat_ttl: int = None, ordered_consume: bool = None):\n        \"\"\"\n        :param project_id: 日志项目ID\n        :type project_id: str\n        :param consumer_group_name: 消费组名称\n        :type consumer_group_name: str\n        :param topic_id_list: 消费者要消费的TopicID列表\n        :type topic_id_list: List[str]\n        :param heartbeat_ttl: 心跳TTL\n        :type heartbeat_ttl: int\n        :param ordered_consume: 是否按顺序消费\n        :type ordered_consume: bool\n        \"\"\"\n        self.project_id = project_id\n        self.consumer_group_name = consumer_group_name\n        self.topic_id_list = topic_id_list\n        self.heartbeat_ttl = heartbeat_ttl\n        self.ordered_consume = ordered_consume\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.project_id is not None and self.consumer_group_name is not None\n\n    def get_api_input(self):\n        body = {PROJECT_ID_UPPERCASE: self.project_id, CONSUMER_GROUP_NAME: self.consumer_group_name}\n\n        if self.topic_id_list is not None:\n            body[TOPIC_ID_LIST] = self.topic_id_list\n        if self.heartbeat_ttl is not None:\n            body[HEARTBEAT_TTL] = self.heartbeat_ttl\n        if self.ordered_consume is not None:\n            body[ORDERED_CONSUME] = self.ordered_consume\n\n        return body\n\n\nclass DescribeConsumerGroupsRequest(TLSRequest):\n    def __init__(self, project_id: str, page_number: int = 1, page_size: int = 20, consumer_group_name: str = None,\n                 project_name: str = None, topic_id: str = None, topic_name: str = None, iam_project_name: str = None):\n        \"\"\"\n        :param project_id: 日志项目ID\n        :type project_id: str\n        :param page_number: 分页查询时的页码\n        :type page_number: int\n        :param page_size: 分页大小\n        :type page_size: int\n        :param consumer_group_name: 消费组名称\n        :type consumer_group_name: str\n        :param project_name: 日志项目名称\n        :type project_name: str\n        :param topic_id: 日志主题ID\n        :type topic_id: str\n        :param topic_name: 日志主题名称\n        :type topic_name: str\n        :param iam_project_name: IAM日志项目名称\n        :type iam_project_name: str\n        \"\"\"\n        self.project_id = project_id\n        self.page_number = page_number\n        self.page_size = page_size\n        self.consumer_group_name = consumer_group_name\n        self.project_name = project_name\n        self.topic_id = topic_id\n        self.topic_name = topic_name\n        self.iam_project_name = iam_project_name\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.project_id is not None\n\n\nclass ConsumerHeartbeatRequest(TLSRequest):\n    def __init__(self, project_id: str, consumer_group_name: str, consumer_name: str):\n        \"\"\"\n        :param project_id: 日志项目ID\n        :type project_id: str\n        :param consumer_group_name: 消费组名称\n        :type consumer_group_name: str\n        :param consumer_name: 消费者名称\n        :type consumer_name: str\n        \"\"\"\n        self.project_id = project_id\n        self.consumer_group_name = consumer_group_name\n        self.consumer_name = consumer_name\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.project_id is not None and self.consumer_group_name is not None and self.consumer_name is not None\n\n    def get_api_input(self):\n        return {PROJECT_ID_UPPERCASE: self.project_id, CONSUMER_GROUP_NAME: self.consumer_group_name,\n                CONSUMER_NAME: self.consumer_name}\n\n\nclass ModifyCheckpointRequest(TLSRequest):\n    def __init__(self, project_id: str, topic_id: str, shard_id: int, consumer_group_name: str, checkpoint: str):\n        \"\"\"\n        :param project_id: 日志项目ID\n        :type project_id: str\n        :param topic_id: 日志主题ID\n        :type topic_id: str\n        :param shard_id: ShardID\n        :type shard_id: int\n        :param consumer_group_name: 消费者名称\n        :type consumer_group_name: str\n        :param checkpoint: 检查点\n        :type checkpoint: str\n        \"\"\"\n        self.project_id = project_id\n        self.topic_id = topic_id\n        self.shard_id = shard_id\n        self.consumer_group_name = consumer_group_name\n        self.checkpoint = checkpoint\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return (self.project_id is not None and self.topic_id is not None and self.shard_id is not None\n                and self.consumer_group_name is not None and self.checkpoint is not None)\n\n    def get_api_input(self):\n        return {PROJECT_ID_UPPERCASE: self.project_id, TOPIC_ID_UPPERCASE: self.topic_id,\n                SHARD_ID_UPPERCASE: self.shard_id, CONSUMER_GROUP_NAME: self.consumer_group_name,\n                CHECKPOINT: self.checkpoint}\n\n\nclass ResetCheckpointRequest(TLSRequest):\n    def __init__(self, project_id: str, consumer_group_name: str, position: str):\n        \"\"\"\n        :param project_id: 日志项目ID\n        :type project_id: str\n        :param consumer_group_name: 消费者名称\n        :type consumer_group_name: str\n        :param position: 消费位点\n        :type position: str\n        \"\"\"\n        self.project_id = project_id\n        self.consumer_group_name = consumer_group_name\n        self.position = position\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.project_id is not None and self.consumer_group_name is not None and self.position is not None\n\n    def get_api_input(self):\n        return {PROJECT_ID_UPPERCASE: self.project_id, CONSUMER_GROUP_NAME: self.consumer_group_name, POSITION: self.position}\n\n\nclass DescribeCheckpointRequest(TLSRequest):\n    def __init__(self, project_id: str, topic_id: str, shard_id: int, consumer_group_name: str):\n        \"\"\"\n        :param project_id: 日志项目ID\n        :param topic_id: 日志主题ID\n        :param shard_id: ShardID\n        :param consumer_group_name: 消费组名称\n        \"\"\"\n        self.project_id = project_id\n        self.topic_id = topic_id\n        self.shard_id = shard_id\n        self.consumer_group_name = consumer_group_name\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return (self.project_id is not None and self.topic_id is not None and self.shard_id is not None\n                and self.consumer_group_name is not None)\n\n    def get_api_input(self):\n        params = {PROJECT_ID: self.project_id, TOPIC_ID: self.topic_id,\n                  SHARD_ID: self.shard_id}\n        body = {CONSUMER_GROUP_NAME: self.consumer_group_name}\n\n        return {PARAMS: params, BODY: body}\n\n\nclass AddTagsToResourceRequest(TLSRequest):\n    def __init__(self, resource_type: str, resources_list: List[str], tags: List[TagInfo]):\n        \"\"\"\n        :param resource_type: 资源类型，支持设置为project或topic\n        :type resource_type: str\n        :param resources_list: 资源列表，即日志项目或日志主题的ID列表\n        :type resources_list: List[str]\n        :param tags: 需要绑定的标签键和标签值数组对象\n        :type tags: List[TagInfo]\n        \"\"\"\n        self.resource_type = resource_type\n        self.resources_list = resources_list\n        self.tags = tags\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.resource_type is not None and self.resources_list is not None and self.tags is not None\n\n    def get_api_input(self):\n        body = {RESOURCE_TYPE: self.resource_type, RESOURCES_LIST: self.resources_list, TAGS: []}\n\n        for tag in self.tags:\n            body[TAGS].append(tag.json())\n\n        return body\n\n\nclass RemoveTagsFromResourceRequest(TLSRequest):\n    def __init__(self, resource_type: str, resources_list: List[str], tag_key_list: List[str]):\n        \"\"\"\n        :param resource_type: 资源类型，支持设置为project或topic\n        :type resource_type: str\n        :param resources_list: 资源列表，即日志项目或日志主题的ID列表\n        :type resources_list: List[str]\n        :param tag_key_list: 待解绑的资源标签键列表\n        :type tag_key_list: List[str]\n        \"\"\"\n        self.resource_type = resource_type\n        self.resources_list = resources_list\n        self.tag_key_list = tag_key_list\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.resource_type is not None and self.resources_list is not None and self.tag_key_list is not None\n\n\nclass TagResourcesRequest(TLSRequest):\n    def __init__(self, resource_type: str, resources_ids: List[str], tags: List[TagInfo]):\n        \"\"\"\n        :param resource_type: 资源类型，支持设置为：project：日志项目；topic：日志主题\n        :type resource_type: str\n        :param resources_ids: 资源列表，即日志项目或日志主题的 ID 列表。支持一次传入多个资源 ID，最多同时传入 50 个资源 ID。\n        :type resources_ids: List[str]\n        :param tags: 需要绑定的标签键和标签值数组对象\n        :type tags: List[TagInfo]\n        \"\"\"\n        self.resource_type = resource_type\n        self.resources_ids = resources_ids\n        self.tags = tags\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return (self.resource_type is not None and\n                self.resources_ids is not None and\n                self.tags is not None)\n\n    def get_api_input(self):\n        body = {RESOURCE_TYPE: self.resource_type, RESOURCES_IDS: self.resources_ids, TAGS: []}\n\n        for tag in self.tags:\n            body[TAGS].append(tag.json())\n\n        return body\n\n\nclass UntagResourcesRequest(TLSRequest):\n    def __init__(self, resource_type: str, resources_ids: List[str], tag_keys: List[str]):\n        \"\"\"\n        :param resource_type: 资源类型，支持设置为：project：日志项目；topic：日志主题\n        :type resource_type: str\n        :param resources_ids: 资源列表，即日志项目或日志主题的 ID 列表。支持一次传入多个资源 ID，最多同时传入 50 个资源 ID。\n        :type resources_ids: List[str]\n        :param tag_keys: 待解绑的资源标签键列表。支持一次传入多个标签键，多个标签键间用英文逗号（,）分隔。最多同时传入 20 个标签键。\n        :type tag_keys: List[str]\n        \"\"\"\n        self.resource_type = resource_type\n        self.resources_ids = resources_ids\n        self.tag_keys = tag_keys\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return (self.resource_type is not None and\n                self.resources_ids is not None and\n                self.tag_keys is not None)\n\nclass CreateImportTaskRequest(TLSRequest):\n    def __init__(self, topic_id: str, task_name: str, source_type: str, import_source_info: ImportSourceInfo,\n                 target_info: TargetInfo, project_id: str = None, description: str = None):\n        \"\"\"\n        :param topic_id: 日志主题ID\n        :type topic_id: str\n        :param task_name: 导入任务名称\n        :type task_name: str\n        :param source_type: 导入任务源类型:tos、kafka\n        :type source_type: str\n        :param import_source_info: 导入任务源信息\n        :type import_source_info: ImportSourceInfo\n        :param target_info: 导入任务目标信息\n        :type target_info: TargetInfo\n        :param project_id: 日志项目ID\n        :type project_id: str\n        :param description: 导入任务描述\n        :type description: str\n        \"\"\"\n        self.project_id = project_id\n        self.topic_id = topic_id\n        self.task_name = task_name\n        self.source_type = source_type\n        self.import_source_info = import_source_info\n        self.target_info = target_info\n        self.description = description\n\n    def get_api_input(self):\n        body = super(CreateImportTaskRequest, self).get_api_input()\n        del body[PROJECT_ID]\n        if self.project_id is not None:\n            body[PROJECT_ID_UPPERCASE] = self.project_id\n        del body[TOPIC_ID]\n        body[TOPIC_ID_UPPERCASE] = self.topic_id\n        if self.import_source_info is not None:\n            body[IMPORT_SOURCE_INFO] = self.import_source_info.json()\n\n        if self.target_info is not None:\n            body[TARGET_INFO] = self.target_info.json()\n\n        return body\n\nclass DeleteImportTaskRequest(TLSRequest):\n    def __init__(self, task_id: str):\n        \"\"\"\n        :param task_id: 导入任务ID\n        :type task_id: str\n        \"\"\"\n        self.task_id = task_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.task_id is None:\n            return False\n        if isinstance(self.task_id, str):\n            return bool(self.task_id.strip())\n        return True\n\nclass ModifyImportTaskRequest(CreateImportTaskRequest):\n    def __init__(self, task_id: str, status: int, topic_id: str, task_name: str, source_type: str, import_source_info: ImportSourceInfo,\n                 target_info: TargetInfo, project_id: str = None, description: str = None):\n        \"\"\"\n        :param task_id: 导入任务ID\n        :type task_id: str\n        :param status: 导入任务状态:0：导入中。1：导入完成。2：导入异常。3：停止中。4：已停止。5：重启中。\n        :type status: int\n        :param topic_id: 日志主题ID\n        :type topic_id: str\n        :param task_name: 导入任务名称\n        :type task_name: str\n        :param source_type: 导入任务源类型:tos、kafka\n        :type source_type: str\n        :param import_source_info: 导入任务源信息\n        :type import_source_info: ImportSourceInfo\n        :param target_info: 导入任务目标信息\n        :type target_info: TargetInfo\n        :param project_id: 日志项目ID\n        :type project_id: str\n        :param description: 导入任务描述\n        :type description: str\n        \"\"\"\n        super(ModifyImportTaskRequest, self).__init__(topic_id, task_name, source_type, import_source_info, target_info, project_id, description)\n        self.task_id = task_id\n        self.status = status\n\n    def get_api_input(self):\n        body = super(ModifyImportTaskRequest, self).get_api_input()\n        body[TASK_ID] = self.task_id\n        body[STATUS] = self.status\n        return body\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return (self.task_id is not None and\n                self.status is not None and\n                self.topic_id is not None and\n                self.task_name is not None and\n                self.source_type is not None and\n                self.import_source_info is not None and\n                self.target_info is not None)\n\nclass DescribeImportTaskRequest(TLSRequest):\n    def __init__(self, task_id: str):\n        \"\"\"\n        :param task_id: 导入任务ID\n        :type task_id: str\n        \"\"\"\n        self.task_id = task_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.task_id is not None\n\nclass DescribeImportTasksRequest(TLSRequest):\n    def __init__(self, task_id: str = None, task_name: str = None, project_id: str = None, project_name: str = None,\n                 iam_project_name: str = None, topic_id: str = None, topic_name: str = None,page_number: int = 1,\n                 page_size: int = 20, source_type: str = None, status: int = None):\n        \"\"\"\n        :param task_id: 导入任务ID\n        :type task_id: str\n        :param task_name: 导入任务名称\n        :type task_name: str\n        :param project_id: 日志项目ID\n        :type project_id: str\n        :param project_name: 日志项目名称\n        :type project_name: str\n        :param iam_project_name: 日志项目名称（IAM）\n        :type iam_project_name: str\n        :param topic_id: 日志主题ID\n        :type topic_id: str\n        :param topic_name: 日志主题名称\n        :type topic_name: str\n        :param page_number: 分页查询时的页码。默认为 1，即从第一页数据开始返回。\n        :type page_number: int\n        :param page_size: 分页大小。默认为 20，最大为 100。\n        :type page_size: int\n        :param source_type: 导入任务源类型:tos、kafka\n        :type source_type: str\n        :param status: 导入任务状态:0：导入中。1：导入完成。2：导入异常。3：停止中。4：已停止。5：重启中。\n        :type status: int\n        \"\"\"\n        self.task_id = task_id\n        self.task_name = task_name\n        self.project_id = project_id\n        self.project_name = project_name\n        self.iam_project_name = iam_project_name\n        self.topic_id = topic_id\n        self.topic_name = topic_name\n        self.page_number = page_number\n        self.page_size = page_size\n        self.source_type = source_type\n        self.status = status\n\n\nclass CreateShipperRequest(TLSRequest):\n    def __init__(self, topic_id: str, shipper_name: str, shipper_type: str, content_info: ContentInfo,\n                 tos_shipper_info: TosShipperInfo = None, kafka_shipper_info: KafkaShipperInfo = None,\n                 shipper_start_time: int = None, shipper_end_time: int = None, role_trn: str = None, service_trn: str = None):\n        \"\"\"\n        :param topic_id: 日志主题ID\n        :type topic_id: str\n        :param shipper_name: 投递配置名称\n        :type shipper_name: str\n        :param shipper_type: 投递类型: tos、kafka\n        :type shipper_type: str\n        :param content_info: 日志内容的投递格式配置\n        :type content_info: ContentInfo\n        :param tos_shipper_info: 投递到TOS的相关配置\n        :type tos_shipper_info: TosShipperInfo, optional\n        :param kafka_shipper_info: 投递到Kafka的相关配置\n        :type kafka_shipper_info: KafkaShipperInfo, optional\n        :param shipper_start_time: 投递开始时间，毫秒时间戳\n        :type shipper_start_time: int, optional\n        :param shipper_end_time: 投递结束时间，毫秒时间戳\n        :type shipper_end_time: int, optional\n        :param role_trn: 自定义角色的Trn\n        :type role_trn: str, optional\n        :param service_trn: 服务信任角色的Trn\n        :type service_trn: str, optional\n        \"\"\"\n        self.topic_id = topic_id\n        self.shipper_name = shipper_name\n        self.shipper_type = shipper_type\n        self.content_info = content_info\n        self.tos_shipper_info = tos_shipper_info\n        self.kafka_shipper_info = kafka_shipper_info\n        self.shipper_start_time = shipper_start_time\n        self.shipper_end_time = shipper_end_time\n        self.role_trn = role_trn\n        self.service_trn = service_trn\n\n    def get_api_input(self):\n        api_input = super(CreateShipperRequest, self).get_api_input()\n        api_input[CONTENT_INFO] = self.content_info.json()\n        if self.tos_shipper_info:\n            api_input[TOS_SHIPPER_INFO] = self.tos_shipper_info.json()\n        if self.kafka_shipper_info:\n            api_input[KAFKA_SHIPPER_INFO] = self.kafka_shipper_info.json()\n        return api_input\n\n\nclass DeleteShipperRequest(TLSRequest):\n    def __init__(self, shipper_id: str):\n        \"\"\"\n        :param shipper_id: 投递配置ID\n        :type shipper_id: str\n        \"\"\"\n        self.shipper_id = shipper_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.shipper_id is not None\n\n\nclass ModifyShipperRequest(TLSRequest):\n    def __init__(self, shipper_id: str, shipper_name: str = None, shipper_type: str = None,\n                 content_info: ContentInfo = None, tos_shipper_info: TosShipperInfo = None,\n                 kafka_shipper_info: KafkaShipperInfo = None, status: bool = None,\n                 shipper_start_time: int = None, shipper_end_time: int = None,\n                 role_trn: str = None, service_trn: str = None):\n        \"\"\"\n        :param shipper_id: 投递配置ID\n        :type shipper_id: str\n        :param shipper_name: 投递配置名称\n        :type shipper_name: str, optional\n        :param shipper_type: 投递类型: tos、kafka\n        :type shipper_type: str, optional\n        :param content_info: 日志内容的投递格式配置\n        :type content_info: ContentInfo, optional\n        :param tos_shipper_info: 投递到TOS的相关配置\n        :type tos_shipper_info: TosShipperInfo, optional\n        :param kafka_shipper_info: 投递到Kafka的相关配置\n        :type kafka_shipper_info: KafkaShipperInfo, optional\n        :param status: 是否开启投递配置\n        :type status: bool, optional\n        :param shipper_start_time: 投递开始时间，毫秒时间戳\n        :type shipper_start_time: int, optional\n        :param shipper_end_time: 投递结束时间，毫秒时间戳\n        :type shipper_end_time: int, optional\n        :param role_trn: 自定义角色的Trn\n        :type role_trn: str, optional\n        :param service_trn: 服务信任角色的Trn\n        :type service_trn: str, optional\n        \"\"\"\n        self.shipper_id = shipper_id\n        self.shipper_name = shipper_name\n        self.shipper_type = shipper_type\n        self.content_info = content_info\n        self.tos_shipper_info = tos_shipper_info\n        self.kafka_shipper_info = kafka_shipper_info\n        self.status = status\n        self.shipper_start_time = shipper_start_time\n        self.shipper_end_time = shipper_end_time\n        self.role_trn = role_trn\n        self.service_trn = service_trn\n\n    def get_api_input(self):\n        api_input = super(ModifyShipperRequest, self).get_api_input()\n        if self.content_info:\n            api_input[CONTENT_INFO] = self.content_info.json()\n        if self.tos_shipper_info:\n            api_input[TOS_SHIPPER_INFO] = self.tos_shipper_info.json()\n        if self.kafka_shipper_info:\n            api_input[KAFKA_SHIPPER_INFO] = self.kafka_shipper_info.json()\n        return api_input\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.shipper_id is not None\n\n\nclass DescribeShipperRequest(TLSRequest):\n    def __init__(self, shipper_id: str):\n        \"\"\"\n        :param shipper_id: 投递配置ID\n        :type shipper_id: str\n        \"\"\"\n        self.shipper_id = shipper_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.shipper_id is not None\n\n\nclass DescribeShippersRequest(TLSRequest):\n    def __init__(self, project_id: str = None, project_name: str = None, iam_project_name: str = None,\n                 shipper_id: str = None, shipper_name: str = None, topic_id: str = None,\n                 topic_name: str = None, shipper_type: str = None, page_number: int = 1, page_size: int = 20):\n        \"\"\"\n        :param project_id: 日志项目ID\n        :type project_id: str, optional\n        :param project_name: 日志项目名称\n        :type project_name: str, optional\n        :param iam_project_name: IAM项目名称\n        :type iam_project_name: str, optional\n        :param shipper_id: 投递配置ID\n        :type shipper_id: str, optional\n        :param shipper_name: 投递配置名称\n        :type shipper_name: str, optional\n        :param topic_id: 日志主题ID\n        :type topic_id: str, optional\n        :param topic_name: 日志主题名称\n        :type topic_name: str, optional\n        :param shipper_type: 投递类型: tos、kafka\n        :type shipper_type: str, optional\n        :param page_number: 分页查询时的页码\n        :type page_number: int, optional\n        :param page_size: 分页大小\n        :type page_size: int, optional\n        \"\"\"\n        self.project_id = project_id\n        self.project_name = project_name\n        self.iam_project_name = iam_project_name\n        self.shipper_id = shipper_id\n        self.shipper_name = shipper_name\n        self.topic_id = topic_id\n        self.topic_name = topic_name\n        self.shipper_type = shipper_type\n        self.page_number = page_number\n        self.page_size = page_size\n\n\nclass ModifyETLTaskRequest(TLSRequest):\n    def __init__(self, task_id: str, name: str = None, description: str = None,\n                 script: str = None, target_resources: List = None):\n        \"\"\"\\\n        :param task_id: 加工任务 ID\n        :type task_id: str\n        :param name: 加工任务名称\n        :type name: str, optional\n        :param description: 数据加工任务的描述信息\n        :type description: str, optional\n        :param script: 加工规则\n        :type script: str, optional\n        :param target_resources: 输出目标的相关信息\n        :type target_resources: List[TargetResource], optional\n        \"\"\"\n        self.task_id = task_id\n        self.name = name\n        self.description = description\n        self.script = script\n        self.target_resources = target_resources\n\n    def check_validation(self):\n        \"\"\"\\\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.task_id is not None\n\n    def get_api_input(self):\n        body = super(ModifyETLTaskRequest, self).get_api_input()\n\n        if self.target_resources is not None:\n            body[ETL_TARGET_RESOURCES] = []\n            for target_resource in self.target_resources:\n                body[ETL_TARGET_RESOURCES].append(target_resource.json())\n\n        return body\n\n\nclass DescribeETLTaskRequest(TLSRequest):\n    def __init__(self, task_id: str):\n        \"\"\"\\\n        :param task_id: 待查询的加工任务 ID\n        :type task_id: str\n        \"\"\"\n        self.task_id = task_id\n\n    def check_validation(self):\n        \"\"\"\\\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.task_id is None:\n            return False\n        return True\n\n\nclass DescribeETLTasksRequest(TLSRequest):\n    def __init__(\n            self,\n            project_id: str = None,\n            project_name: str = None,\n            source_topic_id: str = None,\n            source_topic_name: str = None,\n            task_id: str = None,\n            task_name: str = None,\n            status: str = None,\n            iam_project_name: str = None,\n            page_number: int = 1,\n            page_size: int = 20):\n        \"\"\"\\\n        :param project_id: 日志项目 ID\n        :type project_id: str, optional\n        :param project_name: 日志项目名称\n        :type project_name: str, optional\n        :param source_topic_id: 源日志主题 ID\n        :type source_topic_id: str, optional\n        :param source_topic_name: 源日志主题名称\n        :type source_topic_name: str, optional\n        :param task_id: 加工任务 ID\n        :type task_id: str, optional\n        :param task_name: 加工任务名称\n        :type task_name: str, optional\n        :param status: 加工任务状态\n        :type status: str, optional\n        :param iam_project_name: IAM 项目名称\n        :type iam_project_name: str, optional\n        :param page_number: 分页页码，从 1 开始\n        :type page_number: int, optional\n        :param page_size: 分页大小，默认为 20，最大 100\n        :type page_size: int, optional\n        \"\"\"\n        self.project_id = project_id\n        self.project_name = project_name\n        self.source_topic_id = source_topic_id\n        self.source_topic_name = source_topic_name\n        self.task_id = task_id\n        self.task_name = task_name\n        self.status = status\n        self.iam_project_name = iam_project_name\n        self.page_number = page_number\n        self.page_size = page_size\n\n    def check_validation(self):\n        \"\"\"\\\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return True\n\n\nclass CancelDownloadTaskRequest(TLSRequest):\n    def __init__(self, task_id: str):\n        \"\"\"\n        :param task_id: 下载任务 ID\n        :type task_id: str\n        \"\"\"\n        self.task_id = task_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.task_id is not None\n\n\nclass DescribeScheduleSqlTaskRequest(TLSRequest):\n    def __init__(self, task_id: str):\n        \"\"\"\n        :param task_id: 定时 SQL 分析任务 ID\n        :type task_id: str\n        \"\"\"\n        self.task_id = task_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.task_id is not None\n\n\nclass DeleteScheduleSqlTaskRequest(TLSRequest):\n    def __init__(self, task_id: str):\n        \"\"\"\n        :param task_id: 定时SQL分析任务的ID\n        :type task_id: str\n        \"\"\"\n        self.task_id = task_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.task_id is not None\n\n\nclass DeleteETLTaskRequest(TLSRequest):\n    def __init__(self, task_id: str):\n        \"\"\"\n        :param task_id: 待删除的加工任务的 ID\n        :type task_id: str\n        \"\"\"\n        self.task_id = task_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.task_id is not None\n\nclass CreateTraceInstanceRequest(TLSRequest):\n    def __init__(self, project_id: str, trace_instance_name: str, description: str = None):\n        \"\"\"\n        :param project_id: 日志主题所属的日志项目uuid\n        :type project_id: str\n        :param trace_instance_name: Trace实例名称:同一个日志项目下，日志主题名称不可重复;\n                                   只能包括小写字母、数字、中文和短划线（-）;\n                                   必须以小写字母、中文或者数字开头和结尾;长度为3~30字符\n        :type trace_instance_name: str\n        :param description: Trace实例描述信息：不支持<>、'、、；长度为0-64个字符\n        :type description: str\n        \"\"\"\n        self.project_id = project_id\n        self.trace_instance_name = trace_instance_name\n        self.description = description\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.project_id is not None and self.trace_instance_name is not None\n\n\nclass DeleteTraceInstanceRequest(TLSRequest):\n    def __init__(self, trace_instance_id: str):\n        \"\"\"\n        :param trace_instance_id: Trace实例 ID\n        :type trace_instance_id: str\n        \"\"\"\n        self.trace_instance_id = trace_instance_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.trace_instance_id is not None\n\n\nclass ModifyTraceInstanceRequest(TLSRequest):\n    def __init__(self, trace_instance_id: str, description: str = None):\n        \"\"\"\n        :param trace_instance_id: Trace实例 ID\n        :type trace_instance_id: str\n        :param description: Trace实例描述信息：不支持<>、'、、；长度为0-64个字符\n        :type description: str\n        \"\"\"\n        self.trace_instance_id = trace_instance_id\n        self.description = description\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.trace_instance_id is not None\n\n\nclass DescribeTraceInstanceRequest(TLSRequest):\n    def __init__(self, trace_instance_id: str):\n        \"\"\"\n        :param trace_instance_id: Trace实例 ID\n        :type trace_instance_id: str\n        \"\"\"\n        self.trace_instance_id = trace_instance_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.trace_instance_id is not None\n\n\nclass DescribeTraceInstancesRequest(TLSRequest):\n    def __init__(self, page_number: int = 1, page_size: int = 20, trace_instance_name: str = None,\n                 trace_instance_id: str = None, project_id: str = None, project_name: str = None,\n                 status: str = None, iam_project_name: str = None):\n        \"\"\"\n        :param page_number: 分页，默认从1开始\n        :type page_number: int\n        :param page_size: 分页大小限制，默认为20，最大为100\n        :type page_size: int\n        :param trace_instance_name: Trace实例名称，作为模糊查询使用。TraceInstanceName和TraceInstanceId只能提供一个\n        :type trace_instance_name: str\n        :param trace_instance_id: Trace实例ID，作为模糊查询使用\n        :type trace_instance_id: str\n        :param project_id: 日志项目ID\n        :type project_id: str\n        :param project_name: 日志项目名称\n        :type project_name: str\n        :param status: Trace实例的状态\n        :type status: str\n        :param iam_project_name: IAM日志项目名称\n        :type iam_project_name: str\n        \"\"\"\n        self.page_number = page_number\n        self.page_size = page_size\n        self.trace_instance_name = trace_instance_name\n        self.trace_instance_id = trace_instance_id\n        self.project_id = project_id\n        self.project_name = project_name\n        self.status = status\n        self.iam_project_name = iam_project_name\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return True\n\n\nclass GetAccountStatusRequest(TLSRequest):\n    def __init__(self):\n        \"\"\"\n        GetAccountStatus 请求参数定义\n        \"\"\"\n        pass\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return True\n\n\nclass DescribeTraceRequest(TLSRequest):\n    def __init__(self, trace_id: str, trace_instance_id: str):\n        \"\"\"\n        :param trace_id: Trace ID\n        :type trace_id: str\n        :param trace_instance_id: Trace 实例 ID\n        :type trace_instance_id: str\n        \"\"\"\n        self.trace_id = trace_id\n        self.trace_instance_id = trace_instance_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.trace_id is not None and self.trace_instance_id is not None\n\n\nclass SearchTracesRequest(TLSRequest):\n    def __init__(self, trace_instance_id: str, query: dict = None):\n        \"\"\"\n        :param trace_instance_id: Trace 实例 ID\n        :type trace_instance_id: str\n        :param query: 查询条件，包含分页、过滤等信息\n        :type query: dict\n        \"\"\"\n        self.trace_instance_id = trace_instance_id\n        # 始终使用字典表示查询条件，便于在请求体中直接序列化\n        self.query = query or {}\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.trace_instance_id is not None\n\n\nclass ModifyAlarmWebhookIntegrationRequest(TLSRequest):\n    def __init__(self, webhook_id: str, webhook_name: str, webhook_type: str,\n                 webhook_url: str, webhook_method: str = None,\n                 webhook_headers: List['GeneralWebhookHeaderKV'] = None,\n                 webhook_secret: str = None):\n        \"\"\"\n        :param webhook_id: 告警 Webhook 集成配置 ID\n        :type webhook_id: str\n        :param webhook_name: Webhook 集成配置名称\n        :type webhook_name: str\n        :param webhook_type: Webhook 类型。GeneralWebhook：自定义 Webhook；Lark：飞书；DingTalk：钉钉；WeChat：企业微信\n        :type webhook_type: str\n        :param webhook_url: Webhook 请求地址\n        :type webhook_url: str\n        :param webhook_method: 自定义 Webhook 请求方法，仅支持 POST、PUT\n        :type webhook_method: str\n        :param webhook_headers: 自定义 Webhook 的请求头，WebhookType 为 GeneralWebhook 时必填\n        :type webhook_headers: List[GeneralWebhookHeaderKV]\n        :param webhook_secret: Webhook 加密密钥\n        :type webhook_secret: str\n        \"\"\"\n        self.webhook_id = webhook_id\n        self.webhook_name = webhook_name\n        self.webhook_type = webhook_type\n        self.webhook_url = webhook_url\n        self.webhook_method = webhook_method\n        self.webhook_headers = webhook_headers\n        self.webhook_secret = webhook_secret\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if not self.webhook_id or not self.webhook_name or not self.webhook_type or not self.webhook_url:\n            return False\n\n        # 当 WebhookType 为 GeneralWebhook 时，WebhookMethod 和 WebhookHeaders 必填\n        if self.webhook_type == \"GeneralWebhook\":\n            if not self.webhook_method or not self.webhook_headers:\n                return False\n\n        return True\n\n    def get_api_input(self):\n        body = super(ModifyAlarmWebhookIntegrationRequest, self).get_api_input()\n\n        # 适配字段命名：WebhookId -> WebhookID\n        if \"WebhookId\" in body:\n            body[WEBHOOK_ID] = body.pop(\"WebhookId\")\n\n        if self.webhook_headers is not None:\n            body[WEBHOOK_HEADERS] = []\n            for header in self.webhook_headers:\n                header_dict = {}\n                if header.key is not None:\n                    header_dict[KEY] = header.key\n                if header.value is not None:\n                    header_dict[VALUE] = header.value\n                body[WEBHOOK_HEADERS].append(header_dict)\n\n        return body\n\n\nclass CreateAlarmWebhookIntegrationRequest(TLSRequest):\n    def __init__(self, webhook_name: str, webhook_type: str, webhook_url: str,\n                 webhook_method: str = None, webhook_headers: List['GeneralWebhookHeaderKV'] = None,\n                 webhook_secret: str = None):\n        \"\"\"\n        :param webhook_name: Webhook 集成配置名称。命名规则请参考资源命名规则\n        :type webhook_name: str\n        :param webhook_type: Webhook 类型。GeneralWebhook：自定义 Webhook 地址。\n                             Lark：飞书。DingTalk：钉钉。WeChat：企业微信\n        :type webhook_type: str\n        :param webhook_url: Webhook 请求地址\n        :type webhook_url: str\n        :param webhook_method: 自定义 Webhook 请求方法，仅支持 POST、PUT\n        :type webhook_method: str\n        :param webhook_headers: 自定义 Webhook 的请求头。\n                                设置 WebhookType 为 GeneralWebhook 时，必填\n        :type webhook_headers: List[GeneralWebhookHeaderKV]\n        :param webhook_secret: Webhook 加密密钥。\n                               设置 WebhookType 为 Lark，且在飞书机器人中设置安全设置为签名校验时，\n                               需在此处输入飞书机器人的签名密钥。\n                               设置 WebhookType 为 DingTalk，且在钉钉机器人中设置了签名值时，\n                               需在此处输入钉钉机器人的签名值\n        :type webhook_secret: str\n        \"\"\"\n        self.webhook_name = webhook_name\n        self.webhook_type = webhook_type\n        self.webhook_url = webhook_url\n        self.webhook_method = webhook_method\n        self.webhook_headers = webhook_headers\n        self.webhook_secret = webhook_secret\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if not self.webhook_name or not self.webhook_type or not self.webhook_url:\n            return False\n\n        # 当 WebhookType 为 GeneralWebhook 时，WebhookMethod 和 WebhookHeaders 必填\n        if self.webhook_type == \"GeneralWebhook\":\n            if not self.webhook_method or not self.webhook_headers:\n                return False\n\n        return True\n\n    def get_api_input(self):\n        body = super(CreateAlarmWebhookIntegrationRequest, self).get_api_input()\n\n        if self.webhook_headers is not None:\n            body[WEBHOOK_HEADERS] = []\n            for header in self.webhook_headers:\n                header_dict = {}\n                if header.key is not None:\n                    header_dict[KEY] = header.key\n                if header.value is not None:\n                    header_dict[VALUE] = header.value\n                body[WEBHOOK_HEADERS].append(header_dict)\n\n        return body\n\n\nclass DeleteAlarmWebhookIntegrationRequest(TLSRequest):\n    def __init__(self, webhook_id: str):\n        \"\"\"\n        :param webhook_id: 告警 Webhook 集成配置的 ID\n        :type webhook_id: str\n        \"\"\"\n        self.webhook_id = webhook_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.webhook_id is not None\n\n    def get_api_input(self):\n        body = super(DeleteAlarmWebhookIntegrationRequest, self).get_api_input()\n        # 适配字段命名：WebhookId -> WebhookID\n        if \"WebhookId\" in body:\n            body[WEBHOOK_ID] = body.pop(\"WebhookId\")\n        return body\n\n\n\nclass DeleteAlarmContentTemplateRequest(TLSRequest):\n    def __init__(self, alarm_content_template_id: str):\n        \"\"\"\n        :param alarm_content_template_id: 告警通知内容模板的 ID\n        :type alarm_content_template_id: str\n        \"\"\"\n        self.alarm_content_template_id = alarm_content_template_id\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.alarm_content_template_id is not None\n\n\nclass ModifyAlarmContentTemplateRequest(TLSRequest):\n    def __init__(\n            self,\n            alarm_content_template_id: str,\n            alarm_content_template_name: str,\n            ding_talk_content_template: \"DingTalkContentTemplateInfo\" = None,\n            email_content_template: \"EmailContentTemplateInfo\" = None,\n            lark_content_template: \"LarkContentTemplateInfo\" = None,\n            sms_content_template: \"SmsContentTemplateInfo\" = None,\n            vms_content_template: \"VmsContentTemplateInfo\" = None,\n            we_chat_content_template: \"WeChatContentTemplateInfo\" = None,\n            webhook_content_template: \"WebhookContentTemplateInfo\" = None,\n            need_valid_content: bool = None,\n    ):\n        \"\"\"修改告警通知内容模板\n\n        :param alarm_content_template_id: 告警通知内容模板 ID\n        :param alarm_content_template_name: 告警通知内容模板名称\n        :param ding_talk_content_template: 钉钉通知内容模板\n        :param email_content_template: 邮件通知内容模板\n        :param lark_content_template: 飞书通知内容模板\n        :param sms_content_template: 短信通知内容模板\n        :param vms_content_template: 语音通知内容模板\n        :param we_chat_content_template: 企业微信通知内容模板\n        :param webhook_content_template: 自定义 Webhook 通知内容模板\n        :param need_valid_content: 是否需要校验内容模板\n        \"\"\"\n        self.alarm_content_template_id = alarm_content_template_id\n        self.alarm_content_template_name = alarm_content_template_name\n        self.ding_talk_content_template = ding_talk_content_template\n        self.email_content_template = email_content_template\n        self.lark_content_template = lark_content_template\n        self.sms_content_template = sms_content_template\n        self.vms_content_template = vms_content_template\n        self.we_chat_content_template = we_chat_content_template\n        self.webhook_content_template = webhook_content_template\n        self.need_valid_content = need_valid_content\n\n    def check_validation(self):\n        \"\"\"校验必填参数合法性\"\"\"\n        return bool(self.alarm_content_template_id) and bool(self.alarm_content_template_name)\n\n    def get_api_input(self):\n        \"\"\"构造 API 入参\n\n        对齐服务端 alarm_content_template.ModifyReq 结构：\n        - AlarmContentTemplateId / AlarmContentTemplateName 直接使用 snake_to_pascal 转换结果；\n        - DingTalk/Email/Lark/Sms/Vms/WeChat/Webhook 需展开为对应内容模板的 JSON；\n        - NeedValidContent 直接透传。\n        \"\"\"\n        body = super(ModifyAlarmContentTemplateRequest, self).get_api_input()\n\n        # 移除自动生成的 *ContentTemplate 字段，统一映射为服务端定义字段\n        for key in (\n                DING_TALK_CONTENT_TEMPLATE,\n                EMAIL_CONTENT_TEMPLATE,\n                LARK_CONTENT_TEMPLATE,\n                SMS_CONTENT_TEMPLATE,\n                VMS_CONTENT_TEMPLATE,\n                WE_CHAT_CONTENT_TEMPLATE,\n                WEBHOOK_CONTENT_TEMPLATE,\n        ):\n            if key in body:\n                del body[key]\n\n        if self.ding_talk_content_template is not None:\n            body[DING_TALK] = self.ding_talk_content_template.json()\n\n        if self.email_content_template is not None:\n            body[EMAIL] = self.email_content_template.json()\n\n        if self.lark_content_template is not None:\n            body[LARK] = self.lark_content_template.json()\n\n        if self.sms_content_template is not None:\n            body[\"Sms\"] = self.sms_content_template.json()\n\n        if self.vms_content_template is not None:\n            body[VMS] = self.vms_content_template.json()\n\n        if self.we_chat_content_template is not None:\n            body[WE_CHAT] = self.we_chat_content_template.json()\n\n        if self.webhook_content_template is not None:\n            body[WEBHOOK] = self.webhook_content_template.json()\n\n        return body\n\n\nclass CreateETLTaskRequest(TLSRequest):\n    def __init__(self, dsl_type: str, name: str, source_topic_id: str, script: str, target_resources: list,\n                 task_type: str = \"Resident\", enable: bool = True, description: str = None,\n                 from_time: int = None, to_time: int = None):\n        \"\"\"\n        :param dsl_type: DSL类型，固定为NORMAL\n        :type dsl_type: str\n        :param name: 数据加工任务的名称\n        :type name: str\n        :param source_topic_id: 待加工数据的源日志主题ID\n        :type source_topic_id: str\n        :param script: 数据加工规则\n        :type script: str\n        :param target_resources: 输出目标的相关信息数组\n        :type target_resources: list\n        :param task_type: 任务类型，固定为Resident（常驻任务）\n        :type task_type: str\n        :param enable: 是否启用该数据加工任务，true表示启用，false表示关闭\n        :type enable: bool\n        :param description: 数据加工任务的描述信息\n        :type description: str\n        :param from_time: 待加工数据的起始时间戳（Unix时间戳）\n        :type from_time: int\n        :param to_time: 待加工数据的结束时间戳（Unix时间戳）\n        :type to_time: int\n        \"\"\"\n        self.dsl_type = dsl_type\n        self.name = name\n        self.source_topic_id = source_topic_id\n        self.script = script\n        self.target_resources = target_resources\n        self.task_type = task_type\n        self.enable = enable\n        self.description = description\n        self.from_time = from_time\n        self.to_time = to_time\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if (self.dsl_type is None or self.name is None or self.source_topic_id is None or\n                self.script is None or self.target_resources is None or self.task_type is None or\n                self.enable is None):\n            return False\n\n        # 验证 target_resources 格式（仅做基础结构校验，不做范围与跨账号约束）\n        if not isinstance(self.target_resources, list):\n            return False\n\n        for resource in self.target_resources:\n            if not isinstance(resource, dict):\n                return False\n            if 'alias' not in resource or 'topic_id' not in resource or 'region' not in resource:\n                return False\n\n        return True\n\n    def get_api_input(self):\n        \"\"\"构造 CreateETLTask 请求体\n\n        - 确保 DSL 字段键名为 `DSLType`（而非默认的 `DslType`）；\n        - 规范化 TargetResources 数组中每个元素的键名为 `Alias` / `TopicId` / `Region` / `RoleTrn`。\n        \"\"\"\n        body = super(CreateETLTaskRequest, self).get_api_input()\n\n        # 修正 DSLType 键名\n        if \"DslType\" in body:\n            body[DSL_TYPE] = body.pop(\"DslType\")\n\n        # 规范化 TargetResources 结构\n        if self.target_resources is not None:\n            normalized_resources = []\n            for resource in self.target_resources:\n                if isinstance(resource, TargetResource):\n                    # 使用数据类的 json() 确保键名为 Alias/TopicId/Region/RoleTrn\n                    normalized_resources.append(resource.json())\n                elif isinstance(resource, dict):\n                    alias = resource.get(\"Alias\") or resource.get(\"alias\")\n                    topic_id = resource.get(\"TopicId\") or resource.get(\"topic_id\")\n                    region = resource.get(\"Region\") or resource.get(\"region\")\n                    role_trn = resource.get(\"RoleTrn\") or resource.get(\"role_trn\")\n\n                    normalized = {}\n                    if alias is not None:\n                        normalized[TARGET_ALIAS] = alias\n                    if topic_id is not None:\n                        normalized[TARGET_TOPIC_ID] = topic_id\n                    if region is not None:\n                        normalized[TARGET_REGION] = region\n                    if role_trn is not None:\n                        normalized[TARGET_ROLE_TRN] = role_trn\n\n                    normalized_resources.append(normalized)\n                else:\n                    # 保持兼容：对非 dict/TargetResource 类型直接透传\n                    normalized_resources.append(resource)\n\n            body[ETL_TARGET_RESOURCES] = normalized_resources\n\n        return body\n\nclass CreateAlarmContentTemplateRequest(TLSRequest):\n    def __init__(self, alarm_content_template_name: str, \n                 ding_talk: 'DingTalkContentTemplateInfo' = None,\n                 email: 'EmailContentTemplateInfo' = None, \n                 lark: 'LarkContentTemplateInfo' = None,\n                 need_valid_content: bool = None, \n                 sms: 'SmsContentTemplateInfo' = None,\n                 vms: 'VmsContentTemplateInfo' = None, \n                 we_chat: 'WeChatContentTemplateInfo' = None,\n                 webhook: 'WebhookContentTemplateInfo' = None):\n        \"\"\"\n        :param alarm_content_template_name: 告警通知内容模版的名称\n        :param ding_talk: 钉钉通知内容模版\n        :param email: 邮件通知内容模版\n        :param lark: 飞书通知内容模版\n        :param need_valid_content: 是否需要校验内容模版\n        :param sms: 短信通知内容模版\n        :param vms: 语音通知内容模版\n        :param we_chat: 企业微信通知内容模版\n        :param webhook: 自定义的 Webhook 告警通知内容模版\n        \"\"\"\n        self.alarm_content_template_name = alarm_content_template_name\n        self.ding_talk = ding_talk\n        self.email = email\n        self.lark = lark\n        self.need_valid_content = need_valid_content\n        self.sms = sms\n        self.vms = vms\n        self.we_chat = we_chat\n        self.webhook = webhook\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.alarm_content_template_name is not None and self.alarm_content_template_name != \"\"\n\n    def get_api_input(self):\n        body = super(CreateAlarmContentTemplateRequest, self).get_api_input()\n\n        if self.ding_talk is not None:\n            body[DING_TALK] = self.ding_talk.json()\n\n        if self.email is not None:\n            body[EMAIL] = self.email.json()\n\n        if self.lark is not None:\n            body[LARK] = self.lark.json()\n\n        if self.sms is not None:\n            body[\"Sms\"] = self.sms.json()\n\n        if self.vms is not None:\n            body[VMS] = self.vms.json()\n\n        if self.we_chat is not None:\n            body[WE_CHAT] = self.we_chat.json()\n\n        if self.webhook is not None:\n            body[WEBHOOK] = self.webhook.json()\n\n        return body\n\nclass ModifyETLTaskStatusRequest(TLSRequest):\n    def __init__(self, task_id: str, enable: bool):\n        \"\"\"\n        :param task_id: 加工任务 ID\n        :type task_id: str\n        :param enable: 是否开启数据加工任务。true：开启。false：不开启\n        :type enable: bool\n        \"\"\"\n        self.task_id = task_id\n        self.enable = enable\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return self.task_id is not None and self.enable is not None\nclass CreateScheduleSqlTaskRequest(TLSRequest):\n    def __init__(self, task_name: str, topic_id: str, dest_topic_id: str, process_start_time: int,\n                 process_time_window: str, query: str, request_cycle: RequestCycle, status: int,\n                 dest_region: str = None, process_end_time: int = None, process_sql_delay: int = None,\n                 description: str = None):\n        \"\"\"\n        :param task_name: 定时SQL分析任务名称\n        :type task_name: str\n        :param topic_id: 待进行定时SQL分析的原始日志所在的日志主题ID\n        :type topic_id: str\n        :param dest_topic_id: 用于存储定时SQL分析结果数据的目标日志主题ID\n        :type dest_topic_id: str\n        :param process_start_time: 调度定时SQL分析任务的开始时间，即创建第一个实例的时间。格式为秒级时间戳\n        :type process_start_time: int\n        :param process_time_window: SQL时间窗口，即定时SQL分析任务运行时，日志检索与分析的时间范围，左闭右开格式。最大24小时，最小1分钟\n        :type process_time_window: str\n        :param query: 定时SQL分析任务定期执行的检索与分析语句，应符合日志服务的检索与分析语法\n        :type query: str\n        :param request_cycle: 定时SQL分析任务的调度周期。调度周期决定每个实例的调度时间\n        :type request_cycle: RequestCycle\n        :param status: 完成任务配置后是否立即启动定时SQL分析任务。0：关闭任务，后续需手动启动任务；1：立即启动\n        :type status: int\n        :param dest_region: 目标日志主题所属地域。默认为当前地域\n        :type dest_region: str, optional\n        :param process_end_time: 调度定时SQL分析任务的结束时间，格式为秒级时间戳。如果不配置，表示持续运行定时SQL分析任务\n        :type process_end_time: int, optional\n        :param process_sql_delay: 每次调度的延迟时间。取值范围为0～120，单位为秒。如果不配置，则表示0，即无延时\n        :type process_sql_delay: int, optional\n        :param description: 定时SQL分析任务的简单描述。不支持<>、'、\\\\、\\\\\\\\；长度范围为0～64个字符\n        :type description: str, optional\n        \"\"\"\n        self.task_name = task_name\n        self.topic_id = topic_id\n        self.dest_topic_id = dest_topic_id\n        self.process_start_time = process_start_time\n        self.process_time_window = process_time_window\n        self.query = query\n        self.request_cycle = request_cycle\n        self.status = status\n        self.dest_region = dest_region\n        self.process_end_time = process_end_time\n        self.process_sql_delay = process_sql_delay\n        self.description = description\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        return (self.task_name is not None and self.topic_id is not None and\n                self.dest_topic_id is not None and self.process_start_time is not None and\n                self.process_time_window is not None and self.query is not None and\n                self.request_cycle is not None and self.status is not None)\n\n    def get_api_input(self):\n        body = super(CreateScheduleSqlTaskRequest, self).get_api_input()\n        # TopicId/DestTopicId 映射到服务端实际定义的 TopicID/DestTopicID\n        if TOPIC_ID in body:\n            body[TOPIC_ID_UPPERCASE] = body.pop(TOPIC_ID)\n        if \"DestTopicId\" in body:\n            body[DEST_TOPIC_ID] = body.pop(\"DestTopicId\")\n        if self.request_cycle is not None:\n            body[REQUEST_CYCLE] = self.request_cycle.json()\n        return body\n\n\nclass ModifyScheduleSqlTaskRequest(TLSRequest):\n    def __init__(self, task_id: str, task_name: str = None, description: str = None, dest_region: str = None,\n                 dest_topic_id: str = None, status: int = None, process_sql_delay: int = None,\n                 process_time_window: str = None, query: str = None, request_cycle: RequestCycle = None):\n        \"\"\"\n        :param task_id: 定时SQL分析任务ID\n        :type task_id: str\n        :param task_name: 定时SQL分析任务名称\n        :type task_name: str\n        :param description: 定时SQL分析任务的简单描述\n        :type description: str\n        :param dest_region: 目标日志主题所属地域\n        :type dest_region: str\n        :param dest_topic_id: 用于存储SQL分析结果数据的目标日志主题ID\n        :type dest_topic_id: str\n        :param status: 完成任务配置后是否立即启动定时SQL分析任务。可选值：0：关闭任务，后续需手动启动任务；1：立即启动\n        :type status: int\n        :param process_sql_delay: 每次调度的延迟时间。取值范围为0～120，单位为秒\n        :type process_sql_delay: int\n        :param process_time_window: SQL时间窗口。定时SQL分析任务运行时，检索与分析日志的时间范围，左闭右开格式\n        :type process_time_window: str\n        :param query: 定时SQL分析任务定期执行的检索与分析语句，应符合日志服务的检索与分析语法\n        :type query: str\n        :param request_cycle: 定时SQL分析任务的调度周期\n        :type request_cycle: RequestCycle\n        \"\"\"\n        self.task_id = task_id\n        self.task_name = task_name\n        self.description = description\n        self.dest_region = dest_region\n        self.dest_topic_id = dest_topic_id\n        self.status = status\n        self.process_sql_delay = process_sql_delay\n        self.process_time_window = process_time_window\n        self.query = query\n        self.request_cycle = request_cycle\n\n    def check_validation(self):\n        \"\"\"\n        :return: 参数是否合法\n        :rtype: bool\n        \"\"\"\n        if self.task_id is None:\n            return False\n        return True\n\n    def get_api_input(self):\n        body = super(ModifyScheduleSqlTaskRequest, self).get_api_input()\n\n        # DestTopicId 映射到服务端实际定义的 DestTopicID\n        if \"DestTopicId\" in body:\n            body[DEST_TOPIC_ID] = body.pop(\"DestTopicId\")\n\n        if self.request_cycle is not None:\n            body[REQUEST_CYCLE] = self.request_cycle.json()\n\n        return body\n\n\nclass DescribeScheduleSqlTasksRequest(TLSRequest):\n    def __init__(self, project_id: str = None, project_name: str = None,\n                 iam_project_name: str = None, topic_id: str = None,\n                 source_topic_name: str = None, task_id: str = None,\n                 task_name: str = None, status: str = None,\n                 page_number: int = 1, page_size: int = 20):\n        \"\"\"\n        :param project_id: 源日志主题所属的日志项目 ID\n        :type project_id: str, optional\n        :param project_name: 源日志主题所属的日志项目名称\n        :type project_name: str, optional\n        :param iam_project_name: IAM 日志项目名称\n        :type iam_project_name: str, optional\n        :param topic_id: 源日志主题 ID\n        :type topic_id: str, optional\n        :param source_topic_name: 源日志主题名称\n        :type source_topic_name: str, optional\n        :param task_id: 定时 SQL 分析任务 ID\n        :type task_id: str, optional\n        :param task_name: 定时 SQL 分析任务名称\n        :type task_name: str, optional\n        :param status: 定时SQL任务的状态\n        :type status: str, optional\n        :param page_number: 分页查询时的页码。默认为 1，即从第一页数据开始返回\n        :type page_number: int, optional\n        :param page_size: 分页大小。默认为 20，最大为 100\n        :type page_size: int, optional\n        \"\"\"\n        self.project_id = project_id\n        self.project_name = project_name\n        self.iam_project_name = iam_project_name\n        self.topic_id = topic_id\n        self.source_topic_name = source_topic_name\n        self.task_id = task_id\n        self.task_name = task_name\n        self.status = status\n        self.page_number = page_number\n        self.page_size = page_size\n\n\nclass DescribeAlarmContentTemplatesRequest(TLSRequest):\n    def __init__(self, alarm_content_template_name: str = None, alarm_content_template_id: str = None,\n                 order_field: str = None, asc: bool = None, page_number: int = None, page_size: int = None):\n        \"\"\"查询告警通知内容模版列表请求\n\n        :param alarm_content_template_name: 告警通知内容模版的名称\n        :type alarm_content_template_name: str\n        :param alarm_content_template_id: 告警通知内容模版 ID\n        :type alarm_content_template_id: str\n        :param order_field: 用于排序的字段\n        :type order_field: str\n        :param asc: 是否升序排列\n        :type asc: bool\n        :param page_number: 分页页码\n        :type page_number: int\n        :param page_size: 页面大小\n        :type page_size: int\n        \"\"\"\n        self.alarm_content_template_name = alarm_content_template_name\n        self.alarm_content_template_id = alarm_content_template_id\n        self.order_field = order_field\n        self.asc = asc\n        self.page_number = page_number\n        self.page_size = page_size\n\n    def check_validation(self):\n        \"\"\"参数校验，目前全部可选，恒为 True\"\"\"\n        return True\n\n    def get_api_input(self):\n        body = super(DescribeAlarmContentTemplatesRequest, self).get_api_input()\n        # 适配排序方向参数：Asc -> \"ASC\"，与服务端 consts.AlarmContentTemplateOrderASC 对齐\n        if \"Asc\" in body:\n            body[\"ASC\"] = body.pop(\"Asc\")\n        return body\n\n\nclass DescribeAlarmWebhookIntegrationsRequest(TLSRequest):\n    def __init__(self, webhook_id: str = None, webhook_name: str = None, webhook_type: str = None,\n                 page_number: int = 1, page_size: int = 20):\n        \"\"\"查询告警 Webhook 集成配置列表请求\n\n        :param webhook_id: Webhook 集成配置的 ID\n        :type webhook_id: str\n        :param webhook_name: Webhook 集成配置名称\n        :type webhook_name: str\n        :param webhook_type: Webhook 集成配置的类型\n        :type webhook_type: str\n        :param page_number: 分页查询时的页码\n        :type page_number: int\n        :param page_size: 分页大小\n        :type page_size: int\n        \"\"\"\n        self.webhook_id = webhook_id\n        self.webhook_name = webhook_name\n        self.webhook_type = webhook_type\n        self.page_number = page_number\n        self.page_size = page_size\n\n    def check_validation(self):\n        \"\"\"参数全部可选，始终视为合法\"\"\"\n        return True\n\n    def get_api_input(self):\n        body = super(DescribeAlarmWebhookIntegrationsRequest, self).get_api_input()\n        # 适配字段命名：WebhookId -> WebhookID\n        if \"WebhookId\" in body:\n            body[WEBHOOK_ID] = body.pop(\"WebhookId\")\n        return body\n\n\nclass ListTagsForResourcesRequest(TLSRequest):\n    def __init__(self, resource_type: str, resources_ids: List[str] = None, tag_filters: List[dict] = None,\n                 max_results: int = None, next_token: str = None):\n        \"\"\"查询资源标签列表请求\n\n        :param resource_type: 资源类型，可选值：project（日志项目）、topic（日志主题）\n        :param resources_ids: 资源 ID 列表，最多 50 个\n        :param tag_filters: 资源标签过滤器\n        :param max_results: 分页大小，默认 20，最大 100\n        :param next_token: 分页查询凭证\n        \"\"\"\n        self.resource_type = resource_type\n        self.resources_ids = resources_ids\n        self.tag_filters = tag_filters\n        self.max_results = max_results\n        self.next_token = next_token\n\n    def check_validation(self):\n        \"\"\"参数校验\"\"\"\n        return self.resource_type is not None\n\n    def get_api_input(self):\n        \"\"\"构造 ListTagsForResources 请求体\n\n        - 顶层键名保持为 ResourceType/ResourcesIds/TagFilters/MaxResults/NextToken；\n        - 规范化 TagFilters 内部结构为 [{\"Key\": ..., \"Values\": [...]}]。\n        \"\"\"\n        body = super(ListTagsForResourcesRequest, self).get_api_input()\n\n        if self.tag_filters is not None:\n            normalized_filters = []\n            for tag_filter in self.tag_filters:\n                if isinstance(tag_filter, dict):\n                    key = tag_filter.get(\"Key\") or tag_filter.get(\"key\")\n                    values = tag_filter.get(\"Values\") or tag_filter.get(\"values\")\n\n                    filter_body = {}\n                    if key is not None:\n                        filter_body[\"Key\"] = key\n                    if values is not None:\n                        filter_body[\"Values\"] = values\n\n                    normalized_filters.append(filter_body)\n                else:\n                    # 保持兼容：非 dict 类型直接透传\n                    normalized_filters.append(tag_filter)\n\n            body[\"TagFilters\"] = normalized_filters\n\n        return body\n"
  },
  {
    "path": "volcengine/tls/tls_responses.py",
    "content": "# coding=utf-8\nfrom __future__ import absolute_import\nfrom __future__ import division\nfrom __future__ import print_function\n\nimport json\nimport struct\n\nfrom volcengine.tls import log_content_patch\nfrom volcengine.tls.util import TLSUtil\n\ntry:\n    import lz4.block as lz4\nexcept ImportError:\n    try:\n        import lz4\n    except ImportError:\n        lz4 = None\n\ntry:\n    import zlib\nexcept ImportError:\n    zlib = None\n\nfrom requests import Response\n\nfrom volcengine.tls.log_pb2 import LogGroupList\nfrom volcengine.tls.data import *\n\n\nclass TLSResponse:\n    def __init__(self, response: Response):\n        self.headers = response.headers\n        self.request_id = response.headers[X_TLS_REQUEST_ID]\n\n        if \"json\" in self.headers[CONTENT_TYPE]:\n            if response.text != \"\":\n                self.response = json.loads(response.text)\n            else:\n                self.response = {}\n        else:\n            self.response = {DATA: response.content}\n\n    def get_headers(self):\n        \"\"\"\n        :return: 请求headers\n        :rtype: dict\n        \"\"\"\n        return self.headers\n\n    def get_request_id(self):\n        \"\"\"\n        :return: tls请求id\n        :rtype: str\n        \"\"\"\n        return self.request_id\n\n    @staticmethod\n    def _get_host_group_hosts_rules_info(host_group_hosts_rules_info) -> HostGroupHostsRulesInfo:\n        host_group_hosts_rules_info[HOST_GROUP_INFO] = \\\n            HostGroupInfo.set_attributes(data=host_group_hosts_rules_info[HOST_GROUP_INFO])\n        host_group_info = host_group_hosts_rules_info[HOST_GROUP_INFO]\n\n        host_infos = []\n        for i in range(len(host_group_hosts_rules_info[HOST_INFOS])):\n            host_infos.append((HostInfo.set_attributes(data=host_group_hosts_rules_info[HOST_INFOS][i])))\n\n        rule_infos = []\n        for i in range(len(host_group_hosts_rules_info[RULE_INFOS])):\n            rule_infos.append(RuleInfo.set_attributes(data=host_group_hosts_rules_info[RULE_INFOS][i]))\n\n        return HostGroupHostsRulesInfo(host_group_info, host_infos, rule_infos)\n\n\nclass CreateProjectResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(CreateProjectResponse, self).__init__(response)\n\n        self.project_id = self.response[PROJECT_ID]\n\n    def get_project_id(self):\n        \"\"\"\n        :return:日志项目id\n        :rtype: str\n        \"\"\"\n        return self.project_id\n\n\nclass DeleteProjectResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DeleteProjectResponse, self).__init__(response)\n\n\nclass ModifyProjectResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ModifyProjectResponse, self).__init__(response)\n\n\nclass DescribeProjectResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeProjectResponse, self).__init__(response)\n\n        self.project = ProjectInfo.set_attributes(data=self.response)\n\n    def get_project(self):\n        \"\"\"\n        :return: 日志项目\n        :rtype: ProjectInfo\n        \"\"\"\n        return self.project\n\n\nclass DescribeProjectsResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeProjectsResponse, self).__init__(response)\n\n        self.total = self.response[TOTAL]\n        self.projects = []\n        projects = self.response[PROJECTS]\n\n        for i in range(len(projects)):\n            self.projects.append(ProjectInfo.set_attributes(data=projects[i]))\n\n    def get_total(self):\n        \"\"\"\n        :return: project总数\n        :rtype: int\n        \"\"\"\n        return self.total\n\n    def get_projects(self):\n        \"\"\"\n        :return: 日志项目列表\n        :rtype: List[ProjectInfo]\n        \"\"\"\n        return self.projects\n\n\nclass CreateTopicResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(CreateTopicResponse, self).__init__(response)\n\n        self.topic_id = self.response[TOPIC_ID]\n\n    def get_topic_id(self):\n        \"\"\"\n        :return: 日志主题 ID\n        :rtype: str\n        \"\"\"\n        return self.topic_id\n\n\nclass DeleteTopicResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DeleteTopicResponse, self).__init__(response)\n\n\nclass ModifyTopicResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ModifyTopicResponse, self).__init__(response)\n\n\nclass DescribeTopicResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeTopicResponse, self).__init__(response)\n\n        self.topic = TopicInfo.set_attributes(data=self.response)\n\n    def get_topic(self):\n        \"\"\"\n        :return: 日志主题\n        :rtype: TopicInfo\n        \"\"\"\n        return self.topic\n\n\nclass DescribeTopicsResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeTopicsResponse, self).__init__(response)\n\n        self.total = self.response[TOTAL]\n        topics = self.response[TOPICS]\n        self.topics = []\n\n        for i in range(len(topics)):\n            self.topics.append(TopicInfo.set_attributes(data=topics[i]))\n\n    def get_total(self):\n        \"\"\"\n        :return: topic总数\n        :rtype: int\n        \"\"\"\n        return self.total\n\n    def get_topics(self):\n        \"\"\"\n        :return: topic列表\n        :rtype: List[TopicInfo]\n        \"\"\"\n        return self.topics\n\n\nclass CreateIndexResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(CreateIndexResponse, self).__init__(response)\n\n        self.topic_id = self.response[TOPIC_ID]\n\n\nclass DeleteIndexResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DeleteIndexResponse, self).__init__(response)\n\n\nclass ModifyIndexResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ModifyIndexResponse, self).__init__(response)\n\n\nclass DescribeIndexResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeIndexResponse, self).__init__(response)\n\n        self.full_text = FullTextInfo()\n        if self.response[FULL_TEXT] is not None:\n            self.full_text = FullTextInfo.set_attributes(data=self.response[FULL_TEXT])\n            self.full_text.delimiter = TLSUtil.replace_white_space_character(self.full_text.delimiter)\n\n        self.key_value = []\n        key_value = self.response[KEY_VALUE]\n        for i in range(len(key_value)):\n            self.key_value.append(KeyValueInfo(key=key_value[i][KEY],\n                                               value=ValueInfo.set_attributes(data=key_value[i][VALUE])))\n            self.key_value[i].value.delimiter = TLSUtil.replace_white_space_character(self.key_value[i].value.delimiter)\n\n        self.user_inner_key_value = []\n        user_inner_key_value = self.response[USER_INNER_KEY_VALUE]\n        for i in range(len(user_inner_key_value)):\n            self.user_inner_key_value.append(KeyValueInfo(key=user_inner_key_value[i][KEY],\n                                                          value=ValueInfo.set_attributes(data=user_inner_key_value[i][VALUE])))\n            self.user_inner_key_value[i].value.delimiter = TLSUtil.replace_white_space_character(self.user_inner_key_value[i].value.delimiter)\n\n        self.create_time = self.response[CREATE_TIME]\n        self.modify_time = self.response[MODIFY_TIME]\n        self.enable_auto_index = self.response.get(ENABLE_AUTO_INDEX, False)\n        self.enable_phrase_index = self.response.get(ENABLE_PHRASE_INDEX, False)\n        self.max_text_len = self.response.get(MAX_TEXT_LEN, 2048)\n\n    def get_create_time(self):\n        \"\"\"\n        :return: 创建时间\n        :rtype: str\n        \"\"\"\n        return self.create_time\n\n    def get_full_text(self):\n        \"\"\"\n        :return: 全文索引配置\n        :rtype: FullTextInfo\n        \"\"\"\n        return self.full_text\n\n    def get_modify_time(self):\n        \"\"\"\n         :return: 修改时间\n         :rtype: str\n         \"\"\"\n        return self.modify_time\n\n    def get_key_value(self):\n        \"\"\"\n        :return: 键值索引配置\n        :rtype: List[KeyValueInfo]\n        \"\"\"\n        return self.key_value\n\n    def get_user_inner_key_value(self):\n        \"\"\"\n        :return: 预留字段索引配置\n        :rtype: List[KeyValueInfo]\n        \"\"\"\n        return self.user_inner_key_value\n\n    def get_enable_auto_index(self):\n        \"\"\"\n        :return: 是否开启索引自动更新\n        :rtype: bool\n        \"\"\"\n        return self.enable_auto_index\n\n    def get_enable_phrase_index(self):\n        \"\"\"\n        :return: 是否开启索引版短语查询\n        :rtype: bool\n        \"\"\"\n        return self.enable_phrase_index\n\n    def get_max_text_len(self):\n        \"\"\"\n        :return: 统计字段值的最大长度\n        :rtype: int\n        \"\"\"\n        return self.max_text_len\n\n\nclass CreateProcessorResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(CreateProcessorResponse, self).__init__(response)\n        self.processor_id = self.response[PROCESSOR_ID_HUMP]\n\n    def get_processor_id(self):\n        return self.processor_id\n\n\nclass DeleteProcessorResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DeleteProcessorResponse, self).__init__(response)\n\n\nclass ModifyProcessorResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ModifyProcessorResponse, self).__init__(response)\n\n\nclass DescribeProcessorResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeProcessorResponse, self).__init__(response)\n        self.processor = ProcessorInfo.set_attributes(self.response)\n\n    def get_processor(self):\n        return self.processor\n\n\nclass DescribeProcessorsResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeProcessorsResponse, self).__init__(response)\n        self.total = self.response[TOTAL]\n        self.items = [\n            ProcessorInfo.set_attributes(item)\n            for item in self.response.get(ITEMS, [])\n        ]\n\n    def get_total(self):\n        return self.total\n\n    def get_items(self):\n        return self.items\n\n\nclass ExecProcessorResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ExecProcessorResponse, self).__init__(response)\n        self.exec_status = self.response.get(EXEC_STATUS)\n        self.processed_log = self.response.get(PROCESSED_LOG)\n        self.error = self.response.get(ERROR)\n\n    def get_exec_status(self):\n        return self.exec_status\n\n    def get_processed_log(self):\n        return self.processed_log\n\n    def get_error(self):\n        return self.error\n\n\nclass OperateProcessorResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(OperateProcessorResponse, self).__init__(response)\n\n\nclass DescribeTopicsByProcessorResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeTopicsByProcessorResponse, self).__init__(response)\n        self.total = self.response[TOTAL]\n        self.items = [\n            ProcessorTopicInfo.set_attributes(item)\n            for item in self.response.get(ITEMS, [])\n        ]\n\n    def get_total(self):\n        return self.total\n\n    def get_items(self):\n        return self.items\n\n\nclass BindTopicProcessorResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(BindTopicProcessorResponse, self).__init__(response)\n\n\nclass BatchBindTopicsResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(BatchBindTopicsResponse, self).__init__(response)\n\n\nclass UnbindTopicProcessorResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(UnbindTopicProcessorResponse, self).__init__(response)\n\n\nclass DescribeProcessorBindingsResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeProcessorBindingsResponse, self).__init__(response)\n        self.total = self.response[TOTAL]\n        self.items = [\n            ProcessorBinding.set_attributes(item)\n            for item in self.response.get(ITEMS, [])\n        ]\n\n    def get_total(self):\n        return self.total\n\n    def get_items(self):\n        return self.items\n\n\nclass DescribeProcessorFunctionsResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeProcessorFunctionsResponse, self).__init__(response)\n        self.functions = {}\n        for group, functions in self.response.get(FUNCTIONS, {}).items():\n            self.functions[group] = [\n                ProcessorFunctionInfo.set_attributes(function)\n                for function in functions\n            ]\n\n    def get_functions(self):\n        return self.functions\n\n\nclass PutLogsResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(PutLogsResponse, self).__init__(response)\n\n\nclass DescribeCursorResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeCursorResponse, self).__init__(response)\n\n        self.cursor = self.response[CURSOR]\n\n    def get_cursor(self):\n        \"\"\"\n        :return: 游标\n        :rtype: str\n        \"\"\"\n        return self.cursor\n\n\nclass ConsumeLogsResponse(TLSResponse):\n    def __init__(self, response: Response, compression: str):\n        super(ConsumeLogsResponse, self).__init__(response)\n\n        self.x_tls_cursor = self.headers[X_TLS_CURSOR]\n        self.x_tls_count = int(self.headers[X_TLS_COUNT])\n        self.pb_message = None\n\n        if DATA in self.response:\n            pb_message = self.response[DATA]\n            if compression == LZ4:\n                pb_message = lz4.decompress(struct.pack('<I', int(self.headers[X_TLS_BODYRAWSIZE])) + pb_message)\n            if compression == ZLIB:\n                pb_message = zlib.decompress(pb_message)\n\n            self.pb_message = LogGroupList()\n            try:\n                self.pb_message.ParseFromString(pb_message)\n            except Exception as e:\n                log_content_patch.ParseLogGroupListFromString(self.pb_message, pb_message)\n\n    def get_x_tls_count(self):\n        \"\"\"\n\n        :return: 本次读取的 logGroup 数量\n        :rtype: int\n        \"\"\"\n        return self.x_tls_count\n\n    def get_pb_message(self):\n        \"\"\"\n\n        :return:日志数据\n        :rtype:LogGroupList\n        \"\"\"\n        return self.pb_message\n\n    def get_x_tls_cursor(self):\n        \"\"\"\n        :return: 当前读取数据下一条 Cursor\n        :rtype: str\n        \"\"\"\n        return self.x_tls_cursor\n\n\nclass SearchLogsResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(SearchLogsResponse, self).__init__(response)\n\n        self.search_result = SearchResult.set_attributes(data=self.response)\n\n    def get_search_result(self):\n        \"\"\"\n        :return: 搜索结果\n        :rtype: SearchResult\n        \"\"\"\n        return self.search_result\n\n\nclass DescribeLogContextResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeLogContextResponse, self).__init__(response)\n\n        self.log_context_infos = self.response[LOG_CONTEXT_INFOS]\n        self.prev_over = self.response[PREV_OVER]\n        self.next_over = self.response[NEXT_OVER]\n\n    def get_prev_over(self):\n        \"\"\"\n        :return:除 LogContextInfos 中的日志以外，是否还存在其他上文\n        :rtype:bool\n        \"\"\"\n        return self.prev_over\n\n    def get_log_context_infos(self):\n        \"\"\"\n        :return:日志的上下文日志信息\n        :rtype:List[dict]\n        \"\"\"\n        return self.log_context_infos\n\n    def get_next_over(self):\n        \"\"\"\n        :return:除 LogContextInfos 中的日志以外，是否还存在其他下文\n        :rtype:bool\n        \"\"\"\n        return self.next_over\n\n\nclass WebTracksResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(WebTracksResponse, self).__init__(response)\n\n\nclass DescribeHistogramResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeHistogramResponse, self).__init__(response)\n\n        self.result_status = self.response[RESULT_STATUS]\n        self.interval = self.response[INTERVAL]\n        self.total_count = self.response[TOTAL_COUNT]\n        self.histogram = []\n        histogram = self.response[HISTOGRAM]\n\n        for i in range(len(histogram)):\n            self.histogram.append(HistogramInfo.set_attributes(data=histogram[i]))\n\n    def get_histogram(self):\n        \"\"\"\n        :return:所有子区间的结果集\n        :rtype:List[HistogramInfo]\n        \"\"\"\n        return self.histogram\n\n    def get_result_status(self):\n        \"\"\"\n        :return:查询的状态\n        :rtype:str\n        \"\"\"\n        return self.result_status\n\n    def get_total_count(self):\n        \"\"\"\n        :return:请求所有直方图数据总和\n        :rtype:int\n        \"\"\"\n        return self.total_count\n\n    def get_interval(self):\n        \"\"\"\n        :return:直方图的子区间长度\n        :rtype:int\n        \"\"\"\n        return self.interval\n\nclass DescribeHistogramV1Response(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeHistogramV1Response, self).__init__(response)\n\n        self.histogram = []\n        self.result_status = self.response[RESULT_STATUS]\n        self.total_count = self.response[TOTAL_COUNT]\n\n        histogram = self.response[HISTOGRAM]\n\n        for i in range(len(histogram)):\n            self.histogram.append(HistogramInfoV1.set_attributes(data=histogram[i]))\n\n    def get_histogram(self):\n        \"\"\"\n        :return:所有子区间的结果集\n        :rtype:List[HistogramInfo]\n        \"\"\"\n        return self.histogram\n\n    def get_result_status(self):\n        \"\"\"\n        :return:查询的状态\n        :rtype:str\n        \"\"\"\n        return self.result_status\n\n    def get_total_count(self):\n        \"\"\"\n        :return:请求所有直方图数据总和\n        :rtype:int\n        \"\"\"\n        return self.total_count\n\nclass CreateDownloadTaskResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(CreateDownloadTaskResponse, self).__init__(response)\n\n        self.task_id = self.response[TASK_ID]\n\n    def get_task_id(self):\n        \"\"\"\n        :return: 下载任务id\n        :rtype: str\n        \"\"\"\n        return self.task_id\n\n\nclass DescribeDownloadTasksResponse(TLSResponse):\n    def __init__(self, response):\n        super(DescribeDownloadTasksResponse, self).__init__(response)\n\n        self.total = self.response[TOTAL]\n        self.tasks = []\n        tasks = self.response[TASKS]\n\n        for i in range(len(tasks)):\n            self.tasks.append(TaskInfo.set_attributes(data=tasks[i]))\n\n    def get_total(self):\n        \"\"\"\n        :return: 下载任务总数\n        :rtype:int\n        \"\"\"\n        return self.total\n\n    def get_tasks(self):\n        \"\"\"\n        :return:下载任务列表\n        :rtype: List[TaskInfo]\n        \"\"\"\n        return self.tasks\n\n\nclass DescribeDownloadUrlResponse(TLSResponse):\n    def __init__(self, response):\n        super(DescribeDownloadUrlResponse, self).__init__(response)\n\n        self.download_url = self.response[DOWNLOAD_URL]\n\n    def get_download_url(self):\n        \"\"\"\n        :return:下载文件链接\n        :rtype: str\n        \"\"\"\n        return self.download_url\n\n\nclass DescribeShardsResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeShardsResponse, self).__init__(response)\n\n        self.total = self.response[TOTAL]\n        self.shards = []\n        shards = self.response[SHARDS]\n\n        for i in range(len(shards)):\n            self.shards.append(QueryResp.set_attributes(data=shards[i]))\n\n    def get_shards(self):\n        \"\"\"\n        :return:shard列表\n        :rtype: List[QueryResp]\n        \"\"\"\n        return self.shards\n\n    def get_total(self):\n        \"\"\"\n        :return:shard总数\n        :rtype: int\n        \"\"\"\n        return self.total\n\n\nclass ManualShardSplitResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ManualShardSplitResponse, self).__init__(response)\n\n        self.shards = []\n        shards = self.response[SHARDS]\n\n        for shard in shards:\n            self.shards.append(QueryResp.set_attributes(data=shard))\n\n    def get_shards(self):\n        \"\"\"\n        :return: 日志分区的范围等详细信息\n        :rtype: List[QueryResp]\n        \"\"\"\n        return self.shards\n\n\nclass CreateHostGroupResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(CreateHostGroupResponse, self).__init__(response)\n\n        self.host_group_id = self.response[HOST_GROUP_ID]\n\n    def get_host_group_id(self):\n        \"\"\"\n        :return:机器组id\n        :rtype: str\n        \"\"\"\n        return self.host_group_id\n\n\nclass DeleteHostGroupResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DeleteHostGroupResponse, self).__init__(response)\n\n\nclass ModifyHostGroupResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ModifyHostGroupResponse, self).__init__(response)\n\n\nclass DescribeHostGroupResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeHostGroupResponse, self).__init__(response)\n\n        self.host_group_hosts_rules_info = \\\n            DescribeHostGroupResponse._get_host_group_hosts_rules_info(self.response[HOST_GROUP_HOSTS_RULES_INFO])\n        self.response[HOST_GROUP_HOSTS_RULES_INFO] = self.host_group_hosts_rules_info\n\n    def get_host_group_hosts_rules_info(self):\n        \"\"\"\n        :return:机器组详细信息\n        :rtype:HostGroupHostsRulesInfo\n        \"\"\"\n        return self.host_group_hosts_rules_info\n\n\nclass DescribeHostGroupsResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeHostGroupsResponse, self).__init__(response)\n\n        self.total = self.response[TOTAL]\n        self.host_group_hosts_rules_infos = []\n        host_group_hosts_rules_infos = self.response[HOST_GROUP_HOSTS_RULES_INFOS]\n\n        for i in range(len(host_group_hosts_rules_infos)):\n            self.host_group_hosts_rules_infos.append(\n                DescribeHostGroupsResponse._get_host_group_hosts_rules_info(host_group_hosts_rules_infos[i]))\n\n    def get_total(self):\n        \"\"\"\n        :return:机器组总数\n        :rtype: int\n        \"\"\"\n        return self.total\n\n    def get_host_group_hosts_rules_infos(self):\n        \"\"\"\n        :return:机器组列表\n        :rtype: List[HostGroupHostsRulesInfo]\n        \"\"\"\n        return self.host_group_hosts_rules_infos\n\n\nclass ModifyHostGroupsAutoUpdateResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ModifyHostGroupsAutoUpdateResponse, self).__init__(response)\n\n\nclass DescribeHostsResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeHostsResponse, self).__init__(response)\n\n        self.total = self.response[TOTAL]\n        self.host_infos = []\n\n        for i in range(len(self.response[HOST_INFOS])):\n            self.host_infos.append(HostInfo.set_attributes(data=self.response[HOST_INFOS][i]))\n\n    def get_total(self):\n        \"\"\"\n        :return:host总数\n        :rtype: int\n        \"\"\"\n        return self.total\n\n    def get_host_infos(self):\n        \"\"\"\n        :return:host列表\n        :rtype: List[HostInfo]\n        \"\"\"\n        return self.host_infos\n\n\nclass DeleteHostResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DeleteHostResponse, self).__init__(response)\n\n\nclass DescribeHostGroupRulesResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeHostGroupRulesResponse, self).__init__(response)\n\n        self.total = self.response[TOTAL]\n        self.rule_infos = []\n        for i in range(len(self.response[RULE_INFOS])):\n            rule_info = RuleInfo.set_attributes(data=self.response[RULE_INFOS][i])\n            self.rule_infos.append(rule_info)\n\n    def get_total(self):\n        \"\"\"\n        :return:机器组采集配置总数\n        :rtype: int\n        \"\"\"\n        return self.total\n\n    def get_rule_infos(self):\n        \"\"\"\n        :return:采集配置列表\n        :rtype: List[RuleInfo]\n        \"\"\"\n        return self.rule_infos\n\n\nclass DeleteAbnormalHostsResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DeleteAbnormalHostsResponse, self).__init__(response)\n\n\nclass CreateRuleResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(CreateRuleResponse, self).__init__(response)\n\n        self.rule_id = self.response[RULE_ID]\n\n    def get_rule_id(self):\n        \"\"\"\n        :return:采集配置的 ID\n        :rtype:str\n        \"\"\"\n        return self.rule_id\n\n\nclass DeleteRuleResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DeleteRuleResponse, self).__init__(response)\n\n\nclass ModifyRuleResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ModifyRuleResponse, self).__init__(response)\n\n\nclass DescribeRuleResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeRuleResponse, self).__init__(response)\n\n        self.project_id = self.response[PROJECT_ID]\n        self.project_name = self.response[PROJECT_NAME]\n        self.topic_id = self.response[TOPIC_ID]\n        self.topic_name = self.response[TOPIC_NAME]\n        self.rule_info = RuleInfo.set_attributes(data=self.response[RULE_INFO])\n        self.response[RULE_INFO] = self.rule_info\n        self.host_group_infos = []\n\n        for i in range(len(self.response[HOST_GROUP_INFOS])):\n            self.host_group_infos.append(\n                HostGroupInfo.set_attributes(data=self.response[HOST_GROUP_INFOS][i]))\n\n    def get_project_id(self):\n        \"\"\"\n        :return: 日志项目 ID\n        :rtype: str\n        \"\"\"\n        return self.project_id\n\n    def get_rule_info(self):\n        \"\"\"\n        :return: 采集配置\n        :rtype: RuleInfo\n        \"\"\"\n        return self.rule_info\n\n    def get_project_name(self):\n        \"\"\"\n        :return:日志项目的名称\n        :rtype: str\n        \"\"\"\n        return self.project_name\n\n    def get_host_group_infos(self):\n        \"\"\"\n        :return: 机器组列表\n        :rtype: List[HostGroupInfo]\n        \"\"\"\n        return self.host_group_infos\n\n\nclass DescribeRulesResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeRulesResponse, self).__init__(response)\n\n        self.total = self.response[TOTAL]\n        self.rule_infos = []\n\n        for i in range(len(self.response[RULE_INFOS])):\n            self.rule_infos.append(RuleInfo.set_attributes(data=self.response[RULE_INFOS][i]))\n\n    def get_total(self):\n        \"\"\"\n        :return:采集配置总数\n        :rtype: int\n        \"\"\"\n        return self.total\n\n    def get_rule_infos(self):\n        \"\"\"\n        :return:采集配置列表\n        :rtype: List[RuleInfo]\n        \"\"\"\n        return self.rule_infos\n\n\nclass ApplyRuleToHostGroupsResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ApplyRuleToHostGroupsResponse, self).__init__(response)\n\n\nclass DeleteRuleFromHostGroupsResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DeleteRuleFromHostGroupsResponse, self).__init__(response)\n\n\nclass CreateAlarmNotifyGroupResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(CreateAlarmNotifyGroupResponse, self).__init__(response)\n\n        self.alarm_notify_group_id = self.response[ALARM_NOTIFY_GROUP_ID]\n\n    def get_alarm_notify_group_id(self):\n        \"\"\"\n        :return:告警通知组id\n        :rtype: str\n        \"\"\"\n        return self.alarm_notify_group_id\n\n\nclass DeleteAlarmNotifyGroupResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DeleteAlarmNotifyGroupResponse, self).__init__(response)\n\n\nclass ModifyAlarmNotifyGroupResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ModifyAlarmNotifyGroupResponse, self).__init__(response)\n\n\nclass DescribeAlarmNotifyGroupsResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeAlarmNotifyGroupsResponse, self).__init__(response)\n\n        self.total = self.response[TOTAL]\n        self.alarm_notify_groups = []\n\n        if self.response[ALARM_NOTIFY_GROUPS] is None:\n            self.response[ALARM_NOTIFY_GROUPS] = []\n\n        for i in range(len(self.response[ALARM_NOTIFY_GROUPS])):\n            self.alarm_notify_groups.append(AlarmNotifyGroupInfo.set_attributes(\n                data=self.response[ALARM_NOTIFY_GROUPS][i]))\n\n    def get_total(self):\n        \"\"\"\n        :return:告警通知组总数\n        :rtype: int\n        \"\"\"\n        return self.total\n\n    def get_alarm_notify_groups(self):\n        \"\"\"\n        :return:告警通知组列表\n        :rtype: List[AlarmNotifyGroupInfo]\n        \"\"\"\n        return self.alarm_notify_groups\n\n\nclass CreateAlarmResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(CreateAlarmResponse, self).__init__(response)\n\n        self.alarm_id = self.response[ALARM_ID]\n\n    def get_alarm_id(self):\n        \"\"\"\n        :return:告警id\n        :rtype: str\n        \"\"\"\n        return self.alarm_id\n\n\nclass DeleteAlarmResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DeleteAlarmResponse, self).__init__(response)\n\n\nclass ModifyAlarmResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ModifyAlarmResponse, self).__init__(response)\n\n\nclass DescribeAlarmsResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeAlarmsResponse, self).__init__(response)\n\n        self.total = self.response[TOTAL]\n        self.alarms = []\n\n        for i in range(len(self.response[ALARMS])):\n            self.alarms.append(AlarmInfo.set_attributes(data=self.response[ALARMS][i]))\n\n    def get_total(self):\n        \"\"\"\n        :return:告警总数\n        :rtype: int\n        \"\"\"\n        return self.total\n\n    def get_alarms(self):\n        \"\"\"\n        :return:告警列表\n        :rtype: List[AlarmInfo]\n        \"\"\"\n        return self.alarms\n\n\nclass OpenKafkaConsumerResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(OpenKafkaConsumerResponse, self).__init__(response)\n\n\nclass CloseKafkaConsumerResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(CloseKafkaConsumerResponse, self).__init__(response)\n\n\nclass DescribeKafkaConsumerResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeKafkaConsumerResponse, self).__init__(response)\n\n        self.allow_consume = self.response[ALLOW_CONSUME]\n        self.consume_topic = self.response[CONSUME_TOPIC]\n\n    def get_allow_consume(self):\n        \"\"\"\n        :return: 日志主题是否已开启了 Kafka 协议消费功能\n        :rtype:bool\n        \"\"\"\n        return self.allow_consume\n\n    def get_consume_topic(self):\n        \"\"\"\n        :return:Kafka 协议消费主题 ID，格式为 out+日志主题 ID\n        :rtype: str\n        \"\"\"\n        return self.consume_topic\n\n\nclass CreateConsumerGroupResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(CreateConsumerGroupResponse, self).__init__(response)\n\n\nclass DeleteConsumerGroupResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DeleteConsumerGroupResponse, self).__init__(response)\n\n\nclass ModifyConsumerGroupResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ModifyConsumerGroupResponse, self).__init__(response)\n\n\nclass DescribeConsumerGroupsResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeConsumerGroupsResponse, self).__init__(response)\n\n        self.consumer_groups = []\n        consumer_groups = self.response[CONSUMER_GROUPS]\n\n        if consumer_groups is None:\n            return\n\n        for i in range(len(consumer_groups)):\n            self.consumer_groups.append(ConsumerGroup.set_attributes(data=consumer_groups[i]))\n\n\nclass ConsumerHeartbeatResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ConsumerHeartbeatResponse, self).__init__(response)\n\n        self.shards = []\n        shards = self.response.get(SHARDS)\n\n        if shards is not None:\n            for i in range(len(shards)):\n                self.shards.append(ConsumeShard.set_attributes(data=shards[i]))\n\n\nclass ModifyCheckpointResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ModifyCheckpointResponse, self).__init__(response)\n\n\nclass ResetCheckpointResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ResetCheckpointResponse, self).__init__(response)\n\n\nclass DescribeCheckpointResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeCheckpointResponse, self).__init__(response)\n\n        self.shard_id = self.response.get(SHARD_ID_UPPERCASE)\n        self.checkpoint = self.response.get(CHECKPOINT)\n        self.update_time = self.response.get(UPDATE_TIME)\n        self.consumer = self.response.get(CONSUMER)\n\n\nclass AddTagsToResourceResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(AddTagsToResourceResponse, self).__init__(response)\n\n\nclass RemoveTagsFromResourceResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(RemoveTagsFromResourceResponse, self).__init__(response)\n\n\nclass TagResourcesResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(TagResourcesResponse, self).__init__(response)\n\n\nclass UntagResourcesResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(UntagResourcesResponse, self).__init__(response)\n\nclass CreateImportTaskResponse(TLSResponse):\n    def __init__(self, response):\n        super(CreateImportTaskResponse, self).__init__(response)\n        self.task_id = self.response[TASK_ID]\n\n    def get_task_id(self):\n        \"\"\"\n        :return:导入任务id\n        :rtype: str\n        \"\"\"\n        return self.task_id\n\nclass DeleteImportTaskResponse(TLSResponse):\n    def __init__(self, response):\n        super(DeleteImportTaskResponse, self).__init__(response)\n\nclass ModifyImportTaskResponse(TLSResponse):\n    def __init__(self, response):\n        super(ModifyImportTaskResponse, self).__init__(response)\n\nclass DescribeImportTaskResponse(TLSResponse):\n    def __init__(self, response):\n        super(DescribeImportTaskResponse, self).__init__(response)\n        self.task_info = None\n        if TASK_INFO in self.response and self.response[TASK_INFO]:\n            self.task_info = ImportTaskInfo.set_attributes(data=self.response[TASK_INFO])\n\n    def get_task_info(self):\n        \"\"\"\n        :return:导入任务详情\n        :rtype: ImportTaskInfo\n        \"\"\"\n        return self.task_info\n\n\n\nclass DescribeImportTasksResponse(TLSResponse):\n    def __init__(self, response):\n        super(DescribeImportTasksResponse, self).__init__(response)\n        self.total = self.response[TOTAL]\n        task_info = self.response[TASK_INFO]\n        self.task_info = []\n\n        if task_info is None:\n            return\n\n        for i in range(len(task_info)):\n            self.task_info.append(ImportTaskInfo.set_attributes(data=task_info[i]))\n\n    def get_task_info(self):\n        \"\"\"\n        :return:导入任务详情列表\n        :rtype: list[ImportTaskInfo]\n        \"\"\"\n        return self.task_info\n\n    def get_task_infos(self):\n        \"\"\"返回导入任务详情列表的别名接口，兼容历史命名\"\"\"\n        return self.task_info\n\n    def get_total(self):\n        \"\"\"\n        :return:导入任务总数\n        :rtype: int\n        \"\"\"\n        return self.total\n\n\nclass CreateShipperResponse(TLSResponse):\n    def __init__(self, response):\n        super(CreateShipperResponse, self).__init__(response)\n        self.shipper_id = self.response[SHIPPER_ID]\n\n    def get_shipper_id(self):\n        \"\"\"\n        :return:投递配置id\n        :rtype: str\n        \"\"\"\n        return self.shipper_id\n\n\nclass DeleteShipperResponse(TLSResponse):\n    def __init__(self, response):\n        super(DeleteShipperResponse, self).__init__(response)\n\n\nclass ModifyShipperResponse(TLSResponse):\n    def __init__(self, response):\n        super(ModifyShipperResponse, self).__init__(response)\n\n\nclass DescribeShipperResponse(TLSResponse):\n    def __init__(self, response):\n        super(DescribeShipperResponse, self).__init__(response)\n        self.shipper_id = self.response[SHIPPER_ID]\n        self.shipper_name = self.response[SHIPPER_NAME]\n        self.project_id = self.response[PROJECT_ID]\n        self.project_name = self.response[PROJECT_NAME]\n        self.topic_id = self.response[TOPIC_ID]\n        self.topic_name = self.response[TOPIC_NAME]\n        self.shipper_type = self.response[SHIPPER_TYPE]\n        self.status = self.response[STATUS]\n        self.create_time = self.response[CREATE_TIME]\n        self.modify_time = self.response[MODIFY_TIME]\n        self.shipper_start_time = self.response[SHIPPER_START_TIME]\n        self.shipper_end_time = self.response[SHIPPER_END_TIME]\n        self.content_info = ContentInfo.set_attributes(data=self.response[CONTENT_INFO])\n        self.tos_shipper_info = None\n        if TOS_SHIPPER_INFO in self.response and self.response[TOS_SHIPPER_INFO]:\n            self.tos_shipper_info = TosShipperInfo.set_attributes(data=self.response[TOS_SHIPPER_INFO])\n        self.kafka_shipper_info = None\n        if KAFKA_SHIPPER_INFO in self.response and self.response[KAFKA_SHIPPER_INFO]:\n            self.kafka_shipper_info = KafkaShipperInfo.set_attributes(data=self.response[KAFKA_SHIPPER_INFO])\n        self.dashboard_id = self.response[DASHBOARD_ID]\n        self.role_trn = self.response[ROLE_TRN]\n\n    def get_shipper_id(self):\n        \"\"\"\n        :return:投递配置id\n        :rtype: str\n        \"\"\"\n        return self.shipper_id\n    def get_shipper_name(self):\n        \"\"\"\n        :return:投递配置名称\n        :rtype: str\n        \"\"\"\n        return self.shipper_name\n    def get_project_id(self):\n        \"\"\"\n        :return:项目id\n        :rtype: str\n        \"\"\"\n        return self.project_id\n    def get_topic_id(self):\n        \"\"\"\n        :return:日志主题id\n        :rtype: str\n        \"\"\"\n        return self.topic_id\n    def get_topic_name(self):\n        \"\"\"\n        :return:日志主题名称\n        :rtype: str\n        \"\"\"\n        return self.topic_name\n    def get_shipper_type(self):\n        \"\"\"\n        :return:投递配置类型\n        :rtype: str\n        \"\"\"\n        return self.shipper_type\n    def get_status(self):\n        \"\"\"\n        :return:投递配置状态\n        :rtype: str\n        \"\"\"\n        return self.status\n    def get_create_time(self):\n        \"\"\"\n        :return:创建时间\n        :rtype: str\n        \"\"\"\n        return self.create_time\n    def get_modify_time(self):\n        \"\"\"\n        :return:修改时间\n        :rtype: str\n        \"\"\"\n        return self.modify_time\n    def get_shipper_start_time(self):\n        \"\"\"\n        :return:投递配置开始时间\n        :rtype: int\n        \"\"\"\n        return self.shipper_start_time\n    def get_shipper_end_time(self):\n        \"\"\"\n        :return:投递配置结束时间\n        :rtype: int\n        \"\"\"\n        return self.shipper_end_time\n    def get_content_info(self):\n        \"\"\"\n        :return:投递配置内容信息\n        :rtype: ContentInfo\n        \"\"\"\n        return self.content_info\n    def get_tos_shipper_info(self):\n        \"\"\"\n        :return:投递配置TOS信息\n        :rtype: TosShipperInfo\n        \"\"\"\n        return self.tos_shipper_info\n    def get_kafka_shipper_info(self):\n        \"\"\"\n        :return:投递配置Kafka信息\n        :rtype: KafkaShipperInfo\n        \"\"\"\n        return self.kafka_shipper_info\n    def get_dashboard_id(self):\n        \"\"\"\n        :return:监控看板id\n        :rtype: str\n        \"\"\"\n        return self.dashboard_id\n    def get_role_trn(self):\n        \"\"\"\n        :return:角色trn\n        :rtype: str\n        \"\"\"\n        return self.role_trn\n\n\nclass ActiveTlsAccountResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ActiveTlsAccountResponse, self).__init__(response)\n\n\nclass DeleteScheduleSqlTaskResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DeleteScheduleSqlTaskResponse, self).__init__(response)\n\n\nclass ModifyScheduleSqlTaskResponse(TLSResponse):\n    def __init__(self, response):\n        super(ModifyScheduleSqlTaskResponse, self).__init__(response)\n\n\nclass DescribeShippersResponse(TLSResponse):\n    def __init__(self, response):\n        super(DescribeShippersResponse, self).__init__(response)\n        self.total = self.response[TOTAL]\n        self.shippers = []\n\n        shippers_data = self.response.get(SHIPPERS, [])\n        for shipper_data in shippers_data:\n            self.shippers.append(ShipperInfo.set_attributes(data=shipper_data))\n\n    def get_total(self):\n        \"\"\"\n        :return:投递配置总数\n        :rtype: int\n        \"\"\"\n        return self.total\n\n    def get_shippers(self):\n        \"\"\"\n        :return:投递配置列表\n        :rtype: List[ShipperInfo]\n        \"\"\"\n        return self.shippers\n\n\nclass ModifyETLTaskResponse(TLSResponse):\n    def __init__(self, response):\n        super(ModifyETLTaskResponse, self).__init__(response)\n\n\nclass CreateTraceInstanceResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(CreateTraceInstanceResponse, self).__init__(response)\n\n        self.trace_instance_id = self.response[TRACE_INSTANCE_ID]\n\n    def get_trace_instance_id(self):\n        \"\"\"\n        :return: Trace实例id\n        :rtype: str\n        \"\"\"\n        return self.trace_instance_id\n\n\nclass DeleteTraceInstanceResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DeleteTraceInstanceResponse, self).__init__(response)\n\n\nclass DescribeTraceInstanceResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeTraceInstanceResponse, self).__init__(response)\n\n        self.trace_instance = TraceInstanceInfo.set_attributes(data=self.response)\n\n    def get_trace_instance(self):\n        \"\"\"\n        :return: Trace实例信息\n        :rtype: TraceInstanceInfo\n        \"\"\"\n        return self.trace_instance\n\n\nclass DescribeTraceInstancesResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeTraceInstancesResponse, self).__init__(response)\n\n        self.total = self.response[TOTAL]\n        self.trace_instances = []\n\n        trace_instances_data = self.response.get(TRACE_INSTANCES, [])\n        for trace_instance_data in trace_instances_data:\n            self.trace_instances.append(TraceInstanceInfo.set_attributes(data=trace_instance_data))\n\n    def get_total(self):\n        \"\"\"\n        :return: Trace实例总数\n        :rtype: int\n        \"\"\"\n        return self.total\n\n    def get_trace_instances(self):\n        \"\"\"\n        :return: Trace实例列表\n        :rtype: List[TraceInstanceInfo]\n        \"\"\"\n        return self.trace_instances\n\n\nclass ModifyTraceInstanceResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ModifyTraceInstanceResponse, self).__init__(response)\n\n\nclass DescribeETLTaskResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeETLTaskResponse, self).__init__(response)\n\n        # 基础字段\n        self.create_time = self.response.get(CREATE_TIME)\n        self.dsl_type = self.response.get(DSL_TYPE)\n        self.description = self.response.get(DESCRIPTION)\n        self.etl_status = self.response.get(ETL_STATUS)\n        self.enable = self.response.get(ETL_ENABLE)\n        self.from_time = self.response.get(ETL_FROM_TIME)\n        self.last_enable_time = self.response.get(ETL_LAST_ENABLE_TIME)\n        self.modify_time = self.response.get(MODIFY_TIME)\n        self.name = self.response.get(NAME)\n        self.project_id = self.response.get(PROJECT_ID)\n        self.project_name = self.response.get(PROJECT_NAME)\n        self.script = self.response.get(ETL_SCRIPT)\n        self.source_topic_id = self.response.get(ETL_SOURCE_TOPIC_ID)\n        self.source_topic_name = self.response.get(SOURCE_TOPIC_NAME)\n        self.task_id = self.response.get(TASK_ID)\n        self.task_type = self.response.get(ETL_TASK_TYPE)\n        self.to_time = self.response.get(ETL_TO_TIME)\n\n        # 目标资源列表\n        self.target_resources = []\n        target_resources_data = self.response.get(ETL_TARGET_RESOURCES, [])\n        if target_resources_data:\n            for target_resource_data in target_resources_data:\n                self.target_resources.append(TargetResourceInfo.set_attributes(data=target_resource_data))\n\n    def get_create_time(self):\n        \"\"\"\\\n        :return: 加工任务的创建时间\n        :rtype: str\n        \"\"\"\n        return self.create_time\n\n    def get_dsl_type(self):\n        \"\"\"\\\n        :return: DSL 类型\n        :rtype: str\n        \"\"\"\n        return self.dsl_type\n\n    def get_description(self):\n        \"\"\"\\\n        :return: 数据加工任务的描述信息\n        :rtype: str\n        \"\"\"\n        return self.description\n\n    def get_etl_status(self):\n        \"\"\"\\\n        :return: 任务调度状态\n        :rtype: str\n        \"\"\"\n        return self.etl_status\n\n    def get_enable(self):\n        \"\"\"\\\n        :return: 是否启用数据任务\n        :rtype: bool\n        \"\"\"\n        return self.enable\n\n    def get_from_time(self):\n        \"\"\"\\\n        :return: 待加工数据的开始时间\n        :rtype: int\n        \"\"\"\n        return self.from_time\n\n    def get_last_enable_time(self):\n        \"\"\"\\\n        :return: 最近启动时间\n        :rtype: str\n        \"\"\"\n        return self.last_enable_time\n\n    def get_modify_time(self):\n        \"\"\"\\\n        :return: 加工任务的修改时间\n        :rtype: str\n        \"\"\"\n        return self.modify_time\n\n    def get_name(self):\n        \"\"\"\\\n        :return: 加工任务名称\n        :rtype: str\n        \"\"\"\n        return self.name\n\n    def get_project_id(self):\n        \"\"\"\\\n        :return: 待加工数据所在的日志项目 ID\n        :rtype: str\n        \"\"\"\n        return self.project_id\n\n    def get_project_name(self):\n        \"\"\"\\\n        :return: 待加工数据所在的日志项目名称\n        :rtype: str\n        \"\"\"\n        return self.project_name\n\n    def get_script(self):\n        \"\"\"\\\n        :return: 加工规则\n        :rtype: str\n        \"\"\"\n        return self.script\n\n    def get_source_topic_id(self):\n        \"\"\"\\\n        :return: 待加工数据所在的日志主题 ID\n        :rtype: str\n        \"\"\"\n        return self.source_topic_id\n\n    def get_source_topic_name(self):\n        \"\"\"\\\n        :return: 待加工数据所在的日志主题名称\n        :rtype: str\n        \"\"\"\n        return self.source_topic_name\n\n    def get_task_id(self):\n        \"\"\"\\\n        :return: 加工任务 ID\n        :rtype: str\n        \"\"\"\n        return self.task_id\n\n    def get_task_type(self):\n        \"\"\"\\\n        :return: 任务类型\n        :rtype: str\n        \"\"\"\n        return self.task_type\n\n    def get_to_time(self):\n        \"\"\"\\\n        :return: 日志加工数据范围的结束时间\n        :rtype: int\n        \"\"\"\n        return self.to_time\n\n    def get_target_resources(self):\n        \"\"\"\\\n        :return: 输出目标的相关信息\n        :rtype: List[TargetResourceInfo]\n        \"\"\"\n        return self.target_resources\n\n\nclass DescribeETLTasksResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeETLTasksResponse, self).__init__(response)\n\n        self.total = self.response.get(TOTAL, 0)\n        self.tasks = []\n\n        tasks_data = self.response.get(TASKS, [])\n        for task_data in tasks_data:\n            self.tasks.append(EtlTaskInfo.set_attributes(data=task_data))\n\n    def get_total(self):\n        \"\"\"返回 ETL 任务总数\n\n        :return: ETL 任务总数\n        :rtype: int\n        \"\"\"\n        return self.total\n\n    def get_tasks(self):\n        \"\"\"返回 ETL 任务列表\n\n        :return: ETL 任务列表\n        :rtype: List[EtlTaskInfo]\n        \"\"\"\n        return self.tasks\n\n\nclass CancelDownloadTaskResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(CancelDownloadTaskResponse, self).__init__(response)\n\n\nclass GetAccountStatusResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(GetAccountStatusResponse, self).__init__(response)\n        self.arch_version = self.response.get(ARCH_VERSION)\n        self.status = self.response.get(STATUS)\n\n    def get_arch_version(self):\n        \"\"\"\n        :return: 日志服务版本：2.0：新架构；1.0：老架构\n        :rtype: str\n        \"\"\"\n        return self.arch_version\n\n    def get_status(self):\n        \"\"\"\n        :return: 是否已开通日志服务：Activated：已开通日志服务；NonActivated：未开通日志服务\n        :rtype: str\n        \"\"\"\n        return self.status\n\n\nclass DescribeTraceResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeTraceResponse, self).__init__(response)\n        \n        self.trace = TraceInfo.set_attributes(data=self.response.get(TRACE, {}))\n    \n    def get_trace(self):\n        \"\"\"\n        :return: Trace详情\n        :rtype: TraceInfo\n        \"\"\"\n        return self.trace\n\n\nclass CreateAlarmWebhookIntegrationResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(CreateAlarmWebhookIntegrationResponse, self).__init__(response)\n        self.alarm_webhook_integration_id = self.response[ALARM_WEBHOOK_INTEGRATION_ID]\n\n    def get_alarm_webhook_integration_id(self):\n        \"\"\"\n        :return: Webhook 集成配置 ID\n        :rtype: str\n        \"\"\"\n        return self.alarm_webhook_integration_id\n\n\nclass CreateETLTaskResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(CreateETLTaskResponse, self).__init__(response)\n\n        self.task_id = self.response[ETL_TASK_ID]\n\n    def get_task_id(self):\n        \"\"\"\n        :return: ETL任务ID\n        :rtype: str\n        \"\"\"\n        return self.task_id\n\n\nclass ModifyETLTaskStatusResponse(TLSResponse):\n    def __init__(self, response):\n        super(ModifyETLTaskStatusResponse, self).__init__(response)\n\n\nclass DeleteETLTaskResponse(TLSResponse):\n    def __init__(self, response):\n        super(DeleteETLTaskResponse, self).__init__(response)\n\n\nclass CreateScheduleSqlTaskResponse(TLSResponse):\n    def __init__(self, response):\n        super(CreateScheduleSqlTaskResponse, self).__init__(response)\n        self.task_id = self.response[TASK_ID]\n\n    def get_task_id(self):\n        \"\"\"\n        :return: 定时SQL分析任务ID\n        :rtype: str\n        \"\"\"\n        return self.task_id\n\n\nclass DescribeScheduleSqlTaskResponse(TLSResponse):\n    def __init__(self, response):\n        super(DescribeScheduleSqlTaskResponse, self).__init__(response)\n        self.schedule_sql_task_info = ScheduleSqlTaskInfo.set_attributes(data=self.response)\n\n    def get_schedule_sql_task_info(self):\n        \"\"\"\n        :return: 定时 SQL 分析任务信息\n        :rtype: ScheduleSqlTaskInfo\n        \"\"\"\n        return self.schedule_sql_task_info\n\n\nclass DescribeScheduleSqlTasksResponse(TLSResponse):\n    def __init__(self, response):\n        super(DescribeScheduleSqlTasksResponse, self).__init__(response)\n        self.total = self.response[TOTAL]\n        self.tasks = []\n        tasks = self.response[TASKS]\n\n        for i in range(len(tasks)):\n            self.tasks.append(ScheduleSqlTaskInfo.set_attributes(data=tasks[i]))\n\n    def get_total(self):\n        \"\"\"\n        :return: 定时SQL任务总数\n        :rtype: int\n        \"\"\"\n        return self.total\n\n    def get_tasks(self):\n        \"\"\"\n        :return: 定时SQL任务列表\n        :rtype: List[ScheduleSqlTaskInfo]\n        \"\"\"\n        return self.tasks\n\n\nclass CreateAlarmContentTemplateResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(CreateAlarmContentTemplateResponse, self).__init__(response)\n        self.alarm_content_template_id = self.response.get(ALARM_CONTENT_TEMPLATE_ID)\n\n    def get_alarm_content_template_id(self):\n        \"\"\"\n        :return: 告警通知模版 ID\n        :rtype: str\n        \"\"\"\n        return self.alarm_content_template_id\n\n\nclass ModifyAlarmContentTemplateResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ModifyAlarmContentTemplateResponse, self).__init__(response)\n\n\nclass DeleteAlarmContentTemplateResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DeleteAlarmContentTemplateResponse, self).__init__(response)\n\n\nclass DeleteAlarmWebhookIntegrationResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DeleteAlarmWebhookIntegrationResponse, self).__init__(response)\n\n\nclass DescribeAlarmWebhookIntegrationsResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeAlarmWebhookIntegrationsResponse, self).__init__(response)\n\n        self.total = self.response[TOTAL]\n        self.webhook_integrations = []\n\n        for integration in self.response.get(WEBHOOK_INTEGRATIONS, []):\n            self.webhook_integrations.append(\n                WebhookIntegrationInfo.set_attributes(data=integration))\n\n    def get_total(self):\n        \"\"\"返回 Webhook 集成配置数量\n\n        :return: Webhook 集成配置数量\n        :rtype: int\n        \"\"\"\n        return self.total\n\n    def get_webhook_integrations(self):\n        \"\"\"返回 Webhook 集成配置列表\n\n        :return: Webhook 集成配置列表\n        :rtype: List[WebhookIntegrationInfo]\n        \"\"\"\n        return self.webhook_integrations\n\nclass DescribeAlarmContentTemplatesResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(DescribeAlarmContentTemplatesResponse, self).__init__(response)\n        self.alarm_content_templates = []\n        self.total = self.response.get(TOTAL, 0)\n\n        if ALARM_CONTENT_TEMPLATES in self.response:\n            for template_data in self.response[ALARM_CONTENT_TEMPLATES]:\n                self.alarm_content_templates.append(\n                    ContentTemplateInfo.set_attributes(template_data))\n\n    def get_alarm_content_templates(self):\n        \"\"\"返回告警内容模板列表\n\n        :return: 告警内容模板列表\n        :rtype: List[ContentTemplateInfo]\n        \"\"\"\n        return self.alarm_content_templates\n\n    def get_total(self):\n        \"\"\"返回告警内容模板数量\n\n        :return: 告警内容模板数量\n        :rtype: int\n        \"\"\"\n        return self.total\nclass ModifyAlarmWebhookIntegrationResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ModifyAlarmWebhookIntegrationResponse, self).__init__(response)\n\n\nclass ListTagsForResourcesResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(ListTagsForResourcesResponse, self).__init__(response)\n        self.resource_tags = []\n        self.next_token = self.response.get(\"NextToken\", \"\")\n\n        resource_tags_data = self.response.get(\"ResourceTags\", [])\n        for tag_data in resource_tags_data:\n            self.resource_tags.append(ResourceTagInfo.set_attributes(data=tag_data))\n\n    def get_resource_tags(self):\n        \"\"\"返回资源所绑定的标签列表\"\"\"\n        return self.resource_tags\n\n    def get_next_token(self):\n        \"\"\"返回分页查询凭证\"\"\"\n        return self.next_token\n\n\nclass SearchTracesResponse(TLSResponse):\n    def __init__(self, response: Response):\n        super(SearchTracesResponse, self).__init__(response)\n        self.total = self.response.get(TOTAL, 0)\n        self.trace_infos = []\n\n        trace_infos_data = self.response.get(TRACE_INFOS, [])\n        for trace_info_data in trace_infos_data:\n            self.trace_infos.append(TraceInfo.set_attributes(data=trace_info_data))\n\n    def get_total(self):\n        \"\"\"返回符合条件的 Trace 总数\"\"\"\n        return self.total\n\n    def get_trace_infos(self):\n        \"\"\"返回 Trace 列表\"\"\"\n        return self.trace_infos\n"
  },
  {
    "path": "volcengine/tls/util.py",
    "content": "import logging\nimport sys\n\n\ndef get_logger(name: str):\n    logger = logging.getLogger(name)\n\n    if not logger.hasHandlers():\n        logger.setLevel(logging.INFO)\n        handler = logging.StreamHandler(sys.stdout)\n        handler.setFormatter(logging.Formatter(fmt=\"%(asctime)s \\t %(levelname)s \\t %(name)s \\t %(message)s\",\n                                               datefmt=\"%Y-%m-%d %H:%M:%S\"))\n        logger.addHandler(handler)\n\n    return logger\n\n\nclass TLSUtil:\n    @staticmethod\n    # html空格符处理与前端保持一致\n    def replace_white_space_character(origin: str):\n        if origin is None:\n            return None\n        else:\n            return str(origin).replace(\"\\r\", \"\\\\r\").replace(\"\\n\", \"\\\\n\").replace(\"\\t\", \"\\\\t\")\n"
  },
  {
    "path": "volcengine/util/Functions.py",
    "content": "class Function:\n    @staticmethod\n    def get_meta_func():\n        return {'Name': 'GetMeta'}\n\n    @staticmethod\n    def get_snapshot_func(snapshot_time):\n        return {'Name': 'Snapshot', 'Input': {'SnapshotTime': snapshot_time}}\n\n    @staticmethod\n    def get_add_option_info_func(title, tags, description, classification_id, is_hls_index_only=False):\n        return {'Name': 'AddOptionInfo',\n                'Input': {'Title': title, 'Tags': tags, 'Description': description,\n                          'ClassificationId': classification_id, \"IsHlsIndexOnly\": is_hls_index_only}}\n\n    @staticmethod\n    def get_add_material_option_info_func(title, tags, description, category, record_type, format_input):\n        return {'Name': 'AddOptionInfo',\n                'Input': {'Title': title, 'Tags': tags, 'Description': description, 'Category': category,\n                          'RecordType': record_type, 'Format': format_input}}\n\n    @staticmethod\n    def get_start_workflow_func(template_id, templates=None):\n        return {'Name': 'StartWorkflow', 'Input': {'TemplateId': template_id, 'Templates': templates}}\n\n    @staticmethod\n    def get_start_workflow_template_func(templates):\n        return {'Name': 'StartWorkflow', 'Input': {'Templates': templates}}\n\n    @staticmethod\n    def get_caption_func(title, format, vid, fid, language, source, tag, action_type, store_uri, auto_publish=False):\n        return {'Name': 'CaptionUpload',\n                'Input': {'Title': title, 'Format': format, 'Vid': vid, 'Fid': fid, 'Language': language,\n                          'Source': source, 'Tag': tag, 'ActionType': action_type, 'StoreUri': store_uri,\n                          'AutoPublish': auto_publish}}\n\n    @staticmethod\n    def get_encryption_func(conf, policy):\n        return {'Name': 'Encryption', 'Input': {'Config': conf, 'PolicyParams': policy}}\n"
  },
  {
    "path": "volcengine/util/Util.py",
    "content": "# coding:utf-8\nimport base64\nimport hashlib\nimport hmac\nimport random\nimport sys\nimport uuid\nfrom functools import reduce\n\nfrom Crypto.Cipher import AES\n\nfrom volcengine.const.Const import LETTER_RUNES\nfrom zlib import crc32\n\ntry:\n    from urllib import quote\nexcept:\n    from urllib.parse import quote\n\n\nclass Util(object):\n    @staticmethod\n    def norm_uri(path):\n        return quote(path).replace('%2F', '/').replace('+', '%20')\n\n    @staticmethod\n    def norm_query(params):\n        query = ''\n        for key in sorted(params.keys()):\n            if type(params[key]) == list:\n                for k in params[key]:\n                    query = query + quote(key, safe='-_.~') + '=' + quote(k, safe='-_.~') + '&'\n            else:\n                query = query + quote(key, safe='-_.~') + '=' + quote(params[key], safe='-_.~') + '&'\n        query = query[:-1]\n        return query.replace('+', '%20')\n\n    @staticmethod\n    def hmac_sha256(key, content):\n        # type(key) == <class 'bytes'>\n        if sys.version_info[0] == 3:\n            return hmac.new(key, bytes(content, encoding='utf-8'), hashlib.sha256).digest()\n        else:\n            return hmac.new(key, bytes(content.encode('utf-8')), hashlib.sha256).digest()\n\n    @staticmethod\n    def hmac_sha1(key, content):\n        # type(key) == <class 'bytes'>\n        if sys.version_info[0] == 3:\n            return hmac.new(key, bytes(content, encoding='utf-8'), hashlib.sha1).digest()\n        else:\n            return hmac.new(key, bytes(content.encode('utf-8')), hashlib.sha1).digest()\n\n    @staticmethod\n    def sha256(content):\n        # type(content) == <class 'str'>\n        if sys.version_info[0] == 3:\n            if isinstance(content, str) is True:\n                return hashlib.sha256(content.encode('utf-8')).hexdigest()\n            else:\n                return hashlib.sha256(content).hexdigest()\n        else:\n            if isinstance(content, (str, unicode)) is True:\n                return hashlib.sha256(content.encode('utf-8')).hexdigest()\n            else:\n                return hashlib.sha256(content).hexdigest()\n\n    @staticmethod\n    def to_hex(content):\n        lst = []\n        for ch in content:\n            if sys.version_info[0] == 3:\n                hv = hex(ch).replace('0x', '')\n            else:\n                hv = hex(ord(ch)).replace('0x', '')\n            if len(hv) == 1:\n                hv = '0' + hv\n            lst.append(hv)\n        return reduce(lambda x, y: x + y, lst)\n\n    @staticmethod\n    def pad(plain_text):\n        block_size = AES.block_size\n\n        number_of_bytes_to_pad = block_size - len(plain_text) % block_size\n        ascii_string = chr(0)\n        padding_str = number_of_bytes_to_pad * ascii_string\n        padded_plain_text = plain_text + padding_str\n        return padded_plain_text\n\n    @staticmethod\n    def generate_access_key_id(prefix):\n        uid = str(uuid.uuid4())\n        uid_base64 = base64.b64encode(uid.replace('-', '').encode(encoding='utf-8'))\n\n        s = uid_base64.decode().replace('=', '').replace('/', '').replace('+', '').replace('-', '')\n        return prefix + s\n\n    @staticmethod\n    def rand_string_runes(length):\n        return ''.join(random.sample(list(LETTER_RUNES), length))\n\n    @staticmethod\n    def aes_encrypt_cbc_with_base64(orig_data, key):\n        # type(orig_data) == <class 'str'>\n        # type(key) == <class 'bytes'>\n        generator = AES.new(key, AES.MODE_CBC, key)\n        if sys.version_info[0] == 3:\n            crypt = generator.encrypt(Util.pad(orig_data).encode('utf-8'))\n            return base64.b64encode(crypt).decode()\n        else:\n            crypt = generator.encrypt(Util.pad(orig_data))\n            return base64.b64encode(crypt)\n\n    @staticmethod\n    def generate_secret_key():\n        rand_str = Util.rand_string_runes(32)\n        return Util.aes_encrypt_cbc_with_base64(rand_str, 'bytedance-isgood'.encode('utf-8'))\n\n    @staticmethod\n    def crc32(file_path):\n        prev = 0\n        for eachLine in open(file_path, \"rb\"):\n            prev = crc32(eachLine, prev)\n        return prev & 0xFFFFFFFF\n"
  },
  {
    "path": "volcengine/util/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/vedit/VEditService.py",
    "content": "# coding:utf-8\nimport json\nimport threading\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.base.Service import Service\n\n\nclass VEditService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(VEditService, \"_instance\"):\n            with VEditService._instance_lock:\n                if not hasattr(VEditService, \"_instance\"):\n                    VEditService._instance = object.__new__(cls)\n        return VEditService._instance\n\n    def __init__(self, region='cn-north-1'):\n        self.service_info = VEditService.get_service_info(region)\n        self.api_info = VEditService.get_api_info()\n        super(VEditService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info(region):\n        service_info_map = {\n            'cn-north-1': ServiceInfo(\"vedit.volcengineapi.com\", {'Accept': 'application/json'},\n                                      Credentials('', '', 'edit', 'cn-north-1'), 5, 5, \"https\")\n        }\n        service_info = service_info_map.get(region, None)\n        if not service_info:\n            raise Exception('Cant find the region, please check it carefully')\n\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\"SubmitDirectEditTaskAsync\": ApiInfo(\"POST\", \"/\", {\"Action\": \"SubmitDirectEditTaskAsync\",\n                                                                       \"Version\": \"2018-01-01\"}, {}, {}),\n                    \"GetDirectEditResult\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetDirectEditResult\",\n                                                                 \"Version\": \"2018-01-01\"}, {}, {}),\n                    \"SubmitTemplateTaskAsync\": ApiInfo(\"POST\", \"/\", {\"Action\": \"SubmitTemplateTaskAsync\",\n                                                                     \"Version\": \"2018-01-01\"}, {}, {})\n                    }\n        return api_info\n\n    def submit_direct_edit_task_async(self, body):\n        res = self.json('SubmitDirectEditTaskAsync', {}, body)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def get_direct_edit_result(self, body):\n        res = self.json('GetDirectEditResult', {}, body)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n\n    def submit_template_task_async(self, body):\n        res = self.json('SubmitTemplateTaskAsync', {}, body)\n        if res == '':\n            raise Exception(\"empty response\")\n        res_json = json.loads(res)\n        return res_json\n"
  },
  {
    "path": "volcengine/vedit/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/veen/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/veen/service.py",
    "content": "#  -*- coding: utf-8 -*-\nimport json\nimport threading\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\n\nSERVICE_VERSION = \"2021-04-30\"\n\nservice_info_map = {\n    \"cn-north-1\": ServiceInfo(\"veenedge.volcengineapi.com\", {'accept': 'application/json', },\n                              Credentials('', '', \"veenedge\", \"cn-north-1\"), 60 * 5, 60 * 5, \"https\"),\n}\n\napi_info = {\n    # 创建边缘服务: https://www.volcengine.com/docs/6499/76856\n    \"CreateCloudServer\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"CreateCloudServer\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取边缘服务列表: https://www.volcengine.com/docs/6499/76857\n    \"ListCloudServers\": ApiInfo(\"GET\", \"/\", {\n        \"Action\": \"ListCloudServers\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取边缘服务详情: https://www.volcengine.com/docs/6499/76858\n    \"GetCloudServer\": ApiInfo(\"GET\", \"/\", {\n        \"Action\": \"GetCloudServer\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 启动边缘服务: https://www.volcengine.com/docs/6499/81036\n    \"StartCloudServer\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"StartCloudServer\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 停止边缘服务: https://www.volcengine.com/docs/6499/81035\n    \"StopCloudServer\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"StopCloudServer\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 重启边缘服务: https://www.volcengine.com/docs/6499/81037\n    \"RebootCloudServer\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"RebootCloudServer\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 删除边缘服务: https://www.volcengine.com/docs/6499/76859\n    \"DeleteCloudServer\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DeleteCloudServer\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取可开通的实例规格: https://www.volcengine.com/docs/6499/76860\n    \"ListInstanceTypes\": ApiInfo(\"GET\", \"/\", {\n        \"Action\": \"ListInstanceTypes\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取支持的区域和运营商: https://www.volcengine.com/docs/6499/76861\n    \"ListAvailableResourceInfo\": ApiInfo(\"GET\", \"/\", {\n        \"Action\": \"ListAvailableResourceInfo\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 新增边缘实例: https://www.volcengine.com/docs/6499/76863\n    \"CreateInstance\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"CreateInstance\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取边缘实例列表: https://www.volcengine.com/docs/6499/76862\n    \"ListInstances\": ApiInfo(\"GET\", \"/\", {\n        \"Action\": \"ListInstances\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取边缘实例详情: https://www.volcengine.com/docs/6499/76865\n    \"GetInstance\": ApiInfo(\"GET\", \"/\", {\n        \"Action\": \"GetInstance\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 启动边缘实例: https://www.volcengine.com/docs/6499/76868\n    \"StartInstances\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"StartInstances\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 停止边缘实例: https://www.volcengine.com/docs/6499/76866\n    \"StopInstances\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"StopInstances\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 重启边缘实例: https://www.volcengine.com/docs/6499/76864\n    \"RebootInstances\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"RebootInstances\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 删除边缘实例: https://www.volcengine.com/docs/6499/81039\n    \"OfflineInstances\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"OfflineInstances\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 编辑边缘实例名称: https://www.volcengine.com/docs/6499/76867\n    \"SetInstanceName\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"SetInstanceName\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 重置边缘实例密码: https://www.volcengine.com/docs/6499/76869\n    \"ResetLoginCredential\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"ResetLoginCredential\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取实例云盘信息: https://www.volcengine.com/docs/6499/174016\n    \"GetInstanceCloudDiskInfo\": ApiInfo(\"GET\", \"/\", {\n        \"Action\": \"GetInstanceCloudDiskInfo\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 扩容实例云盘: https://www.volcengine.com/docs/6499/174017\n    \"ScaleInstanceCloudDiskCapacity\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"ScaleInstanceCloudDiskCapacity\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 创建边缘云盘\n    \"CreateEbsInstances\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"CreateEbsInstances\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取边缘云盘列表\n    \"ListEbsInstances\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"ListEbsInstances\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 获取边缘云盘详情\n    \"GetEbsInstance\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"GetEbsInstance\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 边缘云盘扩容\n    \"ScaleEbsInstanceCapacity\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"ScaleEbsInstanceCapacity\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 边缘云盘挂载\n    \"AttachEbs\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"AttachEbs\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 边缘云盘卸载\n    \"DetachEbs\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DetachEbs\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 边缘云盘删除\n    \"DeleteEbsInstance\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"DeleteEbsInstance\", \"Version\": SERVICE_VERSION}, {}, {}),\n\n    # 批量重置系统或更换镜像 https://www.volcengine.com/docs/6499/196711\n    \"BatchResetSystem\": ApiInfo(\"POST\", \"/\", {\n        \"Action\": \"BatchResetSystem\", \"Version\": SERVICE_VERSION}, {}, {}),\n}\n\n\nclass VeenService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(VeenService, \"_instance\"):\n            with VeenService._instance_lock:\n                if not hasattr(VeenService, \"_instance\"):\n                    VeenService._instance = object.__new__(cls)\n        return VeenService._instance\n\n    def __init__(self, region=\"cn-north-1\"):\n        self.service_info = VeenService.get_service_info(region)\n        self.api_info = VeenService.get_api_info()\n        super(VeenService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info(region_name):\n        service_info = service_info_map.get(region_name, None)\n        if not service_info:\n            raise Exception('do not support region %s' % region_name)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        return api_info\n\n    def create_cloudserver(self, body=None):\n        if body is None:\n            body = {}\n        action = \"CreateCloudServer\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def list_cloudservers(self, query=None):\n        if query is None:\n            query = {}\n        action = \"ListCloudServers\"\n        res = self.get(action,query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def get_cloudserver(self, query=None):\n        if query is None:\n            query = {}\n        action = \"GetCloudServer\"\n        res = self.get(action,query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n    \n    def start_cloudserver(self, body=None):\n        if body is None:\n            body = {}\n        action = \"StartCloudServer\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def stop_cloudserver(self, body=None):\n        if body is None:\n            body = {}\n        action = \"StopCloudServer\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def reboot_cloudserver(self, body=None):\n        if body is None:\n            body = {}\n        action = \"RebootCloudServer\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_cloudserver(self, body=None):\n        if body is None:\n            body = {}\n        action = \"DeleteCloudServer\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def list_instance_types(self, query=None):\n        if query is None:\n            query = {}\n        action = \"ListInstanceTypes\"\n        res = self.get(action,query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def list_available_resource_info(self, query=None):\n        if query is None:\n            query = {}\n        action = \"ListAvailableResourceInfo\"\n        res = self.get(action,query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def create_instance(self, body=None):\n        if body is None:\n            body = {}\n        action = \"CreateInstance\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def list_instances(self, query=None):\n        if query is None:\n            query = {}\n        action = \"ListInstances\"\n        res = self.get(action,query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def get_instance(self, query=None):\n        if query is None:\n            query = {}\n        action = \"GetInstance\"\n        res = self.get(action,query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def start_instances(self, body=None):\n        if body is None:\n            body = {}\n        action = \"StartInstances\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def stop_instances(self, body=None):\n        if body is None:\n            body = {}\n        action = \"StopInstances\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def reboot_instances(self, body=None):\n        if body is None:\n            body = {}\n        action = \"RebootInstances\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def offline_instances(self, body=None):\n        if body is None:\n            body = {}\n        action = \"OfflineInstances\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def set_instance_name(self, body=None):\n        if body is None:\n            body = {}\n        action = \"SetInstanceName\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def reset_login_credential(self, body=None):\n        if body is None:\n            body = {}\n        action = \"ResetLoginCredential\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def get_instance_cloud_disk_info(self, query=None):\n        if query is None:\n            query = {}\n        action = \"GetInstanceCloudDiskInfo\"\n        res = self.get(action,query)\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def scale_instance_cloud_disk_capacity(self, body=None):\n        if body is None:\n            body = {}\n        action = \"ScaleInstanceCloudDiskCapacity\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def create_ebs_instances(self, body=None):\n        if body is None:\n            body = {}\n        action = \"CreateEbsInstances\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def list_ebs_instances(self, body=None):\n        if body is None:\n            body = {}\n        action = \"ListEbsInstances\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def get_ebs_instance(self, body=None):\n        if body is None:\n            body = {}\n        action = \"GetEbsInstance\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def scale_ebs_instance_capacity(self, body=None):\n        if body is None:\n            body = {}\n        action = \"ScaleEbsInstanceCapacity\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def attach_ebs(self, body=None):\n        if body is None:\n            body = {}\n        action = \"AttachEbs\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def detach_ebs(self, body=None):\n        if body is None:\n            body = {}\n        action = \"DetachEbs\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def delete_ebs_instance(self, body=None):\n        if body is None:\n            body = {}\n        action = \"DeleteEbsInstance\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json\n\n    def batch_reset_system(self, body=None):\n        if body is None:\n            body = {}\n        action = \"BatchResetSystem\"\n        res = self.json(action,[],json.dumps(body))\n        if res == '':\n            raise Exception(\"%s: empty response\" % action)\n        res_json = json.loads(res)\n        return res_json"
  },
  {
    "path": "volcengine/verender/VerenderService.py",
    "content": "# coding: utf-8\nimport json\nimport os\nimport threading\nimport time\n\nimport redo\n\nfrom requests import exceptions\n\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.verender.ftrans import FtransService\n\nSERVICE = \"verender\"\nVERSION = \"2021-12-31\"\nREGION = \"cn-north1\"\nSCHEME = \"https\"\nCONN_TIMEOUT = 5\nRECV_TIMEOUT = 5\nDEFAULT_PAGE_NUM = 1\nDEFAULT_PAGE_SIZE = 10\nDEFAULT_STORAGE_ACCESS_EXPIRED_SEC = 15 * 60\n\n\ndef _list_dir(dir_name, max_depth=50):\n    if max_depth <= 0:\n        raise Exception(\"too deep dir %s\" % dir_name)\n\n    local_files = []\n    files = os.listdir(dir_name)\n    if len(files) == 0:\n        local_files.append(dir_name)\n\n    for f in files:\n        full_path = os.path.join(dir_name, f)\n        if os.path.isfile(full_path):\n            local_files.append(full_path)\n        else:\n            subs = _list_dir(full_path, max_depth - 1)\n            for e in subs:\n                local_files.append(e)\n\n    return local_files\n\n\ndef _to_slash(filename):\n    filename = filename.replace(\":\\\\\", \"/\").replace(\"\\\\\", \"/\")\n    if filename[0] == '/':\n        filename = filename[1:]\n\n    return filename\n\n\nclass FileInfo(object):\n    def __init__(self, name, size, mtime, md5=None):\n        self.name = name\n        self.size = size\n        self.mtime = mtime\n        self.md5 = md5\n\n    def __str__(self):\n        return \"name: %s, size: %d, mtime: %d, md5: %s\" % (self.name, self.size, self.mtime, self.md5)\n\n\nclass VerenderService(Service):\n    _lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(VerenderService, \"_instance\"):\n            with VerenderService._lock:\n                if not hasattr(VerenderService, \"_instance\"):\n                    VerenderService._instance = object.__new__(cls)\n        return VerenderService._instance\n\n    # ftrans_client_addr是快传客户端的地址 不配置默认使用S10 传输速度会低于快传客户端\n    # ftrans_proxy_addr是代理的管理地址 不需要代理则无需配置\n    def __init__(self, ftrans_client_addr=None, ftrans_proxy_addr=None):\n        self.api_info = VerenderService.get_api_info()\n        self.service_info = VerenderService.get_service_info()\n        self._ftrans_client_addr = ftrans_client_addr\n        self._ftrans_proxy_addr = ftrans_proxy_addr\n        self._storage_access_map = {}\n        super(VerenderService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info():\n        service_info = ServiceInfo(\n            \"open.volcengineapi.com\",\n            {\"Accept\": \"application/json\"},\n            Credentials(\"\", \"\", SERVICE, REGION),\n            CONN_TIMEOUT,\n            RECV_TIMEOUT,\n            SCHEME\n        )\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\n            \"ListWorkspace\": ApiInfo(\n                \"GET\",\n                \"/\",\n                {\"Action\": \"ListWorkspaces\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"GetStorageAccess\": ApiInfo(\n                \"GET\",\n                \"/\",\n                {\"Action\": \"GetStorageAccess\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"ListDccs\": ApiInfo(\n                \"GET\",\n                \"/\",\n                {\"Action\": \"ListDccs\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"ListAccountDccPlugins\": ApiInfo(\n                \"GET\",\n                \"/\",\n                {\"Action\": \"ListAccountDccPlugins\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"GetCurrentUser\": ApiInfo(\n                \"GET\",\n                \"/\",\n                {\"Action\": \"GetCurrentUser\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"CreateRenderJob\": ApiInfo(\n                \"POST\",\n                \"/\",\n                {\"Action\": \"CreateRenderJob\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"ListRenderJob\": ApiInfo(\n                \"GET\",\n                \"/\",\n                {\"Action\": \"ListRenderJobs\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"GetRenderJob\": ApiInfo(\n                \"GET\",\n                \"/\",\n                {\"Action\": \"GetRenderJob\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"RetryRenderJob\": ApiInfo(\n                \"POST\",\n                \"/\",\n                {\"Action\": \"RetryJob\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"ResumeRenderJobs\": ApiInfo(\n                \"POST\",\n                \"/\",\n                {\"Action\": \"ResumeJobs\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"StopRenderJobs\": ApiInfo(\n                \"POST\",\n                \"/\",\n                {\"Action\": \"StopJobs\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"DeleteRenderJobs\": ApiInfo(\n                \"POST\",\n                \"/\",\n                {\"Action\": \"DeleteJobs\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"FullSpeedRenderJobs\": ApiInfo(\n                \"POST\",\n                \"/\",\n                {\"Action\": \"FullSpeedRenderJobs\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"AutoAllRenderJobs\": ApiInfo(\n                \"POST\",\n                \"/\",\n                {\"Action\": \"AutoAllRenderJobs\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"UpdateRenderJobsPriority\": ApiInfo(\n                \"POST\",\n                \"/\",\n                {\"Action\": \"UpdateRenderJobsPriority\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"ListJobOutput\": ApiInfo(\n                \"POST\",\n                \"/\",\n                {\"Action\": \"ListJobOutput\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"GetJobOutput\": ApiInfo(\n                \"POST\",\n                \"/\",\n                {\"Action\": \"GetJobOutput\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"UpdateJobOutput\": ApiInfo(\n                \"POST\",\n                \"/\",\n                {\"Action\": \"UpdateJobOutput\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"ListCellSpec\": ApiInfo(\n                \"GET\",\n                \"/\",\n                {\"Action\": \"ListCellSpecs\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"AddRenderSetting\": ApiInfo(\n                \"POST\",\n                \"/\",\n                {\"Action\": \"AddRenderSetting\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"UpdateRenderSetting\": ApiInfo(\n                \"POST\",\n                \"/\",\n                {\"Action\": \"UpdateRenderSetting\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"DeleteRenderSetting\": ApiInfo(\n                \"POST\",\n                \"/\",\n                {\"Action\": \"DeleteRenderSetting\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"ListRenderSetting\": ApiInfo(\n                \"GET\",\n                \"/\",\n                {\"Action\": \"GetRenderSettingList\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"GetRenderSetting\": ApiInfo(\n                \"GET\",\n                \"/\",\n                {\"Action\": \"GetRenderSetting\", \"Version\": VERSION},\n                {},\n                {}\n            ),\n            \"GetPluginList\": ApiInfo(\n                \"GET\",\n                \"/\",\n                {\"Action\": \"GetPlugins\", \"Version\": VERSION},\n                {},\n                {}\n            )\n        }\n        return api_info\n\n    def _get_ftrans_client(self, workspace_id, isp):\n        params = {\n            \"WorkspaceId\": workspace_id\n        }\n        resp = self.list_workspace(params=params)\n        if resp[\"Total\"] != 1:\n            raise Exception(\"workspace not found\")\n        try:\n            ignore_upload_case = resp[\"Workspaces\"][0][\"ConvertToLowerCase\"]\n        except:\n            ignore_upload_case = False\n\n        if workspace_id not in self._storage_access_map:\n            params = {\n                \"WorkspaceId\": workspace_id\n            }\n            storage_access = self.get_storage_access(params)\n            self._storage_access_map[workspace_id] = {\n                \"storage_access\": storage_access,\n                \"expired_at\": int(time.time()) + DEFAULT_STORAGE_ACCESS_EXPIRED_SEC,\n                \"ftrans_client_map\": {},\n                \"ignore_upload_case\": ignore_upload_case\n            }\n        else:\n            storage_access = self._storage_access_map[workspace_id]\n            if storage_access[\"expired_at\"] < int(time.time()):\n                params = {\n                    \"WorkspaceId\": workspace_id\n                }\n                storage_access = self.get_storage_access(params)\n                self._storage_access_map[workspace_id] = {\n                    \"storage_access\": storage_access[\"storage_access\"],\n                    \"expired_at\": int(time.time()) + DEFAULT_STORAGE_ACCESS_EXPIRED_SEC,\n                    \"ftrans_client_map\": {},\n                    \"ignore_upload_case\": ignore_upload_case\n                }\n\n        storage_access = self._storage_access_map[workspace_id]\n        if isp in storage_access[\"ftrans_client_map\"]:\n            return storage_access[\"ftrans_client_map\"][isp], storage_access[\"ignore_upload_case\"]\n        else:\n            bucket = storage_access[\"storage_access\"][\"bucket_name\"]\n            acl_token = storage_access[\"storage_access\"][\"ftrans_security_token\"]\n            server_name = storage_access[\"storage_access\"][\"ftrans_cert_name\"]\n            s10_addr = storage_access[\"storage_access\"][\"ftrans_s10_server\"]\n            cert = storage_access[\"storage_access\"][\"cert_pem\"]\n            key = storage_access[\"storage_access\"][\"private_key_pem\"]\n            s2_addr = storage_access[\"storage_access\"][\"ftrans_quic_server\"]\n            cli = FtransService(bucket, acl_token, server_name,\n                                s10_server=s10_addr, cert_pem=cert, key_pem=key,\n                                client_addr=self._ftrans_client_addr, proxy_addr=self._ftrans_proxy_addr,\n                                s2_server=s2_addr, isp=isp)\n            storage_access[\"ftrans_client_map\"][isp] = cli\n\n            return cli, storage_access[\"ignore_upload_case\"]\n\n    @redo.retriable(retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout, exceptions.ReadTimeout),\n                    sleeptime=0.1, jitter=0.01, attempts=2)\n    def _call_json(self, api, params=None, body=None, with_meta=False):\n        params = params or {}\n        body = body or {}\n        body = json.dumps(body)\n        resp = self.json(api, params, body)\n        if \"\" == resp:\n            raise Exception(\"empty response\")\n        resp_json = json.loads(resp)\n        if resp_json.get(\"ResponseMetadata\", {}).get(\"Error\", {}).get(\"CodeN\", 0) != 0:\n            raise Exception(resp)\n        if with_meta:\n            result = resp_json\n        else:\n            result = resp_json.get(\"Result\", \"\")\n        return result\n\n    @redo.retriable(retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout, exceptions.ReadTimeout),\n                    sleeptime=0.1, jitter=0.01, attempts=2)\n    def _call_get(self, api, params=None, with_meta=False):\n        params = params or {}\n        resp = self.get(api, params=params)\n        if \"\" == resp:\n            raise Exception(\"empty response\")\n        resp_json = json.loads(resp)\n        if resp_json.get(\"ResponseMetadata\", {}).get(\"Error\", {}).get(\"CodeN\", 0) != 0:\n            raise Exception(resp)\n        if with_meta:\n            result = resp_json\n        else:\n            result = resp_json.get(\"Result\", \"\")\n        return result\n\n    @redo.retriable(retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout, exceptions.ReadTimeout),\n                    sleeptime=0.1, jitter=0.01, attempts=2)\n    def _call_post(self, api, params=None, form=None):\n        params = params or {}\n        form = form or {}\n        resp = self.post(api, params=params, form=form)\n        if \"\" == resp:\n            raise Exception(\"empty response\")\n\n        return resp\n\n    def list_workspace(self, params=None):\n        return self._call_get(\"ListWorkspace\", params=params)\n\n    def get_storage_access(self, params=None):\n        return self._call_get(\"GetStorageAccess\", params=params)\n\n    def get_current_user(self):\n        return self._call_get(\"GetCurrentUser\", params=None)\n\n    # isp是传输所选择的运营商出口 可选 ct|cm|un 默认ct\n    def upload_file(self, workspace_id, src, des, isp=\"ct\"):\n        cli, ignore_case = self._get_ftrans_client(workspace_id, isp=isp)\n        if ignore_case:\n            des = des.lower()\n\n        name, size, mtime, md5 = cli.upload_file(src, des)\n        return FileInfo(name, size, mtime, md5)\n\n    # isp是传输所选择的运营商出口 可选 ct|cm|un 默认ct\n    def upload_folder(self, workspace_id, src_path, des_path, isp=\"ct\"):\n        cli, ignore_case = self._get_ftrans_client(workspace_id, isp=isp)\n\n        file_list = _list_dir(src_path)\n\n        for file in file_list:\n            src = _to_slash(file)\n            src_path = _to_slash(src_path)\n            des_path = _to_slash(des_path)\n\n            if src_path[-1] != '/':\n                src_path = src_path + \"/\"\n\n            if des_path[-1] != '/':\n                des_path = des_path + \"/\"\n\n            des = des_path + src[len(src_path):]\n\n            if ignore_case:\n                des = des.lower()\n\n            self.upload_file(workspace_id, file, des)\n\n    # isp是传输所选择的运营商出口 可选 ct|cm|un 默认ct\n    def download_file(self, workspace_id, src, dst, isp=\"ct\"):\n        cli, ignore_case = self._get_ftrans_client(workspace_id, isp)\n        if ignore_case:\n            pass\n\n        name, size, mtime, md5 = cli.download_file(dst, src)\n        return FileInfo(name, size, mtime, md5)\n\n    # isp是传输所选择的运营商出口 可选 ct|cm|un 默认ct\n    def list_file(self, workspace_id, prefix, filter_in=None, order_type=None, order_field=None,\n                  page_num=None, page_size=None, isp=\"ct\"):\n        cli, ignore_case = self._get_ftrans_client(workspace_id, isp=isp)\n        if ignore_case:\n            pass\n\n        resp = cli.list_file(prefix,\n                             filter_in=filter_in,\n                             order_type=order_type,\n                             order_field=order_field,\n                             page_num=page_num,\n                             page_size=page_size)\n        return resp\n\n    # isp是传输所选择的运营商出口 可选 ct|cm|un 默认ct\n    def stat_file(self, workspace_id, filename, isp=\"ct\"):\n        cli, ignore_case = self._get_ftrans_client(workspace_id, isp=isp)\n        if ignore_case:\n            pass\n\n        size, mtime = cli.get_file_size(filename)\n        return FileInfo(filename, size, mtime, None)\n\n    # isp是传输所选择的运营商出口 可选 ct|cm|un 默认ct\n    def remove_file(self, workspace_id, filename, isp=\"ct\"):\n        cli, ignore_case = self._get_ftrans_client(workspace_id, isp=isp)\n        if ignore_case:\n            pass\n\n        return cli.remove_file(filename)\n\n    def list_cell_spec(self, params=None):\n        resp = self._call_get(\"ListCellSpec\", params=params)\n        return resp\n\n    def create_render_job(self, params, body):\n        resp = self._call_json(\"CreateRenderJob\", params=params, body=body)\n        return resp\n\n    def list_render_job(self, params):\n        resp = self._call_get(\"ListRenderJob\", params=params)\n        return resp\n\n    def get_render_job(self, params):\n        resp = self._call_get(\"GetRenderJob\", params=params)\n        return resp\n\n    def retry_render_job(self, params, body):\n        resp = self._call_json(\"RetryRenderJob\", params=params, body=body, with_meta=True)\n        return resp\n\n    def auto_full_speed_render_jobs(self, params, body):\n        resp = self._call_json(\"AutoAllRenderJobs\", params=params, body=body, with_meta=True)\n        return resp\n\n    def resume_render_jobs(self, params, body):\n        resp = self._call_json(\"ResumeRenderJobs\", params=params, body=body, with_meta=True)\n        return resp\n\n    def stop_render_jobs(self, params, body):\n        resp = self._call_json(\"StopRenderJobs\", params=params, body=body, with_meta=True)\n        return resp\n\n    def delete_render_jobs(self, params, body):\n        resp = self._call_json(\"DeleteRenderJobs\", params=params, body=body, with_meta=True)\n        return resp\n\n    def full_speed_render_jobs(self, params, body):\n        resp = self._call_json(\"FullSpeedRenderJobs\", params=params, body=body, with_meta=True)\n        return resp\n\n    def update_render_jobs_priority(self, params, body):\n        resp = self._call_json(\"UpdateRenderJobsPriority\", params=params, body=body, with_meta=True)\n        return resp\n\n    def list_job_output(self, params, body=None):\n        resp = self._call_json(\"ListJobOutput\", params=params, body=body)\n        return resp\n\n    def get_job_output(self, params, body=None):\n        resp = self._call_json(\"GetJobOutput\", params=params, body=body)\n        return resp\n\n    def update_job_output(self, params, body=None):\n        resp = self._call_json(\"UpdateJobOutput\", params=params, body=body, with_meta=True)\n        return resp\n\n    def add_render_setting(self, params, body):\n        resp = self._call_json(\"AddRenderSetting\", params=params, body=body)\n        return resp\n\n    def update_render_setting(self, params, body):\n        resp = self._call_json(\"UpdateRenderSetting\", params=params, body=body, with_meta=True)\n        return resp\n\n    def delete_render_setting(self, params):\n        resp = self._call_json(\"DeleteRenderSetting\", params=params, with_meta=True)\n        return resp\n\n    def list_dcc(self):\n        resp = self._call_get(\"ListDccs\")\n        return resp\n\n    def list_render_setting(self, params):\n        resp = self._call_get(\"ListRenderSetting\", params=params)\n        return resp\n\n    def get_render_setting(self, params):\n        resp = self._call_get(\"GetRenderSetting\", params=params)\n        return resp[\"Settings\"][0]\n\n    def list_account_dcc_plugin(self, params):\n        resp = self._call_get(\"ListAccountDccPlugins\", params=params)\n        return resp\n"
  },
  {
    "path": "volcengine/verender/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/verender/ftrans.py",
    "content": "import base64\nimport hashlib\nimport json\nimport os\nimport queue\nimport random\nimport threading\nimport time\nimport uuid\n\nimport urllib3.poolmanager\n\nISP_CT = \"ct\"\nISP_UN = \"un\"\nISP_CM = \"cm\"\nISP_DEFAULT=\"default\"\nVERSION_DEFAULT=\"default\"\nSWITCH_ON = 1\nSWITCH_OFF = 0\nFTRANS_PROTOCOL_TCP = \"tcp\"\nFTRANS_PROTOCOL_UDP = \"udp\"\nFTRANS_HTTP_STATUS_OK = 200\nFTRANS_SIG_EXPIRED_NSEC = 15\nFTRANS_HTTP_METHOD_GET = \"GET\"\nFTRANS_HTTP_METHOD_POST = \"POST\"\nFTRANS_MOUNT_PATH = \"/var/mnt\"\nFTRANS_ORDER_TYPE_ASC = \"asc\"\nFTRANS_ORDER_TYPE_DESC = \"desc\"\nFTRANS_ORDER_FIELD_NAME = \"name\"\nFTRANS_ORDER_FIELD_MTIME = \"mtime\"\nFTRANS_DEFAULT_PAGE_NUM = 1\nFTRANS_DEFAULT_PAGE_SIZE = 10\nFTRANS_DEFAULT_FILTER_IN = \"\"\nFTRANS_PART_SIZE = 4 << 20\nFTRANS_STATUS_WAITING = 0\nFTRANS_STATUS_DOING = 1\nFTRANS_STATUS_FINISHED = 2\nFTRANS_STATUS_FAILED = 3\nFTRANS_DEFAULT_PART_CONCURRENCY = 4\nFTRANS_TRANS_STATUS_COMPLETED = \"completed\"\nFTRANS_TRANS_STATUS_FAILED = \"failed\"\nFTRANS_TRANS_STATUS_CANCELLED = \"cancelled\"\nFTRANS_STATUS_UPLOAD_FILE_NONE = 0x401003\nFTRANS_STATUS_DOWNLOAD_FILE_NONE = 0x402003\nFTRANS_STATUS_SUCC = 0x000000\n\n\nclass FtransException(Exception):\n    pass\n\n\nclass FtransParameterException(FtransException):\n    pass\n\n\nclass FtransNetworkException(FtransException):\n    pass\n\n\nclass FtransHttpResponseException(FtransException):\n    pass\n\n\nclass FtransUploadException(FtransException):\n    pass\n\n\nclass FtransDownloadException(FtransException):\n    pass\n\n\nclass FtransFileNotFound(FtransException):\n    pass\n\n\ndef _split_addr(addr):\n    if addr[0] == '[':\n        segs = addr.split(\":\")\n        ip = \":\".join(segs[0:-1])\n        ip = ip[1:-1]\n        port = int(segs[-1])\n    else:\n        segs = addr.split(\":\")\n        ip = segs[0]\n        port = int(segs[-1])\n\n    return ip, port\n\n\ndef _set_addr_map(addr_map, version, isp, ip, port):\n    if version not in addr_map:\n        addr_map[version] = {}\n\n    if isp not in addr_map[version]:\n        addr_map[version][isp] = []\n\n    found = False\n    for exist_ip, exist_port in addr_map[version][isp]:\n        if ip == exist_ip and port == exist_port:\n            found = True\n            break\n    if not found:\n        addr_map[version][isp].append((ip, port))\n\n\ndef _get_addr_map(addr_map, version, isp):\n    if version not in addr_map:\n        if VERSION_DEFAULT not in addr_map:\n            raise FtransException(\"version not found in addr_map\")\n\n        version = VERSION_DEFAULT\n\n    if isp not in addr_map[version]:\n        if ISP_DEFAULT not in addr_map[version]:\n            raise FtransException(\"isp not found in addr_map\")\n\n        isp = ISP_DEFAULT\n\n    if len(addr_map[version][isp]) == 0:\n        raise FtransException(\"empty addr list\")\n\n    return addr_map[version][isp][random.randint(1, 100) % len(addr_map[version][isp])]\n\ndef _build_addr_map(addr):\n    addr_map = {}\n\n    for elem in addr.split(\";\"):\n        idx = elem.find(\"[\")\n        if idx == -1:\n            # ipv4\n            segs = elem.split(\":\")\n            if len(segs) < 2 or len(segs) > 4:\n                continue\n            if len(segs) == 2:\n                # ip4:port\n                ip, port = _split_addr(elem)\n                _set_addr_map(addr_map, VERSION_DEFAULT, ISP_DEFAULT, ip, port)\n            elif len(segs) == 3:\n                if segs[0] != ISP_CT and segs[0] != ISP_UN and segs[0] != ISP_CM:\n                    # version:ip4:port\n                    ip, port = _split_addr(\":\".join(segs[1:]))\n                    _set_addr_map(addr_map, segs[0], ISP_DEFAULT, ip, port)\n                else:\n                    # isp:ip4:port\n                    ip, port = _split_addr(\":\".join(segs[1:]))\n                    _set_addr_map(addr_map, VERSION_DEFAULT, segs[0], ip, port)\n            else:\n                # version:isp:ip4:port\n                ip, port = _split_addr(\":\".join(segs[2:]))\n                _set_addr_map(addr_map, segs[0], segs[1], ip, port)\n        else:\n            # ipv6\n            if idx == 0:\n                # [ip6]:port\n                ip, port = _split_addr(elem)\n                _set_addr_map(addr_map, VERSION_DEFAULT, ISP_DEFAULT, ip, port)\n            else:\n                segs = elem[:idx-1].split(\":\")\n                if len(segs) > 2:\n                    continue\n\n                ip, port = _split_addr(elem[idx:])\n                if len(segs) == 1:\n                    if segs[0] != ISP_CT and segs[0] != ISP_UN and segs[0] != ISP_CM:\n                        # version:[ip6]:port\n                        _set_addr_map(addr_map, segs[0], ISP_DEFAULT, ip, port)\n                    else:\n                        # isp:[ip6]:port\n                        _set_addr_map(addr_map, VERSION_DEFAULT, segs[0], ip, port)\n                else:\n                    # version:isp:[ip6]:port\n                    _set_addr_map(addr_map, segs[0], segs[1], ip, port)\n    return addr_map\n\n\ndef _save_cert_key(cert_pem, key_pem):\n    random_str = uuid.uuid4().hex\n    cert_file = \"%s.cert\" % random_str\n    with open(cert_file, \"w+\") as f:\n        f.write(cert_pem)\n\n    key_file = \"%s.key\" % random_str\n    with open(key_file, \"w+\") as f:\n        f.write(key_pem)\n    return cert_file, key_file\n\n\ndef _stat_local_file(filename):\n    return os.stat(filename)\n\n\ndef _normalize_filter_in(filter_in):\n    special_chars = {\n        \"\\\\\": \"\\\\\\\\\",\n        \".\": \"\\\\.\",\n        \"*\": \"\\\\*\",\n        \"+\": \"\\\\+\",\n        \"?\": \"\\\\?\",\n        \"[\": \"\\\\[\",\n        \"]\": \"\\\\]\",\n        \"{\": \"\\\\{\",\n        \"}\": \"\\\\}\",\n        \"(\": \"\\\\(\",\n        \")\": \"\\\\)\",\n        \",\": \"\\\\,\"\n    }\n\n    for old in special_chars:\n        filter_in = filter_in.replace(old, special_chars[old])\n\n    return filter_in\n\n\ndef _to_slash(filename):\n    filename = filename.replace(\":\\\\\", \"/\").replace(\"\\\\\", \"/\")\n    if filename[0] == '/':\n        filename = filename[1:]\n\n    return filename\n\n\nclass FtransPartTask(object):\n    def __init__(self, off, size, fft):\n        self.off = off\n        self.size = size\n        self.parent_task = fft\n        self.data = None\n        self.status = FTRANS_STATUS_WAITING\n\n\nclass FtransFileTask(object):\n    def __init__(self, local_file_path, remote_file_path, temp_file_path, file_size, mtime, file):\n        self.local_file_path = local_file_path\n        self.remote_file_path = remote_file_path\n        self.temp_file_path = temp_file_path\n        self.file_size = file_size\n        self.mtime = mtime\n        self.file = file\n        self.parts = None\n        self.status = FTRANS_STATUS_WAITING\n        self.lock = threading.Lock()\n\n    def split_part_task(self):\n        self.parts = queue.Queue()\n\n        start = 0\n        end = self.file_size\n\n        while start < end:\n            size = FTRANS_PART_SIZE\n            if start + size > end:\n                size = end - start\n\n            fpt = FtransPartTask(start, size, self)\n            self.parts.put(fpt)\n            start += size\n\n\nclass FtransWorker(threading.Thread):\n    def __init__(self, func, args_list):\n        self.func = func\n        self.args_list = args_list\n        super().__init__()\n\n    def run(self):\n        while True:\n            try:\n                args = self.args_list.get(timeout=1)\n                self.func(args)\n            except queue.Empty:\n                return\n\n\nclass FtransService(object):\n    def __init__(self, bucket, acl_token, server_name, s10_server=None, cert_pem=None, key_pem=None, isp=\"ct\",\n                 client_addr=None, s2_server=None, proxy_addr=None,\n                 client_acl_token=None):\n        self._ftrans_bucket = bucket\n        self._ftrans_acl_token = acl_token\n        self._ftrans_server_name = server_name\n        self._ftrans_s10_addr = None\n        self._ftrans_s10_port = None\n        self._ftrans_s10_cert_file = None\n        self._ftrans_s10_key_file = None\n        self._ftrans_client_addr = None\n        self._ftrans_client_port = None\n        self._ftrans_s2_addr = None\n        self._ftrans_s2_port = None\n        self._ftrans_proxy_addr = None\n        self._ftrans_proxy_port = None\n        self._ftrans_client_config = None\n\n        if s10_server is not None:\n            try:\n                addr_map = _build_addr_map(s10_server)\n            except Exception:\n                raise FtransParameterException(\"invalid s10 server addr %s\" % s10_server)\n\n            try:\n                s10_addr, s10_port = _get_addr_map(addr_map, VERSION_DEFAULT, isp)\n            except:\n                raise FtransParameterException(\"no s10 server found of isp[%s]\" % isp )\n\n            if cert_pem is None or key_pem is None:\n                raise FtransParameterException(\"cert_pem and key_pem must be specified when s10_server is set\")\n\n            cert_file, key_file = _save_cert_key(cert_pem, key_pem)\n\n            self._ftrans_s10_addr = s10_addr\n            self._ftrans_s10_port = s10_port\n            self._ftrans_s10_cert_file = cert_file\n            self._ftrans_s10_key_file = key_file\n            self._ftrans_s10_conn = urllib3.HTTPSConnectionPool(\n                self._ftrans_s10_addr,\n                self._ftrans_s10_port,\n                cert_file=self._ftrans_s10_cert_file,\n                key_file=self._ftrans_s10_key_file,\n                assert_hostname=self._ftrans_server_name\n            )\n\n        if client_addr is not None:\n            if s2_server is None:\n                raise FtransParameterException(\"s2_server must be specified when client_addr is set\")\n\n            try:\n                client_ip, client_port = _split_addr(client_addr)\n            except Exception:\n                raise FtransParameterException(\"invalid client_addr [%s]\" % client_addr)\n\n            client_config = FtransService._get_ftrans_client_config(client_ip, client_port, client_acl_token)\n            version = client_config[\"Version\"]\n            protocol = FTRANS_PROTOCOL_UDP\n            if (client_config.get(\"RuntimeTransTudpSwitch\", \"\") == SWITCH_OFF) and \\\n                    (client_config.get(\"RuntimeTransTtcpSwitch\", \"\") == SWITCH_ON):\n                protocol = FTRANS_PROTOCOL_TCP\n\n            try:\n                addr_map = _build_addr_map(s2_server)\n            except Exception:\n                raise FtransParameterException(\"invalid s2_server [%s]\" % s2_server)\n\n            try:\n                s2_addr, s2_port = _get_addr_map(addr_map, version, isp)\n            except:\n                raise FtransParameterException(\"no s2 addr found of version[%s] isp[%s]\" % (version, isp))\n            proxy_ip = None\n            proxy_port = None\n            if proxy_addr is not None:\n                try:\n                    proxy_manager_addr, proxy_manager_port = _split_addr(proxy_addr)\n                except Exception:\n                    raise FtransParameterException(\"invalid proxy_addr[%s]\" % proxy_addr)\n\n                proxy_list = FtransService._get_ftrans_proxy_list(proxy_manager_addr, proxy_manager_port)\n                found = False\n\n                for p in proxy_list:\n                    if p[\"TargetDomain\"] == s2_addr and p[\"TargetPort\"] == s2_port and p[\"Type\"] == protocol and \\\n                            p[\"State\"] == \"运行中\":\n                        found = True\n                        proxy_ip = p[\"IP\"]\n                        proxy_port = p[\"Port\"]\n                        break\n\n                if not found:\n                    proxy_list = FtransService._create_ftrans_proxy(proxy_manager_addr, proxy_manager_port,\n                                                                    s2_addr, s2_port, protocol)\n                    proxy_ip = proxy_list[0][\"IP\"]\n                    proxy_port = proxy_list[0][\"Port\"]\n\n            self._ftrans_client_addr = client_ip\n            self._ftrans_client_port = client_port\n            self._ftrans_s2_addr = s2_addr\n            self._ftrans_s2_port = s2_port\n            self._ftrans_client_config = client_config\n            self._ftrans_proxy_addr = proxy_ip\n            self._ftrans_proxy_port = proxy_port\n            self._ftrans_client_acl_token = client_acl_token\n\n    def __del__(self):\n        os.remove(self._ftrans_s10_cert_file)\n        os.remove(self._ftrans_s10_key_file)\n\n    @staticmethod\n    def _gen_ftrans_sig(op, t, token):\n        if token is None:\n            token = \"4d0c1b2513cb82263814e10bf2f136ed\"\n        s = \"%s@ftrans/%s@%d\" % (token.lower(), op.lower(), t)\n        return hashlib.md5(s.encode()).hexdigest()\n\n    @staticmethod\n    def _get_ftrans_client_config(client_addr, client_port, client_acl_token):\n        op = \"config\"\n        t = int(time.time()) + FTRANS_SIG_EXPIRED_NSEC\n        sig = FtransService._gen_ftrans_sig(op, t, client_acl_token)\n        url = \"http://%s:%d/v2/ftrans?op=%s&t=%d&sig=%s\" % (client_addr, client_port, op, t, sig)\n\n        resp = FtransService._do_request(FTRANS_HTTP_METHOD_POST, url)\n\n        if resp.status != FTRANS_HTTP_STATUS_OK:\n            raise FtransHttpResponseException(\"invalid http response status %d when get client config\" % resp.status)\n\n        return json.loads(resp.data)\n\n    @staticmethod\n    def _get_ftrans_proxy_list(proxy_manager_addr, proxy_manager_port):\n        url = \"http://%s:%d/api/v1/proxy-list\" % (proxy_manager_addr, proxy_manager_port)\n\n        resp = FtransService._do_request(FTRANS_HTTP_METHOD_GET, url)\n\n        if resp.status != FTRANS_HTTP_STATUS_OK:\n            raise FtransHttpResponseException(\"invalid http response %d when get proxy list\" % resp.status)\n\n        return json.loads(resp.data)\n\n    @staticmethod\n    def _create_ftrans_proxy(proxy_manager_addr, proxy_manager_port, s2_addr, s2_port, protocol):\n        url = \"http://%s:%d/api/v1/proxy\" % (proxy_manager_addr, proxy_manager_port)\n        data = [\n            {\n                \"TargetDomain\": s2_addr,\n                \"TargetPort\": s2_port,\n                \"Type\": protocol\n            }\n        ]\n\n        resp = FtransService._do_request(FTRANS_HTTP_METHOD_POST, url, body=json.dumps(data))\n\n        if resp.status != FTRANS_HTTP_STATUS_OK:\n            raise FtransHttpResponseException(\"invalid response status [%d] when create proxy\" % resp.status)\n\n        return json.loads(resp.data)\n\n    @staticmethod\n    def _do_request(method, url, headers=None, body=None, conn=None):\n        if conn is None:\n            conn = urllib3.PoolManager()\n        try:\n            resp = conn.request(method, url, headers=headers, body=body)\n        except Exception as ex:\n            raise FtransNetworkException(\"do request %s failed %s\" % (url, str(ex)))\n\n        return resp\n\n    def _get_full_path(self, filename):\n        full_path = \"%s/%s/%s\" % (FTRANS_MOUNT_PATH, self._ftrans_bucket, filename)\n        return full_path\n\n    def _ftrans_client_enable(self):\n        return (self._ftrans_client_addr is not None) and (self._ftrans_client_port is not None)\n\n    def _upload_file_s2(self, local_file_path, remote_file_path):\n        op = \"upload\"\n        t = int(time.time()) + FTRANS_SIG_EXPIRED_NSEC\n        sig = FtransService._gen_ftrans_sig(op, t, self._ftrans_client_acl_token)\n        url = \"http://%s:%d/v2/ftrans?op=%s&t=%d&sig=%s\" % (self._ftrans_client_addr, self._ftrans_client_port,\n                                                            op, t, sig)\n        des = self._get_full_path(remote_file_path)\n        if self._ftrans_proxy_addr is not None and self._ftrans_proxy_port is not None:\n            server_address = \"%s:%d\" % (self._ftrans_proxy_addr, self._ftrans_proxy_port)\n        else:\n            server_address = \"%s:%d\" % (self._ftrans_s2_addr, self._ftrans_s2_port)\n        body = {\n            \"serverName\": self._ftrans_server_name,\n            \"serverAddress\": server_address,\n            \"files\": [\n                {\n                    \"transId\": uuid.uuid4().hex,\n                    \"aclToken\": self._ftrans_acl_token,\n                    \"src\": local_file_path,\n                    \"des\": des\n                }\n            ]\n        }\n\n        resp = FtransService._do_request(FTRANS_HTTP_METHOD_POST, url, body=json.dumps(body))\n\n        if resp.status != FTRANS_HTTP_STATUS_OK:\n            raise FtransHttpResponseException(\"invalid http status %d when submit upload file request\" % resp.status)\n\n        upload_info = json.loads(resp.data)\n        upload_info[\"serverName\"] = self._ftrans_server_name\n        upload_info[\"serverAddress\"] = server_address\n\n        while True:\n            resp = self._status_upload_s2(upload_info)\n\n            upload_status = resp[\"files\"][0]\n\n            if upload_status[\"transId\"] != upload_info[\"files\"][0][\"transId\"]:\n                continue\n\n            if upload_status[\"statusCode\"] not in [FTRANS_STATUS_SUCC, FTRANS_STATUS_UPLOAD_FILE_NONE]:\n                raise FtransUploadException(\"upload file %s failed %s\" % (local_file_path, upload_status[\"statusMsg\"]))\n\n            if upload_status[\"statusCode\"] == FTRANS_STATUS_SUCC:\n                trans_status = upload_status[\"transStatus\"]\n                if trans_status == FTRANS_TRANS_STATUS_COMPLETED:\n                    break\n                elif (trans_status == FTRANS_TRANS_STATUS_FAILED) or (trans_status == FTRANS_TRANS_STATUS_CANCELLED):\n                    raise FtransUploadException(\n                        \"upload file %s failed %s\" % (local_file_path, upload_status[\"statusMsg\"])\n                    )\n\n            time.sleep(1)\n\n        stat_info = _stat_local_file(local_file_path)\n        return remote_file_path, stat_info.st_size, int(stat_info.st_mtime * 1e6), None\n\n    def _download_file_s2(self, local_file_path, remote_file_path):\n        op = \"download\"\n        t = int(time.time()) + FTRANS_SIG_EXPIRED_NSEC\n        sig = FtransService._gen_ftrans_sig(op, t, self._ftrans_client_acl_token)\n        url = \"http://%s:%d/v2/ftrans?op=%s&t=%d&sig=%s\" % (self._ftrans_client_addr, self._ftrans_client_port,\n                                                            op, t, sig)\n        src = self._get_full_path(remote_file_path)\n        if self._ftrans_proxy_addr is not None and self._ftrans_proxy_port is not None:\n            server_address = \"%s:%d\" % (self._ftrans_proxy_addr, self._ftrans_proxy_port)\n        else:\n            server_address = \"%s:%d\" % (self._ftrans_s2_addr, self._ftrans_s2_port)\n        body = {\n            \"serverName\": self._ftrans_server_name,\n            \"serverAddress\": server_address,\n            \"files\": [\n                {\n                    \"transId\": uuid.uuid4().hex,\n                    \"aclToken\": self._ftrans_acl_token,\n                    \"src\": src,\n                    \"des\": local_file_path\n                }\n            ]\n        }\n\n        resp = FtransService._do_request(FTRANS_HTTP_METHOD_POST, url, body=json.dumps(body))\n\n        if resp.status != FTRANS_HTTP_STATUS_OK:\n            raise FtransHttpResponseException(\"invalid http status %d when submit download file request\" % resp.status)\n\n        download_info = json.loads(resp.data)\n        download_info[\"serverName\"] = self._ftrans_server_name\n        download_info[\"serverAddress\"] = server_address\n\n        while True:\n            resp = self._status_download_s2(download_info)\n\n            download_status = resp[\"files\"][0]\n\n            if download_status[\"transId\"] != download_info[\"files\"][0][\"transId\"]:\n                continue\n\n            if download_status[\"statusCode\"] not in [FTRANS_STATUS_SUCC, FTRANS_STATUS_DOWNLOAD_FILE_NONE]:\n                raise FtransUploadException(\n                    \"upload file %s failed %s\" % (local_file_path, download_status[\"statusMsg\"]))\n\n            if download_status[\"statusCode\"] == FTRANS_STATUS_SUCC:\n                trans_status = download_status[\"transStatus\"]\n                if trans_status == FTRANS_TRANS_STATUS_COMPLETED:\n                    break\n                elif (trans_status == FTRANS_TRANS_STATUS_FAILED) or (trans_status == FTRANS_TRANS_STATUS_CANCELLED):\n                    raise FtransUploadException(\n                        \"upload file %s failed %s\" % (local_file_path, download_status[\"statusMsg\"])\n                    )\n\n            time.sleep(1)\n\n        stat_info = _stat_local_file(local_file_path)\n        return remote_file_path, stat_info.st_size, int(stat_info.st_mtime * 1e6), None\n\n    def _status_upload_s2(self, upload_info):\n        op = \"status_upload\"\n        t = int(time.time()) + FTRANS_SIG_EXPIRED_NSEC\n        sig = FtransService._gen_ftrans_sig(op, t, self._ftrans_client_acl_token)\n        url = \"http://%s:%d/v2/ftrans?op=%s&t=%d&sig=%s\" % (self._ftrans_client_addr, self._ftrans_client_port,\n                                                            op, t, sig)\n        resp = FtransService._do_request(FTRANS_HTTP_METHOD_POST, url,\n                                         body=json.dumps(upload_info))\n\n        if resp.status != FTRANS_HTTP_STATUS_OK:\n            raise FtransHttpResponseException(\"invalid http status %d when status upload file request\" % resp.status)\n\n        return json.loads(resp.data)\n\n    def _status_download_s2(self, download_info):\n        op = \"status_download\"\n        t = int(time.time()) + FTRANS_SIG_EXPIRED_NSEC\n        sig = FtransService._gen_ftrans_sig(op, t, self._ftrans_client_acl_token)\n        url = \"http://%s:%d/v2/ftrans?op=%s&t=%d&sig=%s\" % (self._ftrans_client_addr, self._ftrans_client_port,\n                                                            op, t, sig)\n        resp = FtransService._do_request(FTRANS_HTTP_METHOD_POST, url,\n                                         body=json.dumps(download_info))\n\n        if resp.status != FTRANS_HTTP_STATUS_OK:\n            raise FtransHttpResponseException(\"invalid http status %d when status download file request\" % resp.status)\n\n        return json.loads(resp.data)\n\n    def _list_file_s2(self, prefix, filter_in, order_type, order_field, page_num, page_size):\n        op = \"list_dir\"\n        t = int(time.time()) + FTRANS_SIG_EXPIRED_NSEC\n        sig = FtransService._gen_ftrans_sig(op, t, self._ftrans_client_acl_token)\n        url = \"http://%s:%d/v2/ftrans?op=%s&t=%d&sig=%s\" % (self._ftrans_client_addr, self._ftrans_client_port,\n                                                            op, t, sig)\n        des = self._get_full_path(prefix)\n        if self._ftrans_proxy_addr is not None and self._ftrans_proxy_port is not None:\n            server_address = \"%s:%d\" % (self._ftrans_proxy_addr, self._ftrans_proxy_port)\n        else:\n            server_address = \"%s:%d\" % (self._ftrans_s2_addr, self._ftrans_s2_port)\n\n        body = {\n            \"serverName\": self._ftrans_server_name,\n            \"serverAddress\": server_address,\n            \"aclToken\": self._ftrans_acl_token,\n            \"des\": des,\n            \"filterIn\": filter_in,\n            \"sortBy\": order_field,\n            \"orderBy\": order_type,\n            \"pageNo\": page_num,\n            \"pageSize\": page_size\n        }\n\n        resp = FtransService._do_request(FTRANS_HTTP_METHOD_POST, url,\n                                         body=json.dumps(body))\n\n        if resp.status != FTRANS_HTTP_STATUS_OK:\n            raise FtransHttpResponseException(\"invalid http status %d when list dir request\" % resp.status)\n\n        files = json.loads(resp.data)\n        total = files[\"matchedNum\"]\n        records = files[\"fileNodes\"]\n        for f in records:\n            f[\"mtime\"] = mtime = int(time.mktime(time.strptime(f[\"mtime\"], \"%Y-%m-%d %H:%M:%S\")) * 1e6)\n\n        return total, records\n\n    def _get_file_size_s2(self, filename):\n        prefix = os.path.dirname(filename)\n        name = os.path.basename(filename)\n        filter_in = _normalize_filter_in(name)\n        total_num, file_info_list = self._list_file_s2(prefix, filter_in, FTRANS_ORDER_TYPE_ASC, FTRANS_ORDER_FIELD_MTIME,\n                                                       FTRANS_DEFAULT_PAGE_NUM, FTRANS_DEFAULT_PAGE_SIZE)\n        if total_num == 0:\n            raise FtransFileNotFound(\"file [%s] not found\" % filename)\n        found = False\n        size = 0\n        mtime = 0\n        for f in file_info_list:\n            if f[\"name\"] == name:\n                size = f[\"size\"]\n                mtime = f[\"mtime\"]\n                found = True\n                break\n\n        if not found:\n            raise FtransFileNotFound(\"file [%s] not found\" % filename)\n\n        return size, mtime\n\n    def _remove_file_s2(self, filename):\n        op = \"remove_file\"\n        t = int(time.time()) + FTRANS_SIG_EXPIRED_NSEC\n        sig = FtransService._gen_ftrans_sig(op, t, self._ftrans_client_acl_token)\n        url = \"http://%s:%d/v2/ftrans?op=%s&t=%d&sig=%s\" % (self._ftrans_client_addr, self._ftrans_client_port,\n                                                            op, t, sig)\n        des = self._get_full_path(filename)\n        if self._ftrans_proxy_addr is not None and self._ftrans_proxy_port is not None:\n            server_address = \"%s:%d\" % (self._ftrans_proxy_addr, self._ftrans_proxy_port)\n        else:\n            server_address = \"%s:%d\" % (self._ftrans_s2_addr, self._ftrans_s2_port)\n        body = {\n            \"serverName\": self._ftrans_server_name,\n            \"serverAddress\": server_address,\n            \"aclToken\": self._ftrans_acl_token,\n            \"des\": des,\n        }\n\n        resp = FtransService._do_request(FTRANS_HTTP_METHOD_POST, url,\n                                         body=json.dumps(body))\n\n        if resp.status != FTRANS_HTTP_STATUS_OK:\n            raise FtransHttpResponseException(\"invalid http status %d when remove file %s\" % (resp.status, filename))\n\n        return\n\n    def _upload_part_s10(self, fpt):\n        with fpt.parent_task.lock:\n            if fpt.parent_task.status == FTRANS_STATUS_FAILED:\n                raise FtransUploadException(\"some part upload failed for %s\" % fpt.parent_task.local_file_path)\n            fpt.parent_task.file.seek(fpt.off)\n            fpt.data = fpt.parent_task.file.read(fpt.size)\n\n        try:\n            self._upload_file_part_s10(fpt)\n        except Exception as ex:\n            with fpt.parent_task.lock:\n                fpt.parent_task.status = FTRANS_STATUS_FAILED\n            raise ex\n\n    def _download_part_s10(self, fpt):\n        with fpt.parent_task.lock:\n            if fpt.parent_task.status == FTRANS_STATUS_FAILED:\n                raise FtransDownloadException(\"some part download failed for %s\" % fpt.parent_task.remote_file_path)\n        try:\n            file_size, mtime, data = self._download_file_part_s10(fpt)\n            if file_size != fpt.parent_task.file_size or mtime != fpt.parent_task.mtime:\n                raise FtransDownloadException(\n                    \"file %s has been modified during downloading\" % fpt.parent_task.remote_file_path)\n            with fpt.parent_task.lock:\n                fpt.parent_task.file.seek(fpt.off)\n                fpt.parent_task.file.write(data)\n        except Exception as ex:\n            with fpt.parent_task.lock:\n                fpt.parent_task.status = FTRANS_STATUS_FAILED\n            raise ex\n\n    def _upload_file_s10(self, local_file_path, remote_file_path):\n        if not os.path.exists(local_file_path):\n            raise FtransFileNotFound(\"local file %s not found\" % local_file_path)\n\n        fi = os.stat(local_file_path)\n        file_size = fi.st_size\n        mtime = int(fi.st_mtime * 1e6)\n\n        des = _to_slash(remote_file_path)\n        remote_file_size, remote_mtime = self._get_file_size_s10(des)\n        # local_file and remote_file is same, just return success\n        if (file_size == remote_file_size) and (mtime == remote_mtime):\n            return des, file_size, mtime, None\n\n        # if local_file_path is dir, just make it\n        if os.path.isdir(local_file_path):\n            self._make_dir_s10(des, mtime)\n            return des, 0, mtime, None\n\n        # empty file, just touch it\n        if file_size == 0:\n            self._touch_file_s10(des, mtime)\n            return des, 0, mtime, None\n\n        f = open(local_file_path, \"rb\")\n        temp_file_path = \"%s_%s\" % (remote_file_path, uuid.uuid4().hex)\n        fft = FtransFileTask(local_file_path, des, temp_file_path, file_size, mtime, f)\n        fft.split_part_task()\n\n        fft.status = FTRANS_STATUS_DOING\n        worker_list = []\n\n        i = 0\n        while i < FTRANS_DEFAULT_PART_CONCURRENCY:\n            worker = FtransWorker(self._upload_part_s10, fft.parts)\n            worker.start()\n            worker_list.append(worker)\n            i += 1\n\n        for worker in worker_list:\n            worker.join()\n\n        if fft.status == FTRANS_STATUS_DOING:\n            fft.status = FTRANS_STATUS_FINISHED\n        else:\n            fft.status = FTRANS_STATUS_FAILED\n        fft.file.close()\n\n        if fft.status != FTRANS_STATUS_FINISHED:\n            raise FtransUploadException(\"upload file %s failed\" % local_file_path)\n\n        self._rename_file_s10(fft.temp_file_path, fft.remote_file_path)\n        return fft.remote_file_path, fft.file_size, fft.mtime, None\n\n    def _download_file_s10(self, local_file_path, remote_file_path):\n        file_size, mtime = self._get_file_size_s10(remote_file_path)\n\n        if (file_size == 0) and (mtime == 0):\n            raise FtransFileNotFound(\"file %s not found\" % remote_file_path)\n\n        if os.path.exists(local_file_path):\n            fi = os.stat(local_file_path)\n\n            # local_file_path and remote_file is same\n            if (fi.st_size == file_size) and (int(fi.st_mtime * 1e6) == mtime):\n                return remote_file_path, file_size, mtime, None\n            else:\n                # local_file_path exists and not same as remote_file_path, just delete it and download\n                os.remove(local_file_path)\n\n        temp_file_path = \"%s_%s\" % (local_file_path, uuid.uuid4().hex)\n        save_dir = os.path.dirname(temp_file_path)\n        if not os.path.exists(save_dir):\n            os.makedirs(save_dir)\n\n        f = open(temp_file_path, \"wb+\")\n        if file_size == 0:\n            f.close()\n            os.rename(temp_file_path, local_file_path)\n\n        fft = FtransFileTask(local_file_path, remote_file_path, temp_file_path, file_size, mtime, f)\n        fft.split_part_task()\n\n        i = 0\n        fft.status = FTRANS_STATUS_DOING\n        worker_list = []\n        i = 0\n        while i < FTRANS_DEFAULT_PART_CONCURRENCY:\n            worker = FtransWorker(self._download_part_s10, fft.parts)\n            worker.start()\n            worker_list.append(worker)\n            i += 1\n\n        for worker in worker_list:\n            worker.join()\n\n        if fft.status == FTRANS_STATUS_DOING:\n            fft.status = FTRANS_STATUS_FINISHED\n        else:\n            fft.status = FTRANS_STATUS_FAILED\n        fft.file.close()\n\n        if fft.status != FTRANS_STATUS_FINISHED:\n            raise FtransDownloadException(\"download file %s failed\" % remote_file_path)\n\n        os.rename(fft.temp_file_path, fft.local_file_path)\n        os.utime(fft.local_file_path, (time.time(), float(mtime) / 1e6))\n\n        return remote_file_path, file_size, mtime, None\n\n    def _upload_file_part_s10(self, fpt):\n        op = \"upload_file\"\n        des = base64.b64encode(bytes(self._get_full_path(fpt.parent_task.temp_file_path), encoding=\"UTF-8\")).decode(\n            encoding=\"UTF-8\")\n        offset = fpt.off\n        size = fpt.size\n        mtime = fpt.parent_task.mtime\n        acl_token = self._ftrans_acl_token\n\n        url = \"/s10/p2/ftrans?op=%s&des=%s&offset=%d&size=%d&mtime=%d&acltoken=%s\" % (op, des, offset, size, mtime,\n                                                                                      acl_token)\n        resp = self._do_request(FTRANS_HTTP_METHOD_POST, url, conn=self._ftrans_s10_conn, body=fpt.data)\n        if resp.status != FTRANS_HTTP_STATUS_OK:\n            raise FtransHttpResponseException(\"invalid http response status [%d] when upload_file_s10\" % resp.status)\n\n        return\n\n    def _download_file_part_s10(self, fpt):\n        op = \"download_file\"\n        src = base64.b64encode(bytes(self._get_full_path(fpt.parent_task.remote_file_path), encoding=\"UTF-8\")).decode(\n            encoding=\"UTF-8\")\n        offset = fpt.off\n        size = fpt.size\n        acl_token = self._ftrans_acl_token\n\n        url = \"/s10/p2/ftrans?op=%s&src=%s&offset=%d&size=%d&acltoken=%s\" % (op, src, offset, size, acl_token)\n        resp = self._do_request(FTRANS_HTTP_METHOD_POST, url, conn=self._ftrans_s10_conn, body=fpt.data)\n        if resp.status != FTRANS_HTTP_STATUS_OK:\n            raise FtransHttpResponseException(\"invalid http response status [%d] when download_file_s10\" % resp.status)\n\n        file_size = int(resp.headers.get(\"Fsize\"))\n        mtime = int(resp.headers.get(\"Mtime\"))\n\n        return file_size, mtime, resp.data\n\n    def _list_file_s10(self, prefix, filter_in, order_type, order_field, page_num, page_size):\n        op = \"list_dir\"\n        src = base64.b64encode(bytes(self._get_full_path(prefix), encoding=\"UTF-8\")).decode(encoding=\"UTF-8\")\n        keyword = base64.b64encode(bytes(filter_in, encoding=\"UTF-8\")).decode(encoding=\"UTF-8\")\n        url = \"/s10/p2/ftrans?op=%s&src=%s&filterIn=%s&orderBy=%s&sortBy=%s&pageNo=%d&pageSize=%d&\" \\\n              \"acltoken=%s\" % (\n                  op, src, keyword, order_type, order_field, page_num, page_size, self._ftrans_acl_token\n              )\n\n        resp = self._do_request(FTRANS_HTTP_METHOD_POST, url, conn=self._ftrans_s10_conn)\n        if resp.status != FTRANS_HTTP_STATUS_OK:\n            raise FtransHttpResponseException(\"invalid response status [%d] when list_file_s10\" % resp.status)\n\n        total = int(resp.headers.get(\"matchedNum\"))\n        records = json.loads(resp.data)\n\n        for f in records:\n            f[\"mtime\"] = int(time.mktime(time.strptime(f[\"mtime\"], \"%Y-%m-%d %H:%M:%S\")) * 1e6)\n\n        return total, records\n\n    def _remove_file_s10(self, filename):\n        op = \"remove_file\"\n        des = base64.b64encode(bytes(self._get_full_path(filename), encoding=\"UTF-8\")).decode(encoding=\"UTF-8\")\n        acl_token = self._ftrans_acl_token\n\n        url = \"/s10/p2/ftrans?op=%s&des=%s&acltoken=%s\" % (op, des, acl_token)\n\n        resp = self._do_request(FTRANS_HTTP_METHOD_POST, url, conn=self._ftrans_s10_conn)\n        if resp.status != FTRANS_HTTP_STATUS_OK:\n            raise FtransHttpResponseException(\"invalid response status [%d] when remove_file_s10\" % resp.status)\n\n        return\n\n    def _get_file_size_s10(self, filename):\n        op = \"size_file\"\n        src = base64.b64encode(bytes(self._get_full_path(filename), encoding=\"UTF-8\")).decode(encoding=\"UTF-8\")\n        acl_token = self._ftrans_acl_token\n\n        url = \"/s10/p2/ftrans?op=%s&src=%s&acltoken=%s\" % (op, src, acl_token)\n\n        resp = self._do_request(FTRANS_HTTP_METHOD_POST, url, conn=self._ftrans_s10_conn)\n        if resp.status != FTRANS_HTTP_STATUS_OK:\n            raise FtransHttpResponseException(\"invalid response status [%d] when get_file_size_s10\" % resp.status)\n\n        file_size = int(resp.headers.get(\"Fsize\"))\n        mtime = int(resp.headers.get(\"Mtime\"))\n\n        return file_size, mtime\n\n    def _make_dir_s10(self, dir_name, mtime):\n        op = \"make_dir\"\n        des = base64.b64encode(bytes(self._get_full_path(dir_name), encoding=\"UTF-8\")).decode(encoding=\"UTF-8\")\n        acl_token = self._ftrans_acl_token\n        url = \"/s10/p2/ftrans?op=%s&des=%s&acltoken=%s&mtime=%d\" % (op, des, acl_token, mtime)\n\n        resp = self._do_request(FTRANS_HTTP_METHOD_POST, url, conn=self._ftrans_s10_conn)\n        if resp.status != FTRANS_HTTP_STATUS_OK:\n            raise FtransHttpResponseException(\"invalid response status [%d] when make_dir_s10\" % resp.status)\n\n        return\n\n    def _rename_file_s10(self, src, des):\n        op = \"rename_file\"\n        src = base64.b64encode(bytes(self._get_full_path(src), encoding=\"UTF-8\")).decode(encoding=\"UTF-8\")\n        des = base64.b64encode(bytes(self._get_full_path(des), encoding=\"UTF-8\")).decode(encoding=\"UTF-8\")\n        acl_token = self._ftrans_acl_token\n\n        url = \"/s10/p2/ftrans?op=%s&src=%s&des=%s&acltoken=%s\" % (op, src, des, acl_token)\n\n        resp = self._do_request(FTRANS_HTTP_METHOD_POST, url, conn=self._ftrans_s10_conn)\n        if resp.status != FTRANS_HTTP_STATUS_OK:\n            raise FtransHttpResponseException(\"invalid response status [%d] when rename_file_s10\" % resp.status)\n\n        return\n\n    def _touch_file_s10(self, des, mtime):\n        op = \"touch_file\"\n        des = base64.b64encode(bytes(self._get_full_path(des), encoding=\"UTF-8\")).decode(encoding=\"UTF-8\")\n        acl_token = self._ftrans_acl_token\n\n        url = \"/s10/p2/ftrans?op=%s&des=%s&acltoken=%s&mtime=%d\" % (op, des, acl_token, mtime)\n\n        resp = self._do_request(FTRANS_HTTP_METHOD_POST, url, conn=self._ftrans_s10_conn)\n        if resp.status != FTRANS_HTTP_STATUS_OK:\n            raise FtransHttpResponseException(\"invalid response status [%s] when touch_file_s10\" % resp.status)\n\n        return\n\n    def upload_file(self, local_file_path, remote_file_path):\n        if remote_file_path == \"\":\n            raise FtransException(\"invalid des [%s]\" % remote_file_path)\n        remote_file_path = _to_slash(remote_file_path)\n        if self._ftrans_client_enable():\n            return self._upload_file_s2(local_file_path, remote_file_path)\n        else:\n            return self._upload_file_s10(local_file_path, remote_file_path)\n\n    def download_file(self, local_file_path, remote_file_path):\n        if remote_file_path == \"\":\n            raise FtransException(\"invalid des [%s]\" % remote_file_path)\n        remote_file_path = _to_slash(remote_file_path)\n        if self._ftrans_client_enable():\n            return self._download_file_s2(local_file_path, remote_file_path)\n        else:\n            return self._download_file_s10(local_file_path, remote_file_path)\n\n    def get_file_size(self, filename):\n        if filename == \"\":\n            raise FtransException(\"invalid des [%s]\" % filename)\n        filename = _to_slash(filename)\n        if self._ftrans_client_enable():\n            return self._get_file_size_s2(filename)\n        else:\n            return self._get_file_size_s10(filename)\n\n    def get_file_md5(self, filename):\n        # may be supported in future\n        return None\n\n    def remove_file(self, filename):\n        if filename == \"\":\n            raise FtransException(\"invalid des [%s]\" % filename)\n        filename = _to_slash(filename)\n        if self._ftrans_client_enable():\n            return self._remove_file_s2(filename)\n        else:\n            return self._remove_file_s10(filename)\n\n    def list_file(self, prefix, filter_in=None, order_type=None, order_field=None, page_num=None, page_size=None):\n        if prefix != \"\":\n            prefix = _to_slash(prefix)\n        if filter_in is None:\n            filter_in = FTRANS_DEFAULT_FILTER_IN\n\n        if order_type is None:\n            order_type = FTRANS_ORDER_TYPE_ASC\n\n        if order_field is None:\n            order_field = FTRANS_ORDER_FIELD_NAME\n\n        if page_num is None:\n            page_num = FTRANS_DEFAULT_PAGE_NUM\n\n        if page_size is None:\n            page_size = FTRANS_DEFAULT_PAGE_SIZE\n\n        if self._ftrans_client_enable():\n            return self._list_file_s2(prefix, filter_in, order_type, order_field, page_num, page_size)\n        else:\n            return self._list_file_s10(prefix, filter_in, order_type, order_field, page_num, page_size)\n"
  },
  {
    "path": "volcengine/viking_db/Collection.py",
    "content": "# coding:utf-8\nimport json\nfrom typing import Union, List\nfrom volcengine.viking_db.common import Data, RetryOption\n\n\nclass Collection(object):\n    def __init__(self, collection_name, fields, viking_db_service, primary_key, indexes=None, stat=None,\n                 description=\"\", create_time=None, update_time=None, update_person=None, retry_option=None, vectorize=None):\n        \"\"\"\n        :param collection_name: the name of VikingDB collection.\n        :type collection_name: str\n        :param fields: fields(schema) defination, including field_name, field_type, default_val, and dim or pipeline_name for embedding related field\n        :type fields: list[Field]\n        :param viking_db_service: VikingDBService instance.\n        :type viking_db_service: VikingDBService\n        :param primary_key: field_name of primary key in collection, or \"__AUTO_ID__\" to use auto int64 id.\n        :type primary_key: str\n        :param retry_option: retry option.\n        :type retry_option: RetryOption\n        \"\"\"\n        self.collection_name = collection_name\n        self.fields = fields\n        self.viking_db_service = viking_db_service\n        self.primary_key = primary_key\n        self.vectorize = vectorize\n        if indexes is not None:\n            self.indexes = indexes\n        else:\n            self.indexes = []\n        if stat is not None:\n            self.stat = stat\n        else:\n            self.stat = {}\n        self.description = description\n        if create_time is not None:\n            self.create_time = create_time\n        if update_time is not None:\n            self.update_time = update_time\n        if update_person is not None:\n            self.update_person = update_person\n        self._is_client = False\n        self.retry_option = retry_option if retry_option else RetryOption()\n\n    def upsert_data(self, data: Union[Data, List[Data]], async_upsert=False, retry=True):\n        \"\"\"\n        Insert and overwrite data in fields within a collection\n\n        :param data: The data you want to insert or overwrite.\n        :type data: Data or list[Data]\n        :rtype: None\n        :param async_upsert: Whether to use async upsert, if enabled, writing will be faster but the data will not be updated in index immediately but after next round of index building finished.\n        :type async_upsert: bool\n        :param retry: Whether to retry when QuotaLimiterException occurs.\n        :type retry: bool\n        \"\"\"\n        remaining = self.retry_option.new_remaining(retry)\n        if isinstance(data, Data):\n            fields_arr = [data.fields]\n            ttl = 0\n            if data.TTL is not None:\n                ttl = data.TTL\n            params = {\"collection_name\": self.collection_name, \"fields\": fields_arr, \"ttl\": ttl}\n            if async_upsert:\n                params[\"async\"]=True\n            # print(params)\n            res = self.viking_db_service._retry_request(\"UpsertData\", {}, json.dumps(params), remaining, self.retry_option)\n        elif isinstance(data, list):\n            fields_arr = []\n            ttl = 0\n            record = {}\n            for item in data:\n                if item.TTL in record:\n                    fields = record[item.TTL]\n                    fields.append(item.fields)\n                    record[item.TTL] = fields\n                else:\n                    record[item.TTL] = [item.fields]\n            for item in record:\n                params = {\"collection_name\": self.collection_name, \"fields\": record[item], \"ttl\": item}\n                if async_upsert:\n                    params[\"async\"]=True\n                res = self.viking_db_service._retry_request(\"UpsertData\", {}, json.dumps(params), remaining, self.retry_option)\n\n    def update_data(self, data: Union[Data, List[Data]], retry=True):\n        \"\"\"\n        Update data in fields within a collection\n\n        :param data: The data field you want to update. must contain primary key\n        :type data: Data or list[Data]\n        :param retry: Whether to retry when QuotaLimiterException occurs.\n        :type retry: bool\n        \"\"\"\n        remaining = self.retry_option.new_remaining(retry)\n        if isinstance(data, Data):\n            fields_arr = [data.fields]\n            ttl = 0\n            if data.TTL is not None:\n                ttl = data.TTL\n            params = {\"collection_name\": self.collection_name, \"fields\": fields_arr, \"ttl\": ttl}\n            res = self.viking_db_service._retry_request(\"UpdateData\", {}, json.dumps(params), remaining, self.retry_option)\n        elif isinstance(data, list):\n            fields_arr = []\n            ttl = 0\n            record = {}\n            for item in data:\n                if item.TTL in record:\n                    fields = record[item.TTL]\n                    fields.append(item.fields)\n                    record[item.TTL] = fields\n                else:\n                    record[item.TTL] = [item.fields]\n            for item in record:\n                params = {\"collection_name\": self.collection_name, \"fields\": record[item], \"ttl\": item}\n                res = self.viking_db_service._retry_request(\"UpdateData\", {}, json.dumps(params), remaining, self.retry_option)\n\n    async def async_upsert_data(self, data: Union[Data, List[Data]], async_upsert=False):\n        if isinstance(data, Data):\n            fields_arr = [data.fields]\n            ttl = 0\n            if data.TTL is not None:\n                ttl = data.TTL\n            params = {\"collection_name\": self.collection_name, \"fields\": fields_arr, \"ttl\": ttl}\n            if async_upsert:\n                params[\"async\"]=True\n            # print(params)\n            res = await self.viking_db_service.async_json_exception(\"UpsertData\", {}, json.dumps(params))\n        elif isinstance(data, list):\n            fields_arr = []\n            ttl = 0\n            record = {}\n            for item in data:\n                if item.TTL in record:\n                    fields = record[item.TTL]\n                    fields.append(item.fields)\n                    record[item.TTL] = fields\n                else:\n                    record[item.TTL] = [item.fields]\n            for item in record:\n                params = {\"collection_name\": self.collection_name, \"fields\": record[item], \"ttl\": item}\n                if async_upsert:\n                    params[\"async\"]=True\n                res = await self.viking_db_service.async_json_exception(\"UpsertData\", {}, json.dumps(params))\n\n    def delete_data(self, id: Union[str, List[str], int, List[int]], retry=True):\n        \"\"\"\n        delete data in fields within a collection\n\n        :param id: The data id you want to delete.\n        :type id: str or list[str] or int or list[int]\n        :param retry: Whether to retry when QuotaLimiterException occurs.\n        :type retry: bool\n        \"\"\"\n        remaining = self.retry_option.new_remaining(retry)\n        if isinstance(id, str) or isinstance(id, int):\n            params = {\"collection_name\": self.collection_name, \"primary_keys\": id}\n            res = self.viking_db_service._retry_request(\"DeleteData\", {}, json.dumps(params), remaining, self.retry_option)\n            return res\n        elif isinstance(id, List):\n            params = {\"collection_name\": self.collection_name, \"primary_keys\": id}\n            res = self.viking_db_service._retry_request(\"DeleteData\", {}, json.dumps(params), remaining, self.retry_option)\n            return res\n\n    async def async_delete_data(self, id: Union[str, List[str], int, List[int]]):\n        if isinstance(id, str) or isinstance(id, int):\n            params = {\"collection_name\": self.collection_name, \"primary_keys\": id}\n            await self.viking_db_service.async_json_exception(\"DeleteData\", {}, json.dumps(params))\n        elif isinstance(id, List):\n            params = {\"collection_name\": self.collection_name, \"primary_keys\": id}\n            await self.viking_db_service.async_json_exception(\"DeleteData\", {}, json.dumps(params))\n\n    def delete_all_data(self):\n        \"\"\"\n        delete all the data of a collection\n        \"\"\"\n        params = {\"collection_name\": self.collection_name, \"del_all\": True}\n        self.viking_db_service.json_exception(\"DeleteData\", {}, json.dumps(params))\n\n    async def async_delete_all_data(self):\n        params = {\"collection_name\": self.collection_name, \"del_all\": True}\n        await self.viking_db_service.async_json_exception(\"DeleteData\", {}, json.dumps(params))\n\n\n    def fetch_data(self, id: Union[str, List[str], int, List[int]], retry=True):\n        \"\"\"\n        Query single or multiple data records in a specified Collection based on primary key\n\n        :param id: the primary key.\n        :type id: str or list[str] or int or list[int]\n        :rtype: Data or list[Data]\n        :param retry: Whether to retry when QuotaLimiterException occurs.\n        :type retry: bool\n        \"\"\"\n        remaining = self.retry_option.new_remaining(retry)\n        if isinstance(id, str) or isinstance(id, int):\n            params = {\"collection_name\": self.collection_name, \"primary_keys\": id}\n            res = self.viking_db_service._retry_request(\"FetchData\", {}, json.dumps(params), remaining, self.retry_option)\n            # res是一个列表,只有一个元素\n            res = json.loads(res)\n            data = Data(res[\"data\"][0], id=id, timestamp=None)\n            return data\n        elif isinstance(id, List):\n            params = {\"collection_name\": self.collection_name, \"primary_keys\": id}\n            if self._is_client:\n                params['replace_primay'] = True\n            res = self.viking_db_service._retry_request(\"FetchData\", {}, json.dumps(params), remaining, self.retry_option)\n            res = json.loads(res)\n            datas = []\n            for item in res[\"data\"]:\n                data = Data(item, id=item[self.primary_key], timestamp=None)\n                datas.append(data)\n            return datas\n\n    async def async_fetch_data(self, id: Union[str, List[str], int, List[int]]):\n        if isinstance(id, str) or isinstance(id, int):\n            params = {\"collection_name\": self.collection_name, \"primary_keys\": id}\n            # print(params)\n            res = await self.viking_db_service.async_get_body_exception(\"FetchData\", {}, json.dumps(params))\n            # print(res)\n            # res是一个列表,只有一个元素\n            res = json.loads(res)\n            # print(res[\"data\"][0])\n            data = Data(res[\"data\"][0], id=id, timestamp=None)\n            return data\n        elif isinstance(id, List):\n            params = {\"collection_name\": self.collection_name, \"primary_keys\": id}\n            if self._is_client:\n                params['replace_primay'] = True\n            res = await self.viking_db_service.async_get_body_exception(\"FetchData\", {}, json.dumps(params))\n            res = json.loads(res)\n            # print(res[\"data\"],self.primary_key)\n            datas = []\n            for item in res[\"data\"]:\n                # print(item)\n                data = Data(item, id=item[self.primary_key], timestamp=None)\n                datas.append(data)\n                # print(data.id,data.fields)\n            return datas\n"
  },
  {
    "path": "volcengine/viking_db/CollectionClient.py",
    "content": "# coding:utf-8\nfrom volcengine.viking_db import Collection, VikingDBService\nfrom volcengine.viking_db.common import RetryOption\n\n\nclass CollectionClient(Collection):\n    def __init__(self, collection_name,  host=\"api-vikingdb.volces.com\", region=\"cn-north-1\", ak=\"\", sk=\"\", scheme='http',\n                 connection_timeout=30, socket_timeout=30, proxy=None, retry_option=None):\n        vikingdb_service = VikingDBService(host, region, ak, sk, scheme, connection_timeout, socket_timeout, proxy, retry_option)\n        self.viking_db_service = vikingdb_service\n        self.collection_name = collection_name\n        self.primary_key = \"__primary_key\"\n        self._is_client = True\n        self.retry_option = retry_option if retry_option else RetryOption()"
  },
  {
    "path": "volcengine/viking_db/Index.py",
    "content": "# coding:utf-8\nimport json\nimport warnings\nfrom typing import Union, List, Dict\n\nfrom volcengine.viking_db.common import (RetryOption, Data, VectorOrder, ScalarOrder,\n                                         AggResult, IndexSortResult, SortResultItem)\n\n\nclass Index(object):\n    def __init__(self, collection_name, index_name, vector_index, scalar_index, stat, viking_db_service, description=\"\",\n                 cpu_quota=2, partition_by=None, create_time=None, update_time=None, update_person=None,\n                 index_cost=None, shard_count=None, shard_policy=None, retry_option=None):\n        \"\"\"\n        :param collection_name: the name of VikingDB collection.\n        :type collection_name: str\n        :param index_name: the name of VikingDB index.\n        :type index_name: str\n        :param vector_index: ANN vector index information.\n        :type vector_index: dict\n        :param scalar_index: scalar index information.\n        :type scalar_index: set\n        :param stat: index status like 'READY'.\n        :type stat: str\n        :param viking_db_service: VikingDBService instance.\n        :type viking_db_service: VikingDBService\n        :param description: the description of index.\n        :type description: str\n        :param cpu_quota: allocated cpu quota of the index.\n        :type cpu_quota: int\n        :param partition_by: the name of sub-index, if not specified, the sub-index is single default.\n        :type partition_by: str\n        :param shard_count: the number of shards, by default it's 1.\n        :type shard_count: int\n        :param shard_policy: the sharding policy of the index, by default it's 'auto'.\n        :type shard_policy: str\n        :param retry_option: retry option.\n        :type retry_option: RetryOption\n        \"\"\"\n        self.collection_name = collection_name\n        self.index_name = index_name\n        self.description = description\n        self.vector_index = vector_index\n        self.scalar_index = scalar_index\n        self.stat = stat\n        self.viking_db_service = viking_db_service\n        self.cpu_quota = cpu_quota\n        self.partition_by = partition_by\n        self.create_time = create_time\n        self.update_time = update_time\n        self.update_person = update_person\n        self.index_cost = index_cost\n        self.shard_count = shard_count\n        self.shard_policy = shard_policy\n        self.retry_option = retry_option if retry_option else RetryOption()\n        # 获取primary_key\n        col = self.viking_db_service.get_exception(\"GetCollection\", {\"collection_name\": self.collection_name})\n        col = json.loads(col)\n        self._is_client = False\n        self.primary_key = col[\"data\"][\"primary_key\"]\n\n    def search(self, order=None, filter=None, limit=10, output_fields=None, partition=\"default\", dense_weight=None,\n               primary_key_in=None, primary_key_not_in=None, post_process_ops=None, post_process_input_limit=None,\n               retry=True, filter_pre_ann_limit=-1, filter_pre_ann_ratio=-1.0, **kwargs):\n        \"\"\"\n        Search for vectors or scalars similar to a given vector or scalar.\n\n        :param order: the given vector or scalar or None.\n        :type order: VectorOrder or ScalarOrder or None\n        :param filter: filter conditions.\n        :type filter: dict\n        :param limit: number of retrieved results.\n        :type limit: int\n        :param output_fields: specify the list of scalar fields to be returned.\n        :type output_fields: list\n        :param partition: the name of sub-index.\n        :type partition: int or str or list[int] or list[str]\n        :type: list\n        :param dense_weight: the weight of dense vector, the value should be a float in range [0.2, 1.0].\n        :type dense_weight: float\n        :type primary_key_in: filter data by primary key value, list[int] or list[str]\n        :type: list\n        :type primary_key_not_in: filter out data by primary key value, list[int] or list[str]\n        :type: list\n        :type post_process_ops: post process operators\n        :type: list[dict]\n        :type post_process_input_limit: number of data input to post process operators\n        :type: int\n        :param retry: whether to retry when the request fails caused by 1000029: QuotaLimiterException.\n        :type retry: bool\n        \"\"\"\n        if isinstance(order, VectorOrder):\n            res = []\n            if order.vector is not None:\n                res = self.search_by_vector(order.vector, sparse_vectors=order.sparse_vectors, filter=filter, limit=limit,\n                                            output_fields=output_fields, partition=partition, dense_weight=dense_weight,\n                                            primary_key_in=None, primary_key_not_in=None, post_process_ops=None, post_process_input_limit=None,\n                                            retry=retry, filter_pre_ann_limit=filter_pre_ann_limit, filter_pre_ann_ratio=filter_pre_ann_ratio, **kwargs)\n            elif order.id is not None:\n                res = self.search_by_id(order.id, filter=filter, limit=limit,\n                                        output_fields=output_fields, partition=partition, dense_weight=dense_weight,\n                                        primary_key_in=None, primary_key_not_in=None, post_process_ops=None, post_process_input_limit=None,\n                                        retry=retry, filter_pre_ann_limit=filter_pre_ann_limit, filter_pre_ann_ratio=filter_pre_ann_ratio, **kwargs)\n            return res\n        elif isinstance(order, ScalarOrder):\n            search = {}\n            order_by_scalar = {\"order\": order.order.value, \"field_name\": order.field_name}\n            search = {\"order_by_scalar\": order_by_scalar, \"limit\": limit, \"partition\": partition}\n            if output_fields is not None:\n                search[\"output_fields\"] = output_fields\n            if filter is not None:\n                search['filter'] = filter\n            if primary_key_in is not None:\n                search['primary_key_in'] = primary_key_in\n            if primary_key_not_in is not None:\n                search['primary_key_not_in'] = primary_key_not_in\n            if post_process_ops is not None:\n                search['post_process_ops'] = post_process_ops\n            if post_process_input_limit is not None:\n                search['post_process_input_limit'] = post_process_input_limit\n            if filter_pre_ann_limit >= 0:\n                search['filter_pre_ann_limit'] = filter_pre_ann_limit\n            if filter_pre_ann_ratio >= 0.0:\n                search['filter_pre_ann_ratio'] = filter_pre_ann_ratio\n            offset = kwargs.get(\"offset\", -1)\n            if offset >= 0:\n                search['offset'] = offset\n            need_search_count = kwargs.get(\"need_search_count\", False)\n            if need_search_count:\n                search['need_search_count'] = need_search_count\n            if self._is_client:\n                search['replace_primay'] = True\n            if kwargs.get(\"need_return_vector\", False):\n                search['need_return_vector'] = kwargs['need_return_vector']\n            params = {\"collection_name\": self.collection_name, \"index_name\": self.index_name, \"search\": search}\n            # print(params)\n            remaining = self.retry_option.new_remaining(retry)\n            res = self.viking_db_service._retry_request(\"SearchIndex\", {}, json.dumps(params), remaining, self.retry_option)\n            res = json.loads(res)\n\n            datas = []\n            # 返回数据是个列表，每个id又对应一个列表，但是这里输入id好像只能传一个值，所以要for两次\n            for items in res[\"data\"]:\n                for item in items:\n                    id = item[self.primary_key]\n                    fields = {}\n                    if output_fields != [] or output_fields is None or item.get('fields', None):\n                        fields = item[\"fields\"]\n                    data = Data(fields, id=id, timestamp=None, score=item[\"score\"], dist=item.get('dist', None))\n                    datas.append(data)\n            extend_info = res.get('extend', {})\n            if need_search_count:\n                return datas, extend_info\n            return datas\n        elif order is None:\n            search = {\"limit\": limit, \"partition\": partition}\n            if output_fields is not None:\n                search[\"output_fields\"] = output_fields\n            if filter is not None:\n                search['filter'] = filter\n            if primary_key_in is not None:\n                search['primary_key_in'] = primary_key_in\n            if primary_key_not_in is not None:\n                search['primary_key_not_in'] = primary_key_not_in\n            if post_process_ops is not None:\n                search['post_process_ops'] = post_process_ops\n            if post_process_input_limit is not None:\n                search['post_process_input_limit'] = post_process_input_limit\n            offset = kwargs.get(\"offset\", -1)\n            if offset >= 0:\n                search['offset'] = offset\n            need_search_count = kwargs.get(\"need_search_count\", False)\n            if need_search_count:\n                search['need_search_count'] = need_search_count\n            if self._is_client:\n                search['replace_primay'] = True\n            if kwargs.get(\"need_return_vector\", False):\n                search['need_return_vector'] = kwargs['need_return_vector']\n            params = {\"collection_name\": self.collection_name, \"index_name\": self.index_name, \"search\": search}\n            remaining = self.retry_option.new_remaining(retry)\n            res = self.viking_db_service._retry_request(\"SearchIndex\", {}, json.dumps(params), remaining, self.retry_option)\n            res = json.loads(res)\n\n            datas = []\n            for items in res[\"data\"]:\n                for item in items:\n                    id = item[self.primary_key]\n                    fields = {}\n                    if output_fields != [] or output_fields is None or item.get('fields', None):\n                        fields = item[\"fields\"]\n                    data = Data(fields, id=id, timestamp=None, score=item[\"score\"], dist=item.get('dist', None))\n                    datas.append(data)\n            extend_info = res.get('extend', {})\n            if need_search_count:\n                return datas, extend_info\n            return datas\n\n    async def async_search(self, order=None, filter=None, limit=10, output_fields=None, partition=\"default\",\n                           dense_weight=None, primary_key_in=None, primary_key_not_in=None, post_process_ops=None, post_process_input_limit=None, **kwargs):\n        if isinstance(order, VectorOrder):\n            res = []\n            if order.vector is not None:\n                res = await self.async_search_by_vector(order.vector, sparse_vectors=order.sparse_vectors, filter=filter, limit=limit,\n                                                        output_fields=output_fields, partition=partition, dense_weight=dense_weight,\n                                                        primary_key_in=None, primary_key_not_in=None,\n                                                        post_process_ops=None, post_process_input_limit=None)\n            elif order.id is not None:\n                res = await self.async_search_by_id(order.id, filter=filter, limit=limit, output_fields=output_fields,\n                                                    partition=partition, dense_weight=dense_weight,\n                                                    primary_key_in=None, primary_key_not_in=None,\n                                                    post_process_ops=None, post_process_input_limit=None)\n            return res\n        elif isinstance(order, ScalarOrder):\n            search = {}\n            order_by_scalar = {\"order\": order.order.value, \"field_name\": order.field_name}\n            search = {\"order_by_scalar\": order_by_scalar, \"limit\": limit, \"partition\": partition}\n            if output_fields is not None:\n                search[\"output_fields\"] = output_fields\n            if filter is not None:\n                search['filter'] = filter\n            if primary_key_in is not None:\n                search['primary_key_in'] = primary_key_in\n            if primary_key_not_in is not None:\n                search['primary_key_not_in'] = primary_key_not_in\n            if post_process_ops is not None:\n                search['post_process_ops'] = post_process_ops\n            if post_process_input_limit is not None:\n                search['post_process_input_limit'] = post_process_input_limit\n            offset = kwargs.get(\"offset\", -1)\n            if offset >= 0:\n                search['offset'] = offset\n            need_search_count = kwargs.get(\"need_search_count\", False)\n            if need_search_count:\n                search['need_search_count'] = need_search_count\n            if self._is_client:\n                search['replace_primay'] = True\n            if kwargs.get(\"need_return_vector\", False):\n                search['need_return_vector'] = kwargs['need_return_vector'] \n            params = {\"collection_name\": self.collection_name, \"index_name\": self.index_name, \"search\": search}\n            res = await self.viking_db_service.async_json_exception(\"SearchIndex\", {}, json.dumps(params))\n            res = json.loads(res)\n\n            datas = []\n            # 返回数据是个列表，每个id又对应一个列表，但是这里输入id好像只能传一个值，所以要for两次\n            for items in res[\"data\"]:\n                for item in items:\n                    id = item[self.primary_key]\n                    fields = {}\n                    if output_fields != [] or output_fields is None or item.get('fields', None):\n                        fields = item[\"fields\"]\n                    data = Data(fields, id=id, timestamp=None, score=item[\"score\"], dist=item.get('dist', None))\n                    datas.append(data)\n            extend_info = res.get('extend', {})\n            if need_search_count:\n                return datas, extend_info\n            return datas\n        elif order is None:\n            search = {\"limit\": limit, \"partition\": partition}\n            if output_fields is not None:\n                search[\"output_fields\"] = output_fields\n            if filter is not None:\n                search['filter'] = filter\n            if primary_key_in is not None:\n                search['primary_key_in'] = primary_key_in\n            if primary_key_not_in is not None:\n                search['primary_key_not_in'] = primary_key_not_in\n            if post_process_ops is not None:\n                search['post_process_ops'] = post_process_ops\n            if post_process_input_limit is not None:\n                search['post_process_input_limit'] = post_process_input_limit\n            offset = kwargs.get(\"offset\", -1)\n            if offset >= 0:\n                search['offset'] = offset\n            need_search_count = kwargs.get(\"need_search_count\", False)\n            if need_search_count:\n                search['need_search_count'] = need_search_count\n            if self._is_client:\n                search['replace_primay'] = True\n            if kwargs.get(\"need_return_vector\", False):\n                search['need_return_vector'] = kwargs['need_return_vector']\n            params = {\"collection_name\": self.collection_name, \"index_name\": self.index_name, \"search\": search}\n            res = await self.viking_db_service.async_json_exception(\"SearchIndex\", {}, json.dumps(params))\n            res = json.loads(res)\n\n            datas = []\n            for items in res[\"data\"]:\n                for item in items:\n                    id = item[self.primary_key]\n                    fields = {}\n                    if output_fields != [] or output_fields is None or item.get('fields', None):\n                        fields = item[\"fields\"]\n                    data = Data(fields, id=id, timestamp=None, score=item[\"score\"], dist=item.get('dist', None))\n                    datas.append(data)\n            extend_info = res.get('extend', {})\n            if need_search_count:\n                return datas, extend_info\n            return datas\n\n    def search_by_id(self, id, filter=None, limit=10, output_fields=None, partition=\"default\", dense_weight=None,\n                     primary_key_in=None, primary_key_not_in=None, post_process_ops=None, post_process_input_limit=None,\n                     retry=True, scale_k=0, filter_pre_ann_limit=-1, filter_pre_ann_ratio=-1.0, **kwargs):\n        \"\"\"\n        Search for vectors similar to a given vector based on its id.\n\n        :param id: the primary key.\n        :type id: str\n        :param filter: filter conditions.\n        :type filter: dict\n        :param limit: number of retrieved results.\n        :type limit: int\n        :param output_fields: specify the list of scalar fields to be returned.\n        :type output_fields: list\n        :param partition: the name of sub-index.\n        :type partition: int or str or list[int] or list[str]\n        :rtype: list\n        :param dense_weight: the weight of dense vector, the value should be a float in range [0.2, 1.0].\n        :type dense_weight: float\n        :type primary_key_in: filter data by primary key value, list[int] or list[str]\n        :type: list\n        :type primary_key_not_in: filter out data by primary key value, list[int] or list[str]\n        :type: list\n        :type post_process_ops: post process operators\n        :type: list[dict]\n        :type post_process_input_limit: number of data input to post process operators\n        :type: int\n        :param retry: whether to retry when the request fails caused by 1000029: QuotaLimiterException.\n        :type retry: bool\n        \"\"\"\n        search = {}\n        order_by_id = {\"primary_keys\": id}\n        search = {\"order_by_vector\": order_by_id, \"limit\": limit, \"partition\": partition}\n        if output_fields is not None:\n            search[\"output_fields\"] = output_fields\n        if filter is not None:\n            search['filter'] = filter\n        if dense_weight is not None:\n            search['dense_weight'] = dense_weight\n        if primary_key_in is not None:\n            search['primary_key_in'] = primary_key_in\n        if primary_key_not_in is not None:\n            search['primary_key_not_in'] = primary_key_not_in\n        if post_process_ops is not None:\n            search['post_process_ops'] = post_process_ops\n        if post_process_input_limit is not None:\n            search['post_process_input_limit'] = post_process_input_limit\n        if scale_k > 0:\n            search['scale_k'] = scale_k\n        if filter_pre_ann_limit >= 0:\n            search['filter_pre_ann_limit'] = filter_pre_ann_limit\n        if filter_pre_ann_ratio >= 0.0:\n            search['filter_pre_ann_ratio'] = filter_pre_ann_ratio\n        offset = kwargs.get(\"offset\", -1)\n        if offset >= 0:\n            search['offset'] = offset\n        need_search_count = kwargs.get(\"need_search_count\", False)\n        if need_search_count:\n            search['need_search_count'] = need_search_count\n        if self._is_client:\n            search['replace_primay'] = True\n        if kwargs.get(\"need_return_vector\", False):\n            search['need_return_vector'] = kwargs['need_return_vector']\n        params = {\"collection_name\": self.collection_name, \"index_name\": self.index_name, \"search\": search}\n        # print(params)\n        remaining = self.retry_option.new_remaining(retry)\n        res = self.viking_db_service._retry_request(\"SearchIndex\", {}, json.dumps(params), remaining, self.retry_option)\n        res = json.loads(res)\n        # print(res[\"data\"])\n\n        datas = []\n        # 返回数据是个列表，每个id又对应一个列表，但是这里输入id好像只能传一个值，所以要for两次\n        for items in res[\"data\"]:\n            for item in items:\n                # print(item)\n                id = item[self.primary_key]\n                # print(id)\n                fields = {}\n                if output_fields != [] or output_fields is None or item.get('fields', None):\n                    fields = item[\"fields\"]\n                # print(id, fields)\n                data = Data(fields, id=id, timestamp=None, score=item[\"score\"], dist=item.get('dist', None))\n                datas.append(data)\n            # print(\"==================\")\n        extend_info = res.get('extend', {})\n        if need_search_count:\n            return datas, extend_info\n        return datas\n\n    async def async_search_by_id(self, id, filter=None, limit=10, output_fields=None, partition=\"default\", dense_weight=None,\n                                 primary_key_in=None, primary_key_not_in=None, post_process_ops=None, post_process_input_limit=None, **kwargs):\n        search = {}\n        order_by_id = {\"primary_keys\": id}\n        search = {\"order_by_vector\": order_by_id, \"limit\": limit, \"partition\": partition}\n        if output_fields is not None:\n            search[\"output_fields\"] = output_fields\n        if filter is not None:\n            search['filter'] = filter\n        if dense_weight is not None:\n            search['dense_weight'] = dense_weight\n        if primary_key_in is not None:\n            search['primary_key_in'] = primary_key_in\n        if primary_key_not_in is not None:\n            search['primary_key_not_in'] = primary_key_not_in\n        if post_process_ops is not None:\n            search['post_process_ops'] = post_process_ops\n        if post_process_input_limit is not None:\n            search['post_process_input_limit'] = post_process_input_limit\n        offset = kwargs.get(\"offset\", -1)\n        if offset >= 0:\n            search['offset'] = offset\n        need_search_count = kwargs.get(\"need_search_count\", False)\n        if need_search_count:\n            search['need_search_count'] = need_search_count\n        if self._is_client:\n            search['replace_primay'] = True\n        if kwargs.get(\"need_return_vector\", False):\n            search['need_return_vector'] = kwargs['need_return_vector']\n        params = {\"collection_name\": self.collection_name, \"index_name\": self.index_name, \"search\": search}\n        # print(params)\n        res = await self.viking_db_service.async_json_exception(\"SearchIndex\", {}, json.dumps(params))\n        res = json.loads(res)\n        # print(res[\"data\"])\n\n        datas = []\n        # 返回数据是个列表，每个id又对应一个列表，但是这里输入id好像只能传一个值，所以要for两次\n        for items in res[\"data\"]:\n            for item in items:\n                # print(item)\n                id = item[self.primary_key]\n                # print(id)\n                fields = {}\n                if output_fields != [] or output_fields is None or item.get('fields', None):\n                    fields = item[\"fields\"]\n                # print(id, fields)\n                data = Data(fields, id=id, timestamp=None, score=item[\"score\"], dist=item.get('dist', None))\n                datas.append(data)\n            # print(\"==================\")\n        extend_info = res.get('extend', {})\n        if need_search_count:\n            return datas, extend_info\n        return datas\n\n    def search_by_vector(self, vector, sparse_vectors=None, filter=None, limit=10, output_fields=None, partition=\"default\", dense_weight=None,\n                         primary_key_in=None, primary_key_not_in=None, post_process_ops=None, post_process_input_limit=None, retry=True, scale_k=0,\n                         filter_pre_ann_limit=-1, filter_pre_ann_ratio=-1.0, **kwargs):\n        \"\"\"\n        Search for vectors similar to a given vector.\n\n        :param vector: the given vector.\n        :type vector: list\n        :param filter: filter conditions.\n        :type filter: dict\n        :param limit: number of retrieved results.\n        :type limit: int\n        :param output_fields: specify the list of scalar fields to be returned.\n        :type output_fields: list\n        :param partition: the name of sub-index.\n        :type partition: int or str or list[int] or list[str]\n        :rtype: list\n        :param dense_weight: the weight of dense vector, the value should be a float in range [0.2, 1.0].\n        :type dense_weight: float\n        :type primary_key_in: filter data by primary key value, list[int] or list[str]\n        :type: list\n        :type primary_key_not_in: filter out data by primary key value, list[int] or list[str]\n        :type: list\n        :type post_process_ops: post process operators\n        :type: list[dict]\n        :type post_process_input_limit: number of data input to post process operators\n        :type: int\n        :param retry: whether to retry when the request fails caused by 1000029: QuotaLimiterException.\n        :type retry: bool\n        \"\"\"\n        # vector是一个向量，不是list，但是数据库要求传入的是个列表\n        search = {}\n        order_by_vector = {\"vectors\": [vector]}\n        if sparse_vectors is not None:\n            order_by_vector['sparse_vectors'] = [sparse_vectors]\n        search = {\"order_by_vector\": order_by_vector, \"limit\": limit, \"partition\": partition}\n        if output_fields is not None:\n            search[\"output_fields\"] = output_fields\n        if filter is not None:\n            search['filter'] = filter\n        if dense_weight is not None:\n            search['dense_weight'] = dense_weight\n        if primary_key_in is not None:\n            search['primary_key_in'] = primary_key_in\n        if primary_key_not_in is not None:\n            search['primary_key_not_in'] = primary_key_not_in\n        if post_process_ops is not None:\n            search['post_process_ops'] = post_process_ops\n        if post_process_input_limit is not None:\n            search['post_process_input_limit'] = post_process_input_limit\n        if scale_k > 0:\n            search['scale_k'] = scale_k\n        if filter_pre_ann_limit >= 0:\n            search['filter_pre_ann_limit'] = filter_pre_ann_limit\n        if filter_pre_ann_ratio >= 0.0:\n            search['filter_pre_ann_ratio'] = filter_pre_ann_ratio\n        offset = kwargs.get(\"offset\", -1)\n        if offset >= 0:\n            search['offset'] = offset\n        need_search_count = kwargs.get(\"need_search_count\", False)\n        if need_search_count:\n            search['need_search_count'] = need_search_count\n        if self._is_client:\n            search['replace_primay'] = True\n        if kwargs.get(\"need_return_vector\", False):\n            search['need_return_vector'] = kwargs['need_return_vector']\n        params = {\"collection_name\": self.collection_name, \"index_name\": self.index_name, \"search\": search}\n        remaining = self.retry_option.new_remaining(retry)\n        res = self.viking_db_service._retry_request(\"SearchIndex\", {}, json.dumps(params), remaining, self.retry_option)\n        res = json.loads(res)\n\n        datas = []\n        # 返回数据是个列表，每个vector又对应一个列表，但是这里输入vector好像只能传一个值，所以要for两次\n        for items in res[\"data\"]:\n            for item in items:\n                id = item[self.primary_key]\n                fields = {}\n                if output_fields != [] or output_fields is None or item.get('fields', None):\n                    fields = item[\"fields\"]\n                data = Data(fields, id=id, timestamp=None, score=item[\"score\"], dist=item.get('dist', None))\n                datas.append(data)\n        extend_info = res.get('extend', {})\n        if need_search_count:\n            return datas, extend_info\n        return datas\n\n    async def async_search_by_vector(self, vector, sparse_vectors=None, filter=None, limit=10, output_fields=None, partition=\"default\", dense_weight=None,\n                                     primary_key_in=None, primary_key_not_in=None, post_process_ops=None, post_process_input_limit=None, **kwargs):\n        # vector是一个向量，不是list，但是数据库要求传入的是个列表\n        search = {}\n        order_by_vector = {\"vectors\": [vector]}\n        if sparse_vectors is not None:\n            order_by_vector['sparse_vectors'] = [sparse_vectors]\n        search = {\"order_by_vector\": order_by_vector, \"limit\": limit, \"partition\": partition}\n        if output_fields is not None:\n            search[\"output_fields\"] = output_fields\n        if filter is not None:\n            search['filter'] = filter\n        if dense_weight is not None:\n            search['dense_weight'] = dense_weight\n        if primary_key_in is not None:\n            search['primary_key_in'] = primary_key_in\n        if primary_key_not_in is not None:\n            search['primary_key_not_in'] = primary_key_not_in\n        if post_process_ops is not None:\n            search['post_process_ops'] = post_process_ops\n        if post_process_input_limit is not None:\n            search['post_process_input_limit'] = post_process_input_limit\n        offset = kwargs.get(\"offset\", -1)\n        if offset >= 0:\n            search['offset'] = offset\n        need_search_count = kwargs.get(\"need_search_count\", False)\n        if need_search_count:\n            search['need_search_count'] = need_search_count\n        if self._is_client:\n            search['replace_primay'] = True\n        if kwargs.get(\"need_return_vector\", False):\n            search['need_return_vector'] = kwargs['need_return_vector']\n        params = {\"collection_name\": self.collection_name, \"index_name\": self.index_name, \"search\": search}\n        res = await self.viking_db_service.async_json_exception(\"SearchIndex\", {}, json.dumps(params))\n        res = json.loads(res)\n\n        datas = []\n        # 返回数据是个列表，每个vector又对应一个列表，但是这里输入vector好像只能传一个值，所以要for两次\n        for items in res[\"data\"]:\n            for item in items:\n                id = item[self.primary_key]\n                fields = {}\n                if output_fields != [] or output_fields is None or item.get('fields', None):\n                    fields = item[\"fields\"]\n                data = Data(fields, id=id, timestamp=None, score=item[\"score\"], dist=item.get('dist', None))\n                datas.append(data)\n        extend_info = res.get('extend', {})\n        if need_search_count:\n            return datas, extend_info\n        return datas\n\n    def search_with_multi_modal(self, text=None, image=None, filter=None, limit=10, output_fields=None, partition=\"default\", dense_weight=None, need_instruction=None,\n                       primary_key_in=None, primary_key_not_in=None, post_process_ops=None, post_process_input_limit=None, retry=True, scale_k=0,\n                       filter_pre_ann_limit=-1, filter_pre_ann_ratio=-1.0, **kwargs):\n        \"\"\"\n        Search with multi-modal data including type of text and image.\n\n        :param text: the given text.\n        :type text: str\n        :param image: the given image.\n        :type image: str\n        :param filter: filter conditions.\n        :type filter: dict\n        :param limit: number of retrieved results.\n        :type limit: int\n        :param output_fields: specify the list of scalar fields to be returned.\n        :type output_fields: list\n        :param partition: the name of sub-index.\n        :type partition: int or str or list[int] or list[str]\n        :rtype: list\n        :param dense_weight: the weight of dense vector, the value should be a float in range [0.2, 1.0].\n        :type dense_weight: float\n        :type need_instruction: whether need instruction for embedding\n        :type: bool\n        :type primary_key_in: filter data by primary key value, list[int] or list[str]\n        :type: list\n        :type primary_key_not_in: filter out data by primary key value, list[int] or list[str]\n        :type: list\n        :type post_process_ops: post process operators\n        :type: list[dict]\n        :type post_process_input_limit: number of data input to post process operators\n        :type: int\n        :param retry: whether to retry when the request fails caused by 1000029: QuotaLimiterException.\n        :type retry: bool\n        \"\"\"\n        if text is None and image is None:\n            raise Exception(\"not any modal data params exist\")\n        order_by_raw = {}\n        if text is not None:\n            order_by_raw[\"text\"] = text\n        if image is not None:\n            order_by_raw[\"image\"] = image\n        search = {\"order_by_raw\": order_by_raw, \"limit\": limit, \"partition\": partition}\n        if output_fields is not None:\n            search[\"output_fields\"] = output_fields\n        if filter is not None:\n            search['filter'] = filter\n        if dense_weight is not None:\n            search['dense_weight'] = dense_weight\n        if need_instruction is not None:\n            search['need_instruction'] = need_instruction\n        if primary_key_in is not None:\n            search['primary_key_in'] = primary_key_in\n        if primary_key_not_in is not None:\n            search['primary_key_not_in'] = primary_key_not_in\n        if post_process_ops is not None:\n            search['post_process_ops'] = post_process_ops\n        if post_process_input_limit is not None:\n            search['post_process_input_limit'] = post_process_input_limit\n        if scale_k > 0:\n            search['scale_k'] = scale_k\n        if filter_pre_ann_limit >= 0:\n            search['filter_pre_ann_limit'] = filter_pre_ann_limit\n        if filter_pre_ann_ratio >= 0.0:\n            search['filter_pre_ann_ratio'] = filter_pre_ann_ratio\n        offset = kwargs.get(\"offset\", -1)\n        if offset >= 0:\n            search['offset'] = offset\n        need_search_count = kwargs.get(\"need_search_count\", False)\n        if need_search_count:\n            search['need_search_count'] = need_search_count\n        if self._is_client:\n            search['replace_primay'] = True\n        if kwargs.get(\"need_return_vector\", False):\n            search['need_return_vector'] = kwargs['need_return_vector']\n        params = {\"collection_name\": self.collection_name, \"index_name\": self.index_name, \"search\": search}\n        remaining = self.retry_option.new_remaining(retry)\n        res = self.viking_db_service._retry_request(\"SearchIndex\", {}, json.dumps(params), remaining, self.retry_option)\n        res = json.loads(res)\n\n        datas = []\n        # 返回数据是个列表，每个vector又对应一个列表，但是这里输入vector好像只能传一个值，所以要for两次\n        for items in res[\"data\"]:\n            for item in items:\n                id = item[self.primary_key]\n                fields = {}\n                if output_fields != [] or output_fields is None or item.get('fields', None):\n                    fields = item[\"fields\"]\n                text = None\n                if \"text\" in item:\n                    text = item[\"text\"]\n                data = Data(fields, id=id, timestamp=None, score=item[\"score\"], text=text, dist=item.get('dist', None))\n                datas.append(data)\n        extend_info = res.get('extend', {})\n        if need_search_count:\n            return datas, extend_info\n        return datas\n\n    async def async_search_with_multi_modal(self, text=None, image=None, filter=None, limit=10, output_fields=None, partition=\"default\", dense_weight=None, need_instruction=None,\n                       primary_key_in=None, primary_key_not_in=None, post_process_ops=None, post_process_input_limit=None, scale_k=0, **kwargs):\n        if text is None and image is None:\n            raise Exception(\"not any modal data params exist\")\n        order_by_raw = {}\n        if text is not None:\n            order_by_raw[\"text\"] = text\n        if image is not None:\n            order_by_raw[\"image\"] = image\n        search = {\"order_by_raw\": order_by_raw, \"limit\": limit, \"partition\": partition}\n        if output_fields is not None:\n            search[\"output_fields\"] = output_fields\n        if filter is not None:\n            search['filter'] = filter\n        if dense_weight is not None:\n            search['dense_weight'] = dense_weight\n        if need_instruction is not None:\n            search['need_instruction'] = need_instruction\n        if primary_key_in is not None:\n            search['primary_key_in'] = primary_key_in\n        if primary_key_not_in is not None:\n            search['primary_key_not_in'] = primary_key_not_in\n        if post_process_ops is not None:\n            search['post_process_ops'] = post_process_ops\n        if post_process_input_limit is not None:\n            search['post_process_input_limit'] = post_process_input_limit\n        if scale_k > 0:\n            search['scale_k'] = scale_k\n        offset = kwargs.get(\"offset\", -1)\n        if offset >= 0:\n            search['offset'] = offset\n        need_search_count = kwargs.get(\"need_search_count\", False)\n        if need_search_count:\n            search['need_search_count'] = need_search_count\n        if self._is_client:\n            search['replace_primay'] = True\n        if kwargs.get(\"need_return_vector\", False):\n            search['need_return_vector'] = kwargs['need_return_vector']\n        params = {\"collection_name\": self.collection_name, \"index_name\": self.index_name, \"search\": search}\n        res = await self.viking_db_service.async_json_exception(\"SearchIndex\", {}, json.dumps(params))\n        res = json.loads(res)\n\n        datas = []\n        # 返回数据是个列表，每个vector又对应一个列表，但是这里输入vector好像只能传一个值，所以要for两次\n        for items in res[\"data\"]:\n            for item in items:\n                id = item[self.primary_key]\n                fields = {}\n                if output_fields != [] or output_fields is None or item.get('fields', None):\n                    fields = item[\"fields\"]\n                text = None\n                if \"text\" in item:\n                    text = item[\"text\"]\n                data = Data(fields, id=id, timestamp=None, score=item[\"score\"], text=text, dist=item.get('dist', None))\n                datas.append(data)\n        extend_info = res.get('extend', {})\n        if need_search_count:\n            return datas, extend_info\n        return datas\n\n    def search_by_text(self, text, filter=None, limit=10, output_fields=None, partition=\"default\", dense_weight=None, need_instruction=None,\n                       primary_key_in=None, primary_key_not_in=None, post_process_ops=None, post_process_input_limit=None, retry=True, scale_k=0,\n                       filter_pre_ann_limit=-1, filter_pre_ann_ratio=-1.0, **kwargs):\n        \"\"\"\n        Search for text similar to a given text. (You can use search_with_multi_modal instead.)\n\n        :param text: the given text.\n        :type text: Text\n        :param filter: filter conditions.\n        :type filter: dict\n        :param limit: number of retrieved results.\n        :type limit: int\n        :param output_fields: specify the list of scalar fields to be returned.\n        :type output_fields: list\n        :param partition: the name of sub-index.\n        :type partition: int or str or list[int] or list[str]\n        :rtype: list\n        :param dense_weight: the weight of dense vector, the value should be a float in range [0.2, 1.0].\n        :type dense_weight: float\n        :type need_instruction: whether need instruction for embedding\n        :type: bool\n        :type primary_key_in: filter data by primary key value, list[int] or list[str]\n        :type: list\n        :type primary_key_not_in: filter out data by primary key value, list[int] or list[str]\n        :type: list\n        :type post_process_ops: post process operators\n        :type: list[dict]\n        :type post_process_input_limit: number of data input to post process operators\n        :type: int\n        :param retry: whether to retry when the request fails caused by 1000029: QuotaLimiterException.\n        :type retry: bool\n        \"\"\"\n        warnings.warn(\"search_by_text is deprecated, please use search_with_multi_modal instead\", DeprecationWarning)\n        order_by_raw = {\"text\": text.text}\n        search = {\"order_by_raw\": order_by_raw, \"limit\": limit, \"partition\": partition}\n        if output_fields is not None:\n            search[\"output_fields\"] = output_fields\n        if filter is not None:\n            search['filter'] = filter\n        if dense_weight is not None:\n            search['dense_weight'] = dense_weight\n        if need_instruction is not None:\n            search['need_instruction'] = need_instruction\n        if primary_key_in is not None:\n            search['primary_key_in'] = primary_key_in\n        if primary_key_not_in is not None:\n            search['primary_key_not_in'] = primary_key_not_in\n        if post_process_ops is not None:\n            search['post_process_ops'] = post_process_ops\n        if post_process_input_limit is not None:\n            search['post_process_input_limit'] = post_process_input_limit\n        if scale_k > 0:\n            search['scale_k'] = scale_k\n        if filter_pre_ann_limit >= 0:\n            search['filter_pre_ann_limit'] = filter_pre_ann_limit\n        if filter_pre_ann_ratio >= 0.0:\n            search['filter_pre_ann_ratio'] = filter_pre_ann_ratio\n        offset = kwargs.get(\"offset\", -1)\n        if offset >= 0:\n            search['offset'] = offset\n        need_search_count = kwargs.get(\"need_search_count\", False)\n        if need_search_count:\n            search['need_search_count'] = need_search_count\n        if self._is_client:\n            search['replace_primay'] = True\n        if kwargs.get(\"need_return_vector\", False):\n            search['need_return_vector'] = kwargs['need_return_vector']\n        params = {\"collection_name\": self.collection_name, \"index_name\": self.index_name, \"search\": search}\n        remaining = self.retry_option.new_remaining(retry)\n        res = self.viking_db_service._retry_request(\"SearchIndex\", {}, json.dumps(params), remaining, self.retry_option)\n        res = json.loads(res)\n\n        datas = []\n        # 返回数据是个列表，每个vector又对应一个列表，但是这里输入vector好像只能传一个值，所以要for两次\n        for items in res[\"data\"]:\n            for item in items:\n                id = item[self.primary_key]\n                fields = {}\n                if output_fields != [] or output_fields is None or item.get('fields', None):\n                    fields = item[\"fields\"]\n                text = None\n                if \"text\" in item:\n                    text = item[\"text\"]\n                data = Data(fields, id=id, timestamp=None, score=item[\"score\"], text=text, dist=item.get('dist', None))\n                datas.append(data)\n        extend_info = res.get('extend', {})\n        if need_search_count:\n            return datas, extend_info\n        return datas\n\n    async def async_search_by_text(self, text, filter=None, limit=10, output_fields=None, partition=\"default\", dense_weight=None, need_instruction=None,\n                                   primary_key_in=None, primary_key_not_in=None, post_process_ops=None, post_process_input_limit=None, **kwargs):\n        warnings.warn(\"async_search_by_text is deprecated, please use async_search_with_multi_modal instead\", DeprecationWarning)\n        order_by_raw = {\"text\": text.text}\n        search = {\"order_by_raw\": order_by_raw, \"limit\": limit, \"partition\": partition}\n        if output_fields is not None:\n            search[\"output_fields\"] = output_fields\n        if filter is not None:\n            search['filter'] = filter\n        if dense_weight is not None:\n            search['dense_weight'] = dense_weight\n        if need_instruction is not None:\n            search['need_instruction'] = need_instruction\n        if primary_key_in is not None:\n            search['primary_key_in'] = primary_key_in\n        if primary_key_not_in is not None:\n            search['primary_key_not_in'] = primary_key_not_in\n        if post_process_ops is not None:\n            search['post_process_ops'] = post_process_ops\n        if post_process_input_limit is not None:\n            search['post_process_input_limit'] = post_process_input_limit\n        offset = kwargs.get(\"offset\", -1)\n        if offset >= 0:\n            search['offset'] = offset\n        need_search_count = kwargs.get(\"need_search_count\", False)\n        if need_search_count:\n            search['need_search_count'] = need_search_count\n        if self._is_client:\n            search['replace_primay'] = True\n        if kwargs.get(\"need_return_vector\", False):\n            search['need_return_vector'] = kwargs['need_return_vector']\n        params = {\"collection_name\": self.collection_name, \"index_name\": self.index_name, \"search\": search}\n        res = await self.viking_db_service.async_json_exception(\"SearchIndex\", {}, json.dumps(params))\n        res = json.loads(res)\n\n        datas = []\n        # 返回数据是个列表，每个vector又对应一个列表，但是这里输入vector好像只能传一个值，所以要for两次\n        for items in res[\"data\"]:\n            for item in items:\n                id = item[self.primary_key]\n                fields = {}\n                if output_fields != [] or output_fields is None or item.get('fields', None):\n                    fields = item[\"fields\"]\n                text = None\n                if \"text\" in item:\n                    text = item[\"text\"]\n                data = Data(fields, id=id, timestamp=None, score=item[\"score\"], text=text, dist=item.get('dist', None))\n                datas.append(data)\n        extend_info = res.get('extend', {})\n        if need_search_count:\n            return datas, extend_info\n        return datas\n\n    def search_agg(self, agg: Dict[str, any], filter=None, partition=\"default\", retry=True) -> AggResult:\n        \"\"\"\n        Search and aggregate the data.\n\n        :param agg: the aggregation operator.\n        :type agg: dict\n        :param filter: filter conditions.\n        :type filter: dict\n        :param partition: the name of sub-index.\n        :type partition: int or str or list[int] or list[str]\n        :rtype: list\n        :param retry: whether to retry when the request fails caused by 1000029: QuotaLimiterException.\n        :type retry: bool\n        \"\"\"\n        params = {\"collection_name\": self.collection_name, \"index_name\": self.index_name,\n                  \"search\": {\"partition\": partition}, \"agg\": agg}\n        if filter is not None:\n            params[\"search\"][\"filter\"] = filter\n        remaining = self.retry_option.new_remaining(retry)\n        res = self.viking_db_service._retry_request(\"SearchAgg\", {}, json.dumps(params), remaining, self.retry_option)\n        res = json.loads(res)\n        data = res[\"data\"]\n        return AggResult(\n            agg_op=data[\"agg_op\"],\n            group_by_field=data[\"group_by_field\"],\n            agg_result=data[\"agg_result\"],\n        )\n\n    async def async_search_agg(self, agg: Dict[str, any], filter=None, partition=\"default\") -> AggResult:\n        params = {\"collection_name\": self.collection_name, \"index_name\": self.index_name,\n                  \"search\": {\"partition\": partition}, \"agg\": agg}\n        if filter is not None:\n            params[\"search\"][\"filter\"] = filter\n        res = await self.viking_db_service.async_json_exception(\"SearchAgg\", {}, json.dumps(params))\n        res = json.loads(res)\n        data = res[\"data\"]\n        return AggResult(\n            agg_op=data[\"agg_op\"],\n            group_by_field=data[\"group_by_field\"],\n            agg_result=data[\"agg_result\"],\n        )\n\n    def sort(self, query_vector: List[float], primary_keys: List, retry=True):\n        \"\"\"\n        Index sort: input a query vector and primary key list, get the sorted score list.\n\n        :param query_vector: one query vector.\n        :type query_vector: list\n        :param primary_keys: primary key list.\n        :type primary_keys: list\n        :param retry: whether to retry when the request fails caused by 1000029: QuotaLimiterException.\n        :type retry: bool\n        \"\"\"\n        params = {\"collection_name\": self.collection_name, \"index_name\": self.index_name,\n                  \"sort\": {\"query_vector\": query_vector, \"primary_keys\": primary_keys}}\n        remaining = self.retry_option.new_remaining(retry)\n        res = self.viking_db_service._retry_request(\"IndexSort\", {}, json.dumps(params), remaining, self.retry_option)\n        res = json.loads(res)\n        data = res[\"data\"]\n        result_items = []\n        for raw_item in data[\"sort_result\"]:\n            primary_key = raw_item[\"primary_key\"]\n            score = raw_item[\"score\"]\n            result_items.append(SortResultItem(primary_key=primary_key, score=score))\n        return IndexSortResult(sort_result=result_items, primary_key_not_exist=data[\"primary_key_not_exist\"])\n\n    def fetch_data(self, id: Union[str, List[str], int, List[int]], output_fields=None, partition=\"\", retry=True):\n        \"\"\"\n        Fetch data by primary key (id).\n        this method is much faster than Collection.fetch_data() due to indexed.\n        :param text: the given primary key or keys.\n        :type text: str or int or list[str] or list[int]\n        :param output_fields: specify the list of scalar fields to be returned.\n        :type output_fields: list\n        :param partition: the name of sub-index.\n        :type partition: int or str or list[int] or list[str]\n        :param retry: whether to retry when the request fails caused by 1000029: QuotaLimiterException.\n        :type retry: bool\n        \"\"\"\n        params = {}\n        if isinstance(id, str) or isinstance(id, int):\n            params = {\"collection_name\": self.collection_name, \"index_name\": self.index_name,\n                      \"primary_keys\": id}\n            if output_fields is not None:\n                params[\"output_fields\"] = output_fields\n            if partition != \"\":\n                params[\"partition\"] = partition\n            remaining = self.retry_option.new_remaining(retry)\n            res = self.viking_db_service._retry_request(\"FetchIndexData\", {}, json.dumps(params), remaining, self.retry_option)\n            res = json.loads(res)\n            # res[\"data\"]是一个list\n            # print(res[\"data\"][0][\"fields\"])\n            fields = {}\n            if \"fields\" in res[\"data\"][0]:\n                fields = res[\"data\"][0][\"fields\"]\n            data = Data(fields, id=id, timestamp=None)\n            return data\n        elif isinstance(id, List):\n            datas = []\n            params = {\"collection_name\": self.collection_name, \"index_name\": self.index_name,\n                      \"primary_keys\": id}\n            if output_fields is not None:\n                params[\"output_fields\"] = output_fields\n            if partition != \"\":\n                params[\"partition\"] = partition\n            if self._is_client:\n                params['replace_primay'] = True\n            remaining = self.retry_option.new_remaining(retry)\n            res = self.viking_db_service._retry_request(\"FetchIndexData\", {}, json.dumps(params), remaining, self.retry_option)\n            res = json.loads(res)\n            # print(res)\n            for item in res[\"data\"]:\n                # print(item)\n                fields = {}\n                if \"fields\" in item:\n                    # print(item[\"fields\"])\n                    fields = item[\"fields\"]\n                data = Data(fields, id=item[self.primary_key], timestamp=None)\n                datas.append(data)\n            return datas\n\n    async def async_fetch_data(self, id: Union[str, List[str], int, List[int]], output_fields=None, partition=\"\"):\n        params = {}\n        if isinstance(id, str) or isinstance(id, int):\n            params = {\"collection_name\": self.collection_name, \"index_name\": self.index_name,\n                      \"primary_keys\": id}\n            if output_fields is not None:\n                params[\"output_fields\"] = output_fields\n            if partition != \"\":\n                params[\"partition\"] = partition\n            res = await self.viking_db_service.async_get_body_exception(\"FetchIndexData\", {}, json.dumps(params))\n            res = json.loads(res)\n            # res[\"data\"]是一个list\n            # print(res[\"data\"][0][\"fields\"])\n            fields = {}\n            if \"fields\" in res[\"data\"][0]:\n                fields = res[\"data\"][0][\"fields\"]\n            data = Data(fields, id=id, timestamp=None)\n            return data\n        elif isinstance(id, List):\n            datas = []\n            params = {\"collection_name\": self.collection_name, \"index_name\": self.index_name,\n                      \"primary_keys\": id}\n            if output_fields is not None:\n                params[\"output_fields\"] = output_fields\n            if partition != \"\":\n                params[\"partition\"] = partition\n            if self._is_client:\n                params['replace_primay'] = True\n            res = await self.viking_db_service.async_get_body_exception(\"FetchIndexData\", {}, json.dumps(params))\n            res = json.loads(res)\n            # print(res)\n            for item in res[\"data\"]:\n                # print(item)\n                fields = {}\n                if \"fields\" in item:\n                    # print(item[\"fields\"])\n                    fields = item[\"fields\"]\n                data = Data(fields, id=item[self.primary_key], timestamp=None)\n                datas.append(data)\n            return datas\n"
  },
  {
    "path": "volcengine/viking_db/IndexClient.py",
    "content": "# coding:utf-8\n\nfrom volcengine.viking_db import Index, VikingDBService\nfrom volcengine.viking_db.common import RetryOption\n\n\nclass IndexClient(Index):\n    def __init__(self, collection_name, index_name,  host=\"api-vikingdb.volces.com\", region=\"cn-north-1\", ak=\"\", sk=\"\", scheme='http',\n                 connection_timeout=30, socket_timeout=30, proxy=None, retry_option=None):\n        vikingdb_service = VikingDBService(host, region, ak, sk, scheme, connection_timeout, socket_timeout, proxy, retry_option)\n        self.viking_db_service = vikingdb_service\n        self.collection_name = collection_name\n        self.index_name = index_name\n        self.primary_key = \"__primary_key\"\n        self._is_client = True\n        self.retry_option = retry_option if retry_option else RetryOption()\n"
  },
  {
    "path": "volcengine/viking_db/ServiceBase.py",
    "content": "# coding:utf-8\nimport json\nimport time\nimport requests\nimport aiohttp\n\nfrom .common import *\nfrom .exception import ERRCODE_EXCEPTION, VikingDBException\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.auth.SignerV4 import SignerV4\n\n\nclass VikingDBServiceBase(Service):\n    def __init__(self, host=\"api-vikingdb.volces.com\", region=\"cn-north-1\", ak=\"\", sk=\"\", scheme='http',\n                 connection_timeout=30, socket_timeout=30, proxy=None, retry_option=None):\n        \"\"\"\n        :param retry_option: retry option.\n        :type retry_option: RetryOption\n        \"\"\"\n        self.service_info = VikingDBServiceBase.get_service_info(host, region, scheme, connection_timeout, socket_timeout, ak, sk)\n        self.api_info = VikingDBServiceBase.get_api_info()\n        super(VikingDBServiceBase, self).__init__(self.service_info, self.api_info)\n        if ak:\n            self.set_ak(ak)\n        if sk:\n            self.set_sk(sk)\n\n        if proxy is not None:\n            if \"http:\" in proxy:\n                self.session.proxies.update({\n                    'http': proxy,\n                })\n            if \"https:\" in proxy:\n                self.session.proxies.update({\n                    'https': proxy,\n                })\n        self.retry_option = retry_option if retry_option else RetryOption()\n        try:\n            res = self.get_body(\"Ping\", {}, json.dumps({}))\n        except Exception as e:\n            raise VikingDBException(1000028, \"missed\", \"host or region is incorrect: {}\".format(str(e))) from None\n\n    def setHeader(self, header):\n        api_info = VikingDBServiceBase.get_api_info()\n        for key in api_info:\n            for item in header:\n                api_info[key].header[item] = header[item]\n        self.api_info = api_info\n\n    @staticmethod\n    def get_service_info(host, region, scheme, connection_timeout, socket_timeout, ak, sk):\n        service_info = ServiceInfo(host, {\"Host\": host},\n                                   Credentials(ak, sk, 'air', region), connection_timeout, socket_timeout,\n                                   scheme=scheme)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\n            # Collection\n            \"CreateCollection\": ApiInfo(\"POST\", \"/api/collection/create\", {}, {},\n                                        {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"GetCollection\": ApiInfo(\"GET\", \"/api/collection/info\", {}, {},\n                                     {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"DropCollection\": ApiInfo(\"POST\", \"/api/collection/drop\", {}, {},\n                                      {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"ListCollections\": ApiInfo(\"GET\", \"/api/collection/list\", {}, {},\n                                       {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            # Index\n            \"CreateIndex\": ApiInfo(\"POST\", \"/api/index/create\", {}, {},\n                                   {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"GetIndex\": ApiInfo(\"GET\", \"/api/index/info\", {}, {},\n                                {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"DropIndex\": ApiInfo(\"POST\", \"/api/index/drop\", {}, {},\n                                 {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"ListIndexes\": ApiInfo(\"GET\", \"/api/index/list\", {}, {},\n                                   {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"UpsertData\": ApiInfo(\"POST\", \"/api/collection/upsert_data\", {}, {},\n                                  {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"UpdateData\": ApiInfo(\"POST\", \"/api/collection/update_data\", {}, {},\n                                  {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"DeleteData\": ApiInfo(\"POST\", \"/api/collection/del_data\", {}, {},\n                                  {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"FetchData\": ApiInfo(\"GET\", \"/api/collection/fetch_data\", {}, {},\n                                 {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"FetchIndexData\": ApiInfo(\"GET\", \"/api/index/fetch_data\", {}, {},\n                                      {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"SearchIndex\": ApiInfo(\"POST\", \"/api/index/search\", {}, {},\n                                   {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"SearchAgg\": ApiInfo(\"POST\", \"/api/index/search/agg\", {}, {},\n                                   {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"IndexSort\": ApiInfo(\"POST\", \"/api/index/sort\", {}, {},\n                                 {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"Embedding\": ApiInfo(\"POST\", \"/api/data/embedding\", {}, {},\n                                 {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"ListEmbeddings\": ApiInfo(\"GET\", \"/api/data/list_embedding_models\", {}, {},\n                                      {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"UpdateCollection\": ApiInfo(\"POST\", \"/api/collection/update\", {}, {},\n                                        {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"UpdateIndex\": ApiInfo(\"POST\", \"/api/index/update\", {}, {},\n                                   {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"Rerank\": ApiInfo(\"POST\", \"/api/index/rerank\", {}, {},\n                              {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"BatchRerank\": ApiInfo(\"POST\", \"/api/index/batch_rerank\", {}, {},\n                                   {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"Ping\": ApiInfo(\"GET\", \"/api/viking_db/data/ping\", {}, {},\n                            {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"EmbeddingV2\": ApiInfo(\"POST\", \"/api/data/embedding/version/2\", {}, {},\n                                   {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"CreateTask\": ApiInfo(\"POST\", \"/api/task/create\", {}, {},\n                                   {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"GetTask\": ApiInfo(\"POST\", \"/api/task/info\", {}, {},\n                                   {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"ListTask\": ApiInfo(\"POST\", \"/api/task/list\", {}, {},\n                                   {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"DropTask\": ApiInfo(\"POST\", \"/api/task/drop\", {}, {},\n                                   {'Accept': 'application/json', 'Content-Type': 'application/json'}),\n            \"UpdateTask\": ApiInfo(\"POST\", \"/api/task/update\", {}, {},\n                                   {'Accept': 'application/json', 'Content-Type': 'application/json'}),                                    \n        }\n        return api_info\n\n    # get参数放在body里面\n    def get_body(self, api, params, body):\n        if not (api in self.api_info):\n            raise Exception(\"no such api\")\n        api_info = self.api_info[api]\n        r = self.prepare_request(api_info, params)\n        r.headers['Content-Type'] = 'application/json'\n        r.body = body\n\n        SignerV4.sign(r, self.service_info.credentials)\n\n        url = r.build()\n        resp = self.session.get(url, headers=r.headers, data=r.body,\n                                timeout=(self.service_info.connection_timeout, self.service_info.socket_timeout))\n        if resp.status_code == 200:\n            return json.dumps(resp.json())\n        else:\n            raise Exception(resp.text.encode(\"utf-8\"))\n\n    async def async_json(self, api, params, body):\n        if not (api in self.api_info):\n            raise Exception(\"no such api\")\n        api_info = self.api_info[api]\n        r = self.prepare_request(api_info, params)\n        r.headers['Content-Type'] = 'application/json'\n        r.body = body\n\n        SignerV4.sign(r, self.service_info.credentials)\n        timeout = aiohttp.ClientTimeout(connect=self.service_info.connection_timeout,\n                                        sock_connect=self.service_info.socket_timeout)\n        url = r.build()\n        async with aiohttp.request(\"POST\", url, headers=r.headers, data=r.body, timeout=timeout) as r:\n            resp = await r.text(encoding=\"utf-8\")\n            if r.status == 200:\n                return resp\n            else:\n                raise Exception(resp)\n\n    # get参数放在body里面，异常处理\n    def get_body_exception(self, api, params, body):\n        # res = self.get_body(api, params, body)\n        # if res == '':\n        #     raise VikingDBException(1000028, \"missed\",\n        #                             \"empty response due to unknown error, please contact customer service\")\n        # return res\n        try:\n            res = self.get_body(api, params, body)\n        except requests.Timeout as e:\n            raise e\n        except Exception as e:\n            try:\n                res_json = json.loads(e.args[0].decode(\"utf-8\"))\n            except:\n                raise VikingDBException(1000028, \"missed\", \"json load res error, res:{}\".format(str(e))) from None\n            code = res_json.get(\"code\", 1000028)\n            request_id = res_json.get(\"request_id\", 1000028)\n            message = res_json.get(\"message\", None)\n            raise ERRCODE_EXCEPTION.get(code, VikingDBException)(code, request_id, message) from None\n        if res == '':\n            raise VikingDBException(1000028, \"missed\",\n                                    \"empty response due to unknown error, please contact customer service\") from None\n        return res\n\n    # get参数放在url里面，异常处理\n    def get_exception(self, api, params):\n        try:\n            res = self.get(api, params)\n        except requests.Timeout as e:\n            raise e\n        except Exception as e:\n            try:\n                res_json = json.loads(e.args[0])\n            except:\n                raise VikingDBException(1000028, \"missed\", \"json load res error, res:{}\".format(str(e))) from None\n            code = res_json.get(\"code\", 1000028)\n            request_id = res_json.get(\"request_id\", 1000028)\n            message = res_json.get(\"message\", None)\n            raise ERRCODE_EXCEPTION.get(code, VikingDBException)(code, request_id, message) from None\n        if res == '':\n            raise VikingDBException(1000028, \"missed\",\n                                    \"empty response due to unknown error, please contact customer service\") from None\n        return res\n\n    # post异常处理\n    def json_exception(self, api, params, body):\n        # res = self.json(api, params, body)\n        # if res == '':\n        #     raise VikingDBException(1000028, \"missed\",\n        #                             \"empty response due to unknown error, please contact customer service\")\n        # return res\n        try:\n            res = self.json(api, params, body)\n        except requests.Timeout as e:\n            raise e\n        except Exception as e:\n            try:\n                res_json = json.loads(e.args[0].decode(\"utf-8\"))\n            except:\n                raise VikingDBException(1000028, \"missed\", \"json load res error, res:{}\".format(str(e))) from None\n            code = res_json.get(\"code\", 1000028)\n            request_id = res_json.get(\"request_id\", 1000028)\n            message = res_json.get(\"message\", None)\n            raise ERRCODE_EXCEPTION.get(code, VikingDBException)(code, request_id, message) from None\n        if res == '':\n            raise VikingDBException(1000028, \"missed\",\n                                    \"empty response due to unknown error, please contact customer service\") from None\n        return res\n\n    async def async_json_exception(self, api, params, body):\n        try:\n            res = await self.async_json(api, params, body)\n        except requests.Timeout as e:\n            raise e\n        except Exception as e:\n            try:\n                res_json = json.loads(e.args[0].decode(\"utf-8\"))\n            except:\n                raise VikingDBException(1000028, \"missed\", \"json load res error, res:{}\".format(str(e))) from None\n            code = res_json.get(\"code\", 1000028)\n            request_id = res_json.get(\"request_id\", 1000028)\n            message = res_json.get(\"message\", None)\n            raise ERRCODE_EXCEPTION.get(code, VikingDBException)(code, request_id, message) from None\n        if res == '':\n            raise VikingDBException(1000028, \"missed\",\n                                    \"empty response due to unknown error, please contact customer service\") from None\n        return res\n\n    async def async_get_body_exception(self, api, params, body):\n        try:\n            res = await self.async_get_body(api, params, body)\n        except requests.Timeout as e:\n            raise e\n        except Exception as e:\n            try:\n                res_json = json.loads(e.args[0].decode(\"utf-8\"))\n            except:\n                raise VikingDBException(1000028, \"missed\", \"json load res error, res:{}\".format(str(e))) from None\n            code = res_json.get(\"code\", 1000028)\n            request_id = res_json.get(\"request_id\", 1000028)\n            message = res_json.get(\"message\", None)\n            raise ERRCODE_EXCEPTION.get(code, VikingDBException)(code, request_id, message) from None\n        if res == '':\n            raise VikingDBException(1000028, \"missed\",\n                                    \"empty response due to unknown error, please contact customer service\") from None\n        return res\n\n    async def async_get_body(self, api, params, body):\n        if not (api in self.api_info):\n            raise Exception(\"no such api\")\n        api_info = self.api_info[api]\n        r = self.prepare_request(api_info, params)\n        r.headers['Content-Type'] = 'application/json'\n        r.body = body\n\n        SignerV4.sign(r, self.service_info.credentials)\n        timeout = aiohttp.ClientTimeout(connect=self.service_info.connection_timeout,\n                                        sock_connect=self.service_info.socket_timeout)\n        url = r.build()\n\n        async with aiohttp.request(\"GET\", url, headers=r.headers, data=r.body, timeout=timeout) as r:\n            resp = await r.text(encoding=\"utf-8\")\n            if r.status == 200:\n                return resp\n            else:\n                raise Exception(resp)\n            \n    def _retry_request(self, api, params, body, remaining=None, retry_option=None):\n        try: \n            method = self.api_info[api].method\n            if method == \"GET\":\n                res = self.get_body(api, params, body)\n            else:\n                res = self.json(api, params, body)\n        except requests.Timeout as e:\n            if remaining and remaining.has_remaining():\n                timeout = retry_option.calculate_retry_timeout(remaining)\n                time.sleep(timeout)\n            else:\n                raise e\n            return self._retry_request(api, params, body, remaining, retry_option)\n        except Exception as e:\n            err_msg = \"request exception: {}\".format(e)\n            try:\n                res_json = json.loads(e.args[0].decode(\"utf-8\"))\n            except:\n                raise VikingDBException(1000028, \"missed\",\n                                        \"res json load error: {}, due to last error: {}\".format(str(e), err_msg)) from None\n            code = res_json.get(\"code\", 1000028)\n            request_id = res_json.get(\"request_id\", 1000028)\n            message = res_json.get(\"message\", None)\n            if code == 1000029 and remaining and remaining.has_remaining():\n                timeout = retry_option.calculate_retry_timeout(remaining)\n                time.sleep(timeout)\n                return self._retry_request(api, params, body, remaining, retry_option)\n            else:\n                raise ERRCODE_EXCEPTION.get(code, VikingDBException)(code, request_id, message) from None\n        if res == '':\n            raise VikingDBException(1000028, \"missed\",\n                                    \"empty response due to unknown error, please contact customer service\") from None\n        return res\n"
  },
  {
    "path": "volcengine/viking_db/Task.py",
    "content": "class Task(object):\n    def __init__(self, collection_name, create_time, process_info, task_id, task_params, task_status, task_type, update_person, update_time):\n        self.collection_name = collection_name\n        self.create_time = create_time\n        self.process_info = process_info\n        self.task_id = task_id\n        self.task_params = task_params\n        self.task_status = task_status\n        self.task_type = task_type\n        self.update_person = update_person\n        self.update_time = update_time\n\n"
  },
  {
    "path": "volcengine/viking_db/VikingDBService.py",
    "content": "# coding:utf-8\nfrom .Task import Task\nimport json\nimport threading\n\nfrom .Index import Index\nfrom .common import *\nfrom .Collection import Collection\nfrom .ServiceBase import VikingDBServiceBase\nfrom .exception import ERRCODE_EXCEPTION, VikingDBException\nfrom typing import Union, List\n\n\nclass VikingDBService(VikingDBServiceBase):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(VikingDBService, \"_instance\"):\n            with VikingDBService._instance_lock:\n                if not hasattr(VikingDBService, \"_instance\"):\n                    VikingDBService._instance = object.__new__(cls)\n        return VikingDBService._instance\n\n    def __init__(self, host=\"api-vikingdb.volces.com\", region=\"cn-north-1\", ak=\"\", sk=\"\", scheme='http',\n                 connection_timeout=30, socket_timeout=30, proxy=None, retry_option=None):\n        \"\"\"\n        :param retry_option: retry option.\n        :type retry_option: RetryOption\n        \"\"\"\n        super(VikingDBService, self).__init__(\n            host, region, ak, sk, scheme, connection_timeout, socket_timeout, proxy, retry_option)\n\n    def create_collection(self, collection_name, fields, description=\"\", vectorize=None, project=\"default\"):\n        \"\"\"\n        create a collection.\n\n        :param collection_name: The name of the collection.\n        :type collection_name: str\n        :param fields: The custom fields of the collection.\n        :type fields: list[Field]\n        :param description: The description of the collection.\n        :type description: str\n        :param vectorize: vectorize for multi-modal data.\n        :type vectorize: list[VectorizeTuple]\n        :param project: The name of the project.\n        :type project: str\n        :rtype: Collection\n        \"\"\"\n        params = {\"collection_name\": collection_name, \"description\": description, \"project\": project}\n        assert isinstance(fields, list)\n        primary_key = None\n        _fields = []\n        for field in fields:\n            assert isinstance(field, Field)\n            if field.is_primary_key:\n                primary_key = field.field_name\n            _field = {\n                \"field_name\": field.field_name,\n                \"field_type\": field.field_type.value,\n            }\n            if field.default_val is not None:\n                _field[\"default_val\"] = field.default_val\n            if field.dim is not None:\n                _field[\"dim\"] = field.dim\n            if field.pipeline_name is not None:\n                _field[\"pipeline_name\"] = field.pipeline_name\n            _fields.append(_field)\n        if primary_key:\n            params[\"primary_key\"] = primary_key\n        else:\n            params[\"primary_key\"] = \"__AUTO_ID__\"\n        params[\"fields\"] = _fields\n        if vectorize is not None:\n            assert isinstance(vectorize, list) and all(isinstance(item, VectorizeTuple) for item in vectorize)\n            params[\"vectorize\"] = [convert_vectorize_tuple_to_dict(v) for v in vectorize]\n        self.json_exception(\"CreateCollection\", {}, json.dumps(params))\n        return Collection(collection_name, fields, self, primary_key, description=description, retry_option=self.retry_option, vectorize=vectorize)\n\n    async def async_create_collection(self, collection_name, fields, description=\"\", vectorize=None):\n        params = {\"collection_name\": collection_name, \"description\": description}\n        assert isinstance(fields, list)\n        primary_key = None\n        _fields = []\n        for field in fields:\n            assert isinstance(field, Field)\n            if field.is_primary_key:\n                primary_key = field.field_name\n            _field = {\n                \"field_name\": field.field_name,\n                \"field_type\": field.field_type.value,\n            }\n            if field.default_val is not None:\n                _field[\"default_val\"] = field.default_val\n            if field.dim is not None:\n                _field[\"dim\"] = field.dim\n            if field.pipeline_name is not None:\n                _field[\"pipeline_name\"] = field.pipeline_name\n            _fields.append(_field)\n        if primary_key:\n            params[\"primary_key\"] = primary_key\n        else:\n            params[\"primary_key\"] = \"__AUTO_ID__\"\n        params[\"fields\"] = _fields\n        if vectorize is not None:\n            assert isinstance(vectorize, list) and all(isinstance(item, VectorizeTuple) for item in vectorize)\n            params[\"vectorize\"] = [convert_vectorize_tuple_to_dict(v) for v in vectorize]\n        await self.async_json_exception(\"CreateCollection\", {}, json.dumps(params))\n        return Collection(collection_name, fields, self, primary_key, description=description, retry_option=self.retry_option, vectorize=vectorize)\n\n    def get_collection(self, collection_name, retry=True):\n        \"\"\"\n        get a collection\n\n        :param collection_name: The name of the collection.\n        :type collection_name: str\n        :rtype: Collection\n        :param retry: Whether to retry when QuotaLimiterException occurs.\n        :type retry: bool\n        \"\"\"\n        params = {\"collection_name\": collection_name}\n        remaining = self.retry_option.new_remaining(retry)\n        res = self._retry_request(\"GetCollection\", {}, json.dumps(params), remaining, self.retry_option)\n        res = json.loads(res)\n        description = \"\"\n        stat = None\n        fields = []\n        indexes = []\n        create_time = None\n        update_time = None\n        update_person = None\n        vectorize = None\n        if \"fields\" in res[\"data\"]:\n            # fields 应该是list<Field>，这里是json array\n            # print(res[\"data\"][\"fields\"])\n            for item in res[\"data\"][\"fields\"]:\n                field_name = None\n                field_type = None\n                default_val = None\n                dim = None\n                is_primary_key = False\n                pipeline_name = None\n                # print(item)\n                if \"field_name\" in item:\n                    field_name = item[\"field_name\"]\n                if \"field_type\" in item:\n                    field_type = item[\"field_type\"]\n                if \"default_val\" in item:\n                    default_val = item[\"default_val\"]\n                if \"dim\" in item:\n                    dim = item[\"dim\"]\n                if \"primary_key\" in res[\"data\"]:\n                    if res[\"data\"][\"primary_key\"] == field_name:\n                        is_primary_key = True\n                if \"pipeline_name\" in item:\n                    pipeline_name = item[\"pipeline_name\"]\n                # print(field_name, field_type, default_val, dim, is_primary_key, pipeline_name)\n                field = Field(field_name, field_type, default_val=default_val, dim=dim,\n                              is_primary_key=is_primary_key, pipeline_name=pipeline_name)\n                fields.append(field)\n        if \"description\" in res[\"data\"]:\n            description = res[\"data\"][\"description\"]\n        if \"indexes\" in res[\"data\"]:\n            # print(res[\"data\"][\"indexes\"]) 返回的是index_name\n            for item in res[\"data\"][\"indexes\"]:\n                # print(item)\n                index = self.get_index(collection_name, item)\n                indexes.append(index)\n        if \"stat\" in res[\"data\"]:\n            stat = res[\"data\"][\"stat\"]\n        if \"create_time\" in res[\"data\"]:\n            create_time = res[\"data\"][\"create_time\"]\n        if \"update_time\" in res[\"data\"]:\n            update_time = res[\"data\"][\"update_time\"]\n        if \"update_person\" in res[\"data\"]:\n            update_person = res[\"data\"][\"update_person\"]\n        if \"vectorize\" in res[\"data\"]:\n            vectorize_dict_list = res[\"data\"][\"vectorize\"]\n            vectorize = [convert_dict_to_vectorize_tuple(v_dict) for v_dict in vectorize_dict_list]\n        collection = Collection(collection_name, fields, self, res[\"data\"][\"primary_key\"], indexes=indexes, stat=stat,\n                                description=description, create_time=create_time, update_time=update_time,\n                                update_person=update_person, retry_option=self.retry_option, vectorize=vectorize)\n        return collection\n\n    async def async_get_collection(self, collection_name):\n        params = {\"collection_name\": collection_name}\n        res = await self.async_get_body_exception(\"GetCollection\", {}, json.dumps(params))\n        res = json.loads(res)\n        if \"data\" not in res:\n            raise VikingDBException(1000028, \"missed\", \"data format error, please contact us\")\n        return self.package_collection(collection_name, res[\"data\"])\n\n    def package_collection(self, collection_name, res):\n        description = \"\"\n        stat = None\n        fields = []\n        indexes = []\n        create_time = None\n        update_time = None\n        update_person = None\n        vectorize = None\n        if \"fields\" in res:\n            for item in res[\"fields\"]:\n                field_name = None\n                field_type = None\n                default_val = None\n                dim = None\n                is_primary_key = False\n                pipeline_name = None\n                # print(item)\n                if \"field_name\" in item:\n                    field_name = item[\"field_name\"]\n                if \"field_type\" in item:\n                    field_type = item[\"field_type\"]\n                if \"default_val\" in item:\n                    default_val = item[\"default_val\"]\n                if \"dim\" in item:\n                    dim = item[\"dim\"]\n                if \"primary_key\" in res:\n                    if res[\"primary_key\"] == field_name:\n                        is_primary_key = True\n                if \"pipeline_name\" in item:\n                    pipeline_name = item[\"pipeline_name\"]\n                # print(field_name, field_type, default_val, dim, is_primary_key, pipeline_name)\n                field = Field(field_name, field_type, default_val=default_val, dim=dim,\n                              is_primary_key=is_primary_key, pipeline_name=pipeline_name)\n                fields.append(field)\n        if \"description\" in res:\n            description = res[\"description\"]\n        if \"indexes\" in res:\n            for item in res[\"indexes\"]:\n                # print(item)\n                index = self.get_index(collection_name, item)\n                indexes.append(index)\n        if \"stat\" in res:\n            stat = res[\"stat\"]\n        if \"create_time\" in res:\n            create_time = res[\"create_time\"]\n        if \"update_time\" in res:\n            update_time = res[\"update_time\"]\n        if \"update_person\" in res:\n            update_person = res[\"update_person\"]\n        if \"vectorize\" in res:\n            vectorize_dict_list = res[\"vectorize\"]\n            vectorize = [convert_dict_to_vectorize_tuple(v_dict) for v_dict in vectorize_dict_list]\n        # print(description, fields, indexes, stat, res[\"primary_key\"])\n        collection = Collection(collection_name, fields, self, res[\"primary_key\"], indexes=indexes, stat=stat,\n                                description=description, create_time=create_time, update_time=update_time,\n                                update_person=update_person, retry_option=self.retry_option, vectorize=vectorize)\n        return collection\n\n    def drop_collection(self, collection_name, retry=True):\n        \"\"\"\n        drop a collection\n\n        :param collection_name: The name of the collection.\n        :type collection_name: str\n        :rtype: None\n        :param retry: Whether to retry when QuotaLimiterException occurs.\n        :type retry: bool\n        \"\"\"\n        remaining = self.retry_option.new_remaining(retry)\n        params = {\"collection_name\": collection_name}\n        self._retry_request(\"DropCollection\", {}, json.dumps(params), remaining, self.retry_option)\n        # res = self.json(\"DropCollection\", {}, json.dumps(params))\n\n    async def async_drop_collection(self, collection_name):\n        params = {\"collection_name\": collection_name}\n        await self.async_json_exception(\"DropCollection\", {}, json.dumps(params))\n\n    def list_collections(self, project=\"\"):\n        \"\"\"\n        list collections\n\n        :param project: The name of the project.\n        :type project: str\n        :rtype: list[Collection]\n        \"\"\"\n        params = {\n            \"project\": project\n        }\n        res = self.get_body_exception(\"ListCollections\", {}, json.dumps(params))\n        res = json.loads(res)\n        collections = []\n        for indexItem in res[\"data\"]:\n            description = None\n            collection_name = None\n            stat = None\n            fields = []\n            indexes = []\n            create_time = None\n            update_time = None\n            update_person = None\n            vectorize = None\n            if \"fields\" in indexItem:\n                for item in indexItem[\"fields\"]:\n                    field_name = None\n                    field_type = None\n                    default_val = None\n                    dim = None\n                    is_primary_key = False\n                    pipeline_name = None\n                    if \"field_name\" in item:\n                        field_name = item[\"field_name\"]\n                    if \"field_type\" in item:\n                        field_type = item[\"field_type\"]\n                    if \"default_val\" in item:\n                        default_val = item[\"default_val\"]\n                    if \"dim\" in item:\n                        dim = item[\"dim\"]\n                    if \"primary_key\" in indexItem:\n                        if indexItem[\"primary_key\"] == field_name:\n                            is_primary_key = True\n                    if \"pipeline_name\" in item:\n                        pipeline_name = item[\"pipeline_name\"]\n                    # print(field_name, field_type, default_val, dim, is_primary_key, pipeline_name)\n                    field = Field(field_name, field_type, default_val=default_val, dim=dim,\n                                  is_primary_key=is_primary_key, pipeline_name=pipeline_name)\n                    fields.append(field)\n            if \"collection_name\" in indexItem:\n                collection_name = indexItem[\"collection_name\"]\n            if \"description\" in indexItem:\n                description = indexItem[\"description\"]\n            if \"indexes\" in indexItem:\n                # print(res[\"data\"][\"indexes\"]) 返回的是index_name\n                for item in indexItem[\"indexes\"]:\n                    # print(item)\n                    index = self.get_index(collection_name, item)\n                    indexes.append(index)\n            if \"stat\" in indexItem:\n                stat = indexItem[\"stat\"]\n            if \"create_time\" in indexItem:\n                create_time = indexItem[\"create_time\"]\n            if \"update_time\" in indexItem:\n                update_time = indexItem[\"update_time\"]\n            if \"update_person\" in indexItem:\n                update_person = indexItem[\"update_person\"]\n            if \"vectorize\" in indexItem:\n                vectorize_dict_list = indexItem[\"vectorize\"]\n                vectorize = [convert_dict_to_vectorize_tuple(v_dict) for v_dict in vectorize_dict_list]\n            # print(description, fields, indexes, stat, indexItem[\"primary_key\"], create_time, update_time, update_person)\n            collection = Collection(collection_name, fields, self, indexItem[\"primary_key\"], indexes=indexes,\n                                    stat=stat,\n                                    description=description, create_time=create_time, update_time=update_time,\n                                    update_person=update_person, retry_option=self.retry_option, vectorize=vectorize)\n            collections.append(collection)\n        return collections\n\n    async def async_list_collections(self):\n        res = await self.async_get_body_exception(\"ListCollections\", {}, json.dumps({}))\n        res = json.loads(res)\n        collections = []\n        if \"data\" not in res:\n            raise VikingDBException(1000028, \"missed\", \"data format error, please contact us\")\n        for indexItem in res[\"data\"]:\n            collection = self.package_collection(indexItem[\"collection_name\"], indexItem)\n            collections.append(collection)\n        return collections\n\n    def create_index(self, collection_name, index_name, vector_index=None, cpu_quota=2, description=\"\", partition_by=\"\",\n                     scalar_index=None, shard_count=None, shard_policy=None):\n        \"\"\"\n        create an index.\n\n        :param collection_name: The name of the collection.\n        :type collection_name: str\n        :param index_name: The name of the index.\n        :type index_name: str\n        :param vector_index: determine vector index\n        :type vector_index: VectorIndexParams or None\n        :param cpu_quota: CPU quota\n        :type cpu_quota: int\n        :param description: The description of the index.\n        :type description: str\n        :param partition_by: partition_by sub-indexing partition.\n        :type partition_by: str\n        :param scalar_index: determine index type.\n        :type scalar_index: list or None\n        :param shard_count: shard count.\n        :type shard_count: int\n        :rtype: Index\n        \"\"\"\n        # print(vector_index.dic())\n        params = {\n            \"collection_name\": collection_name,\n            \"index_name\": index_name,\n            \"cpu_quota\": cpu_quota,\n            \"description\": description,\n            \"partition_by\": partition_by,\n        }\n        if vector_index is not None:\n            params[\"vector_index\"] = vector_index.dic()  # vector_index 类型应该是VectorIndexParams，而非json\n        if scalar_index is not None:\n            params[\"scalar_index\"] = scalar_index\n        if shard_count is not None:\n            params[\"shard_count\"] = shard_count\n        if shard_policy is not None:\n            params[\"shard_policy\"] = shard_policy.value\n        # print(params)\n        res = self.json_exception(\"CreateIndex\", {}, json.dumps(params))\n        # print(res)\n        index = Index(collection_name, index_name, vector_index, scalar_index, None, self, description=description,\n                      cpu_quota=cpu_quota, partition_by=partition_by, retry_option=self.retry_option)\n        return index\n\n    async def async_create_index(self, collection_name, index_name, vector_index=None, cpu_quota=2, description=\"\",\n                                 partition_by=\"\", scalar_index=None, shard_count=None,  shard_policy=None):\n        params = {\n            \"collection_name\": collection_name,\n            \"index_name\": index_name,\n            \"cpu_quota\": cpu_quota,\n            \"description\": description,\n            \"partition_by\": partition_by,\n        }\n        if vector_index is not None:\n            params[\"vector_index\"] = vector_index.dic()  # vector_index 类型应该是VectorIndexParams，而非json\n        if scalar_index is not None:\n            params[\"scalar_index\"] = scalar_index\n        if shard_count is not None:\n            params[\"shard_count\"] = shard_count\n        if shard_policy is not None:\n            params[\"shard_policy\"] = shard_policy.value\n        # print(params)\n        res = await self.async_json_exception(\"CreateIndex\", {}, json.dumps(params))\n        # print(res)\n        index = Index(collection_name, index_name, vector_index, scalar_index, None, self, description=description,\n                      cpu_quota=cpu_quota, partition_by=partition_by, retry_option=self.retry_option)\n        return index\n\n    def get_index(self, collection_name, index_name, retry=True):\n        \"\"\"\n        get an index\n\n        :param collection_name: The name of the collection.\n        :type collection_name: str\n        :param index_name: The name of the index.\n        :type index_name: str\n        :rtype: Index\n        :param retry: Whether to retry when QuotaLimiterException occurs.\n        :type retry: bool\n        \"\"\"\n        params = {\n            \"collection_name\": collection_name,\n            \"index_name\": index_name,\n        }\n        remaining = self.retry_option.new_remaining(retry)\n        res = self._retry_request(\"GetIndex\", {}, json.dumps(params), remaining, self.retry_option)\n        res = json.loads(res)\n        vector_index = scalar_index = partition_by = status = None\n        cpu_quota = 2\n        description = \"\"\n        shard_count = shard_policy = index_cost = create_time = update_time = update_person = None\n        # print(res[\"data\"])\n        if \"vector_index\" in res[\"data\"]:\n            vector_index = res[\"data\"][\"vector_index\"]\n        # if \"scalar_index\" in res[\"data\"]:\n        #     scalar_index = res[\"data\"][\"scalar_index\"]\n        if \"range_index\" in res[\"data\"]:\n            scalar_index = res[\"data\"][\"range_index\"]\n        if \"enum_index\" in res[\"data\"]:\n            if scalar_index is not None:\n                scalar_index = set(scalar_index + res[\"data\"][\"enum_index\"])\n            else:\n                scalar_index = res[\"data\"][\"enum_index\"]\n        if \"description\" in res[\"data\"]:\n            description = res[\"data\"][\"description\"]\n        if \"cpu_quota\" in res[\"data\"]:\n            cpu_quota = res[\"data\"][\"cpu_quota\"]\n        if \"partition_by\" in res[\"data\"]:\n            partition_by = res[\"data\"][\"partition_by\"]\n        if \"status\" in res[\"data\"]:\n            status = res[\"data\"][\"status\"]\n        if \"create_time\" in res[\"data\"]:\n            create_time = res[\"data\"][\"create_time\"]\n        if \"update_time\" in res[\"data\"]:\n            update_time = res[\"data\"][\"update_time\"]\n        if \"update_person\" in res[\"data\"]:\n            update_person = res[\"data\"][\"update_person\"]\n        if \"index_cost\" in res[\"data\"]:\n            index_cost = res[\"data\"][\"index_cost\"]\n        if \"shard_count\" in res[\"data\"]:\n            shard_count = res[\"data\"][\"shard_count\"]\n        if \"shard_policy\" in res[\"data\"]:\n            shard_policy = res[\"data\"][\"shard_policy\"]\n        # print(collection_name, index_name, vector_index, scalar_index, description, cpu_quota, partition_by, status)\n        index = Index(collection_name, index_name, vector_index, scalar_index, status, self, description=description,\n                      cpu_quota=cpu_quota, partition_by=partition_by, create_time=create_time, update_time=update_time,\n                      update_person=update_person, index_cost=index_cost, shard_count=shard_count, shard_policy=shard_policy,\n                      retry_option=self.retry_option)\n        return index\n\n    async def async_get_index(self, collection_name, index_name):\n        params = {\n            \"collection_name\": collection_name,\n            \"index_name\": index_name,\n        }\n        res = await self.async_get_body_exception(\"GetIndex\", {}, json.dumps(params))\n        res = json.loads(res)\n        if \"data\" not in res:\n            raise VikingDBException(1000028, \"missed\", \"data format error, please contact us\")\n        return self.package_index(collection_name, index_name, res[\"data\"])\n\n    def package_index(self, collection_name, index_name, res):\n        vector_index = scalar_index = partition_by = status = None\n        cpu_quota = 2\n        description = \"\"\n        shard_count = shard_policy = index_cost = create_time = update_time = update_person = None\n        if \"vector_index\" in res:\n            vector_index = res[\"vector_index\"]\n        if \"range_index\" in res:\n            scalar_index = res[\"range_index\"]\n        if \"enum_index\" in res:\n            if scalar_index is not None:\n                scalar_index = set(scalar_index + res[\"enum_index\"])\n            else:\n                scalar_index = res[\"enum_index\"]\n        if \"description\" in res:\n            description = res[\"description\"]\n        if \"cpu_quota\" in res:\n            cpu_quota = res[\"cpu_quota\"]\n        if \"partition_by\" in res:\n            partition_by = res[\"partition_by\"]\n        if \"status\" in res:\n            status = res[\"status\"]\n        if \"create_time\" in res:\n            create_time = res[\"create_time\"]\n        if \"update_time\" in res:\n            update_time = res[\"update_time\"]\n        if \"update_person\" in res:\n            update_person = res[\"update_person\"]\n        if \"index_cost\" in res:\n            index_cost = res[\"index_cost\"]\n        if \"shard_count\" in res:\n            shard_count = res[\"shard_count\"]\n        if \"shard_policy\" in res:\n            shard_policy = res[\"shard_policy\"]\n        # print(collection_name, index_name, vector_index, scalar_index, description, cpu_quota, partition_by, status)\n        index = Index(collection_name, index_name, vector_index, scalar_index, status, self, description=description,\n                      cpu_quota=cpu_quota, partition_by=partition_by, create_time=create_time, update_time=update_time,\n                      update_person=update_person, index_cost=index_cost, shard_count=shard_count, shard_policy=shard_policy,\n                      retry_option=self.retry_option)\n        return index\n\n    def drop_index(self, collection_name, index_name):\n        \"\"\"\n        drop an index\n\n        :param collection_name: The name of the collection.\n        :type collection_name: str\n        :param index_name: The name of the index.\n        :type index_name: str\n        :rtype: None\n        \"\"\"\n        params = {\n            \"collection_name\": collection_name,\n            \"index_name\": index_name,\n        }\n        # res = self.json(\"DropIndex\", {}, json.dumps(params))\n        self.json_exception(\"DropIndex\", {}, json.dumps(params))\n\n    async def async_drop_index(self, collection_name, index_name):\n        params = {\n            \"collection_name\": collection_name,\n            \"index_name\": index_name,\n        }\n        await self.async_json_exception(\"DropIndex\", {}, json.dumps(params))\n\n    def list_indexes(self, collection_name):\n        \"\"\"\n        list indexes\n\n        :rtype: list[Index]\n        \"\"\"\n        params = {\n            \"collection_name\": collection_name,\n        }\n        # res = self.get(\"ListIndexes\", params)\n        res = self.get_exception(\"ListIndexes\", params)\n        res = json.loads(res)\n        indexes = []\n        for item in res[\"data\"]:\n            # print(item)\n            vector_index = scalar_index = partition_by = status = None\n            cpu_quota = 2\n            description = index_name = \"\"\n            shard_count = shard_policy = index_cost = create_time = update_time = update_person = None\n            if \"index_name\" in item:\n                index_name = item[\"index_name\"]\n            if \"vector_index\" in item:\n                vector_index = item[\"vector_index\"]\n            # if \"scalar_index\" in item:\n            #     scalar_index = item[\"scalar_index\"]\n            if \"range_index\" in item:\n                scalar_index = item[\"range_index\"]\n            if \"enum_index\" in item:\n                if scalar_index is not None:\n                    scalar_index = set(scalar_index + item[\"enum_index\"])\n                else:\n                    scalar_index = item[\"enum_index\"]\n            if \"description\" in item:\n                description = item[\"description\"]\n            if \"cpu_quota\" in item:\n                cpu_quota = item[\"cpu_quota\"]\n            if \"partition_by\" in item:\n                partition_by = item[\"partition_by\"]\n            if \"status\" in item:\n                status = item[\"status\"]\n            if \"create_time\" in item:\n                create_time = item[\"create_time\"]\n            if \"update_time\" in item:\n                update_time = item[\"update_time\"]\n            if \"update_person\" in item:\n                update_person = item[\"update_person\"]\n            if \"index_cost\" in item:\n                index_cost = item[\"index_cost\"]\n            if \"shard_count\" in item:\n                shard_count = item[\"shard_count\"]\n            if \"shard_policy\" in item:\n                shard_policy = item[\"shard_policy\"]\n            # print(collection_name, index_name, vector_index, scalar_index, description, cpu_quota, partition_by, status)\n            index = Index(collection_name, index_name, vector_index, scalar_index, status, self,\n                          description=description,\n                          cpu_quota=cpu_quota, partition_by=partition_by, create_time=create_time,\n                          update_time=update_time, update_person=update_person, index_cost=index_cost,\n                          shard_count=shard_count, shard_policy=shard_policy, retry_option=self.retry_option)\n            indexes.append(index)\n        # print(indexes)\n        return indexes\n\n    async def async_list_indexes(self, collection_name):\n        params = {\n            \"collection_name\": collection_name,\n        }\n        # res = self.get(\"ListIndexes\", params)\n        res = await self.async_get_body_exception(\"ListIndexes\", {}, json.dumps(params))\n        res = json.loads(res)\n        indexes = []\n        if \"data\" not in res:\n            raise VikingDBException(1000028, \"missed\", \"data format error, please contact us\")\n        for item in res[\"data\"]:\n            index = self.package_index(collection_name, item[\"index_name\"], item)\n            indexes.append(index)\n        # print(indexes)\n        return indexes\n\n    def embedding(self, emb_model, raw_data: Union[RawData, List[RawData]], retry=True):\n        \"\"\"\n        request embedding service to extract features from text, images, etc.\n\n        :param emb_model: The name of the collection.\n        :type emb_model: EmbModel\n        :param raw_data: The name of the collection.\n        :type raw_data: RawData or list[RawData]\n        :rtype: list or list[list]\n        :param retry: Whether to retry when QuotaLimiterException occurs.\n        :type retry: bool\n        \"\"\"\n        model = {\"model_name\": emb_model.model_name, \"params\": emb_model.params}\n        data = []\n        if isinstance(raw_data, RawData):\n            param = {\"data_type\": raw_data.data_type, \"text\": raw_data.text}\n            data.append(param)\n        elif isinstance(raw_data, List):\n            for item in raw_data:\n                param = {\"data_type\": item.data_type, \"text\": item.text}\n                data.append(param)\n        params = {\"model\": model, \"data\": data}\n        remaining = self.retry_option.new_remaining(retry)\n        res = self._retry_request(\"Embedding\", {}, json.dumps(params), remaining, self.retry_option)\n        res = json.loads(res)\n        # print(res[\"data\"])\n        if isinstance(raw_data, RawData):\n            return res[\"data\"][0]\n        else:\n            return res[\"data\"]\n\n    async def async_embedding(self, emb_model, raw_data: Union[RawData, List[RawData]]):\n        model = {\"model_name\": emb_model.model_name, \"params\": emb_model.params}\n        data = []\n        if isinstance(raw_data, RawData):\n            param = {\"data_type\": raw_data.data_type, \"text\": raw_data.text}\n            data.append(param)\n        elif isinstance(raw_data, List):\n            for item in raw_data:\n                param = {\"data_type\": item.data_type, \"text\": item.text}\n                data.append(param)\n        params = {\"model\": model, \"data\": data}\n        res = await self.async_json_exception(\"Embedding\", {}, json.dumps(params))\n        res = json.loads(res)\n        # print(res[\"data\"])\n        if isinstance(raw_data, RawData):\n            # print(res[\"data\"][0])\n            return res[\"data\"][0]\n        else:\n            return res[\"data\"]\n\n    def update_collection(self, collection_name, fields, description=None):\n        _fields = []\n        for field in fields:\n            assert isinstance(field, Field)\n            _field = {\n                \"field_name\": field.field_name,\n                \"field_type\": field.field_type.value,\n            }\n            if field.default_val is not None:\n                _field[\"default_val\"] = field.default_val\n            if field.dim is not None:\n                _field[\"dim\"] = field.dim\n            if field.pipeline_name is not None:\n                _field[\"pipeline_name\"] = field.pipeline_name\n            _fields.append(_field)\n        params = {\n            \"collection_name\": collection_name,\n            \"fields\": _fields\n        }\n        if description != None:\n            params[\"description\"] = description\n        # print(params)\n        res = self.json_exception(\"UpdateCollection\", {}, json.dumps(params))\n\n    async def async_update_collection(self, collection_name, fields, description=None):\n        _fields = []\n        for field in fields:\n            assert isinstance(field, Field)\n            _field = {\n                \"field_name\": field.field_name,\n                \"field_type\": field.field_type.value,\n            }\n            if field.default_val is not None:\n                _field[\"default_val\"] = field.default_val\n            if field.dim is not None:\n                _field[\"dim\"] = field.dim\n            if field.pipeline_name is not None:\n                _field[\"pipeline_name\"] = field.pipeline_name\n            _fields.append(_field)\n        params = {\n            \"collection_name\": collection_name,\n            \"fields\": _fields\n        }\n        if description != None:\n            params[\"description\"] = description\n        # print(params)\n        res = await self.async_json_exception(\"UpdateCollection\", {}, json.dumps(params))\n\n    def update_index(self, collection_name, index_name, description=None, cpu_quota=None, scalar_index=None,\n                     shard_count=None):\n        params = {\n            \"collection_name\": collection_name,\n            \"index_name\": index_name,\n        }\n        if description is not None:\n            params[\"description\"] = description\n        if cpu_quota is not None:\n            params[\"cpu_quota\"] = cpu_quota\n        if scalar_index is not None:\n            params[\"scalar_index\"] = scalar_index\n        if shard_count is not None:\n            params[\"shard_count\"] = shard_count\n        res = self.json_exception(\"UpdateIndex\", {}, json.dumps(params))\n\n    async def async_update_index(self, collection_name, index_name, description=None, cpu_quota=None, scalar_index=None,\n                                 shard_count=None):\n        params = {\n            \"collection_name\": collection_name,\n            \"index_name\": index_name,\n        }\n        if description is not None:\n            params[\"description\"] = description\n        if cpu_quota is not None:\n            params[\"cpu_quota\"] = cpu_quota\n        if scalar_index is not None:\n            params[\"scalar_index\"] = scalar_index\n        if shard_count is not None:\n            params[\"shard_count\"] = shard_count\n        res = await self.async_json_exception(\"UpdateIndex\", {}, json.dumps(params))\n\n    def list_embeddings(self, model_name=\"\"):\n        params = {\"model_name\": model_name}\n        res = self.get_body_exception(\"ListEmbeddings\", {}, json.dumps(params))\n        print(res)\n        pass\n\n    def rerank(self, query, content, title=\"\"):\n        params = {\n            \"query\": query,\n            \"content\": content,\n            \"title\": title\n        }\n        res = self.json_exception(\"Rerank\", {}, json.dumps(params))\n        res = json.loads(res)\n        return res[\"data\"]\n\n    async def async_rerank(self, query, content, title=\"\"):\n        params = {\n            \"query\": query,\n            \"content\": content,\n            \"title\": title\n        }\n        res = await self.async_json_exception(\"Rerank\", {}, json.dumps(params))\n        res = json.loads(res)\n        return res[\"data\"]\n\n    def batch_rerank(self, datas):\n        params = {\n            \"datas\": datas,\n        }\n        res = self.json_exception(\"BatchRerank\", {}, json.dumps(params))\n        res = json.loads(res)\n        return res[\"data\"]\n\n    async def async_batch_rerank(self, datas):\n        params = {\n            \"datas\": datas,\n        }\n        res = await self.async_json_exception(\"BatchRerank\", {}, json.dumps(params))\n        res = json.loads(res)\n        return res[\"data\"]\n\n    def embedding_v2(self, emb_model, raw_data: Union[RawData, List[RawData]], retry=True):\n        \"\"\"\n        request embedding service to extract features from text, images, etc.\n\n        :param emb_model: The name of the collection.\n        :type emb_model: EmbModel\n        :param raw_data: The name of the collection.\n        :type raw_data: RawData or list[RawData]\n        :rtype: list or list[list]\n        :param retry: Whether to retry when QuotaLimiterException occurs.\n        :type retry: bool\n        \"\"\"\n        model = {\"model_name\": emb_model.model_name, \"params\": emb_model.params}\n        data = []\n        if isinstance(raw_data, RawData):\n            param = {\"data_type\": raw_data.data_type}\n            if raw_data.text != \"\":\n                param[\"text\"] = raw_data.text\n            if raw_data.image != \"\":\n                param[\"image\"] = raw_data.image\n            data.append(param)\n        elif isinstance(raw_data, List):\n            for item in raw_data:\n                param = {\"data_type\": item.data_type}\n                if item.text != \"\":\n                    param[\"text\"] = item.text\n                if item.image != \"\":\n                    param[\"image\"] = item.image\n                data.append(param)\n        params = {\"model\": model, \"data\": data}\n        remaining = self.retry_option.new_remaining(retry)\n        res = self._retry_request(\"EmbeddingV2\", {}, json.dumps(params), remaining, self.retry_option)\n        res = json.loads(res)\n        return res[\"data\"]\n\n    async def async_embedding_v2(self, emb_model, raw_data: Union[RawData, List[RawData]]):\n        model = {\"model_name\": emb_model.model_name, \"params\": emb_model.params}\n        data = []\n        if isinstance(raw_data, RawData):\n            param = {\"data_type\": raw_data.data_type}\n            if raw_data.text != \"\":\n                param[\"text\"] = raw_data.text\n            if raw_data.image != \"\":\n                param[\"image\"] = raw_data.image\n            data.append(param)\n        elif isinstance(raw_data, List):\n            for item in raw_data:\n                param = {\"data_type\": item.data_type}\n                if item.text != \"\":\n                    param[\"text\"] = item.text\n                if item.image != \"\":\n                    param[\"image\"] = item.image\n                data.append(param)\n        params = {\"model\": model, \"data\": data}\n        res = await self.async_json_exception(\"EmbeddingV2\", {}, json.dumps(params))\n        res = json.loads(res)\n        # print(res[\"data\"])\n\n        return res[\"data\"]\n    \n    def package_task(self, res_data):\n        collection_name = \"\"\n        create_time = \"\"\n        process_info = None\n        task_id = \"\"\n        task_params = None\n        task_status = \"\"\n        task_type = \"\"\n        update_person = \"\"\n        update_time = \"\"\n        if \"collection_name\" in res_data:\n            collection_name = res_data[\"collection_name\"]\n        if \"create_time\" in res_data:\n            create_time = res_data[\"create_time\"]\n        if \"process_info\" in res_data:\n            process_info = res_data[\"process_info\"]\n        if \"task_id\" in res_data:\n            task_id = res_data[\"task_id\"]\n        if \"task_params\" in res_data:\n            task_params = res_data[\"task_params\"]\n        if \"task_status\" in res_data:\n            task_status = res_data[\"task_status\"]\n        if \"task_type\" in res_data:\n            task_type = res_data[\"task_type\"]\n        if \"update_person\" in res_data:\n            update_person = res_data[\"update_person\"]\n        if \"update_time\" in res_data:\n            update_time = res_data[\"update_time\"]\n        # print(collection_name, create_time, process_info, task_id, task_params, task_status, task_type, update_person, update_time)\n        return Task(collection_name, create_time, process_info, task_id, task_params, task_status, task_type, update_person, update_time)\n\n    \n    def create_task(self, task_type, task_params):\n        params = {\"task_type\": task_type.value, \"task_params\": task_params}\n        res = self.json_exception(\"CreateTask\", {}, json.dumps(params))\n        res = json.loads(res)\n        if \"data\" in res:\n            if \"task_id\" in res[\"data\"]:\n                return res[\"data\"][\"task_id\"]\n        return \"\"\n    \n    def get_task(self, task_id):\n        params = {\"task_id\": task_id}\n        res = self.json_exception(\"GetTask\", {}, json.dumps(params))\n        res = json.loads(res)\n        if \"data\" in res:\n            return self.package_task(res[\"data\"])\n        else: \n            return None\n    \n    def list_tasks(self):\n        res = self.json_exception(\"ListTask\", {}, json.dumps({}))\n        res = json.loads(res)\n        tasks = []\n        if \"data\" in res:\n            for item in res[\"data\"]:\n                tasks.append(self.package_task(item))\n        return tasks\n    \n    def drop_task(self, task_id):\n        params = {\"task_id\": task_id}\n        res = self.json_exception(\"DropTask\", {}, json.dumps(params))\n\n    def update_task(self, task_id, task_status):\n        params = {\n            \"task_id\": task_id,\n            \"task_status\": task_status.value\n        }\n        res = self.json_exception(\"UpdateTask\", {}, json.dumps(params))\n"
  },
  {
    "path": "volcengine/viking_db/__init__.py",
    "content": "from .VikingDBService import VikingDBService\nfrom .Collection import Collection\nfrom .Index import Index\nfrom .common import *\nfrom .IndexClient import IndexClient\nfrom .CollectionClient import CollectionClient\n"
  },
  {
    "path": "volcengine/viking_db/common.py",
    "content": "# coding:utf-8\nimport json\nimport random\nfrom enum import Enum\nfrom typing import List\n\nINITIAL_RETRY_DELAY = 0.5\nMAX_RETRY_DELAY = 8.0\nMAX_RETRIES = 3\n\nclass RetryRemaining(object):\n    def __init__(self, remaining_retries, remaining_delay):\n        self.remaining_retries = remaining_retries\n        self.remaining_delay = remaining_delay\n\n    def has_remaining(self):\n        return self.remaining_retries > 0 and self.remaining_delay > 0\n\nclass RetryOption(object):\n    def __init__(self):\n        self.initial_retry_delay = INITIAL_RETRY_DELAY\n        self.max_retry_delay = MAX_RETRY_DELAY\n        self.max_retries = MAX_RETRIES\n        self.retry_when_quota_limit = True\n        self.retry_when_session_timeout = True\n\n    def new_remaining(self, retry=True):\n        remaining_retries = self.max_retries if retry else 0\n        remaining_delay = self.max_retry_delay if retry else 0\n        return RetryRemaining(remaining_retries, remaining_delay)\n\n    def calculate_retry_timeout(self, remaining):\n        remaining.remaining_retries  = remaining.remaining_retries - 1\n        nb_retries = self.max_retries - remaining.remaining_retries\n        sleep_seconds = min(self.initial_retry_delay * pow(2.0, nb_retries), self.max_retry_delay)\n        jitter = 1 - 0.25 * random.random()\n        timeout = sleep_seconds * jitter\n        remaining.remaining_delay  = remaining.remaining_delay - timeout\n        return timeout if timeout >= 0 else 0\n\nclass ShardType(Enum):\n    \"\"\"\n    type of shard policy\n    \"\"\"\n    Auto = \"auto\"\n    Custom = \"custom\"\n\n\nclass FieldType(Enum):\n    \"\"\"\n    type of collection filed\n    \"\"\"\n    Vector = \"vector\"\n    Int64 = \"int64\"\n    List_Int64 = \"list<int64>\"\n    String = \"string\"\n    List_String = \"list<string>\"\n    Float32 = \"float32\"\n    Bool = \"bool\"\n    Text = \"text\"\n    Image = \"image\"\n    Sparse_Vector = \"sparse_vector\"\n\n\nclass DistanceType(Enum):\n    \"\"\"\n    distance type of vector ann index\n    \"\"\"\n    L2 = \"l2\"\n    IP = \"ip\"\n    COSINE = \"cosine\"\n\n\nclass IndexType(Enum):\n    \"\"\"\n    type of vector ann index\n    \"\"\"\n    FLAT = \"flat\"\n    HNSW = \"hnsw\"\n    IVF = \"ivf\"\n    DiskANN = \"DiskANN\"\n    HNSW_HYBRID = \"hnsw_hybrid\"\n    SORT = \"sort\"\n\nclass QuantType(Enum):\n    \"\"\"\n    quant type of vector ann index\n    \"\"\"\n    Float = \"float\"\n    Int8 = \"int8\"\n    Fix16 = \"fix16\"\n    PQ = \"pq\"\n\n\nclass Order(Enum):\n    \"\"\"\n    quant type of vector ann index\n    \"\"\"\n    Asc = \"asc\"\n    Desc = \"desc\"\n\nclass TaskType(Enum):\n    Data_Import = \"data_import\"\n    Filter_Delete = \"filter_delete\"\n    Data_export = \"data_export\"\n    Filter_Update = \"filter_update\"\n\nclass TaskStatus(Enum):\n    Init = \"init\"\n    Queued = \"queued\"\n    Running = \"running\"\n    Done = \"done\"\n    Fail = \"fail\"\n    Confirm = \"confirm\"\n    Confirmed = \"confirmed\"\n\nclass EmbModel(object):\n    def __init__(self, model_name, params=None):\n        self._model_name = model_name\n        self._params = params\n\n    @property\n    def model_name(self):\n        return self._model_name\n\n    @property\n    def params(self):\n        return self._params\n\n\nclass RawData(object):\n    def __init__(self, data_type, text=\"\", image=\"\"):\n        self._data_type = data_type\n        self._text = text\n        self._image = image\n\n    @property\n    def data_type(self):\n        return self._data_type\n\n    @property\n    def text(self):\n        return self._text\n\n    @property\n    def image(self):\n        return self._image\n\n\nclass Field(object):\n    \"\"\"\n    Args:\n        \n    \"\"\"\n\n    def __init__(self, field_name, field_type, default_val=None, dim=None, is_primary_key=False, pipeline_name=None):\n        self._field_name = field_name\n        self._field_type = field_type\n        self._default_val = default_val\n        self._dim = dim\n        self._is_primary_key = is_primary_key\n        self._pipeline_name = pipeline_name\n\n    @property\n    def field_name(self):\n        return self._field_name\n\n    @property\n    def field_type(self):\n        return self._field_type\n\n    @property\n    def default_val(self):\n        return self._default_val\n\n    @property\n    def dim(self):\n        return self._dim\n\n    @property\n    def is_primary_key(self):\n        return self._is_primary_key\n\n    @property\n    def pipeline_name(self):\n        return self._pipeline_name\n\nclass VectorizeTuple(object):\n    def __init__(self, dense, sparse=None):\n        assert isinstance(dense, VectorizeModelConf)\n        if sparse is not None:\n            assert isinstance(sparse, VectorizeModelConf)\n        self._dense = dense\n        self._sparse = sparse\n\n    @property\n    def dense(self):\n        return self._dense\n\n    @property\n    def sparse(self):\n        return self._sparse\n\nclass VectorizeModelConf(object):\n    def __init__(self, model_name, model_version=None, dim=None, text_field=None, image_field=None):\n        self._model_name = model_name\n        self._model_version = model_version\n        self._dim = dim\n        self._text_field = text_field\n        self._image_field = image_field\n\n    @property\n    def model_name(self):\n        return self._model_name\n\n    @property\n    def model_version(self):\n        return self._model_version\n\n    @property\n    def dim(self):\n        return self._dim\n\n    @property\n    def text_field(self):\n        return self._text_field\n\n    @property\n    def image_field(self):\n        return self._image_field\n\ndef convert_vectorize_tuple_to_dict(vectorize_tuple):\n    assert isinstance(vectorize_tuple, VectorizeTuple)\n    result = {}\n    if vectorize_tuple.dense is not None:\n        result['dense'] = convert_vectorize_conf_to_dict(vectorize_tuple.dense)\n    if vectorize_tuple.sparse is not None:\n        result['sparse'] = convert_vectorize_conf_to_dict(vectorize_tuple.sparse)\n    return result\n\ndef convert_vectorize_conf_to_dict(vectorize_conf):\n    assert isinstance(vectorize_conf, VectorizeModelConf)\n    result = {}\n    if vectorize_conf.text_field is not None:\n        result['text_field'] = vectorize_conf.text_field\n    if vectorize_conf.image_field is not None:\n        result['image_field'] = vectorize_conf.image_field\n    if vectorize_conf.model_name is not None:\n        result['model_name'] = vectorize_conf.model_name\n    if vectorize_conf.model_version is not None:\n        result['model_version'] = vectorize_conf.model_version\n    if vectorize_conf.dim is not None:\n        result['dim'] = vectorize_conf.dim\n    return result\n\ndef convert_dict_to_vectorize_tuple(vectorize_tuple_dict):\n    assert isinstance(vectorize_tuple_dict, dict)\n    dense_dict = vectorize_tuple_dict.get('dense', None)\n    sparse_dict = vectorize_tuple_dict.get('sparse', None)\n    return VectorizeTuple(\n        dense=convert_dict_to_vectorize_conf(dense_dict),\n        sparse=convert_dict_to_vectorize_conf(sparse_dict),\n    )\n\ndef convert_dict_to_vectorize_conf(vectorize_conf_dict):\n    if vectorize_conf_dict is None:\n        return None\n    assert isinstance(vectorize_conf_dict, dict)\n    return VectorizeModelConf(\n        vectorize_conf_dict['model_name'],\n        model_version=vectorize_conf_dict.get('model_version', None),\n        dim=vectorize_conf_dict.get('dim', None),\n        text_field=vectorize_conf_dict.get('text_field', None),\n        image_field=vectorize_conf_dict.get('image_field', None),\n    )\n\nclass Text(object):\n    def __init__(self, text=None, url=None, base64=None):\n        self._text = text\n        self._url = url\n        self._base64 = base64\n\n    @property\n    def text(self):\n        return self._text\n\n    @property\n    def url(self):\n        return self._url\n\n    @property\n    def base64(self):\n        return self._base64\n\n\nclass Data(object):\n    def __init__(self, fields, id=None, TTL=None, timestamp=None, score=None, text=None, dist=None):\n        self._id = id\n        self._fields = fields\n        self._timestamp = timestamp\n        self._TTL = TTL\n        self._score = score\n        self._text = text\n        self._dist = dist\n\n    @property\n    def text(self):\n        return self._text\n\n    @property\n    def TTL(self):\n        return self._TTL\n\n    @property\n    def score(self):\n        return self._score\n\n    @property\n    def id(self):\n        return self._id\n\n    @property\n    def fields(self):\n        return self._fields\n\n    @property\n    def timestamp(self):\n        return self._timestamp\n    \n    @property\n    def dist(self):\n        return self._dist\n\nclass AggResult(object):\n    def __init__(self, agg_op, group_by_field, agg_result):\n        self._agg_op = agg_op\n        self._group_by_field = group_by_field\n        self._agg_result = agg_result\n\n    @property\n    def agg_op(self):\n        return self._agg_op\n\n    @property\n    def group_by_field(self):\n        return self._group_by_field\n\n    @property\n    def agg_result(self):\n        return self._agg_result\n\nclass SortResultItem(object):\n    def __init__(self, primary_key, score):\n        self._primary_key = primary_key\n        self._score = score\n\n    @property\n    def primary_key(self):\n        return self._primary_key\n\n    @property\n    def score(self):\n        return self._score\n\nclass IndexSortResult(object):\n    def __init__(self, sort_result: List[SortResultItem], primary_key_not_exist: List):\n        self._sort_result: List[SortResultItem] = sort_result\n        self._primary_key_not_exist = primary_key_not_exist\n\n    @property\n    def sort_result(self):\n        return self._sort_result\n\n    @property\n    def primary_key_not_exist(self):\n        return self._primary_key_not_exist\n\nclass VectorIndexParams(object):\n    def __init__(self, distance, index_type=IndexType.HNSW, quant=QuantType.Int8, **kwargs):\n        self._index_type = index_type\n        # 强感知distance参数\n        if not distance:\n            raise ValueError(\"distance is required\")\n        self._distance = distance\n        self._quant = quant\n        self._hnsw_m = kwargs.get(\"hnsw_m\", 20)\n        self._hnsw_cef = kwargs.get(\"hnsw_cef\", 400)\n        self._hnsw_sef = kwargs.get(\"hnsw_sef\", 800)\n\n    def dic(self):\n        return {\"distance\": self.distance.value, \"index_type\": self.index_type.value, \"quant\": self.quant.value,\n                \"hnsw_m\": self.hnsw_m, \"hnsw_cef\": self.hnsw_cef, \"hnsw_sef\": self.hnsw_sef}\n\n    @property\n    def index_type(self):\n        return self._index_type\n\n    @property\n    def distance(self):\n        return self._distance\n\n    @property\n    def quant(self):\n        return self._quant\n\n    @property\n    def hnsw_m(self):\n        return self._hnsw_m\n\n    @property\n    def hnsw_cef(self):\n        return self._hnsw_cef\n\n    @property\n    def hnsw_sef(self):\n        return self._hnsw_sef\n\n\nclass VectorOrder(object):\n    def __init__(self, vector=None, sparse_vectors=None ,id=None):\n        self._vector = vector\n        self._id = id\n        self._sparse_vectors = sparse_vectors\n\n    @property\n    def vector(self):\n        return self._vector\n\n    @property\n    def sparse_vectors(self):\n        return self._sparse_vectors\n\n    @property\n    def id(self):\n        return self._id\n\n\nclass ScalarOrder(object):\n    def __init__(self, field_name, order):\n        self._field_name = field_name\n        self._order = order\n\n    @property\n    def field_name(self):\n        return self._field_name\n\n    @property\n    def order(self):\n        return self._order\n\n\nclass MyClassEncoder(json.JSONEncoder):\n    def default(self, obj):\n        if isinstance(obj, VectorIndexParams):\n            return {\"distance\": obj.distance, \"index_type\": obj.index_type, \"quant\": obj.quant,\n                    \"hnsw_m\": obj.hnsw_m, \"hnsw_cef\": obj.hnsw_cef, \"hnsw_sef\": obj.hnsw_sef}\n        # if isinstance(obj, IndexType):\n        #     return {'FLAT': obj.FLAT, 'HNSW': obj.HNSW}\n        # if isinstance(obj, QuantType):\n        #     return {'Float': obj.Float, 'Int8': obj.Int8}\n        return super().default(obj)\n"
  },
  {
    "path": "volcengine/viking_db/exception.py",
    "content": "# coding:utf-8\nclass VikingDBServerException(Exception):\n    def __init__(self, code, request_id, message=None):\n        self.code = code\n        self.request_id = request_id\n        self.message = \"message:{}, code:{}, request_id:{}\".format(message, self.code, self.request_id)\n\n    def __str__(self):\n        return self.message\n\n\nclass UnauthorizedException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass NoPermissionException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass InvalidRequestException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass CollectionExistException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass CollectionNotExistException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass OperationNotAllowedException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass IndexExistException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass IndexNotExistException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass QueryOpFailedException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass DataNotFoundException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass DelOpFailedException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass UpsertOpFailedException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass TokenMismatchException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass InvalidQueryVecException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass InvalidPrimaryKeyException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass InvalidPartitionException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass InvalidScalarCondException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass InvalidProxyServiceException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass IndexRecallException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass IndexFetchDataException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass IndexNotReadyException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass APINotImplementedException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass CalcEmbeddingFailedException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass ListEmbeddingModelsException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass QuotaLimiterException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\nclass RerankException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\nclass CollectionAliasNotExistException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\nclass UserNoOrderException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\nclass UserOverdueException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\nclass HTTPErrException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\nclass TaskNotFoundException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\nclass VikingDBException(VikingDBServerException):\n    def __init__(self, code, request_id, message=None):\n        self.code = code\n        self.request_id = request_id\n        if message is not None:\n            self.message = message\n        else:\n            self.message = \"unknown error, please contact customer service, request_id:{}\".format(self.request_id)\n\n    def __str__(self):\n        return self.message\n\n\nERRCODE_EXCEPTION = {\n    1000001: UnauthorizedException,\n    1000002: NoPermissionException,\n    1000003: InvalidRequestException,\n    1000004: CollectionExistException,\n    1000005: CollectionNotExistException,\n    1000006: OperationNotAllowedException,\n    1000007: IndexExistException,\n    1000008: IndexNotExistException,\n    1000010: QueryOpFailedException,\n    1000011: DataNotFoundException,\n    1000013: DelOpFailedException,\n    1000014: UpsertOpFailedException,\n    1000015: TokenMismatchException,\n    1000016: InvalidQueryVecException,\n    1000017: InvalidPrimaryKeyException,\n    1000018: InvalidPartitionException,\n    1000019: InvalidScalarCondException,\n    1000020: InvalidProxyServiceException,\n    1000021: IndexRecallException,\n    1000022: IndexFetchDataException,\n    1000023: IndexNotReadyException,\n    1000024: APINotImplementedException,\n    1000025: CalcEmbeddingFailedException,\n    1000026: ListEmbeddingModelsException,\n    1000028: VikingDBException,\n    1000029: QuotaLimiterException,\n    1000030: RerankException,\n    1000031: CollectionAliasNotExistException,\n    1000032: UserNoOrderException,\n    1000033: UserOverdueException,\n    1000034: HTTPErrException,\n    1000035: TaskNotFoundException,\n}\n\n# volcanoOK             errCode = 0\n# volcanoErrUnauthorized             errCode = 1000001\n# volcanoErrNoPermission             errCode = 1000002\n# volcanoErrInvalidRequest             errCode = 1000003\n# volcanoErrCollectionExist             errCode = 1000004\n# volcanoErrCollectionNotExist             errCode = 1000005\n# volcanoErrOperationNotAllowed             errCode = 1000006\n# volcanoErrIndexExist             errCode = 1000007\n# volcanoErrIndexNotExist            errCode = 1000008\n# volcanoErrQueryOpFailed            errCode = 1000010\n# volcanoErrDataNotFound            errCode = 1000011\n# volcanoErrDelOpFailed            errCode = 1000013\n# volcanoErrUpsertOpFailed            errCode = 1000014\n# volcanoErrTokenMismatch            errCode = 1000015\n# volcanoErrInvalidQueryVec\t\t   errCode = 1000016\n# volcanoErrInvalidPrimaryKey\t\t   errCode = 1000017\n# volcanoErrInvalidPartition\t\t   errCode = 1000018\n# volcanoErrInvalidScalarCond        errCode = 1000019\n# volcanoErrInvalidProxyService      errCode = 1000020\n# volcanoErrIndexRecall              errCode = 1000021\n# volcanoErrIndexFetchData              errCode = 1000022\n# volcanoErrIndexNotReady              errCode = 1000023\n# volcanoErrAPINotImplemented             errCode = 1000024\n# volcanoErrCalcEmbeddingFailed            errCode = 1000025\n# volcanoErrListEmbeddingModels            errCode = 1000026\n# volcanoErrInternal                errCode = 1000028\n"
  },
  {
    "path": "volcengine/viking_knowledgebase/Collection.py",
    "content": "# coding:utf-8\nimport json\n\nfrom .Doc import Doc\nfrom .Point import Point\nfrom .common import Field\n\n\nclass Collection(object):\n    \"\"\"\n    KnowledgeBase Collection\n    \"\"\"\n    def __init__(self, viking_knowledgebase_service, collection_name, kwargs=None):\n        self.viking_knowledgebase_service      = viking_knowledgebase_service\n        self.collection_name        = collection_name\n        if kwargs is not None:\n            self.description            = kwargs.get(\"description\")\n            self.doc_num                = kwargs.get(\"doc_num\")\n            self.create_time            = kwargs.get(\"create_time\")\n            self.update_time            = kwargs.get(\"update_time\")\n            self.creator                = kwargs.get(\"creator\")\n            self.pipeline_list          = kwargs.get(\"pipeline_list\")\n            self.preprocessing          = kwargs.get(\"preprocessing\")\n            self.fields                 = [Field(field) for field in kwargs.get(\"fields\", [])]\n            self.project                = kwargs.get(\"project\")\n            self.resource_id            = kwargs.get(\"resource_id\")\n            self.data_type              = kwargs.get(\"data_type\", \"\")\n\n    def add_doc(self, add_type, doc_id=None, doc_name=None, doc_type=None, description=None, tos_path=None, url=None,\n                lark_file=None, meta=None, dedup=None, project=\"default\", resource_id=None, collection_name=None, headers=None):\n        params = {\"collection_name\": self.collection_name, \"add_type\": add_type, \"project\":project}\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if description is not None:\n            params[\"description\"] = description\n        if dedup is not None:\n            params[\"dedup\"] = dedup\n\n        if add_type == \"tos\" :\n            params[\"tos_path\"]  = tos_path\n        elif add_type == \"url\" :\n            params[\"doc_id\"]    = doc_id\n            params[\"doc_name\"]  = doc_name\n            params[\"doc_type\"]  = doc_type\n            params[\"url\"]       = url\n            if meta is not None:\n                params[\"meta\"]  = meta\n        elif add_type == \"lark\" :\n            params[\"doc_type\"]  = doc_type\n            params[\"lark_file\"] = lark_file\n            if doc_id is not None:\n                params[\"doc_id\"] = doc_id\n            if meta is not None:\n                params[\"meta\"]  = meta\n\n        self.viking_knowledgebase_service.json_exception(\"AddDoc\", {}, json.dumps(params), headers=headers)\n\n    async def async_add_doc(self, add_type, doc_id=None, doc_name=None, doc_type=None, description=None, tos_path=None, url=None,\n                lark_file=None, meta=None, dedup=None, project=\"default\", resource_id=None, collection_name=None, headers=None):\n        params = {\"collection_name\": self.collection_name, \"add_type\": add_type, \"project\":project}\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if description is not None:\n            params[\"description\"] = description\n        if dedup is not None:\n            params[\"dedup\"] = dedup\n\n        if add_type == \"tos\" :\n            params[\"tos_path\"]  = tos_path\n        elif add_type == \"url\" :\n            params[\"doc_id\"]    = doc_id\n            params[\"doc_name\"]  = doc_name\n            params[\"doc_type\"]  = doc_type\n            params[\"url\"]       = url\n            if meta is not None:\n                params[\"meta\"]  = meta\n        elif add_type == \"lark\" :\n            params[\"doc_type\"]  = doc_type\n            params[\"lark_file\"] = lark_file\n            if doc_id is not None:\n                params[\"doc_id\"] = doc_id\n            if meta is not None:\n                params[\"meta\"]  = meta\n\n        await self.viking_knowledgebase_service.async_json_exception(\"AddDoc\", {}, json.dumps(params), headers=headers)\n\n    def delete_doc(self, doc_id, project=\"default\", resource_id=None, collection_name=None, headers=None):\n        params = {\"collection_name\": self.collection_name, \"doc_id\": doc_id, \"project\":project}\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        self.viking_knowledgebase_service.json_exception(\"DeleteDoc\", {}, json.dumps(params), headers=headers)\n\n    async def async_delete_doc(self, doc_id, project=\"default\", resource_id=None, collection_name=None, headers=None):\n        params = {\"collection_name\": self.collection_name, \"doc_id\": doc_id, \"project\":project}\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        await self.viking_knowledgebase_service.async_json_exception(\"DeleteDoc\", {}, json.dumps(params), headers=headers)\n\n    def get_doc(self, doc_id, return_token_usage=False, project=\"default\", resource_id=None, collection_name=None, headers=None):\n        params = {\"collection_name\": self.collection_name, \"doc_id\": doc_id, \"project\":project}\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if return_token_usage:\n            params[\"return_token_usage\"] = return_token_usage\n        res = self.viking_knowledgebase_service.json_exception(\"GetDocInfo\", {}, json.dumps(params), headers=headers)\n        data = json.loads(res)[\"data\"]\n        data['project'] = project\n        if resource_id is not None :\n            data['resource_id'] = resource_id\n        return Doc(data)\n\n    async def async_get_doc(self, doc_id, return_token_usage=False, project=\"default\", resource_id=None, collection_name=None, headers=None):\n        params = {\"collection_name\": self.collection_name, \"doc_id\": doc_id, \"project\":project}\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if return_token_usage:\n            params[\"return_token_usage\"] = return_token_usage\n        res = await self.viking_knowledgebase_service.async_json_exception(\"GetDocInfo\", {}, json.dumps(params), headers=headers)\n        data = json.loads(res)[\"data\"]\n        data['project'] = project\n        if resource_id is not None :\n            data['resource_id'] = resource_id\n        return Doc(data)\n\n    def list_docs(self, offset=0, limit=-1, doc_type=None, return_token_usage=False, project=\"default\", collection_name=None, filter=None, headers=None):\n        params = {\"collection_name\": self.collection_name, \"offset\": offset, \"limit\": limit, \"doc_type\": doc_type, \"project\":project, \"filter\": filter}\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if return_token_usage:\n            params[\"return_token_usage\"] = return_token_usage\n        res = self.viking_knowledgebase_service.json_exception(\"ListDocs\", {}, json.dumps(params), headers=headers)\n        data = json.loads(res)[\"data\"]\n        docs = []\n        for item in data[\"doc_list\"]:\n            item['project'] = project\n            docs.append(Doc(item))\n        return docs\n\n    async def async_list_docs(self, offset=0, limit=-1, doc_type=None, return_token_usage=False, project=\"default\", collection_name=None, filter=None, headers=None):\n        params = {\"collection_name\": self.collection_name, \"offset\": offset, \"limit\": limit, \"doc_type\": doc_type, \"project\":project, \"filter\": filter}\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if return_token_usage:\n            params[\"return_token_usage\"] = return_token_usage\n        res = await self.viking_knowledgebase_service.async_json_exception(\"ListDocs\", {}, json.dumps(params), headers=headers)\n        data = json.loads(res)[\"data\"]\n        docs = []\n        for item in data[\"doc_list\"]:\n            item['project'] = project\n            docs.append(Doc(item))\n        return docs\n\n    def update_meta(self, doc_id, meta, project=\"default\", resource_id=None, collection_name=None, headers=None):\n        params = {\"collection_name\": self.collection_name, \"doc_id\": doc_id, \"meta\": meta, \"project\":project}\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        self.viking_knowledgebase_service.json_exception(\"UpdateDocMeta\", {}, json.dumps(params), headers=headers)\n\n    async def async_update_meta(self, doc_id, meta, project=\"default\", resource_id=None, collection_name=None, headers=None):\n        params = {\"collection_name\": self.collection_name, \"doc_id\": doc_id, \"meta\": meta, \"project\":project}\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        await self.viking_knowledgebase_service.async_json_exception(\"UpdateDocMeta\", {}, json.dumps(params), headers=headers)\n\n    def update_doc(self, doc_id, doc_name, project=\"default\", resource_id=None, collection_name=None, headers=None):\n        params= {\"collection_name\": self.collection_name, \"doc_id\": doc_id, \"doc_name\": doc_name, \"project\":project}\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        return self.viking_knowledgebase_service.json_exception(\"UpdateDoc\", {}, json.dumps(params), headers=headers)\n\n    async def async_update_doc(self, doc_id, doc_name, project=\"default\", resource_id=None, collection_name=None, headers=None):\n        params= {\"collection_name\": self.collection_name, \"doc_id\": doc_id, \"doc_name\": doc_name, \"project\":project}\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        return await self.viking_knowledgebase_service.async_json_exception(\"UpdateDoc\", {}, json.dumps(params), headers=headers)\n\n    def get_point(self, point_id, get_attachment_link=False, project=\"default\", resource_id=None, collection_name=None, headers=None):\n        params = {\"collection_name\": self.collection_name, \"point_id\": point_id, \"project\":project}\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        if get_attachment_link:\n            params[\"get_attachment_link\"] = get_attachment_link\n        res = self.viking_knowledgebase_service.json_exception(\"GetPointInfo\", {}, json.dumps(params), headers=headers)\n        res = json.loads(res)\n        res[\"data\"][\"project\"] = project\n        if resource_id is not None :\n            res[\"data\"][\"resource_id\"] = resource_id\n        return Point(res[\"data\"])\n\n    async def async_get_point(self, point_id, get_attachment_link=False, project=\"default\", resource_id=None, collection_name=None, headers=None):\n        params = {\"collection_name\": self.collection_name, \"point_id\": point_id, \"project\":project}\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        if get_attachment_link:\n            params[\"get_attachment_link\"] = get_attachment_link\n        res = await self.viking_knowledgebase_service.async_json_exception(\"GetPointInfo\", {}, json.dumps(params), headers=headers)\n        res = json.loads(res)\n        res[\"data\"][\"project\"] = project\n        if resource_id is not None :\n            res[\"data\"][\"resource_id\"] = resource_id\n        return Point(res[\"data\"])\n\n    def list_points(self, offset=0, limit=-1, doc_ids=None, point_ids=None, get_attachment_link=False, project=\"default\", resource_id=None, collection_name=None, headers=None):\n        params = {\"collection_name\": self.collection_name, \"offset\": offset, \"limit\": limit, \"doc_ids\": doc_ids, \"project\":project, \"get_attachment_link\": get_attachment_link}\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        if point_ids is not None:\n            params[\"point_ids\"] = point_ids\n        res = self.viking_knowledgebase_service.json_exception(\"ListPoints\", {}, json.dumps(params), headers=headers)\n        point_list = json.loads(res)[\"data\"].get(\"point_list\", [])\n        points = []\n        for item in point_list:\n            item[\"project\"] = project\n            points.append(Point(item))\n        return points\n\n    async def async_list_points(self, offset=0, limit=-1, doc_ids=None, point_ids=None, get_attachment_link=False, project=\"default\", resource_id=None, collection_name=None, headers=None):\n        params = {\"collection_name\": self.collection_name, \"offset\": offset, \"limit\": limit, \"doc_ids\": doc_ids, \"project\":project, \"get_attachment_link\": get_attachment_link}\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        if point_ids is not None:\n            params[\"point_ids\"] = point_ids\n        res = await self.viking_knowledgebase_service.async_json_exception(\"ListPoints\", {}, json.dumps(params), headers=headers)\n        point_list = json.loads(res)[\"data\"].get(\"point_list\", [])\n        points = []\n        for item in point_list:\n            item[\"project\"] = project\n            points.append(Point(item))\n        return points\n\n    def add_point(self, doc_id, chunk_type, project=\"default\", resource_id=None, collection_name=None, chunk_title=None, content=None, question=None, fields=None, headers=None):\n        params= {\"collection_name\": self.collection_name, \"doc_id\": doc_id, \"project\":project, \"chunk_type\": chunk_type}\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        if chunk_title is not None:\n            params[\"chunk_title\"] = chunk_title\n        if content is not None:\n            params[\"content\"] = content\n        if question is not None:\n            params[\"question\"] = question\n        if fields is not None:\n            params[\"fields\"] = fields\n        return self.viking_knowledgebase_service.json_exception(\"AddPoint\", {}, json.dumps(params), headers=headers)\n\n    async def async_add_point(self, doc_id, chunk_type, project=\"default\", resource_id=None, collection_name=None, chunk_title=None, content=None, question=None, fields=None, headers=None):\n        params= {\"collection_name\": self.collection_name, \"doc_id\": doc_id, \"project\":project, \"chunk_type\": chunk_type}\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        if chunk_title is not None:\n            params[\"chunk_title\"] = chunk_title\n        if content is not None:\n            params[\"content\"] = content\n        if question is not None:\n            params[\"question\"] = question\n        if fields is not None:\n            params[\"fields\"] = fields\n        return await self.viking_knowledgebase_service.async_json_exception(\"AddPoint\", {}, json.dumps(params), headers=headers)\n\n    def update_point(self, point_id, project=\"default\", resource_id=None, collection_name=None, chunk_title=None, content=None, question=None, fields=None, headers=None):\n        params= {\"collection_name\": self.collection_name, \"point_id\": point_id, \"project\":project}\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        if chunk_title is not None:\n            params[\"chunk_title\"] = chunk_title\n        if content is not None:\n            params[\"content\"] = content\n        if question is not None:\n            params[\"question\"] = question\n        if fields is not None:\n            params[\"fields\"] = fields\n        return self.viking_knowledgebase_service.json_exception(\"UpdatePoint\", {}, json.dumps(params), headers=headers)\n\n    async def async_update_point(self, point_id, project=\"default\", resource_id=None, collection_name=None, chunk_title=None, content=None, question=None, fields=None, headers=None):\n        params= {\"collection_name\": self.collection_name, \"point_id\": point_id, \"project\":project}\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        if chunk_title is not None:\n            params[\"chunk_title\"] = chunk_title\n        if content is not None:\n            params[\"content\"] = content\n        if question is not None:\n            params[\"question\"] = question\n        if fields is not None:\n            params[\"fields\"] = fields\n        return await self.viking_knowledgebase_service.async_json_exception(\"UpdatePoint\", {}, json.dumps(params), headers=headers)\n\n    def delete_point(self, point_id, project=\"default\", resource_id=None, collection_name=None, headers=None):\n        params= {\"collection_name\": self.collection_name, \"point_id\": point_id, \"project\":project}\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        return self.viking_knowledgebase_service.json_exception(\"DeletePoint\", {}, json.dumps(params), headers=headers)\n\n    async def async_delete_point(self, point_id, project=\"default\", resource_id=None, collection_name=None, headers=None):\n        params= {\"collection_name\": self.collection_name, \"point_id\": point_id, \"project\":project}\n        if collection_name is not None:\n            params[\"collection_name\"] = collection_name\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        return await self.viking_knowledgebase_service.async_json_exception(\"DeletePoint\", {}, json.dumps(params), headers=headers)\n"
  },
  {
    "path": "volcengine/viking_knowledgebase/Doc.py",
    "content": "from .common import Field\nimport json\n\nclass Doc(object):\n    \"\"\"\n    KnowledgeBase Doc data wrapper\n    \"\"\"\n    def __init__(self, kwargs):\n        self.collection_name    = kwargs.get(\"collection_name\")\n        self.doc_name           = kwargs.get(\"doc_name\")\n        self.doc_id             = kwargs.get(\"doc_id\")\n        self.doc_type           = kwargs.get(\"doc_type\")\n        self.create_time        = kwargs.get(\"create_time\")\n        self.added_by           = kwargs.get(\"added_by\")\n        self.update_time        = kwargs.get(\"update_time\")\n        self.url                = kwargs.get(\"url\")\n        self.tos_path           = kwargs.get(\"tos_path\")\n        self.point_num          = kwargs.get(\"point_num\")\n        self.status             = kwargs.get(\"status\")\n        self.title              = kwargs.get(\"title\")\n        self.source             = kwargs.get(\"source\")\n        self.total_tokens       = kwargs.get(\"total_tokens\")\n        self.doc_summary_tokens = kwargs.get(\"doc_summary_tokens\")\n        self.fields             = []\n        meta                    = kwargs.get(\"doc_meta\") or kwargs.get(\"meta\")\n        if meta is not None:\n            meta                = json.loads(meta)\n            self.fields         = [Field(field) for field in meta]\n        \n        self.project            = kwargs.get(\"project\", \"default\")\n        self.resource_id        = kwargs.get(\"resource_id\")\n        self.raw_data           = kwargs\n"
  },
  {
    "path": "volcengine/viking_knowledgebase/Point.py",
    "content": "from .Doc import Doc\n\nclass Point(object):\n    \"\"\"\n    Knowledge Point data wrapper\n    \"\"\"\n    def __init__(self, kwargs):\n        self.collection_name        = kwargs.get(\"collection_name\")\n        self.point_id               = kwargs.get(\"point_id\")\n        self.chunk_title            = kwargs.get(\"chunk_title\") \n        self.original_question      = kwargs.get(\"original_question\") \n        self.process_time           = kwargs.get(\"process_time\") \n        self.content                = kwargs.get(\"content\") \n        self.rerank_score           = kwargs.get(\"rerank_score\")\n        self.score                  = kwargs.get(\"score\")\n        self.doc_info               = Doc(kwargs.get(\"doc_info\"))\n        self.chunk_id               = kwargs.get(\"chunk_id\")\n        self.chunk_attachment       = kwargs.get(\"chunk_attachment\")\n        self.project                = kwargs.get(\"project\", \"default\")\n        self.resource_id            = kwargs.get(\"resource_id\")\n        self.table_chunk_fields     = kwargs.get(\"table_chunk_fields\")\n        self.raw_data               = kwargs\n\n    @property\n    def doc_id(self):\n        # The 'doc_id' property is deprecated. Use 'doc_info.doc_id' instead.\n        return self.doc_info.doc_id"
  },
  {
    "path": "volcengine/viking_knowledgebase/RespIter.py",
    "content": "import json\nfrom typing import Any, Dict, Generator\nclass RespIter:\n    def __init__(self, generator: Generator[Dict[str, Any], None, None]):\n        self.generator = generator\n        self.usage = {\"prompt_tokens\": 0, \"completion_tokens\": 0, \"total_tokens\": 0, \"prompt_tokens_details\": {\"cached_tokens\": 0}, \"completion_tokens_details\": {\"reasoning_tokens\": 0}}\n\n    def __iter__(self):\n        return self._wrapped_generator()\n\n    def _wrapped_generator(self):\n        for part in self.generator:\n            usage =part.get(\"usage\")\n            if not (usage == \"\" or  usage == None):\n                self.usage = json.loads(usage)\n            yield part['generated_answer']\n\n    def token_usage(self):\n        return self.usage\n"
  },
  {
    "path": "volcengine/viking_knowledgebase/VikingKnowledgeBaseService.py",
    "content": "# coding:utf-8\nimport json\nimport os\nimport threading\n\nimport aiohttp\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.auth.SignerV4 import SignerV4\nfrom volcengine.base.Service import Service\nfrom .Collection import Collection\nfrom .Point import Point\nfrom .RespIter import RespIter\nfrom .common import EnumEncoder, CollectionVersion\nfrom .exception import ERRCODE_EXCEPTION, VikingKnowledgeBaseException\n\n\ndef _get_common_viking_request_header():\n    common_header = {'Accept': 'application/json', 'Content-Type': 'application/json'}\n    debug_mode = os.getenv(\"VOLC_VIKING_DEBUG\", None)\n    if debug_mode and debug_mode == \"1\":\n        common_header[\"X-Viking-Debug\"] = \"1\"\n    return common_header\n\n\nclass VikingKnowledgeBaseService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(VikingKnowledgeBaseService, \"_instance\"):\n            with VikingKnowledgeBaseService._instance_lock:\n                if not hasattr(VikingKnowledgeBaseService, \"_instance\"):\n                    VikingKnowledgeBaseService._instance = object.__new__(cls)\n        return VikingKnowledgeBaseService._instance\n\n    def __init__(self, host=\"api-knowledgebase.mlp.cn-beijing.volces.com\", region=\"cn-beijing\", ak=\"\", sk=\"\",\n                 sts_token=\"\", scheme='http',\n                 connection_timeout=30, socket_timeout=30):\n        self.service_info = VikingKnowledgeBaseService.get_service_info(host, region, scheme, connection_timeout,\n                                                                        socket_timeout)\n        self.api_info = VikingKnowledgeBaseService.get_api_info()\n        super(VikingKnowledgeBaseService, self).__init__(self.service_info, self.api_info)\n        if ak:\n            self.set_ak(ak)\n        if sk:\n            self.set_sk(sk)\n        if sts_token:\n            self.set_session_token(session_token=sts_token)\n        try:\n            self.get_body(\"Ping\", {}, json.dumps({}))\n        except Exception as e:\n            raise VikingKnowledgeBaseException(1000028, \"missed\",\n                                               \"host or region is incorrect: {}\".format(str(e))) from None\n\n    def setHeader(self, header):\n        api_info = VikingKnowledgeBaseService.get_api_info()\n        for key in api_info:\n            for item in header:\n                api_info[key].header[item] = header[item]\n        self.api_info = api_info\n\n    @staticmethod\n    def get_service_info(host, region, scheme, connection_timeout, socket_timeout):\n        service_info = ServiceInfo(host, {\"Host\": host},\n                                   Credentials('', '', 'air', region), connection_timeout, socket_timeout,\n                                   scheme=scheme)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\n            # Collection\n            \"CreateCollection\": ApiInfo(\"POST\", \"/api/knowledge/collection/create\", {}, {},\n                                        _get_common_viking_request_header()),\n            \"GetCollection\": ApiInfo(\"POST\", \"/api/knowledge/collection/info\", {}, {},\n                                     _get_common_viking_request_header()),\n            \"DropCollection\": ApiInfo(\"POST\", \"/api/knowledge/collection/delete\", {}, {},\n                                      _get_common_viking_request_header()),\n            \"ListCollections\": ApiInfo(\"POST\", \"/api/knowledge/collection/list\", {}, {},\n                                       _get_common_viking_request_header()),\n            \"UpdateCollection\": ApiInfo(\"POST\", \"/api/knowledge/collection/update\", {}, {},\n                                        _get_common_viking_request_header()),\n            \"SearchCollection\": ApiInfo(\"POST\", \"/api/knowledge/collection/search\", {}, {},\n                                        _get_common_viking_request_header()),\n            \"SearchAndGenerate\": ApiInfo(\"POST\", \"/api/knowledge/collection/search_and_generate\", {}, {},\n                                         _get_common_viking_request_header()),\n\n            \"SearchKnowledge\": ApiInfo(\"POST\", \"/api/knowledge/collection/search_knowledge\", {}, {},\n                                       _get_common_viking_request_header()),\n\n            # Doc\n            \"AddDoc\": ApiInfo(\"POST\", \"/api/knowledge/doc/add\", {}, {},\n                              _get_common_viking_request_header()),\n            \"DeleteDoc\": ApiInfo(\"POST\", \"/api/knowledge/doc/delete\", {}, {},\n                                 _get_common_viking_request_header()),\n            \"GetDocInfo\": ApiInfo(\"POST\", \"/api/knowledge/doc/info\", {}, {},\n                                  _get_common_viking_request_header()),\n            \"ListDocs\": ApiInfo(\"POST\", \"/api/knowledge/doc/list\", {}, {},\n                                _get_common_viking_request_header()),\n            \"UpdateDocMeta\": ApiInfo(\"POST\", \"/api/knowledge/doc/update_meta\", {}, {},\n                                     _get_common_viking_request_header()),\n            \"UpdateDoc\": ApiInfo(\"POST\", \"/api/knowledge/doc/update\", {}, {},\n                                 _get_common_viking_request_header()),\n\n            # Point\n            \"GetPointInfo\": ApiInfo(\"POST\", \"/api/knowledge/point/info\", {}, {},\n                                    _get_common_viking_request_header()),\n            \"ListPoints\": ApiInfo(\"POST\", \"/api/knowledge/point/list\", {}, {},\n                                  _get_common_viking_request_header()),\n            \"AddPoint\": ApiInfo(\"POST\", \"/api/knowledge/point/add\", {}, {},\n                                _get_common_viking_request_header()),\n            \"UpdatePoint\": ApiInfo(\"POST\", \"/api/knowledge/point/update\", {}, {},\n                                   _get_common_viking_request_header()),\n            \"DeletePoint\": ApiInfo(\"POST\", \"/api/knowledge/point/delete\", {}, {},\n                                   _get_common_viking_request_header()),\n\n            # Service\n            \"Ping\": ApiInfo(\"GET\", \"/ping\", {}, {},\n                            _get_common_viking_request_header()),\n            \"Rerank\": ApiInfo(\"POST\", \"/api/knowledge/service/rerank\", {}, {},\n                              _get_common_viking_request_header()),\n\n            # Chat\n            \"ChatCompletion\": ApiInfo(\"POST\", \"/api/knowledge/chat/completions\", {}, {},\n                                      _get_common_viking_request_header()),\n        }\n        return api_info\n\n    def get_body(self, api, params, body):\n        if not (api in self.api_info):\n            raise Exception(\"no such api\")\n        api_info = self.api_info[api]\n        r = self.prepare_request(api_info, params)\n        r.headers['Content-Type'] = 'application/json'\n        r.body = body\n\n        SignerV4.sign(r, self.service_info.credentials)\n\n        url = r.build()\n        resp = self.session.get(url, headers=r.headers, data=r.body,\n                                timeout=(self.service_info.connection_timeout, self.service_info.socket_timeout))\n        if resp.status_code == 200:\n            return json.dumps(resp.json())\n        else:\n            raise Exception(resp.text.encode(\"utf-8\"))\n\n    async def async_json(self, api, params, body, headers=None):\n        if not (api in self.api_info):\n            raise Exception(\"no such api\")\n        api_info = self.api_info[api]\n        r = self.prepare_request(api_info, params)\n        if headers:\n            for key in headers:\n                r.headers[key] = headers[key]\n        r.headers['Content-Type'] = 'application/json'\n        debug_mode = os.getenv(\"VOLC_VIKING_DEBUG\", None)\n        if debug_mode and debug_mode == \"1\":\n            r.headers[\"X-Viking-Debug\"] = \"1\"\n        r.body = body\n\n        SignerV4.sign(r, self.service_info.credentials)\n        timeout = aiohttp.ClientTimeout(connect=self.service_info.connection_timeout,\n                                        sock_connect=self.service_info.socket_timeout)\n        url = r.build()\n        async with aiohttp.request(\"POST\", url, headers=r.headers, data=r.body, timeout=timeout) as r:\n            resp = await r.text(encoding=\"utf-8\")\n            if r.status == 200:\n                return resp\n            else:\n                raise Exception(resp)\n\n    def get_body_exception(self, api, params, body):\n        try:\n            res = self.get_body(api, params, body)\n        except Exception as e:\n            try:\n                res_json = json.loads(e.args[0].decode(\"utf-8\"))\n            except:\n                raise VikingKnowledgeBaseException(1000028, \"missed\",\n                                                   \"json load res error, res:{}\".format(str(e))) from None\n            code = res_json.get(\"code\", 1000028)\n            request_id = res_json.get(\"request_id\", 1000028)\n            message = res_json.get(\"message\", None)\n            raise ERRCODE_EXCEPTION.get(code, VikingKnowledgeBaseException)(code, request_id, message) from None\n        if res == '':\n            raise VikingKnowledgeBaseException(1000028, \"missed\",\n                                               \"empty response due to unknown error, please contact customer service\") from None\n        return res\n\n    def get_exception(self, api, params):\n        try:\n            res = self.get(api, params)\n        except Exception as e:\n            try:\n                res_json = json.loads(e.args[0].decode(\"utf-8\"))\n            except:\n                raise VikingKnowledgeBaseException(1000028, \"missed\",\n                                                   \"json load res error, res:{}\".format(str(e))) from None\n            code = res_json.get(\"code\", 1000028)\n            request_id = res_json.get(\"request_id\", 1000028)\n            message = res_json.get(\"message\", None)\n            raise ERRCODE_EXCEPTION.get(code, VikingKnowledgeBaseException)(code, request_id, message) from None\n        if res == '':\n            raise VikingKnowledgeBaseException(1000028, \"missed\",\n                                               \"empty response due to unknown error, please contact customer service\") from None\n        return res\n\n    def json(self, api, params, body):\n        return self._json(api, params, body, headers=None)\n\n    def json_exception(self, api, params, body, headers=None):\n        try:\n            res = self._json(api, params, body, headers=headers)\n        except Exception as e:\n            try:\n                err_msg = e.args[0].decode(\"utf-8\") if isinstance(e.args[0], bytes) else str(e.args[0])\n                res_json = json.loads(err_msg)\n            except:\n                raise VikingKnowledgeBaseException(1000028, \"missed\",\n                                                   \"json load res error, res:{}\".format(str(e))) from None\n            code = res_json.get(\"code\", 1000028)\n            request_id = res_json.get(\"request_id\", 1000028)\n            message = res_json.get(\"message\", None)\n            raise ERRCODE_EXCEPTION.get(code, VikingKnowledgeBaseException)(code, request_id, message) from None\n        if res == '':\n            raise VikingKnowledgeBaseException(1000028, \"missed\",\n                                               \"empty response due to unknown error, please contact customer service\") from None\n        return res\n\n    def _stream_json_exception(self, api, params, body, headers=None):\n        try:\n            res_stream = self._stream_json(api, params, body, headers=headers)\n            for res in res_stream:\n                yield res\n        except Exception as e:\n            try:\n                res_json = json.loads(e.args[0].decode(\"utf-8\"))\n            except:\n                raise VikingKnowledgeBaseException(1000028, \"missed\",\n                                                   \"json load res error, res:{}\".format(str(e))) from None\n            code = res_json.get(\"code\", 1000028)\n            request_id = res_json.get(\"request_id\", 1000028)\n            message = res_json.get(\"message\", None)\n            raise ERRCODE_EXCEPTION.get(code, VikingKnowledgeBaseException)(code, request_id, message) from None\n        if res == '':\n            raise VikingKnowledgeBaseException(1000028, \"missed\",\n                                               \"empty response due to unknown error, please contact customer service\") from None\n        return res\n\n    def _stream_json(self, api, params, body, headers=None):\n        if not (api in self.api_info):\n            raise Exception(\"no such api\")\n        api_info = self.api_info[api]\n        r = self.prepare_request(api_info, params)\n        if headers:\n            for key in headers:\n                r.headers[key] = headers[key]\n        r.headers['Content-Type'] = 'application/json'\n        r.headers['Accept'] = 'text/event-stream'\n        r.body = body\n\n        SignerV4.sign(r, self.service_info.credentials)\n\n        url = r.build()\n        resp = self.session.post(url, headers=r.headers, data=r.body, stream=True,\n                                 timeout=(self.service_info.connection_timeout, self.service_info.socket_timeout))\n        if resp.status_code == 200:\n            for line in resp.iter_lines():\n                decode_line = line.decode('utf-8')\n                if decode_line == \"\":\n                    continue\n                data_str = decode_line.split(\"data:\")[1]\n                data_dict = json.loads(data_str)\n                yield json.dumps(data_dict)\n                if 'end' in data_dict['data']:\n                    break\n        else:\n            raise Exception(resp.text.encode(\"utf-8\"))\n\n    def _json(self, api, params, body, headers=None):\n        if not (api in self.api_info):\n            raise Exception(\"no such api\")\n        api_info = self.api_info[api]\n        r = self.prepare_request(api_info, params)\n        if headers:\n            for key in headers:\n                r.headers[key] = headers[key]\n        r.headers['Content-Type'] = 'application/json'\n        r.body = body\n        debug_mode = os.getenv(\"VOLC_VIKING_DEBUG\", None)\n        if debug_mode and debug_mode == \"1\":\n            r.headers[\"X-Viking-Debug\"] = \"1\"\n        SignerV4.sign(r, self.service_info.credentials)\n        url = r.build()\n        resp = self.session.post(url, headers=r.headers, data=r.body,\n                                 timeout=(self.service_info.connection_timeout, self.service_info.socket_timeout))\n        if resp.status_code == 200:\n            return json.dumps(resp.json())\n        else:\n            raise Exception(resp.text.encode(\"utf-8\"))\n\n    async def async_json_exception(self, api, params, body, headers=None):\n        try:\n            res = await self.async_json(api, params, body, headers=headers)\n        except Exception as e:\n            try:\n                err_msg = e.args[0].decode(\"utf-8\") if isinstance(e.args[0], bytes) else str(e.args[0])\n                res_json = json.loads(err_msg)\n            except:\n                raise VikingKnowledgeBaseException(1000028, \"missed\",\n                                                   \"json load res error, res:{}\".format(str(e))) from None\n            code = res_json.get(\"code\", 1000028)\n            request_id = res_json.get(\"request_id\", 1000028)\n            message = res_json.get(\"message\", None)\n            raise ERRCODE_EXCEPTION.get(code, VikingKnowledgeBaseException)(code, request_id, message) from None\n        if res == '':\n            raise VikingKnowledgeBaseException(1000028, \"missed\",\n                                               \"empty response due to unknown error, please contact customer service\") from None\n        return res\n\n    def create_collection(self, collection_name, version:CollectionVersion.UltimateVersion, index=None, description=\"\", preprocessing=None, project=\"default\",\n                          data_type=\"unstructured_data\", table_config=None, doc_summary_config=None, headers=None):\n        params = {\"name\": collection_name, \"description\": description, \"project\": project, \"version\": version}\n\n        if doc_summary_config is not None:\n            params[\"doc_summary_config\"] = doc_summary_config\n        if preprocessing is not None:\n            params[\"preprocessing\"] = preprocessing\n\n        if version == CollectionVersion.UltimateVersion:\n            params[\"data_type\"] = data_type\n            if index is not None:\n                params[\"index\"] = index\n            if table_config is not None:\n                params[\"table_config\"] = table_config\n        elif version == CollectionVersion.StandardVersion:\n            pass\n        res = self.json_exception(\"CreateCollection\", {}, json.dumps(params, cls=EnumEncoder), headers=headers)\n        data = json.loads(res)[\"data\"]\n        params[\"resource_id\"] = data[\"resource_id\"]\n        if index is not None and index.get(\"index_config\") is not None:\n            fields = index[\"index_config\"].get(\"fields\")\n            if fields is not None:\n                assert isinstance(fields, list)\n                params[\"fields\"] = fields\n        return Collection(self, collection_name, params)\n\n    async def async_create_collection(self, collection_name, version:CollectionVersion.UltimateVersion, index=None, description=\"\", preprocessing=None, project=\"default\",\n                          data_type=\"unstructured_data\", table_config=None, doc_summary_config=None, headers=None):\n        params = {\"name\": collection_name, \"description\": description, \"project\": project, \"version\": version}\n\n        if doc_summary_config is not None:\n            params[\"doc_summary_config\"] = doc_summary_config\n        if preprocessing is not None:\n            params[\"preprocessing\"] = preprocessing\n\n        if version == CollectionVersion.UltimateVersion:\n            params[\"data_type\"] = data_type\n            if index is not None:\n                params[\"index\"] = index\n            if table_config is not None:\n                params[\"table_config\"] = table_config\n        elif version == CollectionVersion.StandardVersion:\n            pass\n\n        res = await self.async_json_exception(\"CreateCollection\", {}, json.dumps(params, cls=EnumEncoder),\n                                              headers=headers)\n        data = json.loads(res)[\"data\"]\n        params[\"resource_id\"] = data[\"resource_id\"]\n        if index is not None and index.get(\"index_config\") is not None:\n            fields = index[\"index_config\"][\"fields\"]\n            assert isinstance(fields, list)\n            params[\"fields\"] = fields\n        return Collection(self, collection_name, params)\n\n    def get_collection(self, collection_name, project=\"default\", resource_id=None, headers=None):\n        params = {\"name\": collection_name, \"project\": project}\n        if resource_id != None:\n            params[\"resource_id\"] = resource_id\n        res = self.json_exception(\"GetCollection\", {}, json.dumps(params), headers=headers)\n        data = json.loads(res)[\"data\"]\n        now_index_list = data[\"pipeline_list\"][0][\"index_list\"][0]\n        fields = now_index_list[\"index_config\"][\"fields\"]\n        data[\"fields\"] = fields\n\n        return Collection(self, collection_name, data)\n\n    async def async_get_collection(self, collection_name, project=\"default\", resource_id=None, headers=None):\n        params = {\"name\": collection_name, \"project\": project}\n        if resource_id != None:\n            params[\"resource_id\"] = resource_id\n        res = await self.async_json_exception(\"GetCollection\", {}, json.dumps(params), headers=headers)\n        data = json.loads(res)[\"data\"]\n        now_index_list = data[\"pipeline_list\"][0][\"index_list\"][0]\n        fields = now_index_list[\"index_config\"][\"fields\"]\n        data[\"fields\"] = fields\n\n        return Collection(self, collection_name, data)\n\n    def drop_collection(self, collection_name, project=\"default\", resource_id=None, headers=None):\n        params = {\"name\": collection_name, \"project\": project}\n        if resource_id != None:\n            params[\"resource_id\"] = resource_id\n        self.json_exception(\"DropCollection\", {}, json.dumps(params), headers=headers)\n\n    async def async_drop_collection(self, collection_name, project=\"default\", resource_id=None, headers=None):\n        params = {\"name\": collection_name, \"project\": project}\n        if resource_id != None:\n            params[\"resource_id\"] = resource_id\n        await self.async_json_exception(\"DropCollection\", {}, json.dumps(params), headers=headers)\n\n    def list_collections(self, project=None, brief=False, headers=None):\n        params = {\"brief\": brief}\n        if project is not None:\n            params[\"project\"] = project\n        res = self.json_exception(\"ListCollections\", {}, json.dumps(params), headers=headers)\n        collection_list = json.loads(res)[\"data\"][\"collection_list\"]\n        collections = []\n        for collection in collection_list:\n            now_index_list = collection[\"pipeline_list\"][0][\"index_list\"][0]\n            fields = now_index_list[\"index_config\"][\"fields\"]\n            collection[\"fields\"] = fields\n            collections.append(Collection(self, collection[\"collection_name\"], collection))\n\n        return collections\n\n    async def async_list_collections(self, project=None, brief=False, headers=None):\n        params = {\"brief\": brief}\n        if project is not None:\n            params[\"project\"] = project\n        res = await self.async_json_exception(\"ListCollections\", {}, json.dumps(params), headers=headers)\n        collection_list = json.loads(res)[\"data\"][\"collection_list\"]\n        collections = []\n        for collection in collection_list:\n            now_index_list = collection[\"pipeline_list\"][0][\"index_list\"][0]\n            fields = now_index_list[\"index_config\"][\"fields\"]\n            collection[\"fields\"] = fields\n            collections.append(Collection(self, collection[\"collection_name\"], collection))\n\n        return collections\n\n    def update_collection(self, collection_name, description=None, cpu_quota=None, project=\"default\", resource_id=None,\n                          headers=None):\n        params = {\"name\": collection_name, \"project\": project}\n        if resource_id != None:\n            params[\"resource_id\"] = resource_id\n        if description != None:\n            params[\"description\"] = description\n        if cpu_quota != None:\n            params[\"cpu_quota\"] = cpu_quota\n\n        self.json_exception(\"UpdateCollection\", {}, json.dumps(params), headers=headers)\n\n    async def async_update_collection(self, collection_name, description=None, cpu_quota=None, project=\"default\",\n                                      resource_id=None, headers=None):\n        params = {\"name\": collection_name, \"project\": project}\n        if resource_id != None:\n            params[\"resource_id\"] = resource_id\n        if description != None:\n            params[\"description\"] = description\n        if cpu_quota != None:\n            params[\"cpu_quota\"] = cpu_quota\n\n        await self.async_json_exception(\"UpdateCollection\", {}, json.dumps(params), headers=headers)\n\n    def search_collection(self, collection_name, query, query_param=None, limit=10, dense_weight=0.5,\n                          rerank_switch=False,\n                          project=\"default\", resource_id=None, retrieve_count=None, endpoint_id=None,\n                          rerank_model=\"Doubao-pro-4k-rerank\",\n                          rerank_only_chunk=False, headers=None):\n        params = {\"name\": collection_name,\n                  \"query\": query,\n                  \"limit\": limit,\n                  \"dense_weight\": dense_weight,\n                  \"rerank_switch\": rerank_switch,\n                  \"project\": project,\n                  \"rerank_model\": rerank_model,\n                  \"rerank_only_chunk\": rerank_only_chunk,\n                  }\n        if resource_id != None:\n            params[\"resource_id\"] = resource_id\n        if query_param != None:\n            params[\"query_param\"] = query_param\n        if retrieve_count != None:\n            params[\"retrieve_count\"] = retrieve_count\n        if endpoint_id != None:\n            params[\"endpoint_id\"] = endpoint_id\n        res = self.json_exception(\"SearchCollection\", {}, json.dumps(params), headers=headers)\n        data = json.loads(res)[\"data\"]\n        results = data.get(\"result_list\")\n        points = []\n        if results is not None:\n            for result in results:\n                result['collection_name'] = collection_name\n                result['project'] = project\n                if resource_id is not None:\n                    result['resource_id'] = resource_id\n                points.append(Point(result))\n        return points\n\n    async def async_search_collection(self, collection_name, query, query_param=None, limit=10, dense_weight=0.5,\n                                      rerank_switch=False,\n                                      project=\"default\", resource_id=None, retrieve_count=None, endpoint_id=None,\n                                      rerank_model=\"Doubao-pro-4k-rerank\",\n                                      rerank_only_chunk=False, headers=None):\n        params = {\"name\": collection_name,\n                  \"query\": query,\n                  \"limit\": limit,\n                  \"dense_weight\": dense_weight,\n                  \"rerank_switch\": rerank_switch,\n                  \"project\": project,\n                  \"rerank_model\": rerank_model,\n                  \"rerank_only_chunk\": rerank_only_chunk,\n                  }\n        if resource_id != None:\n            params[\"resource_id\"] = resource_id\n        if query_param != None:\n            params[\"query_param\"] = query_param\n        if retrieve_count != None:\n            params[\"retrieve_count\"] = retrieve_count\n        if endpoint_id != None:\n            params[\"endpoint_id\"] = endpoint_id\n        res = await self.async_json_exception(\"SearchCollection\", {}, json.dumps(params), headers=headers)\n        data = json.loads(res)[\"data\"]\n        results = data.get(\"result_list\")\n        points = []\n        if results is not None:\n            for result in results:\n                result['collection_name'] = collection_name\n                result['project'] = project\n                if resource_id is not None:\n                    result['resource_id'] = resource_id\n                points.append(Point(result))\n        return points\n\n    def search_and_generate(self, collection_name, query, query_param=None, retrieve_param=None, llm_param=None,\n                            project=\"default\", resource_id=None, headers=None):\n        params = {\"name\": collection_name,\n                  \"query\": query,\n                  \"project\": project\n                  }\n\n        if resource_id != None:\n            params[\"resource_id\"] = resource_id\n        if query_param != None:\n            params[\"query_param\"] = query_param\n        if retrieve_param != None:\n            params[\"retrieve_param\"] = retrieve_param\n        if llm_param != None:\n            params[\"llm_param\"] = llm_param\n\n        res = self.json_exception(\"SearchAndGenerate\", {}, json.dumps(params), headers=headers)\n        data = json.loads(res)[\"data\"]\n        results = data.get(\"result_list\")\n        points = []\n        if results is not None:\n            for result in results:\n                result['collection_name'] = collection_name\n                points.append(Point(result))\n        ret = {\n            \"collection_name\": data.get(\"collection_name\"),\n            \"count\": data.get(\"count\"),\n            \"generated_answer\": data.get(\"generated_answer\"),\n            \"prompt\": data.get(\"prompt\"),\n            \"usage\": data.get(\"usage\"),\n            \"refs\": points\n        }\n\n        return ret\n\n    async def async_search_and_generate(self, collection_name, query, query_param=None, retrieve_param=None,\n                                        llm_param=None, project=\"default\", resource_id=None, headers=None):\n        params = {\"name\": collection_name,\n                  \"query\": query,\n                  \"project\": project\n                  }\n\n        if resource_id != None:\n            params[\"resource_id\"] = resource_id\n        if query_param != None:\n            params[\"query_param\"] = query_param\n        if retrieve_param != None:\n            params[\"retrieve_param\"] = retrieve_param\n        if llm_param != None:\n            params[\"llm_param\"] = llm_param\n\n        res = await self.async_json_exception(\"SearchAndGenerate\", {}, json.dumps(params), headers=headers)\n        data = json.loads(res)[\"data\"]\n        results = data.get(\"result_list\")\n        points = []\n        if results is not None:\n            for result in results:\n                result['collection_name'] = collection_name\n                points.append(Point(result))\n        ret = {\n            \"collection_name\": data.get(\"collection_name\"),\n            \"count\": data.get(\"count\"),\n            \"generated_answer\": data.get(\"generated_answer\"),\n            \"prompt\": data.get(\"prompt\"),\n            \"usage\": data.get(\"usage\"),\n            \"refs\": points\n        }\n\n        return ret\n\n    def rerank(self, datas, rerank_model=\"Doubao-pro-4k-rerank\", endpoint_id=None, headers=None):\n        params = {\n            \"datas\": datas,\n            \"rerank_model\": rerank_model\n        }\n\n        if endpoint_id != None:\n            params[\"endpoint_id\"] = endpoint_id\n\n        res = self.json_exception(\"Rerank\", {}, json.dumps(params), headers=headers)\n        return json.loads(res)\n\n    async def async_rerank(self, datas, rerank_model=\"Doubao-pro-4k-rerank\", endpoint_id=None, headers=None):\n        params = {\n            \"datas\": datas,\n            \"rerank_model\": rerank_model\n        }\n\n        if endpoint_id != None:\n            params[\"endpoint_id\"] = endpoint_id\n\n        res = await self.async_json_exception(\"Rerank\", {}, json.dumps(params), headers=headers)\n        return json.loads(res)\n\n    def search_knowledge(self, collection_name, query, image_query=None, pre_processing=None, query_param=None, limit=10,\n                         dense_weight=0.5, post_processing=None,\n                         project=\"default\", resource_id=None, headers=None):\n        params = {\n            \"name\": collection_name,\n            \"query\": query,\n            \"project\": project,\n            \"limit\": limit,\n            \"dense_weight\": dense_weight,\n        }\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        if image_query is not None:\n            params[\"image_query\"] = image_query\n        if query_param is not None:\n            params[\"query_param\"] = query_param\n        if post_processing is not None:\n            params[\"post_processing\"] = post_processing\n        if pre_processing is not None:\n            params[\"pre_processing\"] = pre_processing\n        res = self.json_exception(\"SearchKnowledge\", {}, json.dumps(params), headers=headers)\n        data = json.loads(res)[\"data\"]\n        ret = {\n            \"rewrite_query\": data.get(\"rewrite_query\"),\n            \"result_list\": data.get(\"result_list\")\n        }\n        return ret\n\n    async def async_search_knowledge(self, collection_name, query, image_query=None, pre_processing=None, query_param=None, limit=10,\n                                     dense_weight=0.5, post_processing=None,\n                                     project=\"default\", resource_id=None, headers=None):\n        params = {\n            \"name\": collection_name,\n            \"query\": query,\n            \"project\": project,\n            \"limit\": limit,\n            \"dense_weight\": dense_weight,\n        }\n        if resource_id is not None:\n            params[\"resource_id\"] = resource_id\n        if image_query is not None:\n            params[\"image_query\"] = image_query\n        if query_param is not None:\n            params[\"query_param\"] = query_param\n        if post_processing is not None:\n            params[\"post_processing\"] = post_processing\n        if pre_processing is not None:\n            params[\"pre_processing\"] = pre_processing\n        res = await self.async_json_exception(\"SearchKnowledge\", {}, json.dumps(params), headers=headers)\n        data = json.loads(res)[\"data\"]\n        ret = {\n            \"rewrite_query\": data.get(\"rewrite_query\"),\n            \"result_list\": data.get(\"result_list\")\n        }\n        return ret\n\n    def chat_completion(self, model, messages, model_version=None, thinking=None, max_tokens=4096, temperature=0.1, return_token_usage=True, api_key=None,\n                        stream=False, headers=None):\n        params = {\n            \"model\": model,\n            \"messages\": messages,\n            \"return_token_usage\": return_token_usage,\n            \"max_tokens\": max_tokens,\n            \"temperature\": temperature\n        }\n        if model_version is not None:\n            params[\"model_version\"] = model_version\n        if thinking is not None:\n            params[\"thinking\"] = thinking\n        if api_key is not None:\n            params[\"api_key\"] = api_key\n\n        if stream:\n            params['stream'] = True\n            res_stream = self._stream_json_exception(\"ChatCompletion\", {}, json.dumps(params), headers=headers)\n            return RespIter(self._generate_responses(res_stream))\n        else:\n            res = self.json_exception(\"ChatCompletion\", {}, json.dumps(params), headers)\n            data = json.loads(res)[\"data\"]\n            ret = {\n                \"generated_answer\": data.get(\"generated_answer\"),\n                \"usage\": data.get(\"usage\")\n            }\n            return ret\n\n    async def async_chat_completion(self, model, messages, model_version=None, thinking=None, max_tokens=4096, temperature=0.1, return_token_usage=True,\n                                    api_key=None, headers=None):\n        params = {\n            \"model\": model,\n            \"messages\": messages,\n            \"return_token_usage\": return_token_usage,\n            \"max_tokens\": max_tokens,\n            \"temperature\": temperature\n        }\n        if model_version is not None:\n            params[\"model_version\"] = model_version\n        if thinking is not None:\n            params[\"thinking\"] = thinking\n        if api_key is not None:\n            params[\"api_key\"] = api_key\n        res = await self.async_json_exception(\"ChatCompletion\", {}, json.dumps(params), headers=headers)\n        data = json.loads(res)[\"data\"]\n        ret = {\n            \"generated_answer\": data.get(\"generated_answer\"),\n            \"usage\": data.get(\"usage\")\n        }\n        return ret\n\n    def _generate_responses(self, res_stream):\n        for res in res_stream:\n            data = json.loads(res)[\"data\"]\n            yield {\n                \"generated_answer\": data.get(\"generated_answer\"),\n                \"usage\": data.get(\"usage\")\n            }\n"
  },
  {
    "path": "volcengine/viking_knowledgebase/__init__.py",
    "content": "from .VikingKnowledgeBaseService import VikingKnowledgeBaseService\nfrom .Collection import Collection\nfrom .Doc import Doc    \nfrom .Point import Point\nfrom .common import *"
  },
  {
    "path": "volcengine/viking_knowledgebase/common.py",
    "content": "# coding:utf-8\nimport json\nfrom enum import Enum\n\nclass FieldType(Enum):\n    Int64 = \"int64\"\n    List_Int64 = \"list<int64>\"\n    String = \"string\"\n    List_String = \"list<string>\"\n    Float32 = \"float32\"\n    Bool = \"bool\"\n\nclass EmbddingModelType(Enum):\n    EmbeddingModelBgeLargeZhAndM3   = \"bge-large-zh-and-m3\"\n    EmbeddingModelBgeLargeZh        = \"bge-large-zh\"\n    EmbeddingModelBgeM3             = \"bge-m3\"\n    EmbeddingModelDoubao            = \"doubao-embedding\"\n    EmbeddingModelDoubaoAndM3       = \"doubao-embedding-and-m3\"\n    EmbeddingModelDoubaoLarge       = \"doubao-embedding-large\"\n    EmbeddingModelDoubaoLargeAndM3  = \"doubao-embedding-large-and-m3\"\n\nclass IndexType(Enum):\n    FLAT = \"flat\"\n    HNSW = \"hnsw\"\n    HNSW_HYBRID = \"hnsw_hybrid\"\n\nclass QuantType(Enum):\n    Float = \"float\"\n    Int8 = \"int8\"\n    Fix16 = \"fix16\"\n\nclass Field(object):\n    \n    def __init__(self, kwargs):\n        self._field_name        = kwargs.get(\"field_name\")\n        self._field_type        = kwargs.get(\"field_type\")\n        self._field_val         = kwargs.get(\"default_val\") if kwargs.get(\"default_val\") \\\n                                            is not None else kwargs.get(\"field_value\") \n        self._dim               = kwargs.get(\"dim\", 1)\n        self._is_primary_key    = kwargs.get(\"is_primary_key\", False)\n        self._pipeline_name     = kwargs.get(\"pipeline_name\")\n\n    @property\n    def field_name(self):\n        return self._field_name\n\n    @property\n    def field_type(self):\n        return self._field_type\n\n    @property\n    def field_val(self):\n        return self._field_val\n\n    @property\n    def dim(self):\n        return self._dim\n\n    @property\n    def is_primary_key(self):\n        return self._is_primary_key\n\n    @property\n    def pipeline_name(self):\n        return self._pipeline_name\n\n\nclass EnumEncoder(json.JSONEncoder):\n    def default(self, obj):\n        if isinstance(obj, Enum):\n            return obj.value\n        if isinstance(obj, dict):\n            return {k: self.default(v) for k, v in obj.items()}\n        return super().default(obj)\n\n\nclass CollectionVersion(object):\n    UltimateVersion = 4\n    StandardVersion = 2\n"
  },
  {
    "path": "volcengine/viking_knowledgebase/exception.py",
    "content": "# coding:utf-8\nclass VikingKnowledgeBaseServerException(Exception):\n    def __init__(self, code, request_id, message=None):\n        self.code = code\n        self.request_id = request_id\n        self.message = \"{}, code:{}，request_id:{}\".format(message, self.code, self.request_id)\n\n    def __str__(self):\n        return self.message\n\n\nclass UnauthorizedException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass NoPermissionException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass InvalidRequestException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass CollectionExistException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass CollectionNotExistException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass OperationNotAllowedException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass IndexExistException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass IndexNotExistException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass QueryOpFailedException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass DataNotFoundException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass DelOpFailedException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass UpsertOpFailedException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass TokenMismatchException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass InvalidQueryVecException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass InvalidPrimaryKeyException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass InvalidPartitionException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass InvalidScalarCondException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass InvalidProxyServiceException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass IndexRecallException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass IndexFetchDataException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass IndexNotReadyException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass APINotImplementedException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass CalcEmbeddingFailedException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass ListEmbeddingModelsException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\n\nclass VikingKnowledgeBaseException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        self.code = code\n        self.request_id = request_id\n        if message is not None:\n            self.message = message\n        else:\n            self.message = \"unknown error, please contact customer service, request_id:{}\".format(self.request_id)\n\n    def __str__(self):\n        return self.message\n\nclass QuotaLimiterException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\nclass RerankException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\nclass DocNotExistException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\nclass DocIsFullException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\nclass PointNotExistException(VikingKnowledgeBaseServerException):\n    def __init__(self, code, request_id, message=None):\n        super().__init__(code, request_id, message)\n\nERRCODE_EXCEPTION = {\n    1000001: UnauthorizedException,\n    1000002: NoPermissionException,\n    1000003: InvalidRequestException,\n    1000004: CollectionExistException,\n    1000005: CollectionNotExistException,\n    1000006: OperationNotAllowedException,\n    1000007: IndexExistException,\n    1000008: IndexNotExistException,\n    1000010: QueryOpFailedException,\n    1000011: DataNotFoundException,\n    1000013: DelOpFailedException,\n    1000014: UpsertOpFailedException,\n    1000015: TokenMismatchException,\n    1000016: InvalidQueryVecException,\n    1000017: InvalidPrimaryKeyException,\n    1000018: InvalidPartitionException,\n    1000019: InvalidScalarCondException,\n    1000020: InvalidProxyServiceException,\n    1000021: IndexRecallException,\n    1000022: IndexFetchDataException,\n    1000023: IndexNotReadyException,\n    1000024: APINotImplementedException,\n    1000025: CalcEmbeddingFailedException,\n    1000026: ListEmbeddingModelsException,\n    1000028: VikingKnowledgeBaseException,\n    1000029: QuotaLimiterException,\n    1000030: RerankException,\n\n    1001001: DocNotExistException,\n    1001010: DocIsFullException,\t\n    1002001: PointNotExistException,\n}"
  },
  {
    "path": "volcengine/visual/README.md",
    "content": "## Example\n\n调用代码示例均在`volcengine/example/visual`文件夹下，以下为银行卡OCR调用示例\n\n```python\n# coding:utf-8\nfrom __future__ import print_function\n\nfrom volc.visual.VisualService import VisualService\n\nif __name__ == '__main__':\n    visual_service = VisualService()\n\n    # call below method if you dont set ak and sk in $HOME/.volc/config\n    visual_service.set_ak('ak')\n    visual_service.set_sk('sk')\n    # visual_service.set_host('host')\n\n    params = dict()\n\n    form = {\n        \"image_base64\": \"image_base64_str\"\n    }\n\n    resp = visual_service.bank_card(form)\n    print(resp)\n\n```\n\n运行代码方式，在根目录下执行\n\n```bash\npython volcengine/example/visual/example_bank_card.py\n```\n\n## 接口文档\n文档链接请点击[这里](https://www.volcengine.cn/docs)\n并在【视觉智能】列表查看\n\n"
  },
  {
    "path": "volcengine/visual/VisualService.py",
    "content": "# coding:utf-8\nimport json\nimport threading\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.base.Service import Service\nfrom volcengine.ServiceInfo import ServiceInfo\n\n\nclass VisualService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(VisualService, \"_instance\"):\n            with VisualService._instance_lock:\n                if not hasattr(VisualService, \"_instance\"):\n                    VisualService._instance = object.__new__(cls)\n        return VisualService._instance\n\n    def __init__(self):\n        self.service_info = VisualService.get_service_info()\n        self.api_info = VisualService.get_api_info()\n        super(VisualService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info():\n        service_info = ServiceInfo(\"visual.volcengineapi.com\", {},\n                                   Credentials('', '', 'cv', 'cn-north-1'), 30, 30)\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\n            \"JPCartoonCut\": ApiInfo(\"POST\", \"/\", {\"Action\": \"JPCartoonCut\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"JPCartoon\": ApiInfo(\"POST\", \"/\", {\"Action\": \"JPCartoon\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"IDCard\": ApiInfo(\"POST\", \"/\", {\"Action\": \"IDCard\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"FaceSwap\": ApiInfo(\"POST\", \"/\", {\"Action\": \"FaceSwap\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"OCRNormal\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OCRNormal\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"BankCard\": ApiInfo(\"POST\", \"/\", {\"Action\": \"BankCard\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"HumanSegment\": ApiInfo(\"POST\", \"/\", {\"Action\": \"HumanSegment\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"GeneralSegment\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GeneralSegment\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"EnhancePhoto\": ApiInfo(\"POST\", \"/\", {\"Action\": \"EnhancePhoto\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"ConvertPhoto\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ConvertPhoto\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"ConvertPhotoV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ConvertPhotoV2\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"VideoSceneDetect\": ApiInfo(\"POST\", \"/\", {\"Action\": \"VideoSceneDetect\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"OverResolution\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OverResolution\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"GoodsSegment\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GoodsSegment\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"ImageOutpaint\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ImageOutpaint\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"ImageInpaint\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ImageInpaint\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"ImageCut\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ImageCut\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"EntityDetect\": ApiInfo(\"POST\", \"/\", {\"Action\": \"EntityDetect\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"GoodsDetect\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GoodsDetect\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"VideoSummarizationSubmitTask\": ApiInfo(\"POST\", \"/\",{\"Action\": \"VideoSummarizationSubmitTask\", \"Version\": \"2020-08-26\"},{}, {}),\n            \"VideoSummarizationQueryTask\": ApiInfo(\"GET\", \"/\",{\"Action\": \"VideoSummarizationQueryTask\", \"Version\": \"2020-08-26\"},{}, {}),\n            \"VideoOverResolutionSubmitTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"VideoOverResolutionSubmitTask\",\"Version\": \"2020-08-26\"}, {}, {}),\n            \"VideoOverResolutionQueryTask\": ApiInfo(\"GET\", \"/\",{\"Action\": \"VideoOverResolutionQueryTask\", \"Version\": \"2020-08-26\"},{}, {}),\n            \"VideoRetargetingSubmitTask\": ApiInfo(\"POST\", \"/\",{\"Action\": \"VideoRetargetingSubmitTask\", \"Version\": \"2020-08-26\"}, {},{}),\n            \"VideoRetargetingQueryTask\": ApiInfo(\"GET\", \"/\",{\"Action\": \"VideoRetargetingQueryTask\", \"Version\": \"2020-08-26\"}, {},{}),\n            \"VideoInpaintSubmitTask\": ApiInfo(\"POST\", \"/\",{\"Action\": \"VideoInpaintSubmitTask\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"VideoInpaintQueryTask\": ApiInfo(\"GET\", \"/\", {\"Action\": \"VideoInpaintQueryTask\", \"Version\": \"2020-08-26\"},{}, {}),\n            \"CarPlateDetection\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CarPlateDetection\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"DistortionFree\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DistortionFree\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"StretchRecovery\": ApiInfo(\"POST\", \"/\", {\"Action\": \"StretchRecovery\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"ImageFlow\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ImageFlow\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"ImageScore\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ImageScore\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"PoemMaterial\": ApiInfo(\"POST\", \"/\", {\"Action\": \"PoemMaterial\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"EmoticonEdit\": ApiInfo(\"POST\", \"/\", {\"Action\": \"EmoticonEdit\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"EyeClose2Open\": ApiInfo(\"POST\", \"/\", {\"Action\": \"EyeClose2Open\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"CarSegment\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CarSegment\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"CarDetection\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CarDetection\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"SkySegment\": ApiInfo(\"POST\", \"/\", {\"Action\": \"SkySegment\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"ImageSearchImageAdd\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ImageSearchImageAdd\", \"Version\": \"2020-08-26\"}, {},{}),\n            \"ImageSearchImageDelete\": ApiInfo(\"POST\", \"/\",{\"Action\": \"ImageSearchImageDelete\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"ImageSearchImageSearch\": ApiInfo(\"POST\", \"/\",{\"Action\": \"ImageSearchImageSearch\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"ProductSearchAddImage\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ProductSearchAddImage\", \"Version\": \"2022-06-16\"},{}, {}),\n            \"ProductSearchDeleteImage\": ApiInfo(\"POST\", \"/\",{\"Action\": \"ProductSearchDeleteImage\", \"Version\": \"2022-06-16\"}, {},{}),\n            \"ProductSearchSearchImage\": ApiInfo(\"POST\", \"/\",{\"Action\": \"ProductSearchSearchImage\", \"Version\": \"2022-06-16\"}, {},{}),\n            \"ClueLicense\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OcrClueLicense\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"DrivingLicense\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DrivingLicense\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"VehicleLicense\": ApiInfo(\"POST\", \"/\", {\"Action\": \"VehicleLicense\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"TaxiInvoice\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OcrTaxiInvoice\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"TrainTicket\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OcrTrainTicket\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"FlightInvoice\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OcrFlightInvoice\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"VatInvoice\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OcrVatInvoice\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"QuotaInvoice\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OcrQuotaInvoice\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"HairStyle\": ApiInfo(\"POST\", \"/\", {\"Action\": \"HairStyle\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"HairStyleV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"HairStyle\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"FacePretty\": ApiInfo(\"POST\", \"/\", {\"Action\": \"FacePretty\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"ImageAnimation\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ImageAnimation\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"CoverVideo\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CoverVideo\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"DollyZoom\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DollyZoom\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"Img2Video3D\": ApiInfo(\"POST\", \"/\", {\"Action\": \"Img2Video3D\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"PotraitEffect\": ApiInfo(\"POST\", \"/\", {\"Action\": \"PotraitEffect\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"ImageStyleConversion\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ImageStyleConversion\", \"Version\": \"2020-08-26\"},{}, {}),\n            \"3DGameCartoon\": ApiInfo(\"POST\", \"/\", {\"Action\": \"3DGameCartoon\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"HairSegment\": ApiInfo(\"POST\", \"/\", {\"Action\": \"HairSegment\", \"Version\": \"2020-08-26\"}, {}, {}),\n            \"OcrSeal\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OcrSeal\", \"Version\": \"2021-08-23\"}, {}, {}),\n            \"OcrPassInvoice\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OcrPassInvoice\", \"Version\": \"2021-08-23\"}, {}, {}),\n            \"OCRTrade\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OCRTrade\", \"Version\": \"2020-12-21\"}, {}, {}),\n            \"OCRRuanzhu\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OCRRuanzhu\", \"Version\": \"2020-12-21\"}, {}, {}),\n            \"OCRCosmeticProduct\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OCRCosmeticProduct\", \"Version\": \"2020-12-21\"}, {},{}),\n            \"OCRPdf\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OCRPdf\", \"Version\": \"2021-08-23\"}, {}, {}),\n            \"OCRTable\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OCRTable\", \"Version\": \"2021-08-23\"}, {}, {}),\n            \"VideoCoverSelection\": ApiInfo(\"POST\", \"/\", {\"Action\": \"VideoCoverSelection\", \"Version\": \"2020-08-26\"}, {},{}),\n            \"VideoHighlightExtractionSubmitTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"VideoHighlightExtractionSubmitTask\",\"Version\": \"2020-08-26\"}, {}, {}),\n            \"VideoHighlightExtractionQueryTask\": ApiInfo(\"GET\", \"/\", {\"Action\": \"VideoHighlightExtractionQueryTask\",\"Version\": \"2020-08-26\"}, {}, {}),\n            \"CertToken\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CertToken\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"CertVerifyQuery\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CertVerifyQuery\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"T2ILDM\": ApiInfo(\"POST\", \"/\", {\"Action\": \"T2ILDM\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"Img2ImgStyle\": ApiInfo(\"POST\", \"/\", {\"Action\": \"Img2ImgStyle\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"Img2ImgAnime\": ApiInfo(\"POST\", \"/\", {\"Action\": \"Img2ImgAnime\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"ImageScoreV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ImageScoreV2\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"EnhancePhotoV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"EnhancePhotoV2\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"OverResolutionV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OverResolutionV2\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"VideoOverResolutionSubmitTaskV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"VideoOverResolutionSubmitTaskV2\",\"Version\": \"2022-08-31\"}, {}, {}),\n            \"VideoOverResolutionQueryTaskV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"VideoOverResolutionQueryTaskV2\",\"Version\": \"2022-08-31\"}, {}, {}),\n            \"ImageCorrection\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ImageCorrection\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"AllAgeGeneration\": ApiInfo(\"POST\", \"/\", {\"Action\": \"AllAgeGeneration\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"BodyDetection\": ApiInfo(\"POST\", \"/\", {\"Action\": \"BodyDetection\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"FaceFusionMovieSubmitTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"FaceFusionMovieSubmitTask\", \"Version\": \"2022-08-31\"}, {},{}),\n            \"FaceFusionMovieGetResult\": ApiInfo(\"POST\", \"/\", {\"Action\": \"FaceFusionMovieGetResult\", \"Version\": \"2022-08-31\"}, {},{}),\n            \"FaceFusionMovie\": ApiInfo(\"POST\", \"/\", {\"Action\": \"FaceFusionMovie\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"TupoCartoon\": ApiInfo(\"POST\", \"/\", {\"Action\": \"TupoCartoon\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"LensVidaVideoSubmitTaskV2\": ApiInfo(\"POST\", \"/\",{\"Action\": \"LensVidaVideoSubmitTaskV2\", \"Version\": \"2022-08-31\"}, {},{}),\n            \"LensVidaVideoGetResultV2\": ApiInfo(\"POST\", \"/\",{\"Action\": \"LensVidaVideoGetResultV2\", \"Version\": \"2022-08-31\"}, {},{}),\n            \"CertSrcFaceComp\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CertSrcFaceComp\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"AIGufeng\": ApiInfo(\"POST\", \"/\", {\"Action\": \"AIGufeng\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"CertConfigInit\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CertConfigInit\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"CertConfigGet\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CertConfigInit\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"FaceCompare\": ApiInfo(\"POST\", \"/\", {\"Action\": \"FaceCompare\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"StillLivenessImg\": ApiInfo(\"POST\", \"/\", {\"Action\": \"StillLivenessImg\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"CertAuth\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CertAuth\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"CertVerify\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CertVerify\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"FaceSwapV2\": ApiInfo(\"POST\", \"/\", {\"Action\": \"FaceSwap\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"FaceswapAI\": ApiInfo(\"POST\", \"/\", {\"Action\": \"FaceswapAI\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"CertH5ConfigInit\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CertH5ConfigInit\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"CertH5Token\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CertH5Token\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"HighAesSmartDrawing\": ApiInfo(\"POST\", \"/\", {\"Action\": \"HighAesSmartDrawing\", \"Version\": \"2022-08-31\"}, {},{}),\n            \"EmotionPortrait\": ApiInfo(\"POST\", \"/\", {\"Action\": \"EmotionPortrait\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"Img2ImgInpainting\": ApiInfo(\"POST\", \"/\", {\"Action\": \"Img2ImgInpainting\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"Img2ImgInpaintingEdit\": ApiInfo(\"POST\", \"/\", {\"Action\": \"Img2ImgInpaintingEdit\", \"Version\": \"2022-08-31\"},{}, {}),\n            \"Img2ImgOutpainting\": ApiInfo(\"POST\", \"/\", {\"Action\": \"Img2ImgOutpainting\", \"Version\": \"2022-08-31\"}, {},{}),\n            \"Img2ImgCreateDisneyStyleNoFace\": ApiInfo(\"POST\", \"/\", {\"Action\": \"Img2ImgCreateDisneyStyleNoFace\",\"Version\": \"2022-08-31\"}, {}, {}),\n            \"Img2ImgCreatePastelBoys2D\": ApiInfo(\"POST\", \"/\",{\"Action\": \"Img2ImgCreatePastelBoys2D\", \"Version\": \"2022-08-31\"}, {},{}),\n            \"Img2ImgCreateAesBlueline\": ApiInfo(\"POST\", \"/\",{\"Action\": \"Img2ImgCreateAesBlueline\", \"Version\": \"2022-08-31\"}, {},{}),\n            \"Img2ImgCreateEtherRealMix\": ApiInfo(\"POST\", \"/\",{\"Action\": \"Img2ImgCreateEtherRealMix\", \"Version\": \"2022-08-31\"}, {},{}),\n            \"Img2ImgCreateToonyou\": ApiInfo(\"POST\", \"/\", {\"Action\": \"Img2ImgCreateToonyou\", \"Version\": \"2022-08-31\"},{}, {}),\n            \"Img2ImgCreateAnyloraMakoto\": ApiInfo(\"POST\", \"/\",{\"Action\": \"Img2ImgCreateAnyloraMakoto\", \"Version\": \"2022-08-31\"}, {},{}),\n            \"Img2ImgCreateRevAnimated\": ApiInfo(\"POST\", \"/\",{\"Action\": \"Img2ImgCreateRevAnimated\", \"Version\": \"2022-08-31\"}, {},{}),\n            \"Img2ImgCreateInkAndWater\": ApiInfo(\"POST\", \"/\",{\"Action\": \"Img2ImgCreateInkAndWater\", \"Version\": \"2022-08-31\"}, {},{}),\n            \"Img2ImgWaterColorStyle\": ApiInfo(\"POST\", \"/\",{\"Action\": \"Img2ImgWaterColorStyle\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"OCRPdfSubmitTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OCRPdfSubmitTask\", \"Version\": \"2021-08-23\"}, {}, {}),\n            \"OCRPdfQueryTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OCRPdfQueryTask\", \"Version\": \"2021-08-23\"}, {}, {}),\n            \"EntitySegment\": ApiInfo(\"POST\", \"/\", {\"Action\": \"EntitySegment\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"Img2ImgAnimeAcceleratedMaintainID\": ApiInfo(\"POST\", \"/\", {\"Action\": \"Img2ImgAnimeAcceleratedMaintainID\",\"Version\": \"2022-08-31\"}, {}, {}),\n            \"Img2ImgComicsStyle\": ApiInfo(\"POST\", \"/\", {\"Action\": \"Img2ImgComicsStyle\", \"Version\": \"2022-08-31\"}, {},{}),\n            \"Img2ImgExquisiteStyle\": ApiInfo(\"POST\", \"/\", {\"Action\": \"Img2ImgExquisiteStyle\", \"Version\": \"2022-08-31\"},{}, {}),\n            \"Text2ImgXLSft\": ApiInfo(\"POST\", \"/\", {\"Action\": \"Text2ImgXLSft\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"Img2ImgXLSft\": ApiInfo(\"POST\", \"/\", {\"Action\": \"Img2ImgXLSft\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"CVGetResult\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CVGetResult\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"CVSubmitTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CVSubmitTask\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"CVSync2AsyncGetResult\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CVSync2AsyncGetResult\", \"Version\": \"2022-08-31\"},{}, {}),\n            \"CVSync2AsyncSubmitTask\": ApiInfo(\"POST\", \"/\",{\"Action\": \"CVSync2AsyncSubmitTask\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"CVProcess\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CVProcess\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"CertLivenessVerifyQuery\": ApiInfo(\"POST\", \"/\",\n                                               {\"Action\": \"CertLivenessVerifyQuery\", \"Version\": \"2022-08-31\"}, {}, {}),\n            \"CVCancelTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CVCancelTask\", \"Version\": \"2024-06-06\"}, {}, {}),\n        }\n        return api_info\n\n    def common_handler(self, api, form):\n        params = dict()\n        try:\n            res = self.post(api, params, form)\n            res_json = json.loads(res)\n            return res_json\n        except Exception as e:\n            res = str(e)\n            try:\n                res_json = json.loads(res)\n                return res_json\n            except:\n                raise Exception(str(e))\n\n    def common_get_handler(self, api, params):\n        try:\n            res = self.get(api, params)\n            res_json = json.loads(res)\n            return res_json\n        except Exception as e:\n            res = str(e)\n            try:\n                res_json = json.loads(res)\n                return res_json\n            except:\n                raise Exception(str(e))\n\n    def common_json_handler(self, api, form):\n        params = dict()\n        try:\n            res = self.json(api, params, json.dumps(form))\n            res_json = json.loads(res)\n\n            return res_json\n        except Exception as e:\n            res = str(e)\n            try:\n                res_json = json.loads(res)\n                return res_json\n            except:\n                raise Exception(str(e))\n\n    def cv_json_api(self, action, form):\n        try:\n            res_json = self.common_json_handler(action, form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def cv_form_api(self, action, form):\n        try:\n            res_json = self.common_handler(action, form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def cv_process(self, form):\n        try:\n            res_json = self.common_json_handler(\"CVProcess\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def cv_submit_task(self, form):\n        try:\n            res_json = self.common_json_handler(\"CVSubmitTask\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def cv_get_result(self, form):\n        try:\n            res_json = self.common_json_handler(\"CVGetResult\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def cv_sync2async_submit_task(self, form):\n        try:\n            res_json = self.common_json_handler(\"CVSync2AsyncSubmitTask\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def cv_sync2async_get_result(self, form):\n        try:\n            res_json = self.common_json_handler(\"CVSync2AsyncGetResult\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def cv_cancel_task(self, form):\n        try:\n            res_json = self.common_json_handler(\"CVCancelTask\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def cert_pro_liveness_verify_query(self, form):\n        try:\n            res_json = self.common_json_handler(\"CertLivenessVerifyQuery\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def img2img_xl_sft(self, form):\n        try:\n            res_json = self.common_json_handler(\"Img2ImgXLSft\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def text2img_xl_sft(self, form):\n        try:\n            res_json = self.common_json_handler(\"Text2ImgXLSft\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def img2img_comics_style(self, form):\n        try:\n            res_json = self.common_json_handler(\"Img2ImgComicsStyle\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def img2img_exquisite_style(self, form):\n        try:\n            res_json = self.common_json_handler(\"Img2ImgExquisiteStyle\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def img2img_anime_accelerated_maintain_id(self, form):\n        try:\n            res_json = self.common_json_handler(\"Img2ImgAnimeAcceleratedMaintainID\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def entity_segment(self, form):\n        try:\n            res_json = self.common_json_handler(\"EntitySegment\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def ocr_pdf_submit_task(self, form):\n        try:\n            res_json = self.common_json_handler(\"OCRPdfSubmitTask\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def ocr_pdf_query_task(self, form):\n        try:\n            res_json = self.common_json_handler(\"OCRPdfQueryTask\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def img2img_create_disney_style_no_face(self, form):\n        try:\n            res_json = self.common_json_handler(\"Img2ImgCreateDisneyStyleNoFace\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def img2img_create_pastel_boys2d(self, form):\n        try:\n            res_json = self.common_json_handler(\"Img2ImgCreatePastelBoys2D\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def img2img_create_ether_real_mix(self, form):\n        try:\n            res_json = self.common_json_handler(\"Img2ImgCreateEtherRealMix\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def img2img_create_toonyou(self, form):\n        try:\n            res_json = self.common_json_handler(\"Img2ImgCreateToonyou\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def img2img_create_anylora_makoto(self, form):\n        try:\n            res_json = self.common_json_handler(\"Img2ImgCreateAnyloraMakoto\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def img2img_create_rev_animated(self, form):\n        try:\n            res_json = self.common_json_handler(\"Img2ImgCreateRevAnimated\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def img2img_create_aes_blueline(self, form):\n        try:\n            res_json = self.common_json_handler(\"Img2ImgCreateAesBlueline\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def img2img_create_ink_and_water(self, form):\n        try:\n            res_json = self.common_json_handler(\"Img2ImgCreateInkAndWater\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def img2img_water_color_style(self, form):\n        try:\n            res_json = self.common_json_handler(\"Img2ImgWaterColorStyle\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def high_aes_smart_drawing_v2(self, form):\n        try:\n            res_json = self.common_json_handler(\"HighAesSmartDrawing\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def jpcartoon_cut(self, form):\n        try:\n            res_json = self.common_handler(\"JPCartoonCut\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def img2img_inpainting(self, form):\n        try:\n            res_json = self.common_json_handler(\"Img2ImgInpainting\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def img2img_inpainting_edit(self, form):\n        try:\n            res_json = self.common_json_handler(\"Img2ImgInpaintingEdit\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def img2img_outpainting(self, form):\n        try:\n            res_json = self.common_json_handler(\"Img2ImgOutpainting\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def jpcartoon(self, form):\n        try:\n            res_json = self.common_handler(\"JPCartoon\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def id_card(self, form):\n        try:\n            res_json = self.common_handler(\"IDCard\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def high_aes_smart_drawing(self, form):\n        try:\n            res_json = self.common_json_handler(\"HighAesSmartDrawing\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def face_swap(self, form):\n        try:\n            res_json = self.common_handler(\"FaceSwap\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def face_swap_v2(self, form):\n        try:\n            res_json = self.common_json_handler(\"FaceSwapV2\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def faceswap_ai(self, form):\n        try:\n            res_json = self.common_json_handler(\"FaceswapAI\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def ocr_normal(self, form):\n        try:\n            res_json = self.common_handler(\"OCRNormal\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def bank_card(self, form):\n        try:\n            res_json = self.common_handler(\"BankCard\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def human_segment(self, form):\n        try:\n            res_json = self.common_handler(\"HumanSegment\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def general_segment(self, form):\n        try:\n            res_json = self.common_handler(\"GeneralSegment\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def enhance_photo(self, form):\n        try:\n            res_json = self.common_handler(\"EnhancePhoto\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def convert_photo(self, form):\n        try:\n            res_json = self.common_handler(\"ConvertPhoto\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def convert_photo_v2(self, form):\n        try:\n            res_json = self.common_json_handler(\"ConvertPhotoV2\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def cert_h5_config_init(self, form):\n        try:\n            res_json = self.common_json_handler(\"CertH5ConfigInit\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def cert_h5_token(self, form):\n        try:\n            res_json = self.common_json_handler(\"CertH5Token\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def video_scene_detect(self, form):\n        try:\n            res_json = self.common_handler(\"VideoSceneDetect\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def over_resolution(self, form):\n        try:\n            res_json = self.common_handler(\"OverResolution\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def goods_segment(self, form):\n        try:\n            res_json = self.common_handler(\"GoodsSegment\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def image_outpaint(self, form):\n        try:\n            res_json = self.common_handler(\"ImageOutpaint\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def image_inpaint(self, form):\n        try:\n            res_json = self.common_handler(\"ImageInpaint\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def image_cut(self, form):\n        try:\n            res_json = self.common_handler(\"ImageCut\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def entity_detect(self, form):\n        try:\n            res_json = self.common_handler(\"EntityDetect\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def goods_detect(self, form):\n        try:\n            res_json = self.common_handler(\"GoodsDetect\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def video_summarization_submit_task(self, form):\n        try:\n            res_json = self.common_handler(\n                \"VideoSummarizationSubmitTask\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def video_summarization_query_task(self, params):\n        try:\n            res_json = self.common_get_handler(\n                \"VideoSummarizationQueryTask\", params)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def video_over_resolution_submit_task(self, form):\n        try:\n            res_json = self.common_handler(\n                \"VideoOverResolutionSubmitTask\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def video_over_resolution_query_task(self, params):\n        try:\n            res_json = self.common_get_handler(\n                \"VideoOverResolutionQueryTask\", params)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def video_retargeting_submit_task(self, form):\n        try:\n            res_json = self.common_handler(\n                \"VideoRetargetingSubmitTask\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def video_retargeting_query_task(self, params):\n        try:\n            res_json = self.common_get_handler(\n                \"VideoRetargetingQueryTask\", params)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def video_inpaint_submit_task(self, form):\n        try:\n            res_json = self.common_handler(\n                \"VideoInpaintSubmitTask\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def video_inpaint_query_task(self, params):\n        try:\n            res_json = self.common_get_handler(\n                \"VideoInpaintQueryTask\", params)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def car_plate_detection(self, form):\n        try:\n            res_json = self.common_handler(\"CarPlateDetection\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def distortion_free(self, form):\n        try:\n            res_json = self.common_handler(\"DistortionFree\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def stretch_recovery(self, form):\n        try:\n            res_json = self.common_handler(\"StretchRecovery\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def image_flow(self, form):\n        try:\n            res_json = self.common_handler(\"ImageFlow\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def image_score(self, form):\n        try:\n            res_json = self.common_handler(\"ImageScore\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def poem_material(self, form):\n        try:\n            res_json = self.common_handler(\"PoemMaterial\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def emoticon_edit(self, form):\n        try:\n            res_json = self.common_handler(\"EmoticonEdit\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def eye_close2open(self, form):\n        try:\n            res_json = self.common_handler(\"EyeClose2Open\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def car_segment(self, form):\n        try:\n            res_json = self.common_handler(\"CarSegment\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def car_detection(self, form):\n        try:\n            res_json = self.common_handler(\"CarDetection\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def sky_segment(self, form):\n        try:\n            res_json = self.common_handler(\"SkySegment\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def image_search_image_add(self, form):\n        try:\n            res_json = self.common_handler(\"ImageSearchImageAdd\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def image_search_image_delete(self, form):\n        try:\n            res_json = self.common_handler(\"ImageSearchImageDelete\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def image_search_image_search(self, form):\n        try:\n            res_json = self.common_handler(\"ImageSearchImageSearch\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def product_search_add_image(self, params):\n        try:\n            res_json = self.json(\"ProductSearchAddImage\", [], json.dumps(params))\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def product_search_delete_image(self, params):\n        try:\n            res_json = self.json(\"ProductSearchDeleteImage\", [], json.dumps(params))\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def product_search_search_image(self, params):\n        try:\n            res_json = self.json(\"ProductSearchSearchImage\", [], json.dumps(params))\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def clue_license(self, form):\n        try:\n            res_json = self.common_handler(\"ClueLicense\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def driving_license(self, form):\n        try:\n            res_json = self.common_handler(\"DrivingLicense\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def vehicle_license(self, form):\n        try:\n            res_json = self.common_handler(\"VehicleLicense\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def taxi_invoice(self, form):\n        try:\n            res_json = self.common_handler(\"TaxiInvoice\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def train_ticket(self, form):\n        try:\n            res_json = self.common_handler(\"TrainTicket\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def flight_invoice(self, form):\n        try:\n            res_json = self.common_handler(\"FlightInvoice\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def vat_invoice(self, form):\n        try:\n            res_json = self.common_handler(\"VatInvoice\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def quota_invoice(self, form):\n        try:\n            res_json = self.common_handler(\"QuotaInvoice\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def hair_style(self, form):\n        try:\n            res_json = self.common_handler(\"HairStyle\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def hair_style_v2(self, form):\n        try:\n            res_json = self.common_json_handler(\"HairStyleV2\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def face_pretty(self, form):\n        try:\n            res_json = self.common_handler(\"FacePretty\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def image_animation(self, form):\n        try:\n            res_json = self.common_handler(\"ImageAnimation\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def cover_video(self, form):\n        try:\n            res_json = self.common_handler(\"CoverVideo\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def dolly_zoom(self, form):\n        try:\n            res_json = self.common_handler(\"DollyZoom\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def img2video3d(self, form):\n        try:\n            res_json = self.common_json_handler(\"Img2Video3D\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def ai_gufeng(self, form):\n        try:\n            res_json = self.common_json_handler(\"AIGufeng\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def potrait_effect(self, form):\n        try:\n            res_json = self.common_handler(\"PotraitEffect\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def image_style_conversion(self, form):\n        try:\n            res_json = self.common_handler(\"ImageStyleConversion\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def three_d_game_cartoon(self, form):\n        try:\n            res_json = self.common_handler(\"3DGameCartoon\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def hair_segment(self, form):\n        try:\n            res_json = self.common_handler(\"HairSegment\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def ocr_seal(self, form):\n        try:\n            res_json = self.common_handler(\"OcrSeal\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def ocr_pass_invoice(self, form):\n        try:\n            res_json = self.common_handler(\"OcrPassInvoice\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def ocr_trade(self, form):\n        try:\n            res_json = self.common_handler(\"OCRTrade\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def ocr_ruanzhu(self, form):\n        try:\n            res_json = self.common_handler(\"OCRRuanzhu\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def ocr_cosmetic_product(self, form):\n        try:\n            res_json = self.common_handler(\"OCRCosmeticProduct\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def ocr_pdf(self, form):\n        try:\n            res_json = self.common_handler(\"OCRPdf\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def ocr_table(self, form):\n        try:\n            res_json = self.common_handler(\"OCRTable\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def video_cover_selection(self, form):\n        try:\n            res_json = self.common_handler(\"VideoCoverSelection\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def video_highlight_extraction_submit_task(self, form):\n        try:\n            res_json = self.common_handler(\n                \"VideoHighlightExtractionSubmitTask\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def video_highlight_extraction_query_task(self, params):\n        try:\n            res_json = self.common_get_handler(\n                \"VideoHighlightExtractionQueryTask\", params)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def cert_token(self, form):\n        try:\n            res_json = self.common_json_handler(\"CertToken\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def cert_verify_query(self, form):\n        try:\n            res_json = self.common_json_handler(\"CertVerifyQuery\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def t2i_ldm(self, form):\n        try:\n            res_json = self.common_json_handler(\"T2ILDM\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def img2img_style(self, form):\n        try:\n            res_json = self.common_json_handler(\"Img2ImgStyle\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def img2img_anime(self, form):\n        try:\n            res_json = self.common_json_handler(\"Img2ImgAnime\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def ocr_api(self, action, form):\n        try:\n            res_json = self.common_handler(action, form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n        \n    def ocr_async_api(self, action, form):\n        try:\n            res_json = self.common_json_handler(action, form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def image_score_v2(self, body):\n        try:\n            res_json = self.common_json_handler(\"ImageScoreV2\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def enhance_photo_v2(self, body):\n        try:\n            res_json = self.common_json_handler(\"EnhancePhotoV2\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def over_resolution_v2(self, body):\n        try:\n            res_json = self.common_json_handler(\"OverResolutionV2\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def video_over_resolution_submit_task_v2(self, body):\n        try:\n            res_json = self.common_json_handler(\"VideoOverResolutionSubmitTaskV2\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def video_over_resolution_get_result_v2(self, body):\n        try:\n            res_json = self.common_json_handler(\"VideoOverResolutionQueryTaskV2\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def image_correction(self, body):\n        try:\n            res_json = self.common_json_handler(\"ImageCorrection\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def all_age_generation(self, body):\n        try:\n            res_json = self.common_json_handler(\"AllAgeGeneration\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def body_detection(self, body):\n        try:\n            res_json = self.common_json_handler(\"BodyDetection\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def face_fusion_movie_submit_task(self, body):\n        try:\n            res_json = self.common_json_handler(\"FaceFusionMovieSubmitTask\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def face_fusion_movie_get_result(self, body):\n        try:\n            res_json = self.common_json_handler(\"FaceFusionMovieGetResult\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def face_fusion_movie(self, body):\n        try:\n            res_json = self.common_json_handler(\"FaceFusionMovie\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def tupo_cartoon(self, body):\n        try:\n            res_json = self.common_json_handler(\"TupoCartoon\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def lens_vida_video_submit_task_v2(self, body):\n        try:\n            res_json = self.common_json_handler(\"LensVidaVideoSubmitTaskV2\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def lens_vida_video_get_result_v2(self, body):\n        try:\n            res_json = self.common_json_handler(\"LensVidaVideoGetResultV2\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def cert_src_face_comp(self, body):\n        try:\n            res_json = self.common_json_handler(\"CertSrcFaceComp\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def cert_config_init(self, form):\n        try:\n            res_json = self.common_json_handler(\"CertConfigInit\", form)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def cert_config_get(self, body):\n        try:\n            res_json = self.common_json_handler(\"CertConfigGet\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def face_compare(self, body):\n        try:\n            res_json = self.common_json_handler(\"FaceCompare\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def still_liveness_img(self, body):\n        try:\n            res_json = self.common_json_handler(\"StillLivenessImg\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def emotion_portrait(self, body):\n        try:\n            res_json = self.common_json_handler(\"EmotionPortrait\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def cert_auth(self, body):\n        try:\n            res_json = self.common_json_handler(\"CertAuth\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def cert_verify(self, body):\n        try:\n            res_json = self.common_json_handler(\"CertVerify\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    def set_api_info(self, action, version):\n        self.api_info[action] = ApiInfo(\"POST\", \"/\", {\"Action\": action, \"Version\": version}, {}, {})"
  },
  {
    "path": "volcengine/visual/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/vms/VmsService.py",
    "content": "# coding:utf-8\nimport json\nimport threading\n\nimport redo\n\nfrom retry import retry\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.base.Service import Service\nfrom volcengine.Policy import *\nfrom requests import delete, exceptions\n\nSERVICE_VERSION = \"2022-01-01\"\n\n\nclass VmsService(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(VmsService, \"_instance\"):\n            with VmsService._instance_lock:\n                if not hasattr(VmsService, \"_instance\"):\n                    VmsService._instance = object.__new__(cls)\n        return VmsService._instance\n\n    def __init__(self, region='cn-north-1'):\n        self.service_info = VmsService.get_service_info(region)\n        self.api_info = VmsService.get_api_info()\n        self.domain_cache = {}\n        self.fallback_domain_weights = {}\n        self.update_interval = 10\n        self.lock = threading.Lock()\n        super(VmsService, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info(region):\n        service_info_map = {\n            'cn-north-1': ServiceInfo(\"cloud-vms.volcengineapi.com\", {'Accept': 'application/json'},\n                                      Credentials('', '', 'vms', 'cn-north-1'), 10, 10),\n        }\n        service_info = service_info_map.get(region, None)\n        if not service_info:\n            raise Exception('Cant find the region, please check it carefully')\n\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\n            \"BindAXB\": ApiInfo(\"POST\", \"/\", {\"Action\": \"BindAXB\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"SelectNumberAndBindAXB\": ApiInfo(\"POST\", \"/\",\n                                              {\"Action\": \"SelectNumberAndBindAXB\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"UnbindAXB\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UnbindAXB\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"QuerySubscription\": ApiInfo(\"POST\", \"/\",\n                                         {\"Action\": \"QuerySubscription\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"QuerySubscriptionForList\": ApiInfo(\"POST\", \"/\",\n                                                {\"Action\": \"QuerySubscriptionForList\", \"Version\": SERVICE_VERSION}, {},\n                                                {}),\n            \"UpgradeAXToAXB\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpgradeAXToAXB\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"UpdateAXB\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateAXB\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"BindAXN\": ApiInfo(\"POST\", \"/\", {\"Action\": \"BindAXN\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"UpdateAXN\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateAXN\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"UnbindAXN\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UnbindAXN\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"SelectNumberAndBindAXN\": ApiInfo(\"POST\", \"/\",\n                                              {\"Action\": \"SelectNumberAndBindAXN\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"Click2Call\": ApiInfo(\"POST\", \"/\", {\"Action\": \"Click2Call\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"CancelClick2Call\": ApiInfo(\"POST\", \"/\",\n                                        {\"Action\": \"CancelClick2Call\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"Click2CallLite\": ApiInfo(\"POST\", \"/\", {\"Action\": \"Click2CallLite\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"BindAXNE\": ApiInfo(\"POST\", \"/\", {\"Action\": \"BindAXNE\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"UnbindAXNE\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UnbindAXNE\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"UpdateAXNE\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateAXNE\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"BindAXBForAXNE\": ApiInfo(\"POST\", \"/\", {\"Action\": \"BindAXBForAXNE\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"BindAXYB\": ApiInfo(\"POST\", \"/\", {\"Action\": \"BindAXYB\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"BindYBForAXYB\": ApiInfo(\"POST\", \"/\", {\"Action\": \"BindYBForAXYB\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"UpdateAXYB\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateAXYB\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"UnbindAXYB\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UnbindAXYB\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"BindAXG\": ApiInfo(\"POST\", \"/\", {\"Action\": \"BindAXG\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"UnbindAXG\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UnbindAXG\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"UpdateAXG\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateAXG\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"CreateAXGGroup\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateAXGGroup\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"UpdateAXGGroup\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateAXGGroup\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"DeleteAXGGroup\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteAXGGroup\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"RegisterIndustrialId\": ApiInfo(\"POST\", \"/\", {\"Action\": \"RegisterIndustrialId\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"RouteAAuth\": ApiInfo(\"POST\", \"/\", {\"Action\": \"RouteAAuth\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"NumberPoolList\": ApiInfo(\"POST\", \"/\", {\"Action\": \"NumberPoolList\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"NumberList\": ApiInfo(\"GET\", \"/\", {\"Action\": \"NumberList\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"CreateNumberPool\": ApiInfo(\"POST\", \"/\",\n                                        {\"Action\": \"CreateNumberPool\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"UpdateNumberPool\": ApiInfo(\"POST\", \"/\",\n                                        {\"Action\": \"UpdateNumberPool\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"EnableOrDisableNumber\": ApiInfo(\"POST\", \"/\",\n                                             {\"Action\": \"EnableOrDisableNumber\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"SelectNumber\": ApiInfo(\"GET\", \"/\", {\"Action\": \"SelectNumber\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"QueryCanCall\": ApiInfo(\"POST\", \"/\", {\"Action\": \"QueryCanCall\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"QueryCallRecordMsg\": ApiInfo(\"POST\", \"/\", {\"Action\": \"QueryCallRecordMsg\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"QueryAudioRecordFileUrl\": ApiInfo(\"POST\", \"/\",\n                                               {\"Action\": \"QueryAudioRecordFileUrl\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"QueryAudioRecordToTextFileUrl\": ApiInfo(\"POST\", \"/\",\n                                                     {\"Action\": \"QueryAudioRecordToTextFileUrl\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"CreateTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateTask\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"BatchAppend\": ApiInfo(\"POST\", \"/\", {\"Action\": \"BatchAppend\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"PauseTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"PauseTask\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"ResumeTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ResumeTask\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"StopTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"StopTask\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"UpdateTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateTask\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"SingleBatchAppend\": ApiInfo(\"POST\", \"/\", {\"Action\": \"SingleBatchAppend\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"SingleInfo\": ApiInfo(\"GET\", \"/\", {\"Action\": \"SingleInfo\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"SingleCancel\": ApiInfo(\"GET\", \"/\", {\"Action\": \"SingleCancel\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"FetchResource\": ApiInfo(\"POST\", \"/\", {\"Action\": \"FetchResource\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"OpenCreateTts\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OpenCreateTts\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"OpenDeleteResource\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OpenDeleteResource\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"GetResourceUploadUrl\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetResourceUploadUrl\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"CommitResourceUpload\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CommitResourceUpload\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"OpenUpdateResource\": ApiInfo(\"POST\", \"/\", {\"Action\": \"OpenUpdateResource\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"QueryUsableResource\": ApiInfo(\"POST\", \"/\", {\"Action\": \"QueryUsableResource\", \"Version\": SERVICE_VERSION}, {}, {}),\n            \"QueryOpenGetResource\": ApiInfo(\"POST\", \"/\", {\"Action\": \"QueryOpenGetResource\", \"Version\": SERVICE_VERSION}, {}, {}),\n        }\n        return api_info\n\n    def common_handler(self, api, form):\n        params = dict()\n        try:\n            res = self.post(api, params, form)\n            res_json = json.loads(res)\n            return res_json\n        except Exception as e:\n            res = str(e)\n            try:\n                res_json = json.loads(res)\n                return res_json\n            except:\n                raise Exception(str(e))\n\n    def do_query_handler(self, api, params):\n        try:\n            res = self.get(api, params)\n            return json.loads(res)\n        except Exception as e:\n            res = str(e)\n            try:\n                res_json = json.loads(res)\n                return res_json\n            except:\n                raise Exception(str(e))\n\n    def do_json_handler(self, api, body, params=dict()):\n        try:\n            res = self.json(api, params, json.dumps(body))\n            return json.loads(res)\n        except Exception as e:\n            res = str(e)\n            try:\n                res_json = json.loads(res)\n                return res_json\n            except:\n                raise Exception(str(e))\n\n    def do_post_handler(self, api, form, params=dict()):\n        try:\n            res = self.post(api, params, form)\n            return json.loads(res)\n        except Exception as e:\n            res = str(e)\n            try:\n                res_json = json.loads(res)\n                return res_json\n            except:\n                raise Exception(str(e))\n\n\n    @retry(tries=2, delay=0)\n    def bind_axb(self, form):\n        try:\n            return self.common_handler(\"BindAXB\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def select_number_and_bind_axb(self, form):\n        try:\n            return self.common_handler(\"SelectNumberAndBindAXB\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def unbind_axb(self, form):\n        try:\n            return self.common_handler(\"UnbindAXB\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def query_subscription(self, form):\n        try:\n            return self.common_handler(\"QuerySubscription\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def query_subscription_for_list(self, form):\n        try:\n            return self.common_handler(\"QuerySubscriptionForList\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def upgrade_ax_to_axb(self, form):\n        try:\n            return self.common_handler(\"UpgradeAXToAXB\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def update_axb(self, form):\n        try:\n            return self.common_handler(\"UpdateAXB\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def bind_axn(self, form):\n        try:\n            return self.common_handler(\"BindAXN\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def update_axn(self, form):\n        try:\n            return self.common_handler(\"UpdateAXN\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def unbind_axn(self, form):\n        try:\n            return self.common_handler(\"UnbindAXN\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def select_number_and_bind_axn(self, form):\n        try:\n            return self.common_handler(\"SelectNumberAndBindAXN\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def click2_call(self, form):\n        try:\n            return self.common_handler(\"Click2Call\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def cancel_click2_call(self, form):\n        try:\n            return self.common_handler(\"CancelClick2Call\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def click2_call_lite(self, form):\n        try:\n            return self.common_handler(\"Click2CallLite\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def bind_axne(self, form):\n        try:\n            return self.common_handler(\"BindAXNE\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def unbind_axne(self, form):\n        try:\n            return self.common_handler(\"UnbindAXNE\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def update_axne(self, form):\n        try:\n            return self.common_handler(\"UpdateAXNE\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def bind_axb_for_axne(self, form):\n        try:\n            return self.common_handler(\"BindAXBForAXNE\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def bind_axyb(self, form):\n        try:\n            return self.common_handler(\"BindAXYB\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def bind_yb_for_axyb(self, form):\n        try:\n            return self.common_handler(\"BindYBForAXYB\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def update_axyb(self, form):\n        try:\n            return self.common_handler(\"UpdateAXYB\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def unbind_axyb(self, form):\n        try:\n            return self.common_handler(\"UnbindAXYB\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def bind_axg(self, body):\n        try:\n            res_json = self.do_json_handler(\"BindAXG\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def unbind_axg(self, body):\n        try:\n            res_json = self.do_json_handler(\"UnbindAXG\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def update_axg(self, body):\n        try:\n            res_json = self.do_json_handler(\"UpdateAXG\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def create_axg_group(self, body):\n        try:\n            res_json = self.do_json_handler(\"CreateAXGGroup\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def update_axg_group(self, body):\n        try:\n            res_json = self.do_json_handler(\"UpdateAXGGroup\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def delete_axg_group(self, body):\n        try:\n            res_json = self.do_json_handler(\"DeleteAXGGroup\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def register_industrial_id(self, body):\n        try:\n            res_json = self.do_json_handler(\"RegisterIndustrialId\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def route_a_auth(self, form):\n        try:\n            return self.common_handler(\"RouteAAuth\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def number_pool_list(self, form):\n        try:\n            return self.common_handler(\"NumberPoolList\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def number_list(self, params):\n        try:\n            return self.do_query_handler(\"NumberList\", params)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def create_number_pool(self, form):\n        try:\n            return self.common_handler(\"CreateNumberPool\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def update_number_pool(self, form):\n        try:\n            return self.common_handler(\"UpdateNumberPool\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def enable_or_disable_number(self, form):\n        try:\n            return self.common_handler(\"EnableOrDisableNumber\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def select_number(self, params):\n        try:\n            return self.do_query_handler(\"SelectNumber\", params)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def query_call_call(self, form):\n        try:\n            return self.common_handler(\"QueryCanCall\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def query_call_record_msg(self, form):\n        try:\n            return self.common_handler(\"QueryCallRecordMsg\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def query_audio_record_file_url(self, form):\n        try:\n            return self.common_handler(\"QueryAudioRecordFileUrl\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @retry(tries=2, delay=0)\n    def query_audio_record_to_text_file_url(self, form):\n        try:\n            return self.common_handler(\"QueryAudioRecordToTextFileUrl\", form)\n        except Exception as e:\n            raise Exception(str(e))\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def create_task(self, body):\n        try:\n            res_json = self.do_json_handler(\"CreateTask\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def batch_append_task(self, body):\n        try:\n            res_json = self.do_json_handler(\"BatchAppend\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def update_task(self, body):\n        try:\n            res_json = self.do_json_handler(\"UpdateTask\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def pause_task(self, params):\n        try:\n            res_json = self.do_json_handler(\"PauseTask\", dict(), params)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def resume_task(self, params):\n        try:\n            res_json = self.do_json_handler(\"ResumeTask\", dict(), params)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def stop_task(self, params):\n        try:\n            res_json = self.do_json_handler(\"StopTask\", dict(), params)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def single_batch_append(self, body):\n        try:\n            res_json = self.do_json_handler(\"SingleBatchAppend\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def single_info(self, params):\n        try:\n            res_json = self.do_query_handler(\"SingleInfo\", params)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def single_cancel(self, params):\n        try:\n            res_json = self.do_query_handler(\"SingleCancel\", params)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def fetch_resource(self, body):\n        try:\n            res_json = self.do_json_handler(\"FetchResource\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def create_tts(self, body):\n        try:\n            res_json = self.do_json_handler(\"OpenCreateTts\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def delete_resource(self, params):\n        try:\n            res_json = self.do_json_handler(\"OpenDeleteResource\", dict(), params)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def get_resource_upload_url(self, body):\n        try:\n            res_json = self.do_json_handler(\"GetResourceUploadUrl\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def commit_resource_upload(self, body):\n        try:\n            res_json = self.do_json_handler(\"CommitResourceUpload\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def open_update_resource(self, params):\n        try:\n            res_json = self.do_post_handler(\"OpenUpdateResource\", {}, params)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def query_usable_resource(self, params):\n        try:\n            res_json = self.do_post_handler(\"QueryUsableResource\", {}, params)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n    @redo.retriable(sleeptime=0.1, jitter=0.01, attempts=2,\n                    retry_exceptions=(exceptions.ConnectionError, exceptions.ConnectTimeout))\n    def query_open_get_resource(self, body):\n        try:\n            res_json = self.do_json_handler(\"QueryOpenGetResource\", body)\n            return res_json\n        except Exception as e:\n            raise Exception(str(e))\n\n"
  },
  {
    "path": "volcengine/vms/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/vod/VodService.py",
    "content": "# coding:utf-8\n# Code generated by protoc-gen-volcengine-sdk\n# source: VodService\n# DO NOT EDIT!\nfrom __future__ import print_function\nfrom volcengine.Policy import *\nfrom google.protobuf.json_format import *\nfrom volcengine.vod.VodServiceConfig import VodServiceConfig\nfrom retry import retry\nfrom zlib import crc32\nimport os\nimport sys\nimport time\nimport datetime\nimport volcengine.vod\nfrom volcengine.const.Const import FILE_TYPE_OBJECT\nfrom volcengine.util.Util import Util\nfrom volcengine.vod.helper.FileSectionReader import FileSectionReader\nfrom volcengine.vod.models.request.request_vod_pb2 import *\nfrom volcengine.vod.models.response.response_vod_pb2 import *\n\nMinChunkSize = 1024 * 1024 * 20\nLargeFileSize = 1024 * 1024 * 1024\n\n\n#\n# Generated from protobuf service <code>VodService</code>\n#\nclass VodService(VodServiceConfig):\n\n    def get_private_drm_play_auth_token(self, request, expire):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            if expire > 0:\n                params['X-Expires'] = str(expire)\n            data = self.get_sign_url('GetPrivateDrmPlayAuth', params)\n            return data\n        except Exception as Argument:\n            raise Argument\n\n    def create_hls_drm_auth_token(self, auth_algorithm, expire_seconds):\n        try:\n            if expire_seconds == 0:\n                raise Exception(\"invalid expire\")\n            deadline = int(time.mktime(datetime.datetime.now().timetuple())) + expire_seconds\n            deadTime = datetime.datetime.utcfromtimestamp(deadline).strftime(\"%Y%m%dT%H%M%SZ\")\n            if sys.version_info[0] == 3:\n                kDate = Util.hmac_sha256(bytes(self.service_info.credentials.sk, encoding='utf-8'), deadTime)\n            else:\n                kDate = Util.hmac_sha256(bytes(self.service_info.credentials.sk.encode('utf-8')), deadTime)\n            kRegion = Util.hmac_sha256(kDate, self.service_info.credentials.region)\n            kService = Util.hmac_sha256(kRegion, 'vod')\n            kCredentials = Util.hmac_sha256(kService, 'request')\n            key = Util.to_hex(kCredentials)\n            signDataString = '&'.join([auth_algorithm, '2.0', str(deadline)])\n            if auth_algorithm == 'HMAC-SHA1':\n                if sys.version_info[0] == 3:\n                    signBytes = Util.hmac_sha1(bytes(key, encoding='utf-8'), signDataString)\n                else:\n                    signBytes = Util.hmac_sha1(bytes(key.encode('utf-8')), signDataString)\n            else:\n                raise Exception('invalid authAlgorithm')\n            sign = base64.b64encode(signBytes).decode('utf-8')\n            token = ':'.join([auth_algorithm, '2.0', str(deadline), self.service_info.credentials.ak, sign])\n            params = dict()\n            params['DrmAuthToken'] = token\n            params['X-Expires'] = str(expire_seconds)\n            getAuth = self.get_sign_url(\"GetHlsDecryptionKey\", params)\n            return getAuth\n        except Exception as e:\n            raise e\n\n    def get_sha1_hls_drm_auth_token(self, expire_seconds):\n        try:\n            return self.create_hls_drm_auth_token('HMAC-SHA1', expire_seconds)\n        except Exception as Argument:\n            raise Argument\n\n    def get_play_auth_token(self, request, expire):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            if expire > 0:\n                params['X-Expires'] = str(expire)\n            token = self.get_sign_url('GetPlayInfo', params)\n            ret = {'TokenVersion': 'V2', 'GetPlayInfoToken': token}\n            data = json.dumps(ret)\n        except Exception as Argument:\n            raise Argument\n        else:\n            if sys.version_info[0] == 3:\n                return base64.b64encode(data.encode('utf-8')).decode('utf-8')\n            else:\n                return base64.b64encode(data.decode('utf-8'))\n\n    def get_subtitle_auth_token(self, request, expire):\n        try:\n            if request.Vid == \"\":\n                raise Exception(\"Vid is None\")\n            params = {\"Vid\": request.Vid}\n            params[\"Status\"] = \"Published\"\n            if expire > 0:\n                params['X-Expires'] = str(expire)\n            token = self.get_sign_url('GetSubtitleInfoList', params)\n            ret = {'GetSubtitleAuthToken': token}\n            data = json.dumps(ret)\n        except Exception as Argument:\n            raise Argument\n        else:\n            if sys.version_info[0] == 3:\n                return base64.b64encode(data.encode('utf-8')).decode('utf-8')\n            else:\n                return base64.b64encode(data.decode('utf-8'))\n\n    def upload_media(self, request):\n        file_path = request.FilePath\n        \n        if request.SupportParseManifest and file_path.lower().endswith('.m3u8'):\n            # Parse m3u8 manifest and upload segments\n            segments = self.parse_m3u8_manifest(request.SpaceName, file_path)\n            self.upload_m3u8_segments(request, segments)\n        \n        oid, session_key, avg_speed = self.upload_tob(request.SpaceName, request.FilePath, \"\", request.FileName, \n                                                      request.FileExtension, request.StorageClass, request.ClientNetWorkMode, request.ClientIDCMode, request.UploadHostPrefer, request.ChunkSize)\n        req = VodCommitUploadInfoRequest()\n        req.SpaceName = request.SpaceName\n        req.SessionKey = session_key\n        req.Functions = request.Functions\n        req.CallbackArgs = request.CallbackArgs\n        req.ExpireTime = request.ExpireTime\n        resp = self.commit_upload_info(req)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.RequestId)\n            raise Exception(resp.ResponseMetadata.Error)\n        return resp\n\n    \n    def parse_m3u8_manifest(self, space_name, manifest_path):\n        # Recursively parse manifest and collect all segments\n        segments = []\n        seen_files = set()\n        \n        def parse(current_path, relative_path_prefix):\n            with open(current_path, 'r', encoding='utf-8') as f:\n                manifest_content = f.read()\n            \n            parse_req = VodParseUploadManifestRequest()\n            parse_req.SpaceName = space_name\n            parse_req.ManifestContent = manifest_content\n            parse_resp = self.parse_upload_manifest(parse_req)\n            if parse_resp.ResponseMetadata.Error.Code != '':\n                print(parse_resp.ResponseMetadata.RequestId)\n                raise Exception(parse_resp.ResponseMetadata.Error)\n            \n            manifest_dir = os.path.dirname(current_path)\n            if parse_resp.Result and parse_resp.Result.Data:\n                for segment in parse_resp.Result.Data.MediaSegments:\n                    segment_path = os.path.join(manifest_dir, segment)\n                    \n                    if segment_path in seen_files:\n                        continue\n                    seen_files.add(segment_path)\n                    \n                    segment_file_name = segment\n                    if relative_path_prefix:\n                        segment_file_name = os.path.join(relative_path_prefix, segment_file_name)\n                    \n                    if segment_path.lower().endswith('.m3u8'):\n                        sub_relative_path_prefix = os.path.dirname(segment_file_name)\n                        if sub_relative_path_prefix == '.':\n                            sub_relative_path_prefix = ''\n                        parse(segment_path, sub_relative_path_prefix)\n                    \n                    segments.append({\n                        'file_path': segment_path,\n                        'file_name': segment_file_name\n                    })\n        \n        parse(manifest_path, '')\n        return segments\n    \n    def upload_m3u8_segments(self, request, segments):\n        # Get path prefix\n        path_prefix = ''\n        if request.FileName:\n            path_prefix = os.path.dirname(request.FileName)\n            if path_prefix != '':\n                path_prefix += '/'\n\n        max_retries = 2\n        retry_delay = 1\n        # Upload each segment with retry\n        for segment in segments:\n            segment_file_path = segment['file_path']\n            segment_file_name = path_prefix + segment['file_name']\n            file_ext = os.path.splitext(segment_file_name)[1]\n            \n            last_exception = None\n            for attempt in range(max_retries + 1):\n                try:\n                    _, _, _ = self.upload_tob(\n                        request.SpaceName,\n                        segment_file_path,\n                        FILE_TYPE_OBJECT,\n                        segment_file_name,\n                        file_ext,\n                        request.StorageClass,\n                        request.ClientNetWorkMode,\n                        request.ClientIDCMode,\n                        request.UploadHostPrefer,\n                        request.ChunkSize\n                    )\n                    break\n                except Exception as e:\n                    last_exception = e\n                    if attempt < max_retries:\n                        print(f\"Upload segment {segment_file_name} failed (attempt {attempt + 1}/{max_retries + 1}), retrying... Error: {e}\")\n                        time.sleep(retry_delay)\n                    else:\n                        print(f\"Upload segment {segment_file_name} failed after {max_retries + 1} attempts. Error: {e}\")\n                        raise last_exception\n\n    def upload_tob(self, space_name, file_path, file_type, file_name, file_extension, storage_class, client_network_mode, client_idc_mode, upload_host_prefer, chunk_size):\n        if not os.path.isfile(file_path):\n            raise Exception(\"no such file on file path\")\n        if chunk_size < MinChunkSize:\n            chunk_size = MinChunkSize\n        file_size = os.path.getsize(file_path)\n        apply_req = VodApplyUploadInfoRequest()\n        apply_req.SpaceName = space_name\n        apply_req.FileSize = file_size\n        apply_req.FileType = file_type\n        apply_req.FileName = file_name\n        apply_req.FileExtension = file_extension\n        apply_req.StorageClass = storage_class\n        apply_req.ClientNetWorkMode = client_network_mode\n        apply_req.ClientIDCMode = client_idc_mode\n        apply_req.NeedFallback = True\n        apply_req.UploadHostPrefer = upload_host_prefer\n        resp = self.apply_upload_info(apply_req)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.RequestId)\n            raise Exception(resp.ResponseMetadata.Error)\n\n        vpc_upload_address = resp.Result.Data.VpcTosUploadAddress\n        if vpc_upload_address:\n            upload_address = resp.Result.Data.UploadAddress\n            oid = upload_address.StoreInfos[0].StoreUri\n            session_key = upload_address.SessionKey\n\n            start = time.time()\n            if vpc_upload_address.UploadMode != \"\":\n                self.vpc_upload(vpc_upload_address, file_path, file_size)\n                cost = (time.time() - start) * 1000\n                avg_speed = float(file_size) / float(cost)\n                return oid, session_key, avg_speed\n\n        # using candidate address first\n        candidate_upload_address = resp.Result.Data.CandidateUploadAddresses\n        all_upload_address = []\n        if candidate_upload_address:\n            all_upload_address.extend(candidate_upload_address.MainUploadAddresses)\n            all_upload_address.extend(candidate_upload_address.BackupUploadAddresses)\n            all_upload_address.extend(candidate_upload_address.FallbackUploadAddresses)\n\n        if len(all_upload_address) > 0:\n            file_size = os.path.getsize(file_path)\n            for i, upload_address in enumerate(all_upload_address):\n                if len(upload_address.UploadHosts) == 0 or len(upload_address.StoreInfos) == 0 or not \\\n                        upload_address.StoreInfos[0]:\n                    continue\n                tos_host = upload_address.UploadHosts[0]\n                oid = upload_address.StoreInfos[0].StoreUri\n                session_key = upload_address.SessionKey\n                auth = upload_address.StoreInfos[0].Auth\n                start = time.time()\n                try:\n                    if file_size < chunk_size:\n                        self.direct_upload(tos_host, oid, auth, file_path, storage_class)\n                    else:\n                        self.chunk_upload(file_path, tos_host, oid, auth, file_size, True, storage_class, chunk_size)\n                except Exception as e:\n                    print(\"upload failed, switch host to retry.. reason: {}\".format(e))\n                    continue\n                else:\n                    cost = (time.time() - start) * 1000\n                    avg_speed = float(file_size) / float(cost)\n                    return oid, session_key, avg_speed\n            raise Exception(\"upload failed\")\n        else:\n            upload_address = resp.Result.Data.UploadAddress\n            oid = upload_address.StoreInfos[0].StoreUri\n            session_key = upload_address.SessionKey\n            auth = upload_address.StoreInfos[0].Auth\n            host = upload_address.UploadHosts[0]\n            start = time.time()\n            file_size = os.path.getsize(file_path)\n            if file_size < chunk_size:\n                self.direct_upload(host, oid, auth, file_path, storage_class)\n            else:\n                self.chunk_upload(file_path, host, oid, auth, file_size, True, storage_class, chunk_size)\n            cost = (time.time() - start) * 1000\n            file_size = os.path.getsize(file_path)\n            avg_speed = float(file_size) / float(cost)\n            return oid, session_key, avg_speed\n\n    def vpc_upload(self, vpc_upload_address, file_path, file_size):\n        if vpc_upload_address.QuickCompleteMode == \"enable\":\n            return\n\n        if vpc_upload_address.UploadMode == \"direct\":\n            self.vpc_put(vpc_upload_address, file_path)\n        elif vpc_upload_address.UploadMode == \"part\":\n            self.vpc_part_upload(vpc_upload_address.PartUploadInfo, file_path, file_size)\n\n    def vpc_put(self, vpc_upload_address, file_path):\n        put_url = vpc_upload_address.PutUrl\n        put_headers = vpc_upload_address.PutUrlHeaders\n        with open(file_path, 'rb') as f:\n            resp = self.session.put(put_url, headers=put_headers, data=f)\n            if resp.status_code != 200:\n                log_id = resp.headers.get(\"x-tos-request-id\", \"\")\n                raise Exception(\"vpc put error, logId: {}\".format(log_id))\n\n    def vpc_part_put(self, put_url, content):\n        resp = self.session.put(put_url, data=content)\n        if resp.status_code != 200:\n            log_id = resp.headers.get(\"x-tos-request-id\", \"\")\n            raise Exception(\"vpc part put error, logId: {}\".format(log_id))\n\n        etag = resp.headers.get(\"ETag\", \"\")\n        return etag\n\n    def vpc_post(self, post_url, data, headers):\n        resp = self.session.post(post_url, data=data, headers=headers)\n        if resp.status_code != 200:\n            log_id = resp.headers.get(\"x-tos-request-id\", \"\")\n            raise Exception(\"vpc post error, logId: {}\".format(log_id))\n\n    def vpc_part_upload(self, part_upload_info, file_path, file_size):\n        chunk_size = part_upload_info.PartSize\n        total_num = file_size // chunk_size\n        if file_size % chunk_size == 0:\n            total_num -= 1\n        if len(part_upload_info.PartPutUrls) != total_num + 1:\n            raise Exception(\"mismatch part upload\")\n\n        offset = 0\n        etag_list = []\n        with open(file_path, 'rb') as f:\n            for i in range(0, total_num):\n                put_url = part_upload_info.PartPutUrls[i]\n                sr = FileSectionReader(f, chunk_size, init_offset=offset, can_reset=True)\n                etag = self.vpc_part_put(put_url, sr)\n                etag_list.append(etag)\n                offset += chunk_size\n\n            last_chunk_size = file_size - offset\n            put_url = part_upload_info.PartPutUrls[total_num]\n            sr = FileSectionReader(f, last_chunk_size, init_offset=offset, can_reset=True)\n            etag = self.vpc_part_put(put_url, sr)\n            etag_list.append(etag)\n\n        post_data = self.vpc_generate_body(etag_list)\n        self.vpc_post(part_upload_info.CompletePartUrl, post_data, part_upload_info.CompleteUrlHeaders)\n\n    def vpc_generate_body(self, etag_list):\n        if len(etag_list) == 0:\n            raise Exception('etag list empty')\n        s = []\n        for i in range(len(etag_list)):\n            s.append(\"{\" + '\"PartNumber\": {}, \"ETag\": {}'.format(i + 1, etag_list[i]) + \"}\")\n        comma = ','\n\n        return '{\"Parts\":[' + comma.join(s) + ']}'\n\n    @retry(tries=3, delay=1, backoff=2)\n    def direct_upload(self, host, oid, auth, file_path, storage_class):\n        with open(file_path, 'rb') as f:\n            data = f.read()\n            check_sum = crc32(data) & 0xFFFFFFFF\n        check_sum = \"%08x\" % check_sum\n        url = 'https://{}/{}'.format(host, oid)\n        headers = {'Content-CRC32': check_sum, 'Authorization': auth}\n\n        if storage_class == volcengine.vod.models.business.vod_upload_pb2.Archive:\n            headers['X-Upload-Storage-Class'] = 'archive'\n        if storage_class == volcengine.vod.models.business.vod_upload_pb2.IA:\n            headers['X-Upload-Storage-Class'] = 'ia'\n\n        upload_status, resp = self.put(url, file_path, headers)\n        resp_text = str(resp, encoding='utf8')\n        if not upload_status:\n            raise Exception(\"direct upload error: {}, logid: {}\".format(resp_text, headers[\"X-Tt-Logid\"]))\n        resp = json.loads(resp)\n        if resp.get('success') is None or resp['success'] != 0:\n            raise Exception(\"direct upload error: {}, logid: {}\".format(resp_text, headers[\"X-Tt-Logid\"]))\n\n    def chunk_upload(self, file_path, host, oid, auth, size, is_large_file, storage_class, chunk_size):\n        upload_id = self.init_upload_part(host, oid, auth, is_large_file, storage_class)\n        n = size // chunk_size\n        last_num = n - 1\n        parts = []\n        meta = {}\n        with open(file_path, 'rb') as f:\n            for i in range(0, last_num):\n                data = f.read(chunk_size)\n                part_number = i\n                if is_large_file:\n                    part_number = i + 1\n                part, payload = self.upload_part(host, oid, auth, upload_id, part_number, data, is_large_file,\n                                                                 storage_class)\n                if part_number == 1:\n                    meta = payload['meta']\n                parts.append(part)\n            data = f.read()\n            if is_large_file:\n                last_num = last_num + 1\n            part, payload = self.upload_part(host, oid, auth, upload_id, last_num, data, is_large_file, storage_class)\n            if last_num == 1:\n                meta = payload[\"meta\"]\n            parts.append(part)\n        return self.upload_merge_part(host, oid, auth, upload_id, parts, is_large_file, storage_class, meta)\n\n    @retry(tries=3, delay=1, backoff=2)\n    def init_upload_part(self, host, oid, auth, is_large_file, storage_class):\n        url = 'https://{}/{}?uploads'.format(host, oid)\n        headers = {'Authorization': auth}\n        if is_large_file:\n            headers['X-Storage-Mode'] = 'gateway'\n\n        if storage_class == volcengine.vod.models.business.vod_upload_pb2.Archive:\n            headers['X-Upload-Storage-Class'] = 'archive'\n        if storage_class == volcengine.vod.models.business.vod_upload_pb2.IA:\n            headers['X-Upload-Storage-Class'] = 'ia'\n\n        upload_status, resp = self.put_data(url, None, headers)\n        resp_text = str(resp, encoding='utf8')\n        if not upload_status:\n            raise Exception(\"init upload error: {}, logid: {}\".format(resp_text, headers[\"X-Tt-Logid\"]))\n        resp = json.loads(resp)\n        if resp.get('success') is None or resp['success'] != 0:\n            raise Exception(\"init upload error: {}, logid: {}\".format(resp_text, headers[\"X-Tt-Logid\"]))\n        return resp['payload']['uploadID']\n\n    @retry(tries=3, delay=1, backoff=2)\n    def upload_part(self, host, oid, auth, upload_id, part_number, data, is_large_file, storage_class):\n        url = 'https://{}/{}?partNumber={}&uploadID={}'.format(host, oid,\n                                                              part_number, upload_id)\n        check_sum = crc32(data) & 0xFFFFFFFF\n        check_sum = \"%08x\" % check_sum\n        headers = {'Content-CRC32': check_sum, 'Authorization': auth}\n        if is_large_file:\n            headers['X-Storage-Mode'] = 'gateway'\n\n        if storage_class == volcengine.vod.models.business.vod_upload_pb2.Archive:\n            headers['X-Upload-Storage-Class'] = 'archive'\n        if storage_class == volcengine.vod.models.business.vod_upload_pb2.IA:\n            headers['X-Upload-Storage-Class'] = 'ia'\n\n        upload_status, resp = self.put_data(url, data, headers)\n        resp_text = str(resp, encoding='utf8')\n        if not upload_status:\n            raise Exception(\"upload part error: {}, logid: {}\".format(resp_text, headers[\"X-Tt-Logid\"]))\n        resp = json.loads(resp)\n        if resp.get('success') is None or resp['success'] != 0:\n            raise Exception(\"upload part error: {}, logid: {}\".format(resp_text, headers[\"X-Tt-Logid\"]))\n        return check_sum, resp['payload']\n\n    @staticmethod\n    def generate_merge_body(check_sum_list):\n        if len(check_sum_list) == 0:\n            raise Exception('crc32 list empty')\n        s = []\n        for i in range(len(check_sum_list)):\n            s.append('{}:{}'.format(i, check_sum_list[i]))\n        comma = ','\n        return comma.join(s)\n\n    @retry(tries=3, delay=1, backoff=2)\n    def upload_merge_part(self, host, oid, auth, upload_id, check_sum_list, is_large_file, storage_class, meta):\n        object_content_type = ''\n        if (meta is not None) and (meta.get(\"ObjectContentType\") is not None):\n            object_content_type = meta['ObjectContentType']\n        url = 'https://{}/{}?uploadID={}&ObjectContentType={}'.format(host, oid, upload_id, object_content_type)\n        data = self.generate_merge_body(check_sum_list)\n        headers = {'Authorization': auth}\n        if is_large_file:\n            headers['X-Storage-Mode'] = 'gateway'\n\n        if storage_class == volcengine.vod.models.business.vod_upload_pb2.Archive:\n            headers['X-Upload-Storage-Class'] = 'archive'\n        if storage_class == volcengine.vod.models.business.vod_upload_pb2.IA:\n            headers['X-Upload-Storage-Class'] = 'ia'\n\n        upload_status, resp = self.put_data(url, data, headers)\n        resp_text = str(resp, encoding='utf8')\n        if not upload_status:\n            raise Exception(\"commit upload part error: {}, logid: {}\".format(resp_text, headers[\"X-Tt-Logid\"]))\n        resp = json.loads(resp)\n        if resp.get('success') is None or resp['success'] != 0:\n            raise Exception(\"commit upload part error: {}, logid: {}\".format(resp_text, headers[\"X-Tt-Logid\"]))\n\n    def get_upload_sts2_with_expired_time(self, expired_time):\n        actions = [\"vod:ApplyUploadInfo\", \"vod:CommitUploadInfo\"]\n        resources = []\n        statement = Statement.new_allow_statement(actions, resources)\n        inline_policy = Policy([statement])\n        return self.sign_sts2(inline_policy, expired_time)\n\n    def get_upload_sts2(self):\n        return self.get_upload_sts2_with_expired_time(60 * 60)\n\n    def upload_material(self, request):\n        oid, session_key, avg_speed = self.upload_tob(request.SpaceName, request.FilePath, request.FileType,\n                                                      request.FileName, request.FileExtension, 0, request.ClientNetWorkMode, request.ClientIDCMode, request.UploadHostPrefer, request.ChunkSize)\n\n        req = VodCommitUploadInfoRequest()\n        req.SpaceName = request.SpaceName\n        req.SessionKey = session_key\n        req.Functions = request.Functions\n        req.CallbackArgs = request.CallbackArgs\n\n        resp = self.commit_upload_info(req)\n        if resp.ResponseMetadata.Error.Code != '':\n            print(resp.ResponseMetadata.RequestId)\n            raise Exception(resp.ResponseMetadata.Error)\n        return resp\n\n    #\n    # SubmitDirectEditTaskAsync.\n    #\n    # @param request VodSubmitDirectEditTaskAsyncRequest\n    # @return VodSubmitDirectEditTaskAsyncResponse\n    # @raise Exception\n    def submit_direct_edit_task_async(self, request):\n\n        try:\n            params = MessageToDict(request, False, True)\n            params['EditParam'] = json.loads(request.EditParam)\n            res = self.json(\"SubmitDirectEditTaskAsync\", {}, json.dumps(params))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodSubmitDirectEditTaskAsyncResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return res\n\n    #\n    # SubmitDirectEditTaskSync.\n    #\n    # @param request VodSubmitDirectEditTaskSyncRequest\n    # @return VodSubmitDirectEditTaskSyncResponse\n    # @raise Exception\n    def submit_direct_edit_task_sync(self, request):\n\n        try:\n            params = MessageToDict(request, False, True)\n            params['EditParam'] = json.loads(request.EditParam)\n            res = self.json(\"SubmitDirectEditTaskSync\", {}, json.dumps(params))\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodSubmitDirectEditTaskSyncResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return res\n\n    #\n    # GetDirectEditResult.\n    #\n    # @param request VodGetDirectEditResultRequest\n    # @return VodGetDirectEditResultResponse\n    # @raise Exception\n    def get_direct_edit_result(self, request):\n        try:\n            jsonData = MessageToJson(request, False, True)\n            res = self.json(\"GetDirectEditResult\", {}, jsonData)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetDirectEditResultResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n\n            return res\n\n    #\n    # GetDirectEditProgress.\n    #\n    # @param request VodGetDirectEditProgressRequest\n    # @return VodGetDirectEditProgressResponse\n    # @raise Exception\n    def get_direct_edit_progress(self, request):\n\n        try:\n            params = MessageToDict(request, False, True)\n            if sys.version_info[0] == 3:\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetDirectEditProgress\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetDirectEditProgressResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return res\n\n    #\n    # CancelDirectEditTask.\n    #\n    # @param request VodCancelDirectEditTaskRequest\n    # @return VodCancelDirectEditTaskResponse\n    # @raise Exception\n    def cancel_direct_edit_task(self, request):\n        try:\n            jsonData = MessageToJson(request, False, True)\n            res = self.json(\"CancelDirectEditTask\", {}, jsonData)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodCancelDirectEditTaskResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error)\n        else:\n            return res\n    #\n    # AsyncVCreativeTask.\n    #\n    # @param request VodAsyncVCreativeTaskRequest\n    # @return VodAsyncVCreativeTaskResponse\n    # @raise Exception\n    def async_v_creative_task(self, request):\n        try:\n            jsonData = MessageToJson(request, False, True)\n            res = self.json(\"AsyncVCreativeTask\", {}, jsonData)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodAsyncVCreativeTaskResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error)\n        else:\n            return res\n    #\n    # GetVCreativeTaskResult.\n    #\n    # @param request VodGetVCreativeTaskResultRequest\n    # @return VodGetVCreativeTaskResultResponse\n    # @raise Exception\n    def get_v_creative_task_result(self, request):\n        try:\n            params = MessageToDict(request, False, True)\n            if sys.version_info[0] == 3:\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetVCreativeTaskResult\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetVCreativeTaskResultResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return res\n\n\n    #\n    # GetAllPlayInfo.\n    #\n    # @param request VodGetAllPlayInfoRequest\n    # @return VodGetAllPlayInfoResponse\n    # @raise Exception\n    def get_all_play_info(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetAllPlayInfo\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetAllPlayInfoResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetAllPlayInfoResponse(), True)\n\n    #\n    # GetPlayInfo.\n    #\n    # @param request VodGetPlayInfoRequest\n    # @return VodGetPlayInfoResponse\n    # @raise Exception\n    def get_play_info(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetPlayInfo\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetPlayInfoResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetPlayInfoResponse(), True)\n\n    #\n    # GetPrivateDrmPlayAuth.\n    #\n    # @param request VodGetPrivateDrmPlayAuthRequest\n    # @return VodGetPrivateDrmPlayAuthResponse\n    # @raise Exception\n    def get_private_drm_play_auth(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetPrivateDrmPlayAuth\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetPrivateDrmPlayAuthResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetPrivateDrmPlayAuthResponse(), True)\n\n    #\n    # GetHlsDecryptionKey.\n    #\n    # @param request VodGetHlsDecryptionKeyRequest\n    # @return VodGetHlsDecryptionKeyResponse\n    # @raise Exception\n    def get_hls_decryption_key(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetHlsDecryptionKey\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetHlsDecryptionKeyResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetHlsDecryptionKeyResponse(), True)\n\n    #\n    # CreateHlsDecryptionKey.\n    #\n    # @param request VodCreateHlsDecryptionKeyRequest\n    # @return VodCreateHlsDecryptionKeyResponse\n    # @raise Exception\n    def create_hls_decryption_key(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"CreateHlsDecryptionKey\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodCreateHlsDecryptionKeyResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodCreateHlsDecryptionKeyResponse(), True)\n\n    #\n    # GetPlayInfoWithLiveTimeShiftScene.\n    #\n    # @param request VodGetPlayInfoWithLiveTimeShiftSceneRequest\n    # @return VodGetPlayInfoWithLiveTimeShiftSceneResponse\n    # @raise Exception\n    def get_play_info_with_live_time_shift_scene(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetPlayInfoWithLiveTimeShiftScene\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetPlayInfoWithLiveTimeShiftSceneResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetPlayInfoWithLiveTimeShiftSceneResponse(), True)\n\n    #\n    # SubmitBlockObjectTasks.\n    #\n    # @param request VodSubmitBlockObjectTasksRequest\n    # @return VodSubmitBlockObjectTasksResponse\n    # @raise Exception\n    def submit_block_object_tasks(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.post(\"SubmitBlockObjectTasks\",{},params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodSubmitBlockObjectTasksResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodSubmitBlockObjectTasksResponse(), True)\n\n\n    #\n    # ListBlockObjectTasks.\n    #\n    # @param request VodListBlockObjectTasksRequest\n    # @return VodListBlockObjectTasksResponse\n    # @raise Exception\n    def list_block_object_tasks(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.post(\"ListBlockObjectTasks\",{},params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodListBlockObjectTasksResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodListBlockObjectTasksResponse(), True)\n\n\n    #\n    # UploadMediaByUrl.\n    #\n    # @param request VodUrlUploadRequest\n    # @return VodUrlUploadResponse\n    # @raise Exception\n    def upload_media_by_url(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.post(\"UploadMediaByUrl\",{},params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodUrlUploadResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodUrlUploadResponse(), True)\n\n\n    #\n    # QueryUploadTaskInfo.\n    #\n    # @param request VodQueryUploadTaskInfoRequest\n    # @return VodQueryUploadTaskInfoResponse\n    # @raise Exception\n    def query_upload_task_info(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"QueryUploadTaskInfo\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodQueryUploadTaskInfoResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodQueryUploadTaskInfoResponse(), True)\n\n    #\n    # ApplyUploadInfo.\n    #\n    # @param request VodApplyUploadInfoRequest\n    # @return VodApplyUploadInfoResponse\n    # @raise Exception\n    def apply_upload_info(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"ApplyUploadInfo\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodApplyUploadInfoResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodApplyUploadInfoResponse(), True)\n\n    #\n    # CommitUploadInfo.\n    #\n    # @param request VodCommitUploadInfoRequest\n    # @return VodCommitUploadInfoResponse\n    # @raise Exception\n    def commit_upload_info(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"CommitUploadInfo\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodCommitUploadInfoResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodCommitUploadInfoResponse(), True)\n\n    #\n    # ParseUploadManifest.\n    #\n    # @param request VodParseUploadManifestRequest\n    # @return VodParseUploadManifestResponse\n    # @raise Exception\n    def parse_upload_manifest(self, request):\n        try:\n            jsonData = MessageToJson(request, False, True)\n            res = self.json(\"ParseUploadManifest\",{},jsonData)\n        except Exception as Argument:\n            try:\n                ArgumentStr = Argument.args[0].decode(\"utf-8\")\n                resp = Parse(ArgumentStr, VodParseUploadManifestResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodParseUploadManifestResponse(), True)\n\n\n    #\n    # ListFileMetaInfosByFileNames.\n    #\n    # @param request VodListFileMetaInfosByFileNamesRequest\n    # @return VodListFileMetaInfosByFileNamesResponse\n    # @raise Exception\n    def list_file_meta_infos_by_file_names(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.post(\"ListFileMetaInfosByFileNames\",{},params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodListFileMetaInfosByFileNamesResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodListFileMetaInfosByFileNamesResponse(), True)\n\n\n    #\n    # UpdateMediaInfo.\n    #\n    # @param request VodUpdateMediaInfoRequest\n    # @return VodUpdateMediaInfoResponse\n    # @raise Exception\n    def update_media_info(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"UpdateMediaInfo\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodUpdateMediaInfoResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodUpdateMediaInfoResponse(), True)\n\n    #\n    # UpdateMediaPublishStatus.\n    #\n    # @param request VodUpdateMediaPublishStatusRequest\n    # @return VodUpdateMediaPublishStatusResponse\n    # @raise Exception\n    def update_media_publish_status(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"UpdateMediaPublishStatus\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodUpdateMediaPublishStatusResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodUpdateMediaPublishStatusResponse(), True)\n\n    #\n    # UpdateMediaStorageClass.\n    #\n    # @param request VodUpdateMediaStorageClassRequest\n    # @return VodUpdateMediaStorageClassResponse\n    # @raise Exception\n    def update_media_storage_class(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"UpdateMediaStorageClass\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodUpdateMediaStorageClassResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodUpdateMediaStorageClassResponse(), True)\n\n    #\n    # GetMediaInfos.\n    #\n    # @param request VodGetMediaInfosRequest\n    # @return VodGetMediaInfosResponse\n    # @raise Exception\n    def get_media_infos(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetMediaInfos\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetMediaInfosResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetMediaInfosResponse(), True)\n\n    #\n    # GetMediaInfos20230701.\n    #\n    # @param request VodGetMediaInfosRequest\n    # @return VodGetMediaInfosResponse\n    # @raise Exception\n    def get_media_infos20230701(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetMediaInfos20230701\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetMediaInfosResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetMediaInfosResponse(), True)\n\n    #\n    # GetRecommendedPoster.\n    #\n    # @param request VodGetRecommendedPosterRequest\n    # @return VodGetRecommendedPosterResponse\n    # @raise Exception\n    def get_recommended_poster(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetRecommendedPoster\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetRecommendedPosterResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetRecommendedPosterResponse(), True)\n\n    #\n    # DeleteMedia.\n    #\n    # @param request VodDeleteMediaRequest\n    # @return VodDeleteMediaResponse\n    # @raise Exception\n    def delete_media(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DeleteMedia\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDeleteMediaResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDeleteMediaResponse(), True)\n\n    #\n    # DeleteTranscodes.\n    #\n    # @param request VodDeleteTranscodesRequest\n    # @return VodDeleteTranscodesResponse\n    # @raise Exception\n    def delete_transcodes(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DeleteTranscodes\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDeleteTranscodesResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDeleteTranscodesResponse(), True)\n\n    #\n    # GetFileInfos.\n    #\n    # @param request VodGetFileInfosRequest\n    # @return VodGetFileInfosResponse\n    # @raise Exception\n    def get_file_infos(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetFileInfos\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetFileInfosResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetFileInfosResponse(), True)\n\n    #\n    # UpdateFileStorageClass.\n    #\n    # @param request VodUpdateFileStorageClassRequest\n    # @return VodUpdateFileStorageClassResponse\n    # @raise Exception\n    def update_file_storage_class(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.post(\"UpdateFileStorageClass\",{},params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodUpdateFileStorageClassResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodUpdateFileStorageClassResponse(), True)\n\n\n    #\n    # GetInnerAuditURLs.\n    #\n    # @param request VodGetInnerAuditURLsRequest\n    # @return VodGetInnerAuditURLsResponse\n    # @raise Exception\n    def get_inner_audit_u_r_ls(self, request):\n        try:\n            jsonData = MessageToJson(request, False, True)\n            res = self.json(\"GetInnerAuditURLs\",{},jsonData)\n        except Exception as Argument:\n            try:\n                ArgumentStr = Argument.args[0].decode(\"utf-8\")\n                resp = Parse(ArgumentStr, VodGetInnerAuditURLsResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetInnerAuditURLsResponse(), True)\n\n\n    #\n    # GetAdAuditResultByVid.\n    #\n    # @param request VodGetAdAuditResultByVidRequest\n    # @return VodGetAdAuditResultByVidResponse\n    # @raise Exception\n    def get_ad_audit_result_by_vid(self, request):\n        try:\n            jsonData = MessageToJson(request, False, True)\n            res = self.json(\"GetAdAuditResultByVid\",{},jsonData)\n        except Exception as Argument:\n            try:\n                ArgumentStr = Argument.args[0].decode(\"utf-8\")\n                resp = Parse(ArgumentStr, VodGetAdAuditResultByVidResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetAdAuditResultByVidResponse(), True)\n\n\n    #\n    # DeleteMediaTosFile.\n    #\n    # @param request VodDeleteMediaTosFileRequest\n    # @return VodDeleteMediaTosFileResponse\n    # @raise Exception\n    def delete_media_tos_file(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.post(\"DeleteMediaTosFile\",{},params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDeleteMediaTosFileResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDeleteMediaTosFileResponse(), True)\n\n\n    #\n    # GetMediaList.\n    #\n    # @param request VodGetMediaListRequest\n    # @return VodGetMediaListResponse\n    # @raise Exception\n    def get_media_list(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetMediaList\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetMediaListResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetMediaListResponse(), True)\n\n    #\n    # DeleteMaterial.\n    #\n    # @param request VodDeleteMaterialRequest\n    # @return VodDeleteMaterialResponse\n    # @raise Exception\n    def delete_material(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DeleteMaterial\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDeleteMaterialResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDeleteMaterialResponse(), True)\n\n    #\n    # GetSubtitleInfoList.\n    #\n    # @param request VodGetSubtitleInfoListRequest\n    # @return VodGetSubtitleInfoListResponse\n    # @raise Exception\n    def get_subtitle_info_list(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetSubtitleInfoList\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetSubtitleInfoListResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetSubtitleInfoListResponse(), True)\n\n    #\n    # UpdateSubtitleStatus.\n    #\n    # @param request VodUpdateSubtitleStatusRequest\n    # @return VodUpdateSubtitleStatusResponse\n    # @raise Exception\n    def update_subtitle_status(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"UpdateSubtitleStatus\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodUpdateSubtitleStatusResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodUpdateSubtitleStatusResponse(), True)\n\n    #\n    # UpdateSubtitleInfo.\n    #\n    # @param request VodUpdateSubtitleInfoRequest\n    # @return VodUpdateSubtitleInfoResponse\n    # @raise Exception\n    def update_subtitle_info(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"UpdateSubtitleInfo\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodUpdateSubtitleInfoResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodUpdateSubtitleInfoResponse(), True)\n\n    #\n    # GetAuditFramesForAudit.\n    #\n    # @param request VodGetAuditFramesForAuditRequest\n    # @return VodGetAuditFramesForAuditResponse\n    # @raise Exception\n    def get_audit_frames_for_audit(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetAuditFramesForAudit\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetAuditFramesForAuditResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetAuditFramesForAuditResponse(), True)\n\n    #\n    # GetMLFramesForAudit.\n    #\n    # @param request VodGetMLFramesForAuditRequest\n    # @return VodGetMLFramesForAuditResponse\n    # @raise Exception\n    def get_m_l_frames_for_audit(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetMLFramesForAudit\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetMLFramesForAuditResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetMLFramesForAuditResponse(), True)\n\n    #\n    # GetBetterFramesForAudit.\n    #\n    # @param request VodGetBetterFramesForAuditRequest\n    # @return VodGetBetterFramesForAuditResponse\n    # @raise Exception\n    def get_better_frames_for_audit(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetBetterFramesForAudit\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetBetterFramesForAuditResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetBetterFramesForAuditResponse(), True)\n\n    #\n    # GetAudioInfoForAudit.\n    #\n    # @param request VodGetAudioInfoForAuditRequest\n    # @return VodGetAudioInfoForAuditResponse\n    # @raise Exception\n    def get_audio_info_for_audit(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetAudioInfoForAudit\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetAudioInfoForAuditResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetAudioInfoForAuditResponse(), True)\n\n    #\n    # GetAutomaticSpeechRecognitionForAudit.\n    #\n    # @param request VodGetAutomaticSpeechRecognitionForAuditRequest\n    # @return VodGetAutomaticSpeechRecognitionForAuditResponse\n    # @raise Exception\n    def get_automatic_speech_recognition_for_audit(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetAutomaticSpeechRecognitionForAudit\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetAutomaticSpeechRecognitionForAuditResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetAutomaticSpeechRecognitionForAuditResponse(), True)\n\n    #\n    # GetAudioEventDetectionForAudit.\n    #\n    # @param request VodGetAudioEventDetectionForAuditRequest\n    # @return VodGetAudioEventDetectionForAuditResponse\n    # @raise Exception\n    def get_audio_event_detection_for_audit(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetAudioEventDetectionForAudit\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetAudioEventDetectionForAuditResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetAudioEventDetectionForAuditResponse(), True)\n\n    #\n    # CreateVideoClassification.\n    #\n    # @param request VodCreateVideoClassificationRequest\n    # @return VodCreateVideoClassificationResponse\n    # @raise Exception\n    def create_video_classification(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"CreateVideoClassification\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodCreateVideoClassificationResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodCreateVideoClassificationResponse(), True)\n\n    #\n    # UpdateVideoClassification.\n    #\n    # @param request VodUpdateVideoClassificationRequest\n    # @return VodUpdateVideoClassificationResponse\n    # @raise Exception\n    def update_video_classification(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"UpdateVideoClassification\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodUpdateVideoClassificationResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodUpdateVideoClassificationResponse(), True)\n\n    #\n    # DeleteVideoClassification.\n    #\n    # @param request VodDeleteVideoClassificationRequest\n    # @return VodDeleteVideoClassificationResponse\n    # @raise Exception\n    def delete_video_classification(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DeleteVideoClassification\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDeleteVideoClassificationResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDeleteVideoClassificationResponse(), True)\n\n    #\n    # ListVideoClassifications.\n    #\n    # @param request VodListVideoClassificationsRequest\n    # @return VodListVideoClassificationsResponse\n    # @raise Exception\n    def list_video_classifications(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"ListVideoClassifications\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodListVideoClassificationsResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodListVideoClassificationsResponse(), True)\n\n    #\n    # ListSnapshots.\n    #\n    # @param request VodListSnapshotsRequest\n    # @return VodListSnapshotsResponse\n    # @raise Exception\n    def list_snapshots(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"ListSnapshots\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodListSnapshotsResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodListSnapshotsResponse(), True)\n\n    #\n    # ExtractMediaMetaTask.\n    #\n    # @param request VodExtractMediaMetaTaskRequest\n    # @return VodExtractMediaMetaTaskResponse\n    # @raise Exception\n    def extract_media_meta_task(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"ExtractMediaMetaTask\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodExtractMediaMetaTaskResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodExtractMediaMetaTaskResponse(), True)\n\n    #\n    # GetMediaEntityList.\n    #\n    # @param request VodGetMediaEntityListRequest\n    # @return VodGetMediaEntityListResponse\n    # @raise Exception\n    def get_media_entity_list(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetMediaEntityList\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetMediaEntityListResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetMediaEntityListResponse(), True)\n\n    #\n    # GetMediaEntity.\n    #\n    # @param request VodGetMediaEntityRequest\n    # @return VodGetMediaEntityResponse\n    # @raise Exception\n    def get_media_entity(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetMediaEntity\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetMediaEntityResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetMediaEntityResponse(), True)\n\n    #\n    # DeleteMediaEntity.\n    #\n    # @param request VodDeleteMediaEntityRequest\n    # @return VodDeleteMediaEntityResponse\n    # @raise Exception\n    def delete_media_entity(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.post(\"DeleteMediaEntity\",{},params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDeleteMediaEntityResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDeleteMediaEntityResponse(), True)\n\n\n    #\n    # StartWorkflow.\n    #\n    # @param request VodStartWorkflowRequest\n    # @return VodStartWorkflowResponse\n    # @raise Exception\n    def start_workflow(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"StartWorkflow\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodStartWorkflowResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodStartWorkflowResponse(), True)\n\n    #\n    # RetrieveTranscodeResult.\n    #\n    # @param request VodRetrieveTranscodeResultRequest\n    # @return VodRetrieveTranscodeResultResponse\n    # @raise Exception\n    def retrieve_transcode_result(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"RetrieveTranscodeResult\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodRetrieveTranscodeResultResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodRetrieveTranscodeResultResponse(), True)\n\n    #\n    # GetWorkflowExecution.\n    #\n    # @param request VodGetWorkflowExecutionStatusRequest\n    # @return VodGetWorkflowExecutionStatusResponse\n    # @raise Exception\n    def get_workflow_execution(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetWorkflowExecution\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetWorkflowExecutionStatusResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetWorkflowExecutionStatusResponse(), True)\n\n    #\n    # GetWorkflowExecutionResult.\n    #\n    # @param request VodGetWorkflowResultRequest\n    # @return VodGetWorkflowResultResponse\n    # @raise Exception\n    def get_workflow_execution_result(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetWorkflowExecutionResult\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetWorkflowResultResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetWorkflowResultResponse(), True)\n\n    #\n    # CreateTaskTemplate.\n    #\n    # @param request VodCreateTaskTemplateRequest\n    # @return VodCreateTaskTemplateResponse\n    # @raise Exception\n    def create_task_template(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.post(\"CreateTaskTemplate\",{},params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodCreateTaskTemplateResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodCreateTaskTemplateResponse(), True)\n\n\n    #\n    # UpdateTaskTemplate.\n    #\n    # @param request VodUpdateTaskTemplateRequest\n    # @return VodUpdateTaskTemplateResponse\n    # @raise Exception\n    def update_task_template(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.post(\"UpdateTaskTemplate\",{},params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodUpdateTaskTemplateResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodUpdateTaskTemplateResponse(), True)\n\n\n    #\n    # GetTaskTemplate.\n    #\n    # @param request VodGetTaskTemplateRequest\n    # @return VodGetTaskTemplateResponse\n    # @raise Exception\n    def get_task_template(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetTaskTemplate\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetTaskTemplateResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetTaskTemplateResponse(), True)\n\n    #\n    # ListTaskTemplate.\n    #\n    # @param request VodListTaskTemplateRequest\n    # @return VodListTaskTemplateResponse\n    # @raise Exception\n    def list_task_template(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"ListTaskTemplate\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodListTaskTemplateResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodListTaskTemplateResponse(), True)\n\n    #\n    # DeleteTaskTemplate.\n    #\n    # @param request VodDeleteTaskTemplateRequest\n    # @return VodDeleteTaskTemplateResponse\n    # @raise Exception\n    def delete_task_template(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.post(\"DeleteTaskTemplate\",{},params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDeleteTaskTemplateResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDeleteTaskTemplateResponse(), True)\n\n\n    #\n    # CreateWorkflowTemplate.\n    #\n    # @param request VodCreateWorkflowTemplateRequest\n    # @return VodCreateWorkflowTemplateResponse\n    # @raise Exception\n    def create_workflow_template(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.post(\"CreateWorkflowTemplate\",{},params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodCreateWorkflowTemplateResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodCreateWorkflowTemplateResponse(), True)\n\n\n    #\n    # UpdateWorkflowTemplate.\n    #\n    # @param request VodUpdateWorkflowTemplateRequest\n    # @return VodUpdateWorkflowTemplateResponse\n    # @raise Exception\n    def update_workflow_template(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.post(\"UpdateWorkflowTemplate\",{},params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodUpdateWorkflowTemplateResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodUpdateWorkflowTemplateResponse(), True)\n\n\n    #\n    # GetWorkflowTemplate.\n    #\n    # @param request VodGetWorkflowTemplateRequest\n    # @return VodGetWorkflowTemplateResponse\n    # @raise Exception\n    def get_workflow_template(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetWorkflowTemplate\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetWorkflowTemplateResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetWorkflowTemplateResponse(), True)\n\n    #\n    # ListWorkflowTemplate.\n    #\n    # @param request VodListWorkflowTemplateRequest\n    # @return VodListWorkflowTemplateResponse\n    # @raise Exception\n    def list_workflow_template(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"ListWorkflowTemplate\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodListWorkflowTemplateResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodListWorkflowTemplateResponse(), True)\n\n    #\n    # DeleteWorkflowTemplate.\n    #\n    # @param request VodDeleteWorkflowTemplateRequest\n    # @return VodDeleteWorkflowTemplateResponse\n    # @raise Exception\n    def delete_workflow_template(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.post(\"DeleteWorkflowTemplate\",{},params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDeleteWorkflowTemplateResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDeleteWorkflowTemplateResponse(), True)\n\n\n    #\n    # CreateWatermarkTemplate.\n    #\n    # @param request VodCreateWatermarkRequest\n    # @return VodCreateWatermarkResponse\n    # @raise Exception\n    def create_watermark_template(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.post(\"CreateWatermarkTemplate\",{},params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodCreateWatermarkResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodCreateWatermarkResponse(), True)\n\n\n    #\n    # UpdateWatermarkTemplate.\n    #\n    # @param request VodUpdateWatermarkRequest\n    # @return VodUpdateWatermarkResponse\n    # @raise Exception\n    def update_watermark_template(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.post(\"UpdateWatermarkTemplate\",{},params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodUpdateWatermarkResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodUpdateWatermarkResponse(), True)\n\n\n    #\n    # GetWatermarkTemplate.\n    #\n    # @param request VodGetWatermarkRequest\n    # @return VodGetWatermarkResponse\n    # @raise Exception\n    def get_watermark_template(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetWatermarkTemplate\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetWatermarkResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetWatermarkResponse(), True)\n\n    #\n    # ListWatermarkTemplate.\n    #\n    # @param request VodListWatermarkRequest\n    # @return VodListWatermarkResponse\n    # @raise Exception\n    def list_watermark_template(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"ListWatermarkTemplate\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodListWatermarkResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodListWatermarkResponse(), True)\n\n    #\n    # DeleteWatermarkTemplate.\n    #\n    # @param request VodDeleteWatermarkRequest\n    # @return VodDeleteWatermarkResponse\n    # @raise Exception\n    def delete_watermark_template(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.post(\"DeleteWatermarkTemplate\",{},params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDeleteWatermarkResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDeleteWatermarkResponse(), True)\n\n\n    #\n    # DeleteSpace.\n    #\n    # @param request VodDeleteSpaceRequest\n    # @return VodDeleteSpaceResponse\n    # @raise Exception\n    def delete_space(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DeleteSpace\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDeleteSpaceResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDeleteSpaceResponse(), True)\n\n    #\n    # CreateSpace.\n    #\n    # @param request VodCreateSpaceRequest\n    # @return VodCreateSpaceResponse\n    # @raise Exception\n    def create_space(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"CreateSpace\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodCreateSpaceResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodCreateSpaceResponse(), True)\n\n    #\n    # ListSpace.\n    #\n    # @param request VodListSpaceRequest\n    # @return VodListSpaceResponse\n    # @raise Exception\n    def list_space(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"ListSpace\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodListSpaceResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodListSpaceResponse(), True)\n\n    #\n    # GetSpaceDetail.\n    #\n    # @param request VodGetSpaceDetailRequest\n    # @return VodGetSpaceDetailResponse\n    # @raise Exception\n    def get_space_detail(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetSpaceDetail\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetSpaceDetailResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetSpaceDetailResponse(), True)\n\n    #\n    # UpdateSpace.\n    #\n    # @param request VodUpdateSpaceRequest\n    # @return VodUpdateSpaceResponse\n    # @raise Exception\n    def update_space(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"UpdateSpace\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodUpdateSpaceResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodUpdateSpaceResponse(), True)\n\n    #\n    # UpdateSpaceUploadConfig.\n    #\n    # @param request VodUpdateSpaceUploadConfigRequest\n    # @return VodUpdateSpaceUploadConfigResponse\n    # @raise Exception\n    def update_space_upload_config(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"UpdateSpaceUploadConfig\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodUpdateSpaceUploadConfigResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodUpdateSpaceUploadConfigResponse(), True)\n\n    #\n    # DescribeUploadSpaceConfig.\n    #\n    # @param request VodDescribeUploadSpaceConfigRequest\n    # @return VodDescribeUploadSpaceConfigResponse\n    # @raise Exception\n    def describe_upload_space_config(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeUploadSpaceConfig\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDescribeUploadSpaceConfigResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDescribeUploadSpaceConfigResponse(), True)\n\n    #\n    # UpdateUploadSpaceConfig.\n    #\n    # @param request VodUpdateUploadSpaceConfigRequest\n    # @return VodUpdateUploadSpaceConfigResponse\n    # @raise Exception\n    def update_upload_space_config(self, request):\n        try:\n            jsonData = MessageToJson(request, False, True)\n            res = self.json(\"UpdateUploadSpaceConfig\",{},jsonData)\n        except Exception as Argument:\n            try:\n                ArgumentStr = Argument.args[0].decode(\"utf-8\")\n                resp = Parse(ArgumentStr, VodUpdateUploadSpaceConfigResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodUpdateUploadSpaceConfigResponse(), True)\n\n\n    #\n    # AddDomainToScheduler.\n    #\n    # @param request VodAddDomainToSchedulerRequest\n    # @return VodAddDomainToSchedulerResponse\n    # @raise Exception\n    def add_domain_to_scheduler(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"AddDomainToScheduler\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodAddDomainToSchedulerResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodAddDomainToSchedulerResponse(), True)\n\n    #\n    # RemoveDomainFromScheduler.\n    #\n    # @param request VodRemoveDomainFromSchedulerRequest\n    # @return VodRemoveDomainFromSchedulerResponse\n    # @raise Exception\n    def remove_domain_from_scheduler(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"RemoveDomainFromScheduler\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodRemoveDomainFromSchedulerResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodRemoveDomainFromSchedulerResponse(), True)\n\n    #\n    # UpdateDomainPlayRule.\n    #\n    # @param request VodUpdateDomainPlayRuleRequest\n    # @return VodUpdateDomainPlayRuleResponse\n    # @raise Exception\n    def update_domain_play_rule(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"UpdateDomainPlayRule\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodUpdateDomainPlayRuleResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodUpdateDomainPlayRuleResponse(), True)\n\n    #\n    # StartDomain.\n    #\n    # @param request VodStartDomainRequest\n    # @return VodStartDomainResponse\n    # @raise Exception\n    def start_domain(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"StartDomain\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodStartDomainResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodStartDomainResponse(), True)\n\n    #\n    # StopDomain.\n    #\n    # @param request VodStopDomainRequest\n    # @return VodStopDomainResponse\n    # @raise Exception\n    def stop_domain(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"StopDomain\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodStopDomainResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodStopDomainResponse(), True)\n\n    #\n    # DeleteDomain.\n    #\n    # @param request VodDeleteDomainRequest\n    # @return VodDeleteDomainResponse\n    # @raise Exception\n    def delete_domain(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DeleteDomain\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDeleteDomainResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDeleteDomainResponse(), True)\n\n    #\n    # ListDomain.\n    #\n    # @param request VodListDomainRequest\n    # @return VodListDomainResponse\n    # @raise Exception\n    def list_domain(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"ListDomain\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodListDomainResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodListDomainResponse(), True)\n\n    #\n    # CreateCdnRefreshTask.\n    #\n    # @param request VodCreateCdnRefreshTaskRequest\n    # @return VodCreateCdnRefreshTaskResponse\n    # @raise Exception\n    def create_cdn_refresh_task(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"CreateCdnRefreshTask\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodCreateCdnRefreshTaskResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodCreateCdnRefreshTaskResponse(), True)\n\n    #\n    # CreateCdnPreloadTask.\n    #\n    # @param request VodCreateCdnPreloadTaskRequest\n    # @return VodCreateCdnPreloadTaskResponse\n    # @raise Exception\n    def create_cdn_preload_task(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"CreateCdnPreloadTask\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodCreateCdnPreloadTaskResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodCreateCdnPreloadTaskResponse(), True)\n\n    #\n    # ListCdnTasks.\n    #\n    # @param request VodListCdnTasksRequest\n    # @return VodListCdnTasksResponse\n    # @raise Exception\n    def list_cdn_tasks(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"ListCdnTasks\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodListCdnTasksResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodListCdnTasksResponse(), True)\n\n    #\n    # ListCdnAccessLog.\n    #\n    # @param request VodListCdnAccessLogRequest\n    # @return VodListCdnAccessLogResponse\n    # @raise Exception\n    def list_cdn_access_log(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"ListCdnAccessLog\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodListCdnAccessLogResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodListCdnAccessLogResponse(), True)\n\n    #\n    # ListCdnTopAccessUrl.\n    #\n    # @param request VodListCdnTopAccessUrlRequest\n    # @return VodListCdnTopAccessUrlResponse\n    # @raise Exception\n    def list_cdn_top_access_url(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"ListCdnTopAccessUrl\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodListCdnTopAccessUrlResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodListCdnTopAccessUrlResponse(), True)\n\n    #\n    # ListCdnTopAccess.\n    #\n    # @param request VodListCdnTopAccessRequest\n    # @return VodListCdnTopAccessResponse\n    # @raise Exception\n    def list_cdn_top_access(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"ListCdnTopAccess\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodListCdnTopAccessResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodListCdnTopAccessResponse(), True)\n\n    #\n    # ListCdnUsageData.\n    #\n    # @param request VodListCdnUsageDataRequest\n    # @return VodCdnStatisticsCommonResponse\n    # @raise Exception\n    def list_cdn_usage_data(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"ListCdnUsageData\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodCdnStatisticsCommonResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodCdnStatisticsCommonResponse(), True)\n\n    #\n    # ListCdnStatusData.\n    #\n    # @param request VodListCdnStatusDataRequest\n    # @return VodCdnStatisticsCommonResponse\n    # @raise Exception\n    def list_cdn_status_data(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"ListCdnStatusData\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodCdnStatisticsCommonResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodCdnStatisticsCommonResponse(), True)\n\n    #\n    # DescribeIpInfo.\n    #\n    # @param request VodDescribeIPInfoRequest\n    # @return VodDescribeIPInfoResponse\n    # @raise Exception\n    def describe_ip_info(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeIpInfo\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDescribeIPInfoResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDescribeIPInfoResponse(), True)\n\n    #\n    # ListCdnPvData.\n    #\n    # @param request VodListCdnPvDataRequest\n    # @return VodCdnStatisticsCommonResponse\n    # @raise Exception\n    def list_cdn_pv_data(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"ListCdnPvData\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodCdnStatisticsCommonResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodCdnStatisticsCommonResponse(), True)\n\n    #\n    # SubmitBlockTasks.\n    #\n    # @param request VodSubmitBlockTasksRequest\n    # @return VodSubmitBlockTasksResponse\n    # @raise Exception\n    def submit_block_tasks(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.post(\"SubmitBlockTasks\",{},params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodSubmitBlockTasksResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodSubmitBlockTasksResponse(), True)\n\n\n    #\n    # GetContentBlockTasks.\n    #\n    # @param request VodGetContentBlockTasksRequest\n    # @return VodGetContentBlockTasksResponse\n    # @raise Exception\n    def get_content_block_tasks(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.post(\"GetContentBlockTasks\",{},params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetContentBlockTasksResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetContentBlockTasksResponse(), True)\n\n\n    #\n    # CreateDomain.\n    #\n    # @param request VodCreateDomainV2Request\n    # @return VodCreateDomainV2Response\n    # @raise Exception\n    def create_domain(self, request):\n        try:\n            jsonData = MessageToJson(request, False, True)\n            res = self.json(\"CreateDomain\",{},jsonData)\n        except Exception as Argument:\n            try:\n                ArgumentStr = Argument.args[0].decode(\"utf-8\")\n                resp = Parse(ArgumentStr, VodCreateDomainV2Response(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodCreateDomainV2Response(), True)\n\n\n    #\n    # UpdateDomainExpire.\n    #\n    # @param request VodUpdateDomainExpireV2Request\n    # @return VodUpdateDomainExpireV2Response\n    # @raise Exception\n    def update_domain_expire(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"UpdateDomainExpire\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodUpdateDomainExpireV2Response(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodUpdateDomainExpireV2Response(), True)\n\n    #\n    # UpdateDomainAuthConfig.\n    #\n    # @param request VodUpdateDomainAuthConfigV2Request\n    # @return VodUpdateDomainAuthConfigV2Response\n    # @raise Exception\n    def update_domain_auth_config(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"UpdateDomainAuthConfig\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodUpdateDomainAuthConfigV2Response(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodUpdateDomainAuthConfigV2Response(), True)\n\n    #\n    # AddOrUpdateCertificate.\n    #\n    # @param request AddOrUpdateCertificateV2Request\n    # @return AddOrUpdateCertificateV2Response\n    # @raise Exception\n    def add_or_update_certificate(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.post(\"AddOrUpdateCertificate\",{},params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), AddOrUpdateCertificateV2Response(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, AddOrUpdateCertificateV2Response(), True)\n\n\n    #\n    # UpdateDomainUrlAuthConfig.\n    #\n    # @param request VodUpdateDomainUrlAuthConfigV2Request\n    # @return VodUpdateDomainUrlAuthConfigV2Response\n    # @raise Exception\n    def update_domain_url_auth_config(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"UpdateDomainUrlAuthConfig\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodUpdateDomainUrlAuthConfigV2Response(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodUpdateDomainUrlAuthConfigV2Response(), True)\n\n    #\n    # VerifyDomainOwner.\n    #\n    # @param request VodVerifyDomainOwnerRequest\n    # @return VodVerifyDomainOwnerResponse\n    # @raise Exception\n    def verify_domain_owner(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"VerifyDomainOwner\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodVerifyDomainOwnerResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodVerifyDomainOwnerResponse(), True)\n\n    #\n    # DescribeDomainVerifyContent.\n    #\n    # @param request VodDescribeDomainVerifyContentRequest\n    # @return VodDescribeDomainVerifyContentResponse\n    # @raise Exception\n    def describe_domain_verify_content(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeDomainVerifyContent\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDescribeDomainVerifyContentResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDescribeDomainVerifyContentResponse(), True)\n\n    #\n    # UpdateDomainConfig.\n    #\n    # @param request VodUpdateDomainConfigRequest\n    # @return VodUpdateDomainConfigResponse\n    # @raise Exception\n    def update_domain_config(self, request):\n        try:\n            jsonData = MessageToJson(request, False, True)\n            res = self.json(\"UpdateDomainConfig\",{},jsonData)\n        except Exception as Argument:\n            try:\n                ArgumentStr = Argument.args[0].decode(\"utf-8\")\n                resp = Parse(ArgumentStr, VodUpdateDomainConfigResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodUpdateDomainConfigResponse(), True)\n\n\n    #\n    # DescribeDomainConfig.\n    #\n    # @param request VodDescribeDomainConfigRequest\n    # @return VodDescribeDomainConfigResponse\n    # @raise Exception\n    def describe_domain_config(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeDomainConfig\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDescribeDomainConfigResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDescribeDomainConfigResponse(), True)\n\n    #\n    # DescribeCdnEdgeIp.\n    #\n    # @param request VodDescribeCdnEdgeIpRequest\n    # @return VodDescribeCdnEdgeIpResponse\n    # @raise Exception\n    def describe_cdn_edge_ip(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeCdnEdgeIp\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDescribeCdnEdgeIpResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDescribeCdnEdgeIpResponse(), True)\n\n    #\n    # DescribeCdnRegionAndIsp.\n    #\n    # @param request VodDescribeCdnRegionAndIspRequest\n    # @return VodDescribeCdnRegionAndIspResponse\n    # @raise Exception\n    def describe_cdn_region_and_isp(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeCdnRegionAndIsp\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDescribeCdnRegionAndIspResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDescribeCdnRegionAndIspResponse(), True)\n\n    #\n    # AddCallbackSubscription.\n    #\n    # @param request VodAddCallbackSubscriptionRequest\n    # @return VodAddCallbackSubscriptionResponse\n    # @raise Exception\n    def add_callback_subscription(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"AddCallbackSubscription\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodAddCallbackSubscriptionResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodAddCallbackSubscriptionResponse(), True)\n\n    #\n    # SetCallbackEvent.\n    #\n    # @param request VodSetCallbackEventRequest\n    # @return VodSetCallbackEventResponse\n    # @raise Exception\n    def set_callback_event(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"SetCallbackEvent\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodSetCallbackEventResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodSetCallbackEventResponse(), True)\n\n    #\n    # GetSmartStrategyLitePlayInfo.\n    #\n    # @param request VodGetSmartStrategyLitePlayInfoRequest\n    # @return VodGetSmartStrategyLitePlayInfoResponse\n    # @raise Exception\n    def get_smart_strategy_lite_play_info(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetSmartStrategyLitePlayInfo\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetSmartStrategyLitePlayInfoResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetSmartStrategyLitePlayInfoResponse(), True)\n\n    #\n    # GetAppInfo.\n    #\n    # @param request VodGetAppInfoRequest\n    # @return VodGetAppInfoResponse\n    # @raise Exception\n    def get_app_info(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"GetAppInfo\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodGetAppInfoResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodGetAppInfoResponse(), True)\n\n    #\n    # DescribeVodSpaceTranscodeData.\n    #\n    # @param request DescribeVodSpaceTranscodeDataRequest\n    # @return DescribeVodSpaceTranscodeDataResponse\n    # @raise Exception\n    def describe_vod_space_transcode_data(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeVodSpaceTranscodeData\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeVodSpaceTranscodeDataResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeVodSpaceTranscodeDataResponse(), True)\n\n    #\n    # DescribeVodSpaceAIStatisData.\n    #\n    # @param request DescribeVodSpaceAIStatisDataRequest\n    # @return DescribeVodSpaceAIStatisDataResponse\n    # @raise Exception\n    def describe_vod_space_a_i_statis_data(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeVodSpaceAIStatisData\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeVodSpaceAIStatisDataResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeVodSpaceAIStatisDataResponse(), True)\n\n    #\n    # DescribeVodSpaceSubtitleStatisData.\n    #\n    # @param request DescribeVodSpaceSubtitleStatisDataRequest\n    # @return DescribeVodSpaceSubtitleStatisDataResponse\n    # @raise Exception\n    def describe_vod_space_subtitle_statis_data(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeVodSpaceSubtitleStatisData\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeVodSpaceSubtitleStatisDataResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeVodSpaceSubtitleStatisDataResponse(), True)\n\n    #\n    # DescribeVodSpaceDetectStatisData.\n    #\n    # @param request DescribeVodSpaceDetectStatisDataRequest\n    # @return DescribeVodSpaceDetectStatisDataResponse\n    # @raise Exception\n    def describe_vod_space_detect_statis_data(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeVodSpaceDetectStatisData\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeVodSpaceDetectStatisDataResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeVodSpaceDetectStatisDataResponse(), True)\n\n    #\n    # DescribeVodSpaceWorkflowDetailData.\n    #\n    # @param request DescribeVodSpaceWorkflowDetailDataRequest\n    # @return DescribeVodSpaceWorkflowDetailDataResponse\n    # @raise Exception\n    def describe_vod_space_workflow_detail_data(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeVodSpaceWorkflowDetailData\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeVodSpaceWorkflowDetailDataResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeVodSpaceWorkflowDetailDataResponse(), True)\n\n    #\n    # DescribeVodSpaceEditDetailData.\n    #\n    # @param request DescribeVodSpaceEditDetailDataRequest\n    # @return DescribeVodSpaceEditDetailDataResponse\n    # @raise Exception\n    def describe_vod_space_edit_detail_data(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeVodSpaceEditDetailData\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeVodSpaceEditDetailDataResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeVodSpaceEditDetailDataResponse(), True)\n\n    #\n    # DescribeVodSnapshotData.\n    #\n    # @param request DescribeVodSnapshotDataRequest\n    # @return DescribeVodSnapshotDataResponse\n    # @raise Exception\n    def describe_vod_snapshot_data(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeVodSnapshotData\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeVodSnapshotDataResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeVodSnapshotDataResponse(), True)\n\n    #\n    # DescribeVodSpaceStorageData.\n    #\n    # @param request VodDescribeVodSpaceStorageDataRequest\n    # @return VodDescribeVodSpaceStorageDataResponse\n    # @raise Exception\n    def describe_vod_space_storage_data(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeVodSpaceStorageData\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDescribeVodSpaceStorageDataResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDescribeVodSpaceStorageDataResponse(), True)\n\n    #\n    # DescribeVodDomainTrafficData.\n    #\n    # @param request VodDescribeVodDomainTrafficDataRequest\n    # @return VodDescribeVodDomainTrafficDataResponse\n    # @raise Exception\n    def describe_vod_domain_traffic_data(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeVodDomainTrafficData\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDescribeVodDomainTrafficDataResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDescribeVodDomainTrafficDataResponse(), True)\n\n    #\n    # DescribeVodDomainBandwidthData.\n    #\n    # @param request VodDescribeVodDomainBandwidthDataRequest\n    # @return VodDescribeVodDomainBandwidthDataResponse\n    # @raise Exception\n    def describe_vod_domain_bandwidth_data(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeVodDomainBandwidthData\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), VodDescribeVodDomainBandwidthDataResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, VodDescribeVodDomainBandwidthDataResponse(), True)\n\n    #\n    # DescribeVodEnhanceImageData.\n    #\n    # @param request DescribeVodEnhanceImageDataRequest\n    # @return DescribeVodEnhanceImageDataResponse\n    # @raise Exception\n    def describe_vod_enhance_image_data(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeVodEnhanceImageData\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeVodEnhanceImageDataResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeVodEnhanceImageDataResponse(), True)\n\n    #\n    # DescribeVodSpaceEditStatisData.\n    #\n    # @param request DescribeVodSpaceEditStatisDataRequest\n    # @return DescribeVodSpaceEditStatisDataResponse\n    # @raise Exception\n    def describe_vod_space_edit_statis_data(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeVodSpaceEditStatisData\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeVodSpaceEditStatisDataResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeVodSpaceEditStatisDataResponse(), True)\n\n    #\n    # DescribeVodPlayedStatisData.\n    #\n    # @param request DescribeVodPlayedStatisDataRequest\n    # @return DescribeVodPlayedStatisDataResponse\n    # @raise Exception\n    def describe_vod_played_statis_data(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeVodPlayedStatisData\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeVodPlayedStatisDataResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeVodPlayedStatisDataResponse(), True)\n\n    #\n    # DescribeVodMostPlayedStatisData.\n    #\n    # @param request DescribeVodMostPlayedStatisDataRequest\n    # @return DescribeVodMostPlayedStatisDataResponse\n    # @raise Exception\n    def describe_vod_most_played_statis_data(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeVodMostPlayedStatisData\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeVodMostPlayedStatisDataResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeVodMostPlayedStatisDataResponse(), True)\n\n    #\n    # DescribeVodRealtimeMediaData.\n    #\n    # @param request DescribeVodRealtimeMediaDataRequest\n    # @return DescribeVodRealtimeMediaDataResponse\n    # @raise Exception\n    def describe_vod_realtime_media_data(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeVodRealtimeMediaData\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeVodRealtimeMediaDataResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeVodRealtimeMediaDataResponse(), True)\n\n    #\n    # DescribeVodRealtimeMediaDetailData.\n    #\n    # @param request DescribeVodRealtimeMediaDetailDataRequest\n    # @return DescribeVodRealtimeMediaDetailDataResponse\n    # @raise Exception\n    def describe_vod_realtime_media_detail_data(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeVodRealtimeMediaDetailData\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeVodRealtimeMediaDetailDataResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeVodRealtimeMediaDetailDataResponse(), True)\n\n    #\n    # DescribeVodVidTrafficFileLog.\n    #\n    # @param request DescribeVodVidTrafficFileLogRequest\n    # @return DescribeVodVidTrafficFileLogResponse\n    # @raise Exception\n    def describe_vod_vid_traffic_file_log(self, request):\n        try:\n            if sys.version_info[0] == 3:\n                jsonData = MessageToJson(request, False, True)\n                params = json.loads(jsonData)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            else:\n                params = MessageToDict(request, False, True)\n                for k, v in params.items():\n                    if isinstance(v, (int, float, bool, str, unicode)) is True:\n                        continue\n                    else:\n                        params[k] = json.dumps(v)\n            res = self.get(\"DescribeVodVidTrafficFileLog\", params)\n        except Exception as Argument:\n            try:\n                resp = Parse(Argument.__str__(), DescribeVodVidTrafficFileLogResponse(), True)\n            except Exception:\n                raise Argument\n            else:\n                raise Exception(resp.ResponseMetadata.Error.Code)\n        else:\n            return Parse(res, DescribeVodVidTrafficFileLogResponse(), True)\n\n"
  },
  {
    "path": "volcengine/vod/VodServiceConfig.py",
    "content": "# coding:utf-8\n\nfrom __future__ import print_function\n\nimport threading\nfrom zlib import crc32\n\nfrom volcengine.ApiInfo import ApiInfo\nfrom volcengine.Credentials import Credentials\nfrom volcengine.ServiceInfo import ServiceInfo\nfrom volcengine.base.Service import Service\n\n\nclass VodServiceConfig(Service):\n    _instance_lock = threading.Lock()\n\n    def __new__(cls, *args, **kwargs):\n        if not hasattr(cls, \"_instance\"):\n            with cls._instance_lock:\n                if not hasattr(cls, \"_instance\"):\n                    cls._instance = object.__new__(cls)\n        return cls._instance\n\n    def __init__(self, region='cn-north-1'):\n        self.service_info = VodServiceConfig.get_service_info(region)\n        self.api_info = VodServiceConfig.get_api_info()\n        self.domain_cache = {}\n        self.fallback_domain_weights = {}\n        self.update_interval = 10\n        self.lock = threading.Lock()\n        super(VodServiceConfig, self).__init__(self.service_info, self.api_info)\n\n    @staticmethod\n    def get_service_info(region):\n        service_info_map = {\n            'cn-north-1': ServiceInfo(\"vod.volcengineapi.com\", {'Accept': 'application/json'},\n                                      Credentials('', '', 'vod', 'cn-north-1'), 60, 60,\"https\"),\n            'ap-southeast-1': ServiceInfo(\"vod.ap-southeast-1.volcengineapi.com\", {'Accept': 'application/json'},\n                                      Credentials('', '', 'vod', 'ap-southeast-1'), 60, 60,\"https\"),\n        }\n        service_info = service_info_map.get(region, None)\n        if not service_info:\n            service_info = ServiceInfo(\"vod.{}.volcengineapi.com\".format(region), {'Accept': 'application/json'},\n                                       Credentials('', '', 'vod', region), 60, 60, \"https\")\n\n        return service_info\n\n    @staticmethod\n    def get_api_info():\n        api_info = {\n            # 播放\n            \"GetPlayInfo\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetPlayInfo\", \"Version\": \"2020-08-01\"}, {}, {}),\n            \"GetAllPlayInfo\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetAllPlayInfo\", \"Version\": \"2022-01-01\"}, {}, {}),\n            \"GetPrivateDrmPlayAuth\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetPrivateDrmPlayAuth\", \"Version\": \"2020-08-01\"}, {}, {}),\n            \"CreateHlsDecryptionKey\": ApiInfo(\"GET\", \"/\", {\"Action\": \"CreateHlsDecryptionKey\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"GetHlsDecryptionKey\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetHlsDecryptionKey\", \"Version\": \"2020-08-01\"}, {}, {}),\n            \"DescribeDrmDataKey\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeDrmDataKey\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"GetPlayInfoWithLiveTimeShiftScene\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetPlayInfoWithLiveTimeShiftScene\", \"Version\": \"2021-11-01\"}, {}, {}),\n            # 上传\n            \"UploadMediaByUrl\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UploadMediaByUrl\", \"Version\": \"2020-08-01\"}, {}, {}),\n            \"QueryUploadTaskInfo\": ApiInfo(\"GET\", \"/\", {\"Action\": \"QueryUploadTaskInfo\", \"Version\": \"2020-08-01\"}, {}, {}),\n            \"ApplyUploadInfo\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ApplyUploadInfo\", \"Version\": \"2022-01-01\"}, {}, {}),\n            \"CommitUploadInfo\": ApiInfo(\"GET\", \"/\", {\"Action\": \"CommitUploadInfo\", \"Version\": \"2022-01-01\"}, {}, {}),\n            \"ParseUploadManifest\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ParseUploadManifest\", \"Version\": \"2022-01-01\"}, {}, {}),\n            # 媒资\n            \"GetMediaEntityList\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetMediaEntityList\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"GetMediaEntity\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetMediaEntity\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DeleteMediaEntity\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteMediaEntity\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"UpdateMediaInfo\": ApiInfo(\"GET\", \"/\", {\"Action\": \"UpdateMediaInfo\", \"Version\": \"2020-08-01\"}, {}, {}),\n            \"UpdateMediaPublishStatus\": ApiInfo(\"GET\", \"/\", {\"Action\": \"UpdateMediaPublishStatus\", \"Version\": \"2020-08-01\"}, {}, {}),\n            \"UpdateMediaStorageClass\": ApiInfo(\"GET\", \"/\", {\"Action\": \"UpdateMediaStorageClass\", \"Version\": \"2022-12-01\"}, {}, {}),\n            \"GetInnerAuditURLs\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetInnerAuditURLs\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"GetAdAuditResultByVid\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetAdAuditResultByVid\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"GetMediaInfos\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetMediaInfos\", \"Version\": \"2022-12-01\"}, {}, {}),\n            \"GetMediaInfos20230701\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetMediaInfos\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"GetRecommendedPoster\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetRecommendedPoster\", \"Version\": \"2020-08-01\"}, {}, {}),\n            \"DeleteMedia\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DeleteMedia\", \"Version\": \"2020-08-01\"}, {}, {}),\n            \"DeleteTranscodes\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DeleteTranscodes\", \"Version\": \"2020-08-01\"}, {}, {}),\n            \"DeleteMediaTosFile\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteMediaTosFile\", \"Version\": \"2022-12-01\"}, {}, {}),\n            \"GetFileInfos\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetFileInfos\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"GetMediaList\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetMediaList\", \"Version\": \"2022-12-01\"}, {}, {}),\n            \"DeleteMaterial\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DeleteMaterial\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"GetSubtitleInfoList\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetSubtitleInfoList\", \"Version\": \"2020-08-01\"}, {}, {}),\n            \"UpdateSubtitleStatus\": ApiInfo(\"GET\", \"/\", {\"Action\": \"UpdateSubtitleStatus\", \"Version\": \"2020-08-01\"}, {}, {}),\n            \"UpdateSubtitleInfo\": ApiInfo(\"GET\", \"/\", {\"Action\": \"UpdateSubtitleInfo\", \"Version\": \"2020-08-01\"}, {}, {}),\n            \"GetAuditFramesForAudit\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetAuditFramesForAudit\", \"Version\": \"2021-11-01\"}, {}, {}),\n            \"GetMLFramesForAudit\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetMLFramesForAudit\", \"Version\": \"2021-11-01\"}, {}, {}),\n            \"GetBetterFramesForAudit\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetBetterFramesForAudit\", \"Version\": \"2021-11-01\"}, {}, {}),\n            \"GetAudioInfoForAudit\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetAudioInfoForAudit\", \"Version\": \"2021-11-01\"}, {}, {}),\n            \"GetAutomaticSpeechRecognitionForAudit\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetAutomaticSpeechRecognitionForAudit\", \"Version\": \"2021-11-01\"}, {}, {}),\n            \"GetAudioEventDetectionForAudit\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetAudioEventDetectionForAudit\", \"Version\": \"2021-11-01\"}, {}, {}),\n            \"CreateVideoClassification\": ApiInfo(\"GET\", \"/\", {\"Action\": \"CreateVideoClassification\", \"Version\": \"2021-01-01\"}, {}, {}),\n            \"UpdateVideoClassification\": ApiInfo(\"GET\", \"/\", {\"Action\": \"UpdateVideoClassification\", \"Version\": \"2021-01-01\"}, {}, {}),\n            \"DeleteVideoClassification\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DeleteVideoClassification\", \"Version\": \"2021-01-01\"}, {}, {}),\n            \"ListVideoClassifications\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListVideoClassifications\", \"Version\": \"2021-01-01\"}, {}, {}),\n            \"ListSnapshots\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListSnapshots\", \"Version\": \"2021-01-01\"}, {}, {}),\n            \"ExtractMediaMetaTask\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ExtractMediaMetaTask\", \"Version\": \"2022-01-01\"}, {}, {}),\n            #Object\n            \"SubmitBlockObjectTasks\": ApiInfo(\"POST\", \"/\",{\"Action\": \"SubmitBlockObjectTasks\", \"Version\": \"2023-07-01\"},{}, {}),\n            \"ListBlockObjectTasks\": ApiInfo(\"POST\", \"/\",{\"Action\": \"ListBlockObjectTasks\", \"Version\": \"2023-07-01\"},{}, {}),\n            # 转码\n            \"StartWorkflow\": ApiInfo(\"GET\", \"/\", {\"Action\": \"StartWorkflow\", \"Version\": \"2020-08-01\"}, {}, {}),\n            \"RetrieveTranscodeResult\": ApiInfo(\"GET\", \"/\", {\"Action\": \"RetrieveTranscodeResult\", \"Version\": \"2020-08-01\"}, {}, {}),\n            \"GetWorkflowExecution\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetWorkflowExecution\", \"Version\": \"2020-08-01\"}, {}, {}),\n            \"GetWorkflowExecutionResult\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetWorkflowExecutionResult\", \"Version\": \"2022-12-01\"}, {}, {}),\n            \"GetTaskTemplate\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetTaskTemplate\", \"Version\": \"2023-07-01\"}, {},{}),\n            \"CreateTaskTemplate\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateTaskTemplate\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"UpdateTaskTemplate\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateTaskTemplate\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"ListTaskTemplate\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListTaskTemplate\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DeleteTaskTemplate\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteTaskTemplate\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"GetWorkflowTemplate\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetWorkflowTemplate\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"CreateWorkflowTemplate\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateWorkflowTemplate\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"UpdateWorkflowTemplate\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateWorkflowTemplate\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"ListWorkflowTemplate\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListWorkflowTemplate\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DeleteWorkflowTemplate\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteWorkflowTemplate\", \"Version\": \"2023-07-01\"}, {},{}),\n            \"GetWatermarkTemplate\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetWatermarkTemplate\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"CreateWatermarkTemplate\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateWatermarkTemplate\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"UpdateWatermarkTemplate\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateWatermarkTemplate\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"ListWatermarkTemplate\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListWatermarkTemplate\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DeleteWatermarkTemplate\": ApiInfo(\"POST\", \"/\", {\"Action\": \"DeleteWatermarkTemplate\", \"Version\": \"2023-07-01\"}, {}, {}),\n            # 空间管理\n            \"DeleteSpace\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DeleteSpace\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"CreateSpace\": ApiInfo(\"GET\", \"/\", {\"Action\": \"CreateSpace\", \"Version\": \"2021-01-01\"}, {}, {}),\n            \"ListSpace\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListSpace\", \"Version\": \"2021-01-01\"}, {}, {}),\n            \"GetSpaceDetail\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetSpaceDetail\", \"Version\": \"2022-01-01\"}, {}, {}),\n            \"UpdateSpace\": ApiInfo(\"GET\", \"/\", {\"Action\": \"UpdateSpace\", \"Version\": \"2021-01-01\"}, {}, {}),\n            \"UpdateSpaceUploadConfig\": ApiInfo(\"GET\", \"/\", {\"Action\": \"UpdateSpaceUploadConfig\", \"Version\": \"2022-01-01\"}, {}, {}),\n            \"DescribeVodSpaceStorageData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeVodSpaceStorageData\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeUploadSpaceConfig\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeUploadSpaceConfig\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"UpdateUploadSpaceConfig\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateUploadSpaceConfig\", \"Version\": \"2023-07-01\"}, {}, {}),\n            # 分发加速\n            \"AddDomainToScheduler\": ApiInfo(\"GET\", \"/\", {\"Action\": \"AddDomainToScheduler\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"RemoveDomainFromScheduler\": ApiInfo(\"GET\", \"/\", {\"Action\": \"RemoveDomainFromScheduler\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"UpdateDomainPlayRule\": ApiInfo(\"GET\", \"/\", {\"Action\": \"UpdateDomainPlayRule\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"StartDomain\": ApiInfo(\"GET\", \"/\", {\"Action\": \"StartDomain\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"StopDomain\": ApiInfo(\"GET\", \"/\", {\"Action\": \"StopDomain\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DeleteDomain\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DeleteDomain\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"ListDomain\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListDomain\", \"Version\": \"2023-01-01\"}, {}, {}),\n            \"CreateCdnRefreshTask\": ApiInfo(\"GET\", \"/\", {\"Action\": \"CreateCdnRefreshTask\", \"Version\": \"2021-01-01\"}, {}, {}),\n            \"CreateCdnPreloadTask\": ApiInfo(\"GET\", \"/\", {\"Action\": \"CreateCdnPreloadTask\", \"Version\": \"2021-01-01\"}, {}, {}),\n            \"ListCdnTasks\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListCdnTasks\", \"Version\": \"2022-01-01\"}, {}, {}),\n            \"ListCdnAccessLog\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListCdnAccessLog\", \"Version\": \"2022-01-01\"}, {}, {}),\n            \"ListCdnTopAccessUrl\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListCdnTopAccessUrl\", \"Version\": \"2022-01-01\"}, {}, {}),\n            \"ListCdnTopAccess\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListCdnTopAccess\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeVodDomainBandwidthData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeVodDomainBandwidthData\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeVodDomainTrafficData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeVodDomainTrafficData\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"ListCdnUsageData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListCdnUsageData\", \"Version\": \"2022-12-01\"}, {}, {}),\n            \"ListCdnStatusData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListCdnStatusData\", \"Version\": \"2022-01-01\"}, {}, {}),\n            \"DescribeIpInfo\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeIpInfo\", \"Version\": \"2022-01-01\"}, {}, {}),\n            \"ListCdnPvData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"ListCdnPvData\", \"Version\": \"2022-01-01\"}, {}, {}),\n            \"SubmitBlockTasks\": ApiInfo(\"POST\", \"/\", {\"Action\": \"SubmitBlockTasks\", \"Version\": \"2022-01-01\"}, {}, {}),\n            \"GetContentBlockTasks\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetContentBlockTasks\", \"Version\": \"2022-01-01\"}, {}, {}),\n            \"ListFileMetaInfosByFileNames\": ApiInfo(\"POST\", \"/\", {\"Action\": \"ListFileMetaInfosByFileNames\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"CreateDomain\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CreateDomain\", \"Version\": \"2023-02-01\"}, {}, {}),\n            \"UpdateDomainExpire\": ApiInfo(\"GET\", \"/\", {\"Action\": \"UpdateDomainExpire\", \"Version\": \"2023-02-01\"}, {}, {}),\n            \"UpdateDomainAuthConfig\": ApiInfo(\"GET\", \"/\", {\"Action\": \"UpdateDomainAuthConfig\", \"Version\": \"2023-02-01\"}, {}, {}),\n            \"AddOrUpdateCertificate\": ApiInfo(\"POST\", \"/\",{\"Action\": \"AddOrUpdateCertificate\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"UpdateDomainUrlAuthConfig\": ApiInfo(\"GET\", \"/\", {\"Action\": \"UpdateDomainUrlAuthConfig\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"UpdateDomainConfig\": ApiInfo(\"POST\", \"/\", {\"Action\": \"UpdateDomainConfig\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeDomainConfig\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeDomainConfig\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"VerifyDomainOwner\": ApiInfo(\"GET\", \"/\", {\"Action\": \"VerifyDomainOwner\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeDomainVerifyContent\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeDomainVerifyContent\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeCdnEdgeIp\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeCdnEdgeIp\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeCdnRegionAndIsp\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeCdnRegionAndIsp\", \"Version\": \"2023-07-01\"}, {}, {}),\n            # 回调管理\n            \"AddCallbackSubscription\": ApiInfo(\"GET\", \"/\", {\"Action\": \"AddCallbackSubscription\", \"Version\": \"2021-12-01\"}, {}, {}),\n            \"SetCallbackEvent\": ApiInfo(\"GET\", \"/\", {\"Action\": \"SetCallbackEvent\", \"Version\": \"2022-01-01\"}, {}, {}),\n            # 视频编辑\n            \"SubmitDirectEditTaskAsync\": ApiInfo(\"POST\", \"/\",{\"Action\": \"SubmitDirectEditTaskAsync\", \"Version\": \"2018-01-01\"}, {},{}),\n            \"SubmitDirectEditTaskSync\": ApiInfo(\"POST\", \"/\",{\"Action\": \"SubmitDirectEditTaskSync\", \"Version\": \"2018-01-01\"}, {},{}),\n            \"GetDirectEditResult\": ApiInfo(\"POST\", \"/\", {\"Action\": \"GetDirectEditResult\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"GetDirectEditProgress\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetDirectEditProgress\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"CancelDirectEditTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"CancelDirectEditTask\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"AsyncVCreativeTask\": ApiInfo(\"POST\", \"/\", {\"Action\": \"AsyncVCreativeTask\", \"Version\": \"2018-01-01\"}, {}, {}),\n            \"GetVCreativeTaskResult\": ApiInfo(\"GET\", \"/\", {\"Action\": \"GetVCreativeTaskResult\", \"Version\": \"2018-01-01\"}, {}, {}),\n            # 计量计费\n            \"DescribeVodSpaceTranscodeData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeVodSpaceTranscodeData\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeVodSpaceAIStatisData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeVodSpaceAIStatisData\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeVodSpaceSubtitleStatisData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeVodSpaceSubtitleStatisData\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeVodSpaceDetectStatisData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeVodSpaceDetectStatisData\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeVodSnapshotData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeVodSnapshotData\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeVodSpaceWorkflowDetailData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeVodSpaceWorkflowDetailData\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeVodSpaceEditDetailData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeVodSpaceEditDetailData\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeVodEnhanceImageData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeVodEnhanceImageData\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeVodSpaceEditStatisData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeVodSpaceEditStatisData\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeVodPlayedStatisData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeVodPlayedStatisData\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeVodMostPlayedStatisData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeVodMostPlayedStatisData\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeVodRealtimeMediaData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeVodRealtimeMediaData\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeVodRealtimeMediaDetailData\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeVodRealtimeMediaDetailData\", \"Version\": \"2023-07-01\"}, {}, {}),\n            \"DescribeVodVidTrafficFileLog\": ApiInfo(\"GET\", \"/\", {\"Action\": \"DescribeVodVidTrafficFileLog\", \"Version\": \"2023-07-01\"}, {}, {})\n        }\n        return api_info\n\n    @staticmethod\n    def crc32(file_path):\n        prev = 0\n        for eachLine in open(file_path, \"rb\"):\n            prev = crc32(eachLine, prev)\n        return prev & 0xFFFFFFFF"
  },
  {
    "path": "volcengine/vod/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/vod/helper/FileSectionReader.py",
    "content": "# coding:utf-8\nimport os\n\n\nclass FileSectionReader(object):\n    def __init__(self, file_object, size, init_offset=None, can_reset=False):\n        self.file_object = file_object\n        self.size = size\n        self.offset = 0\n        self.init_offset = init_offset\n        self.can_reset = can_reset\n        if init_offset:\n            self.file_object.seek(init_offset, os.SEEK_SET)\n\n    def read(self, amt=None):\n        if self.offset >= self.size:\n            return ''\n\n        if (amt is None or amt < 0) or (amt + self.offset >= self.size):\n            data = self.file_object.read(self.size - self.offset)\n            self.offset = self.size\n            return data\n\n        self.offset += amt\n        return self.file_object.read(amt)\n\n    @property\n    def len(self):\n        return self.size\n\n    def reset(self):\n        if self.can_reset:\n            self.offset = 0\n            if self.init_offset is not None:\n                self.file_object.seek(self.init_offset, os.SEEK_SET)\n"
  },
  {
    "path": "volcengine/vod/helper/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/vod/models/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/vod/models/business/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/vod/models/business/vod_apps_manage_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/business/vod_apps_manage.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n-volcengine/vod/business/vod_apps_manage.proto\\x12\\x1eVolcengine.Vod.Models.Business\\\"Z\\n\\x13VodGetAppInfoResult\\x12\\r\\n\\x05\\x41ppId\\x18\\x01 \\x01(\\x04\\x12\\x0e\\n\\x06Scheme\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tAppEnName\\x18\\x03 \\x01(\\t\\x12\\x11\\n\\tAppCnName\\x18\\x04 \\x01(\\tB\\xd1\\x01\\n)com.volcengine.service.vod.model.businessB\\rVodAppsManageP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_VODGETAPPINFORESULT = DESCRIPTOR.message_types_by_name['VodGetAppInfoResult']\nVodGetAppInfoResult = _reflection.GeneratedProtocolMessageType('VodGetAppInfoResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETAPPINFORESULT,\n  '__module__' : 'volcengine.vod.business.vod_apps_manage_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetAppInfoResult)\n  })\n_sym_db.RegisterMessage(VodGetAppInfoResult)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.vod.model.businessB\\rVodAppsManageP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _VODGETAPPINFORESULT._serialized_start=81\n  _VODGETAPPINFORESULT._serialized_end=171\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/vod/models/business/vod_callback_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/business/vod_callback.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf.internal import enum_type_wrapper\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n*volcengine/vod/business/vod_callback.proto\\x12\\x1eVolcengine.Vod.Models.Business\\\"\\xd0\\x01\\n\\x0c\\x42ianqueEvent\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tEventType\\x18\\x02 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackName\\x18\\x03 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackType\\x18\\x04 \\x01(\\t\\x12\\x13\\n\\x0b\\x43\\x61llbackUrl\\x18\\x05 \\x01(\\t\\x12\\x17\\n\\x0f\\x43\\x61llbackMessage\\x18\\x07 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x08 \\x01(\\t\\x12\\x11\\n\\tEventTime\\x18\\t \\x01(\\x01\\x12\\x14\\n\\x0c\\x45rrorMessage\\x18\\n \\x01(\\t\\x12\\r\\n\\x05LogId\\x18\\x0b \\x01(\\t\\\"\\x81\\x01\\n\\x0f\\x43\\x61llbackRecords\\x12\\x44\\n\\x0e\\x43\\x61llbackEvents\\x18\\x01 \\x03(\\x0b\\x32,.Volcengine.Vod.Models.Business.BianqueEvent\\x12\\x19\\n\\x11\\x43ontinuationToken\\x18\\x02 \\x01(\\t\\x12\\r\\n\\x05Limit\\x18\\x03 \\x01(\\x05*V\\n\\x13VodCallbackAuthType\\x12\\x1f\\n\\x1bVodCallbackAuthTypeDisabled\\x10\\x00\\x12\\x1e\\n\\x1aVodCallbackAuthTypeEnabled\\x10\\x01\\x42\\xcf\\x01\\n)com.volcengine.service.vod.model.businessB\\x0bVodCallbackP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n_VODCALLBACKAUTHTYPE = DESCRIPTOR.enum_types_by_name['VodCallbackAuthType']\nVodCallbackAuthType = enum_type_wrapper.EnumTypeWrapper(_VODCALLBACKAUTHTYPE)\nVodCallbackAuthTypeDisabled = 0\nVodCallbackAuthTypeEnabled = 1\n\n\n_BIANQUEEVENT = DESCRIPTOR.message_types_by_name['BianqueEvent']\n_CALLBACKRECORDS = DESCRIPTOR.message_types_by_name['CallbackRecords']\nBianqueEvent = _reflection.GeneratedProtocolMessageType('BianqueEvent', (_message.Message,), {\n  'DESCRIPTOR' : _BIANQUEEVENT,\n  '__module__' : 'volcengine.vod.business.vod_callback_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.BianqueEvent)\n  })\n_sym_db.RegisterMessage(BianqueEvent)\n\nCallbackRecords = _reflection.GeneratedProtocolMessageType('CallbackRecords', (_message.Message,), {\n  'DESCRIPTOR' : _CALLBACKRECORDS,\n  '__module__' : 'volcengine.vod.business.vod_callback_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CallbackRecords)\n  })\n_sym_db.RegisterMessage(CallbackRecords)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.vod.model.businessB\\013VodCallbackP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _VODCALLBACKAUTHTYPE._serialized_start=421\n  _VODCALLBACKAUTHTYPE._serialized_end=507\n  _BIANQUEEVENT._serialized_start=79\n  _BIANQUEEVENT._serialized_end=287\n  _CALLBACKRECORDS._serialized_start=290\n  _CALLBACKRECORDS._serialized_end=419\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/vod/models/business/vod_cdn_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/business/vod_cdn.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf.internal import enum_type_wrapper\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\nfrom volcengine.vod.models.business import vod_common_pb2 as volcengine_dot_vod_dot_business_dot_vod__common__pb2\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n%volcengine/vod/business/vod_cdn.proto\\x12\\x1eVolcengine.Vod.Models.Business\\x1a(volcengine/vod/business/vod_common.proto\\\"\\x87\\x02\\n\\x13VodDomainConfigInfo\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12P\\n\\x10PlayInstanceInfo\\x18\\x02 \\x01(\\x0b\\x32\\x36.Volcengine.Vod.Models.Business.VodDomainInstanceInfos\\x12Q\\n\\x11ImageInstanceInfo\\x18\\x03 \\x01(\\x0b\\x32\\x36.Volcengine.Vod.Models.Business.VodDomainInstanceInfos\\x12\\x19\\n\\x11\\x44\\x65\\x66\\x61ultPlayDomain\\x18\\x04 \\x01(\\t\\x12\\r\\n\\x05Total\\x18\\x05 \\x01(\\x03\\x12\\x0e\\n\\x06Offset\\x18\\x06 \\x01(\\x03\\\"\\xb5\\x01\\n\\x16VodDomainInstanceInfos\\x12L\\n\\rByteInstances\\x18\\x01 \\x03(\\x0b\\x32\\x35.Volcengine.Vod.Models.Business.VodDomainInstanceInfo\\x12M\\n\\x0eOtherInstances\\x18\\x02 \\x03(\\x0b\\x32\\x35.Volcengine.Vod.Models.Business.VodDomainInstanceInfo\\\"X\\n\\x15VodDomainInstanceInfo\\x12?\\n\\x07\\x44omains\\x18\\x02 \\x03(\\x0b\\x32..Volcengine.Vod.Models.Business.VodDomainoInfo\\\"\\xde\\x02\\n\\x0eVodDomainoInfo\\x12\\x0e\\n\\x06\\x44omain\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05\\x43name\\x18\\x02 \\x01(\\t\\x12\\x14\\n\\x0c\\x43onfigStatus\\x18\\x03 \\x01(\\t\\x12\\x13\\n\\x0b\\x43nameStatus\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x05 \\x01(\\t\\x12M\\n\\x0b\\x43\\x65rtificate\\x18\\x06 \\x01(\\x0b\\x32\\x38.Volcengine.Vod.Models.Business.VodDomainCertificateInfo\\x12\\x12\\n\\nCreateTime\\x18\\x07 \\x01(\\t\\x12\\x12\\n\\nUpdateTime\\x18\\x08 \\x01(\\t\\x12\\x0e\\n\\x06Region\\x18\\t \\x01(\\t\\x12\\x44\\n\\x07Sources\\x18\\n \\x03(\\x0b\\x32\\x33.Volcengine.Vod.Models.Business.VodDomainSourceInfo\\x12\\x12\\n\\nLockStatus\\x18\\x0b \\x01(\\t\\x12\\x11\\n\\tCdnStatus\\x18\\x0c \\x01(\\t\\\"\\xca\\x01\\n\\x18VodDomainCertificateInfo\\x12\\x15\\n\\rCertificateId\\x18\\x01 \\x01(\\t\\x12\\x17\\n\\x0f\\x43\\x65rtificateName\\x18\\x02 \\x01(\\t\\x12\\x16\\n\\x0e\\x43\\x65rtificatePub\\x18\\x03 \\x01(\\t\\x12\\x16\\n\\x0e\\x43\\x65rtificatePri\\x18\\x04 \\x01(\\t\\x12\\x13\\n\\x0bHttpsStatus\\x18\\x05 \\x01(\\t\\x12\\x11\\n\\tExpiredAt\\x18\\x06 \\x01(\\t\\x12&\\n\\x1e\\x43\\x65rtificateCenterCertificateId\\x18\\x07 \\x01(\\t\\\"(\\n\\x16VodCreateCdnTaskResult\\x12\\x0e\\n\\x06TaskId\\x18\\x01 \\x01(\\t\\\"\\x89\\x01\\n\\x0eVodContentInfo\\x12\\x0e\\n\\x06ItemId\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Url\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x03 \\x01(\\t\\x12\\x10\\n\\x08TaskType\\x18\\x04 \\x01(\\t\\x12\\x17\\n\\x0f\\x43reateTimestamp\\x18\\x05 \\x01(\\x05\\x12\\x0e\\n\\x06TaskId\\x18\\x06 \\x01(\\t\\x12\\x0f\\n\\x07Message\\x18\\x07 \\x01(\\t\\\"\\x8f\\x01\\n\\x10VodCdnTaskResult\\x12\\x12\\n\\nTotalCount\\x18\\x01 \\x01(\\x05\\x12\\x0f\\n\\x07PageNum\\x18\\x02 \\x01(\\x05\\x12\\x10\\n\\x08PageSize\\x18\\x03 \\x01(\\x05\\x12\\x44\\n\\x0c\\x43ontentInfos\\x18\\x04 \\x03(\\x0b\\x32..Volcengine.Vod.Models.Business.VodContentInfo\\\"\\x7f\\n\\x16VodCdnAccessLogElement\\x12\\x13\\n\\x0b\\x44ownloadUrl\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileSize\\x18\\x02 \\x01(\\x03\\x12\\x10\\n\\x08\\x46ileName\\x18\\x03 \\x01(\\t\\x12\\x16\\n\\x0eStartTimestamp\\x18\\x04 \\x01(\\x05\\x12\\x14\\n\\x0c\\x45ndTimestamp\\x18\\x05 \\x01(\\x05\\\"\\xa5\\x01\\n\\x13VodCdnAccessLogInfo\\x12\\x0e\\n\\x06\\x44omain\\x18\\x01 \\x01(\\t\\x12G\\n\\x07LogList\\x18\\x02 \\x03(\\x0b\\x32\\x36.Volcengine.Vod.Models.Business.VodCdnAccessLogElement\\x12\\x0f\\n\\x07PageNum\\x18\\x03 \\x01(\\x03\\x12\\x10\\n\\x08PageSize\\x18\\x04 \\x01(\\x03\\x12\\x12\\n\\nTotalCount\\x18\\x05 \\x01(\\x03\\\"^\\n\\x19VodListCdnAccessLogResult\\x12\\x41\\n\\x04Logs\\x18\\x01 \\x03(\\x0b\\x32\\x33.Volcengine.Vod.Models.Business.VodCdnAccessLogInfo\\\"B\\n\\x19VodCdnTopAccessUrlElement\\x12\\x0b\\n\\x03Url\\x18\\x01 \\x01(\\t\\x12\\n\\n\\x02Pv\\x18\\x02 \\x01(\\x03\\x12\\x0c\\n\\x04\\x46lux\\x18\\x03 \\x01(\\x03\\\"k\\n\\x1cVodListCdnTopAccessUrlResult\\x12K\\n\\x08UrlInfos\\x18\\x01 \\x03(\\x0b\\x32\\x39.Volcengine.Vod.Models.Business.VodCdnTopAccessUrlElement\\\"8\\n\\x16VodCdnTopAccessElement\\x12\\x0f\\n\\x07ItemKey\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05Value\\x18\\x02 \\x01(\\x01\\\"f\\n\\x19VodListCdnTopAccessResult\\x12I\\n\\tItemInfos\\x18\\x01 \\x03(\\x0b\\x32\\x36.Volcengine.Vod.Models.Business.VodCdnTopAccessElement\\\"3\\n\\x10VodBandwidthData\\x12\\x0c\\n\\x04Time\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tBandwidth\\x18\\x02 \\x01(\\x01\\\"\\xff\\x02\\n\\'VodDescribeVodDomainBandwidthDataResult\\x12\\x12\\n\\nDomainList\\x18\\x01 \\x03(\\t\\x12\\x19\\n\\x11\\x44omainInSpaceList\\x18\\x02 \\x03(\\t\\x12\\x11\\n\\tStartTime\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x04 \\x01(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x05 \\x01(\\x05\\x12\\x15\\n\\rBandwidthType\\x18\\x06 \\x01(\\t\\x12\\x0c\\n\\x04\\x41rea\\x18\\x07 \\x01(\\t\\x12\\x12\\n\\nRegionList\\x18\\x08 \\x03(\\t\\x12\\x15\\n\\rPeakBandwidth\\x18\\t \\x01(\\x01\\x12\\x19\\n\\x11PeakBandwidthTime\\x18\\n \\x01(\\t\\x12\\x17\\n\\x0fPeak95Bandwidth\\x18\\x0b \\x01(\\x01\\x12\\x1b\\n\\x13Peak95BandwidthTime\\x18\\x0c \\x01(\\t\\x12K\\n\\x11\\x42\\x61ndwidthDataList\\x18\\r \\x03(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.VodBandwidthData\\\"\\xb4\\x01\\n\\x14VodCdnStatisticsData\\x12\\x0c\\n\\x04Name\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06Metric\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08\\x44\\x61taType\\x18\\x03 \\x01(\\t\\x12\\x38\\n\\x06Points\\x18\\x04 \\x03(\\x0b\\x32(.Volcengine.Vod.Models.Business.VodPoint\\x12\\x0e\\n\\x06Region\\x18\\x05 \\x01(\\t\\x12\\x0b\\n\\x03Isp\\x18\\x06 \\x01(\\t\\x12\\x15\\n\\rBillingRegion\\x18\\x07 \\x01(\\t\\\"\\x80\\x01\\n\\x1cVodCdnStatisticsCommonResult\\x12\\x43\\n\\x05\\x44\\x61tas\\x18\\x01 \\x03(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.VodCdnStatisticsData\\x12\\x1b\\n\\x13NoPermissionDomains\\x18\\x02 \\x03(\\t\\\"H\\n\\x0cVodCdnIpInfo\\x12\\n\\n\\x02Ip\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05\\x43\\x64nIp\\x18\\x02 \\x01(\\x08\\x12\\x10\\n\\x08Location\\x18\\x03 \\x01(\\t\\x12\\x0b\\n\\x03Isp\\x18\\x04 \\x01(\\t\\\"V\\n\\x17VodDescribeIpInfoResult\\x12;\\n\\x05Infos\\x18\\x01 \\x03(\\x0b\\x32,.Volcengine.Vod.Models.Business.VodCdnIpInfo\\\"/\\n\\x0eVodTrafficData\\x12\\x0c\\n\\x04Time\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07Traffic\\x18\\x02 \\x01(\\x01\\\"\\xa5\\x02\\n%VodDescribeVodDomainTrafficDataResult\\x12\\x12\\n\\nDomainList\\x18\\x01 \\x03(\\t\\x12\\x19\\n\\x11\\x44omainInSpaceList\\x18\\x02 \\x03(\\t\\x12\\x11\\n\\tStartTime\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x04 \\x01(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x05 \\x01(\\x05\\x12\\x13\\n\\x0bTrafficType\\x18\\x06 \\x01(\\t\\x12\\x0c\\n\\x04\\x41rea\\x18\\x07 \\x01(\\t\\x12\\x12\\n\\nRegionList\\x18\\x08 \\x03(\\t\\x12\\x14\\n\\x0cTotalTraffic\\x18\\t \\x01(\\x01\\x12G\\n\\x0fTrafficDataList\\x18\\n \\x03(\\x0b\\x32..Volcengine.Vod.Models.Business.VodTrafficData\\\"\\xac\\x02\\n\\x13VodDomainSourceInfo\\x12U\\n\\x11SourceStationType\\x18\\x01 \\x01(\\x0e\\x32:.Volcengine.Vod.Models.Business.VodDomainSourceStationType\\x12\\x63\\n\\x18SourceStationAddressType\\x18\\x02 \\x01(\\x0e\\x32\\x41.Volcengine.Vod.Models.Business.VodDomainSourceStationAddressType\\x12\\x0e\\n\\x06Origin\\x18\\x03 \\x01(\\t\\x12I\\n\\x06\\x42ucket\\x18\\x04 \\x01(\\x0b\\x32\\x39.Volcengine.Vod.Models.Business.VodDomainOriginBucketInfo\\\"_\\n\\x19VodDomainOriginBucketInfo\\x12\\x12\\n\\nBucketName\\x18\\x01 \\x01(\\t\\x12\\x18\\n\\x10\\x42ucketSourceType\\x18\\x02 \\x01(\\t\\x12\\x14\\n\\x0c\\x42ucketRegion\\x18\\x03 \\x01(\\t\\\"+\\n\\x19VodSubmitBlockTasksResult\\x12\\x0e\\n\\x06TaskID\\x18\\x01 \\x01(\\t\\\"\\x8c\\x01\\n\\x1dVodGetContentBlockTasksResult\\x12\\r\\n\\x05Total\\x18\\x01 \\x01(\\x03\\x12\\x0f\\n\\x07PageNum\\x18\\x02 \\x01(\\x03\\x12\\x10\\n\\x08PageSize\\x18\\x03 \\x01(\\x03\\x12\\x39\\n\\x04\\x44\\x61ta\\x18\\x04 \\x03(\\x0b\\x32+.Volcengine.Vod.Models.Business.ContentTask\\\"`\\n\\x0b\\x43ontentTask\\x12\\x0b\\n\\x03Url\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08TaskType\\x18\\x03 \\x01(\\t\\x12\\x12\\n\\nCreateTime\\x18\\x04 \\x01(\\x03\\x12\\x0e\\n\\x06TaskID\\x18\\x05 \\x01(\\t\\\"\\x16\\n\\x04IPv6\\x12\\x0e\\n\\x06Switch\\x18\\x01 \\x01(\\x08\\\"\\x90\\x01\\n\\nOriginLine\\x12\\x0f\\n\\x07\\x41\\x64\\x64ress\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08HttpPort\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tHttpsPort\\x18\\x03 \\x01(\\t\\x12\\x14\\n\\x0cInstanceType\\x18\\x04 \\x01(\\t\\x12\\x12\\n\\nOriginHost\\x18\\x05 \\x01(\\t\\x12\\x12\\n\\nOriginType\\x18\\x06 \\x01(\\t\\x12\\x0e\\n\\x06Weight\\x18\\x07 \\x01(\\t\\\"O\\n\\x0cOriginAction\\x12?\\n\\x0bOriginLines\\x18\\x01 \\x03(\\x0b\\x32*.Volcengine.Vod.Models.Business.OriginLine\\\"S\\n\\rCdnOriginRule\\x12\\x42\\n\\x0cOriginAction\\x18\\x01 \\x01(\\x0b\\x32,.Volcengine.Vod.Models.Business.OriginAction\\\"w\\n\\x19VodResponseHeaderInstance\\x12\\x0e\\n\\x06\\x41\\x63tion\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Key\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tValueType\\x18\\x03 \\x01(\\t\\x12\\x1b\\n\\x13\\x41\\x63\\x63\\x65ssOriginControl\\x18\\x04 \\x01(\\x08\\x12\\r\\n\\x05Value\\x18\\x05 \\x01(\\t\\\"u\\n\\x17VodResponseHeaderAction\\x12Z\\n\\x17ResponseHeaderInstances\\x18\\x01 \\x03(\\x0b\\x32\\x39.Volcengine.Vod.Models.Business.VodResponseHeaderInstance\\\"n\\n\\x15VodResponseHeaderRule\\x12U\\n\\x14ResponseHeaderAction\\x18\\x01 \\x01(\\x0b\\x32\\x37.Volcengine.Vod.Models.Business.VodResponseHeaderAction\\\"i\\n\\x18VodResponseHeaderControl\\x12M\\n\\x0eResponseHeader\\x18\\x01 \\x03(\\x0b\\x32\\x35.Volcengine.Vod.Models.Business.VodResponseHeaderRule\\\"E\\n\\x15VodTosAuthInformation\\x12\\x13\\n\\x0b\\x41\\x63\\x63\\x65ssKeyId\\x18\\x01 \\x01(\\t\\x12\\x17\\n\\x0f\\x41\\x63\\x63\\x65ssKeySecret\\x18\\x02 \\x01(\\t\\\"\\x8b\\x01\\n\\x14VodPrivateBucketAuth\\x12\\x0e\\n\\x06Switch\\x18\\x01 \\x01(\\x08\\x12\\x10\\n\\x08\\x41uthType\\x18\\x02 \\x01(\\t\\x12Q\\n\\x12TosAuthInformation\\x18\\x03 \\x01(\\x0b\\x32\\x35.Volcengine.Vod.Models.Business.VodTosAuthInformation\\\"\\xde\\x02\\n\\x11VodOriginalConfig\\x12\\x0f\\n\\x07Origins\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nOriginType\\x18\\x02 \\x01(\\t\\x12\\x63\\n\\x18SourceStationAddressType\\x18\\x03 \\x01(\\x0e\\x32\\x41.Volcengine.Vod.Models.Business.VodDomainSourceStationAddressType\\x12\\x0c\\n\\x04Host\\x18\\x04 \\x01(\\t\\x12\\x1b\\n\\x13PrivateBucketAccess\\x18\\x05 \\x01(\\x08\\x12O\\n\\x11PrivateBucketAuth\\x18\\x06 \\x01(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.VodPrivateBucketAuth\\x12\\x0e\\n\\x06Region\\x18\\x07 \\x01(\\t\\x12\\x10\\n\\x08HttpPort\\x18\\x08 \\x01(\\t\\x12\\x11\\n\\tHttpsPort\\x18\\t \\x01(\\t\\x12\\x0e\\n\\x06Weight\\x18\\n \\x01(\\t\\\"~\\n\\x12VodOriginalControl\\x12\\x42\\n\\x07Origins\\x18\\x01 \\x03(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.VodOriginalConfig\\x12\\x0c\\n\\x04Host\\x18\\x02 \\x01(\\t\\x12\\x16\\n\\x0eOriginProtocol\\x18\\x03 \\x01(\\t\\\"\\xce\\n\\n\\x0fVodDomainConfig\\x12W\\n\\x15ResponseHeaderControl\\x18\\x01 \\x01(\\x0b\\x32\\x38.Volcengine.Vod.Models.Business.VodResponseHeaderControl\\x12K\\n\\x0fOriginalControl\\x18\\x02 \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.VodOriginalControl\\x12?\\n\\x05\\x43\\x61\\x63he\\x18\\x03 \\x03(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.CacheControlRule\\x12>\\n\\x08\\x43\\x61\\x63heKey\\x18\\x04 \\x03(\\x0b\\x32,.Volcengine.Vod.Models.Business.CacheKeyRule\\x12\\x45\\n\\x0b\\x43ompression\\x18\\x05 \\x01(\\x0b\\x32+.Volcengine.Vod.Models.Business.CompressionH\\x00\\x88\\x01\\x01\\x12S\\n\\x12\\x44ownloadSpeedLimit\\x18\\x06 \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.DownloadSpeedLimitH\\x01\\x88\\x01\\x01\\x12\\x39\\n\\x05HTTPS\\x18\\x07 \\x01(\\x0b\\x32%.Volcengine.Vod.Models.Business.HTTPSH\\x02\\x88\\x01\\x01\\x12S\\n\\x12HttpForcedRedirect\\x18\\x08 \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.HttpForcedRedirectH\\x03\\x88\\x01\\x01\\x12:\\n\\x04IPv6\\x18\\t \\x01(\\x0b\\x32\\'.Volcengine.Vod.Models.Business.CdnIPv6H\\x04\\x88\\x01\\x01\\x12\\x1b\\n\\x0e\\x46ollowRedirect\\x18\\n \\x01(\\x08H\\x05\\x88\\x01\\x01\\x12\\x18\\n\\x0bOriginRange\\x18\\x0b \\x01(\\x08H\\x06\\x88\\x01\\x01\\x12G\\n\\x0cIpAccessRule\\x18\\x0c \\x01(\\x0b\\x32,.Volcengine.Vod.Models.Business.IpAccessRuleH\\x07\\x88\\x01\\x01\\x12Q\\n\\x11RefererAccessRule\\x18\\r \\x01(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.RefererAccessRuleH\\x08\\x88\\x01\\x01\\x12H\\n\\rRequestHeader\\x18\\x0e \\x03(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.RequestHeaderRule\\x12N\\n\\x0cUaAccessRule\\x18\\x0f \\x01(\\x0b\\x32\\x33.Volcengine.Vod.Models.Business.UserAgentAccessRuleH\\t\\x88\\x01\\x01\\x12N\\n\\x14OriginRewriteControl\\x18\\x12 \\x01(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.VodOriginRewrite\\x12\\x43\\n\\tOriginArg\\x18\\x13 \\x03(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.VodOriginArgRuleB\\x0e\\n\\x0c_CompressionB\\x15\\n\\x13_DownloadSpeedLimitB\\x08\\n\\x06_HTTPSB\\x15\\n\\x13_HttpForcedRedirectB\\x07\\n\\x05_IPv6B\\x11\\n\\x0f_FollowRedirectB\\x0e\\n\\x0c_OriginRangeB\\x0f\\n\\r_IpAccessRuleB\\x14\\n\\x12_RefererAccessRuleB\\x0f\\n\\r_UaAccessRule\\\"|\\n\\x0c\\x43\\x64nCondition\\x12\\x44\\n\\rConditionRule\\x18\\x01 \\x03(\\x0b\\x32-.Volcengine.Vod.Models.Business.ConditionRule\\x12\\x17\\n\\nConnective\\x18\\x02 \\x01(\\tH\\x00\\x88\\x01\\x01\\x42\\r\\n\\x0b_Connective\\\"\\x8d\\x01\\n\\rConditionRule\\x12\\x13\\n\\x06Object\\x18\\x01 \\x01(\\tH\\x00\\x88\\x01\\x01\\x12\\x15\\n\\x08Operator\\x18\\x02 \\x01(\\tH\\x01\\x88\\x01\\x01\\x12\\x11\\n\\x04Type\\x18\\x03 \\x01(\\tH\\x02\\x88\\x01\\x01\\x12\\x12\\n\\x05Value\\x18\\x04 \\x01(\\tH\\x03\\x88\\x01\\x01\\x42\\t\\n\\x07_ObjectB\\x0b\\n\\t_OperatorB\\x07\\n\\x05_TypeB\\x08\\n\\x06_Value\\\"\\xbd\\x01\\n\\x10\\x43\\x61\\x63heControlRule\\x12\\x45\\n\\x0b\\x43\\x61\\x63heAction\\x18\\x01 \\x01(\\x0b\\x32+.Volcengine.Vod.Models.Business.CacheActionH\\x00\\x88\\x01\\x01\\x12\\x44\\n\\tCondition\\x18\\x02 \\x01(\\x0b\\x32,.Volcengine.Vod.Models.Business.CdnConditionH\\x01\\x88\\x01\\x01\\x42\\x0e\\n\\x0c_CacheActionB\\x0c\\n\\n_Condition\\\"\\x9d\\x01\\n\\x0b\\x43\\x61\\x63heAction\\x12\\x13\\n\\x06\\x41\\x63tion\\x18\\x01 \\x01(\\tH\\x00\\x88\\x01\\x01\\x12\\x1a\\n\\rDefaultPolicy\\x18\\x02 \\x01(\\tH\\x01\\x88\\x01\\x01\\x12\\x17\\n\\nIgnoreCase\\x18\\x03 \\x01(\\x08H\\x02\\x88\\x01\\x01\\x12\\x10\\n\\x03Ttl\\x18\\x04 \\x01(\\x03H\\x03\\x88\\x01\\x01\\x42\\t\\n\\x07_ActionB\\x10\\n\\x0e_DefaultPolicyB\\r\\n\\x0b_IgnoreCaseB\\x06\\n\\x04_Ttl\\\"\\xc2\\x01\\n\\x0c\\x43\\x61\\x63heKeyRule\\x12K\\n\\x0e\\x43\\x61\\x63heKeyAction\\x18\\x01 \\x01(\\x0b\\x32..Volcengine.Vod.Models.Business.CacheKeyActionH\\x00\\x88\\x01\\x01\\x12\\x44\\n\\tCondition\\x18\\x02 \\x01(\\x0b\\x32,.Volcengine.Vod.Models.Business.CdnConditionH\\x01\\x88\\x01\\x01\\x42\\x11\\n\\x0f_CacheKeyActionB\\x0c\\n\\n_Condition\\\"_\\n\\x0e\\x43\\x61\\x63heKeyAction\\x12M\\n\\x12\\x43\\x61\\x63heKeyComponents\\x18\\x01 \\x03(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.CacheKeyComponent\\\"\\xa1\\x01\\n\\x11\\x43\\x61\\x63heKeyComponent\\x12\\x13\\n\\x06\\x41\\x63tion\\x18\\x01 \\x01(\\tH\\x00\\x88\\x01\\x01\\x12\\x17\\n\\nIgnoreCase\\x18\\x02 \\x01(\\x08H\\x01\\x88\\x01\\x01\\x12\\x13\\n\\x06Object\\x18\\x03 \\x01(\\tH\\x02\\x88\\x01\\x01\\x12\\x16\\n\\tSubobject\\x18\\x04 \\x01(\\tH\\x03\\x88\\x01\\x01\\x42\\t\\n\\x07_ActionB\\r\\n\\x0b_IgnoreCaseB\\t\\n\\x07_ObjectB\\x0c\\n\\n_Subobject\\\"\\xf4\\x01\\n\\x11\\x43ompressionAction\\x12\\x1e\\n\\x11\\x43ompressionFormat\\x18\\x01 \\x01(\\tH\\x00\\x88\\x01\\x01\\x12\\x1e\\n\\x11\\x43ompressionTarget\\x18\\x02 \\x01(\\tH\\x01\\x88\\x01\\x01\\x12\\x17\\n\\x0f\\x43ompressionType\\x18\\x03 \\x03(\\t\\x12\\x1a\\n\\rMaxFileSizeKB\\x18\\x04 \\x01(\\x03H\\x02\\x88\\x01\\x01\\x12\\x1a\\n\\rMinFileSizeKB\\x18\\x05 \\x01(\\x03H\\x03\\x88\\x01\\x01\\x42\\x14\\n\\x12_CompressionFormatB\\x14\\n\\x12_CompressionTargetB\\x10\\n\\x0e_MaxFileSizeKBB\\x10\\n\\x0e_MinFileSizeKB\\\"\\xce\\x01\\n\\x0f\\x43ompressionRule\\x12Q\\n\\x11\\x43ompressionAction\\x18\\x01 \\x01(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.CompressionActionH\\x00\\x88\\x01\\x01\\x12\\x44\\n\\tCondition\\x18\\x02 \\x01(\\x0b\\x32,.Volcengine.Vod.Models.Business.CdnConditionH\\x01\\x88\\x01\\x01\\x42\\x14\\n\\x12_CompressionActionB\\x0c\\n\\n_Condition\\\"x\\n\\x0b\\x43ompression\\x12I\\n\\x10\\x43ompressionRules\\x18\\x01 \\x03(\\x0b\\x32/.Volcengine.Vod.Models.Business.CompressionRule\\x12\\x13\\n\\x06Switch\\x18\\x02 \\x01(\\x08H\\x00\\x88\\x01\\x01\\x42\\t\\n\\x07_Switch\\\"z\\n\\x0eSpeedLimitTime\\x12\\x16\\n\\tBeginTime\\x18\\x01 \\x01(\\tH\\x00\\x88\\x01\\x01\\x12\\x14\\n\\x07\\x44\\x61yWeek\\x18\\x02 \\x01(\\tH\\x01\\x88\\x01\\x01\\x12\\x14\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\tH\\x02\\x88\\x01\\x01\\x42\\x0c\\n\\n_BeginTimeB\\n\\n\\x08_DayWeekB\\n\\n\\x08_EndTime\\\"\\xe4\\x01\\n\\x18\\x44ownloadSpeedLimitAction\\x12\\x1b\\n\\x0eSpeedLimitRate\\x18\\x01 \\x01(\\x03H\\x00\\x88\\x01\\x01\\x12 \\n\\x13SpeedLimitRateAfter\\x18\\x02 \\x01(\\x03H\\x01\\x88\\x01\\x01\\x12K\\n\\x0eSpeedLimitTime\\x18\\x03 \\x01(\\x0b\\x32..Volcengine.Vod.Models.Business.SpeedLimitTimeH\\x02\\x88\\x01\\x01\\x42\\x11\\n\\x0f_SpeedLimitRateB\\x16\\n\\x14_SpeedLimitRateAfterB\\x11\\n\\x0f_SpeedLimitTime\\\"\\xea\\x01\\n\\x16\\x44ownloadSpeedLimitRule\\x12\\x44\\n\\tCondition\\x18\\x01 \\x01(\\x0b\\x32,.Volcengine.Vod.Models.Business.CdnConditionH\\x00\\x88\\x01\\x01\\x12_\\n\\x18\\x44ownloadSpeedLimitAction\\x18\\x02 \\x01(\\x0b\\x32\\x38.Volcengine.Vod.Models.Business.DownloadSpeedLimitActionH\\x01\\x88\\x01\\x01\\x42\\x0c\\n\\n_ConditionB\\x1b\\n\\x19_DownloadSpeedLimitAction\\\"\\x8d\\x01\\n\\x12\\x44ownloadSpeedLimit\\x12W\\n\\x17\\x44ownloadSpeedLimitRules\\x18\\x01 \\x03(\\x0b\\x32\\x36.Volcengine.Vod.Models.Business.DownloadSpeedLimitRule\\x12\\x13\\n\\x06Switch\\x18\\x02 \\x01(\\x08H\\x00\\x88\\x01\\x01\\x42\\t\\n\\x07_Switch\\\"t\\n\\x0e\\x46orcedRedirect\\x12!\\n\\x14\\x45nableForcedRedirect\\x18\\x01 \\x01(\\x08H\\x00\\x88\\x01\\x01\\x12\\x17\\n\\nStatusCode\\x18\\x02 \\x01(\\tH\\x01\\x88\\x01\\x01\\x42\\x17\\n\\x15_EnableForcedRedirectB\\r\\n\\x0b_StatusCode\\\"\\x87\\x02\\n\\x05HTTPS\\x12\\x13\\n\\x06Switch\\x18\\x01 \\x01(\\x08H\\x00\\x88\\x01\\x01\\x12?\\n\\x08\\x43\\x65rtInfo\\x18\\x02 \\x01(\\x0b\\x32(.Volcengine.Vod.Models.Business.CertInfoH\\x01\\x88\\x01\\x01\\x12K\\n\\x0e\\x46orcedRedirect\\x18\\x03 \\x01(\\x0b\\x32..Volcengine.Vod.Models.Business.ForcedRedirectH\\x02\\x88\\x01\\x01\\x12\\x12\\n\\x05HTTP2\\x18\\x04 \\x01(\\x08H\\x03\\x88\\x01\\x01\\x12\\x12\\n\\nTlsVersion\\x18\\x05 \\x03(\\tB\\t\\n\\x07_SwitchB\\x0b\\n\\t_CertInfoB\\x11\\n\\x0f_ForcedRedirectB\\x08\\n\\x06_HTTP2\\\"*\\n\\x08\\x43\\x65rtInfo\\x12\\x13\\n\\x06\\x43\\x65rtId\\x18\\x01 \\x01(\\tH\\x00\\x88\\x01\\x01\\x42\\t\\n\\x07_CertId\\\"x\\n\\x12HttpForcedRedirect\\x12!\\n\\x14\\x45nableForcedRedirect\\x18\\x01 \\x01(\\x08H\\x00\\x88\\x01\\x01\\x12\\x17\\n\\nStatusCode\\x18\\x02 \\x01(\\tH\\x01\\x88\\x01\\x01\\x42\\x17\\n\\x15_EnableForcedRedirectB\\r\\n\\x0b_StatusCode\\\")\\n\\x07\\x43\\x64nIPv6\\x12\\x13\\n\\x06Switch\\x18\\x01 \\x01(\\x08H\\x00\\x88\\x01\\x01\\x42\\t\\n\\x07_Switch\\\"\\xd6\\x01\\n\\x11RequestHeaderRule\\x12\\x44\\n\\tCondition\\x18\\x01 \\x01(\\x0b\\x32,.Volcengine.Vod.Models.Business.CdnConditionH\\x00\\x88\\x01\\x01\\x12U\\n\\x13RequestHeaderAction\\x18\\x02 \\x01(\\x0b\\x32\\x33.Volcengine.Vod.Models.Business.RequestHeaderActionH\\x01\\x88\\x01\\x01\\x42\\x0c\\n\\n_ConditionB\\x16\\n\\x14_RequestHeaderAction\\\"l\\n\\x13RequestHeaderAction\\x12U\\n\\x16RequestHeaderInstances\\x18\\x01 \\x03(\\x0b\\x32\\x35.Volcengine.Vod.Models.Business.RequestHeaderInstance\\\"\\x95\\x01\\n\\x15RequestHeaderInstance\\x12\\x13\\n\\x06\\x41\\x63tion\\x18\\x01 \\x01(\\tH\\x00\\x88\\x01\\x01\\x12\\x10\\n\\x03Key\\x18\\x02 \\x01(\\tH\\x01\\x88\\x01\\x01\\x12\\x12\\n\\x05Value\\x18\\x03 \\x01(\\tH\\x02\\x88\\x01\\x01\\x12\\x16\\n\\tValueType\\x18\\x04 \\x01(\\tH\\x03\\x88\\x01\\x01\\x42\\t\\n\\x07_ActionB\\x06\\n\\x04_KeyB\\x08\\n\\x06_ValueB\\x0c\\n\\n_ValueType\\\"^\\n\\x0cIpAccessRule\\x12\\n\\n\\x02Ip\\x18\\x01 \\x03(\\t\\x12\\x15\\n\\x08RuleType\\x18\\x02 \\x01(\\tH\\x00\\x88\\x01\\x01\\x12\\x13\\n\\x06Switch\\x18\\x04 \\x01(\\x08H\\x01\\x88\\x01\\x01\\x42\\x0b\\n\\t_RuleTypeB\\t\\n\\x07_Switch\\\"<\\n\\x12\\x43ommonGlobalConfig\\x12\\x17\\n\\nConfigName\\x18\\x01 \\x01(\\tH\\x00\\x88\\x01\\x01\\x42\\r\\n\\x0b_ConfigName\\\",\\n\\nMultiRange\\x12\\x13\\n\\x06Switch\\x18\\x01 \\x01(\\x08H\\x00\\x88\\x01\\x01\\x42\\t\\n\\x07_Switch\\\"\\xbc\\x01\\n\\x13UserAgentAccessRule\\x12\\x17\\n\\nAllowEmpty\\x18\\x01 \\x01(\\x08H\\x00\\x88\\x01\\x01\\x12\\x17\\n\\nIgnoreCase\\x18\\x02 \\x01(\\x08H\\x01\\x88\\x01\\x01\\x12\\x15\\n\\x08RuleType\\x18\\x03 \\x01(\\tH\\x02\\x88\\x01\\x01\\x12\\x13\\n\\x06Switch\\x18\\x04 \\x01(\\x08H\\x03\\x88\\x01\\x01\\x12\\x11\\n\\tUserAgent\\x18\\x05 \\x03(\\tB\\r\\n\\x0b_AllowEmptyB\\r\\n\\x0b_IgnoreCaseB\\x0b\\n\\t_RuleTypeB\\t\\n\\x07_Switch\\\"\\xeb\\x01\\n\\x11RefererAccessRule\\x12\\x17\\n\\nAllowEmpty\\x18\\x01 \\x01(\\x08H\\x00\\x88\\x01\\x01\\x12\\x10\\n\\x08Referers\\x18\\x02 \\x03(\\t\\x12G\\n\\x0cReferersType\\x18\\x03 \\x01(\\x0b\\x32,.Volcengine.Vod.Models.Business.ReferersTypeH\\x01\\x88\\x01\\x01\\x12\\x15\\n\\x08RuleType\\x18\\x04 \\x01(\\tH\\x02\\x88\\x01\\x01\\x12\\x13\\n\\x06Switch\\x18\\x06 \\x01(\\x08H\\x03\\x88\\x01\\x01\\x42\\r\\n\\x0b_AllowEmptyB\\x0f\\n\\r_ReferersTypeB\\x0b\\n\\t_RuleTypeB\\t\\n\\x07_Switch\\\"g\\n\\x0cReferersType\\x12H\\n\\nCommonType\\x18\\x01 \\x01(\\x0b\\x32/.Volcengine.Vod.Models.Business.CommonReferTypeH\\x00\\x88\\x01\\x01\\x42\\r\\n\\x0b_CommonType\\\"w\\n\\x0f\\x43ommonReferType\\x12\\x17\\n\\nIgnoreCase\\x18\\x01 \\x01(\\x08H\\x00\\x88\\x01\\x01\\x12\\x19\\n\\x0cIgnoreScheme\\x18\\x02 \\x01(\\x08H\\x01\\x88\\x01\\x01\\x12\\x10\\n\\x08Referers\\x18\\x03 \\x03(\\tB\\r\\n\\x0b_IgnoreCaseB\\x0f\\n\\r_IgnoreScheme\\\"q\\n\\x12VodDomainBasicInfo\\x12\\x0e\\n\\x06\\x44omain\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05\\x43name\\x18\\x02 \\x01(\\t\\x12\\x14\\n\\x0c\\x43onfigStatus\\x18\\x03 \\x01(\\t\\x12\\x12\\n\\nCreateTime\\x18\\x04 \\x01(\\t\\x12\\x12\\n\\nLockStatus\\x18\\x05 \\x01(\\t\\\"\\xb7\\x01\\n\\x1dVodDescribeDomainConfigResult\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x42\\n\\x06\\x44omain\\x18\\x02 \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.VodDomainBasicInfo\\x12?\\n\\x06\\x43onfig\\x18\\x03 \\x01(\\x0b\\x32/.Volcengine.Vod.Models.Business.VodDomainConfig\\\"\\xa1\\x01\\n\\x17VodPCDNDomainConfigInfo\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12T\\n\\x10PCDNInstanceInfo\\x18\\x02 \\x01(\\x0b\\x32:.Volcengine.Vod.Models.Business.VodPCDNDomainInstanceInfos\\x12\\r\\n\\x05Total\\x18\\x03 \\x01(\\x03\\x12\\x0e\\n\\x06Offset\\x18\\x04 \\x01(\\x03\\\"`\\n\\x1aVodPCDNDomainInstanceInfos\\x12\\x42\\n\\x07\\x44omains\\x18\\x01 \\x03(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.VodPCDNDomainInfo\\\"[\\n\\x11VodPCDNDomainInfo\\x12\\x0e\\n\\x06\\x44omain\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nCreateTime\\x18\\x03 \\x01(\\t\\x12\\x12\\n\\nUpdateTime\\x18\\x04 \\x01(\\t\\\"H\\n\\x1aVodVerifyDomainOwnerResult\\x12\\x14\\n\\x0cVerifyResult\\x18\\x01 \\x01(\\x08\\x12\\x14\\n\\x0c\\x45rrorMessage\\x18\\x02 \\x01(\\t\\\"O\\n\\x16VodDomainDNSVerifyInfo\\x12\\x0c\\n\\x04Host\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nRecordType\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0bRecordValue\\x18\\x03 \\x01(\\t\\\"c\\n\\x17VodDomainFileVerifyInfo\\x12\\x15\\n\\rVerifyDomains\\x18\\x01 \\x03(\\t\\x12\\x16\\n\\x0eVerifyFileName\\x18\\x02 \\x01(\\t\\x12\\x19\\n\\x11VerifyFileContent\\x18\\x03 \\x01(\\t\\\"\\xda\\x01\\n$VodDescribeDomainVerifyContentResult\\x12\\x12\\n\\nNeedVerify\\x18\\x01 \\x01(\\x08\\x12M\\n\\rDNSVerifyInfo\\x18\\x02 \\x01(\\x0b\\x32\\x36.Volcengine.Vod.Models.Business.VodDomainDNSVerifyInfo\\x12O\\n\\x0e\\x46ileVerifyInfo\\x18\\x03 \\x01(\\x0b\\x32\\x37.Volcengine.Vod.Models.Business.VodDomainFileVerifyInfo\\\">\\n\\x1aVodDescribeCdnEdgeIpResult\\x12\\x0f\\n\\x07\\x43\\x64nIpv4\\x18\\x01 \\x03(\\t\\x12\\x0f\\n\\x07\\x43\\x64nIpv6\\x18\\x02 \\x03(\\t\\\"\\x95\\x01\\n VodDescribeCdnRegionAndIspResult\\x12\\x36\\n\\x04Isps\\x18\\x01 \\x03(\\x0b\\x32(.Volcengine.Vod.Models.Business.NamePair\\x12\\x39\\n\\x07Regions\\x18\\x02 \\x03(\\x0b\\x32(.Volcengine.Vod.Models.Business.NamePair\\\"&\\n\\x08NamePair\\x12\\x0c\\n\\x04\\x43ode\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Name\\x18\\x02 \\x01(\\t\\\"U\\n\\x16VodOriginRewriteAction\\x12\\x12\\n\\nSourcePath\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nTargetPath\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0bRewriteType\\x18\\x03 \\x01(\\t\\\"k\\n\\x14VodOriginRewriteRule\\x12S\\n\\x13OriginRewriteAction\\x18\\x01 \\x01(\\x0b\\x32\\x36.Volcengine.Vod.Models.Business.VodOriginRewriteAction\\\"s\\n\\x10VodOriginRewrite\\x12O\\n\\x11OriginRewriteRule\\x18\\x01 \\x03(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.VodOriginRewriteRule\\x12\\x0e\\n\\x06Switch\\x18\\x02 \\x01(\\x08\\\"\\xcc\\x01\\n\\x10VodOriginArgRule\\x12P\\n\\x0fOriginArgAction\\x18\\x01 \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.VodOriginArgActionH\\x00\\x88\\x01\\x01\\x12\\x44\\n\\tCondition\\x18\\x02 \\x01(\\x0b\\x32,.Volcengine.Vod.Models.Business.CdnConditionH\\x01\\x88\\x01\\x01\\x42\\x12\\n\\x10_OriginArgActionB\\x0c\\n\\n_Condition\\\"i\\n\\x12VodOriginArgAction\\x12S\\n\\x13OriginArgComponents\\x18\\x01 \\x03(\\x0b\\x32\\x36.Volcengine.Vod.Models.Business.VodOriginArgComponents\\\"~\\n\\x16VodOriginArgComponents\\x12\\x13\\n\\x06\\x41\\x63tion\\x18\\x01 \\x01(\\tH\\x00\\x88\\x01\\x01\\x12\\x13\\n\\x06Object\\x18\\x02 \\x01(\\tH\\x01\\x88\\x01\\x01\\x12\\x16\\n\\tSubobject\\x18\\x03 \\x01(\\tH\\x02\\x88\\x01\\x01\\x42\\t\\n\\x07_ActionB\\t\\n\\x07_ObjectB\\x0c\\n\\n_Subobject*\\x92\\x01\\n\\x1aVodDomainSourceStationType\\x12\\'\\n#UndefinedVodDomainSourceStationType\\x10\\x00\\x12!\\n\\x1dVodVodDomainSourceStationType\\x10\\x01\\x12(\\n$ThirdPartyVodDomainSourceStationType\\x10\\x02*\\xd3\\x01\\n!VodDomainSourceStationAddressType\\x12.\\n*UndefinedVodDomainSourceStationAddressType\\x10\\x00\\x12+\\n\\'DomainVodDomainSourceStationAddressType\\x10\\x01\\x12\\'\\n#IPVodDomainSourceStationAddressType\\x10\\x02\\x12(\\n$TOSVodDomainSourceStationAddressType\\x10\\x03\\x42\\xca\\x01\\n)com.volcengine.service.vod.model.businessB\\x06VodCdnP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n_VODDOMAINSOURCESTATIONTYPE = DESCRIPTOR.enum_types_by_name['VodDomainSourceStationType']\nVodDomainSourceStationType = enum_type_wrapper.EnumTypeWrapper(_VODDOMAINSOURCESTATIONTYPE)\n_VODDOMAINSOURCESTATIONADDRESSTYPE = DESCRIPTOR.enum_types_by_name['VodDomainSourceStationAddressType']\nVodDomainSourceStationAddressType = enum_type_wrapper.EnumTypeWrapper(_VODDOMAINSOURCESTATIONADDRESSTYPE)\nUndefinedVodDomainSourceStationType = 0\nVodVodDomainSourceStationType = 1\nThirdPartyVodDomainSourceStationType = 2\nUndefinedVodDomainSourceStationAddressType = 0\nDomainVodDomainSourceStationAddressType = 1\nIPVodDomainSourceStationAddressType = 2\nTOSVodDomainSourceStationAddressType = 3\n\n\n_VODDOMAINCONFIGINFO = DESCRIPTOR.message_types_by_name['VodDomainConfigInfo']\n_VODDOMAININSTANCEINFOS = DESCRIPTOR.message_types_by_name['VodDomainInstanceInfos']\n_VODDOMAININSTANCEINFO = DESCRIPTOR.message_types_by_name['VodDomainInstanceInfo']\n_VODDOMAINOINFO = DESCRIPTOR.message_types_by_name['VodDomainoInfo']\n_VODDOMAINCERTIFICATEINFO = DESCRIPTOR.message_types_by_name['VodDomainCertificateInfo']\n_VODCREATECDNTASKRESULT = DESCRIPTOR.message_types_by_name['VodCreateCdnTaskResult']\n_VODCONTENTINFO = DESCRIPTOR.message_types_by_name['VodContentInfo']\n_VODCDNTASKRESULT = DESCRIPTOR.message_types_by_name['VodCdnTaskResult']\n_VODCDNACCESSLOGELEMENT = DESCRIPTOR.message_types_by_name['VodCdnAccessLogElement']\n_VODCDNACCESSLOGINFO = DESCRIPTOR.message_types_by_name['VodCdnAccessLogInfo']\n_VODLISTCDNACCESSLOGRESULT = DESCRIPTOR.message_types_by_name['VodListCdnAccessLogResult']\n_VODCDNTOPACCESSURLELEMENT = DESCRIPTOR.message_types_by_name['VodCdnTopAccessUrlElement']\n_VODLISTCDNTOPACCESSURLRESULT = DESCRIPTOR.message_types_by_name['VodListCdnTopAccessUrlResult']\n_VODCDNTOPACCESSELEMENT = DESCRIPTOR.message_types_by_name['VodCdnTopAccessElement']\n_VODLISTCDNTOPACCESSRESULT = DESCRIPTOR.message_types_by_name['VodListCdnTopAccessResult']\n_VODBANDWIDTHDATA = DESCRIPTOR.message_types_by_name['VodBandwidthData']\n_VODDESCRIBEVODDOMAINBANDWIDTHDATARESULT = DESCRIPTOR.message_types_by_name['VodDescribeVodDomainBandwidthDataResult']\n_VODCDNSTATISTICSDATA = DESCRIPTOR.message_types_by_name['VodCdnStatisticsData']\n_VODCDNSTATISTICSCOMMONRESULT = DESCRIPTOR.message_types_by_name['VodCdnStatisticsCommonResult']\n_VODCDNIPINFO = DESCRIPTOR.message_types_by_name['VodCdnIpInfo']\n_VODDESCRIBEIPINFORESULT = DESCRIPTOR.message_types_by_name['VodDescribeIpInfoResult']\n_VODTRAFFICDATA = DESCRIPTOR.message_types_by_name['VodTrafficData']\n_VODDESCRIBEVODDOMAINTRAFFICDATARESULT = DESCRIPTOR.message_types_by_name['VodDescribeVodDomainTrafficDataResult']\n_VODDOMAINSOURCEINFO = DESCRIPTOR.message_types_by_name['VodDomainSourceInfo']\n_VODDOMAINORIGINBUCKETINFO = DESCRIPTOR.message_types_by_name['VodDomainOriginBucketInfo']\n_VODSUBMITBLOCKTASKSRESULT = DESCRIPTOR.message_types_by_name['VodSubmitBlockTasksResult']\n_VODGETCONTENTBLOCKTASKSRESULT = DESCRIPTOR.message_types_by_name['VodGetContentBlockTasksResult']\n_CONTENTTASK = DESCRIPTOR.message_types_by_name['ContentTask']\n_IPV6 = DESCRIPTOR.message_types_by_name['IPv6']\n_ORIGINLINE = DESCRIPTOR.message_types_by_name['OriginLine']\n_ORIGINACTION = DESCRIPTOR.message_types_by_name['OriginAction']\n_CDNORIGINRULE = DESCRIPTOR.message_types_by_name['CdnOriginRule']\n_VODRESPONSEHEADERINSTANCE = DESCRIPTOR.message_types_by_name['VodResponseHeaderInstance']\n_VODRESPONSEHEADERACTION = DESCRIPTOR.message_types_by_name['VodResponseHeaderAction']\n_VODRESPONSEHEADERRULE = DESCRIPTOR.message_types_by_name['VodResponseHeaderRule']\n_VODRESPONSEHEADERCONTROL = DESCRIPTOR.message_types_by_name['VodResponseHeaderControl']\n_VODTOSAUTHINFORMATION = DESCRIPTOR.message_types_by_name['VodTosAuthInformation']\n_VODPRIVATEBUCKETAUTH = DESCRIPTOR.message_types_by_name['VodPrivateBucketAuth']\n_VODORIGINALCONFIG = DESCRIPTOR.message_types_by_name['VodOriginalConfig']\n_VODORIGINALCONTROL = DESCRIPTOR.message_types_by_name['VodOriginalControl']\n_VODDOMAINCONFIG = DESCRIPTOR.message_types_by_name['VodDomainConfig']\n_CDNCONDITION = DESCRIPTOR.message_types_by_name['CdnCondition']\n_CONDITIONRULE = DESCRIPTOR.message_types_by_name['ConditionRule']\n_CACHECONTROLRULE = DESCRIPTOR.message_types_by_name['CacheControlRule']\n_CACHEACTION = DESCRIPTOR.message_types_by_name['CacheAction']\n_CACHEKEYRULE = DESCRIPTOR.message_types_by_name['CacheKeyRule']\n_CACHEKEYACTION = DESCRIPTOR.message_types_by_name['CacheKeyAction']\n_CACHEKEYCOMPONENT = DESCRIPTOR.message_types_by_name['CacheKeyComponent']\n_COMPRESSIONACTION = DESCRIPTOR.message_types_by_name['CompressionAction']\n_COMPRESSIONRULE = DESCRIPTOR.message_types_by_name['CompressionRule']\n_COMPRESSION = DESCRIPTOR.message_types_by_name['Compression']\n_SPEEDLIMITTIME = DESCRIPTOR.message_types_by_name['SpeedLimitTime']\n_DOWNLOADSPEEDLIMITACTION = DESCRIPTOR.message_types_by_name['DownloadSpeedLimitAction']\n_DOWNLOADSPEEDLIMITRULE = DESCRIPTOR.message_types_by_name['DownloadSpeedLimitRule']\n_DOWNLOADSPEEDLIMIT = DESCRIPTOR.message_types_by_name['DownloadSpeedLimit']\n_FORCEDREDIRECT = DESCRIPTOR.message_types_by_name['ForcedRedirect']\n_HTTPS = DESCRIPTOR.message_types_by_name['HTTPS']\n_CERTINFO = DESCRIPTOR.message_types_by_name['CertInfo']\n_HTTPFORCEDREDIRECT = DESCRIPTOR.message_types_by_name['HttpForcedRedirect']\n_CDNIPV6 = DESCRIPTOR.message_types_by_name['CdnIPv6']\n_REQUESTHEADERRULE = DESCRIPTOR.message_types_by_name['RequestHeaderRule']\n_REQUESTHEADERACTION = DESCRIPTOR.message_types_by_name['RequestHeaderAction']\n_REQUESTHEADERINSTANCE = DESCRIPTOR.message_types_by_name['RequestHeaderInstance']\n_IPACCESSRULE = DESCRIPTOR.message_types_by_name['IpAccessRule']\n_COMMONGLOBALCONFIG = DESCRIPTOR.message_types_by_name['CommonGlobalConfig']\n_MULTIRANGE = DESCRIPTOR.message_types_by_name['MultiRange']\n_USERAGENTACCESSRULE = DESCRIPTOR.message_types_by_name['UserAgentAccessRule']\n_REFERERACCESSRULE = DESCRIPTOR.message_types_by_name['RefererAccessRule']\n_REFERERSTYPE = DESCRIPTOR.message_types_by_name['ReferersType']\n_COMMONREFERTYPE = DESCRIPTOR.message_types_by_name['CommonReferType']\n_VODDOMAINBASICINFO = DESCRIPTOR.message_types_by_name['VodDomainBasicInfo']\n_VODDESCRIBEDOMAINCONFIGRESULT = DESCRIPTOR.message_types_by_name['VodDescribeDomainConfigResult']\n_VODPCDNDOMAINCONFIGINFO = DESCRIPTOR.message_types_by_name['VodPCDNDomainConfigInfo']\n_VODPCDNDOMAININSTANCEINFOS = DESCRIPTOR.message_types_by_name['VodPCDNDomainInstanceInfos']\n_VODPCDNDOMAININFO = DESCRIPTOR.message_types_by_name['VodPCDNDomainInfo']\n_VODVERIFYDOMAINOWNERRESULT = DESCRIPTOR.message_types_by_name['VodVerifyDomainOwnerResult']\n_VODDOMAINDNSVERIFYINFO = DESCRIPTOR.message_types_by_name['VodDomainDNSVerifyInfo']\n_VODDOMAINFILEVERIFYINFO = DESCRIPTOR.message_types_by_name['VodDomainFileVerifyInfo']\n_VODDESCRIBEDOMAINVERIFYCONTENTRESULT = DESCRIPTOR.message_types_by_name['VodDescribeDomainVerifyContentResult']\n_VODDESCRIBECDNEDGEIPRESULT = DESCRIPTOR.message_types_by_name['VodDescribeCdnEdgeIpResult']\n_VODDESCRIBECDNREGIONANDISPRESULT = DESCRIPTOR.message_types_by_name['VodDescribeCdnRegionAndIspResult']\n_NAMEPAIR = DESCRIPTOR.message_types_by_name['NamePair']\n_VODORIGINREWRITEACTION = DESCRIPTOR.message_types_by_name['VodOriginRewriteAction']\n_VODORIGINREWRITERULE = DESCRIPTOR.message_types_by_name['VodOriginRewriteRule']\n_VODORIGINREWRITE = DESCRIPTOR.message_types_by_name['VodOriginRewrite']\n_VODORIGINARGRULE = DESCRIPTOR.message_types_by_name['VodOriginArgRule']\n_VODORIGINARGACTION = DESCRIPTOR.message_types_by_name['VodOriginArgAction']\n_VODORIGINARGCOMPONENTS = DESCRIPTOR.message_types_by_name['VodOriginArgComponents']\nVodDomainConfigInfo = _reflection.GeneratedProtocolMessageType('VodDomainConfigInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODDOMAINCONFIGINFO,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDomainConfigInfo)\n  })\n_sym_db.RegisterMessage(VodDomainConfigInfo)\n\nVodDomainInstanceInfos = _reflection.GeneratedProtocolMessageType('VodDomainInstanceInfos', (_message.Message,), {\n  'DESCRIPTOR' : _VODDOMAININSTANCEINFOS,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDomainInstanceInfos)\n  })\n_sym_db.RegisterMessage(VodDomainInstanceInfos)\n\nVodDomainInstanceInfo = _reflection.GeneratedProtocolMessageType('VodDomainInstanceInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODDOMAININSTANCEINFO,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDomainInstanceInfo)\n  })\n_sym_db.RegisterMessage(VodDomainInstanceInfo)\n\nVodDomainoInfo = _reflection.GeneratedProtocolMessageType('VodDomainoInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODDOMAINOINFO,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDomainoInfo)\n  })\n_sym_db.RegisterMessage(VodDomainoInfo)\n\nVodDomainCertificateInfo = _reflection.GeneratedProtocolMessageType('VodDomainCertificateInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODDOMAINCERTIFICATEINFO,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDomainCertificateInfo)\n  })\n_sym_db.RegisterMessage(VodDomainCertificateInfo)\n\nVodCreateCdnTaskResult = _reflection.GeneratedProtocolMessageType('VodCreateCdnTaskResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATECDNTASKRESULT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCreateCdnTaskResult)\n  })\n_sym_db.RegisterMessage(VodCreateCdnTaskResult)\n\nVodContentInfo = _reflection.GeneratedProtocolMessageType('VodContentInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODCONTENTINFO,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodContentInfo)\n  })\n_sym_db.RegisterMessage(VodContentInfo)\n\nVodCdnTaskResult = _reflection.GeneratedProtocolMessageType('VodCdnTaskResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODCDNTASKRESULT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCdnTaskResult)\n  })\n_sym_db.RegisterMessage(VodCdnTaskResult)\n\nVodCdnAccessLogElement = _reflection.GeneratedProtocolMessageType('VodCdnAccessLogElement', (_message.Message,), {\n  'DESCRIPTOR' : _VODCDNACCESSLOGELEMENT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCdnAccessLogElement)\n  })\n_sym_db.RegisterMessage(VodCdnAccessLogElement)\n\nVodCdnAccessLogInfo = _reflection.GeneratedProtocolMessageType('VodCdnAccessLogInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODCDNACCESSLOGINFO,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCdnAccessLogInfo)\n  })\n_sym_db.RegisterMessage(VodCdnAccessLogInfo)\n\nVodListCdnAccessLogResult = _reflection.GeneratedProtocolMessageType('VodListCdnAccessLogResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTCDNACCESSLOGRESULT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodListCdnAccessLogResult)\n  })\n_sym_db.RegisterMessage(VodListCdnAccessLogResult)\n\nVodCdnTopAccessUrlElement = _reflection.GeneratedProtocolMessageType('VodCdnTopAccessUrlElement', (_message.Message,), {\n  'DESCRIPTOR' : _VODCDNTOPACCESSURLELEMENT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCdnTopAccessUrlElement)\n  })\n_sym_db.RegisterMessage(VodCdnTopAccessUrlElement)\n\nVodListCdnTopAccessUrlResult = _reflection.GeneratedProtocolMessageType('VodListCdnTopAccessUrlResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTCDNTOPACCESSURLRESULT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodListCdnTopAccessUrlResult)\n  })\n_sym_db.RegisterMessage(VodListCdnTopAccessUrlResult)\n\nVodCdnTopAccessElement = _reflection.GeneratedProtocolMessageType('VodCdnTopAccessElement', (_message.Message,), {\n  'DESCRIPTOR' : _VODCDNTOPACCESSELEMENT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCdnTopAccessElement)\n  })\n_sym_db.RegisterMessage(VodCdnTopAccessElement)\n\nVodListCdnTopAccessResult = _reflection.GeneratedProtocolMessageType('VodListCdnTopAccessResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTCDNTOPACCESSRESULT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodListCdnTopAccessResult)\n  })\n_sym_db.RegisterMessage(VodListCdnTopAccessResult)\n\nVodBandwidthData = _reflection.GeneratedProtocolMessageType('VodBandwidthData', (_message.Message,), {\n  'DESCRIPTOR' : _VODBANDWIDTHDATA,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodBandwidthData)\n  })\n_sym_db.RegisterMessage(VodBandwidthData)\n\nVodDescribeVodDomainBandwidthDataResult = _reflection.GeneratedProtocolMessageType('VodDescribeVodDomainBandwidthDataResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEVODDOMAINBANDWIDTHDATARESULT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDescribeVodDomainBandwidthDataResult)\n  })\n_sym_db.RegisterMessage(VodDescribeVodDomainBandwidthDataResult)\n\nVodCdnStatisticsData = _reflection.GeneratedProtocolMessageType('VodCdnStatisticsData', (_message.Message,), {\n  'DESCRIPTOR' : _VODCDNSTATISTICSDATA,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCdnStatisticsData)\n  })\n_sym_db.RegisterMessage(VodCdnStatisticsData)\n\nVodCdnStatisticsCommonResult = _reflection.GeneratedProtocolMessageType('VodCdnStatisticsCommonResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODCDNSTATISTICSCOMMONRESULT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCdnStatisticsCommonResult)\n  })\n_sym_db.RegisterMessage(VodCdnStatisticsCommonResult)\n\nVodCdnIpInfo = _reflection.GeneratedProtocolMessageType('VodCdnIpInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODCDNIPINFO,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCdnIpInfo)\n  })\n_sym_db.RegisterMessage(VodCdnIpInfo)\n\nVodDescribeIpInfoResult = _reflection.GeneratedProtocolMessageType('VodDescribeIpInfoResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEIPINFORESULT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDescribeIpInfoResult)\n  })\n_sym_db.RegisterMessage(VodDescribeIpInfoResult)\n\nVodTrafficData = _reflection.GeneratedProtocolMessageType('VodTrafficData', (_message.Message,), {\n  'DESCRIPTOR' : _VODTRAFFICDATA,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodTrafficData)\n  })\n_sym_db.RegisterMessage(VodTrafficData)\n\nVodDescribeVodDomainTrafficDataResult = _reflection.GeneratedProtocolMessageType('VodDescribeVodDomainTrafficDataResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEVODDOMAINTRAFFICDATARESULT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDescribeVodDomainTrafficDataResult)\n  })\n_sym_db.RegisterMessage(VodDescribeVodDomainTrafficDataResult)\n\nVodDomainSourceInfo = _reflection.GeneratedProtocolMessageType('VodDomainSourceInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODDOMAINSOURCEINFO,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDomainSourceInfo)\n  })\n_sym_db.RegisterMessage(VodDomainSourceInfo)\n\nVodDomainOriginBucketInfo = _reflection.GeneratedProtocolMessageType('VodDomainOriginBucketInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODDOMAINORIGINBUCKETINFO,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDomainOriginBucketInfo)\n  })\n_sym_db.RegisterMessage(VodDomainOriginBucketInfo)\n\nVodSubmitBlockTasksResult = _reflection.GeneratedProtocolMessageType('VodSubmitBlockTasksResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITBLOCKTASKSRESULT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodSubmitBlockTasksResult)\n  })\n_sym_db.RegisterMessage(VodSubmitBlockTasksResult)\n\nVodGetContentBlockTasksResult = _reflection.GeneratedProtocolMessageType('VodGetContentBlockTasksResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETCONTENTBLOCKTASKSRESULT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetContentBlockTasksResult)\n  })\n_sym_db.RegisterMessage(VodGetContentBlockTasksResult)\n\nContentTask = _reflection.GeneratedProtocolMessageType('ContentTask', (_message.Message,), {\n  'DESCRIPTOR' : _CONTENTTASK,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.ContentTask)\n  })\n_sym_db.RegisterMessage(ContentTask)\n\nIPv6 = _reflection.GeneratedProtocolMessageType('IPv6', (_message.Message,), {\n  'DESCRIPTOR' : _IPV6,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.IPv6)\n  })\n_sym_db.RegisterMessage(IPv6)\n\nOriginLine = _reflection.GeneratedProtocolMessageType('OriginLine', (_message.Message,), {\n  'DESCRIPTOR' : _ORIGINLINE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.OriginLine)\n  })\n_sym_db.RegisterMessage(OriginLine)\n\nOriginAction = _reflection.GeneratedProtocolMessageType('OriginAction', (_message.Message,), {\n  'DESCRIPTOR' : _ORIGINACTION,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.OriginAction)\n  })\n_sym_db.RegisterMessage(OriginAction)\n\nCdnOriginRule = _reflection.GeneratedProtocolMessageType('CdnOriginRule', (_message.Message,), {\n  'DESCRIPTOR' : _CDNORIGINRULE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CdnOriginRule)\n  })\n_sym_db.RegisterMessage(CdnOriginRule)\n\nVodResponseHeaderInstance = _reflection.GeneratedProtocolMessageType('VodResponseHeaderInstance', (_message.Message,), {\n  'DESCRIPTOR' : _VODRESPONSEHEADERINSTANCE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodResponseHeaderInstance)\n  })\n_sym_db.RegisterMessage(VodResponseHeaderInstance)\n\nVodResponseHeaderAction = _reflection.GeneratedProtocolMessageType('VodResponseHeaderAction', (_message.Message,), {\n  'DESCRIPTOR' : _VODRESPONSEHEADERACTION,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodResponseHeaderAction)\n  })\n_sym_db.RegisterMessage(VodResponseHeaderAction)\n\nVodResponseHeaderRule = _reflection.GeneratedProtocolMessageType('VodResponseHeaderRule', (_message.Message,), {\n  'DESCRIPTOR' : _VODRESPONSEHEADERRULE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodResponseHeaderRule)\n  })\n_sym_db.RegisterMessage(VodResponseHeaderRule)\n\nVodResponseHeaderControl = _reflection.GeneratedProtocolMessageType('VodResponseHeaderControl', (_message.Message,), {\n  'DESCRIPTOR' : _VODRESPONSEHEADERCONTROL,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodResponseHeaderControl)\n  })\n_sym_db.RegisterMessage(VodResponseHeaderControl)\n\nVodTosAuthInformation = _reflection.GeneratedProtocolMessageType('VodTosAuthInformation', (_message.Message,), {\n  'DESCRIPTOR' : _VODTOSAUTHINFORMATION,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodTosAuthInformation)\n  })\n_sym_db.RegisterMessage(VodTosAuthInformation)\n\nVodPrivateBucketAuth = _reflection.GeneratedProtocolMessageType('VodPrivateBucketAuth', (_message.Message,), {\n  'DESCRIPTOR' : _VODPRIVATEBUCKETAUTH,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodPrivateBucketAuth)\n  })\n_sym_db.RegisterMessage(VodPrivateBucketAuth)\n\nVodOriginalConfig = _reflection.GeneratedProtocolMessageType('VodOriginalConfig', (_message.Message,), {\n  'DESCRIPTOR' : _VODORIGINALCONFIG,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodOriginalConfig)\n  })\n_sym_db.RegisterMessage(VodOriginalConfig)\n\nVodOriginalControl = _reflection.GeneratedProtocolMessageType('VodOriginalControl', (_message.Message,), {\n  'DESCRIPTOR' : _VODORIGINALCONTROL,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodOriginalControl)\n  })\n_sym_db.RegisterMessage(VodOriginalControl)\n\nVodDomainConfig = _reflection.GeneratedProtocolMessageType('VodDomainConfig', (_message.Message,), {\n  'DESCRIPTOR' : _VODDOMAINCONFIG,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDomainConfig)\n  })\n_sym_db.RegisterMessage(VodDomainConfig)\n\nCdnCondition = _reflection.GeneratedProtocolMessageType('CdnCondition', (_message.Message,), {\n  'DESCRIPTOR' : _CDNCONDITION,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CdnCondition)\n  })\n_sym_db.RegisterMessage(CdnCondition)\n\nConditionRule = _reflection.GeneratedProtocolMessageType('ConditionRule', (_message.Message,), {\n  'DESCRIPTOR' : _CONDITIONRULE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.ConditionRule)\n  })\n_sym_db.RegisterMessage(ConditionRule)\n\nCacheControlRule = _reflection.GeneratedProtocolMessageType('CacheControlRule', (_message.Message,), {\n  'DESCRIPTOR' : _CACHECONTROLRULE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CacheControlRule)\n  })\n_sym_db.RegisterMessage(CacheControlRule)\n\nCacheAction = _reflection.GeneratedProtocolMessageType('CacheAction', (_message.Message,), {\n  'DESCRIPTOR' : _CACHEACTION,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CacheAction)\n  })\n_sym_db.RegisterMessage(CacheAction)\n\nCacheKeyRule = _reflection.GeneratedProtocolMessageType('CacheKeyRule', (_message.Message,), {\n  'DESCRIPTOR' : _CACHEKEYRULE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CacheKeyRule)\n  })\n_sym_db.RegisterMessage(CacheKeyRule)\n\nCacheKeyAction = _reflection.GeneratedProtocolMessageType('CacheKeyAction', (_message.Message,), {\n  'DESCRIPTOR' : _CACHEKEYACTION,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CacheKeyAction)\n  })\n_sym_db.RegisterMessage(CacheKeyAction)\n\nCacheKeyComponent = _reflection.GeneratedProtocolMessageType('CacheKeyComponent', (_message.Message,), {\n  'DESCRIPTOR' : _CACHEKEYCOMPONENT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CacheKeyComponent)\n  })\n_sym_db.RegisterMessage(CacheKeyComponent)\n\nCompressionAction = _reflection.GeneratedProtocolMessageType('CompressionAction', (_message.Message,), {\n  'DESCRIPTOR' : _COMPRESSIONACTION,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CompressionAction)\n  })\n_sym_db.RegisterMessage(CompressionAction)\n\nCompressionRule = _reflection.GeneratedProtocolMessageType('CompressionRule', (_message.Message,), {\n  'DESCRIPTOR' : _COMPRESSIONRULE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CompressionRule)\n  })\n_sym_db.RegisterMessage(CompressionRule)\n\nCompression = _reflection.GeneratedProtocolMessageType('Compression', (_message.Message,), {\n  'DESCRIPTOR' : _COMPRESSION,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.Compression)\n  })\n_sym_db.RegisterMessage(Compression)\n\nSpeedLimitTime = _reflection.GeneratedProtocolMessageType('SpeedLimitTime', (_message.Message,), {\n  'DESCRIPTOR' : _SPEEDLIMITTIME,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.SpeedLimitTime)\n  })\n_sym_db.RegisterMessage(SpeedLimitTime)\n\nDownloadSpeedLimitAction = _reflection.GeneratedProtocolMessageType('DownloadSpeedLimitAction', (_message.Message,), {\n  'DESCRIPTOR' : _DOWNLOADSPEEDLIMITACTION,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DownloadSpeedLimitAction)\n  })\n_sym_db.RegisterMessage(DownloadSpeedLimitAction)\n\nDownloadSpeedLimitRule = _reflection.GeneratedProtocolMessageType('DownloadSpeedLimitRule', (_message.Message,), {\n  'DESCRIPTOR' : _DOWNLOADSPEEDLIMITRULE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DownloadSpeedLimitRule)\n  })\n_sym_db.RegisterMessage(DownloadSpeedLimitRule)\n\nDownloadSpeedLimit = _reflection.GeneratedProtocolMessageType('DownloadSpeedLimit', (_message.Message,), {\n  'DESCRIPTOR' : _DOWNLOADSPEEDLIMIT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DownloadSpeedLimit)\n  })\n_sym_db.RegisterMessage(DownloadSpeedLimit)\n\nForcedRedirect = _reflection.GeneratedProtocolMessageType('ForcedRedirect', (_message.Message,), {\n  'DESCRIPTOR' : _FORCEDREDIRECT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.ForcedRedirect)\n  })\n_sym_db.RegisterMessage(ForcedRedirect)\n\nHTTPS = _reflection.GeneratedProtocolMessageType('HTTPS', (_message.Message,), {\n  'DESCRIPTOR' : _HTTPS,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.HTTPS)\n  })\n_sym_db.RegisterMessage(HTTPS)\n\nCertInfo = _reflection.GeneratedProtocolMessageType('CertInfo', (_message.Message,), {\n  'DESCRIPTOR' : _CERTINFO,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CertInfo)\n  })\n_sym_db.RegisterMessage(CertInfo)\n\nHttpForcedRedirect = _reflection.GeneratedProtocolMessageType('HttpForcedRedirect', (_message.Message,), {\n  'DESCRIPTOR' : _HTTPFORCEDREDIRECT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.HttpForcedRedirect)\n  })\n_sym_db.RegisterMessage(HttpForcedRedirect)\n\nCdnIPv6 = _reflection.GeneratedProtocolMessageType('CdnIPv6', (_message.Message,), {\n  'DESCRIPTOR' : _CDNIPV6,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CdnIPv6)\n  })\n_sym_db.RegisterMessage(CdnIPv6)\n\nRequestHeaderRule = _reflection.GeneratedProtocolMessageType('RequestHeaderRule', (_message.Message,), {\n  'DESCRIPTOR' : _REQUESTHEADERRULE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.RequestHeaderRule)\n  })\n_sym_db.RegisterMessage(RequestHeaderRule)\n\nRequestHeaderAction = _reflection.GeneratedProtocolMessageType('RequestHeaderAction', (_message.Message,), {\n  'DESCRIPTOR' : _REQUESTHEADERACTION,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.RequestHeaderAction)\n  })\n_sym_db.RegisterMessage(RequestHeaderAction)\n\nRequestHeaderInstance = _reflection.GeneratedProtocolMessageType('RequestHeaderInstance', (_message.Message,), {\n  'DESCRIPTOR' : _REQUESTHEADERINSTANCE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.RequestHeaderInstance)\n  })\n_sym_db.RegisterMessage(RequestHeaderInstance)\n\nIpAccessRule = _reflection.GeneratedProtocolMessageType('IpAccessRule', (_message.Message,), {\n  'DESCRIPTOR' : _IPACCESSRULE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.IpAccessRule)\n  })\n_sym_db.RegisterMessage(IpAccessRule)\n\nCommonGlobalConfig = _reflection.GeneratedProtocolMessageType('CommonGlobalConfig', (_message.Message,), {\n  'DESCRIPTOR' : _COMMONGLOBALCONFIG,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CommonGlobalConfig)\n  })\n_sym_db.RegisterMessage(CommonGlobalConfig)\n\nMultiRange = _reflection.GeneratedProtocolMessageType('MultiRange', (_message.Message,), {\n  'DESCRIPTOR' : _MULTIRANGE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.MultiRange)\n  })\n_sym_db.RegisterMessage(MultiRange)\n\nUserAgentAccessRule = _reflection.GeneratedProtocolMessageType('UserAgentAccessRule', (_message.Message,), {\n  'DESCRIPTOR' : _USERAGENTACCESSRULE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.UserAgentAccessRule)\n  })\n_sym_db.RegisterMessage(UserAgentAccessRule)\n\nRefererAccessRule = _reflection.GeneratedProtocolMessageType('RefererAccessRule', (_message.Message,), {\n  'DESCRIPTOR' : _REFERERACCESSRULE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.RefererAccessRule)\n  })\n_sym_db.RegisterMessage(RefererAccessRule)\n\nReferersType = _reflection.GeneratedProtocolMessageType('ReferersType', (_message.Message,), {\n  'DESCRIPTOR' : _REFERERSTYPE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.ReferersType)\n  })\n_sym_db.RegisterMessage(ReferersType)\n\nCommonReferType = _reflection.GeneratedProtocolMessageType('CommonReferType', (_message.Message,), {\n  'DESCRIPTOR' : _COMMONREFERTYPE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CommonReferType)\n  })\n_sym_db.RegisterMessage(CommonReferType)\n\nVodDomainBasicInfo = _reflection.GeneratedProtocolMessageType('VodDomainBasicInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODDOMAINBASICINFO,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDomainBasicInfo)\n  })\n_sym_db.RegisterMessage(VodDomainBasicInfo)\n\nVodDescribeDomainConfigResult = _reflection.GeneratedProtocolMessageType('VodDescribeDomainConfigResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEDOMAINCONFIGRESULT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDescribeDomainConfigResult)\n  })\n_sym_db.RegisterMessage(VodDescribeDomainConfigResult)\n\nVodPCDNDomainConfigInfo = _reflection.GeneratedProtocolMessageType('VodPCDNDomainConfigInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODPCDNDOMAINCONFIGINFO,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodPCDNDomainConfigInfo)\n  })\n_sym_db.RegisterMessage(VodPCDNDomainConfigInfo)\n\nVodPCDNDomainInstanceInfos = _reflection.GeneratedProtocolMessageType('VodPCDNDomainInstanceInfos', (_message.Message,), {\n  'DESCRIPTOR' : _VODPCDNDOMAININSTANCEINFOS,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodPCDNDomainInstanceInfos)\n  })\n_sym_db.RegisterMessage(VodPCDNDomainInstanceInfos)\n\nVodPCDNDomainInfo = _reflection.GeneratedProtocolMessageType('VodPCDNDomainInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODPCDNDOMAININFO,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodPCDNDomainInfo)\n  })\n_sym_db.RegisterMessage(VodPCDNDomainInfo)\n\nVodVerifyDomainOwnerResult = _reflection.GeneratedProtocolMessageType('VodVerifyDomainOwnerResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODVERIFYDOMAINOWNERRESULT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodVerifyDomainOwnerResult)\n  })\n_sym_db.RegisterMessage(VodVerifyDomainOwnerResult)\n\nVodDomainDNSVerifyInfo = _reflection.GeneratedProtocolMessageType('VodDomainDNSVerifyInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODDOMAINDNSVERIFYINFO,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDomainDNSVerifyInfo)\n  })\n_sym_db.RegisterMessage(VodDomainDNSVerifyInfo)\n\nVodDomainFileVerifyInfo = _reflection.GeneratedProtocolMessageType('VodDomainFileVerifyInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODDOMAINFILEVERIFYINFO,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDomainFileVerifyInfo)\n  })\n_sym_db.RegisterMessage(VodDomainFileVerifyInfo)\n\nVodDescribeDomainVerifyContentResult = _reflection.GeneratedProtocolMessageType('VodDescribeDomainVerifyContentResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEDOMAINVERIFYCONTENTRESULT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDescribeDomainVerifyContentResult)\n  })\n_sym_db.RegisterMessage(VodDescribeDomainVerifyContentResult)\n\nVodDescribeCdnEdgeIpResult = _reflection.GeneratedProtocolMessageType('VodDescribeCdnEdgeIpResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBECDNEDGEIPRESULT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDescribeCdnEdgeIpResult)\n  })\n_sym_db.RegisterMessage(VodDescribeCdnEdgeIpResult)\n\nVodDescribeCdnRegionAndIspResult = _reflection.GeneratedProtocolMessageType('VodDescribeCdnRegionAndIspResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBECDNREGIONANDISPRESULT,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDescribeCdnRegionAndIspResult)\n  })\n_sym_db.RegisterMessage(VodDescribeCdnRegionAndIspResult)\n\nNamePair = _reflection.GeneratedProtocolMessageType('NamePair', (_message.Message,), {\n  'DESCRIPTOR' : _NAMEPAIR,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.NamePair)\n  })\n_sym_db.RegisterMessage(NamePair)\n\nVodOriginRewriteAction = _reflection.GeneratedProtocolMessageType('VodOriginRewriteAction', (_message.Message,), {\n  'DESCRIPTOR' : _VODORIGINREWRITEACTION,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodOriginRewriteAction)\n  })\n_sym_db.RegisterMessage(VodOriginRewriteAction)\n\nVodOriginRewriteRule = _reflection.GeneratedProtocolMessageType('VodOriginRewriteRule', (_message.Message,), {\n  'DESCRIPTOR' : _VODORIGINREWRITERULE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodOriginRewriteRule)\n  })\n_sym_db.RegisterMessage(VodOriginRewriteRule)\n\nVodOriginRewrite = _reflection.GeneratedProtocolMessageType('VodOriginRewrite', (_message.Message,), {\n  'DESCRIPTOR' : _VODORIGINREWRITE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodOriginRewrite)\n  })\n_sym_db.RegisterMessage(VodOriginRewrite)\n\nVodOriginArgRule = _reflection.GeneratedProtocolMessageType('VodOriginArgRule', (_message.Message,), {\n  'DESCRIPTOR' : _VODORIGINARGRULE,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodOriginArgRule)\n  })\n_sym_db.RegisterMessage(VodOriginArgRule)\n\nVodOriginArgAction = _reflection.GeneratedProtocolMessageType('VodOriginArgAction', (_message.Message,), {\n  'DESCRIPTOR' : _VODORIGINARGACTION,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodOriginArgAction)\n  })\n_sym_db.RegisterMessage(VodOriginArgAction)\n\nVodOriginArgComponents = _reflection.GeneratedProtocolMessageType('VodOriginArgComponents', (_message.Message,), {\n  'DESCRIPTOR' : _VODORIGINARGCOMPONENTS,\n  '__module__' : 'volcengine.vod.business.vod_cdn_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodOriginArgComponents)\n  })\n_sym_db.RegisterMessage(VodOriginArgComponents)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.vod.model.businessB\\006VodCdnP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _VODDOMAINSOURCESTATIONTYPE._serialized_start=13540\n  _VODDOMAINSOURCESTATIONTYPE._serialized_end=13686\n  _VODDOMAINSOURCESTATIONADDRESSTYPE._serialized_start=13689\n  _VODDOMAINSOURCESTATIONADDRESSTYPE._serialized_end=13900\n  _VODDOMAINCONFIGINFO._serialized_start=116\n  _VODDOMAINCONFIGINFO._serialized_end=379\n  _VODDOMAININSTANCEINFOS._serialized_start=382\n  _VODDOMAININSTANCEINFOS._serialized_end=563\n  _VODDOMAININSTANCEINFO._serialized_start=565\n  _VODDOMAININSTANCEINFO._serialized_end=653\n  _VODDOMAINOINFO._serialized_start=656\n  _VODDOMAINOINFO._serialized_end=1006\n  _VODDOMAINCERTIFICATEINFO._serialized_start=1009\n  _VODDOMAINCERTIFICATEINFO._serialized_end=1211\n  _VODCREATECDNTASKRESULT._serialized_start=1213\n  _VODCREATECDNTASKRESULT._serialized_end=1253\n  _VODCONTENTINFO._serialized_start=1256\n  _VODCONTENTINFO._serialized_end=1393\n  _VODCDNTASKRESULT._serialized_start=1396\n  _VODCDNTASKRESULT._serialized_end=1539\n  _VODCDNACCESSLOGELEMENT._serialized_start=1541\n  _VODCDNACCESSLOGELEMENT._serialized_end=1668\n  _VODCDNACCESSLOGINFO._serialized_start=1671\n  _VODCDNACCESSLOGINFO._serialized_end=1836\n  _VODLISTCDNACCESSLOGRESULT._serialized_start=1838\n  _VODLISTCDNACCESSLOGRESULT._serialized_end=1932\n  _VODCDNTOPACCESSURLELEMENT._serialized_start=1934\n  _VODCDNTOPACCESSURLELEMENT._serialized_end=2000\n  _VODLISTCDNTOPACCESSURLRESULT._serialized_start=2002\n  _VODLISTCDNTOPACCESSURLRESULT._serialized_end=2109\n  _VODCDNTOPACCESSELEMENT._serialized_start=2111\n  _VODCDNTOPACCESSELEMENT._serialized_end=2167\n  _VODLISTCDNTOPACCESSRESULT._serialized_start=2169\n  _VODLISTCDNTOPACCESSRESULT._serialized_end=2271\n  _VODBANDWIDTHDATA._serialized_start=2273\n  _VODBANDWIDTHDATA._serialized_end=2324\n  _VODDESCRIBEVODDOMAINBANDWIDTHDATARESULT._serialized_start=2327\n  _VODDESCRIBEVODDOMAINBANDWIDTHDATARESULT._serialized_end=2710\n  _VODCDNSTATISTICSDATA._serialized_start=2713\n  _VODCDNSTATISTICSDATA._serialized_end=2893\n  _VODCDNSTATISTICSCOMMONRESULT._serialized_start=2896\n  _VODCDNSTATISTICSCOMMONRESULT._serialized_end=3024\n  _VODCDNIPINFO._serialized_start=3026\n  _VODCDNIPINFO._serialized_end=3098\n  _VODDESCRIBEIPINFORESULT._serialized_start=3100\n  _VODDESCRIBEIPINFORESULT._serialized_end=3186\n  _VODTRAFFICDATA._serialized_start=3188\n  _VODTRAFFICDATA._serialized_end=3235\n  _VODDESCRIBEVODDOMAINTRAFFICDATARESULT._serialized_start=3238\n  _VODDESCRIBEVODDOMAINTRAFFICDATARESULT._serialized_end=3531\n  _VODDOMAINSOURCEINFO._serialized_start=3534\n  _VODDOMAINSOURCEINFO._serialized_end=3834\n  _VODDOMAINORIGINBUCKETINFO._serialized_start=3836\n  _VODDOMAINORIGINBUCKETINFO._serialized_end=3931\n  _VODSUBMITBLOCKTASKSRESULT._serialized_start=3933\n  _VODSUBMITBLOCKTASKSRESULT._serialized_end=3976\n  _VODGETCONTENTBLOCKTASKSRESULT._serialized_start=3979\n  _VODGETCONTENTBLOCKTASKSRESULT._serialized_end=4119\n  _CONTENTTASK._serialized_start=4121\n  _CONTENTTASK._serialized_end=4217\n  _IPV6._serialized_start=4219\n  _IPV6._serialized_end=4241\n  _ORIGINLINE._serialized_start=4244\n  _ORIGINLINE._serialized_end=4388\n  _ORIGINACTION._serialized_start=4390\n  _ORIGINACTION._serialized_end=4469\n  _CDNORIGINRULE._serialized_start=4471\n  _CDNORIGINRULE._serialized_end=4554\n  _VODRESPONSEHEADERINSTANCE._serialized_start=4556\n  _VODRESPONSEHEADERINSTANCE._serialized_end=4675\n  _VODRESPONSEHEADERACTION._serialized_start=4677\n  _VODRESPONSEHEADERACTION._serialized_end=4794\n  _VODRESPONSEHEADERRULE._serialized_start=4796\n  _VODRESPONSEHEADERRULE._serialized_end=4906\n  _VODRESPONSEHEADERCONTROL._serialized_start=4908\n  _VODRESPONSEHEADERCONTROL._serialized_end=5013\n  _VODTOSAUTHINFORMATION._serialized_start=5015\n  _VODTOSAUTHINFORMATION._serialized_end=5084\n  _VODPRIVATEBUCKETAUTH._serialized_start=5087\n  _VODPRIVATEBUCKETAUTH._serialized_end=5226\n  _VODORIGINALCONFIG._serialized_start=5229\n  _VODORIGINALCONFIG._serialized_end=5579\n  _VODORIGINALCONTROL._serialized_start=5581\n  _VODORIGINALCONTROL._serialized_end=5707\n  _VODDOMAINCONFIG._serialized_start=5710\n  _VODDOMAINCONFIG._serialized_end=7068\n  _CDNCONDITION._serialized_start=7070\n  _CDNCONDITION._serialized_end=7194\n  _CONDITIONRULE._serialized_start=7197\n  _CONDITIONRULE._serialized_end=7338\n  _CACHECONTROLRULE._serialized_start=7341\n  _CACHECONTROLRULE._serialized_end=7530\n  _CACHEACTION._serialized_start=7533\n  _CACHEACTION._serialized_end=7690\n  _CACHEKEYRULE._serialized_start=7693\n  _CACHEKEYRULE._serialized_end=7887\n  _CACHEKEYACTION._serialized_start=7889\n  _CACHEKEYACTION._serialized_end=7984\n  _CACHEKEYCOMPONENT._serialized_start=7987\n  _CACHEKEYCOMPONENT._serialized_end=8148\n  _COMPRESSIONACTION._serialized_start=8151\n  _COMPRESSIONACTION._serialized_end=8395\n  _COMPRESSIONRULE._serialized_start=8398\n  _COMPRESSIONRULE._serialized_end=8604\n  _COMPRESSION._serialized_start=8606\n  _COMPRESSION._serialized_end=8726\n  _SPEEDLIMITTIME._serialized_start=8728\n  _SPEEDLIMITTIME._serialized_end=8850\n  _DOWNLOADSPEEDLIMITACTION._serialized_start=8853\n  _DOWNLOADSPEEDLIMITACTION._serialized_end=9081\n  _DOWNLOADSPEEDLIMITRULE._serialized_start=9084\n  _DOWNLOADSPEEDLIMITRULE._serialized_end=9318\n  _DOWNLOADSPEEDLIMIT._serialized_start=9321\n  _DOWNLOADSPEEDLIMIT._serialized_end=9462\n  _FORCEDREDIRECT._serialized_start=9464\n  _FORCEDREDIRECT._serialized_end=9580\n  _HTTPS._serialized_start=9583\n  _HTTPS._serialized_end=9846\n  _CERTINFO._serialized_start=9848\n  _CERTINFO._serialized_end=9890\n  _HTTPFORCEDREDIRECT._serialized_start=9892\n  _HTTPFORCEDREDIRECT._serialized_end=10012\n  _CDNIPV6._serialized_start=10014\n  _CDNIPV6._serialized_end=10055\n  _REQUESTHEADERRULE._serialized_start=10058\n  _REQUESTHEADERRULE._serialized_end=10272\n  _REQUESTHEADERACTION._serialized_start=10274\n  _REQUESTHEADERACTION._serialized_end=10382\n  _REQUESTHEADERINSTANCE._serialized_start=10385\n  _REQUESTHEADERINSTANCE._serialized_end=10534\n  _IPACCESSRULE._serialized_start=10536\n  _IPACCESSRULE._serialized_end=10630\n  _COMMONGLOBALCONFIG._serialized_start=10632\n  _COMMONGLOBALCONFIG._serialized_end=10692\n  _MULTIRANGE._serialized_start=10694\n  _MULTIRANGE._serialized_end=10738\n  _USERAGENTACCESSRULE._serialized_start=10741\n  _USERAGENTACCESSRULE._serialized_end=10929\n  _REFERERACCESSRULE._serialized_start=10932\n  _REFERERACCESSRULE._serialized_end=11167\n  _REFERERSTYPE._serialized_start=11169\n  _REFERERSTYPE._serialized_end=11272\n  _COMMONREFERTYPE._serialized_start=11274\n  _COMMONREFERTYPE._serialized_end=11393\n  _VODDOMAINBASICINFO._serialized_start=11395\n  _VODDOMAINBASICINFO._serialized_end=11508\n  _VODDESCRIBEDOMAINCONFIGRESULT._serialized_start=11511\n  _VODDESCRIBEDOMAINCONFIGRESULT._serialized_end=11694\n  _VODPCDNDOMAINCONFIGINFO._serialized_start=11697\n  _VODPCDNDOMAINCONFIGINFO._serialized_end=11858\n  _VODPCDNDOMAININSTANCEINFOS._serialized_start=11860\n  _VODPCDNDOMAININSTANCEINFOS._serialized_end=11956\n  _VODPCDNDOMAININFO._serialized_start=11958\n  _VODPCDNDOMAININFO._serialized_end=12049\n  _VODVERIFYDOMAINOWNERRESULT._serialized_start=12051\n  _VODVERIFYDOMAINOWNERRESULT._serialized_end=12123\n  _VODDOMAINDNSVERIFYINFO._serialized_start=12125\n  _VODDOMAINDNSVERIFYINFO._serialized_end=12204\n  _VODDOMAINFILEVERIFYINFO._serialized_start=12206\n  _VODDOMAINFILEVERIFYINFO._serialized_end=12305\n  _VODDESCRIBEDOMAINVERIFYCONTENTRESULT._serialized_start=12308\n  _VODDESCRIBEDOMAINVERIFYCONTENTRESULT._serialized_end=12526\n  _VODDESCRIBECDNEDGEIPRESULT._serialized_start=12528\n  _VODDESCRIBECDNEDGEIPRESULT._serialized_end=12590\n  _VODDESCRIBECDNREGIONANDISPRESULT._serialized_start=12593\n  _VODDESCRIBECDNREGIONANDISPRESULT._serialized_end=12742\n  _NAMEPAIR._serialized_start=12744\n  _NAMEPAIR._serialized_end=12782\n  _VODORIGINREWRITEACTION._serialized_start=12784\n  _VODORIGINREWRITEACTION._serialized_end=12869\n  _VODORIGINREWRITERULE._serialized_start=12871\n  _VODORIGINREWRITERULE._serialized_end=12978\n  _VODORIGINREWRITE._serialized_start=12980\n  _VODORIGINREWRITE._serialized_end=13095\n  _VODORIGINARGRULE._serialized_start=13098\n  _VODORIGINARGRULE._serialized_end=13302\n  _VODORIGINARGACTION._serialized_start=13304\n  _VODORIGINARGACTION._serialized_end=13409\n  _VODORIGINARGCOMPONENTS._serialized_start=13411\n  _VODORIGINARGCOMPONENTS._serialized_end=13537\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/vod/models/business/vod_common_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/business/vod_common.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf.internal import enum_type_wrapper\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n(volcengine/vod/business/vod_common.proto\\x12\\x1eVolcengine.Vod.Models.Business\\\"\\xe3\\x04\\n\\rVodSourceInfo\\x12\\x0e\\n\\x06\\x46ileId\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Md5\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileType\\x18\\x03 \\x01(\\t\\x12\\r\\n\\x05\\x43odec\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06Height\\x18\\x05 \\x01(\\x05\\x12\\r\\n\\x05Width\\x18\\x06 \\x01(\\x05\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x07 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x08 \\x01(\\x02\\x12\\x0c\\n\\x04Size\\x18\\t \\x01(\\x01\\x12\\x10\\n\\x08StoreUri\\x18\\n \\x01(\\t\\x12\\x12\\n\\nDefinition\\x18\\x0b \\x01(\\t\\x12\\x0f\\n\\x07\\x42itrate\\x18\\x0c \\x01(\\x05\\x12\\x0b\\n\\x03\\x46ps\\x18\\r \\x01(\\x02\\x12\\x12\\n\\nCreateTime\\x18\\x0e \\x01(\\t\\x12\\x0f\\n\\x07Quality\\x18\\x0f \\x01(\\t\\x12\\x14\\n\\x0c\\x44ynamicRange\\x18\\x10 \\x01(\\t\\x12K\\n\\x0fVideoStreamMeta\\x18\\x11 \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.VodVideoStreamMeta\\x12K\\n\\x0f\\x41udioStreamMeta\\x18\\x12 \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.VodAudioStreamMeta\\x12\\x17\\n\\x0fTosStorageClass\\x18\\x13 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileName\\x18\\x14 \\x01(\\t\\x12O\\n\\tFileExtra\\x18\\x15 \\x03(\\x0b\\x32<.Volcengine.Vod.Models.Business.VodSourceInfo.FileExtraEntry\\x1a\\x30\\n\\x0e\\x46ileExtraEntry\\x12\\x0b\\n\\x03key\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05value\\x18\\x02 \\x01(\\t:\\x02\\x38\\x01\\\"}\\n\\x12VodAudioStreamMeta\\x12\\r\\n\\x05\\x43odec\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x02 \\x01(\\x02\\x12\\x12\\n\\nSampleRate\\x18\\x03 \\x01(\\x05\\x12\\x0f\\n\\x07\\x42itrate\\x18\\x04 \\x01(\\x05\\x12\\x0f\\n\\x07Quality\\x18\\x05 \\x01(\\t\\x12\\x10\\n\\x08\\x43hannels\\x18\\x06 \\x01(\\x05\\\"\\x86\\x01\\n\\x12VodVideoStreamMeta\\x12\\r\\n\\x05\\x43odec\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06Height\\x18\\x02 \\x01(\\x05\\x12\\r\\n\\x05Width\\x18\\x03 \\x01(\\x05\\x12\\x10\\n\\x08\\x44uration\\x18\\x04 \\x01(\\x02\\x12\\x12\\n\\nDefinition\\x18\\x05 \\x01(\\t\\x12\\x0f\\n\\x07\\x42itrate\\x18\\x06 \\x01(\\x05\\x12\\x0b\\n\\x03\\x46ps\\x18\\x07 \\x01(\\x02\\\"\\x89\\x04\\n\\x10VodTranscodeInfo\\x12\\x0e\\n\\x06\\x46ileId\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Md5\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileType\\x18\\x03 \\x01(\\t\\x12\\x10\\n\\x08LogoType\\x18\\x04 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ncrypt\\x18\\x05 \\x01(\\x08\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x06 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x07 \\x01(\\x02\\x12\\x0c\\n\\x04Size\\x18\\x08 \\x01(\\x01\\x12\\x10\\n\\x08StoreUri\\x18\\t \\x01(\\t\\x12K\\n\\x0fVideoStreamMeta\\x18\\n \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.VodVideoStreamMeta\\x12K\\n\\x0f\\x41udioStreamMeta\\x18\\x0b \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.VodAudioStreamMeta\\x12\\x12\\n\\nCreateTime\\x18\\x0c \\x01(\\t\\x12\\x14\\n\\x0c\\x44ynamicRange\\x18\\r \\x01(\\t\\x12\\x17\\n\\x0fTosStorageClass\\x18\\x0e \\x01(\\t\\x12R\\n\\tFileExtra\\x18\\x0f \\x03(\\x0b\\x32?.Volcengine.Vod.Models.Business.VodTranscodeInfo.FileExtraEntry\\x1a\\x30\\n\\x0e\\x46ileExtraEntry\\x12\\x0b\\n\\x03key\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05value\\x18\\x02 \\x01(\\t:\\x02\\x38\\x01\\\"S\\n\\x0fVodAdaptiveInfo\\x12\\x13\\n\\x0bMainPlayUrl\\x18\\x01 \\x01(\\t\\x12\\x15\\n\\rBackupPlayUrl\\x18\\x02 \\x01(\\t\\x12\\x14\\n\\x0c\\x41\\x64\\x61ptiveType\\x18\\x03 \\x01(\\t\\\"\\xb7\\x04\\n\\x0bVodPlayInfo\\x12\\x0e\\n\\x06\\x46ileId\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Md5\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileType\\x18\\x03 \\x01(\\t\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x04 \\x01(\\t\\x12\\r\\n\\x05\\x43odec\\x18\\x05 \\x01(\\t\\x12\\x12\\n\\nDefinition\\x18\\x06 \\x01(\\t\\x12\\x13\\n\\x0bMainPlayUrl\\x18\\x07 \\x01(\\t\\x12\\x15\\n\\rBackupPlayUrl\\x18\\x08 \\x01(\\t\\x12\\x0f\\n\\x07\\x42itrate\\x18\\t \\x01(\\x05\\x12\\r\\n\\x05Width\\x18\\n \\x01(\\x05\\x12\\x0e\\n\\x06Height\\x18\\x0b \\x01(\\x05\\x12\\x0c\\n\\x04Size\\x18\\x0c \\x01(\\x01\\x12\\x11\\n\\tCheckInfo\\x18\\r \\x01(\\t\\x12\\x12\\n\\nIndexRange\\x18\\x0e \\x01(\\t\\x12\\x11\\n\\tInitRange\\x18\\x0f \\x01(\\t\\x12\\x10\\n\\x08PlayAuth\\x18\\x10 \\x01(\\t\\x12\\x12\\n\\nPlayAuthId\\x18\\x11 \\x01(\\t\\x12\\x10\\n\\x08LogoType\\x18\\x12 \\x01(\\t\\x12\\x0f\\n\\x07Quality\\x18\\x13 \\x01(\\t\\x12\\x19\\n\\x11\\x42\\x61rrageMaskOffset\\x18\\x14 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x15 \\x01(\\x02\\x12\\x19\\n\\x11KeyFrameAlignment\\x18\\x16 \\x01(\\t\\x12=\\n\\x06Volume\\x18\\x17 \\x01(\\x0b\\x32-.Volcengine.Vod.Models.Business.VodVolumeInfo\\x12\\x15\\n\\rMainUrlExpire\\x18\\x18 \\x01(\\t\\x12\\x17\\n\\x0f\\x42\\x61\\x63kupUrlExpire\\x18\\x19 \\x01(\\t\\x12\\x0f\\n\\x07\\x44rmType\\x18\\x1a \\x01(\\t\\x12\\x11\\n\\tPlayScene\\x18\\x1b \\x01(\\t\\\"/\\n\\rVodVolumeInfo\\x12\\x10\\n\\x08Loudness\\x18\\x01 \\x01(\\x01\\x12\\x0c\\n\\x04Peak\\x18\\x02 \\x01(\\x01\\\"\\xa3\\x01\\n\\x0f\\x42\\x61rrageMaskInfo\\x12\\x0f\\n\\x07Version\\x18\\x01 \\x01(\\t\\x12\\x16\\n\\x0e\\x42\\x61rrageMaskUrl\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06\\x46ileId\\x18\\x03 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileSize\\x18\\x04 \\x01(\\x01\\x12\\x10\\n\\x08\\x46ileHash\\x18\\x05 \\x01(\\t\\x12\\x11\\n\\tUpdatedAt\\x18\\x06 \\x01(\\t\\x12\\x0f\\n\\x07\\x42itrate\\x18\\x07 \\x01(\\x05\\x12\\x0f\\n\\x07HeadLen\\x18\\x08 \\x01(\\x01\\\"\\xa0\\x01\\n\\x0cVodThumbInfo\\x12\\x12\\n\\nCaptureNum\\x18\\x01 \\x01(\\x05\\x12\\x11\\n\\tStoreUrls\\x18\\x02 \\x03(\\t\\x12\\x11\\n\\tCellWidth\\x18\\x03 \\x01(\\x05\\x12\\x12\\n\\nCellHeight\\x18\\x04 \\x01(\\x05\\x12\\x0f\\n\\x07ImgXLen\\x18\\x05 \\x01(\\x05\\x12\\x0f\\n\\x07ImgYLen\\x18\\x06 \\x01(\\x05\\x12\\x10\\n\\x08Interval\\x18\\x07 \\x01(\\x01\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x08 \\x01(\\t\\\"\\x80\\x02\\n\\x0fVodSubtitleInfo\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x46ileId\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08Language\\x18\\x03 \\x01(\\t\\x12\\x12\\n\\nLanguageId\\x18\\x04 \\x01(\\x05\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x05 \\x01(\\t\\x12\\x12\\n\\nSubtitleId\\x18\\x06 \\x01(\\t\\x12\\r\\n\\x05Title\\x18\\x07 \\x01(\\t\\x12\\x0b\\n\\x03Tag\\x18\\x08 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\t \\x01(\\t\\x12\\x0e\\n\\x06Source\\x18\\n \\x01(\\t\\x12\\x10\\n\\x08StoreUri\\x18\\x0b \\x01(\\t\\x12\\x13\\n\\x0bSubtitleUrl\\x18\\x0c \\x01(\\t\\x12\\x12\\n\\nCreateTime\\x18\\r \\x01(\\t\\x12\\x0f\\n\\x07Version\\x18\\x0e \\x01(\\t\\\"A\\n\\x13VodCommonConfigInfo\\x12\\x0e\\n\\x06Module\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Key\\x18\\x02 \\x01(\\t\\x12\\r\\n\\x05Value\\x18\\x03 \\x01(\\t\\\"\\xbc\\x05\\n\\x10VodPlayInfoModel\\x12H\\n\\x07Version\\x18\\n \\x01(\\x0e\\x32\\x37.Volcengine.Vod.Models.Business.VodPlayInfoModelVersion\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x02 \\x01(\\x05\\x12\\x11\\n\\tPosterUrl\\x18\\x03 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x04 \\x01(\\x02\\x12\\x10\\n\\x08\\x46ileType\\x18\\x05 \\x01(\\t\\x12\\x16\\n\\x0e\\x45nableAdaptive\\x18\\x06 \\x01(\\x08\\x12\\x12\\n\\nTotalCount\\x18\\x07 \\x01(\\x05\\x12\\x45\\n\\x0c\\x41\\x64\\x61ptiveInfo\\x18\\x08 \\x01(\\x0b\\x32/.Volcengine.Vod.Models.Business.VodAdaptiveInfo\\x12\\x41\\n\\x0cPlayInfoList\\x18\\t \\x03(\\x0b\\x32+.Volcengine.Vod.Models.Business.VodPlayInfo\\x12\\x43\\n\\rThumbInfoList\\x18\\x0b \\x03(\\x0b\\x32,.Volcengine.Vod.Models.Business.VodThumbInfo\\x12\\x16\\n\\x0e\\x42\\x61rrageMaskUrl\\x18\\x0c \\x01(\\t\\x12I\\n\\x10SubtitleInfoList\\x18\\r \\x03(\\x0b\\x32/.Volcengine.Vod.Models.Business.VodSubtitleInfo\\x12H\\n\\x0f\\x42\\x61rrageMaskInfo\\x18\\x0e \\x01(\\x0b\\x32/.Volcengine.Vod.Models.Business.BarrageMaskInfo\\x12\\x62\\n\\x1c\\x41\\x64\\x61ptiveBitrateStreamingInfo\\x18\\x0f \\x01(\\x0b\\x32<.Volcengine.Vod.Models.Business.AdaptiveBitrateStreamingInfo\\\"]\\n\\x1c\\x41\\x64\\x61ptiveBitrateStreamingInfo\\x12\\x13\\n\\x0bMainPlayUrl\\x18\\x01 \\x01(\\t\\x12\\x15\\n\\rBackupPlayUrl\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tAbrFormat\\x18\\x03 \\x01(\\t\\\",\\n\\x08VodPoint\\x12\\x11\\n\\tTimestamp\\x18\\x01 \\x01(\\x01\\x12\\r\\n\\x05Value\\x18\\x02 \\x01(\\x01\\\"\\x96\\x01\\n\\x14VodAllPlayInfoResult\\x12T\\n\\x17VodAllPlayInfoModelList\\x18\\x01 \\x03(\\x0b\\x32\\x33.Volcengine.Vod.Models.Business.VodAllPlayInfoModel\\x12\\x12\\n\\nTotalCount\\x18\\x02 \\x01(\\x05\\x12\\x14\\n\\x0cNotFoundVids\\x18\\x03 \\x03(\\t\\\"\\xc0\\x04\\n\\x13VodAllPlayInfoModel\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x02 \\x01(\\x05\\x12\\x11\\n\\tPosterUrl\\x18\\x03 \\x01(\\t\\x12\\x12\\n\\nTotalCount\\x18\\x04 \\x01(\\x05\\x12\\x16\\n\\x0e\\x45nableAdaptive\\x18\\x05 \\x01(\\x08\\x12I\\n\\x14VodTranscodePlayInfo\\x18\\x06 \\x03(\\x0b\\x32+.Volcengine.Vod.Models.Business.VodPlayInfo\\x12\\x46\\n\\x11VodSourcePlayInfo\\x18\\x07 \\x01(\\x0b\\x32+.Volcengine.Vod.Models.Business.VodPlayInfo\\x12H\\n\\x07Version\\x18\\x08 \\x01(\\x0e\\x32\\x37.Volcengine.Vod.Models.Business.VodPlayInfoModelVersion\\x12\\x43\\n\\rThumbInfoList\\x18\\t \\x03(\\x0b\\x32,.Volcengine.Vod.Models.Business.VodThumbInfo\\x12\\x16\\n\\x0e\\x42\\x61rrageMaskUrl\\x18\\n \\x01(\\t\\x12I\\n\\x10SubtitleInfoList\\x18\\x0b \\x03(\\x0b\\x32/.Volcengine.Vod.Models.Business.VodSubtitleInfo\\x12H\\n\\x0f\\x42\\x61rrageMaskInfo\\x18\\x0c \\x01(\\x0b\\x32/.Volcengine.Vod.Models.Business.BarrageMaskInfo*\\xd6\\x01\\n\\x17VodPlayInfoModelVersion\\x12$\\n UndefinedVodPlayInfoModelVersion\\x10\\x00\\x12%\\n!InternalV1VodPlayInfoModelVersion\\x10\\x01\\x12%\\n!InternalV2VodPlayInfoModelVersion\\x10\\x02\\x12%\\n!InternalV3VodPlayInfoModelVersion\\x10\\x03\\x12 \\n\\x1cToBV1VodPlayInfoModelVersion\\x10\\x04\\x42\\xcd\\x01\\n)com.volcengine.service.vod.model.businessB\\tVodCommonP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n_VODPLAYINFOMODELVERSION = DESCRIPTOR.enum_types_by_name['VodPlayInfoModelVersion']\nVodPlayInfoModelVersion = enum_type_wrapper.EnumTypeWrapper(_VODPLAYINFOMODELVERSION)\nUndefinedVodPlayInfoModelVersion = 0\nInternalV1VodPlayInfoModelVersion = 1\nInternalV2VodPlayInfoModelVersion = 2\nInternalV3VodPlayInfoModelVersion = 3\nToBV1VodPlayInfoModelVersion = 4\n\n\n_VODSOURCEINFO = DESCRIPTOR.message_types_by_name['VodSourceInfo']\n_VODSOURCEINFO_FILEEXTRAENTRY = _VODSOURCEINFO.nested_types_by_name['FileExtraEntry']\n_VODAUDIOSTREAMMETA = DESCRIPTOR.message_types_by_name['VodAudioStreamMeta']\n_VODVIDEOSTREAMMETA = DESCRIPTOR.message_types_by_name['VodVideoStreamMeta']\n_VODTRANSCODEINFO = DESCRIPTOR.message_types_by_name['VodTranscodeInfo']\n_VODTRANSCODEINFO_FILEEXTRAENTRY = _VODTRANSCODEINFO.nested_types_by_name['FileExtraEntry']\n_VODADAPTIVEINFO = DESCRIPTOR.message_types_by_name['VodAdaptiveInfo']\n_VODPLAYINFO = DESCRIPTOR.message_types_by_name['VodPlayInfo']\n_VODVOLUMEINFO = DESCRIPTOR.message_types_by_name['VodVolumeInfo']\n_BARRAGEMASKINFO = DESCRIPTOR.message_types_by_name['BarrageMaskInfo']\n_VODTHUMBINFO = DESCRIPTOR.message_types_by_name['VodThumbInfo']\n_VODSUBTITLEINFO = DESCRIPTOR.message_types_by_name['VodSubtitleInfo']\n_VODCOMMONCONFIGINFO = DESCRIPTOR.message_types_by_name['VodCommonConfigInfo']\n_VODPLAYINFOMODEL = DESCRIPTOR.message_types_by_name['VodPlayInfoModel']\n_ADAPTIVEBITRATESTREAMINGINFO = DESCRIPTOR.message_types_by_name['AdaptiveBitrateStreamingInfo']\n_VODPOINT = DESCRIPTOR.message_types_by_name['VodPoint']\n_VODALLPLAYINFORESULT = DESCRIPTOR.message_types_by_name['VodAllPlayInfoResult']\n_VODALLPLAYINFOMODEL = DESCRIPTOR.message_types_by_name['VodAllPlayInfoModel']\nVodSourceInfo = _reflection.GeneratedProtocolMessageType('VodSourceInfo', (_message.Message,), {\n\n  'FileExtraEntry' : _reflection.GeneratedProtocolMessageType('FileExtraEntry', (_message.Message,), {\n    'DESCRIPTOR' : _VODSOURCEINFO_FILEEXTRAENTRY,\n    '__module__' : 'volcengine.vod.business.vod_common_pb2'\n    # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodSourceInfo.FileExtraEntry)\n    })\n  ,\n  'DESCRIPTOR' : _VODSOURCEINFO,\n  '__module__' : 'volcengine.vod.business.vod_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodSourceInfo)\n  })\n_sym_db.RegisterMessage(VodSourceInfo)\n_sym_db.RegisterMessage(VodSourceInfo.FileExtraEntry)\n\nVodAudioStreamMeta = _reflection.GeneratedProtocolMessageType('VodAudioStreamMeta', (_message.Message,), {\n  'DESCRIPTOR' : _VODAUDIOSTREAMMETA,\n  '__module__' : 'volcengine.vod.business.vod_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodAudioStreamMeta)\n  })\n_sym_db.RegisterMessage(VodAudioStreamMeta)\n\nVodVideoStreamMeta = _reflection.GeneratedProtocolMessageType('VodVideoStreamMeta', (_message.Message,), {\n  'DESCRIPTOR' : _VODVIDEOSTREAMMETA,\n  '__module__' : 'volcengine.vod.business.vod_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodVideoStreamMeta)\n  })\n_sym_db.RegisterMessage(VodVideoStreamMeta)\n\nVodTranscodeInfo = _reflection.GeneratedProtocolMessageType('VodTranscodeInfo', (_message.Message,), {\n\n  'FileExtraEntry' : _reflection.GeneratedProtocolMessageType('FileExtraEntry', (_message.Message,), {\n    'DESCRIPTOR' : _VODTRANSCODEINFO_FILEEXTRAENTRY,\n    '__module__' : 'volcengine.vod.business.vod_common_pb2'\n    # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodTranscodeInfo.FileExtraEntry)\n    })\n  ,\n  'DESCRIPTOR' : _VODTRANSCODEINFO,\n  '__module__' : 'volcengine.vod.business.vod_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodTranscodeInfo)\n  })\n_sym_db.RegisterMessage(VodTranscodeInfo)\n_sym_db.RegisterMessage(VodTranscodeInfo.FileExtraEntry)\n\nVodAdaptiveInfo = _reflection.GeneratedProtocolMessageType('VodAdaptiveInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODADAPTIVEINFO,\n  '__module__' : 'volcengine.vod.business.vod_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodAdaptiveInfo)\n  })\n_sym_db.RegisterMessage(VodAdaptiveInfo)\n\nVodPlayInfo = _reflection.GeneratedProtocolMessageType('VodPlayInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODPLAYINFO,\n  '__module__' : 'volcengine.vod.business.vod_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodPlayInfo)\n  })\n_sym_db.RegisterMessage(VodPlayInfo)\n\nVodVolumeInfo = _reflection.GeneratedProtocolMessageType('VodVolumeInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODVOLUMEINFO,\n  '__module__' : 'volcengine.vod.business.vod_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodVolumeInfo)\n  })\n_sym_db.RegisterMessage(VodVolumeInfo)\n\nBarrageMaskInfo = _reflection.GeneratedProtocolMessageType('BarrageMaskInfo', (_message.Message,), {\n  'DESCRIPTOR' : _BARRAGEMASKINFO,\n  '__module__' : 'volcengine.vod.business.vod_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.BarrageMaskInfo)\n  })\n_sym_db.RegisterMessage(BarrageMaskInfo)\n\nVodThumbInfo = _reflection.GeneratedProtocolMessageType('VodThumbInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODTHUMBINFO,\n  '__module__' : 'volcengine.vod.business.vod_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodThumbInfo)\n  })\n_sym_db.RegisterMessage(VodThumbInfo)\n\nVodSubtitleInfo = _reflection.GeneratedProtocolMessageType('VodSubtitleInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBTITLEINFO,\n  '__module__' : 'volcengine.vod.business.vod_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodSubtitleInfo)\n  })\n_sym_db.RegisterMessage(VodSubtitleInfo)\n\nVodCommonConfigInfo = _reflection.GeneratedProtocolMessageType('VodCommonConfigInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODCOMMONCONFIGINFO,\n  '__module__' : 'volcengine.vod.business.vod_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCommonConfigInfo)\n  })\n_sym_db.RegisterMessage(VodCommonConfigInfo)\n\nVodPlayInfoModel = _reflection.GeneratedProtocolMessageType('VodPlayInfoModel', (_message.Message,), {\n  'DESCRIPTOR' : _VODPLAYINFOMODEL,\n  '__module__' : 'volcengine.vod.business.vod_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodPlayInfoModel)\n  })\n_sym_db.RegisterMessage(VodPlayInfoModel)\n\nAdaptiveBitrateStreamingInfo = _reflection.GeneratedProtocolMessageType('AdaptiveBitrateStreamingInfo', (_message.Message,), {\n  'DESCRIPTOR' : _ADAPTIVEBITRATESTREAMINGINFO,\n  '__module__' : 'volcengine.vod.business.vod_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.AdaptiveBitrateStreamingInfo)\n  })\n_sym_db.RegisterMessage(AdaptiveBitrateStreamingInfo)\n\nVodPoint = _reflection.GeneratedProtocolMessageType('VodPoint', (_message.Message,), {\n  'DESCRIPTOR' : _VODPOINT,\n  '__module__' : 'volcengine.vod.business.vod_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodPoint)\n  })\n_sym_db.RegisterMessage(VodPoint)\n\nVodAllPlayInfoResult = _reflection.GeneratedProtocolMessageType('VodAllPlayInfoResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODALLPLAYINFORESULT,\n  '__module__' : 'volcengine.vod.business.vod_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodAllPlayInfoResult)\n  })\n_sym_db.RegisterMessage(VodAllPlayInfoResult)\n\nVodAllPlayInfoModel = _reflection.GeneratedProtocolMessageType('VodAllPlayInfoModel', (_message.Message,), {\n  'DESCRIPTOR' : _VODALLPLAYINFOMODEL,\n  '__module__' : 'volcengine.vod.business.vod_common_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodAllPlayInfoModel)\n  })\n_sym_db.RegisterMessage(VodAllPlayInfoModel)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.vod.model.businessB\\tVodCommonP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _VODSOURCEINFO_FILEEXTRAENTRY._options = None\n  _VODSOURCEINFO_FILEEXTRAENTRY._serialized_options = b'8\\001'\n  _VODTRANSCODEINFO_FILEEXTRAENTRY._options = None\n  _VODTRANSCODEINFO_FILEEXTRAENTRY._serialized_options = b'8\\001'\n  _VODPLAYINFOMODELVERSION._serialized_start=4414\n  _VODPLAYINFOMODELVERSION._serialized_end=4628\n  _VODSOURCEINFO._serialized_start=77\n  _VODSOURCEINFO._serialized_end=688\n  _VODSOURCEINFO_FILEEXTRAENTRY._serialized_start=640\n  _VODSOURCEINFO_FILEEXTRAENTRY._serialized_end=688\n  _VODAUDIOSTREAMMETA._serialized_start=690\n  _VODAUDIOSTREAMMETA._serialized_end=815\n  _VODVIDEOSTREAMMETA._serialized_start=818\n  _VODVIDEOSTREAMMETA._serialized_end=952\n  _VODTRANSCODEINFO._serialized_start=955\n  _VODTRANSCODEINFO._serialized_end=1476\n  _VODTRANSCODEINFO_FILEEXTRAENTRY._serialized_start=640\n  _VODTRANSCODEINFO_FILEEXTRAENTRY._serialized_end=688\n  _VODADAPTIVEINFO._serialized_start=1478\n  _VODADAPTIVEINFO._serialized_end=1561\n  _VODPLAYINFO._serialized_start=1564\n  _VODPLAYINFO._serialized_end=2131\n  _VODVOLUMEINFO._serialized_start=2133\n  _VODVOLUMEINFO._serialized_end=2180\n  _BARRAGEMASKINFO._serialized_start=2183\n  _BARRAGEMASKINFO._serialized_end=2346\n  _VODTHUMBINFO._serialized_start=2349\n  _VODTHUMBINFO._serialized_end=2509\n  _VODSUBTITLEINFO._serialized_start=2512\n  _VODSUBTITLEINFO._serialized_end=2768\n  _VODCOMMONCONFIGINFO._serialized_start=2770\n  _VODCOMMONCONFIGINFO._serialized_end=2835\n  _VODPLAYINFOMODEL._serialized_start=2838\n  _VODPLAYINFOMODEL._serialized_end=3538\n  _ADAPTIVEBITRATESTREAMINGINFO._serialized_start=3540\n  _ADAPTIVEBITRATESTREAMINGINFO._serialized_end=3633\n  _VODPOINT._serialized_start=3635\n  _VODPOINT._serialized_end=3679\n  _VODALLPLAYINFORESULT._serialized_start=3682\n  _VODALLPLAYINFORESULT._serialized_end=3832\n  _VODALLPLAYINFOMODEL._serialized_start=3835\n  _VODALLPLAYINFOMODEL._serialized_end=4411\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/vod/models/business/vod_drama_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/business/vod_drama.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\'volcengine/vod/business/vod_drama.proto\\x12\\x1eVolcengine.Vod.Models.Business\\\"J\\n\\x1dVodCreateDramaRecapTaskResult\\x12\\x0e\\n\\x06TaskId\\x18\\x01 \\x01(\\t\\x12\\x19\\n\\x11\\x44ramaScriptTaskId\\x18\\x02 \\x01(\\t\\\"0\\n\\x1eVodCreateDramaScriptTaskResult\\x12\\x0e\\n\\x06TaskId\\x18\\x01 \\x01(\\t\\\";\\n\\x1cVodQueryDramaRecapTaskResult\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x02 \\x01(\\t\\\"B\\n\\x1dVodQueryDramaScriptTaskResult\\x12\\x11\\n\\tResultUrl\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x02 \\x01(\\t\\\"j\\n$VodCreateDramaRecapTaskSpeakerConfig\\x12\\x11\\n\\tVoiceType\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05\\x41ppId\\x18\\x02 \\x01(\\t\\x12\\x14\\n\\x07\\x43luster\\x18\\x03 \\x01(\\tH\\x00\\x88\\x01\\x01\\x42\\n\\n\\x08_Cluster\\\"\\x99\\x05\\n!VodCreateDramaRecapTaskFontconfig\\x12\\x12\\n\\nNoSubtitle\\x18\\x01 \\x01(\\x08\\x12\\x15\\n\\x08\\x46ontType\\x18\\x02 \\x01(\\tH\\x00\\x88\\x01\\x01\\x12\\x15\\n\\x08\\x46ontSize\\x18\\x03 \\x01(\\x05H\\x01\\x88\\x01\\x01\\x12\\x12\\n\\x05Width\\x18\\x04 \\x01(\\x05H\\x02\\x88\\x01\\x01\\x12\\x13\\n\\x06Height\\x18\\x05 \\x01(\\x05H\\x03\\x88\\x01\\x01\\x12\\x12\\n\\x05\\x41lpha\\x18\\x06 \\x01(\\x01H\\x04\\x88\\x01\\x01\\x12\\x14\\n\\x07TextRes\\x18\\x07 \\x01(\\tH\\x05\\x88\\x01\\x01\\x12\\x16\\n\\tFontColor\\x18\\x08 \\x01(\\tH\\x06\\x88\\x01\\x01\\x12\\x1c\\n\\x0f\\x42\\x61\\x63kgroundColor\\x18\\t \\x01(\\tH\\x07\\x88\\x01\\x01\\x12!\\n\\x14\\x42\\x61\\x63kgroundBorderSize\\x18\\n \\x01(\\x01H\\x08\\x88\\x01\\x01\\x12\\x18\\n\\x0b\\x42orderColor\\x18\\x0b \\x01(\\tH\\t\\x88\\x01\\x01\\x12\\x18\\n\\x0b\\x42orderWidth\\x18\\x0c \\x01(\\x05H\\n\\x88\\x01\\x01\\x12\\x18\\n\\x0bTypesetting\\x18\\r \\x01(\\x05H\\x0b\\x88\\x01\\x01\\x12\\x16\\n\\tAlignType\\x18\\x0e \\x01(\\x05H\\x0c\\x88\\x01\\x01\\x12\\x11\\n\\x04PosX\\x18\\x0f \\x01(\\x05H\\r\\x88\\x01\\x01\\x12\\x11\\n\\x04PosY\\x18\\x10 \\x01(\\x05H\\x0e\\x88\\x01\\x01\\x12\\x19\\n\\x0cLineMaxWidth\\x18\\x11 \\x01(\\x01H\\x0f\\x88\\x01\\x01\\x42\\x0b\\n\\t_FontTypeB\\x0b\\n\\t_FontSizeB\\x08\\n\\x06_WidthB\\t\\n\\x07_HeightB\\x08\\n\\x06_AlphaB\\n\\n\\x08_TextResB\\x0c\\n\\n_FontColorB\\x12\\n\\x10_BackgroundColorB\\x17\\n\\x15_BackgroundBorderSizeB\\x0e\\n\\x0c_BorderColorB\\x0e\\n\\x0c_BorderWidthB\\x0e\\n\\x0c_TypesettingB\\x0c\\n\\n_AlignTypeB\\x07\\n\\x05_PosXB\\x07\\n\\x05_PosYB\\x0f\\n\\r_LineMaxWidth\\\"\\xe6\\x02\\n\\x10\\x44ramaRecapConfig\\x12\\\"\\n\\x15\\x41utoGenerateRecapText\\x18\\x01 \\x01(\\x08H\\x00\\x88\\x01\\x01\\x12\\x1c\\n\\x0fHasHardSubtitle\\x18\\x02 \\x01(\\x08H\\x01\\x88\\x01\\x01\\x12\\x1c\\n\\x0fRecapTextLength\\x18\\x03 \\x01(\\x05H\\x02\\x88\\x01\\x01\\x12\\x17\\n\\nRecapStyle\\x18\\x04 \\x01(\\tH\\x03\\x88\\x01\\x01\\x12\\x1b\\n\\x0eRecapTextSpeed\\x18\\x05 \\x01(\\x01H\\x04\\x88\\x01\\x01\\x12\\x1d\\n\\x10\\x41llowRepeatMatch\\x18\\x06 \\x01(\\x08H\\x05\\x88\\x01\\x01\\x12\\x16\\n\\tPauseTime\\x18\\x07 \\x01(\\x05H\\x06\\x88\\x01\\x01\\x42\\x18\\n\\x16_AutoGenerateRecapTextB\\x12\\n\\x10_HasHardSubtitleB\\x12\\n\\x10_RecapTextLengthB\\r\\n\\x0b_RecapStyleB\\x11\\n\\x0f_RecapTextSpeedB\\x13\\n\\x11_AllowRepeatMatchB\\x0c\\n\\n_PauseTimeB\\xcc\\x01\\n)com.volcengine.service.vod.model.businessB\\x08VodDramaP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_VODCREATEDRAMARECAPTASKRESULT = DESCRIPTOR.message_types_by_name['VodCreateDramaRecapTaskResult']\n_VODCREATEDRAMASCRIPTTASKRESULT = DESCRIPTOR.message_types_by_name['VodCreateDramaScriptTaskResult']\n_VODQUERYDRAMARECAPTASKRESULT = DESCRIPTOR.message_types_by_name['VodQueryDramaRecapTaskResult']\n_VODQUERYDRAMASCRIPTTASKRESULT = DESCRIPTOR.message_types_by_name['VodQueryDramaScriptTaskResult']\n_VODCREATEDRAMARECAPTASKSPEAKERCONFIG = DESCRIPTOR.message_types_by_name['VodCreateDramaRecapTaskSpeakerConfig']\n_VODCREATEDRAMARECAPTASKFONTCONFIG = DESCRIPTOR.message_types_by_name['VodCreateDramaRecapTaskFontconfig']\n_DRAMARECAPCONFIG = DESCRIPTOR.message_types_by_name['DramaRecapConfig']\nVodCreateDramaRecapTaskResult = _reflection.GeneratedProtocolMessageType('VodCreateDramaRecapTaskResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEDRAMARECAPTASKRESULT,\n  '__module__' : 'volcengine.vod.business.vod_drama_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCreateDramaRecapTaskResult)\n  })\n_sym_db.RegisterMessage(VodCreateDramaRecapTaskResult)\n\nVodCreateDramaScriptTaskResult = _reflection.GeneratedProtocolMessageType('VodCreateDramaScriptTaskResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEDRAMASCRIPTTASKRESULT,\n  '__module__' : 'volcengine.vod.business.vod_drama_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCreateDramaScriptTaskResult)\n  })\n_sym_db.RegisterMessage(VodCreateDramaScriptTaskResult)\n\nVodQueryDramaRecapTaskResult = _reflection.GeneratedProtocolMessageType('VodQueryDramaRecapTaskResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODQUERYDRAMARECAPTASKRESULT,\n  '__module__' : 'volcengine.vod.business.vod_drama_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodQueryDramaRecapTaskResult)\n  })\n_sym_db.RegisterMessage(VodQueryDramaRecapTaskResult)\n\nVodQueryDramaScriptTaskResult = _reflection.GeneratedProtocolMessageType('VodQueryDramaScriptTaskResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODQUERYDRAMASCRIPTTASKRESULT,\n  '__module__' : 'volcengine.vod.business.vod_drama_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodQueryDramaScriptTaskResult)\n  })\n_sym_db.RegisterMessage(VodQueryDramaScriptTaskResult)\n\nVodCreateDramaRecapTaskSpeakerConfig = _reflection.GeneratedProtocolMessageType('VodCreateDramaRecapTaskSpeakerConfig', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEDRAMARECAPTASKSPEAKERCONFIG,\n  '__module__' : 'volcengine.vod.business.vod_drama_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCreateDramaRecapTaskSpeakerConfig)\n  })\n_sym_db.RegisterMessage(VodCreateDramaRecapTaskSpeakerConfig)\n\nVodCreateDramaRecapTaskFontconfig = _reflection.GeneratedProtocolMessageType('VodCreateDramaRecapTaskFontconfig', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEDRAMARECAPTASKFONTCONFIG,\n  '__module__' : 'volcengine.vod.business.vod_drama_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCreateDramaRecapTaskFontconfig)\n  })\n_sym_db.RegisterMessage(VodCreateDramaRecapTaskFontconfig)\n\nDramaRecapConfig = _reflection.GeneratedProtocolMessageType('DramaRecapConfig', (_message.Message,), {\n  'DESCRIPTOR' : _DRAMARECAPCONFIG,\n  '__module__' : 'volcengine.vod.business.vod_drama_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DramaRecapConfig)\n  })\n_sym_db.RegisterMessage(DramaRecapConfig)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.vod.model.businessB\\010VodDramaP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _VODCREATEDRAMARECAPTASKRESULT._serialized_start=75\n  _VODCREATEDRAMARECAPTASKRESULT._serialized_end=149\n  _VODCREATEDRAMASCRIPTTASKRESULT._serialized_start=151\n  _VODCREATEDRAMASCRIPTTASKRESULT._serialized_end=199\n  _VODQUERYDRAMARECAPTASKRESULT._serialized_start=201\n  _VODQUERYDRAMARECAPTASKRESULT._serialized_end=260\n  _VODQUERYDRAMASCRIPTTASKRESULT._serialized_start=262\n  _VODQUERYDRAMASCRIPTTASKRESULT._serialized_end=328\n  _VODCREATEDRAMARECAPTASKSPEAKERCONFIG._serialized_start=330\n  _VODCREATEDRAMARECAPTASKSPEAKERCONFIG._serialized_end=436\n  _VODCREATEDRAMARECAPTASKFONTCONFIG._serialized_start=439\n  _VODCREATEDRAMARECAPTASKFONTCONFIG._serialized_end=1104\n  _DRAMARECAPCONFIG._serialized_start=1107\n  _DRAMARECAPCONFIG._serialized_end=1465\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/vod/models/business/vod_edit_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/business/vod_edit.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n&volcengine/vod/business/vod_edit.proto\\x12\\x1eVolcengine.Vod.Models.Business\\\"0\\n\\x1fSubmitDirectEditTaskAsyncResult\\x12\\r\\n\\x05ReqId\\x18\\x01 \\x01(\\t\\\"M\\n\\x1eSubmitDirectEditTaskSyncResult\\x12\\x0c\\n\\x04\\x43ode\\x18\\x01 \\x01(\\x05\\x12\\r\\n\\x05ReqId\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06Output\\x18\\x03 \\x01(\\t\\\"\\'\\n\\x15GetDirectEditProgress\\x12\\x0e\\n\\x06Result\\x18\\x01 \\x01(\\x05\\\"\\xa8\\x01\\n\\x13GetDirectEditResult\\x12\\r\\n\\x05ReqId\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tEditParam\\x18\\x02 \\x01(\\x0c\\x12\\x10\\n\\x08Priority\\x18\\x03 \\x01(\\x05\\x12\\x13\\n\\x0b\\x43\\x61llbackUri\\x18\\x04 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x05 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x06 \\x01(\\t\\x12\\x11\\n\\tOutputVid\\x18\\x07 \\x01(\\t\\x12\\x0f\\n\\x07Message\\x18\\x08 \\x01(\\t\\\"\\'\\n\\x14\\x43\\x61ncelDirectEditTask\\x12\\x0f\\n\\x07Message\\x18\\x01 \\x01(\\t\\\"/\\n\\x18\\x41syncVCreativeTaskResult\\x12\\x13\\n\\x0bVCreativeId\\x18\\x01 \\x01(\\t\\\"a\\n\\x16GetVCreativeTaskResult\\x12\\x10\\n\\x08Uploader\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tParamJson\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x03 \\x01(\\t\\x12\\x12\\n\\nOutputJson\\x18\\x04 \\x01(\\tB\\xc8\\x01\\n)com.volcengine.service.vod.model.businessB\\x07VodEditP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xca\\x02 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_SUBMITDIRECTEDITTASKASYNCRESULT = DESCRIPTOR.message_types_by_name['SubmitDirectEditTaskAsyncResult']\n_SUBMITDIRECTEDITTASKSYNCRESULT = DESCRIPTOR.message_types_by_name['SubmitDirectEditTaskSyncResult']\n_GETDIRECTEDITPROGRESS = DESCRIPTOR.message_types_by_name['GetDirectEditProgress']\n_GETDIRECTEDITRESULT = DESCRIPTOR.message_types_by_name['GetDirectEditResult']\n_CANCELDIRECTEDITTASK = DESCRIPTOR.message_types_by_name['CancelDirectEditTask']\n_ASYNCVCREATIVETASKRESULT = DESCRIPTOR.message_types_by_name['AsyncVCreativeTaskResult']\n_GETVCREATIVETASKRESULT = DESCRIPTOR.message_types_by_name['GetVCreativeTaskResult']\nSubmitDirectEditTaskAsyncResult = _reflection.GeneratedProtocolMessageType('SubmitDirectEditTaskAsyncResult', (_message.Message,), {\n  'DESCRIPTOR' : _SUBMITDIRECTEDITTASKASYNCRESULT,\n  '__module__' : 'volcengine.vod.business.vod_edit_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.SubmitDirectEditTaskAsyncResult)\n  })\n_sym_db.RegisterMessage(SubmitDirectEditTaskAsyncResult)\n\nSubmitDirectEditTaskSyncResult = _reflection.GeneratedProtocolMessageType('SubmitDirectEditTaskSyncResult', (_message.Message,), {\n  'DESCRIPTOR' : _SUBMITDIRECTEDITTASKSYNCRESULT,\n  '__module__' : 'volcengine.vod.business.vod_edit_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.SubmitDirectEditTaskSyncResult)\n  })\n_sym_db.RegisterMessage(SubmitDirectEditTaskSyncResult)\n\nGetDirectEditProgress = _reflection.GeneratedProtocolMessageType('GetDirectEditProgress', (_message.Message,), {\n  'DESCRIPTOR' : _GETDIRECTEDITPROGRESS,\n  '__module__' : 'volcengine.vod.business.vod_edit_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.GetDirectEditProgress)\n  })\n_sym_db.RegisterMessage(GetDirectEditProgress)\n\nGetDirectEditResult = _reflection.GeneratedProtocolMessageType('GetDirectEditResult', (_message.Message,), {\n  'DESCRIPTOR' : _GETDIRECTEDITRESULT,\n  '__module__' : 'volcengine.vod.business.vod_edit_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.GetDirectEditResult)\n  })\n_sym_db.RegisterMessage(GetDirectEditResult)\n\nCancelDirectEditTask = _reflection.GeneratedProtocolMessageType('CancelDirectEditTask', (_message.Message,), {\n  'DESCRIPTOR' : _CANCELDIRECTEDITTASK,\n  '__module__' : 'volcengine.vod.business.vod_edit_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CancelDirectEditTask)\n  })\n_sym_db.RegisterMessage(CancelDirectEditTask)\n\nAsyncVCreativeTaskResult = _reflection.GeneratedProtocolMessageType('AsyncVCreativeTaskResult', (_message.Message,), {\n  'DESCRIPTOR' : _ASYNCVCREATIVETASKRESULT,\n  '__module__' : 'volcengine.vod.business.vod_edit_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.AsyncVCreativeTaskResult)\n  })\n_sym_db.RegisterMessage(AsyncVCreativeTaskResult)\n\nGetVCreativeTaskResult = _reflection.GeneratedProtocolMessageType('GetVCreativeTaskResult', (_message.Message,), {\n  'DESCRIPTOR' : _GETVCREATIVETASKRESULT,\n  '__module__' : 'volcengine.vod.business.vod_edit_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.GetVCreativeTaskResult)\n  })\n_sym_db.RegisterMessage(GetVCreativeTaskResult)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.vod.model.businessB\\007VodEditP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\240\\001\\001\\330\\001\\001\\312\\002 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _SUBMITDIRECTEDITTASKASYNCRESULT._serialized_start=74\n  _SUBMITDIRECTEDITTASKASYNCRESULT._serialized_end=122\n  _SUBMITDIRECTEDITTASKSYNCRESULT._serialized_start=124\n  _SUBMITDIRECTEDITTASKSYNCRESULT._serialized_end=201\n  _GETDIRECTEDITPROGRESS._serialized_start=203\n  _GETDIRECTEDITPROGRESS._serialized_end=242\n  _GETDIRECTEDITRESULT._serialized_start=245\n  _GETDIRECTEDITRESULT._serialized_end=413\n  _CANCELDIRECTEDITTASK._serialized_start=415\n  _CANCELDIRECTEDITTASK._serialized_end=454\n  _ASYNCVCREATIVETASKRESULT._serialized_start=456\n  _ASYNCVCREATIVETASKRESULT._serialized_end=503\n  _GETVCREATIVETASKRESULT._serialized_start=505\n  _GETVCREATIVETASKRESULT._serialized_end=602\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/vod/models/business/vod_measure_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/business/vod_measure.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n)volcengine/vod/business/vod_measure.proto\\x12\\x1eVolcengine.Vod.Models.Business\\\"<\\n\\x1d\\x44\\x65scribeVodSpaceTranscodeItem\\x12\\x0c\\n\\x04Name\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05Value\\x18\\x02 \\x01(\\x03\\\"\\x8f\\x01\\n%DescribeVodSpaceTranscodeDetailTVUnit\\x12\\x0c\\n\\x04Time\\x18\\x01 \\x01(\\t\\x12X\\n\\x11TranscodeItemList\\x18\\x02 \\x03(\\x0b\\x32=.Volcengine.Vod.Models.Business.DescribeVodSpaceTranscodeItem\\\"\\xb5\\x01\\n\\x1f\\x44\\x65scribeVodSpaceTranscodeDetail\\x12\\r\\n\\x05Space\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tTaskStage\\x18\\x02 \\x01(\\t\\x12\\r\\n\\x05Total\\x18\\x03 \\x01(\\x03\\x12\\x61\\n\\x12TranscodeUsageList\\x18\\x04 \\x03(\\x0b\\x32\\x45.Volcengine.Vod.Models.Business.DescribeVodSpaceTranscodeDetailTVUnit\\\"\\xc0\\x03\\n#DescribeVodSpaceTranscodeDataResult\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x03(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x15\\n\\rTranscodeType\\x18\\x04 \\x01(\\t\\x12\\x15\\n\\rSpecification\\x18\\x05 \\x01(\\t\\x12\\x15\\n\\rTaskStageList\\x18\\x06 \\x03(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x07 \\x01(\\x03\\x12\\x17\\n\\x0f\\x44\\x65tailFieldList\\x18\\x08 \\x03(\\t\\x12\\x12\\n\\nRegionList\\x18\\t \\x03(\\t\\x12\\x1a\\n\\x12TotalTranscodeData\\x18\\n \\x01(\\x03\\x12]\\n\\x16TotalTranscodeDataList\\x18\\x0b \\x03(\\x0b\\x32=.Volcengine.Vod.Models.Business.DescribeVodSpaceTranscodeItem\\x12`\\n\\x17TranscodeDataDetailList\\x18\\x0c \\x03(\\x0b\\x32?.Volcengine.Vod.Models.Business.DescribeVodSpaceTranscodeDetail\\\"B\\n DescribeVodSpaceAIStatisDataItem\\x12\\x0c\\n\\x04Time\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x02 \\x01(\\x03\\\"\\xa1\\x01\\n\\\"DescribeVodSpaceAIStatisDataDetail\\x12\\r\\n\\x05Space\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tTaskStage\\x18\\x02 \\x01(\\t\\x12Y\\n\\x0f\\x41iUsageDataList\\x18\\x03 \\x03(\\x0b\\x32@.Volcengine.Vod.Models.Business.DescribeVodSpaceAIStatisDataItem\\\"\\xa1\\x03\\n\\\"DescribeVodSpaceAIStatisDataResult\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x03(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x13\\n\\x0bMediaAiType\\x18\\x04 \\x01(\\t\\x12\\x15\\n\\rTaskStageList\\x18\\x05 \\x03(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x06 \\x01(\\x03\\x12\\x17\\n\\x0f\\x44\\x65tailFieldList\\x18\\x07 \\x03(\\t\\x12\\x12\\n\\nRegionList\\x18\\x08 \\x03(\\t\\x12\\x18\\n\\x10TotalAiUsageData\\x18\\t \\x01(\\x03\\x12Y\\n\\x0f\\x41iUsageDataList\\x18\\n \\x03(\\x0b\\x32@.Volcengine.Vod.Models.Business.DescribeVodSpaceAIStatisDataItem\\x12\\x61\\n\\x15\\x41iUsageDataDetailList\\x18\\x0b \\x03(\\x0b\\x32\\x42.Volcengine.Vod.Models.Business.DescribeVodSpaceAIStatisDataDetail\\\"E\\n&DescribeVodSpaceSubtitleStatisDataItem\\x12\\x0c\\n\\x04Time\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05Usage\\x18\\x02 \\x01(\\x03\\\"\\xb3\\x01\\n(DescribeVodSpaceSubtitleStatisDataDetail\\x12\\r\\n\\x05Space\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tTaskStage\\x18\\x02 \\x01(\\t\\x12\\x65\\n\\x15SubtitleUsageDataList\\x18\\x03 \\x03(\\x0b\\x32\\x46.Volcengine.Vod.Models.Business.DescribeVodSpaceSubtitleStatisDataItem\\\"\\xc6\\x03\\n(DescribeVodSpaceSubtitleStatisDataResult\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x03(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x14\\n\\x0cSubtitleType\\x18\\x04 \\x01(\\t\\x12\\x15\\n\\rTaskStageList\\x18\\x05 \\x03(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x06 \\x01(\\x03\\x12\\x17\\n\\x0f\\x44\\x65tailFieldList\\x18\\x07 \\x03(\\t\\x12\\x12\\n\\nRegionList\\x18\\x08 \\x03(\\t\\x12\\x1e\\n\\x16TotalSubtitleUsageData\\x18\\t \\x01(\\x03\\x12\\x65\\n\\x15SubtitleUsageDataList\\x18\\n \\x03(\\x0b\\x32\\x46.Volcengine.Vod.Models.Business.DescribeVodSpaceSubtitleStatisDataItem\\x12m\\n\\x1bSubtitleUsageDataDetailList\\x18\\x0b \\x03(\\x0b\\x32H.Volcengine.Vod.Models.Business.DescribeVodSpaceSubtitleStatisDataDetail\\\"C\\n$DescribeVodSpaceDetectStatisDataItem\\x12\\x0c\\n\\x04Time\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05Usage\\x18\\x02 \\x01(\\x03\\\"\\xad\\x01\\n&DescribeVodSpaceDetectStatisDataDetail\\x12\\r\\n\\x05Space\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tTaskStage\\x18\\x02 \\x01(\\t\\x12\\x61\\n\\x13\\x44\\x65tectUsageDataList\\x18\\x03 \\x03(\\x0b\\x32\\x44.Volcengine.Vod.Models.Business.DescribeVodSpaceDetectStatisDataItem\\\"\\xb8\\x03\\n&DescribeVodSpaceDetectStatisDataResult\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x03(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x12\\n\\nDetectType\\x18\\x04 \\x01(\\t\\x12\\x15\\n\\rTaskStageList\\x18\\x05 \\x03(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x06 \\x01(\\x03\\x12\\x17\\n\\x0f\\x44\\x65tailFieldList\\x18\\x07 \\x03(\\t\\x12\\x12\\n\\nRegionList\\x18\\x08 \\x03(\\t\\x12\\x1c\\n\\x14TotalDetectUsageData\\x18\\t \\x01(\\x03\\x12\\x61\\n\\x13\\x44\\x65tectUsageDataList\\x18\\n \\x03(\\x0b\\x32\\x44.Volcengine.Vod.Models.Business.DescribeVodSpaceDetectStatisDataItem\\x12i\\n\\x19\\x44\\x65tectUsageDataDetailList\\x18\\x0b \\x03(\\x0b\\x32\\x46.Volcengine.Vod.Models.Business.DescribeVodSpaceDetectStatisDataDetail\\\":\\n\\x1b\\x44\\x65scribeVodSnapshotDataItem\\x12\\x0c\\n\\x04Time\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05\\x43ount\\x18\\x02 \\x01(\\x03\\\"\\xa7\\x01\\n\\x1d\\x44\\x65scribeVodSnapshotDataDetail\\x12\\r\\n\\x05Space\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tTaskStage\\x18\\x02 \\x01(\\t\\x12\\r\\n\\x05Total\\x18\\x03 \\x01(\\t\\x12U\\n\\x10SnapshotDataList\\x18\\x04 \\x03(\\x0b\\x32;.Volcengine.Vod.Models.Business.DescribeVodSnapshotDataItem\\\"\\x96\\x03\\n\\x1d\\x44\\x65scribeVodSnapshotDataResult\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x03(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x14\\n\\x0cSnapshotType\\x18\\x04 \\x01(\\t\\x12\\x15\\n\\rTaskStageList\\x18\\x05 \\x03(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x06 \\x01(\\x03\\x12\\x17\\n\\x0f\\x44\\x65tailFieldList\\x18\\x07 \\x03(\\t\\x12\\x12\\n\\nRegionList\\x18\\x08 \\x03(\\t\\x12\\x19\\n\\x11TotalSnapshotData\\x18\\t \\x01(\\x03\\x12U\\n\\x10SnapshotDataList\\x18\\n \\x03(\\x0b\\x32;.Volcengine.Vod.Models.Business.DescribeVodSnapshotDataItem\\x12]\\n\\x16SnapshotDetailDataList\\x18\\x0b \\x03(\\x0b\\x32=.Volcengine.Vod.Models.Business.DescribeVodSnapshotDataDetail\\\"\\xd8\\x01\\n%DescribeVodSpaceWorkflowTranscodeInfo\\x12\\x14\\n\\x0cTemplateType\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileType\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x03 \\x01(\\x03\\x12\\r\\n\\x05\\x43odec\\x18\\x04 \\x01(\\t\\x12\\r\\n\\x05Remux\\x18\\x05 \\x01(\\x08\\x12\\x12\\n\\nDefinition\\x18\\x06 \\x01(\\t\\x12\\r\\n\\x05Width\\x18\\x07 \\x01(\\x03\\x12\\x0e\\n\\x06Height\\x18\\x08 \\x01(\\x03\\x12\\r\\n\\x05Slice\\x18\\t \\x01(\\x08\\x12\\x15\\n\\rIsLowPriority\\x18\\n \\x01(\\x08\\\"c\\n$DescribeVodSpaceWorkflowSnapshotInfo\\x12\\x14\\n\\x0cTemplateType\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06Number\\x18\\x02 \\x01(\\x03\\x12\\x15\\n\\rIsLowPriority\\x18\\x03 \\x01(\\x08\\\"h\\n\\'DescribeVodSpaceWorkflowEnhanceExecInfo\\x12\\x14\\n\\x0cTemplateType\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x02 \\x01(\\x03\\x12\\x15\\n\\rIsLowPriority\\x18\\x03 \\x01(\\x08\\\"t\\n#DescribeVodSpaceWorkflowVideoAIInfo\\x12\\x14\\n\\x0cTemplateType\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x02 \\x01(\\x03\\x12\\x0e\\n\\x06Number\\x18\\x03 \\x01(\\x03\\x12\\x15\\n\\rIsLowPriority\\x18\\x04 \\x01(\\x08\\\"\\x8d\\x04\\n\\x1e\\x44\\x65scribeVodSpaceWorkflowDetail\\x12\\r\\n\\x05RunId\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Vid\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nTemplateId\\x18\\x03 \\x01(\\t\\x12\\x11\\n\\tSpaceName\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x05 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x06 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x07 \\x01(\\t\\x12\\\\\\n\\rTranscodeInfo\\x18\\x08 \\x01(\\x0b\\x32\\x45.Volcengine.Vod.Models.Business.DescribeVodSpaceWorkflowTranscodeInfo\\x12Z\\n\\x0cSnapshotInfo\\x18\\t \\x01(\\x0b\\x32\\x44.Volcengine.Vod.Models.Business.DescribeVodSpaceWorkflowSnapshotInfo\\x12`\\n\\x0f\\x45nhanceExecInfo\\x18\\n \\x01(\\x0b\\x32G.Volcengine.Vod.Models.Business.DescribeVodSpaceWorkflowEnhanceExecInfo\\x12X\\n\\x0bVideoAIInfo\\x18\\x0b \\x01(\\x0b\\x32\\x43.Volcengine.Vod.Models.Business.DescribeVodSpaceWorkflowVideoAIInfo\\\"\\xfb\\x01\\n(DescribeVodSpaceWorkflowDetailDataResult\\x12\\x0e\\n\\x06Region\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05Space\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x04 \\x01(\\t\\x12\\x10\\n\\x08PageSize\\x18\\x05 \\x01(\\x03\\x12\\x0f\\n\\x07PageNum\\x18\\x06 \\x01(\\x03\\x12\\r\\n\\x05Total\\x18\\x07 \\x01(\\x03\\x12Z\\n\\x12WorkflowDetailData\\x18\\x08 \\x03(\\x0b\\x32>.Volcengine.Vod.Models.Business.DescribeVodSpaceWorkflowDetail\\\"\\x81\\x01\\n\\x1a\\x44\\x65scribeVodSpaceEditDetail\\x12\\x0c\\n\\x04Time\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tOutputVid\\x18\\x02 \\x01(\\t\\x12\\r\\n\\x05Space\\x18\\x03 \\x01(\\t\\x12\\r\\n\\x05\\x43odec\\x18\\x04 \\x01(\\t\\x12\\x12\\n\\nDefinition\\x18\\x05 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x06 \\x01(\\x03\\\"\\xef\\x01\\n$DescribeVodSpaceEditDetailDataResult\\x12\\x0e\\n\\x06Region\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05Space\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x04 \\x01(\\t\\x12\\x10\\n\\x08PageSize\\x18\\x05 \\x01(\\x03\\x12\\x0f\\n\\x07PageNum\\x18\\x06 \\x01(\\x03\\x12\\r\\n\\x05Total\\x18\\x07 \\x01(\\x03\\x12R\\n\\x0e\\x45\\x64itDetailData\\x18\\x08 \\x03(\\x0b\\x32:.Volcengine.Vod.Models.Business.DescribeVodSpaceEditDetail\\\"W\\n\\\"DescribeVodPlayFileLogByDomainItem\\x12\\x0c\\n\\x04\\x44\\x61te\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0b\\x44ownloadUrl\\x18\\x03 \\x01(\\t\\\"\\xb4\\x01\\n$DescribeVodPlayFileLogByDomainResult\\x12\\x11\\n\\tStartTime\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nDomainList\\x18\\x03 \\x03(\\t\\x12T\\n\\x08\\x46ileList\\x18\\x04 \\x03(\\x0b\\x32\\x42.Volcengine.Vod.Models.Business.DescribeVodPlayFileLogByDomainItem\\\"\\x82\\x01\\n\\x1f\\x44\\x65scribeVodEnhanceImageDataItem\\x12\\x0c\\n\\x04Time\\x18\\x01 \\x01(\\t\\x12\\n\\n\\x02SR\\x18\\x02 \\x01(\\x03\\x12\\x0b\\n\\x03VFI\\x18\\x03 \\x01(\\x03\\x12\\x12\\n\\nSDREnhance\\x18\\x04 \\x01(\\x03\\x12\\x0f\\n\\x07SDR2HDR\\x18\\x05 \\x01(\\x03\\x12\\x13\\n\\x0b\\x41udioDenose\\x18\\x06 \\x01(\\x03\\\"\\xa9\\x02\\n!DescribeVodEnhanceImageDataResult\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x03(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x14\\n\\x0cTaskTypeList\\x18\\x04 \\x03(\\t\\x12\\x15\\n\\rTaskStageList\\x18\\x05 \\x03(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x06 \\x01(\\x03\\x12\\x12\\n\\nRegionList\\x18\\x07 \\x03(\\t\\x12\\x1c\\n\\x14TotalEnhanceImagData\\x18\\x08 \\x01(\\x03\\x12Y\\n\\x10\\x45nhanceImageList\\x18\\t \\x03(\\x0b\\x32?.Volcengine.Vod.Models.Business.DescribeVodEnhanceImageDataItem\\\"D\\n\\\"DescribeVodSpaceEditStatisDataItem\\x12\\x0c\\n\\x04Name\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x02 \\x01(\\x03\\\"\\x95\\x01\\n&DescribeVodSpaceEditStatisDetailTVUnit\\x12\\x0c\\n\\x04Time\\x18\\x01 \\x01(\\t\\x12]\\n\\x11\\x45\\x64itUsageItemList\\x18\\x02 \\x03(\\x0b\\x32\\x42.Volcengine.Vod.Models.Business.DescribeVodSpaceEditStatisDataItem\\\"\\x98\\x01\\n$DescribeVodSpaceEditStatisDataDetail\\x12\\r\\n\\x05Space\\x18\\x01 \\x01(\\t\\x12\\x61\\n\\x11\\x45\\x64itUsageDataList\\x18\\x03 \\x03(\\x0b\\x32\\x46.Volcengine.Vod.Models.Business.DescribeVodSpaceEditStatisDetailTVUnit\\\"\\x9d\\x03\\n$DescribeVodSpaceEditStatisDataResult\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x03(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x15\\n\\rSpecification\\x18\\x04 \\x01(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x05 \\x01(\\x03\\x12\\x17\\n\\x0f\\x44\\x65tailFieldList\\x18\\x06 \\x03(\\t\\x12\\x12\\n\\nRegionList\\x18\\x07 \\x03(\\t\\x12\\x1a\\n\\x12TotalEditUsageData\\x18\\x08 \\x01(\\x03\\x12\\x62\\n\\x16TotalEditUsageDataList\\x18\\t \\x03(\\x0b\\x32\\x42.Volcengine.Vod.Models.Business.DescribeVodSpaceEditStatisDataItem\\x12\\x65\\n\\x17\\x45\\x64itUsageDataDetailList\\x18\\n \\x03(\\x0b\\x32\\x44.Volcengine.Vod.Models.Business.DescribeVodSpaceEditStatisDataDetail\\\"\\x94\\x01\\n\\x1f\\x44\\x65scribeVodPlayedStatisDataItem\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Name\\x18\\x02 \\x01(\\t\\x12\\x0c\\n\\x04Size\\x18\\x03 \\x01(\\x03\\x12\\x10\\n\\x08\\x44uration\\x18\\x04 \\x01(\\x01\\x12\\x12\\n\\nCreateTime\\x18\\x05 \\x01(\\t\\x12\\x11\\n\\tPlayCount\\x18\\x06 \\x01(\\x03\\x12\\x0f\\n\\x07Traffic\\x18\\x07 \\x01(\\x03\\\"\\xd2\\x01\\n!DescribeVodPlayedStatisDataResult\\x12\\r\\n\\x05Space\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07VidList\\x18\\x04 \\x03(\\t\\x12\\x11\\n\\tOrderType\\x18\\x05 \\x01(\\t\\x12V\\n\\rPlayStatInfos\\x18\\x06 \\x03(\\x0b\\x32?.Volcengine.Vod.Models.Business.DescribeVodPlayedStatisDataItem\\\"\\x98\\x01\\n#DescribeVodMostPlayedStatisDataItem\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Name\\x18\\x02 \\x01(\\t\\x12\\x0c\\n\\x04Size\\x18\\x03 \\x01(\\x03\\x12\\x10\\n\\x08\\x44uration\\x18\\x04 \\x01(\\x01\\x12\\x12\\n\\nCreateTime\\x18\\x05 \\x01(\\t\\x12\\x11\\n\\tPlayCount\\x18\\x06 \\x01(\\x03\\x12\\x0f\\n\\x07Traffic\\x18\\x07 \\x01(\\x03\\\"\\xd7\\x01\\n%DescribeVodMostPlayedStatisDataResult\\x12\\r\\n\\x05Space\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x11\\n\\tOrderType\\x18\\x04 \\x01(\\t\\x12\\x0c\\n\\x04TopN\\x18\\x05 \\x01(\\x03\\x12Z\\n\\rPlayStatInfos\\x18\\x06 \\x03(\\x0b\\x32\\x43.Volcengine.Vod.Models.Business.DescribeVodMostPlayedStatisDataItem\\\"?\\n DescribeVodRealtimeMediaDataItem\\x12\\x0c\\n\\x04Time\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05\\x43ount\\x18\\x02 \\x01(\\x03\\\"\\xa3\\x01\\n\\\"DescribeVodRealtimeMediaDataDetail\\x12\\r\\n\\x05Space\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05Total\\x18\\x02 \\x01(\\x03\\x12_\\n\\x15RealtimeMediaDataList\\x18\\x03 \\x03(\\x0b\\x32@.Volcengine.Vod.Models.Business.DescribeVodRealtimeMediaDataItem\\\"\\x88\\x03\\n\\\"DescribeVodRealtimeMediaDataResult\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x03(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x13\\n\\x0bProcessType\\x18\\x04 \\x01(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x05 \\x01(\\x03\\x12\\x17\\n\\x0f\\x44\\x65tailFieldList\\x18\\x06 \\x03(\\t\\x12\\x1e\\n\\x16TotalRealtimeMediaData\\x18\\x07 \\x01(\\x03\\x12_\\n\\x15RealtimeMediaDataList\\x18\\x08 \\x03(\\x0b\\x32@.Volcengine.Vod.Models.Business.DescribeVodRealtimeMediaDataItem\\x12g\\n\\x1bRealtimeMediaDetailDataList\\x18\\t \\x03(\\x0b\\x32\\x42.Volcengine.Vod.Models.Business.DescribeVodRealtimeMediaDataDetail\\\"\\x96\\x01\\n&DescribeVodRealtimeMediaDetailDataItem\\x12\\x0f\\n\\x07TraceId\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileName\\x18\\x04 \\x01(\\t\\x12\\x0f\\n\\x07\\x43ommand\\x18\\x05 \\x01(\\t\\x12\\x14\\n\\x0cResponseCode\\x18\\x06 \\x01(\\t\\\"\\x88\\x02\\n(DescribeVodRealtimeMediaDetailDataResult\\x12\\x0e\\n\\x06Region\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05Space\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x04 \\x01(\\t\\x12\\x10\\n\\x08PageSize\\x18\\x05 \\x01(\\x03\\x12\\x0f\\n\\x07PageNum\\x18\\x06 \\x01(\\x03\\x12\\r\\n\\x05Total\\x18\\x07 \\x01(\\x03\\x12g\\n\\x17RealtimeMediaDetailData\\x18\\x08 \\x03(\\x0b\\x32\\x46.Volcengine.Vod.Models.Business.DescribeVodRealtimeMediaDetailDataItem\\\"T\\n DescribeVodVidTrafficFileLogItem\\x12\\x0c\\n\\x04\\x44\\x61te\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05Space\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0b\\x44ownloadUrl\\x18\\x03 \\x01(\\t\\\"\\xaf\\x01\\n\\\"DescribeVodVidTrafficFileLogResult\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x03(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12R\\n\\x08\\x46ileList\\x18\\x04 \\x03(\\x0b\\x32@.Volcengine.Vod.Models.Business.DescribeVodVidTrafficFileLogItemB\\xcb\\x01\\n)com.volcengine.service.vod.model.businessB\\nVodMeasureP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xca\\x02 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_DESCRIBEVODSPACETRANSCODEITEM = DESCRIPTOR.message_types_by_name['DescribeVodSpaceTranscodeItem']\n_DESCRIBEVODSPACETRANSCODEDETAILTVUNIT = DESCRIPTOR.message_types_by_name['DescribeVodSpaceTranscodeDetailTVUnit']\n_DESCRIBEVODSPACETRANSCODEDETAIL = DESCRIPTOR.message_types_by_name['DescribeVodSpaceTranscodeDetail']\n_DESCRIBEVODSPACETRANSCODEDATARESULT = DESCRIPTOR.message_types_by_name['DescribeVodSpaceTranscodeDataResult']\n_DESCRIBEVODSPACEAISTATISDATAITEM = DESCRIPTOR.message_types_by_name['DescribeVodSpaceAIStatisDataItem']\n_DESCRIBEVODSPACEAISTATISDATADETAIL = DESCRIPTOR.message_types_by_name['DescribeVodSpaceAIStatisDataDetail']\n_DESCRIBEVODSPACEAISTATISDATARESULT = DESCRIPTOR.message_types_by_name['DescribeVodSpaceAIStatisDataResult']\n_DESCRIBEVODSPACESUBTITLESTATISDATAITEM = DESCRIPTOR.message_types_by_name['DescribeVodSpaceSubtitleStatisDataItem']\n_DESCRIBEVODSPACESUBTITLESTATISDATADETAIL = DESCRIPTOR.message_types_by_name['DescribeVodSpaceSubtitleStatisDataDetail']\n_DESCRIBEVODSPACESUBTITLESTATISDATARESULT = DESCRIPTOR.message_types_by_name['DescribeVodSpaceSubtitleStatisDataResult']\n_DESCRIBEVODSPACEDETECTSTATISDATAITEM = DESCRIPTOR.message_types_by_name['DescribeVodSpaceDetectStatisDataItem']\n_DESCRIBEVODSPACEDETECTSTATISDATADETAIL = DESCRIPTOR.message_types_by_name['DescribeVodSpaceDetectStatisDataDetail']\n_DESCRIBEVODSPACEDETECTSTATISDATARESULT = DESCRIPTOR.message_types_by_name['DescribeVodSpaceDetectStatisDataResult']\n_DESCRIBEVODSNAPSHOTDATAITEM = DESCRIPTOR.message_types_by_name['DescribeVodSnapshotDataItem']\n_DESCRIBEVODSNAPSHOTDATADETAIL = DESCRIPTOR.message_types_by_name['DescribeVodSnapshotDataDetail']\n_DESCRIBEVODSNAPSHOTDATARESULT = DESCRIPTOR.message_types_by_name['DescribeVodSnapshotDataResult']\n_DESCRIBEVODSPACEWORKFLOWTRANSCODEINFO = DESCRIPTOR.message_types_by_name['DescribeVodSpaceWorkflowTranscodeInfo']\n_DESCRIBEVODSPACEWORKFLOWSNAPSHOTINFO = DESCRIPTOR.message_types_by_name['DescribeVodSpaceWorkflowSnapshotInfo']\n_DESCRIBEVODSPACEWORKFLOWENHANCEEXECINFO = DESCRIPTOR.message_types_by_name['DescribeVodSpaceWorkflowEnhanceExecInfo']\n_DESCRIBEVODSPACEWORKFLOWVIDEOAIINFO = DESCRIPTOR.message_types_by_name['DescribeVodSpaceWorkflowVideoAIInfo']\n_DESCRIBEVODSPACEWORKFLOWDETAIL = DESCRIPTOR.message_types_by_name['DescribeVodSpaceWorkflowDetail']\n_DESCRIBEVODSPACEWORKFLOWDETAILDATARESULT = DESCRIPTOR.message_types_by_name['DescribeVodSpaceWorkflowDetailDataResult']\n_DESCRIBEVODSPACEEDITDETAIL = DESCRIPTOR.message_types_by_name['DescribeVodSpaceEditDetail']\n_DESCRIBEVODSPACEEDITDETAILDATARESULT = DESCRIPTOR.message_types_by_name['DescribeVodSpaceEditDetailDataResult']\n_DESCRIBEVODPLAYFILELOGBYDOMAINITEM = DESCRIPTOR.message_types_by_name['DescribeVodPlayFileLogByDomainItem']\n_DESCRIBEVODPLAYFILELOGBYDOMAINRESULT = DESCRIPTOR.message_types_by_name['DescribeVodPlayFileLogByDomainResult']\n_DESCRIBEVODENHANCEIMAGEDATAITEM = DESCRIPTOR.message_types_by_name['DescribeVodEnhanceImageDataItem']\n_DESCRIBEVODENHANCEIMAGEDATARESULT = DESCRIPTOR.message_types_by_name['DescribeVodEnhanceImageDataResult']\n_DESCRIBEVODSPACEEDITSTATISDATAITEM = DESCRIPTOR.message_types_by_name['DescribeVodSpaceEditStatisDataItem']\n_DESCRIBEVODSPACEEDITSTATISDETAILTVUNIT = DESCRIPTOR.message_types_by_name['DescribeVodSpaceEditStatisDetailTVUnit']\n_DESCRIBEVODSPACEEDITSTATISDATADETAIL = DESCRIPTOR.message_types_by_name['DescribeVodSpaceEditStatisDataDetail']\n_DESCRIBEVODSPACEEDITSTATISDATARESULT = DESCRIPTOR.message_types_by_name['DescribeVodSpaceEditStatisDataResult']\n_DESCRIBEVODPLAYEDSTATISDATAITEM = DESCRIPTOR.message_types_by_name['DescribeVodPlayedStatisDataItem']\n_DESCRIBEVODPLAYEDSTATISDATARESULT = DESCRIPTOR.message_types_by_name['DescribeVodPlayedStatisDataResult']\n_DESCRIBEVODMOSTPLAYEDSTATISDATAITEM = DESCRIPTOR.message_types_by_name['DescribeVodMostPlayedStatisDataItem']\n_DESCRIBEVODMOSTPLAYEDSTATISDATARESULT = DESCRIPTOR.message_types_by_name['DescribeVodMostPlayedStatisDataResult']\n_DESCRIBEVODREALTIMEMEDIADATAITEM = DESCRIPTOR.message_types_by_name['DescribeVodRealtimeMediaDataItem']\n_DESCRIBEVODREALTIMEMEDIADATADETAIL = DESCRIPTOR.message_types_by_name['DescribeVodRealtimeMediaDataDetail']\n_DESCRIBEVODREALTIMEMEDIADATARESULT = DESCRIPTOR.message_types_by_name['DescribeVodRealtimeMediaDataResult']\n_DESCRIBEVODREALTIMEMEDIADETAILDATAITEM = DESCRIPTOR.message_types_by_name['DescribeVodRealtimeMediaDetailDataItem']\n_DESCRIBEVODREALTIMEMEDIADETAILDATARESULT = DESCRIPTOR.message_types_by_name['DescribeVodRealtimeMediaDetailDataResult']\n_DESCRIBEVODVIDTRAFFICFILELOGITEM = DESCRIPTOR.message_types_by_name['DescribeVodVidTrafficFileLogItem']\n_DESCRIBEVODVIDTRAFFICFILELOGRESULT = DESCRIPTOR.message_types_by_name['DescribeVodVidTrafficFileLogResult']\nDescribeVodSpaceTranscodeItem = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceTranscodeItem', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACETRANSCODEITEM,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceTranscodeItem)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceTranscodeItem)\n\nDescribeVodSpaceTranscodeDetailTVUnit = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceTranscodeDetailTVUnit', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACETRANSCODEDETAILTVUNIT,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceTranscodeDetailTVUnit)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceTranscodeDetailTVUnit)\n\nDescribeVodSpaceTranscodeDetail = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceTranscodeDetail', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACETRANSCODEDETAIL,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceTranscodeDetail)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceTranscodeDetail)\n\nDescribeVodSpaceTranscodeDataResult = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceTranscodeDataResult', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACETRANSCODEDATARESULT,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceTranscodeDataResult)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceTranscodeDataResult)\n\nDescribeVodSpaceAIStatisDataItem = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceAIStatisDataItem', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEAISTATISDATAITEM,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceAIStatisDataItem)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceAIStatisDataItem)\n\nDescribeVodSpaceAIStatisDataDetail = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceAIStatisDataDetail', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEAISTATISDATADETAIL,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceAIStatisDataDetail)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceAIStatisDataDetail)\n\nDescribeVodSpaceAIStatisDataResult = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceAIStatisDataResult', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEAISTATISDATARESULT,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceAIStatisDataResult)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceAIStatisDataResult)\n\nDescribeVodSpaceSubtitleStatisDataItem = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceSubtitleStatisDataItem', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACESUBTITLESTATISDATAITEM,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceSubtitleStatisDataItem)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceSubtitleStatisDataItem)\n\nDescribeVodSpaceSubtitleStatisDataDetail = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceSubtitleStatisDataDetail', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACESUBTITLESTATISDATADETAIL,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceSubtitleStatisDataDetail)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceSubtitleStatisDataDetail)\n\nDescribeVodSpaceSubtitleStatisDataResult = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceSubtitleStatisDataResult', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACESUBTITLESTATISDATARESULT,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceSubtitleStatisDataResult)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceSubtitleStatisDataResult)\n\nDescribeVodSpaceDetectStatisDataItem = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceDetectStatisDataItem', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEDETECTSTATISDATAITEM,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceDetectStatisDataItem)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceDetectStatisDataItem)\n\nDescribeVodSpaceDetectStatisDataDetail = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceDetectStatisDataDetail', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEDETECTSTATISDATADETAIL,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceDetectStatisDataDetail)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceDetectStatisDataDetail)\n\nDescribeVodSpaceDetectStatisDataResult = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceDetectStatisDataResult', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEDETECTSTATISDATARESULT,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceDetectStatisDataResult)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceDetectStatisDataResult)\n\nDescribeVodSnapshotDataItem = _reflection.GeneratedProtocolMessageType('DescribeVodSnapshotDataItem', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSNAPSHOTDATAITEM,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSnapshotDataItem)\n  })\n_sym_db.RegisterMessage(DescribeVodSnapshotDataItem)\n\nDescribeVodSnapshotDataDetail = _reflection.GeneratedProtocolMessageType('DescribeVodSnapshotDataDetail', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSNAPSHOTDATADETAIL,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSnapshotDataDetail)\n  })\n_sym_db.RegisterMessage(DescribeVodSnapshotDataDetail)\n\nDescribeVodSnapshotDataResult = _reflection.GeneratedProtocolMessageType('DescribeVodSnapshotDataResult', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSNAPSHOTDATARESULT,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSnapshotDataResult)\n  })\n_sym_db.RegisterMessage(DescribeVodSnapshotDataResult)\n\nDescribeVodSpaceWorkflowTranscodeInfo = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceWorkflowTranscodeInfo', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEWORKFLOWTRANSCODEINFO,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceWorkflowTranscodeInfo)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceWorkflowTranscodeInfo)\n\nDescribeVodSpaceWorkflowSnapshotInfo = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceWorkflowSnapshotInfo', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEWORKFLOWSNAPSHOTINFO,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceWorkflowSnapshotInfo)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceWorkflowSnapshotInfo)\n\nDescribeVodSpaceWorkflowEnhanceExecInfo = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceWorkflowEnhanceExecInfo', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEWORKFLOWENHANCEEXECINFO,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceWorkflowEnhanceExecInfo)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceWorkflowEnhanceExecInfo)\n\nDescribeVodSpaceWorkflowVideoAIInfo = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceWorkflowVideoAIInfo', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEWORKFLOWVIDEOAIINFO,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceWorkflowVideoAIInfo)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceWorkflowVideoAIInfo)\n\nDescribeVodSpaceWorkflowDetail = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceWorkflowDetail', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEWORKFLOWDETAIL,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceWorkflowDetail)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceWorkflowDetail)\n\nDescribeVodSpaceWorkflowDetailDataResult = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceWorkflowDetailDataResult', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEWORKFLOWDETAILDATARESULT,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceWorkflowDetailDataResult)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceWorkflowDetailDataResult)\n\nDescribeVodSpaceEditDetail = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceEditDetail', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEEDITDETAIL,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceEditDetail)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceEditDetail)\n\nDescribeVodSpaceEditDetailDataResult = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceEditDetailDataResult', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEEDITDETAILDATARESULT,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceEditDetailDataResult)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceEditDetailDataResult)\n\nDescribeVodPlayFileLogByDomainItem = _reflection.GeneratedProtocolMessageType('DescribeVodPlayFileLogByDomainItem', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODPLAYFILELOGBYDOMAINITEM,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodPlayFileLogByDomainItem)\n  })\n_sym_db.RegisterMessage(DescribeVodPlayFileLogByDomainItem)\n\nDescribeVodPlayFileLogByDomainResult = _reflection.GeneratedProtocolMessageType('DescribeVodPlayFileLogByDomainResult', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODPLAYFILELOGBYDOMAINRESULT,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodPlayFileLogByDomainResult)\n  })\n_sym_db.RegisterMessage(DescribeVodPlayFileLogByDomainResult)\n\nDescribeVodEnhanceImageDataItem = _reflection.GeneratedProtocolMessageType('DescribeVodEnhanceImageDataItem', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODENHANCEIMAGEDATAITEM,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodEnhanceImageDataItem)\n  })\n_sym_db.RegisterMessage(DescribeVodEnhanceImageDataItem)\n\nDescribeVodEnhanceImageDataResult = _reflection.GeneratedProtocolMessageType('DescribeVodEnhanceImageDataResult', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODENHANCEIMAGEDATARESULT,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodEnhanceImageDataResult)\n  })\n_sym_db.RegisterMessage(DescribeVodEnhanceImageDataResult)\n\nDescribeVodSpaceEditStatisDataItem = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceEditStatisDataItem', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEEDITSTATISDATAITEM,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceEditStatisDataItem)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceEditStatisDataItem)\n\nDescribeVodSpaceEditStatisDetailTVUnit = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceEditStatisDetailTVUnit', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEEDITSTATISDETAILTVUNIT,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceEditStatisDetailTVUnit)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceEditStatisDetailTVUnit)\n\nDescribeVodSpaceEditStatisDataDetail = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceEditStatisDataDetail', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEEDITSTATISDATADETAIL,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceEditStatisDataDetail)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceEditStatisDataDetail)\n\nDescribeVodSpaceEditStatisDataResult = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceEditStatisDataResult', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEEDITSTATISDATARESULT,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodSpaceEditStatisDataResult)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceEditStatisDataResult)\n\nDescribeVodPlayedStatisDataItem = _reflection.GeneratedProtocolMessageType('DescribeVodPlayedStatisDataItem', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODPLAYEDSTATISDATAITEM,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodPlayedStatisDataItem)\n  })\n_sym_db.RegisterMessage(DescribeVodPlayedStatisDataItem)\n\nDescribeVodPlayedStatisDataResult = _reflection.GeneratedProtocolMessageType('DescribeVodPlayedStatisDataResult', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODPLAYEDSTATISDATARESULT,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodPlayedStatisDataResult)\n  })\n_sym_db.RegisterMessage(DescribeVodPlayedStatisDataResult)\n\nDescribeVodMostPlayedStatisDataItem = _reflection.GeneratedProtocolMessageType('DescribeVodMostPlayedStatisDataItem', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODMOSTPLAYEDSTATISDATAITEM,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodMostPlayedStatisDataItem)\n  })\n_sym_db.RegisterMessage(DescribeVodMostPlayedStatisDataItem)\n\nDescribeVodMostPlayedStatisDataResult = _reflection.GeneratedProtocolMessageType('DescribeVodMostPlayedStatisDataResult', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODMOSTPLAYEDSTATISDATARESULT,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodMostPlayedStatisDataResult)\n  })\n_sym_db.RegisterMessage(DescribeVodMostPlayedStatisDataResult)\n\nDescribeVodRealtimeMediaDataItem = _reflection.GeneratedProtocolMessageType('DescribeVodRealtimeMediaDataItem', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODREALTIMEMEDIADATAITEM,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodRealtimeMediaDataItem)\n  })\n_sym_db.RegisterMessage(DescribeVodRealtimeMediaDataItem)\n\nDescribeVodRealtimeMediaDataDetail = _reflection.GeneratedProtocolMessageType('DescribeVodRealtimeMediaDataDetail', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODREALTIMEMEDIADATADETAIL,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodRealtimeMediaDataDetail)\n  })\n_sym_db.RegisterMessage(DescribeVodRealtimeMediaDataDetail)\n\nDescribeVodRealtimeMediaDataResult = _reflection.GeneratedProtocolMessageType('DescribeVodRealtimeMediaDataResult', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODREALTIMEMEDIADATARESULT,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodRealtimeMediaDataResult)\n  })\n_sym_db.RegisterMessage(DescribeVodRealtimeMediaDataResult)\n\nDescribeVodRealtimeMediaDetailDataItem = _reflection.GeneratedProtocolMessageType('DescribeVodRealtimeMediaDetailDataItem', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODREALTIMEMEDIADETAILDATAITEM,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodRealtimeMediaDetailDataItem)\n  })\n_sym_db.RegisterMessage(DescribeVodRealtimeMediaDetailDataItem)\n\nDescribeVodRealtimeMediaDetailDataResult = _reflection.GeneratedProtocolMessageType('DescribeVodRealtimeMediaDetailDataResult', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODREALTIMEMEDIADETAILDATARESULT,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodRealtimeMediaDetailDataResult)\n  })\n_sym_db.RegisterMessage(DescribeVodRealtimeMediaDetailDataResult)\n\nDescribeVodVidTrafficFileLogItem = _reflection.GeneratedProtocolMessageType('DescribeVodVidTrafficFileLogItem', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODVIDTRAFFICFILELOGITEM,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodVidTrafficFileLogItem)\n  })\n_sym_db.RegisterMessage(DescribeVodVidTrafficFileLogItem)\n\nDescribeVodVidTrafficFileLogResult = _reflection.GeneratedProtocolMessageType('DescribeVodVidTrafficFileLogResult', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODVIDTRAFFICFILELOGRESULT,\n  '__module__' : 'volcengine.vod.business.vod_measure_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DescribeVodVidTrafficFileLogResult)\n  })\n_sym_db.RegisterMessage(DescribeVodVidTrafficFileLogResult)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.vod.model.businessB\\nVodMeasureP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\240\\001\\001\\330\\001\\001\\312\\002 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _DESCRIBEVODSPACETRANSCODEITEM._serialized_start=77\n  _DESCRIBEVODSPACETRANSCODEITEM._serialized_end=137\n  _DESCRIBEVODSPACETRANSCODEDETAILTVUNIT._serialized_start=140\n  _DESCRIBEVODSPACETRANSCODEDETAILTVUNIT._serialized_end=283\n  _DESCRIBEVODSPACETRANSCODEDETAIL._serialized_start=286\n  _DESCRIBEVODSPACETRANSCODEDETAIL._serialized_end=467\n  _DESCRIBEVODSPACETRANSCODEDATARESULT._serialized_start=470\n  _DESCRIBEVODSPACETRANSCODEDATARESULT._serialized_end=918\n  _DESCRIBEVODSPACEAISTATISDATAITEM._serialized_start=920\n  _DESCRIBEVODSPACEAISTATISDATAITEM._serialized_end=986\n  _DESCRIBEVODSPACEAISTATISDATADETAIL._serialized_start=989\n  _DESCRIBEVODSPACEAISTATISDATADETAIL._serialized_end=1150\n  _DESCRIBEVODSPACEAISTATISDATARESULT._serialized_start=1153\n  _DESCRIBEVODSPACEAISTATISDATARESULT._serialized_end=1570\n  _DESCRIBEVODSPACESUBTITLESTATISDATAITEM._serialized_start=1572\n  _DESCRIBEVODSPACESUBTITLESTATISDATAITEM._serialized_end=1641\n  _DESCRIBEVODSPACESUBTITLESTATISDATADETAIL._serialized_start=1644\n  _DESCRIBEVODSPACESUBTITLESTATISDATADETAIL._serialized_end=1823\n  _DESCRIBEVODSPACESUBTITLESTATISDATARESULT._serialized_start=1826\n  _DESCRIBEVODSPACESUBTITLESTATISDATARESULT._serialized_end=2280\n  _DESCRIBEVODSPACEDETECTSTATISDATAITEM._serialized_start=2282\n  _DESCRIBEVODSPACEDETECTSTATISDATAITEM._serialized_end=2349\n  _DESCRIBEVODSPACEDETECTSTATISDATADETAIL._serialized_start=2352\n  _DESCRIBEVODSPACEDETECTSTATISDATADETAIL._serialized_end=2525\n  _DESCRIBEVODSPACEDETECTSTATISDATARESULT._serialized_start=2528\n  _DESCRIBEVODSPACEDETECTSTATISDATARESULT._serialized_end=2968\n  _DESCRIBEVODSNAPSHOTDATAITEM._serialized_start=2970\n  _DESCRIBEVODSNAPSHOTDATAITEM._serialized_end=3028\n  _DESCRIBEVODSNAPSHOTDATADETAIL._serialized_start=3031\n  _DESCRIBEVODSNAPSHOTDATADETAIL._serialized_end=3198\n  _DESCRIBEVODSNAPSHOTDATARESULT._serialized_start=3201\n  _DESCRIBEVODSNAPSHOTDATARESULT._serialized_end=3607\n  _DESCRIBEVODSPACEWORKFLOWTRANSCODEINFO._serialized_start=3610\n  _DESCRIBEVODSPACEWORKFLOWTRANSCODEINFO._serialized_end=3826\n  _DESCRIBEVODSPACEWORKFLOWSNAPSHOTINFO._serialized_start=3828\n  _DESCRIBEVODSPACEWORKFLOWSNAPSHOTINFO._serialized_end=3927\n  _DESCRIBEVODSPACEWORKFLOWENHANCEEXECINFO._serialized_start=3929\n  _DESCRIBEVODSPACEWORKFLOWENHANCEEXECINFO._serialized_end=4033\n  _DESCRIBEVODSPACEWORKFLOWVIDEOAIINFO._serialized_start=4035\n  _DESCRIBEVODSPACEWORKFLOWVIDEOAIINFO._serialized_end=4151\n  _DESCRIBEVODSPACEWORKFLOWDETAIL._serialized_start=4154\n  _DESCRIBEVODSPACEWORKFLOWDETAIL._serialized_end=4679\n  _DESCRIBEVODSPACEWORKFLOWDETAILDATARESULT._serialized_start=4682\n  _DESCRIBEVODSPACEWORKFLOWDETAILDATARESULT._serialized_end=4933\n  _DESCRIBEVODSPACEEDITDETAIL._serialized_start=4936\n  _DESCRIBEVODSPACEEDITDETAIL._serialized_end=5065\n  _DESCRIBEVODSPACEEDITDETAILDATARESULT._serialized_start=5068\n  _DESCRIBEVODSPACEEDITDETAILDATARESULT._serialized_end=5307\n  _DESCRIBEVODPLAYFILELOGBYDOMAINITEM._serialized_start=5309\n  _DESCRIBEVODPLAYFILELOGBYDOMAINITEM._serialized_end=5396\n  _DESCRIBEVODPLAYFILELOGBYDOMAINRESULT._serialized_start=5399\n  _DESCRIBEVODPLAYFILELOGBYDOMAINRESULT._serialized_end=5579\n  _DESCRIBEVODENHANCEIMAGEDATAITEM._serialized_start=5582\n  _DESCRIBEVODENHANCEIMAGEDATAITEM._serialized_end=5712\n  _DESCRIBEVODENHANCEIMAGEDATARESULT._serialized_start=5715\n  _DESCRIBEVODENHANCEIMAGEDATARESULT._serialized_end=6012\n  _DESCRIBEVODSPACEEDITSTATISDATAITEM._serialized_start=6014\n  _DESCRIBEVODSPACEEDITSTATISDATAITEM._serialized_end=6082\n  _DESCRIBEVODSPACEEDITSTATISDETAILTVUNIT._serialized_start=6085\n  _DESCRIBEVODSPACEEDITSTATISDETAILTVUNIT._serialized_end=6234\n  _DESCRIBEVODSPACEEDITSTATISDATADETAIL._serialized_start=6237\n  _DESCRIBEVODSPACEEDITSTATISDATADETAIL._serialized_end=6389\n  _DESCRIBEVODSPACEEDITSTATISDATARESULT._serialized_start=6392\n  _DESCRIBEVODSPACEEDITSTATISDATARESULT._serialized_end=6805\n  _DESCRIBEVODPLAYEDSTATISDATAITEM._serialized_start=6808\n  _DESCRIBEVODPLAYEDSTATISDATAITEM._serialized_end=6956\n  _DESCRIBEVODPLAYEDSTATISDATARESULT._serialized_start=6959\n  _DESCRIBEVODPLAYEDSTATISDATARESULT._serialized_end=7169\n  _DESCRIBEVODMOSTPLAYEDSTATISDATAITEM._serialized_start=7172\n  _DESCRIBEVODMOSTPLAYEDSTATISDATAITEM._serialized_end=7324\n  _DESCRIBEVODMOSTPLAYEDSTATISDATARESULT._serialized_start=7327\n  _DESCRIBEVODMOSTPLAYEDSTATISDATARESULT._serialized_end=7542\n  _DESCRIBEVODREALTIMEMEDIADATAITEM._serialized_start=7544\n  _DESCRIBEVODREALTIMEMEDIADATAITEM._serialized_end=7607\n  _DESCRIBEVODREALTIMEMEDIADATADETAIL._serialized_start=7610\n  _DESCRIBEVODREALTIMEMEDIADATADETAIL._serialized_end=7773\n  _DESCRIBEVODREALTIMEMEDIADATARESULT._serialized_start=7776\n  _DESCRIBEVODREALTIMEMEDIADATARESULT._serialized_end=8168\n  _DESCRIBEVODREALTIMEMEDIADETAILDATAITEM._serialized_start=8171\n  _DESCRIBEVODREALTIMEMEDIADETAILDATAITEM._serialized_end=8321\n  _DESCRIBEVODREALTIMEMEDIADETAILDATARESULT._serialized_start=8324\n  _DESCRIBEVODREALTIMEMEDIADETAILDATARESULT._serialized_end=8588\n  _DESCRIBEVODVIDTRAFFICFILELOGITEM._serialized_start=8590\n  _DESCRIBEVODVIDTRAFFICFILELOGITEM._serialized_end=8674\n  _DESCRIBEVODVIDTRAFFICFILELOGRESULT._serialized_start=8677\n  _DESCRIBEVODVIDTRAFFICFILELOGRESULT._serialized_end=8852\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/vod/models/business/vod_media_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/business/vod_media.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf.internal import enum_type_wrapper\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\nfrom volcengine.vod.models.business import vod_common_pb2 as volcengine_dot_vod_dot_business_dot_vod__common__pb2\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\'volcengine/vod/business/vod_media.proto\\x12\\x1eVolcengine.Vod.Models.Business\\x1a(volcengine/vod/business/vod_common.proto\\\"r\\n%VodListFileMetaInfosByFileNamesResult\\x12I\\n\\x10VodFileMetaInfos\\x18\\x01 \\x03(\\x0b\\x32/.Volcengine.Vod.Models.Business.VodFileMetaInfo\\\"\\x7f\\n\\x0fVodFileMetaInfo\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x46ileId\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nMaterialId\\x18\\x03 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileType\\x18\\x05 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileName\\x18\\x06 \\x01(\\t\\x12\\x17\\n\\x0f\\x46ileNameEncoded\\x18\\x07 \\x01(\\t\\\"\\xca\\x02\\n\\x11VodMediaBasicInfo\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Vid\\x18\\x02 \\x01(\\t\\x12\\r\\n\\x05Title\\x18\\x03 \\x01(\\t\\x12\\x13\\n\\x0b\\x44\\x65scription\\x18\\x04 \\x01(\\t\\x12\\x11\\n\\tPosterUri\\x18\\x05 \\x01(\\t\\x12\\x15\\n\\rPublishStatus\\x18\\x06 \\x01(\\t\\x12\\x0c\\n\\x04Tags\\x18\\x07 \\x03(\\t\\x12\\x12\\n\\nCreateTime\\x18\\x08 \\x01(\\t\\x12I\\n\\x0e\\x43lassification\\x18\\t \\x01(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.VodClassification\\x12\\x17\\n\\x0fTosStorageClass\\x18\\n \\x01(\\t\\x12\\x17\\n\\x0fVodUploadSource\\x18\\x0b \\x01(\\t\\x12\\x14\\n\\x0cHlsMediaSize\\x18\\x0c \\x01(\\x01\\x12\\x12\\n\\nExpireTime\\x18\\r \\x01(\\t\\\"\\xe1\\x01\\n\\x0cVodMediaInfo\\x12\\x44\\n\\tBasicInfo\\x18\\x01 \\x01(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.VodMediaBasicInfo\\x12\\x41\\n\\nSourceInfo\\x18\\x02 \\x01(\\x0b\\x32-.Volcengine.Vod.Models.Business.VodSourceInfo\\x12H\\n\\x0eTranscodeInfos\\x18\\x03 \\x03(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.VodTranscodeInfo\\\"q\\n\\x14VodGetMediaInfosData\\x12\\x43\\n\\rMediaInfoList\\x18\\x01 \\x03(\\x0b\\x32,.Volcengine.Vod.Models.Business.VodMediaInfo\\x12\\x14\\n\\x0cNotExistVids\\x18\\x02 \\x03(\\t\\\"2\\n\\x10VodStoreUriGroup\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStoreUris\\x18\\x02 \\x03(\\t\\\"u\\n\\x13VodGetRecPosterData\\x12H\\n\\x0eStoreUriGroups\\x18\\x01 \\x03(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.VodStoreUriGroup\\x12\\x14\\n\\x0cNotExistVids\\x18\\x02 \\x03(\\t\\\"*\\n\\x12VodDeleteMediaData\\x12\\x14\\n\\x0cNotExistVids\\x18\\x01 \\x03(\\t\\\"2\\n\\x17VodDeleteTranscodesData\\x12\\x17\\n\\x0fNotExistFileIds\\x18\\x01 \\x03(\\t\\\"4\\n\\x19VodDeleteMediaTosFileData\\x12\\x17\\n\\x0f\\x46\\x61iledFileNames\\x18\\x01 \\x03(\\t\\\"\\xa3\\x01\\n\\x13VodGetMediaListData\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x43\\n\\rMediaInfoList\\x18\\x02 \\x03(\\x0b\\x32,.Volcengine.Vod.Models.Business.VodMediaInfo\\x12\\x12\\n\\nTotalCount\\x18\\x03 \\x01(\\x05\\x12\\x0e\\n\\x06Offset\\x18\\x04 \\x01(\\x05\\x12\\x10\\n\\x08PageSize\\x18\\x05 \\x01(\\x05\\\"6\\n\\x1bVodUpdateSubtitleStatusData\\x12\\x17\\n\\x0fNotExistFileIds\\x18\\x01 \\x03(\\t\\\"p\\n\\x13VodFileSubtitleInfo\\x12\\x0e\\n\\x06\\x46ileId\\x18\\x01 \\x01(\\t\\x12I\\n\\x10SubtitleInfoList\\x18\\x02 \\x03(\\x0b\\x32/.Volcengine.Vod.Models.Business.VodSubtitleInfo\\\"\\xcb\\x01\\n\\x1aVodGetSubtitleInfoListData\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12Q\\n\\x14\\x46ileSubtitleInfoList\\x18\\x02 \\x03(\\x0b\\x32\\x33.Volcengine.Vod.Models.Business.VodFileSubtitleInfo\\x12\\x17\\n\\x0fNotExistFileIds\\x18\\x03 \\x03(\\t\\x12\\x12\\n\\nTotalCount\\x18\\x04 \\x01(\\x05\\x12\\x0e\\n\\x06Offset\\x18\\x05 \\x01(\\x05\\x12\\x10\\n\\x08PageSize\\x18\\x06 \\x01(\\x05\\\"q\\n\\x14VodFrameDataForAudit\\x12\\x10\\n\\x08StoreUri\\x18\\x01 \\x01(\\t\\x12\\x13\\n\\x0b\\x46rameNumber\\x18\\x02 \\x01(\\x05\\x12\\x13\\n\\x0b\\x43utTimeMill\\x18\\x03 \\x01(\\x01\\x12\\r\\n\\x05Width\\x18\\x04 \\x01(\\x05\\x12\\x0e\\n\\x06Height\\x18\\x05 \\x01(\\x05\\\"b\\n\\x1aVodGetFramesForAuditResult\\x12\\x44\\n\\x06\\x46rames\\x18\\x01 \\x03(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.VodFrameDataForAudit\\\"\\x9f\\x01\\n\\x1aVodBetterFrameDataForAudit\\x12\\x10\\n\\x08StoreUri\\x18\\x01 \\x01(\\t\\x12\\x13\\n\\x0b\\x46rameNumber\\x18\\x02 \\x01(\\x05\\x12\\x13\\n\\x0b\\x43utTimeMill\\x18\\x03 \\x01(\\x01\\x12\\r\\n\\x05Width\\x18\\x04 \\x01(\\x05\\x12\\x0e\\n\\x06Height\\x18\\x05 \\x01(\\x05\\x12\\x11\\n\\tCoverRate\\x18\\x06 \\x01(\\x01\\x12\\x13\\n\\x0bLBPHashCode\\x18\\x07 \\x03(\\x01\\\"n\\n VodGetBetterFramesForAuditResult\\x12J\\n\\x06\\x46rames\\x18\\x01 \\x03(\\x0b\\x32:.Volcengine.Vod.Models.Business.VodBetterFrameDataForAudit\\\"J\\n\\x14VodAudioInfoForAudit\\x12\\x10\\n\\x08StoreUri\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x02 \\x01(\\x01\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x03 \\x01(\\t\\\"h\\n\\x1dVodGetAudioInfoForAuditResult\\x12G\\n\\tAudioInfo\\x18\\x01 \\x01(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.VodAudioInfoForAudit\\\"n\\n\\x1bVodASRUtteranceWordForAudit\\x12\\x0c\\n\\x04Text\\x18\\x01 \\x01(\\t\\x12\\x15\\n\\rStartTimeMill\\x18\\x02 \\x01(\\x01\\x12\\x13\\n\\x0b\\x45ndTimeMill\\x18\\x03 \\x01(\\x01\\x12\\x15\\n\\rBlankDuration\\x18\\x04 \\x01(\\x01\\\"\\xc5\\x01\\n\\x17VodASRUtteranceForAudit\\x12\\x0c\\n\\x04Text\\x18\\x01 \\x01(\\t\\x12\\x15\\n\\rStartTimeMill\\x18\\x02 \\x01(\\x01\\x12\\x13\\n\\x0b\\x45ndTimeMill\\x18\\x03 \\x01(\\x01\\x12J\\n\\x05Words\\x18\\x04 \\x03(\\x0b\\x32;.Volcengine.Vod.Models.Business.VodASRUtteranceWordForAudit\\x12\\x10\\n\\x08Language\\x18\\x05 \\x01(\\t\\x12\\x12\\n\\nSpeechRate\\x18\\x06 \\x01(\\x01\\\">\\n\\x1cVodASRLanguageDetailForAudit\\x12\\x0c\\n\\x04Prob\\x18\\x01 \\x01(\\x01\\x12\\x10\\n\\x08Language\\x18\\x02 \\x01(\\t\\\"\\xfc\\x01\\n\\x12VodASRInfoForAudit\\x12\\x0c\\n\\x04Text\\x18\\x01 \\x01(\\t\\x12K\\n\\nUtterances\\x18\\x03 \\x03(\\x0b\\x32\\x37.Volcengine.Vod.Models.Business.VodASRUtteranceForAudit\\x12\\x10\\n\\x08Language\\x18\\x04 \\x01(\\t\\x12U\\n\\x0fLanguageDetails\\x18\\x05 \\x03(\\x0b\\x32<.Volcengine.Vod.Models.Business.VodASRLanguageDetailForAudit\\x12\\x12\\n\\nSpeechRate\\x18\\x06 \\x01(\\x01\\x12\\x0e\\n\\x06Volume\\x18\\x07 \\x01(\\x01\\\"r\\n.VodGetAutomaticSpeechRecognitionForAuditResult\\x12@\\n\\x04Info\\x18\\x01 \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.VodASRInfoForAudit\\\"S\\n\\x17VodAEDTimeRangeForAudit\\x12\\x15\\n\\rStartTimeMill\\x18\\x01 \\x01(\\x01\\x12\\x13\\n\\x0b\\x45ndTimeMill\\x18\\x02 \\x01(\\x01\\x12\\x0c\\n\\x04Prob\\x18\\x03 \\x01(\\x01\\\"\\x86\\x01\\n\\x17VodAEDEventItemForAudit\\x12\\r\\n\\x05\\x45vent\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07UttProb\\x18\\x02 \\x01(\\x01\\x12K\\n\\nTimeRanges\\x18\\x03 \\x03(\\x0b\\x32\\x37.Volcengine.Vod.Models.Business.VodAEDTimeRangeForAudit\\\"a\\n\\x12VodAEDInfoForAudit\\x12K\\n\\nEventItems\\x18\\x01 \\x03(\\x0b\\x32\\x37.Volcengine.Vod.Models.Business.VodAEDEventItemForAudit\\\"k\\n\\'VodGetAudioEventDetectionForAuditResult\\x12@\\n\\x04Info\\x18\\x01 \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.VodAEDInfoForAudit\\\"<\\n VodCreateVideoClassificationData\\x12\\x18\\n\\x10\\x43lassificationId\\x18\\x01 \\x01(\\x03\\\"\\xbb\\x02\\n\\x11VodClassification\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x18\\n\\x10\\x43lassificationId\\x18\\x02 \\x01(\\x03\\x12\\r\\n\\x05Level\\x18\\x03 \\x01(\\x05\\x12\\x16\\n\\x0e\\x43lassification\\x18\\x04 \\x01(\\t\\x12\\x1e\\n\\x16ParentClassificationId\\x18\\x05 \\x01(\\x03\\x12L\\n\\x11SubClassification\\x18\\x06 \\x01(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.VodClassification\\x12Q\\n\\x16SubClassificationTrees\\x18\\x07 \\x03(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.VodClassification\\x12\\x11\\n\\tCreatedAt\\x18\\x08 \\x01(\\t\\\"m\\n\\x1bVodVideoClassificationsData\\x12N\\n\\x13\\x43lassificationTrees\\x18\\x01 \\x03(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.VodClassification\\\"[\\n\\x0bVodSnapshot\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06Height\\x18\\x02 \\x01(\\x05\\x12\\r\\n\\x05Width\\x18\\x03 \\x01(\\x05\\x12\\x10\\n\\x08StoreUri\\x18\\x04 \\x01(\\t\\x12\\x0b\\n\\x03Url\\x18\\x05 \\x01(\\t\\\"\\xb3\\x01\\n\\x11VodSpriteSnapshot\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07ImgXLen\\x18\\x02 \\x01(\\x05\\x12\\x0f\\n\\x07ImgYLen\\x18\\x03 \\x01(\\x05\\x12\\x11\\n\\tCellWidth\\x18\\x04 \\x01(\\x05\\x12\\x12\\n\\nCellHeight\\x18\\x05 \\x01(\\x05\\x12\\x10\\n\\x08Interval\\x18\\x06 \\x01(\\x02\\x12\\x12\\n\\nCaptureNum\\x18\\x07 \\x01(\\x05\\x12\\x11\\n\\tStoreUris\\x18\\x08 \\x03(\\t\\x12\\x0c\\n\\x04Urls\\x18\\t \\x03(\\t\\\"\\x91\\x02\\n\\x17VodSamplePosterSnapshot\\x12\\x11\\n\\tStoreUris\\x18\\x01 \\x03(\\t\\x12\\x0e\\n\\x06ImgNum\\x18\\x02 \\x01(\\x05\\x12\\x11\\n\\tCellWidth\\x18\\x03 \\x01(\\x05\\x12\\x12\\n\\nCellHeight\\x18\\x04 \\x01(\\x05\\x12\\x10\\n\\x08Interval\\x18\\x05 \\x01(\\x02\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x06 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x07 \\x01(\\x02\\x12\\x0c\\n\\x04Urls\\x18\\x08 \\x03(\\t\\x12\\x18\\n\\x10LargeSnapshotUri\\x18\\t \\x01(\\t\\x12 \\n\\x18LargeSnapshotDownloadUrl\\x18\\n \\x01(\\t\\x12\\x1d\\n\\x15LargeSnapshotFillType\\x18\\x0b \\x01(\\t\\x12\\x0f\\n\\x07Offsets\\x18\\x0c \\x03(\\x02\\\"\\xfa\\x03\\n\\x0fVodSnapshotData\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Vid\\x18\\x02 \\x01(\\t\\x12\\x44\\n\\x0fPosterSnapshots\\x18\\x03 \\x03(\\x0b\\x32+.Volcengine.Vod.Models.Business.VodSnapshot\\x12\\x45\\n\\x10\\x44ynpostSnapshots\\x18\\x04 \\x03(\\x0b\\x32+.Volcengine.Vod.Models.Business.VodSnapshot\\x12L\\n\\x17\\x41nimatedPosterSnapshots\\x18\\x05 \\x03(\\x0b\\x32+.Volcengine.Vod.Models.Business.VodSnapshot\\x12G\\n\\x12\\x41iDynpostSnapshots\\x18\\x06 \\x03(\\x0b\\x32+.Volcengine.Vod.Models.Business.VodSnapshot\\x12J\\n\\x0fSpriteSnapshots\\x18\\x07 \\x03(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.VodSpriteSnapshot\\x12W\\n\\x16VSamplePosterSnapshots\\x18\\x08 \\x03(\\x0b\\x32\\x37.Volcengine.Vod.Models.Business.VodSamplePosterSnapshot\\\"\\xae\\x01\\n\\x12VodGetFileListData\\x12\\x13\\n\\x0bIsTruncated\\x18\\x01 \\x01(\\x08\\x12\\x16\\n\\x0e\\x43ommonPrefixes\\x18\\x02 \\x03(\\t\\x12\\x0f\\n\\x07\\x46ileSum\\x18\\x03 \\x01(\\x03\\x12\\x13\\n\\x0bNextStarter\\x18\\x04 \\x01(\\t\\x12\\x45\\n\\x0e\\x46ileBasicInfos\\x18\\x05 \\x03(\\x0b\\x32-.Volcengine.Vod.Models.Business.FileBasicInfo\\\"Z\\n\\rFileBasicInfo\\x12\\x10\\n\\x08\\x46ileName\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Size\\x18\\x02 \\x01(\\x03\\x12\\x14\\n\\x0cStorageClass\\x18\\x03 \\x01(\\t\\x12\\x13\\n\\x0bUpdatedTime\\x18\\x04 \\x01(\\t\\\"\\x92\\x01\\n\\x13VodGetFileInfosData\\x12>\\n\\tFileInfos\\x18\\x01 \\x03(\\x0b\\x32+.Volcengine.Vod.Models.Business.VodFileInfo\\x12\\x19\\n\\x11NotExistFileNames\\x18\\x02 \\x03(\\t\\x12 \\n\\x18NotExistEncodedFileNames\\x18\\x03 \\x03(\\t\\\"\\x9e\\x01\\n\\x0bVodFileInfo\\x12\\x10\\n\\x08\\x46ileName\\x18\\x01 \\x01(\\t\\x12\\x18\\n\\x10LastModifiedTime\\x18\\x02 \\x01(\\t\\x12\\x0c\\n\\x04Size\\x18\\x03 \\x01(\\x03\\x12\\x14\\n\\x0cStorageClass\\x18\\x04 \\x01(\\t\\x12\\x11\\n\\tHashCrc64\\x18\\x05 \\x01(\\t\\x12\\x17\\n\\x0f\\x45ncodedFileName\\x18\\x06 \\x01(\\t\\x12\\x13\\n\\x0b\\x44ownloadUrl\\x18\\x07 \\x01(\\t\\\";\\n\\x11VodFileUpdateInfo\\x12\\x10\\n\\x08\\x46ileName\\x18\\x01 \\x01(\\t\\x12\\x14\\n\\x0cStorageClass\\x18\\x02 \\x01(\\t\\\":\\n\\x1dVodUpdateFileStorageClassData\\x12\\x19\\n\\x11NotExistFileNames\\x18\\x01 \\x03(\\t\\\"(\\n\\x18VodGetInnerAuditURLsData\\x12\\x0c\\n\\x04Urls\\x18\\x01 \\x03(\\t\\\"c\\n\\x1cVodGetAdAuditResultByVidData\\x12\\x43\\n\\rVodAuditInfos\\x18\\x01 \\x03(\\x0b\\x32,.Volcengine.Vod.Models.Business.VodAuditInfo\\\"\\xa9\\x02\\n\\x0cVodAuditInfo\\x12\\x0e\\n\\x06\\x46ileId\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileName\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileType\\x18\\x03 \\x01(\\t\\x12\\x12\\n\\nDefinition\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x05 \\x01(\\t\\x12\\r\\n\\x05\\x43odec\\x18\\x06 \\x01(\\t\\x12\\x0f\\n\\x07Quality\\x18\\x07 \\x01(\\t\\x12\\x0f\\n\\x07\\x42itrate\\x18\\x08 \\x01(\\x03\\x12\\x10\\n\\x08\\x43reateAt\\x18\\t \\x01(\\x03\\x12\\x10\\n\\x08UpdateAt\\x18\\n \\x01(\\x03\\x12\\x14\\n\\x0c\\x41\\x64vertiserId\\x18\\x0b \\x01(\\x03\\x12\\x14\\n\\x0c\\x42usinessType\\x18\\x0c \\x01(\\t\\x12@\\n\\x0b\\x41uditResult\\x18\\r \\x01(\\x0b\\x32+.Volcengine.Vod.Models.Business.AuditResult\\\"-\\n\\x0b\\x41uditResult\\x12\\x0e\\n\\x06Status\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06Reason\\x18\\x02 \\x01(\\t\\\"6\\n\\x1eVodUpdateMediaStorageClassData\\x12\\x14\\n\\x0cNotExistVids\\x18\\x01 \\x03(\\t\\\"b\\n\\x1dVodSubmitBlockMediaTaskResult\\x12\\x14\\n\\x0cNotExistVids\\x18\\x01 \\x03(\\t\\x12\\x13\\n\\x0b\\x42lockedVids\\x18\\x02 \\x03(\\t\\x12\\x16\\n\\x0eUnblockingVids\\x18\\x03 \\x03(\\t\\\"d\\n\\x1fVodSubmitUnblockMediaTaskResult\\x12\\x14\\n\\x0cNotExistVids\\x18\\x01 \\x03(\\t\\x12\\x15\\n\\rUnblockedVids\\x18\\x02 \\x03(\\t\\x12\\x14\\n\\x0c\\x42lockingVids\\x18\\x03 \\x03(\\t\\\"\\x84\\x01\\n\\x1eVodQueryMediaBlockStatusResult\\x12\\x14\\n\\x0cNotExistVids\\x18\\x01 \\x03(\\t\\x12L\\n\\x12MediaBlockStatuses\\x18\\x02 \\x03(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.MediaBlockStatus\\\"/\\n\\x10MediaBlockStatus\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x02 \\x01(\\t\\\"\\xa4\\x01\\n\\x1bVodGetMediaEntityListResult\\x12\\x12\\n\\nTotalCount\\x18\\x01 \\x01(\\x05\\x12\\x12\\n\\nPageNumber\\x18\\x02 \\x01(\\x05\\x12\\x10\\n\\x08PageSize\\x18\\x03 \\x01(\\x05\\x12K\\n\\x0f\\x42\\x61seEntityInfos\\x18\\x04 \\x03(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.VodBaseMediaEntity\\\"\\xcf\\x01\\n\\x17VodGetMediaEntityResult\\x12J\\n\\x0e\\x42\\x61seEntityInfo\\x18\\x01 \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.VodBaseMediaEntity\\x12\\x1a\\n\\x12\\x45ntityExtraRawInfo\\x18\\x02 \\x01(\\t\\x12L\\n\\rPublicUrlInfo\\x18\\x03 \\x01(\\x0b\\x32\\x35.Volcengine.Vod.Models.Business.VodMediaPublicUrlInfo\\\":\\n\\x15VodMediaPublicUrlInfo\\x12\\x0e\\n\\x06\\x43\\x64nUrl\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tOriginUrl\\x18\\x02 \\x01(\\t\\\"\\xe0\\x01\\n\\x12VodBaseMediaEntity\\x12\\n\\n\\x02Id\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Vid\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nEntityType\\x18\\x03 \\x01(\\t\\x12\\x15\\n\\rEntityVersion\\x18\\x04 \\x01(\\t\\x12\\x11\\n\\tSpaceName\\x18\\x05 \\x01(\\t\\x12\\x10\\n\\x08StoreUri\\x18\\x06 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileName\\x18\\x07 \\x01(\\t\\x12\\x0e\\n\\x06Source\\x18\\x08 \\x01(\\t\\x12\\x11\\n\\tCreatedAt\\x18\\t \\x01(\\t\\x12\\x11\\n\\tUpdatedAt\\x18\\n \\x01(\\t\\x12\\x19\\n\\x11\\x45ntityBaseRawInfo\\x18\\x0b \\x01(\\t\\\"\\xb8\\x01\\n\\x14VodMediaEntityConfig\\x12\\x16\\n\\x0e\\x45ntityTypeName\\x18\\x01 \\x01(\\t\\x12\\x19\\n\\x11\\x45ntityTypeDisplay\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nIsTextFile\\x18\\x03 \\x01(\\x08\\x12Y\\n\\x14\\x45ntityVersionConfigs\\x18\\x04 \\x03(\\x0b\\x32;.Volcengine.Vod.Models.Business.VodMediaEntityVersionConfig\\\"V\\n\\x1bVodMediaEntityVersionConfig\\x12\\x19\\n\\x11\\x45ntityVersionName\\x18\\x01 \\x01(\\t\\x12\\x1c\\n\\x14\\x45ntityVersionDisplay\\x18\\x02 \\x01(\\t*\\xd0\\x02\\n VodFrameExtractingOptionForAudit\\x12-\\n)UndefinedVodFrameExtractingOptionForAudit\\x10\\x00\\x12\\'\\n#FpsVodFrameExtractingOptionForAudit\\x10\\x01\\x12\\x32\\n.NumberOfFramesVodFrameExtractingOptionForAudit\\x10\\x02\\x12,\\n(CutTimesVodFrameExtractingOptionForAudit\\x10\\x03\\x12:\\n6FpsLimitNumberOfFramesVodFrameExtractingOptionForAudit\\x10\\x04\\x12\\x36\\n2OnlyFirstLastFrameVodFrameExtractingOptionForAudit\\x10\\x05\\x42\\xcc\\x01\\n)com.volcengine.service.vod.model.businessB\\x08VodMediaP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n_VODFRAMEEXTRACTINGOPTIONFORAUDIT = DESCRIPTOR.enum_types_by_name['VodFrameExtractingOptionForAudit']\nVodFrameExtractingOptionForAudit = enum_type_wrapper.EnumTypeWrapper(_VODFRAMEEXTRACTINGOPTIONFORAUDIT)\nUndefinedVodFrameExtractingOptionForAudit = 0\nFpsVodFrameExtractingOptionForAudit = 1\nNumberOfFramesVodFrameExtractingOptionForAudit = 2\nCutTimesVodFrameExtractingOptionForAudit = 3\nFpsLimitNumberOfFramesVodFrameExtractingOptionForAudit = 4\nOnlyFirstLastFrameVodFrameExtractingOptionForAudit = 5\n\n\n_VODLISTFILEMETAINFOSBYFILENAMESRESULT = DESCRIPTOR.message_types_by_name['VodListFileMetaInfosByFileNamesResult']\n_VODFILEMETAINFO = DESCRIPTOR.message_types_by_name['VodFileMetaInfo']\n_VODMEDIABASICINFO = DESCRIPTOR.message_types_by_name['VodMediaBasicInfo']\n_VODMEDIAINFO = DESCRIPTOR.message_types_by_name['VodMediaInfo']\n_VODGETMEDIAINFOSDATA = DESCRIPTOR.message_types_by_name['VodGetMediaInfosData']\n_VODSTOREURIGROUP = DESCRIPTOR.message_types_by_name['VodStoreUriGroup']\n_VODGETRECPOSTERDATA = DESCRIPTOR.message_types_by_name['VodGetRecPosterData']\n_VODDELETEMEDIADATA = DESCRIPTOR.message_types_by_name['VodDeleteMediaData']\n_VODDELETETRANSCODESDATA = DESCRIPTOR.message_types_by_name['VodDeleteTranscodesData']\n_VODDELETEMEDIATOSFILEDATA = DESCRIPTOR.message_types_by_name['VodDeleteMediaTosFileData']\n_VODGETMEDIALISTDATA = DESCRIPTOR.message_types_by_name['VodGetMediaListData']\n_VODUPDATESUBTITLESTATUSDATA = DESCRIPTOR.message_types_by_name['VodUpdateSubtitleStatusData']\n_VODFILESUBTITLEINFO = DESCRIPTOR.message_types_by_name['VodFileSubtitleInfo']\n_VODGETSUBTITLEINFOLISTDATA = DESCRIPTOR.message_types_by_name['VodGetSubtitleInfoListData']\n_VODFRAMEDATAFORAUDIT = DESCRIPTOR.message_types_by_name['VodFrameDataForAudit']\n_VODGETFRAMESFORAUDITRESULT = DESCRIPTOR.message_types_by_name['VodGetFramesForAuditResult']\n_VODBETTERFRAMEDATAFORAUDIT = DESCRIPTOR.message_types_by_name['VodBetterFrameDataForAudit']\n_VODGETBETTERFRAMESFORAUDITRESULT = DESCRIPTOR.message_types_by_name['VodGetBetterFramesForAuditResult']\n_VODAUDIOINFOFORAUDIT = DESCRIPTOR.message_types_by_name['VodAudioInfoForAudit']\n_VODGETAUDIOINFOFORAUDITRESULT = DESCRIPTOR.message_types_by_name['VodGetAudioInfoForAuditResult']\n_VODASRUTTERANCEWORDFORAUDIT = DESCRIPTOR.message_types_by_name['VodASRUtteranceWordForAudit']\n_VODASRUTTERANCEFORAUDIT = DESCRIPTOR.message_types_by_name['VodASRUtteranceForAudit']\n_VODASRLANGUAGEDETAILFORAUDIT = DESCRIPTOR.message_types_by_name['VodASRLanguageDetailForAudit']\n_VODASRINFOFORAUDIT = DESCRIPTOR.message_types_by_name['VodASRInfoForAudit']\n_VODGETAUTOMATICSPEECHRECOGNITIONFORAUDITRESULT = DESCRIPTOR.message_types_by_name['VodGetAutomaticSpeechRecognitionForAuditResult']\n_VODAEDTIMERANGEFORAUDIT = DESCRIPTOR.message_types_by_name['VodAEDTimeRangeForAudit']\n_VODAEDEVENTITEMFORAUDIT = DESCRIPTOR.message_types_by_name['VodAEDEventItemForAudit']\n_VODAEDINFOFORAUDIT = DESCRIPTOR.message_types_by_name['VodAEDInfoForAudit']\n_VODGETAUDIOEVENTDETECTIONFORAUDITRESULT = DESCRIPTOR.message_types_by_name['VodGetAudioEventDetectionForAuditResult']\n_VODCREATEVIDEOCLASSIFICATIONDATA = DESCRIPTOR.message_types_by_name['VodCreateVideoClassificationData']\n_VODCLASSIFICATION = DESCRIPTOR.message_types_by_name['VodClassification']\n_VODVIDEOCLASSIFICATIONSDATA = DESCRIPTOR.message_types_by_name['VodVideoClassificationsData']\n_VODSNAPSHOT = DESCRIPTOR.message_types_by_name['VodSnapshot']\n_VODSPRITESNAPSHOT = DESCRIPTOR.message_types_by_name['VodSpriteSnapshot']\n_VODSAMPLEPOSTERSNAPSHOT = DESCRIPTOR.message_types_by_name['VodSamplePosterSnapshot']\n_VODSNAPSHOTDATA = DESCRIPTOR.message_types_by_name['VodSnapshotData']\n_VODGETFILELISTDATA = DESCRIPTOR.message_types_by_name['VodGetFileListData']\n_FILEBASICINFO = DESCRIPTOR.message_types_by_name['FileBasicInfo']\n_VODGETFILEINFOSDATA = DESCRIPTOR.message_types_by_name['VodGetFileInfosData']\n_VODFILEINFO = DESCRIPTOR.message_types_by_name['VodFileInfo']\n_VODFILEUPDATEINFO = DESCRIPTOR.message_types_by_name['VodFileUpdateInfo']\n_VODUPDATEFILESTORAGECLASSDATA = DESCRIPTOR.message_types_by_name['VodUpdateFileStorageClassData']\n_VODGETINNERAUDITURLSDATA = DESCRIPTOR.message_types_by_name['VodGetInnerAuditURLsData']\n_VODGETADAUDITRESULTBYVIDDATA = DESCRIPTOR.message_types_by_name['VodGetAdAuditResultByVidData']\n_VODAUDITINFO = DESCRIPTOR.message_types_by_name['VodAuditInfo']\n_AUDITRESULT = DESCRIPTOR.message_types_by_name['AuditResult']\n_VODUPDATEMEDIASTORAGECLASSDATA = DESCRIPTOR.message_types_by_name['VodUpdateMediaStorageClassData']\n_VODSUBMITBLOCKMEDIATASKRESULT = DESCRIPTOR.message_types_by_name['VodSubmitBlockMediaTaskResult']\n_VODSUBMITUNBLOCKMEDIATASKRESULT = DESCRIPTOR.message_types_by_name['VodSubmitUnblockMediaTaskResult']\n_VODQUERYMEDIABLOCKSTATUSRESULT = DESCRIPTOR.message_types_by_name['VodQueryMediaBlockStatusResult']\n_MEDIABLOCKSTATUS = DESCRIPTOR.message_types_by_name['MediaBlockStatus']\n_VODGETMEDIAENTITYLISTRESULT = DESCRIPTOR.message_types_by_name['VodGetMediaEntityListResult']\n_VODGETMEDIAENTITYRESULT = DESCRIPTOR.message_types_by_name['VodGetMediaEntityResult']\n_VODMEDIAPUBLICURLINFO = DESCRIPTOR.message_types_by_name['VodMediaPublicUrlInfo']\n_VODBASEMEDIAENTITY = DESCRIPTOR.message_types_by_name['VodBaseMediaEntity']\n_VODMEDIAENTITYCONFIG = DESCRIPTOR.message_types_by_name['VodMediaEntityConfig']\n_VODMEDIAENTITYVERSIONCONFIG = DESCRIPTOR.message_types_by_name['VodMediaEntityVersionConfig']\nVodListFileMetaInfosByFileNamesResult = _reflection.GeneratedProtocolMessageType('VodListFileMetaInfosByFileNamesResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTFILEMETAINFOSBYFILENAMESRESULT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodListFileMetaInfosByFileNamesResult)\n  })\n_sym_db.RegisterMessage(VodListFileMetaInfosByFileNamesResult)\n\nVodFileMetaInfo = _reflection.GeneratedProtocolMessageType('VodFileMetaInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODFILEMETAINFO,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodFileMetaInfo)\n  })\n_sym_db.RegisterMessage(VodFileMetaInfo)\n\nVodMediaBasicInfo = _reflection.GeneratedProtocolMessageType('VodMediaBasicInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODMEDIABASICINFO,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodMediaBasicInfo)\n  })\n_sym_db.RegisterMessage(VodMediaBasicInfo)\n\nVodMediaInfo = _reflection.GeneratedProtocolMessageType('VodMediaInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODMEDIAINFO,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodMediaInfo)\n  })\n_sym_db.RegisterMessage(VodMediaInfo)\n\nVodGetMediaInfosData = _reflection.GeneratedProtocolMessageType('VodGetMediaInfosData', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETMEDIAINFOSDATA,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetMediaInfosData)\n  })\n_sym_db.RegisterMessage(VodGetMediaInfosData)\n\nVodStoreUriGroup = _reflection.GeneratedProtocolMessageType('VodStoreUriGroup', (_message.Message,), {\n  'DESCRIPTOR' : _VODSTOREURIGROUP,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodStoreUriGroup)\n  })\n_sym_db.RegisterMessage(VodStoreUriGroup)\n\nVodGetRecPosterData = _reflection.GeneratedProtocolMessageType('VodGetRecPosterData', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETRECPOSTERDATA,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetRecPosterData)\n  })\n_sym_db.RegisterMessage(VodGetRecPosterData)\n\nVodDeleteMediaData = _reflection.GeneratedProtocolMessageType('VodDeleteMediaData', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEMEDIADATA,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDeleteMediaData)\n  })\n_sym_db.RegisterMessage(VodDeleteMediaData)\n\nVodDeleteTranscodesData = _reflection.GeneratedProtocolMessageType('VodDeleteTranscodesData', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETETRANSCODESDATA,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDeleteTranscodesData)\n  })\n_sym_db.RegisterMessage(VodDeleteTranscodesData)\n\nVodDeleteMediaTosFileData = _reflection.GeneratedProtocolMessageType('VodDeleteMediaTosFileData', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEMEDIATOSFILEDATA,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDeleteMediaTosFileData)\n  })\n_sym_db.RegisterMessage(VodDeleteMediaTosFileData)\n\nVodGetMediaListData = _reflection.GeneratedProtocolMessageType('VodGetMediaListData', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETMEDIALISTDATA,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetMediaListData)\n  })\n_sym_db.RegisterMessage(VodGetMediaListData)\n\nVodUpdateSubtitleStatusData = _reflection.GeneratedProtocolMessageType('VodUpdateSubtitleStatusData', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATESUBTITLESTATUSDATA,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodUpdateSubtitleStatusData)\n  })\n_sym_db.RegisterMessage(VodUpdateSubtitleStatusData)\n\nVodFileSubtitleInfo = _reflection.GeneratedProtocolMessageType('VodFileSubtitleInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODFILESUBTITLEINFO,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodFileSubtitleInfo)\n  })\n_sym_db.RegisterMessage(VodFileSubtitleInfo)\n\nVodGetSubtitleInfoListData = _reflection.GeneratedProtocolMessageType('VodGetSubtitleInfoListData', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETSUBTITLEINFOLISTDATA,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetSubtitleInfoListData)\n  })\n_sym_db.RegisterMessage(VodGetSubtitleInfoListData)\n\nVodFrameDataForAudit = _reflection.GeneratedProtocolMessageType('VodFrameDataForAudit', (_message.Message,), {\n  'DESCRIPTOR' : _VODFRAMEDATAFORAUDIT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodFrameDataForAudit)\n  })\n_sym_db.RegisterMessage(VodFrameDataForAudit)\n\nVodGetFramesForAuditResult = _reflection.GeneratedProtocolMessageType('VodGetFramesForAuditResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETFRAMESFORAUDITRESULT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetFramesForAuditResult)\n  })\n_sym_db.RegisterMessage(VodGetFramesForAuditResult)\n\nVodBetterFrameDataForAudit = _reflection.GeneratedProtocolMessageType('VodBetterFrameDataForAudit', (_message.Message,), {\n  'DESCRIPTOR' : _VODBETTERFRAMEDATAFORAUDIT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodBetterFrameDataForAudit)\n  })\n_sym_db.RegisterMessage(VodBetterFrameDataForAudit)\n\nVodGetBetterFramesForAuditResult = _reflection.GeneratedProtocolMessageType('VodGetBetterFramesForAuditResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETBETTERFRAMESFORAUDITRESULT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetBetterFramesForAuditResult)\n  })\n_sym_db.RegisterMessage(VodGetBetterFramesForAuditResult)\n\nVodAudioInfoForAudit = _reflection.GeneratedProtocolMessageType('VodAudioInfoForAudit', (_message.Message,), {\n  'DESCRIPTOR' : _VODAUDIOINFOFORAUDIT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodAudioInfoForAudit)\n  })\n_sym_db.RegisterMessage(VodAudioInfoForAudit)\n\nVodGetAudioInfoForAuditResult = _reflection.GeneratedProtocolMessageType('VodGetAudioInfoForAuditResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETAUDIOINFOFORAUDITRESULT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetAudioInfoForAuditResult)\n  })\n_sym_db.RegisterMessage(VodGetAudioInfoForAuditResult)\n\nVodASRUtteranceWordForAudit = _reflection.GeneratedProtocolMessageType('VodASRUtteranceWordForAudit', (_message.Message,), {\n  'DESCRIPTOR' : _VODASRUTTERANCEWORDFORAUDIT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodASRUtteranceWordForAudit)\n  })\n_sym_db.RegisterMessage(VodASRUtteranceWordForAudit)\n\nVodASRUtteranceForAudit = _reflection.GeneratedProtocolMessageType('VodASRUtteranceForAudit', (_message.Message,), {\n  'DESCRIPTOR' : _VODASRUTTERANCEFORAUDIT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodASRUtteranceForAudit)\n  })\n_sym_db.RegisterMessage(VodASRUtteranceForAudit)\n\nVodASRLanguageDetailForAudit = _reflection.GeneratedProtocolMessageType('VodASRLanguageDetailForAudit', (_message.Message,), {\n  'DESCRIPTOR' : _VODASRLANGUAGEDETAILFORAUDIT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodASRLanguageDetailForAudit)\n  })\n_sym_db.RegisterMessage(VodASRLanguageDetailForAudit)\n\nVodASRInfoForAudit = _reflection.GeneratedProtocolMessageType('VodASRInfoForAudit', (_message.Message,), {\n  'DESCRIPTOR' : _VODASRINFOFORAUDIT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodASRInfoForAudit)\n  })\n_sym_db.RegisterMessage(VodASRInfoForAudit)\n\nVodGetAutomaticSpeechRecognitionForAuditResult = _reflection.GeneratedProtocolMessageType('VodGetAutomaticSpeechRecognitionForAuditResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETAUTOMATICSPEECHRECOGNITIONFORAUDITRESULT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetAutomaticSpeechRecognitionForAuditResult)\n  })\n_sym_db.RegisterMessage(VodGetAutomaticSpeechRecognitionForAuditResult)\n\nVodAEDTimeRangeForAudit = _reflection.GeneratedProtocolMessageType('VodAEDTimeRangeForAudit', (_message.Message,), {\n  'DESCRIPTOR' : _VODAEDTIMERANGEFORAUDIT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodAEDTimeRangeForAudit)\n  })\n_sym_db.RegisterMessage(VodAEDTimeRangeForAudit)\n\nVodAEDEventItemForAudit = _reflection.GeneratedProtocolMessageType('VodAEDEventItemForAudit', (_message.Message,), {\n  'DESCRIPTOR' : _VODAEDEVENTITEMFORAUDIT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodAEDEventItemForAudit)\n  })\n_sym_db.RegisterMessage(VodAEDEventItemForAudit)\n\nVodAEDInfoForAudit = _reflection.GeneratedProtocolMessageType('VodAEDInfoForAudit', (_message.Message,), {\n  'DESCRIPTOR' : _VODAEDINFOFORAUDIT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodAEDInfoForAudit)\n  })\n_sym_db.RegisterMessage(VodAEDInfoForAudit)\n\nVodGetAudioEventDetectionForAuditResult = _reflection.GeneratedProtocolMessageType('VodGetAudioEventDetectionForAuditResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETAUDIOEVENTDETECTIONFORAUDITRESULT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetAudioEventDetectionForAuditResult)\n  })\n_sym_db.RegisterMessage(VodGetAudioEventDetectionForAuditResult)\n\nVodCreateVideoClassificationData = _reflection.GeneratedProtocolMessageType('VodCreateVideoClassificationData', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEVIDEOCLASSIFICATIONDATA,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCreateVideoClassificationData)\n  })\n_sym_db.RegisterMessage(VodCreateVideoClassificationData)\n\nVodClassification = _reflection.GeneratedProtocolMessageType('VodClassification', (_message.Message,), {\n  'DESCRIPTOR' : _VODCLASSIFICATION,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodClassification)\n  })\n_sym_db.RegisterMessage(VodClassification)\n\nVodVideoClassificationsData = _reflection.GeneratedProtocolMessageType('VodVideoClassificationsData', (_message.Message,), {\n  'DESCRIPTOR' : _VODVIDEOCLASSIFICATIONSDATA,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodVideoClassificationsData)\n  })\n_sym_db.RegisterMessage(VodVideoClassificationsData)\n\nVodSnapshot = _reflection.GeneratedProtocolMessageType('VodSnapshot', (_message.Message,), {\n  'DESCRIPTOR' : _VODSNAPSHOT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodSnapshot)\n  })\n_sym_db.RegisterMessage(VodSnapshot)\n\nVodSpriteSnapshot = _reflection.GeneratedProtocolMessageType('VodSpriteSnapshot', (_message.Message,), {\n  'DESCRIPTOR' : _VODSPRITESNAPSHOT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodSpriteSnapshot)\n  })\n_sym_db.RegisterMessage(VodSpriteSnapshot)\n\nVodSamplePosterSnapshot = _reflection.GeneratedProtocolMessageType('VodSamplePosterSnapshot', (_message.Message,), {\n  'DESCRIPTOR' : _VODSAMPLEPOSTERSNAPSHOT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodSamplePosterSnapshot)\n  })\n_sym_db.RegisterMessage(VodSamplePosterSnapshot)\n\nVodSnapshotData = _reflection.GeneratedProtocolMessageType('VodSnapshotData', (_message.Message,), {\n  'DESCRIPTOR' : _VODSNAPSHOTDATA,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodSnapshotData)\n  })\n_sym_db.RegisterMessage(VodSnapshotData)\n\nVodGetFileListData = _reflection.GeneratedProtocolMessageType('VodGetFileListData', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETFILELISTDATA,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetFileListData)\n  })\n_sym_db.RegisterMessage(VodGetFileListData)\n\nFileBasicInfo = _reflection.GeneratedProtocolMessageType('FileBasicInfo', (_message.Message,), {\n  'DESCRIPTOR' : _FILEBASICINFO,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.FileBasicInfo)\n  })\n_sym_db.RegisterMessage(FileBasicInfo)\n\nVodGetFileInfosData = _reflection.GeneratedProtocolMessageType('VodGetFileInfosData', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETFILEINFOSDATA,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetFileInfosData)\n  })\n_sym_db.RegisterMessage(VodGetFileInfosData)\n\nVodFileInfo = _reflection.GeneratedProtocolMessageType('VodFileInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODFILEINFO,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodFileInfo)\n  })\n_sym_db.RegisterMessage(VodFileInfo)\n\nVodFileUpdateInfo = _reflection.GeneratedProtocolMessageType('VodFileUpdateInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODFILEUPDATEINFO,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodFileUpdateInfo)\n  })\n_sym_db.RegisterMessage(VodFileUpdateInfo)\n\nVodUpdateFileStorageClassData = _reflection.GeneratedProtocolMessageType('VodUpdateFileStorageClassData', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEFILESTORAGECLASSDATA,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodUpdateFileStorageClassData)\n  })\n_sym_db.RegisterMessage(VodUpdateFileStorageClassData)\n\nVodGetInnerAuditURLsData = _reflection.GeneratedProtocolMessageType('VodGetInnerAuditURLsData', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETINNERAUDITURLSDATA,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetInnerAuditURLsData)\n  })\n_sym_db.RegisterMessage(VodGetInnerAuditURLsData)\n\nVodGetAdAuditResultByVidData = _reflection.GeneratedProtocolMessageType('VodGetAdAuditResultByVidData', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETADAUDITRESULTBYVIDDATA,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetAdAuditResultByVidData)\n  })\n_sym_db.RegisterMessage(VodGetAdAuditResultByVidData)\n\nVodAuditInfo = _reflection.GeneratedProtocolMessageType('VodAuditInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODAUDITINFO,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodAuditInfo)\n  })\n_sym_db.RegisterMessage(VodAuditInfo)\n\nAuditResult = _reflection.GeneratedProtocolMessageType('AuditResult', (_message.Message,), {\n  'DESCRIPTOR' : _AUDITRESULT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.AuditResult)\n  })\n_sym_db.RegisterMessage(AuditResult)\n\nVodUpdateMediaStorageClassData = _reflection.GeneratedProtocolMessageType('VodUpdateMediaStorageClassData', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEMEDIASTORAGECLASSDATA,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodUpdateMediaStorageClassData)\n  })\n_sym_db.RegisterMessage(VodUpdateMediaStorageClassData)\n\nVodSubmitBlockMediaTaskResult = _reflection.GeneratedProtocolMessageType('VodSubmitBlockMediaTaskResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITBLOCKMEDIATASKRESULT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodSubmitBlockMediaTaskResult)\n  })\n_sym_db.RegisterMessage(VodSubmitBlockMediaTaskResult)\n\nVodSubmitUnblockMediaTaskResult = _reflection.GeneratedProtocolMessageType('VodSubmitUnblockMediaTaskResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITUNBLOCKMEDIATASKRESULT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodSubmitUnblockMediaTaskResult)\n  })\n_sym_db.RegisterMessage(VodSubmitUnblockMediaTaskResult)\n\nVodQueryMediaBlockStatusResult = _reflection.GeneratedProtocolMessageType('VodQueryMediaBlockStatusResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODQUERYMEDIABLOCKSTATUSRESULT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodQueryMediaBlockStatusResult)\n  })\n_sym_db.RegisterMessage(VodQueryMediaBlockStatusResult)\n\nMediaBlockStatus = _reflection.GeneratedProtocolMessageType('MediaBlockStatus', (_message.Message,), {\n  'DESCRIPTOR' : _MEDIABLOCKSTATUS,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.MediaBlockStatus)\n  })\n_sym_db.RegisterMessage(MediaBlockStatus)\n\nVodGetMediaEntityListResult = _reflection.GeneratedProtocolMessageType('VodGetMediaEntityListResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETMEDIAENTITYLISTRESULT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetMediaEntityListResult)\n  })\n_sym_db.RegisterMessage(VodGetMediaEntityListResult)\n\nVodGetMediaEntityResult = _reflection.GeneratedProtocolMessageType('VodGetMediaEntityResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETMEDIAENTITYRESULT,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetMediaEntityResult)\n  })\n_sym_db.RegisterMessage(VodGetMediaEntityResult)\n\nVodMediaPublicUrlInfo = _reflection.GeneratedProtocolMessageType('VodMediaPublicUrlInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODMEDIAPUBLICURLINFO,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodMediaPublicUrlInfo)\n  })\n_sym_db.RegisterMessage(VodMediaPublicUrlInfo)\n\nVodBaseMediaEntity = _reflection.GeneratedProtocolMessageType('VodBaseMediaEntity', (_message.Message,), {\n  'DESCRIPTOR' : _VODBASEMEDIAENTITY,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodBaseMediaEntity)\n  })\n_sym_db.RegisterMessage(VodBaseMediaEntity)\n\nVodMediaEntityConfig = _reflection.GeneratedProtocolMessageType('VodMediaEntityConfig', (_message.Message,), {\n  'DESCRIPTOR' : _VODMEDIAENTITYCONFIG,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodMediaEntityConfig)\n  })\n_sym_db.RegisterMessage(VodMediaEntityConfig)\n\nVodMediaEntityVersionConfig = _reflection.GeneratedProtocolMessageType('VodMediaEntityVersionConfig', (_message.Message,), {\n  'DESCRIPTOR' : _VODMEDIAENTITYVERSIONCONFIG,\n  '__module__' : 'volcengine.vod.business.vod_media_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodMediaEntityVersionConfig)\n  })\n_sym_db.RegisterMessage(VodMediaEntityVersionConfig)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.vod.model.businessB\\010VodMediaP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _VODFRAMEEXTRACTINGOPTIONFORAUDIT._serialized_start=7872\n  _VODFRAMEEXTRACTINGOPTIONFORAUDIT._serialized_end=8208\n  _VODLISTFILEMETAINFOSBYFILENAMESRESULT._serialized_start=117\n  _VODLISTFILEMETAINFOSBYFILENAMESRESULT._serialized_end=231\n  _VODFILEMETAINFO._serialized_start=233\n  _VODFILEMETAINFO._serialized_end=360\n  _VODMEDIABASICINFO._serialized_start=363\n  _VODMEDIABASICINFO._serialized_end=693\n  _VODMEDIAINFO._serialized_start=696\n  _VODMEDIAINFO._serialized_end=921\n  _VODGETMEDIAINFOSDATA._serialized_start=923\n  _VODGETMEDIAINFOSDATA._serialized_end=1036\n  _VODSTOREURIGROUP._serialized_start=1038\n  _VODSTOREURIGROUP._serialized_end=1088\n  _VODGETRECPOSTERDATA._serialized_start=1090\n  _VODGETRECPOSTERDATA._serialized_end=1207\n  _VODDELETEMEDIADATA._serialized_start=1209\n  _VODDELETEMEDIADATA._serialized_end=1251\n  _VODDELETETRANSCODESDATA._serialized_start=1253\n  _VODDELETETRANSCODESDATA._serialized_end=1303\n  _VODDELETEMEDIATOSFILEDATA._serialized_start=1305\n  _VODDELETEMEDIATOSFILEDATA._serialized_end=1357\n  _VODGETMEDIALISTDATA._serialized_start=1360\n  _VODGETMEDIALISTDATA._serialized_end=1523\n  _VODUPDATESUBTITLESTATUSDATA._serialized_start=1525\n  _VODUPDATESUBTITLESTATUSDATA._serialized_end=1579\n  _VODFILESUBTITLEINFO._serialized_start=1581\n  _VODFILESUBTITLEINFO._serialized_end=1693\n  _VODGETSUBTITLEINFOLISTDATA._serialized_start=1696\n  _VODGETSUBTITLEINFOLISTDATA._serialized_end=1899\n  _VODFRAMEDATAFORAUDIT._serialized_start=1901\n  _VODFRAMEDATAFORAUDIT._serialized_end=2014\n  _VODGETFRAMESFORAUDITRESULT._serialized_start=2016\n  _VODGETFRAMESFORAUDITRESULT._serialized_end=2114\n  _VODBETTERFRAMEDATAFORAUDIT._serialized_start=2117\n  _VODBETTERFRAMEDATAFORAUDIT._serialized_end=2276\n  _VODGETBETTERFRAMESFORAUDITRESULT._serialized_start=2278\n  _VODGETBETTERFRAMESFORAUDITRESULT._serialized_end=2388\n  _VODAUDIOINFOFORAUDIT._serialized_start=2390\n  _VODAUDIOINFOFORAUDIT._serialized_end=2464\n  _VODGETAUDIOINFOFORAUDITRESULT._serialized_start=2466\n  _VODGETAUDIOINFOFORAUDITRESULT._serialized_end=2570\n  _VODASRUTTERANCEWORDFORAUDIT._serialized_start=2572\n  _VODASRUTTERANCEWORDFORAUDIT._serialized_end=2682\n  _VODASRUTTERANCEFORAUDIT._serialized_start=2685\n  _VODASRUTTERANCEFORAUDIT._serialized_end=2882\n  _VODASRLANGUAGEDETAILFORAUDIT._serialized_start=2884\n  _VODASRLANGUAGEDETAILFORAUDIT._serialized_end=2946\n  _VODASRINFOFORAUDIT._serialized_start=2949\n  _VODASRINFOFORAUDIT._serialized_end=3201\n  _VODGETAUTOMATICSPEECHRECOGNITIONFORAUDITRESULT._serialized_start=3203\n  _VODGETAUTOMATICSPEECHRECOGNITIONFORAUDITRESULT._serialized_end=3317\n  _VODAEDTIMERANGEFORAUDIT._serialized_start=3319\n  _VODAEDTIMERANGEFORAUDIT._serialized_end=3402\n  _VODAEDEVENTITEMFORAUDIT._serialized_start=3405\n  _VODAEDEVENTITEMFORAUDIT._serialized_end=3539\n  _VODAEDINFOFORAUDIT._serialized_start=3541\n  _VODAEDINFOFORAUDIT._serialized_end=3638\n  _VODGETAUDIOEVENTDETECTIONFORAUDITRESULT._serialized_start=3640\n  _VODGETAUDIOEVENTDETECTIONFORAUDITRESULT._serialized_end=3747\n  _VODCREATEVIDEOCLASSIFICATIONDATA._serialized_start=3749\n  _VODCREATEVIDEOCLASSIFICATIONDATA._serialized_end=3809\n  _VODCLASSIFICATION._serialized_start=3812\n  _VODCLASSIFICATION._serialized_end=4127\n  _VODVIDEOCLASSIFICATIONSDATA._serialized_start=4129\n  _VODVIDEOCLASSIFICATIONSDATA._serialized_end=4238\n  _VODSNAPSHOT._serialized_start=4240\n  _VODSNAPSHOT._serialized_end=4331\n  _VODSPRITESNAPSHOT._serialized_start=4334\n  _VODSPRITESNAPSHOT._serialized_end=4513\n  _VODSAMPLEPOSTERSNAPSHOT._serialized_start=4516\n  _VODSAMPLEPOSTERSNAPSHOT._serialized_end=4789\n  _VODSNAPSHOTDATA._serialized_start=4792\n  _VODSNAPSHOTDATA._serialized_end=5298\n  _VODGETFILELISTDATA._serialized_start=5301\n  _VODGETFILELISTDATA._serialized_end=5475\n  _FILEBASICINFO._serialized_start=5477\n  _FILEBASICINFO._serialized_end=5567\n  _VODGETFILEINFOSDATA._serialized_start=5570\n  _VODGETFILEINFOSDATA._serialized_end=5716\n  _VODFILEINFO._serialized_start=5719\n  _VODFILEINFO._serialized_end=5877\n  _VODFILEUPDATEINFO._serialized_start=5879\n  _VODFILEUPDATEINFO._serialized_end=5938\n  _VODUPDATEFILESTORAGECLASSDATA._serialized_start=5940\n  _VODUPDATEFILESTORAGECLASSDATA._serialized_end=5998\n  _VODGETINNERAUDITURLSDATA._serialized_start=6000\n  _VODGETINNERAUDITURLSDATA._serialized_end=6040\n  _VODGETADAUDITRESULTBYVIDDATA._serialized_start=6042\n  _VODGETADAUDITRESULTBYVIDDATA._serialized_end=6141\n  _VODAUDITINFO._serialized_start=6144\n  _VODAUDITINFO._serialized_end=6441\n  _AUDITRESULT._serialized_start=6443\n  _AUDITRESULT._serialized_end=6488\n  _VODUPDATEMEDIASTORAGECLASSDATA._serialized_start=6490\n  _VODUPDATEMEDIASTORAGECLASSDATA._serialized_end=6544\n  _VODSUBMITBLOCKMEDIATASKRESULT._serialized_start=6546\n  _VODSUBMITBLOCKMEDIATASKRESULT._serialized_end=6644\n  _VODSUBMITUNBLOCKMEDIATASKRESULT._serialized_start=6646\n  _VODSUBMITUNBLOCKMEDIATASKRESULT._serialized_end=6746\n  _VODQUERYMEDIABLOCKSTATUSRESULT._serialized_start=6749\n  _VODQUERYMEDIABLOCKSTATUSRESULT._serialized_end=6881\n  _MEDIABLOCKSTATUS._serialized_start=6883\n  _MEDIABLOCKSTATUS._serialized_end=6930\n  _VODGETMEDIAENTITYLISTRESULT._serialized_start=6933\n  _VODGETMEDIAENTITYLISTRESULT._serialized_end=7097\n  _VODGETMEDIAENTITYRESULT._serialized_start=7100\n  _VODGETMEDIAENTITYRESULT._serialized_end=7307\n  _VODMEDIAPUBLICURLINFO._serialized_start=7309\n  _VODMEDIAPUBLICURLINFO._serialized_end=7367\n  _VODBASEMEDIAENTITY._serialized_start=7370\n  _VODBASEMEDIAENTITY._serialized_end=7594\n  _VODMEDIAENTITYCONFIG._serialized_start=7597\n  _VODMEDIAENTITYCONFIG._serialized_end=7781\n  _VODMEDIAENTITYVERSIONCONFIG._serialized_start=7783\n  _VODMEDIAENTITYVERSIONCONFIG._serialized_end=7869\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/vod/models/business/vod_migrate_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/business/vod_migrate.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n)volcengine/vod/business/vod_migrate.proto\\x12\\x1eVolcengine.Vod.Models.Business\\\"\\x81\\x01\\n\\x1cVodCloudMigrateJobSourceInfo\\x12\\x0e\\n\\x06Vendor\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08SourceAK\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08SourceSK\\x18\\x03 \\x01(\\t\\x12\\x14\\n\\x0cSourceDomain\\x18\\x04 \\x01(\\t\\x12\\x17\\n\\x0fSourceDomainKey\\x18\\x05 \\x01(\\t\\\",\\n\\x1bVodSetCloudMigrateJobResult\\x12\\r\\n\\x05JobId\\x18\\x01 \\x01(\\x03\\\"\\x9a\\x01\\n\\x1bVodGetCloudMigrateJobResult\\x12\\r\\n\\x05JobId\\x18\\x01 \\x01(\\x03\\x12S\\n\\rJobSourceInfo\\x18\\x02 \\x01(\\x0b\\x32<.Volcengine.Vod.Models.Business.VodCloudMigrateJobSourceInfo\\x12\\x17\\n\\x0f\\x43\\x61llbackAddress\\x18\\x03 \\x01(\\tB\\xce\\x01\\n)com.volcengine.service.vod.model.businessB\\nVodMigrateP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_VODCLOUDMIGRATEJOBSOURCEINFO = DESCRIPTOR.message_types_by_name['VodCloudMigrateJobSourceInfo']\n_VODSETCLOUDMIGRATEJOBRESULT = DESCRIPTOR.message_types_by_name['VodSetCloudMigrateJobResult']\n_VODGETCLOUDMIGRATEJOBRESULT = DESCRIPTOR.message_types_by_name['VodGetCloudMigrateJobResult']\nVodCloudMigrateJobSourceInfo = _reflection.GeneratedProtocolMessageType('VodCloudMigrateJobSourceInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODCLOUDMIGRATEJOBSOURCEINFO,\n  '__module__' : 'volcengine.vod.business.vod_migrate_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCloudMigrateJobSourceInfo)\n  })\n_sym_db.RegisterMessage(VodCloudMigrateJobSourceInfo)\n\nVodSetCloudMigrateJobResult = _reflection.GeneratedProtocolMessageType('VodSetCloudMigrateJobResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODSETCLOUDMIGRATEJOBRESULT,\n  '__module__' : 'volcengine.vod.business.vod_migrate_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodSetCloudMigrateJobResult)\n  })\n_sym_db.RegisterMessage(VodSetCloudMigrateJobResult)\n\nVodGetCloudMigrateJobResult = _reflection.GeneratedProtocolMessageType('VodGetCloudMigrateJobResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETCLOUDMIGRATEJOBRESULT,\n  '__module__' : 'volcengine.vod.business.vod_migrate_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetCloudMigrateJobResult)\n  })\n_sym_db.RegisterMessage(VodGetCloudMigrateJobResult)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.vod.model.businessB\\nVodMigrateP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _VODCLOUDMIGRATEJOBSOURCEINFO._serialized_start=78\n  _VODCLOUDMIGRATEJOBSOURCEINFO._serialized_end=207\n  _VODSETCLOUDMIGRATEJOBRESULT._serialized_start=209\n  _VODSETCLOUDMIGRATEJOBRESULT._serialized_end=253\n  _VODGETCLOUDMIGRATEJOBRESULT._serialized_start=256\n  _VODGETCLOUDMIGRATEJOBRESULT._serialized_end=410\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/vod/models/business/vod_object_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/business/vod_object.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n(volcengine/vod/business/vod_object.proto\\x12\\x1eVolcengine.Vod.Models.Business\\\"\\x80\\x01\\n\\x1fVodSubmitBlockObjectTasksResult\\x12\\x11\\n\\tOperation\\x18\\x01 \\x01(\\t\\x12J\\n\\x10OperateFileNames\\x18\\x02 \\x01(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.OperateFileNames\\\"\\xa9\\x01\\n\\x10OperateFileNames\\x12J\\n\\x10SuccessFileNames\\x18\\x01 \\x03(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.FileNameTaskInfo\\x12I\\n\\x0f\\x46\\x61iledFileNames\\x18\\x02 \\x03(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.FileNameTaskInfo\\\"E\\n\\x10\\x46ileNameTaskInfo\\x12\\x10\\n\\x08\\x46ileName\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07Message\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06TaskId\\x18\\x03 \\x01(\\t\\\"r\\n\\x1dVodListBlockObjectTasksResult\\x12Q\\n\\x14ObjectBlockTaskInfos\\x18\\x01 \\x03(\\x0b\\x32\\x33.Volcengine.Vod.Models.Business.ObjectBlockTaskInfo\\\"\\xcb\\x01\\n\\x13ObjectBlockTaskInfo\\x12\\x0e\\n\\x06Status\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06TaskId\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileName\\x18\\x03 \\x01(\\t\\x12\\x15\\n\\rRefreshStatus\\x18\\x04 \\x01(\\t\\x12\\x11\\n\\tOperation\\x18\\x05 \\x01(\\t\\x12\\x15\\n\\rRefreshTaskId\\x18\\x06 \\x01(\\t\\x12\\x41\\n\\x0cRefreshInfos\\x18\\x07 \\x03(\\x0b\\x32+.Volcengine.Vod.Models.Business.RefreshInfo\\\";\\n\\x0bRefreshInfo\\x12\\x0b\\n\\x03Url\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07Process\\x18\\x03 \\x01(\\tB\\xcd\\x01\\n)com.volcengine.service.vod.model.businessB\\tVodObjectP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_VODSUBMITBLOCKOBJECTTASKSRESULT = DESCRIPTOR.message_types_by_name['VodSubmitBlockObjectTasksResult']\n_OPERATEFILENAMES = DESCRIPTOR.message_types_by_name['OperateFileNames']\n_FILENAMETASKINFO = DESCRIPTOR.message_types_by_name['FileNameTaskInfo']\n_VODLISTBLOCKOBJECTTASKSRESULT = DESCRIPTOR.message_types_by_name['VodListBlockObjectTasksResult']\n_OBJECTBLOCKTASKINFO = DESCRIPTOR.message_types_by_name['ObjectBlockTaskInfo']\n_REFRESHINFO = DESCRIPTOR.message_types_by_name['RefreshInfo']\nVodSubmitBlockObjectTasksResult = _reflection.GeneratedProtocolMessageType('VodSubmitBlockObjectTasksResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITBLOCKOBJECTTASKSRESULT,\n  '__module__' : 'volcengine.vod.business.vod_object_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodSubmitBlockObjectTasksResult)\n  })\n_sym_db.RegisterMessage(VodSubmitBlockObjectTasksResult)\n\nOperateFileNames = _reflection.GeneratedProtocolMessageType('OperateFileNames', (_message.Message,), {\n  'DESCRIPTOR' : _OPERATEFILENAMES,\n  '__module__' : 'volcengine.vod.business.vod_object_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.OperateFileNames)\n  })\n_sym_db.RegisterMessage(OperateFileNames)\n\nFileNameTaskInfo = _reflection.GeneratedProtocolMessageType('FileNameTaskInfo', (_message.Message,), {\n  'DESCRIPTOR' : _FILENAMETASKINFO,\n  '__module__' : 'volcengine.vod.business.vod_object_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.FileNameTaskInfo)\n  })\n_sym_db.RegisterMessage(FileNameTaskInfo)\n\nVodListBlockObjectTasksResult = _reflection.GeneratedProtocolMessageType('VodListBlockObjectTasksResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTBLOCKOBJECTTASKSRESULT,\n  '__module__' : 'volcengine.vod.business.vod_object_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodListBlockObjectTasksResult)\n  })\n_sym_db.RegisterMessage(VodListBlockObjectTasksResult)\n\nObjectBlockTaskInfo = _reflection.GeneratedProtocolMessageType('ObjectBlockTaskInfo', (_message.Message,), {\n  'DESCRIPTOR' : _OBJECTBLOCKTASKINFO,\n  '__module__' : 'volcengine.vod.business.vod_object_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.ObjectBlockTaskInfo)\n  })\n_sym_db.RegisterMessage(ObjectBlockTaskInfo)\n\nRefreshInfo = _reflection.GeneratedProtocolMessageType('RefreshInfo', (_message.Message,), {\n  'DESCRIPTOR' : _REFRESHINFO,\n  '__module__' : 'volcengine.vod.business.vod_object_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.RefreshInfo)\n  })\n_sym_db.RegisterMessage(RefreshInfo)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.vod.model.businessB\\tVodObjectP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _VODSUBMITBLOCKOBJECTTASKSRESULT._serialized_start=77\n  _VODSUBMITBLOCKOBJECTTASKSRESULT._serialized_end=205\n  _OPERATEFILENAMES._serialized_start=208\n  _OPERATEFILENAMES._serialized_end=377\n  _FILENAMETASKINFO._serialized_start=379\n  _FILENAMETASKINFO._serialized_end=448\n  _VODLISTBLOCKOBJECTTASKSRESULT._serialized_start=450\n  _VODLISTBLOCKOBJECTTASKSRESULT._serialized_end=564\n  _OBJECTBLOCKTASKINFO._serialized_start=567\n  _OBJECTBLOCKTASKINFO._serialized_end=770\n  _REFRESHINFO._serialized_start=772\n  _REFRESHINFO._serialized_end=831\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/vod/models/business/vod_play_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/business/vod_play.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n&volcengine/vod/business/vod_play.proto\\x12\\x1eVolcengine.Vod.Models.Business\\\"\\xd8\\x01\\n\\x1cVodGetOriginalPlayInfoResult\\x12\\x10\\n\\x08\\x46ileType\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x02 \\x01(\\x02\\x12\\x0c\\n\\x04Size\\x18\\x03 \\x01(\\x01\\x12\\x0e\\n\\x06Height\\x18\\x04 \\x01(\\x05\\x12\\r\\n\\x05Width\\x18\\x05 \\x01(\\x05\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x06 \\x01(\\t\\x12\\r\\n\\x05\\x43odec\\x18\\x07 \\x01(\\t\\x12\\x0f\\n\\x07\\x42itrate\\x18\\x08 \\x01(\\x05\\x12\\x0b\\n\\x03Md5\\x18\\t \\x01(\\t\\x12\\x13\\n\\x0bMainPlayUrl\\x18\\n \\x01(\\t\\x12\\x15\\n\\rBackupPlayUrl\\x18\\x0b \\x01(\\t\\\"g\\n\\x19VodPrivateDrmPlayAuthInfo\\x12\\x12\\n\\nPlayAuthId\\x18\\x01 \\x01(\\t\\x12\\x17\\n\\x0fPlayAuthContent\\x18\\x02 \\x01(\\t\\x12\\x1d\\n\\x15PlayAuthContentFormat\\x18\\x03 \\x01(\\t\\\"u\\n\\x1eVodGetPrivateDrmPlayAuthResult\\x12S\\n\\x10PlayAuthInfoList\\x18\\x01 \\x03(\\x0b\\x32\\x39.Volcengine.Vod.Models.Business.VodPrivateDrmPlayAuthInfo\\\"V\\n\\x1cVodGetHlsDecryptionKeyResult\\x12\\x11\\n\\tSecretKey\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08IsBase64\\x18\\x02 \\x01(\\x08\\x12\\x11\\n\\tKeyFormat\\x18\\x03 \\x01(\\t\\\"t\\n!VodPlayInfoWithLiveTimeShiftScene\\x12\\x10\\n\\x08StoreUri\\x18\\x01 \\x01(\\t\\x12\\x13\\n\\x0bMainPlayUrl\\x18\\x02 \\x01(\\t\\x12\\x15\\n\\rBackupPlayUrl\\x18\\x03 \\x01(\\t\\x12\\x11\\n\\tUrlExpire\\x18\\x04 \\x01(\\x01\\\"\\x85\\x01\\n*VodGetPlayInfoWithLiveTimeShiftSceneResult\\x12W\\n\\x0cPlayInfoList\\x18\\x01 \\x03(\\x0b\\x32\\x41.Volcengine.Vod.Models.Business.VodPlayInfoWithLiveTimeShiftScene\\\"a\\n\\x1bVodDescribeDrmDataKeyResult\\x12\\x11\\n\\tSecretKey\\x18\\x01 \\x01(\\t\\x12\\n\\n\\x02\\x41k\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08IsBase64\\x18\\x03 \\x01(\\x08\\x12\\x11\\n\\tKeyFormat\\x18\\x04 \\x01(\\t\\\"e\\n\\x1fVodCreateHlsDecryptionKeyResult\\x12\\x11\\n\\tSecretKey\\x18\\x01 \\x01(\\t\\x12\\n\\n\\x02\\x41k\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08IsBase64\\x18\\x03 \\x01(\\x08\\x12\\x11\\n\\tKeyFormat\\x18\\x04 \\x01(\\tB\\xcb\\x01\\n)com.volcengine.service.vod.model.businessB\\x07VodPlayP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_VODGETORIGINALPLAYINFORESULT = DESCRIPTOR.message_types_by_name['VodGetOriginalPlayInfoResult']\n_VODPRIVATEDRMPLAYAUTHINFO = DESCRIPTOR.message_types_by_name['VodPrivateDrmPlayAuthInfo']\n_VODGETPRIVATEDRMPLAYAUTHRESULT = DESCRIPTOR.message_types_by_name['VodGetPrivateDrmPlayAuthResult']\n_VODGETHLSDECRYPTIONKEYRESULT = DESCRIPTOR.message_types_by_name['VodGetHlsDecryptionKeyResult']\n_VODPLAYINFOWITHLIVETIMESHIFTSCENE = DESCRIPTOR.message_types_by_name['VodPlayInfoWithLiveTimeShiftScene']\n_VODGETPLAYINFOWITHLIVETIMESHIFTSCENERESULT = DESCRIPTOR.message_types_by_name['VodGetPlayInfoWithLiveTimeShiftSceneResult']\n_VODDESCRIBEDRMDATAKEYRESULT = DESCRIPTOR.message_types_by_name['VodDescribeDrmDataKeyResult']\n_VODCREATEHLSDECRYPTIONKEYRESULT = DESCRIPTOR.message_types_by_name['VodCreateHlsDecryptionKeyResult']\nVodGetOriginalPlayInfoResult = _reflection.GeneratedProtocolMessageType('VodGetOriginalPlayInfoResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETORIGINALPLAYINFORESULT,\n  '__module__' : 'volcengine.vod.business.vod_play_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetOriginalPlayInfoResult)\n  })\n_sym_db.RegisterMessage(VodGetOriginalPlayInfoResult)\n\nVodPrivateDrmPlayAuthInfo = _reflection.GeneratedProtocolMessageType('VodPrivateDrmPlayAuthInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODPRIVATEDRMPLAYAUTHINFO,\n  '__module__' : 'volcengine.vod.business.vod_play_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodPrivateDrmPlayAuthInfo)\n  })\n_sym_db.RegisterMessage(VodPrivateDrmPlayAuthInfo)\n\nVodGetPrivateDrmPlayAuthResult = _reflection.GeneratedProtocolMessageType('VodGetPrivateDrmPlayAuthResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETPRIVATEDRMPLAYAUTHRESULT,\n  '__module__' : 'volcengine.vod.business.vod_play_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetPrivateDrmPlayAuthResult)\n  })\n_sym_db.RegisterMessage(VodGetPrivateDrmPlayAuthResult)\n\nVodGetHlsDecryptionKeyResult = _reflection.GeneratedProtocolMessageType('VodGetHlsDecryptionKeyResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETHLSDECRYPTIONKEYRESULT,\n  '__module__' : 'volcengine.vod.business.vod_play_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetHlsDecryptionKeyResult)\n  })\n_sym_db.RegisterMessage(VodGetHlsDecryptionKeyResult)\n\nVodPlayInfoWithLiveTimeShiftScene = _reflection.GeneratedProtocolMessageType('VodPlayInfoWithLiveTimeShiftScene', (_message.Message,), {\n  'DESCRIPTOR' : _VODPLAYINFOWITHLIVETIMESHIFTSCENE,\n  '__module__' : 'volcengine.vod.business.vod_play_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodPlayInfoWithLiveTimeShiftScene)\n  })\n_sym_db.RegisterMessage(VodPlayInfoWithLiveTimeShiftScene)\n\nVodGetPlayInfoWithLiveTimeShiftSceneResult = _reflection.GeneratedProtocolMessageType('VodGetPlayInfoWithLiveTimeShiftSceneResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETPLAYINFOWITHLIVETIMESHIFTSCENERESULT,\n  '__module__' : 'volcengine.vod.business.vod_play_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetPlayInfoWithLiveTimeShiftSceneResult)\n  })\n_sym_db.RegisterMessage(VodGetPlayInfoWithLiveTimeShiftSceneResult)\n\nVodDescribeDrmDataKeyResult = _reflection.GeneratedProtocolMessageType('VodDescribeDrmDataKeyResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEDRMDATAKEYRESULT,\n  '__module__' : 'volcengine.vod.business.vod_play_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDescribeDrmDataKeyResult)\n  })\n_sym_db.RegisterMessage(VodDescribeDrmDataKeyResult)\n\nVodCreateHlsDecryptionKeyResult = _reflection.GeneratedProtocolMessageType('VodCreateHlsDecryptionKeyResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEHLSDECRYPTIONKEYRESULT,\n  '__module__' : 'volcengine.vod.business.vod_play_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCreateHlsDecryptionKeyResult)\n  })\n_sym_db.RegisterMessage(VodCreateHlsDecryptionKeyResult)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.vod.model.businessB\\007VodPlayP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _VODGETORIGINALPLAYINFORESULT._serialized_start=75\n  _VODGETORIGINALPLAYINFORESULT._serialized_end=291\n  _VODPRIVATEDRMPLAYAUTHINFO._serialized_start=293\n  _VODPRIVATEDRMPLAYAUTHINFO._serialized_end=396\n  _VODGETPRIVATEDRMPLAYAUTHRESULT._serialized_start=398\n  _VODGETPRIVATEDRMPLAYAUTHRESULT._serialized_end=515\n  _VODGETHLSDECRYPTIONKEYRESULT._serialized_start=517\n  _VODGETHLSDECRYPTIONKEYRESULT._serialized_end=603\n  _VODPLAYINFOWITHLIVETIMESHIFTSCENE._serialized_start=605\n  _VODPLAYINFOWITHLIVETIMESHIFTSCENE._serialized_end=721\n  _VODGETPLAYINFOWITHLIVETIMESHIFTSCENERESULT._serialized_start=724\n  _VODGETPLAYINFOWITHLIVETIMESHIFTSCENERESULT._serialized_end=857\n  _VODDESCRIBEDRMDATAKEYRESULT._serialized_start=859\n  _VODDESCRIBEDRMDATAKEYRESULT._serialized_end=956\n  _VODCREATEHLSDECRYPTIONKEYRESULT._serialized_start=958\n  _VODCREATEHLSDECRYPTIONKEYRESULT._serialized_end=1059\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/vod/models/business/vod_project_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/business/vod_project.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n)volcengine/vod/business/vod_project.proto\\x12\\x1eVolcengine.Vod.Models.Business\\\"\\\\\\n\\x15VodListProjectsResult\\x12\\x43\\n\\x0bProjectList\\x18\\x01 \\x03(\\x0b\\x32..Volcengine.Vod.Models.Business.VodProjectInfo\\\":\\n\\x0eVodProjectInfo\\x12\\x13\\n\\x0bProjectName\\x18\\x01 \\x01(\\t\\x12\\x13\\n\\x0b\\x44isplayName\\x18\\x02 \\x01(\\tB\\xce\\x01\\n)com.volcengine.service.vod.model.businessB\\nVodProjectP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_VODLISTPROJECTSRESULT = DESCRIPTOR.message_types_by_name['VodListProjectsResult']\n_VODPROJECTINFO = DESCRIPTOR.message_types_by_name['VodProjectInfo']\nVodListProjectsResult = _reflection.GeneratedProtocolMessageType('VodListProjectsResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTPROJECTSRESULT,\n  '__module__' : 'volcengine.vod.business.vod_project_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodListProjectsResult)\n  })\n_sym_db.RegisterMessage(VodListProjectsResult)\n\nVodProjectInfo = _reflection.GeneratedProtocolMessageType('VodProjectInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODPROJECTINFO,\n  '__module__' : 'volcengine.vod.business.vod_project_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodProjectInfo)\n  })\n_sym_db.RegisterMessage(VodProjectInfo)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.vod.model.businessB\\nVodProjectP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _VODLISTPROJECTSRESULT._serialized_start=77\n  _VODLISTPROJECTSRESULT._serialized_end=169\n  _VODPROJECTINFO._serialized_start=171\n  _VODPROJECTINFO._serialized_end=229\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/vod/models/business/vod_reporter_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/business/vod_reporter.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n*volcengine/vod/business/vod_reporter.proto\\x12\\x1eVolcengine.Vod.Models.Business\\\"X\\n\\x14VodReportEventResult\\x12@\\n\\x04\\x44\\x61ta\\x18\\x01 \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.VodReportEventData\\\"\\x14\\n\\x12VodReportEventDataB\\xcf\\x01\\n)com.volcengine.service.vod.model.businessB\\x0bVodReporterP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_VODREPORTEVENTRESULT = DESCRIPTOR.message_types_by_name['VodReportEventResult']\n_VODREPORTEVENTDATA = DESCRIPTOR.message_types_by_name['VodReportEventData']\nVodReportEventResult = _reflection.GeneratedProtocolMessageType('VodReportEventResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODREPORTEVENTRESULT,\n  '__module__' : 'volcengine.vod.business.vod_reporter_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodReportEventResult)\n  })\n_sym_db.RegisterMessage(VodReportEventResult)\n\nVodReportEventData = _reflection.GeneratedProtocolMessageType('VodReportEventData', (_message.Message,), {\n  'DESCRIPTOR' : _VODREPORTEVENTDATA,\n  '__module__' : 'volcengine.vod.business.vod_reporter_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodReportEventData)\n  })\n_sym_db.RegisterMessage(VodReportEventData)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.vod.model.businessB\\013VodReporterP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _VODREPORTEVENTRESULT._serialized_start=78\n  _VODREPORTEVENTRESULT._serialized_end=166\n  _VODREPORTEVENTDATA._serialized_start=168\n  _VODREPORTEVENTDATA._serialized_end=188\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/vod/models/business/vod_smart_strategy_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/business/vod_smart_strategy.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf.internal import enum_type_wrapper\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\nfrom volcengine.vod.models.business import vod_common_pb2 as volcengine_dot_vod_dot_business_dot_vod__common__pb2\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n0volcengine/vod/business/vod_smart_strategy.proto\\x12\\x1eVolcengine.Vod.Models.Business\\x1a(volcengine/vod/business/vod_common.proto\\\"\\xbb\\x02\\n%VodGetSmartStrategyLitePlayInfoResult\\x12V\\n\\nStreamType\\x18\\x01 \\x01(\\x0e\\x32\\x42.Volcengine.Vod.Models.Business.VodSmartStrategyResponseStreamType\\x12X\\n\\x0f\\x44\\x61taStoreStatus\\x18\\x02 \\x01(\\x0e\\x32?.Volcengine.Vod.Models.Business.VodSmartStrategyDataStoreStatus\\x12G\\n\\rPlayInfoModel\\x18\\x03 \\x01(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.VodPlayInfoModel\\x12\\x17\\n\\x0fOriginalPlayUrl\\x18\\x04 \\x01(\\t*\\x83\\x02\\n\\\"VodSmartStrategyResponseStreamType\\x12/\\n+UndefinedVodSmartStrategyResponseStreamType\\x10\\x00\\x12\\x34\\n0OriginalStreamVodSmartStrategyResponseStreamType\\x10\\x01\\x12:\\n6StrategyEncodeStreamVodSmartStrategyResponseStreamType\\x10\\x02\\x12:\\n6FallbackEncodeStreamVodSmartStrategyResponseStreamType\\x10\\x03*\\xe6\\x01\\n\\x1fVodSmartStrategyDataStoreStatus\\x12,\\n(UndefinedVodSmartStrategyDataStoreStatus\\x10\\x00\\x12+\\n\\'NotExistVodSmartStrategyDataStoreStatus\\x10\\x01\\x12\\x34\\n0HasOriginalStreamVodSmartStrategyDataStoreStatus\\x10\\x02\\x12\\x32\\n.HasEncodeStreamVodSmartStrategyDataStoreStatus\\x10\\x03\\x42\\xd4\\x01\\n)com.volcengine.service.vod.model.businessB\\x10VodSmartStrategyP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n_VODSMARTSTRATEGYRESPONSESTREAMTYPE = DESCRIPTOR.enum_types_by_name['VodSmartStrategyResponseStreamType']\nVodSmartStrategyResponseStreamType = enum_type_wrapper.EnumTypeWrapper(_VODSMARTSTRATEGYRESPONSESTREAMTYPE)\n_VODSMARTSTRATEGYDATASTORESTATUS = DESCRIPTOR.enum_types_by_name['VodSmartStrategyDataStoreStatus']\nVodSmartStrategyDataStoreStatus = enum_type_wrapper.EnumTypeWrapper(_VODSMARTSTRATEGYDATASTORESTATUS)\nUndefinedVodSmartStrategyResponseStreamType = 0\nOriginalStreamVodSmartStrategyResponseStreamType = 1\nStrategyEncodeStreamVodSmartStrategyResponseStreamType = 2\nFallbackEncodeStreamVodSmartStrategyResponseStreamType = 3\nUndefinedVodSmartStrategyDataStoreStatus = 0\nNotExistVodSmartStrategyDataStoreStatus = 1\nHasOriginalStreamVodSmartStrategyDataStoreStatus = 2\nHasEncodeStreamVodSmartStrategyDataStoreStatus = 3\n\n\n_VODGETSMARTSTRATEGYLITEPLAYINFORESULT = DESCRIPTOR.message_types_by_name['VodGetSmartStrategyLitePlayInfoResult']\nVodGetSmartStrategyLitePlayInfoResult = _reflection.GeneratedProtocolMessageType('VodGetSmartStrategyLitePlayInfoResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETSMARTSTRATEGYLITEPLAYINFORESULT,\n  '__module__' : 'volcengine.vod.business.vod_smart_strategy_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetSmartStrategyLitePlayInfoResult)\n  })\n_sym_db.RegisterMessage(VodGetSmartStrategyLitePlayInfoResult)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.vod.model.businessB\\020VodSmartStrategyP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _VODSMARTSTRATEGYRESPONSESTREAMTYPE._serialized_start=445\n  _VODSMARTSTRATEGYRESPONSESTREAMTYPE._serialized_end=704\n  _VODSMARTSTRATEGYDATASTORESTATUS._serialized_start=707\n  _VODSMARTSTRATEGYDATASTORESTATUS._serialized_end=937\n  _VODGETSMARTSTRATEGYLITEPLAYINFORESULT._serialized_start=127\n  _VODGETSMARTSTRATEGYLITEPLAYINFORESULT._serialized_end=442\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/vod/models/business/vod_space_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/business/vod_space.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf.internal import enum_type_wrapper\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\'volcengine/vod/business/vod_space.proto\\x12\\x1eVolcengine.Vod.Models.Business\\\"\\xe7\\x01\\n\\x0cVodSpaceInfo\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06Region\\x18\\x03 \\x01(\\t\\x12\\x13\\n\\x0bProjectName\\x18\\x04 \\x01(\\t\\x12\\x12\\n\\nBucketName\\x18\\x05 \\x01(\\t\\x12\\x14\\n\\x0c\\x42ucketStatus\\x18\\x06 \\x01(\\t\\x12\\x13\\n\\x0b\\x44\\x65scription\\x18\\x07 \\x01(\\t\\x12\\x10\\n\\x08UserName\\x18\\x08 \\x01(\\t\\x12\\x11\\n\\tCreatedAt\\x18\\t \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\n \\x01(\\t\\x12\\x16\\n\\x0eMediaSyncLevel\\x18\\x0b \\x01(\\t\\x12\\x15\\n\\rCanUseArchive\\x18\\x0c \\x01(\\x08\\\"/\\n\\x0eVodStorageData\\x12\\x0c\\n\\x04Time\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07Storage\\x18\\x02 \\x01(\\x03\\\"\\xf8\\x01\\n$VodDescribeVodSpaceStorageDataResult\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x03(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x04 \\x01(\\x05\\x12\\x0c\\n\\x04Type\\x18\\x05 \\x01(\\t\\x12\\x12\\n\\nRegionList\\x18\\x06 \\x03(\\t\\x12\\x19\\n\\x11LatestStorageData\\x18\\x07 \\x01(\\x03\\x12G\\n\\x0fStorageDataList\\x18\\x08 \\x03(\\x0b\\x32..Volcengine.Vod.Models.Business.VodStorageData\\\"\\xe6\\x03\\n\\x14VodUploadSpaceConfig\\x12\\x12\\n\\nAutoPoster\\x18\\x01 \\x01(\\t\\x12N\\n\\x12\\x43ustomPosterConfig\\x18\\x02 \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.CustomPosterConfig\\x12\\x15\\n\\rGetPosterMode\\x18\\x03 \\x01(\\t\\x12\\x1b\\n\\x13\\x41utoPosterCandidate\\x18\\x04 \\x01(\\t\\x12\\x15\\n\\rAutoTranscode\\x18\\x05 \\x01(\\t\\x12H\\n\\x0fTranscodeConfig\\x18\\x06 \\x01(\\x0b\\x32/.Volcengine.Vod.Models.Business.TranscodeConfig\\x12\\x1a\\n\\x12\\x41utoSetVideoStatus\\x18\\x07 \\x01(\\t\\x12\\x17\\n\\x0fUploadOverwrite\\x18\\x08 \\x01(\\t\\x12\\x1d\\n\\x15\\x43\\x61llbackReturnPlayUrl\\x18\\t \\x01(\\t\\x12\\x1b\\n\\x13\\x43\\x61llbackReturnRunId\\x18\\n \\x01(\\t\\x12\\x13\\n\\x0bGetMetaMode\\x18\\x0b \\x01(\\t\\x12\\x1f\\n\\x17\\x41utoGetArchiveVideoMeta\\x18\\x0c \\x01(\\t\\x12\\x1a\\n\\x12\\x41utoGetIAVideoMeta\\x18\\r \\x01(\\t\\x12\\x12\\n\\nMetaGetMd5\\x18\\x0e \\x01(\\t\\\"H\\n\\x12\\x43ustomPosterConfig\\x12\\x1c\\n\\x14\\x43ustomTemplateStatus\\x18\\x01 \\x01(\\t\\x12\\x14\\n\\x0cPathTemplate\\x18\\x02 \\x01(\\t\\\"K\\n\\x0fTranscodeConfig\\x12\\x1d\\n\\x15\\x44\\x65\\x66\\x61ultTemplateStatus\\x18\\x01 \\x01(\\t\\x12\\x19\\n\\x11\\x44\\x65\\x66\\x61ultTemplateId\\x18\\x02 \\x01(\\t*\\xa3\\x01\\n\\x17VodSpaceUploadConfigKey\\x12$\\n UndefinedVodSpaceUploadConfigKey\\x10\\x00\\x12/\\n+CustomUploadFilePathVodSpaceUploadConfigKey\\x10\\x01\\x12\\x31\\n-AutoPublishAfterUploadVodSpaceUploadConfigKey\\x10\\x02\\x42\\xcc\\x01\\n)com.volcengine.service.vod.model.businessB\\x08VodSpaceP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n_VODSPACEUPLOADCONFIGKEY = DESCRIPTOR.enum_types_by_name['VodSpaceUploadConfigKey']\nVodSpaceUploadConfigKey = enum_type_wrapper.EnumTypeWrapper(_VODSPACEUPLOADCONFIGKEY)\nUndefinedVodSpaceUploadConfigKey = 0\nCustomUploadFilePathVodSpaceUploadConfigKey = 1\nAutoPublishAfterUploadVodSpaceUploadConfigKey = 2\n\n\n_VODSPACEINFO = DESCRIPTOR.message_types_by_name['VodSpaceInfo']\n_VODSTORAGEDATA = DESCRIPTOR.message_types_by_name['VodStorageData']\n_VODDESCRIBEVODSPACESTORAGEDATARESULT = DESCRIPTOR.message_types_by_name['VodDescribeVodSpaceStorageDataResult']\n_VODUPLOADSPACECONFIG = DESCRIPTOR.message_types_by_name['VodUploadSpaceConfig']\n_CUSTOMPOSTERCONFIG = DESCRIPTOR.message_types_by_name['CustomPosterConfig']\n_TRANSCODECONFIG = DESCRIPTOR.message_types_by_name['TranscodeConfig']\nVodSpaceInfo = _reflection.GeneratedProtocolMessageType('VodSpaceInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODSPACEINFO,\n  '__module__' : 'volcengine.vod.business.vod_space_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodSpaceInfo)\n  })\n_sym_db.RegisterMessage(VodSpaceInfo)\n\nVodStorageData = _reflection.GeneratedProtocolMessageType('VodStorageData', (_message.Message,), {\n  'DESCRIPTOR' : _VODSTORAGEDATA,\n  '__module__' : 'volcengine.vod.business.vod_space_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodStorageData)\n  })\n_sym_db.RegisterMessage(VodStorageData)\n\nVodDescribeVodSpaceStorageDataResult = _reflection.GeneratedProtocolMessageType('VodDescribeVodSpaceStorageDataResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEVODSPACESTORAGEDATARESULT,\n  '__module__' : 'volcengine.vod.business.vod_space_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodDescribeVodSpaceStorageDataResult)\n  })\n_sym_db.RegisterMessage(VodDescribeVodSpaceStorageDataResult)\n\nVodUploadSpaceConfig = _reflection.GeneratedProtocolMessageType('VodUploadSpaceConfig', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPLOADSPACECONFIG,\n  '__module__' : 'volcengine.vod.business.vod_space_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodUploadSpaceConfig)\n  })\n_sym_db.RegisterMessage(VodUploadSpaceConfig)\n\nCustomPosterConfig = _reflection.GeneratedProtocolMessageType('CustomPosterConfig', (_message.Message,), {\n  'DESCRIPTOR' : _CUSTOMPOSTERCONFIG,\n  '__module__' : 'volcengine.vod.business.vod_space_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CustomPosterConfig)\n  })\n_sym_db.RegisterMessage(CustomPosterConfig)\n\nTranscodeConfig = _reflection.GeneratedProtocolMessageType('TranscodeConfig', (_message.Message,), {\n  'DESCRIPTOR' : _TRANSCODECONFIG,\n  '__module__' : 'volcengine.vod.business.vod_space_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.TranscodeConfig)\n  })\n_sym_db.RegisterMessage(TranscodeConfig)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.vod.model.businessB\\010VodSpaceP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _VODSPACEUPLOADCONFIGKEY._serialized_start=1250\n  _VODSPACEUPLOADCONFIGKEY._serialized_end=1413\n  _VODSPACEINFO._serialized_start=76\n  _VODSPACEINFO._serialized_end=307\n  _VODSTORAGEDATA._serialized_start=309\n  _VODSTORAGEDATA._serialized_end=356\n  _VODDESCRIBEVODSPACESTORAGEDATARESULT._serialized_start=359\n  _VODDESCRIBEVODSPACESTORAGEDATARESULT._serialized_end=607\n  _VODUPLOADSPACECONFIG._serialized_start=610\n  _VODUPLOADSPACECONFIG._serialized_end=1096\n  _CUSTOMPOSTERCONFIG._serialized_start=1098\n  _CUSTOMPOSTERCONFIG._serialized_end=1170\n  _TRANSCODECONFIG._serialized_start=1172\n  _TRANSCODECONFIG._serialized_end=1247\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/vod/models/business/vod_trade_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/business/vod_trade.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n\\'volcengine/vod/business/vod_trade.proto\\x12\\x1eVolcengine.Vod.Models.Business\\\"\\x9b\\x01\\n\\x1cTradeConfigurationInfoResult\\x12;\\n\\x05\\x42\\x61sic\\x18\\x01 \\x03(\\x0b\\x32,.Volcengine.Vod.Models.Business.TradeProduct\\x12>\\n\\x08\\x41\\x64\\x64ition\\x18\\x02 \\x03(\\x0b\\x32,.Volcengine.Vod.Models.Business.TradeProduct\\\"\\xbe\\x02\\n\\x0cTradeProduct\\x12\\x15\\n\\rConfiguration\\x18\\x01 \\x01(\\t\\x12\\x19\\n\\x11\\x43onfigurationName\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07Product\\x18\\x03 \\x01(\\t\\x12\\x18\\n\\x10SettlementPeriod\\x18\\x04 \\x01(\\x05\\x12\\x11\\n\\tCanPrePay\\x18\\x05 \\x01(\\x05\\x12?\\n\\x0b\\x43hargeItems\\x18\\x06 \\x03(\\x0b\\x32*.Volcengine.Vod.Models.Business.ChargeItem\\x12\\x12\\n\\nInstanceID\\x18\\x07 \\x01(\\t\\x12\\x16\\n\\x0eInstanceStatus\\x18\\x08 \\x01(\\x05\\x12\\x1a\\n\\x12InstanceCreateTime\\x18\\t \\x01(\\t\\x12\\x1e\\n\\x16NextEventEffectiveTime\\x18\\n \\x01(\\t\\x12\\x15\\n\\rNextEventType\\x18\\x0b \\x01(\\t\\\"3\\n\\nChargeItem\\x12\\x16\\n\\x0e\\x43hargeItemCode\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05Price\\x18\\x02 \\x01(\\x01\\x42\\xcc\\x01\\n)com.volcengine.service.vod.model.businessB\\x08VodTradeP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_TRADECONFIGURATIONINFORESULT = DESCRIPTOR.message_types_by_name['TradeConfigurationInfoResult']\n_TRADEPRODUCT = DESCRIPTOR.message_types_by_name['TradeProduct']\n_CHARGEITEM = DESCRIPTOR.message_types_by_name['ChargeItem']\nTradeConfigurationInfoResult = _reflection.GeneratedProtocolMessageType('TradeConfigurationInfoResult', (_message.Message,), {\n  'DESCRIPTOR' : _TRADECONFIGURATIONINFORESULT,\n  '__module__' : 'volcengine.vod.business.vod_trade_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.TradeConfigurationInfoResult)\n  })\n_sym_db.RegisterMessage(TradeConfigurationInfoResult)\n\nTradeProduct = _reflection.GeneratedProtocolMessageType('TradeProduct', (_message.Message,), {\n  'DESCRIPTOR' : _TRADEPRODUCT,\n  '__module__' : 'volcengine.vod.business.vod_trade_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.TradeProduct)\n  })\n_sym_db.RegisterMessage(TradeProduct)\n\nChargeItem = _reflection.GeneratedProtocolMessageType('ChargeItem', (_message.Message,), {\n  'DESCRIPTOR' : _CHARGEITEM,\n  '__module__' : 'volcengine.vod.business.vod_trade_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.ChargeItem)\n  })\n_sym_db.RegisterMessage(ChargeItem)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.vod.model.businessB\\010VodTradeP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _TRADECONFIGURATIONINFORESULT._serialized_start=76\n  _TRADECONFIGURATIONINFORESULT._serialized_end=231\n  _TRADEPRODUCT._serialized_start=234\n  _TRADEPRODUCT._serialized_end=552\n  _CHARGEITEM._serialized_start=554\n  _CHARGEITEM._serialized_end=605\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/vod/models/business/vod_upload_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/business/vod_upload.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf.internal import enum_type_wrapper\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\nfrom volcengine.vod.models.business import vod_common_pb2 as volcengine_dot_vod_dot_business_dot_vod__common__pb2\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n(volcengine/vod/business/vod_upload.proto\\x12\\x1eVolcengine.Vod.Models.Business\\x1a(volcengine/vod/business/vod_common.proto\\\"\\xad\\x05\\n\\x12VodUrlUploadURLSet\\x12\\x11\\n\\tSourceUrl\\x18\\x01 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x02 \\x01(\\t\\x12\\x0b\\n\\x03Md5\\x18\\x03 \\x01(\\t\\x12\\x12\\n\\nTemplateId\\x18\\x04 \\x01(\\t\\x12\\r\\n\\x05Title\\x18\\x05 \\x01(\\t\\x12\\x13\\n\\x0b\\x44\\x65scription\\x18\\x06 \\x01(\\t\\x12\\x0c\\n\\x04Tags\\x18\\x07 \\x01(\\t\\x12\\x10\\n\\x08\\x43\\x61tegory\\x18\\x08 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileName\\x18\\t \\x01(\\t\\x12\\x18\\n\\x10\\x43lassificationId\\x18\\n \\x01(\\x03\\x12\\x14\\n\\x0cStorageClass\\x18\\x0b \\x01(\\x05\\x12\\x15\\n\\rFileExtension\\x18\\x0c \\x01(\\t\\x12\\x1e\\n\\x16UrlEncryptionAlgorithm\\x18\\r \\x01(\\t\\x12\\x19\\n\\x11\\x45nableLowPriority\\x18\\x0e \\x01(\\x08\\x12\\x62\\n\\x10\\x43ustomURLHeaders\\x18\\x0f \\x03(\\x0b\\x32H.Volcengine.Vod.Models.Business.VodUrlUploadURLSet.CustomURLHeadersEntry\\x12\\x44\\n\\tTemplates\\x18\\x10 \\x03(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.VodUploadTemplate\\x12\\x10\\n\\x08\\x46ileType\\x18\\x11 \\x01(\\t\\x12>\\n\\x08ImageSet\\x18\\x12 \\x03(\\x0b\\x32,.Volcengine.Vod.Models.Business.VodImageFile\\x12@\\n\\nExecutions\\x18\\x13 \\x03(\\x0b\\x32,.Volcengine.Vod.Models.Business.VodExecution\\x1a\\x37\\n\\x15\\x43ustomURLHeadersEntry\\x12\\x0b\\n\\x03key\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05value\\x18\\x02 \\x01(\\t:\\x02\\x38\\x01\\\"-\\n\\x0cVodImageFile\\x12\\x0b\\n\\x03Url\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileName\\x18\\x02 \\x01(\\t\\\"\\x9e\\x01\\n\\x0cVodExecution\\x12H\\n\\tOperation\\x18\\x01 \\x01(\\x0b\\x32\\x35.Volcengine.Vod.Models.Business.VodExecutionOperation\\x12\\x44\\n\\x07\\x43ontrol\\x18\\x02 \\x01(\\x0b\\x32\\x33.Volcengine.Vod.Models.Business.VodExecutionControl\\\"n\\n\\x15VodExecutionOperation\\x12\\x0c\\n\\x04Type\\x18\\x01 \\x01(\\t\\x12G\\n\\x04Task\\x18\\x02 \\x01(\\x0b\\x32\\x39.Volcengine.Vod.Models.Business.VodExecutionOperationTask\\\"\\xbf\\x01\\n\\x19VodExecutionOperationTask\\x12\\x0c\\n\\x04Type\\x18\\x01 \\x01(\\t\\x12I\\n\\x03Ocr\\x18\\x02 \\x01(\\x0b\\x32<.Volcengine.Vod.Models.Business.VodExecutionOperationTaskOcr\\x12I\\n\\x03\\x41sr\\x18\\x03 \\x01(\\x0b\\x32<.Volcengine.Vod.Models.Business.VodExecutionOperationTaskAsr\\\"B\\n\\x1cVodExecutionOperationTaskOcr\\x12\\x14\\n\\x0cWithImageSet\\x18\\x01 \\x01(\\x08\\x12\\x0c\\n\\x04Mode\\x18\\x02 \\x01(\\t\\\"}\\n\\x1cVodExecutionOperationTaskAsr\\x12\\x0c\\n\\x04Type\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08Language\\x18\\x02 \\x01(\\t\\x12\\x17\\n\\x0fWithSpeakerInfo\\x18\\x03 \\x01(\\t\\x12\\x16\\n\\x0eWithConfidence\\x18\\x04 \\x01(\\t\\x12\\x0c\\n\\x04Mode\\x18\\x05 \\x01(\\t\\\"@\\n\\x13VodExecutionControl\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x01 \\x01(\\t\\x12\\x13\\n\\x0b\\x43lientToken\\x18\\x02 \\x01(\\t\\\"M\\n\\x12VodUrlResponseData\\x12\\x37\\n\\x04\\x44\\x61ta\\x18\\x01 \\x03(\\x0b\\x32).Volcengine.Vod.Models.Business.ValuePair\\\"@\\n\\tValuePair\\x12\\r\\n\\x05JobId\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tSourceUrl\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tImageUrls\\x18\\x03 \\x03(\\t\\\"R\\n\\x0cVodQueryData\\x12\\x42\\n\\x04\\x44\\x61ta\\x18\\x01 \\x01(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.VodQueryUploadResult\\\"p\\n\\x14VodQueryUploadResult\\x12@\\n\\rMediaInfoList\\x18\\x01 \\x03(\\x0b\\x32).Volcengine.Vod.Models.Business.VodURLSet\\x12\\x16\\n\\x0eNotExistJobIds\\x18\\x02 \\x03(\\t\\\"^\\n\\rVodCommitData\\x12M\\n\\x04\\x44\\x61ta\\x18\\x01 \\x01(\\x0b\\x32?.Volcengine.Vod.Models.Business.VodCommitUploadInfoResponseData\\\"\\xa7\\x01\\n\\x1fVodCommitUploadInfoResponseData\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x41\\n\\nSourceInfo\\x18\\x02 \\x01(\\x0b\\x32-.Volcengine.Vod.Models.Business.VodSourceInfo\\x12\\x11\\n\\tPosterUri\\x18\\x03 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x04 \\x01(\\t\\x12\\x0b\\n\\x03Mid\\x18\\x05 \\x01(\\t\\\"\\xdb\\x01\\n\\tVodURLSet\\x12\\x11\\n\\tRequestId\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05JobId\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tSourceUrl\\x18\\x03 \\x01(\\t\\x12\\r\\n\\x05State\\x18\\x04 \\x01(\\t\\x12\\x0b\\n\\x03Vid\\x18\\x05 \\x01(\\t\\x12\\x11\\n\\tSpaceName\\x18\\x06 \\x01(\\t\\x12\\x11\\n\\tAccountId\\x18\\x07 \\x01(\\t\\x12\\x41\\n\\nSourceInfo\\x18\\x08 \\x01(\\x0b\\x32-.Volcengine.Vod.Models.Business.VodSourceInfo\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\t \\x01(\\t\\\"`\\n\\x18VodApplyUploadInfoResult\\x12\\x44\\n\\x04\\x44\\x61ta\\x18\\x01 \\x01(\\x0b\\x32\\x36.Volcengine.Vod.Models.Business.VodApplyUploadInfoData\\\"\\x8f\\x02\\n\\x16VodApplyUploadInfoData\\x12G\\n\\rUploadAddress\\x18\\x01 \\x01(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.VodUploadAddress\\x12Z\\n\\x18\\x43\\x61ndidateUploadAddresses\\x18\\x02 \\x01(\\x0b\\x32\\x38.Volcengine.Vod.Models.Business.CandidateUploadAddresses\\x12P\\n\\x13VpcTosUploadAddress\\x18\\x03 \\x01(\\x0b\\x32\\x33.Volcengine.Vod.Models.Business.VpcTosUploadAddress\\\"\\xc2\\x01\\n\\x10VodUploadAddress\\x12@\\n\\nStoreInfos\\x18\\x01 \\x03(\\x0b\\x32,.Volcengine.Vod.Models.Business.VodStoreInfo\\x12\\x13\\n\\x0bUploadHosts\\x18\\x02 \\x03(\\t\\x12\\x43\\n\\x0cUploadHeader\\x18\\x03 \\x03(\\x0b\\x32-.Volcengine.Vod.Models.Business.VodHeaderPair\\x12\\x12\\n\\nSessionKey\\x18\\x04 \\x01(\\t\\\"\\x84\\x02\\n\\x18\\x43\\x61ndidateUploadAddresses\\x12J\\n\\x13MainUploadAddresses\\x18\\x01 \\x03(\\x0b\\x32-.Volcengine.Vod.Models.Business.UploadAddress\\x12L\\n\\x15\\x42\\x61\\x63kupUploadAddresses\\x18\\x02 \\x03(\\x0b\\x32-.Volcengine.Vod.Models.Business.UploadAddress\\x12N\\n\\x17\\x46\\x61llbackUploadAddresses\\x18\\x03 \\x03(\\x0b\\x32-.Volcengine.Vod.Models.Business.UploadAddress\\\".\\n\\x0cVodStoreInfo\\x12\\x10\\n\\x08StoreUri\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04\\x41uth\\x18\\x02 \\x01(\\t\\\"+\\n\\rVodHeaderPair\\x12\\x0b\\n\\x03Key\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05Value\\x18\\x02 \\x01(\\t\\\"\\xb1\\x02\\n\\x13VpcTosUploadAddress\\x12\\x12\\n\\nUploadMode\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06PutUrl\\x18\\x02 \\x01(\\t\\x12\\x46\\n\\x0ePartUploadInfo\\x18\\x03 \\x01(\\x0b\\x32..Volcengine.Vod.Models.Business.PartUploadInfo\\x12]\\n\\rPutUrlHeaders\\x18\\x04 \\x03(\\x0b\\x32\\x46.Volcengine.Vod.Models.Business.VpcTosUploadAddress.PutUrlHeadersEntry\\x12\\x19\\n\\x11QuickCompleteMode\\x18\\x05 \\x01(\\t\\x1a\\x34\\n\\x12PutUrlHeadersEntry\\x12\\x0b\\n\\x03key\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05value\\x18\\x02 \\x01(\\t:\\x02\\x38\\x01\\\"\\xef\\x01\\n\\x0ePartUploadInfo\\x12\\x10\\n\\x08PartSize\\x18\\x01 \\x01(\\x03\\x12\\x13\\n\\x0bPartPutUrls\\x18\\x02 \\x03(\\t\\x12\\x17\\n\\x0f\\x43ompletePartUrl\\x18\\x03 \\x01(\\t\\x12\\x62\\n\\x12\\x43ompleteUrlHeaders\\x18\\x04 \\x03(\\x0b\\x32\\x46.Volcengine.Vod.Models.Business.PartUploadInfo.CompleteUrlHeadersEntry\\x1a\\x39\\n\\x17\\x43ompleteUrlHeadersEntry\\x12\\x0b\\n\\x03key\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05value\\x18\\x02 \\x01(\\t:\\x02\\x38\\x01\\\"b\\n\\x19VodCommitUploadInfoResult\\x12\\x45\\n\\x04\\x44\\x61ta\\x18\\x01 \\x01(\\x0b\\x32\\x37.Volcengine.Vod.Models.Business.VodCommitUploadInfoData\\\"\\x89\\x01\\n\\x17VodCommitUploadInfoData\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tPosterUri\\x18\\x02 \\x01(\\t\\x12\\x41\\n\\nSourceInfo\\x18\\x03 \\x01(\\x0b\\x32-.Volcengine.Vod.Models.Business.VodSourceInfo\\x12\\x0b\\n\\x03Mid\\x18\\x04 \\x01(\\t\\\"\\xbc\\x03\\n\\x16VodUploadFunctionInput\\x12\\x14\\n\\x0cSnapshotTime\\x18\\x01 \\x01(\\x01\\x12\\r\\n\\x05Title\\x18\\x02 \\x01(\\t\\x12\\x0c\\n\\x04Tags\\x18\\x03 \\x01(\\t\\x12\\x13\\n\\x0b\\x44\\x65scription\\x18\\x04 \\x01(\\t\\x12\\x10\\n\\x08\\x43\\x61tegory\\x18\\x05 \\x01(\\t\\x12\\x12\\n\\nRecordType\\x18\\x06 \\x01(\\x05\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x07 \\x01(\\t\\x12\\x18\\n\\x10\\x43lassificationId\\x18\\x08 \\x01(\\x05\\x12\\x12\\n\\nTemplateId\\x18\\t \\x01(\\t\\x12\\x0b\\n\\x03Vid\\x18\\n \\x01(\\t\\x12\\x0b\\n\\x03\\x46id\\x18\\x0b \\x01(\\t\\x12\\x10\\n\\x08Language\\x18\\x0c \\x01(\\t\\x12\\x10\\n\\x08StoreUri\\x18\\r \\x01(\\t\\x12\\x0e\\n\\x06Source\\x18\\x0e \\x01(\\t\\x12\\x0b\\n\\x03Tag\\x18\\x0f \\x01(\\t\\x12\\x13\\n\\x0b\\x41utoPublish\\x18\\x10 \\x01(\\x08\\x12\\x12\\n\\nActionType\\x18\\x11 \\x01(\\t\\x12\\x16\\n\\x0eIsHlsIndexOnly\\x18\\x12 \\x01(\\x08\\x12\\x14\\n\\x0cHlsMediaSize\\x18\\x13 \\x01(\\t\\x12\\x44\\n\\tTemplates\\x18\\x14 \\x03(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.VodUploadTemplate\\\"h\\n\\x11VodUploadFunction\\x12\\x0c\\n\\x04Name\\x18\\x01 \\x01(\\t\\x12\\x45\\n\\x05Input\\x18\\x02 \\x01(\\x0b\\x32\\x36.Volcengine.Vod.Models.Business.VodUploadFunctionInput\\\"\\xc8\\x01\\n\\x15\\x43ommitUploadInfoParam\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nSessionKey\\x18\\x03 \\x01(\\t\\x12\\x44\\n\\tFunctions\\x18\\x04 \\x03(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.VodUploadFunction\\x12\\x13\\n\\x0bGetMetaMode\\x18\\x05 \\x01(\\t\\x12\\x17\\n\\x0fVodUploadSource\\x18\\x06 \\x01(\\t\\\"\\x95\\x01\\n\\x15\\x43ommitRequestBodyJson\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nSessionKey\\x18\\x02 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x03 \\x01(\\t\\x12\\x11\\n\\tFunctions\\x18\\x04 \\x01(\\t\\x12\\x13\\n\\x0bGetMetaMode\\x18\\x05 \\x01(\\t\\x12\\x17\\n\\x0fVodUploadSource\\x18\\x06 \\x01(\\t\\\"\\xb8\\x02\\n\\x14\\x41pplyUploadInfoParam\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileType\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nSessionKey\\x18\\x03 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileSize\\x18\\x04 \\x01(\\x01\\x12\\x11\\n\\tMediaType\\x18\\x05 \\x01(\\t\\x12\\x0f\\n\\x07TosKeys\\x18\\x06 \\x01(\\t\\x12\\x15\\n\\rFileExtension\\x18\\x07 \\x01(\\t\\x12\\x12\\n\\nFilePrefix\\x18\\x08 \\x01(\\t\\x12\\x17\\n\\x0f\\x46lushUploadMode\\x18\\t \\x01(\\x05\\x12\\x0b\\n\\x03Md5\\x18\\n \\x01(\\t\\x12\\x14\\n\\x0cStorageClass\\x18\\x0b \\x01(\\x05\\x12\\x18\\n\\x10UploadHostPrefer\\x18\\x0c \\x01(\\t\\x12\\x19\\n\\x11\\x43lientNetWorkMode\\x18\\x65 \\x01(\\t\\x12\\x15\\n\\rClientIDCMode\\x18\\x66 \\x01(\\t\\\"\\x96\\x01\\n\\x0e\\x43ommitResponse\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Mid\\x18\\x02 \\x01(\\t\\x12\\x41\\n\\nSourceInfo\\x18\\x03 \\x01(\\x0b\\x32-.Volcengine.Vod.Models.Business.VodSourceInfo\\x12\\x11\\n\\tPosterUri\\x18\\x04 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x05 \\x01(\\t\\\">\\n\\x11VodUploadTemplate\\x12\\x13\\n\\x0bTemplateIds\\x18\\x01 \\x03(\\t\\x12\\x14\\n\\x0cTemplateType\\x18\\x02 \\x01(\\t\\\"\\x84\\x01\\n\\x13VodUploadOptionInfo\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x01(\\t\\x12\\x13\\n\\x0bTemplateIds\\x18\\x02 \\x03(\\t\\x12\\x44\\n\\tTemplates\\x18\\x03 \\x03(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.VodUploadTemplate\\\"\\x98\\x02\\n\\x15VodUploadCallbackData\\x12\\x0c\\n\\x04\\x43ode\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07Message\\x18\\x02 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x03 \\x01(\\t\\x12\\x0b\\n\\x03Vid\\x18\\x04 \\x01(\\t\\x12\\x0b\\n\\x03Mid\\x18\\x05 \\x01(\\t\\x12\\x11\\n\\tSpaceName\\x18\\x06 \\x01(\\t\\x12\\x41\\n\\nSourceInfo\\x18\\x07 \\x01(\\x0b\\x32-.Volcengine.Vod.Models.Business.VodSourceInfo\\x12\\x11\\n\\tPosterUri\\x18\\x08 \\x01(\\t\\x12G\\n\\nOptionInfo\\x18\\t \\x01(\\x0b\\x32\\x33.Volcengine.Vod.Models.Business.VodUploadOptionInfo\\\"\\xa1\\x01\\n\\x10\\x43\\x61llbackResponse\\x12\\x11\\n\\tRequestId\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07Version\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tEventTime\\x18\\x03 \\x01(\\t\\x12\\x11\\n\\tEventType\\x18\\x04 \\x01(\\t\\x12\\x43\\n\\x04\\x44\\x61ta\\x18\\x05 \\x01(\\x0b\\x32\\x35.Volcengine.Vod.Models.Business.VodUploadCallbackData\\\"+\\n\\tStoreInfo\\x12\\x10\\n\\x08StoreUri\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04\\x41uth\\x18\\x02 \\x01(\\t\\\"(\\n\\nHeaderPair\\x12\\x0b\\n\\x03Key\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05Value\\x18\\x02 \\x01(\\t\\\"\\xb9\\x01\\n\\rUploadAddress\\x12=\\n\\nStoreInfos\\x18\\x01 \\x03(\\x0b\\x32).Volcengine.Vod.Models.Business.StoreInfo\\x12\\x13\\n\\x0bUploadHosts\\x18\\x02 \\x03(\\t\\x12@\\n\\x0cUploadHeader\\x18\\x03 \\x03(\\x0b\\x32*.Volcengine.Vod.Models.Business.HeaderPair\\x12\\x12\\n\\nSessionKey\\x18\\x04 \\x01(\\t\\\"\\xae\\x01\\n\\x11\\x46lushUploadResult\\x12\\x13\\n\\x0b\\x46lushUpload\\x18\\x01 \\x01(\\x08\\x12\\x0b\\n\\x03Vid\\x18\\x02 \\x01(\\t\\x12\\x0b\\n\\x03Mid\\x18\\x03 \\x01(\\t\\x12\\x41\\n\\nSourceInfo\\x18\\x04 \\x01(\\x0b\\x32-.Volcengine.Vod.Models.Business.VodSourceInfo\\x12\\x11\\n\\tPosterUri\\x18\\x05 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x06 \\x01(\\t\\\"\\x87\\x02\\n\\rApplyResponse\\x12\\x44\\n\\rUploadAddress\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Vod.Models.Business.UploadAddress\\x12L\\n\\x11\\x46lushUploadResult\\x18\\x02 \\x01(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.FlushUploadResult\\x12\\x10\\n\\x08SDKParam\\x18\\x03 \\x01(\\t\\x12P\\n\\x13VpcTosUploadAddress\\x18\\x05 \\x01(\\x0b\\x32\\x33.Volcengine.Vod.Models.Business.VpcTosUploadAddress\\\"3\\n\\x1aVodParseUploadManifestData\\x12\\x15\\n\\rMediaSegments\\x18\\x01 \\x03(\\t\\\"h\\n\\x1cVodParseUploadManifestResult\\x12H\\n\\x04\\x44\\x61ta\\x18\\x01 \\x01(\\x0b\\x32:.Volcengine.Vod.Models.Business.VodParseUploadManifestData\\\"\\xa7\\x01\\n\\x19SubmitMoveObjectTaskParam\\x12\\x13\\n\\x0bSourceSpace\\x18\\x01 \\x01(\\t\\x12\\x16\\n\\x0eSourceFileName\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0bTargetSpace\\x18\\x03 \\x01(\\t\\x12\\x16\\n\\x0eTargetFileName\\x18\\x04 \\x01(\\t\\x12\\x18\\n\\x10SaveSourceObject\\x18\\x05 \\x01(\\x08\\x12\\x16\\n\\x0e\\x46orceOverwrite\\x18\\x06 \\x01(\\x08\\\"m\\n\\x1fVodSubmitMoveObjectTaskRespData\\x12J\\n\\x04\\x44\\x61ta\\x18\\x01 \\x01(\\x0b\\x32<.Volcengine.Vod.Models.Business.SubmitMoveObjectTaskRespData\\\"X\\n\\x1cSubmitMoveObjectTaskRespData\\x12\\x0e\\n\\x06TaskId\\x18\\x01 \\x01(\\t\\x12\\x13\\n\\x0bSourceSpace\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0bTargetSpace\\x18\\x03 \\x01(\\t\\\"X\\n\\x1cQueryMoveObjectTaskInfoParam\\x12\\x0e\\n\\x06TaskId\\x18\\x01 \\x01(\\t\\x12\\x13\\n\\x0bSourceSpace\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0bTargetSpace\\x18\\x03 \\x01(\\t\\\"r\\n!VodQueryMoveObjectTaskInfoResData\\x12M\\n\\x04\\x44\\x61ta\\x18\\x01 \\x01(\\x0b\\x32?.Volcengine.Vod.Models.Business.QueryMoveObjectTaskInfoRespData\\\"\\x81\\x01\\n\\x1fQueryMoveObjectTaskInfoRespData\\x12\\x0e\\n\\x06TaskId\\x18\\x01 \\x01(\\t\\x12\\x13\\n\\x0bSourceSpace\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0bTargetSpace\\x18\\x03 \\x01(\\t\\x12\\r\\n\\x05State\\x18\\x04 \\x01(\\t\\x12\\x15\\n\\rTaskRunResult\\x18\\x05 \\x01(\\t*B\\n\\x10StorageClassType\\x12\\x0b\\n\\x07\\x44\\x65\\x66\\x61ult\\x10\\x00\\x12\\x0c\\n\\x08Standard\\x10\\x01\\x12\\x0b\\n\\x07\\x41rchive\\x10\\x02\\x12\\x06\\n\\x02IA\\x10\\x03\\x42\\xcd\\x01\\n)com.volcengine.service.vod.model.businessB\\tVodUploadP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xc2\\x02\\x00\\xca\\x02 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n_STORAGECLASSTYPE = DESCRIPTOR.enum_types_by_name['StorageClassType']\nStorageClassType = enum_type_wrapper.EnumTypeWrapper(_STORAGECLASSTYPE)\nDefault = 0\nStandard = 1\nArchive = 2\nIA = 3\n\n\n_VODURLUPLOADURLSET = DESCRIPTOR.message_types_by_name['VodUrlUploadURLSet']\n_VODURLUPLOADURLSET_CUSTOMURLHEADERSENTRY = _VODURLUPLOADURLSET.nested_types_by_name['CustomURLHeadersEntry']\n_VODIMAGEFILE = DESCRIPTOR.message_types_by_name['VodImageFile']\n_VODEXECUTION = DESCRIPTOR.message_types_by_name['VodExecution']\n_VODEXECUTIONOPERATION = DESCRIPTOR.message_types_by_name['VodExecutionOperation']\n_VODEXECUTIONOPERATIONTASK = DESCRIPTOR.message_types_by_name['VodExecutionOperationTask']\n_VODEXECUTIONOPERATIONTASKOCR = DESCRIPTOR.message_types_by_name['VodExecutionOperationTaskOcr']\n_VODEXECUTIONOPERATIONTASKASR = DESCRIPTOR.message_types_by_name['VodExecutionOperationTaskAsr']\n_VODEXECUTIONCONTROL = DESCRIPTOR.message_types_by_name['VodExecutionControl']\n_VODURLRESPONSEDATA = DESCRIPTOR.message_types_by_name['VodUrlResponseData']\n_VALUEPAIR = DESCRIPTOR.message_types_by_name['ValuePair']\n_VODQUERYDATA = DESCRIPTOR.message_types_by_name['VodQueryData']\n_VODQUERYUPLOADRESULT = DESCRIPTOR.message_types_by_name['VodQueryUploadResult']\n_VODCOMMITDATA = DESCRIPTOR.message_types_by_name['VodCommitData']\n_VODCOMMITUPLOADINFORESPONSEDATA = DESCRIPTOR.message_types_by_name['VodCommitUploadInfoResponseData']\n_VODURLSET = DESCRIPTOR.message_types_by_name['VodURLSet']\n_VODAPPLYUPLOADINFORESULT = DESCRIPTOR.message_types_by_name['VodApplyUploadInfoResult']\n_VODAPPLYUPLOADINFODATA = DESCRIPTOR.message_types_by_name['VodApplyUploadInfoData']\n_VODUPLOADADDRESS = DESCRIPTOR.message_types_by_name['VodUploadAddress']\n_CANDIDATEUPLOADADDRESSES = DESCRIPTOR.message_types_by_name['CandidateUploadAddresses']\n_VODSTOREINFO = DESCRIPTOR.message_types_by_name['VodStoreInfo']\n_VODHEADERPAIR = DESCRIPTOR.message_types_by_name['VodHeaderPair']\n_VPCTOSUPLOADADDRESS = DESCRIPTOR.message_types_by_name['VpcTosUploadAddress']\n_VPCTOSUPLOADADDRESS_PUTURLHEADERSENTRY = _VPCTOSUPLOADADDRESS.nested_types_by_name['PutUrlHeadersEntry']\n_PARTUPLOADINFO = DESCRIPTOR.message_types_by_name['PartUploadInfo']\n_PARTUPLOADINFO_COMPLETEURLHEADERSENTRY = _PARTUPLOADINFO.nested_types_by_name['CompleteUrlHeadersEntry']\n_VODCOMMITUPLOADINFORESULT = DESCRIPTOR.message_types_by_name['VodCommitUploadInfoResult']\n_VODCOMMITUPLOADINFODATA = DESCRIPTOR.message_types_by_name['VodCommitUploadInfoData']\n_VODUPLOADFUNCTIONINPUT = DESCRIPTOR.message_types_by_name['VodUploadFunctionInput']\n_VODUPLOADFUNCTION = DESCRIPTOR.message_types_by_name['VodUploadFunction']\n_COMMITUPLOADINFOPARAM = DESCRIPTOR.message_types_by_name['CommitUploadInfoParam']\n_COMMITREQUESTBODYJSON = DESCRIPTOR.message_types_by_name['CommitRequestBodyJson']\n_APPLYUPLOADINFOPARAM = DESCRIPTOR.message_types_by_name['ApplyUploadInfoParam']\n_COMMITRESPONSE = DESCRIPTOR.message_types_by_name['CommitResponse']\n_VODUPLOADTEMPLATE = DESCRIPTOR.message_types_by_name['VodUploadTemplate']\n_VODUPLOADOPTIONINFO = DESCRIPTOR.message_types_by_name['VodUploadOptionInfo']\n_VODUPLOADCALLBACKDATA = DESCRIPTOR.message_types_by_name['VodUploadCallbackData']\n_CALLBACKRESPONSE = DESCRIPTOR.message_types_by_name['CallbackResponse']\n_STOREINFO = DESCRIPTOR.message_types_by_name['StoreInfo']\n_HEADERPAIR = DESCRIPTOR.message_types_by_name['HeaderPair']\n_UPLOADADDRESS = DESCRIPTOR.message_types_by_name['UploadAddress']\n_FLUSHUPLOADRESULT = DESCRIPTOR.message_types_by_name['FlushUploadResult']\n_APPLYRESPONSE = DESCRIPTOR.message_types_by_name['ApplyResponse']\n_VODPARSEUPLOADMANIFESTDATA = DESCRIPTOR.message_types_by_name['VodParseUploadManifestData']\n_VODPARSEUPLOADMANIFESTRESULT = DESCRIPTOR.message_types_by_name['VodParseUploadManifestResult']\n_SUBMITMOVEOBJECTTASKPARAM = DESCRIPTOR.message_types_by_name['SubmitMoveObjectTaskParam']\n_VODSUBMITMOVEOBJECTTASKRESPDATA = DESCRIPTOR.message_types_by_name['VodSubmitMoveObjectTaskRespData']\n_SUBMITMOVEOBJECTTASKRESPDATA = DESCRIPTOR.message_types_by_name['SubmitMoveObjectTaskRespData']\n_QUERYMOVEOBJECTTASKINFOPARAM = DESCRIPTOR.message_types_by_name['QueryMoveObjectTaskInfoParam']\n_VODQUERYMOVEOBJECTTASKINFORESDATA = DESCRIPTOR.message_types_by_name['VodQueryMoveObjectTaskInfoResData']\n_QUERYMOVEOBJECTTASKINFORESPDATA = DESCRIPTOR.message_types_by_name['QueryMoveObjectTaskInfoRespData']\nVodUrlUploadURLSet = _reflection.GeneratedProtocolMessageType('VodUrlUploadURLSet', (_message.Message,), {\n\n  'CustomURLHeadersEntry' : _reflection.GeneratedProtocolMessageType('CustomURLHeadersEntry', (_message.Message,), {\n    'DESCRIPTOR' : _VODURLUPLOADURLSET_CUSTOMURLHEADERSENTRY,\n    '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n    # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodUrlUploadURLSet.CustomURLHeadersEntry)\n    })\n  ,\n  'DESCRIPTOR' : _VODURLUPLOADURLSET,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodUrlUploadURLSet)\n  })\n_sym_db.RegisterMessage(VodUrlUploadURLSet)\n_sym_db.RegisterMessage(VodUrlUploadURLSet.CustomURLHeadersEntry)\n\nVodImageFile = _reflection.GeneratedProtocolMessageType('VodImageFile', (_message.Message,), {\n  'DESCRIPTOR' : _VODIMAGEFILE,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodImageFile)\n  })\n_sym_db.RegisterMessage(VodImageFile)\n\nVodExecution = _reflection.GeneratedProtocolMessageType('VodExecution', (_message.Message,), {\n  'DESCRIPTOR' : _VODEXECUTION,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodExecution)\n  })\n_sym_db.RegisterMessage(VodExecution)\n\nVodExecutionOperation = _reflection.GeneratedProtocolMessageType('VodExecutionOperation', (_message.Message,), {\n  'DESCRIPTOR' : _VODEXECUTIONOPERATION,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodExecutionOperation)\n  })\n_sym_db.RegisterMessage(VodExecutionOperation)\n\nVodExecutionOperationTask = _reflection.GeneratedProtocolMessageType('VodExecutionOperationTask', (_message.Message,), {\n  'DESCRIPTOR' : _VODEXECUTIONOPERATIONTASK,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodExecutionOperationTask)\n  })\n_sym_db.RegisterMessage(VodExecutionOperationTask)\n\nVodExecutionOperationTaskOcr = _reflection.GeneratedProtocolMessageType('VodExecutionOperationTaskOcr', (_message.Message,), {\n  'DESCRIPTOR' : _VODEXECUTIONOPERATIONTASKOCR,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodExecutionOperationTaskOcr)\n  })\n_sym_db.RegisterMessage(VodExecutionOperationTaskOcr)\n\nVodExecutionOperationTaskAsr = _reflection.GeneratedProtocolMessageType('VodExecutionOperationTaskAsr', (_message.Message,), {\n  'DESCRIPTOR' : _VODEXECUTIONOPERATIONTASKASR,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodExecutionOperationTaskAsr)\n  })\n_sym_db.RegisterMessage(VodExecutionOperationTaskAsr)\n\nVodExecutionControl = _reflection.GeneratedProtocolMessageType('VodExecutionControl', (_message.Message,), {\n  'DESCRIPTOR' : _VODEXECUTIONCONTROL,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodExecutionControl)\n  })\n_sym_db.RegisterMessage(VodExecutionControl)\n\nVodUrlResponseData = _reflection.GeneratedProtocolMessageType('VodUrlResponseData', (_message.Message,), {\n  'DESCRIPTOR' : _VODURLRESPONSEDATA,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodUrlResponseData)\n  })\n_sym_db.RegisterMessage(VodUrlResponseData)\n\nValuePair = _reflection.GeneratedProtocolMessageType('ValuePair', (_message.Message,), {\n  'DESCRIPTOR' : _VALUEPAIR,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.ValuePair)\n  })\n_sym_db.RegisterMessage(ValuePair)\n\nVodQueryData = _reflection.GeneratedProtocolMessageType('VodQueryData', (_message.Message,), {\n  'DESCRIPTOR' : _VODQUERYDATA,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodQueryData)\n  })\n_sym_db.RegisterMessage(VodQueryData)\n\nVodQueryUploadResult = _reflection.GeneratedProtocolMessageType('VodQueryUploadResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODQUERYUPLOADRESULT,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodQueryUploadResult)\n  })\n_sym_db.RegisterMessage(VodQueryUploadResult)\n\nVodCommitData = _reflection.GeneratedProtocolMessageType('VodCommitData', (_message.Message,), {\n  'DESCRIPTOR' : _VODCOMMITDATA,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCommitData)\n  })\n_sym_db.RegisterMessage(VodCommitData)\n\nVodCommitUploadInfoResponseData = _reflection.GeneratedProtocolMessageType('VodCommitUploadInfoResponseData', (_message.Message,), {\n  'DESCRIPTOR' : _VODCOMMITUPLOADINFORESPONSEDATA,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCommitUploadInfoResponseData)\n  })\n_sym_db.RegisterMessage(VodCommitUploadInfoResponseData)\n\nVodURLSet = _reflection.GeneratedProtocolMessageType('VodURLSet', (_message.Message,), {\n  'DESCRIPTOR' : _VODURLSET,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodURLSet)\n  })\n_sym_db.RegisterMessage(VodURLSet)\n\nVodApplyUploadInfoResult = _reflection.GeneratedProtocolMessageType('VodApplyUploadInfoResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODAPPLYUPLOADINFORESULT,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodApplyUploadInfoResult)\n  })\n_sym_db.RegisterMessage(VodApplyUploadInfoResult)\n\nVodApplyUploadInfoData = _reflection.GeneratedProtocolMessageType('VodApplyUploadInfoData', (_message.Message,), {\n  'DESCRIPTOR' : _VODAPPLYUPLOADINFODATA,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodApplyUploadInfoData)\n  })\n_sym_db.RegisterMessage(VodApplyUploadInfoData)\n\nVodUploadAddress = _reflection.GeneratedProtocolMessageType('VodUploadAddress', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPLOADADDRESS,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodUploadAddress)\n  })\n_sym_db.RegisterMessage(VodUploadAddress)\n\nCandidateUploadAddresses = _reflection.GeneratedProtocolMessageType('CandidateUploadAddresses', (_message.Message,), {\n  'DESCRIPTOR' : _CANDIDATEUPLOADADDRESSES,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CandidateUploadAddresses)\n  })\n_sym_db.RegisterMessage(CandidateUploadAddresses)\n\nVodStoreInfo = _reflection.GeneratedProtocolMessageType('VodStoreInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODSTOREINFO,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodStoreInfo)\n  })\n_sym_db.RegisterMessage(VodStoreInfo)\n\nVodHeaderPair = _reflection.GeneratedProtocolMessageType('VodHeaderPair', (_message.Message,), {\n  'DESCRIPTOR' : _VODHEADERPAIR,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodHeaderPair)\n  })\n_sym_db.RegisterMessage(VodHeaderPair)\n\nVpcTosUploadAddress = _reflection.GeneratedProtocolMessageType('VpcTosUploadAddress', (_message.Message,), {\n\n  'PutUrlHeadersEntry' : _reflection.GeneratedProtocolMessageType('PutUrlHeadersEntry', (_message.Message,), {\n    'DESCRIPTOR' : _VPCTOSUPLOADADDRESS_PUTURLHEADERSENTRY,\n    '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n    # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VpcTosUploadAddress.PutUrlHeadersEntry)\n    })\n  ,\n  'DESCRIPTOR' : _VPCTOSUPLOADADDRESS,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VpcTosUploadAddress)\n  })\n_sym_db.RegisterMessage(VpcTosUploadAddress)\n_sym_db.RegisterMessage(VpcTosUploadAddress.PutUrlHeadersEntry)\n\nPartUploadInfo = _reflection.GeneratedProtocolMessageType('PartUploadInfo', (_message.Message,), {\n\n  'CompleteUrlHeadersEntry' : _reflection.GeneratedProtocolMessageType('CompleteUrlHeadersEntry', (_message.Message,), {\n    'DESCRIPTOR' : _PARTUPLOADINFO_COMPLETEURLHEADERSENTRY,\n    '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n    # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.PartUploadInfo.CompleteUrlHeadersEntry)\n    })\n  ,\n  'DESCRIPTOR' : _PARTUPLOADINFO,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.PartUploadInfo)\n  })\n_sym_db.RegisterMessage(PartUploadInfo)\n_sym_db.RegisterMessage(PartUploadInfo.CompleteUrlHeadersEntry)\n\nVodCommitUploadInfoResult = _reflection.GeneratedProtocolMessageType('VodCommitUploadInfoResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODCOMMITUPLOADINFORESULT,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCommitUploadInfoResult)\n  })\n_sym_db.RegisterMessage(VodCommitUploadInfoResult)\n\nVodCommitUploadInfoData = _reflection.GeneratedProtocolMessageType('VodCommitUploadInfoData', (_message.Message,), {\n  'DESCRIPTOR' : _VODCOMMITUPLOADINFODATA,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodCommitUploadInfoData)\n  })\n_sym_db.RegisterMessage(VodCommitUploadInfoData)\n\nVodUploadFunctionInput = _reflection.GeneratedProtocolMessageType('VodUploadFunctionInput', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPLOADFUNCTIONINPUT,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodUploadFunctionInput)\n  })\n_sym_db.RegisterMessage(VodUploadFunctionInput)\n\nVodUploadFunction = _reflection.GeneratedProtocolMessageType('VodUploadFunction', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPLOADFUNCTION,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodUploadFunction)\n  })\n_sym_db.RegisterMessage(VodUploadFunction)\n\nCommitUploadInfoParam = _reflection.GeneratedProtocolMessageType('CommitUploadInfoParam', (_message.Message,), {\n  'DESCRIPTOR' : _COMMITUPLOADINFOPARAM,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CommitUploadInfoParam)\n  })\n_sym_db.RegisterMessage(CommitUploadInfoParam)\n\nCommitRequestBodyJson = _reflection.GeneratedProtocolMessageType('CommitRequestBodyJson', (_message.Message,), {\n  'DESCRIPTOR' : _COMMITREQUESTBODYJSON,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CommitRequestBodyJson)\n  })\n_sym_db.RegisterMessage(CommitRequestBodyJson)\n\nApplyUploadInfoParam = _reflection.GeneratedProtocolMessageType('ApplyUploadInfoParam', (_message.Message,), {\n  'DESCRIPTOR' : _APPLYUPLOADINFOPARAM,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.ApplyUploadInfoParam)\n  })\n_sym_db.RegisterMessage(ApplyUploadInfoParam)\n\nCommitResponse = _reflection.GeneratedProtocolMessageType('CommitResponse', (_message.Message,), {\n  'DESCRIPTOR' : _COMMITRESPONSE,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CommitResponse)\n  })\n_sym_db.RegisterMessage(CommitResponse)\n\nVodUploadTemplate = _reflection.GeneratedProtocolMessageType('VodUploadTemplate', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPLOADTEMPLATE,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodUploadTemplate)\n  })\n_sym_db.RegisterMessage(VodUploadTemplate)\n\nVodUploadOptionInfo = _reflection.GeneratedProtocolMessageType('VodUploadOptionInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPLOADOPTIONINFO,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodUploadOptionInfo)\n  })\n_sym_db.RegisterMessage(VodUploadOptionInfo)\n\nVodUploadCallbackData = _reflection.GeneratedProtocolMessageType('VodUploadCallbackData', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPLOADCALLBACKDATA,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodUploadCallbackData)\n  })\n_sym_db.RegisterMessage(VodUploadCallbackData)\n\nCallbackResponse = _reflection.GeneratedProtocolMessageType('CallbackResponse', (_message.Message,), {\n  'DESCRIPTOR' : _CALLBACKRESPONSE,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CallbackResponse)\n  })\n_sym_db.RegisterMessage(CallbackResponse)\n\nStoreInfo = _reflection.GeneratedProtocolMessageType('StoreInfo', (_message.Message,), {\n  'DESCRIPTOR' : _STOREINFO,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.StoreInfo)\n  })\n_sym_db.RegisterMessage(StoreInfo)\n\nHeaderPair = _reflection.GeneratedProtocolMessageType('HeaderPair', (_message.Message,), {\n  'DESCRIPTOR' : _HEADERPAIR,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.HeaderPair)\n  })\n_sym_db.RegisterMessage(HeaderPair)\n\nUploadAddress = _reflection.GeneratedProtocolMessageType('UploadAddress', (_message.Message,), {\n  'DESCRIPTOR' : _UPLOADADDRESS,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.UploadAddress)\n  })\n_sym_db.RegisterMessage(UploadAddress)\n\nFlushUploadResult = _reflection.GeneratedProtocolMessageType('FlushUploadResult', (_message.Message,), {\n  'DESCRIPTOR' : _FLUSHUPLOADRESULT,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.FlushUploadResult)\n  })\n_sym_db.RegisterMessage(FlushUploadResult)\n\nApplyResponse = _reflection.GeneratedProtocolMessageType('ApplyResponse', (_message.Message,), {\n  'DESCRIPTOR' : _APPLYRESPONSE,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.ApplyResponse)\n  })\n_sym_db.RegisterMessage(ApplyResponse)\n\nVodParseUploadManifestData = _reflection.GeneratedProtocolMessageType('VodParseUploadManifestData', (_message.Message,), {\n  'DESCRIPTOR' : _VODPARSEUPLOADMANIFESTDATA,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodParseUploadManifestData)\n  })\n_sym_db.RegisterMessage(VodParseUploadManifestData)\n\nVodParseUploadManifestResult = _reflection.GeneratedProtocolMessageType('VodParseUploadManifestResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODPARSEUPLOADMANIFESTRESULT,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodParseUploadManifestResult)\n  })\n_sym_db.RegisterMessage(VodParseUploadManifestResult)\n\nSubmitMoveObjectTaskParam = _reflection.GeneratedProtocolMessageType('SubmitMoveObjectTaskParam', (_message.Message,), {\n  'DESCRIPTOR' : _SUBMITMOVEOBJECTTASKPARAM,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.SubmitMoveObjectTaskParam)\n  })\n_sym_db.RegisterMessage(SubmitMoveObjectTaskParam)\n\nVodSubmitMoveObjectTaskRespData = _reflection.GeneratedProtocolMessageType('VodSubmitMoveObjectTaskRespData', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITMOVEOBJECTTASKRESPDATA,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodSubmitMoveObjectTaskRespData)\n  })\n_sym_db.RegisterMessage(VodSubmitMoveObjectTaskRespData)\n\nSubmitMoveObjectTaskRespData = _reflection.GeneratedProtocolMessageType('SubmitMoveObjectTaskRespData', (_message.Message,), {\n  'DESCRIPTOR' : _SUBMITMOVEOBJECTTASKRESPDATA,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.SubmitMoveObjectTaskRespData)\n  })\n_sym_db.RegisterMessage(SubmitMoveObjectTaskRespData)\n\nQueryMoveObjectTaskInfoParam = _reflection.GeneratedProtocolMessageType('QueryMoveObjectTaskInfoParam', (_message.Message,), {\n  'DESCRIPTOR' : _QUERYMOVEOBJECTTASKINFOPARAM,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.QueryMoveObjectTaskInfoParam)\n  })\n_sym_db.RegisterMessage(QueryMoveObjectTaskInfoParam)\n\nVodQueryMoveObjectTaskInfoResData = _reflection.GeneratedProtocolMessageType('VodQueryMoveObjectTaskInfoResData', (_message.Message,), {\n  'DESCRIPTOR' : _VODQUERYMOVEOBJECTTASKINFORESDATA,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodQueryMoveObjectTaskInfoResData)\n  })\n_sym_db.RegisterMessage(VodQueryMoveObjectTaskInfoResData)\n\nQueryMoveObjectTaskInfoRespData = _reflection.GeneratedProtocolMessageType('QueryMoveObjectTaskInfoRespData', (_message.Message,), {\n  'DESCRIPTOR' : _QUERYMOVEOBJECTTASKINFORESPDATA,\n  '__module__' : 'volcengine.vod.business.vod_upload_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.QueryMoveObjectTaskInfoRespData)\n  })\n_sym_db.RegisterMessage(QueryMoveObjectTaskInfoRespData)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.vod.model.businessB\\tVodUploadP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\240\\001\\001\\330\\001\\001\\302\\002\\000\\312\\002 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _VODURLUPLOADURLSET_CUSTOMURLHEADERSENTRY._options = None\n  _VODURLUPLOADURLSET_CUSTOMURLHEADERSENTRY._serialized_options = b'8\\001'\n  _VPCTOSUPLOADADDRESS_PUTURLHEADERSENTRY._options = None\n  _VPCTOSUPLOADADDRESS_PUTURLHEADERSENTRY._serialized_options = b'8\\001'\n  _PARTUPLOADINFO_COMPLETEURLHEADERSENTRY._options = None\n  _PARTUPLOADINFO_COMPLETEURLHEADERSENTRY._serialized_options = b'8\\001'\n  _STORAGECLASSTYPE._serialized_start=7735\n  _STORAGECLASSTYPE._serialized_end=7801\n  _VODURLUPLOADURLSET._serialized_start=119\n  _VODURLUPLOADURLSET._serialized_end=804\n  _VODURLUPLOADURLSET_CUSTOMURLHEADERSENTRY._serialized_start=749\n  _VODURLUPLOADURLSET_CUSTOMURLHEADERSENTRY._serialized_end=804\n  _VODIMAGEFILE._serialized_start=806\n  _VODIMAGEFILE._serialized_end=851\n  _VODEXECUTION._serialized_start=854\n  _VODEXECUTION._serialized_end=1012\n  _VODEXECUTIONOPERATION._serialized_start=1014\n  _VODEXECUTIONOPERATION._serialized_end=1124\n  _VODEXECUTIONOPERATIONTASK._serialized_start=1127\n  _VODEXECUTIONOPERATIONTASK._serialized_end=1318\n  _VODEXECUTIONOPERATIONTASKOCR._serialized_start=1320\n  _VODEXECUTIONOPERATIONTASKOCR._serialized_end=1386\n  _VODEXECUTIONOPERATIONTASKASR._serialized_start=1388\n  _VODEXECUTIONOPERATIONTASKASR._serialized_end=1513\n  _VODEXECUTIONCONTROL._serialized_start=1515\n  _VODEXECUTIONCONTROL._serialized_end=1579\n  _VODURLRESPONSEDATA._serialized_start=1581\n  _VODURLRESPONSEDATA._serialized_end=1658\n  _VALUEPAIR._serialized_start=1660\n  _VALUEPAIR._serialized_end=1724\n  _VODQUERYDATA._serialized_start=1726\n  _VODQUERYDATA._serialized_end=1808\n  _VODQUERYUPLOADRESULT._serialized_start=1810\n  _VODQUERYUPLOADRESULT._serialized_end=1922\n  _VODCOMMITDATA._serialized_start=1924\n  _VODCOMMITDATA._serialized_end=2018\n  _VODCOMMITUPLOADINFORESPONSEDATA._serialized_start=2021\n  _VODCOMMITUPLOADINFORESPONSEDATA._serialized_end=2188\n  _VODURLSET._serialized_start=2191\n  _VODURLSET._serialized_end=2410\n  _VODAPPLYUPLOADINFORESULT._serialized_start=2412\n  _VODAPPLYUPLOADINFORESULT._serialized_end=2508\n  _VODAPPLYUPLOADINFODATA._serialized_start=2511\n  _VODAPPLYUPLOADINFODATA._serialized_end=2782\n  _VODUPLOADADDRESS._serialized_start=2785\n  _VODUPLOADADDRESS._serialized_end=2979\n  _CANDIDATEUPLOADADDRESSES._serialized_start=2982\n  _CANDIDATEUPLOADADDRESSES._serialized_end=3242\n  _VODSTOREINFO._serialized_start=3244\n  _VODSTOREINFO._serialized_end=3290\n  _VODHEADERPAIR._serialized_start=3292\n  _VODHEADERPAIR._serialized_end=3335\n  _VPCTOSUPLOADADDRESS._serialized_start=3338\n  _VPCTOSUPLOADADDRESS._serialized_end=3643\n  _VPCTOSUPLOADADDRESS_PUTURLHEADERSENTRY._serialized_start=3591\n  _VPCTOSUPLOADADDRESS_PUTURLHEADERSENTRY._serialized_end=3643\n  _PARTUPLOADINFO._serialized_start=3646\n  _PARTUPLOADINFO._serialized_end=3885\n  _PARTUPLOADINFO_COMPLETEURLHEADERSENTRY._serialized_start=3828\n  _PARTUPLOADINFO_COMPLETEURLHEADERSENTRY._serialized_end=3885\n  _VODCOMMITUPLOADINFORESULT._serialized_start=3887\n  _VODCOMMITUPLOADINFORESULT._serialized_end=3985\n  _VODCOMMITUPLOADINFODATA._serialized_start=3988\n  _VODCOMMITUPLOADINFODATA._serialized_end=4125\n  _VODUPLOADFUNCTIONINPUT._serialized_start=4128\n  _VODUPLOADFUNCTIONINPUT._serialized_end=4572\n  _VODUPLOADFUNCTION._serialized_start=4574\n  _VODUPLOADFUNCTION._serialized_end=4678\n  _COMMITUPLOADINFOPARAM._serialized_start=4681\n  _COMMITUPLOADINFOPARAM._serialized_end=4881\n  _COMMITREQUESTBODYJSON._serialized_start=4884\n  _COMMITREQUESTBODYJSON._serialized_end=5033\n  _APPLYUPLOADINFOPARAM._serialized_start=5036\n  _APPLYUPLOADINFOPARAM._serialized_end=5348\n  _COMMITRESPONSE._serialized_start=5351\n  _COMMITRESPONSE._serialized_end=5501\n  _VODUPLOADTEMPLATE._serialized_start=5503\n  _VODUPLOADTEMPLATE._serialized_end=5565\n  _VODUPLOADOPTIONINFO._serialized_start=5568\n  _VODUPLOADOPTIONINFO._serialized_end=5700\n  _VODUPLOADCALLBACKDATA._serialized_start=5703\n  _VODUPLOADCALLBACKDATA._serialized_end=5983\n  _CALLBACKRESPONSE._serialized_start=5986\n  _CALLBACKRESPONSE._serialized_end=6147\n  _STOREINFO._serialized_start=6149\n  _STOREINFO._serialized_end=6192\n  _HEADERPAIR._serialized_start=6194\n  _HEADERPAIR._serialized_end=6234\n  _UPLOADADDRESS._serialized_start=6237\n  _UPLOADADDRESS._serialized_end=6422\n  _FLUSHUPLOADRESULT._serialized_start=6425\n  _FLUSHUPLOADRESULT._serialized_end=6599\n  _APPLYRESPONSE._serialized_start=6602\n  _APPLYRESPONSE._serialized_end=6865\n  _VODPARSEUPLOADMANIFESTDATA._serialized_start=6867\n  _VODPARSEUPLOADMANIFESTDATA._serialized_end=6918\n  _VODPARSEUPLOADMANIFESTRESULT._serialized_start=6920\n  _VODPARSEUPLOADMANIFESTRESULT._serialized_end=7024\n  _SUBMITMOVEOBJECTTASKPARAM._serialized_start=7027\n  _SUBMITMOVEOBJECTTASKPARAM._serialized_end=7194\n  _VODSUBMITMOVEOBJECTTASKRESPDATA._serialized_start=7196\n  _VODSUBMITMOVEOBJECTTASKRESPDATA._serialized_end=7305\n  _SUBMITMOVEOBJECTTASKRESPDATA._serialized_start=7307\n  _SUBMITMOVEOBJECTTASKRESPDATA._serialized_end=7395\n  _QUERYMOVEOBJECTTASKINFOPARAM._serialized_start=7397\n  _QUERYMOVEOBJECTTASKINFOPARAM._serialized_end=7485\n  _VODQUERYMOVEOBJECTTASKINFORESDATA._serialized_start=7487\n  _VODQUERYMOVEOBJECTTASKINFORESDATA._serialized_end=7601\n  _QUERYMOVEOBJECTTASKINFORESPDATA._serialized_start=7604\n  _QUERYMOVEOBJECTTASKINFORESPDATA._serialized_end=7733\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/vod/models/business/vod_workflow_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/business/vod_workflow.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf.internal import enum_type_wrapper\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\nfrom google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2\nfrom volcengine.vod.models.business import vod_common_pb2 as volcengine_dot_vod_dot_business_dot_vod__common__pb2\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n*volcengine/vod/business/vod_workflow.proto\\x12\\x1eVolcengine.Vod.Models.Business\\x1a\\x1fgoogle/protobuf/timestamp.proto\\x1a(volcengine/vod/business/vod_common.proto\\\"\\'\\n\\x16VodStartWorkflowResult\\x12\\r\\n\\x05RunId\\x18\\x01 \\x01(\\t\\\"D\\n\\tDirectUrl\\x12\\x10\\n\\x08\\x46ileName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nBucketName\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tSpaceName\\x18\\x03 \\x01(\\t\\\"\\xdc\\x01\\n\\x0eWorkflowParams\\x12\\x46\\n\\x0eOverrideParams\\x18\\x01 \\x01(\\x0b\\x32..Volcengine.Vod.Models.Business.OverrideParams\\x12P\\n\\tCondition\\x18\\x02 \\x03(\\x0b\\x32=.Volcengine.Vod.Models.Business.WorkflowParams.ConditionEntry\\x1a\\x30\\n\\x0e\\x43onditionEntry\\x12\\x0b\\n\\x03key\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05value\\x18\\x02 \\x01(\\x08:\\x02\\x38\\x01\\\"\\xf2\\x02\\n\\x0eOverrideParams\\x12:\\n\\x04Logo\\x18\\x01 \\x03(\\x0b\\x32,.Volcengine.Vod.Models.Business.LogoOverride\\x12N\\n\\x0eTranscodeVideo\\x18\\x02 \\x03(\\x0b\\x32\\x36.Volcengine.Vod.Models.Business.TranscodeVideoOverride\\x12N\\n\\x0eTranscodeAudio\\x18\\x03 \\x03(\\x0b\\x32\\x36.Volcengine.Vod.Models.Business.TranscodeAudioOverride\\x12\\x42\\n\\x08Snapshot\\x18\\x04 \\x03(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.SnapshotOverride\\x12@\\n\\x07\\x45nhance\\x18\\x05 \\x01(\\x0b\\x32/.Volcengine.Vod.Models.Business.EnhanceOverride\\\"\\x95\\x01\\n\\x0cLogoOverride\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x01(\\t\\x12\\x44\\n\\x04Vars\\x18\\x02 \\x03(\\x0b\\x32\\x36.Volcengine.Vod.Models.Business.LogoOverride.VarsEntry\\x1a+\\n\\tVarsEntry\\x12\\x0b\\n\\x03key\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05value\\x18\\x02 \\x01(\\t:\\x02\\x38\\x01\\\"\\x9f\\x01\\n\\x16TranscodeVideoOverride\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x03(\\t\\x12\\x32\\n\\x04\\x43lip\\x18\\x02 \\x01(\\x0b\\x32$.Volcengine.Vod.Models.Business.Clip\\x12\\x13\\n\\x0bOutputIndex\\x18\\x03 \\x03(\\x05\\x12\\x10\\n\\x08\\x46ileName\\x18\\x04 \\x01(\\t\\x12\\x16\\n\\x0eLogoTemplateId\\x18\\x05 \\x01(\\t\\\"*\\n\\x04\\x43lip\\x12\\x11\\n\\tStartTime\\x18\\x01 \\x01(\\x05\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x02 \\x01(\\x05\\\"r\\n\\x16TranscodeAudioOverride\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x03(\\t\\x12\\x32\\n\\x04\\x43lip\\x18\\x02 \\x01(\\x0b\\x32$.Volcengine.Vod.Models.Business.Clip\\x12\\x10\\n\\x08\\x46ileName\\x18\\x03 \\x01(\\t\\\"\\xcc\\x01\\n\\x10SnapshotOverride\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x03(\\t\\x12\\x12\\n\\nOffsetTime\\x18\\x02 \\x01(\\x05\\x12\\x16\\n\\x0eOffsetTimeList\\x18\\x03 \\x03(\\x05\\x12\\x10\\n\\x08\\x46ileName\\x18\\x04 \\x01(\\t\\x12\\x11\\n\\tFileIndex\\x18\\x05 \\x01(\\t\\x12\\x15\\n\\rSampleOffsets\\x18\\x06 \\x03(\\x02\\x12\\x12\\n\\x05Width\\x18\\x07 \\x01(\\x05H\\x00\\x88\\x01\\x01\\x12\\x13\\n\\x06Height\\x18\\x08 \\x01(\\x05H\\x01\\x88\\x01\\x01\\x42\\x08\\n\\x06_WidthB\\t\\n\\x07_Height\\\"8\\n\\x0f\\x45nhanceOverride\\x12\\x13\\n\\x0bStorageMode\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileName\\x18\\x02 \\x01(\\t\\\"\\xa5\\x01\\n\\x0fTranscodeResult\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12>\\n\\nInspection\\x18\\x02 \\x01(\\x0b\\x32*.Volcengine.Vod.Models.Business.Inspection\\x12\\x45\\n\\x0c\\x43\\x61tegoryTags\\x18\\x03 \\x03(\\x0b\\x32/.Volcengine.Vod.Models.Business.CategoryTagInfo\\\"\\x82\\x01\\n\\nInspection\\x12\\x38\\n\\x07Quality\\x18\\x01 \\x01(\\x0b\\x32\\'.Volcengine.Vod.Models.Business.Quality\\x12:\\n\\x06\\x44\\x65Logo\\x18\\x02 \\x03(\\x0b\\x32*.Volcengine.Vod.Models.Business.DeLogoInfo\\\"\\x88\\x01\\n\\x07Quality\\x12=\\n\\x06Visual\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Vod.Models.Business.VisualQuality\\x12>\\n\\nVolumeInfo\\x18\\x02 \\x01(\\x0b\\x32*.Volcengine.Vod.Models.Business.VolumeInfo\\\"q\\n\\nDeLogoInfo\\x12\\x13\\n\\x0b\\x41nchorWidth\\x18\\x01 \\x01(\\x03\\x12\\x14\\n\\x0c\\x41nchorHeight\\x18\\x02 \\x01(\\x03\\x12\\x0c\\n\\x04PosX\\x18\\x03 \\x01(\\x03\\x12\\x0c\\n\\x04PosY\\x18\\x04 \\x01(\\x03\\x12\\r\\n\\x05SizeX\\x18\\x05 \\x01(\\x03\\x12\\r\\n\\x05SizeY\\x18\\x06 \\x01(\\x03\\\"|\\n\\rVisualQuality\\x12\\x0f\\n\\x07VQScore\\x18\\x01 \\x01(\\x01\\x12\\x10\\n\\x08\\x43ontrast\\x18\\x02 \\x01(\\x01\\x12\\x14\\n\\x0c\\x43olorfulness\\x18\\x03 \\x01(\\x01\\x12\\x12\\n\\nBrightness\\x18\\x04 \\x01(\\x01\\x12\\x0f\\n\\x07Texture\\x18\\x05 \\x01(\\x01\\x12\\r\\n\\x05Noise\\x18\\x06 \\x01(\\x01\\\"S\\n\\nVolumeInfo\\x12\\x10\\n\\x08Loudness\\x18\\x01 \\x01(\\x01\\x12\\x0c\\n\\x04Peak\\x18\\x02 \\x01(\\x01\\x12\\x12\\n\\nMeanVolume\\x18\\x03 \\x01(\\x01\\x12\\x11\\n\\tMaxVolume\\x18\\x04 \\x01(\\x01\\\"\\xd6\\x01\\n\\x0f\\x43\\x61tegoryTagInfo\\x12\\r\\n\\x05TagId\\x18\\x01 \\x01(\\x03\\x12\\x0c\\n\\x04Prob\\x18\\x02 \\x01(\\x01\\x12\\x0f\\n\\x07TagName\\x18\\x03 \\x01(\\t\\x12\\r\\n\\x05Level\\x18\\x04 \\x01(\\x03\\x12S\\n\\nParentInfo\\x18\\x05 \\x03(\\x0b\\x32?.Volcengine.Vod.Models.Business.CategoryTagInfo.ParentInfoEntry\\x1a\\x31\\n\\x0fParentInfoEntry\\x12\\x0b\\n\\x03key\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05value\\x18\\x02 \\x01(\\t:\\x02\\x38\\x01\\\"\\x97\\x01\\n\\x1eVodListWorkflowExecutionResult\\x12?\\n\\x04\\x44\\x61ta\\x18\\x01 \\x03(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.WorkflowExecution\\x12\\x12\\n\\nTotalCount\\x18\\x02 \\x01(\\x05\\x12\\x10\\n\\x08PageSize\\x18\\x03 \\x01(\\x05\\x12\\x0e\\n\\x06Offset\\x18\\x04 \\x01(\\x05\\\"\\xb0\\x04\\n\\x11WorkflowExecution\\x12\\r\\n\\x05RunId\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Vid\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nTemplateId\\x18\\x03 \\x01(\\t\\x12\\x14\\n\\x0cTemplateName\\x18\\x04 \\x01(\\t\\x12\\x11\\n\\tSpaceName\\x18\\x05 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x06 \\x01(\\t\\x12\\x12\\n\\nTaskListId\\x18\\x07 \\x01(\\t\\x12\\x19\\n\\x11\\x45nableLowPriority\\x18\\x08 \\x01(\\x08\\x12\\x11\\n\\tJobSource\\x18\\t \\x01(\\t\\x12.\\n\\nCreateTime\\x18\\n \\x01(\\x0b\\x32\\x1a.google.protobuf.Timestamp\\x12-\\n\\tStartTime\\x18\\x0b \\x01(\\x0b\\x32\\x1a.google.protobuf.Timestamp\\x12+\\n\\x07\\x45ndTime\\x18\\x0c \\x01(\\x0b\\x32\\x1a.google.protobuf.Timestamp\\x12=\\n\\x05Input\\x18\\r \\x01(\\x0b\\x32..Volcengine.Vod.Models.Business.WorkflowParams\\x12\\x10\\n\\x08Priority\\x18\\x0e \\x01(\\x05\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x0f \\x01(\\t\\x12?\\n\\x0bTasksDetail\\x18\\x10 \\x03(\\x0b\\x32*.Volcengine.Vod.Models.Business.TaskDetail\\x12<\\n\\tDirectUrl\\x18\\x11 \\x01(\\x0b\\x32).Volcengine.Vod.Models.Business.DirectUrl\\\"\\xc4\\x03\\n#VodGetWorkflowExecutionDetailResult\\x12\\r\\n\\x05RunId\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Vid\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nTemplateId\\x18\\x03 \\x01(\\t\\x12\\x11\\n\\tSpaceName\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x06 \\x01(\\t\\x12\\x12\\n\\nTaskListId\\x18\\x07 \\x01(\\t\\x12\\x19\\n\\x11\\x45nableLowPriority\\x18\\x08 \\x01(\\x08\\x12\\x11\\n\\tJobSource\\x18\\t \\x01(\\t\\x12>\\n\\x06Stages\\x18\\n \\x03(\\x0b\\x32..Volcengine.Vod.Models.Business.ExecutionStage\\x12.\\n\\nCreateTime\\x18\\x0b \\x01(\\x0b\\x32\\x1a.google.protobuf.Timestamp\\x12-\\n\\tStartTime\\x18\\x0c \\x01(\\x0b\\x32\\x1a.google.protobuf.Timestamp\\x12+\\n\\x07\\x45ndTime\\x18\\r \\x01(\\x0b\\x32\\x1a.google.protobuf.Timestamp\\x12<\\n\\tDirectUrl\\x18\\x0e \\x01(\\x0b\\x32).Volcengine.Vod.Models.Business.DirectUrl\\\"\\xc3\\x01\\n\\x0e\\x45xecutionStage\\x12\\x13\\n\\x0b\\x44isplayName\\x18\\x01 \\x01(\\t\\x12@\\n\\x0bStageDetail\\x18\\x02 \\x03(\\x0b\\x32+.Volcengine.Vod.Models.Business.StageDetail\\x12-\\n\\tStartTime\\x18\\x03 \\x01(\\x0b\\x32\\x1a.google.protobuf.Timestamp\\x12+\\n\\x07\\x45ndTime\\x18\\x04 \\x01(\\x0b\\x32\\x1a.google.protobuf.Timestamp\\\"\\x8d\\x02\\n\\x0bStageDetail\\x12\\n\\n\\x02Id\\x18\\x01 \\x01(\\t\\x12\\x13\\n\\x0b\\x44isplayName\\x18\\x02 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x03 \\x01(\\t\\x12\\x12\\n\\nTemplateId\\x18\\x04 \\x01(\\t\\x12;\\n\\x06Status\\x18\\x05 \\x01(\\x0e\\x32+.Volcengine.Vod.Models.Business.StageStatus\\x12\\x11\\n\\tErrorCode\\x18\\x06 \\x01(\\x03\\x12\\x0f\\n\\x07Message\\x18\\x07 \\x01(\\t\\x12-\\n\\tStartTime\\x18\\x08 \\x01(\\x0b\\x32\\x1a.google.protobuf.Timestamp\\x12+\\n\\x07\\x45ndTime\\x18\\t \\x01(\\x0b\\x32\\x1a.google.protobuf.Timestamp\\\"\\xe0\\x01\\n\\nTaskDetail\\x12\\x13\\n\\x0b\\x44isplayName\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nTemplateId\\x18\\x04 \\x01(\\t\\x12;\\n\\x06Status\\x18\\x05 \\x01(\\x0e\\x32+.Volcengine.Vod.Models.Business.StageStatus\\x12\\x10\\n\\x08Progress\\x18\\x08 \\x01(\\x05\\x12-\\n\\tStartTime\\x18\\t \\x01(\\x0b\\x32\\x1a.google.protobuf.Timestamp\\x12+\\n\\x07\\x45ndTime\\x18\\n \\x01(\\x0b\\x32\\x1a.google.protobuf.Timestamp\\\"W\\n\\x14SnapshotParamsPoster\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08StoreUri\\x18\\x02 \\x01(\\t\\x12\\r\\n\\x05Width\\x18\\x03 \\x01(\\x05\\x12\\x0e\\n\\x06Height\\x18\\x04 \\x01(\\x05\\\"X\\n\\x15SnapshotParamsDynpost\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08StoreUri\\x18\\x02 \\x01(\\t\\x12\\r\\n\\x05Width\\x18\\x03 \\x01(\\x05\\x12\\x0e\\n\\x06Height\\x18\\x04 \\x01(\\x05\\\"Z\\n\\x17SnapshotParamsAIDynpost\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08StoreUri\\x18\\x02 \\x01(\\t\\x12\\r\\n\\x05Width\\x18\\x03 \\x01(\\x05\\x12\\x0e\\n\\x06Height\\x18\\x04 \\x01(\\x05\\\"_\\n\\x1cSnapshotParamsAnimatedPoster\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08StoreUri\\x18\\x02 \\x01(\\t\\x12\\r\\n\\x05Width\\x18\\x03 \\x01(\\x05\\x12\\x0e\\n\\x06Height\\x18\\x04 \\x01(\\x05\\\"\\xa8\\x01\\n\\x14SnapshotParamsSprite\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStoreUris\\x18\\x02 \\x03(\\t\\x12\\x11\\n\\tCellWidth\\x18\\x03 \\x01(\\x05\\x12\\x12\\n\\nCellHeight\\x18\\x04 \\x01(\\x05\\x12\\x0f\\n\\x07ImgXLen\\x18\\x05 \\x01(\\x05\\x12\\x0f\\n\\x07ImgYLen\\x18\\x06 \\x01(\\x05\\x12\\x10\\n\\x08Interval\\x18\\x07 \\x01(\\x02\\x12\\x12\\n\\nCaptureNum\\x18\\x08 \\x01(\\x05\\\"\\xb3\\x01\\n\\x14SnapshotParamsSample\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStoreUris\\x18\\x02 \\x03(\\t\\x12\\r\\n\\x05Width\\x18\\x03 \\x01(\\x05\\x12\\x0e\\n\\x06Height\\x18\\x04 \\x01(\\x05\\x12\\x10\\n\\x08Interval\\x18\\x05 \\x01(\\x02\\x12\\x12\\n\\nCaptureNum\\x18\\x06 \\x01(\\x05\\x12\\x10\\n\\x08\\x44uration\\x18\\x07 \\x01(\\x02\\x12\\x10\\n\\x08IndexUri\\x18\\x08 \\x01(\\t\\x12\\x0f\\n\\x07Offsets\\x18\\t \\x03(\\x02\\\"\\xf8\\x03\\n\\x0eSnapshotResult\\x12\\x0c\\n\\x04Type\\x18\\x01 \\x01(\\t\\x12\\x46\\n\\x06Poster\\x18\\x02 \\x01(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.SnapshotParamsPosterH\\x00\\x12H\\n\\x07\\x44ynpost\\x18\\x03 \\x01(\\x0b\\x32\\x35.Volcengine.Vod.Models.Business.SnapshotParamsDynpostH\\x00\\x12V\\n\\x0e\\x41nimatedPoster\\x18\\x04 \\x01(\\x0b\\x32<.Volcengine.Vod.Models.Business.SnapshotParamsAnimatedPosterH\\x00\\x12L\\n\\tAIDynpost\\x18\\x05 \\x01(\\x0b\\x32\\x37.Volcengine.Vod.Models.Business.SnapshotParamsAIDynpostH\\x00\\x12\\x46\\n\\x06Sprite\\x18\\x06 \\x01(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.SnapshotParamsSpriteH\\x00\\x12\\x46\\n\\x06Sample\\x18\\x07 \\x01(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.SnapshotParamsSampleH\\x00\\x42\\x10\\n\\x0eSnapshotParams\\\"\\xdc\\x02\\n\\x11VodWorkflowResult\\x12<\\n\\tDirectUrl\\x18\\x01 \\x01(\\x0b\\x32).Volcengine.Vod.Models.Business.DirectUrl\\x12\\x0b\\n\\x03Vid\\x18\\x02 \\x01(\\t\\x12\\r\\n\\x05RunId\\x18\\x03 \\x01(\\t\\x12\\x11\\n\\tSpaceName\\x18\\x04 \\x01(\\t\\x12\\x12\\n\\nTemplateId\\x18\\x05 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x06 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x07 \\x01(\\t\\x12H\\n\\x0eTranscodeInfos\\x18\\x08 \\x03(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.VodTranscodeInfo\\x12\\x41\\n\\tSnapshots\\x18\\t \\x03(\\x0b\\x32..Volcengine.Vod.Models.Business.SnapshotResult\\x12\\x13\\n\\x0b\\x43lientToken\\x18\\n \\x01(\\t\\\"\\xca\\x04\\n\\x0cTaskTemplate\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tSpaceName\\x18\\x02 \\x01(\\t\\x12\\x0c\\n\\x04Name\\x18\\x03 \\x01(\\t\\x12\\x13\\n\\x0b\\x44\\x65scription\\x18\\x04 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x06 \\x01(\\t\\x12\\x10\\n\\x08\\x43ommitId\\x18\\t \\x01(\\t\\x12\\x0c\\n\\x04Hash\\x18\\x0b \\x01(\\t\\x12-\\n\\tCreatedAt\\x18\\x0c \\x01(\\x0b\\x32\\x1a.google.protobuf.Timestamp\\x12-\\n\\tUpdatedAt\\x18\\r \\x01(\\x0b\\x32\\x1a.google.protobuf.Timestamp\\x12\\x10\\n\\x08TaskType\\x18\\x0e \\x01(\\t\\x12Z\\n\\x18TranscodeVideoTaskParams\\x18\\x0f \\x01(\\x0b\\x32\\x38.Volcengine.Vod.Models.Business.TranscodeVideoTaskParams\\x12J\\n\\x10\\x42yteHDTaskParams\\x18\\x12 \\x01(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.ByteHDTaskParams\\x12Z\\n\\x18TranscodeAudioTaskParams\\x18\\x13 \\x01(\\x0b\\x32\\x38.Volcengine.Vod.Models.Business.TranscodeAudioTaskParams\\x12N\\n\\x12SnapshotTaskParams\\x18\\x14 \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.SnapshotTaskParams\\\"\\xc4\\x03\\n\\x18TranscodeVideoTaskParams\\x12\\x1d\\n\\x15TranscodeTemplateType\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tContainer\\x18\\x02 \\x01(\\t\\x12\\x34\\n\\x05Video\\x18\\x03 \\x01(\\x0b\\x32%.Volcengine.Vod.Models.Business.Video\\x12\\x34\\n\\x05\\x41udio\\x18\\x04 \\x01(\\x0b\\x32%.Volcengine.Vod.Models.Business.Audio\\x12\\x14\\n\\x0c\\x44isableAudio\\x18\\x05 \\x01(\\x08\\x12\\x0f\\n\\x07Quality\\x18\\x06 \\x01(\\t\\x12\\x0f\\n\\x07Vladder\\x18\\x07 \\x01(\\t\\x12\\x0f\\n\\x07UserTag\\x18\\x08 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ncrypt\\x18\\t \\x01(\\x08\\x12>\\n\\nEncryption\\x18\\n \\x01(\\x0b\\x32*.Volcengine.Vod.Models.Business.Encryption\\x12\\x38\\n\\x07Segment\\x18\\x0b \\x01(\\x0b\\x32\\'.Volcengine.Vod.Models.Business.Segment\\x12\\x36\\n\\x06Volume\\x18\\x0c \\x01(\\x0b\\x32&.Volcengine.Vod.Models.Business.Volume\\\"\\x9d\\x03\\n\\x10\\x42yteHDTaskParams\\x12\\x11\\n\\tContainer\\x18\\x01 \\x01(\\t\\x12\\x34\\n\\x05Video\\x18\\x02 \\x01(\\x0b\\x32%.Volcengine.Vod.Models.Business.Video\\x12\\x34\\n\\x05\\x41udio\\x18\\x03 \\x01(\\x0b\\x32%.Volcengine.Vod.Models.Business.Audio\\x12\\x14\\n\\x0c\\x44isableAudio\\x18\\x04 \\x01(\\x08\\x12\\x0f\\n\\x07Quality\\x18\\x05 \\x01(\\t\\x12\\x0f\\n\\x07Vladder\\x18\\x06 \\x01(\\t\\x12\\x0f\\n\\x07UserTag\\x18\\x07 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ncrypt\\x18\\x08 \\x01(\\x08\\x12>\\n\\nEncryption\\x18\\t \\x01(\\x0b\\x32*.Volcengine.Vod.Models.Business.Encryption\\x12\\x38\\n\\x07Segment\\x18\\n \\x01(\\x0b\\x32\\'.Volcengine.Vod.Models.Business.Segment\\x12\\x36\\n\\x06Volume\\x18\\x0b \\x01(\\x0b\\x32&.Volcengine.Vod.Models.Business.Volume\\\"\\xc8\\x02\\n\\x18TranscodeAudioTaskParams\\x12\\x11\\n\\tContainer\\x18\\x01 \\x01(\\t\\x12\\x34\\n\\x05\\x41udio\\x18\\x02 \\x01(\\x0b\\x32%.Volcengine.Vod.Models.Business.Audio\\x12\\x0f\\n\\x07Quality\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07UserTag\\x18\\x04 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ncrypt\\x18\\x05 \\x01(\\x08\\x12>\\n\\nEncryption\\x18\\x06 \\x01(\\x0b\\x32*.Volcengine.Vod.Models.Business.Encryption\\x12\\x38\\n\\x07Segment\\x18\\x07 \\x01(\\x0b\\x32\\'.Volcengine.Vod.Models.Business.Segment\\x12\\x36\\n\\x06Volume\\x18\\x08 \\x01(\\x0b\\x32&.Volcengine.Vod.Models.Business.Volume\\\"\\xd8\\x03\\n\\x12SnapshotTaskParams\\x12\\x0c\\n\\x04Type\\x18\\x01 \\x01(\\t\\x12R\\n\\x14PosterSnapshotParams\\x18\\x02 \\x01(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.PosterSnapshotParams\\x12T\\n\\x15\\x44ynpostSnapshotParams\\x18\\x03 \\x01(\\x0b\\x32\\x35.Volcengine.Vod.Models.Business.DynpostSnapshotParams\\x12\\x62\\n\\x1c\\x41nimatedPosterSnapshotParams\\x18\\x04 \\x01(\\x0b\\x32<.Volcengine.Vod.Models.Business.AnimatedPosterSnapshotParams\\x12R\\n\\x14SpriteSnapshotParams\\x18\\x05 \\x01(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.SpriteSnapshotParams\\x12R\\n\\x14SampleSnapshotParams\\x18\\x07 \\x01(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.SampleSnapshotParams\\\"\\x8f\\x01\\n\\x14PosterSnapshotParams\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08ResAdapt\\x18\\x02 \\x01(\\x08\\x12\\x10\\n\\x08ResLimit\\x18\\x03 \\x01(\\x05\\x12\\r\\n\\x05Width\\x18\\x04 \\x01(\\x05\\x12\\x0e\\n\\x06Height\\x18\\x05 \\x01(\\x05\\x12\\x12\\n\\nOffsetTime\\x18\\x06 \\x01(\\x05\\x12\\x10\\n\\x08\\x46illType\\x18\\x07 \\x01(\\t\\\"\\xc5\\x01\\n\\x15\\x44ynpostSnapshotParams\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08ResAdapt\\x18\\x02 \\x01(\\x08\\x12\\x10\\n\\x08ResLimit\\x18\\x03 \\x01(\\x05\\x12\\r\\n\\x05Width\\x18\\x04 \\x01(\\x05\\x12\\x0e\\n\\x06Height\\x18\\x05 \\x01(\\x05\\x12\\x12\\n\\nOffsetTime\\x18\\x06 \\x01(\\x05\\x12\\x10\\n\\x08\\x44uration\\x18\\x07 \\x01(\\x05\\x12\\x12\\n\\nCaptureFps\\x18\\x08 \\x01(\\x02\\x12\\r\\n\\x05Speed\\x18\\t \\x01(\\x02\\x12\\x10\\n\\x08\\x46illType\\x18\\n \\x01(\\t\\\"\\xbf\\x01\\n\\x1c\\x41nimatedPosterSnapshotParams\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08ResAdapt\\x18\\x02 \\x01(\\x08\\x12\\x10\\n\\x08ResLimit\\x18\\x03 \\x01(\\x05\\x12\\r\\n\\x05Width\\x18\\x04 \\x01(\\x05\\x12\\x0e\\n\\x06Height\\x18\\x05 \\x01(\\x05\\x12\\x12\\n\\nOffsetTime\\x18\\x06 \\x01(\\x05\\x12\\x12\\n\\nCaptureFps\\x18\\x07 \\x01(\\x02\\x12\\x12\\n\\nCaptureNum\\x18\\x08 \\x01(\\x05\\x12\\x10\\n\\x08\\x46illType\\x18\\t \\x01(\\t\\\"\\xdf\\x01\\n\\x14SpriteSnapshotParams\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tCellWidth\\x18\\x02 \\x01(\\x05\\x12\\x12\\n\\nCellHeight\\x18\\x03 \\x01(\\x05\\x12\\x0f\\n\\x07ImgXLen\\x18\\x04 \\x01(\\x05\\x12\\x0f\\n\\x07ImgYLen\\x18\\x05 \\x01(\\x05\\x12\\x10\\n\\x08Interval\\x18\\x06 \\x01(\\x05\\x12\\x12\\n\\nOffsetTime\\x18\\x07 \\x01(\\x05\\x12\\x12\\n\\nCaptureNum\\x18\\x08 \\x01(\\x05\\x12\\x10\\n\\x08ResAdapt\\x18\\t \\x01(\\x08\\x12\\x10\\n\\x08ResLimit\\x18\\n \\x01(\\x05\\x12\\x10\\n\\x08\\x46illType\\x18\\x0b \\x01(\\t\\\"\\xd8\\x01\\n\\x14SampleSnapshotParams\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08ResAdapt\\x18\\x02 \\x01(\\x08\\x12\\x10\\n\\x08ResLimit\\x18\\x03 \\x01(\\x05\\x12\\r\\n\\x05Width\\x18\\x04 \\x01(\\x05\\x12\\x0e\\n\\x06Height\\x18\\x05 \\x01(\\x05\\x12\\x12\\n\\nCaptureNum\\x18\\x06 \\x01(\\x05\\x12\\x13\\n\\x0b\\x43\\x61ptureMode\\x18\\x07 \\x01(\\x05\\x12\\x10\\n\\x08Interval\\x18\\x08 \\x01(\\x01\\x12\\x0f\\n\\x07OutMode\\x18\\t \\x01(\\t\\x12\\x10\\n\\x08\\x46illType\\x18\\n \\x01(\\t\\x12\\x0f\\n\\x07Offsets\\x18\\x0b \\x03(\\x02\\\"[\\n\\x15VodTaskTemplateResult\\x12\\x42\\n\\x0cTaskTemplate\\x18\\x02 \\x01(\\x0b\\x32,.Volcengine.Vod.Models.Business.TaskTemplate\\\"\\x85\\x01\\n\\x19VodListTaskTemplateResult\\x12\\r\\n\\x05Limit\\x18\\x01 \\x01(\\x05\\x12\\x0e\\n\\x06Offset\\x18\\x02 \\x01(\\x05\\x12\\r\\n\\x05Total\\x18\\x03 \\x01(\\x03\\x12:\\n\\x04\\x44\\x61ta\\x18\\x04 \\x03(\\x0b\\x32,.Volcengine.Vod.Models.Business.TaskTemplate\\\"\\x98\\x02\\n\\x10WorkflowTemplate\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tSpaceName\\x18\\x02 \\x01(\\t\\x12\\x0c\\n\\x04Name\\x18\\x03 \\x01(\\t\\x12\\x13\\n\\x0b\\x44\\x65scription\\x18\\x04 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x06 \\x01(\\t\\x12-\\n\\tCreatedAt\\x18\\x0c \\x01(\\x0b\\x32\\x1a.google.protobuf.Timestamp\\x12-\\n\\tUpdatedAt\\x18\\r \\x01(\\x0b\\x32\\x1a.google.protobuf.Timestamp\\x12\\x10\\n\\x08\\x43ommitId\\x18\\x0e \\x01(\\t\\x12<\\n\\nActivities\\x18\\x13 \\x03(\\x0b\\x32(.Volcengine.Vod.Models.Business.Activity\\\"\\xab\\x02\\n\\x08\\x41\\x63tivity\\x12\\x12\\n\\nActivityId\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Name\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0b\\x44\\x65scription\\x18\\x03 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x04 \\x01(\\t\\x12J\\n\\x10SnapshotActivity\\x18\\x0c \\x01(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.SnapshotActivity\\x12@\\n\\x0b\\x45ndActivity\\x18\\x13 \\x01(\\x0b\\x32+.Volcengine.Vod.Models.Business.EndActivity\\x12L\\n\\x11TranscodeActivity\\x18\\x17 \\x01(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.TranscodeActivity\\\"\\xe5\\x03\\n\\x11TranscodeActivity\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x01(\\t\\x12P\\n\\x07\\x45nhance\\x18\\x02 \\x01(\\x0b\\x32?.Volcengine.Vod.Models.Business.TranscodeActivity.EnhanceParams\\x12J\\n\\x04Logo\\x18\\x03 \\x01(\\x0b\\x32<.Volcengine.Vod.Models.Business.TranscodeActivity.LogoParams\\x12\\x10\\n\\x08\\x46ileName\\x18\\x05 \\x01(\\t\\x12@\\n\\x08Parallel\\x18\\x06 \\x01(\\x0b\\x32..Volcengine.Vod.Models.Business.ParallelParams\\x12<\\n\\tCondition\\x18\\x07 \\x01(\\x0b\\x32).Volcengine.Vod.Models.Business.Condition\\x1a\\x34\\n\\rEnhanceParams\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07Version\\x18\\x02 \\x01(\\t\\x1a \\n\\nLogoParams\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x01(\\t\\x1a\\x34\\n\\x0eSubtitleParams\\x12\\x10\\n\\x08Language\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x46ontType\\x18\\x02 \\x01(\\t\\\"v\\n\\x10SnapshotActivity\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileName\\x18\\x02 \\x01(\\t\\x12<\\n\\tCondition\\x18\\x03 \\x01(\\x0b\\x32).Volcengine.Vod.Models.Business.Condition\\\"%\\n\\x0b\\x45ndActivity\\x12\\x16\\n\\x0eTranscodeEvent\\x18\\x01 \\x01(\\t\\\"g\\n\\x19VodWorkflowTemplateResult\\x12J\\n\\x10WorkflowTemplate\\x18\\x02 \\x01(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.WorkflowTemplate\\\"\\x8d\\x01\\n\\x1dVodListWorkflowTemplateResult\\x12\\r\\n\\x05Limit\\x18\\x01 \\x01(\\x05\\x12\\x0e\\n\\x06Offset\\x18\\x02 \\x01(\\x05\\x12\\r\\n\\x05Total\\x18\\x03 \\x01(\\x03\\x12>\\n\\x04\\x44\\x61ta\\x18\\x04 \\x03(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.WorkflowTemplate\\\"\\xa9\\x03\\n\\x0cLogoTemplate\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tSpaceName\\x18\\x02 \\x01(\\t\\x12\\x0c\\n\\x04Name\\x18\\x03 \\x01(\\t\\x12\\x13\\n\\x0b\\x44\\x65scription\\x18\\x04 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x06 \\x01(\\t\\x12-\\n\\tCreatedAt\\x18\\t \\x01(\\x0b\\x32\\x1a.google.protobuf.Timestamp\\x12-\\n\\tUpdatedAt\\x18\\n \\x01(\\x0b\\x32\\x1a.google.protobuf.Timestamp\\x12\\x0c\\n\\x04Hash\\x18\\x0b \\x01(\\t\\x12\\x10\\n\\x08LogoType\\x18\\x0c \\x01(\\t\\x12\\x38\\n\\x05Logos\\x18\\r \\x03(\\x0b\\x32).Volcengine.Vod.Models.Business.AdaptLogo\\x12<\\n\\x07\\x43oncats\\x18\\x0e \\x03(\\x0b\\x32+.Volcengine.Vod.Models.Business.AdaptConcat\\x12K\\n\\x0fHiddenWatermark\\x18\\x0f \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.HiddenWatermarkAdd\\\"\\x8a\\x01\\n\\tAdaptLogo\\x12>\\n\\nAnchorSize\\x18\\x01 \\x01(\\x0b\\x32*.Volcengine.Vod.Models.Business.AnchorSize\\x12=\\n\\x05Logos\\x18\\x02 \\x03(\\x0b\\x32..Volcengine.Vod.Models.Business.LogoDefinition\\\"+\\n\\nAnchorSize\\x12\\r\\n\\x05Width\\x18\\x01 \\x01(\\x05\\x12\\x0e\\n\\x06Height\\x18\\x02 \\x01(\\x05\\\"\\x9b\\x02\\n\\x13ImageLogoDefinition\\x12\\x0b\\n\\x03Mid\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\x05\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\x05\\x12\\x0e\\n\\x06Locate\\x18\\x04 \\x01(\\t\\x12\\x0c\\n\\x04PosX\\x18\\x05 \\x01(\\x05\\x12\\x0c\\n\\x04PosY\\x18\\x06 \\x01(\\x05\\x12\\r\\n\\x05SizeX\\x18\\x07 \\x01(\\x05\\x12\\r\\n\\x05SizeY\\x18\\x08 \\x01(\\x05\\x12\\x11\\n\\tLoopTimes\\x18\\t \\x01(\\x05\\x12\\x12\\n\\nRepeatLast\\x18\\n \\x01(\\x08\\x12\\x14\\n\\x0cTransparency\\x18\\x0b \\x01(\\x05\\x12\\x11\\n\\tPosRatioX\\x18\\x0c \\x01(\\x01\\x12\\x11\\n\\tPosRatioY\\x18\\r \\x01(\\x01\\x12\\x12\\n\\nSizeRatioX\\x18\\x0e \\x01(\\x01\\x12\\x12\\n\\nSizeRatioY\\x18\\x0f \\x01(\\x01\\\"\\x9b\\x02\\n\\x13VideoLogoDefinition\\x12\\x0b\\n\\x03Mid\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\x05\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\x05\\x12\\x11\\n\\tLoopTimes\\x18\\x04 \\x01(\\x05\\x12\\x12\\n\\nRepeatLast\\x18\\x05 \\x01(\\x08\\x12\\x0e\\n\\x06Locate\\x18\\x06 \\x01(\\t\\x12\\x0c\\n\\x04PosX\\x18\\x07 \\x01(\\x05\\x12\\x0c\\n\\x04PosY\\x18\\x08 \\x01(\\x05\\x12\\r\\n\\x05SizeX\\x18\\t \\x01(\\x05\\x12\\r\\n\\x05SizeY\\x18\\n \\x01(\\x05\\x12\\x14\\n\\x0cTransparency\\x18\\x0b \\x01(\\x05\\x12\\x11\\n\\tPosRatioX\\x18\\x0c \\x01(\\x01\\x12\\x11\\n\\tPosRatioY\\x18\\r \\x01(\\x01\\x12\\x12\\n\\nSizeRatioX\\x18\\x0e \\x01(\\x01\\x12\\x12\\n\\nSizeRatioY\\x18\\x0f \\x01(\\x01\\\"\\x98\\x02\\n\\x12TextLogoDefinition\\x12\\x0f\\n\\x07\\x43ontent\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x46ontType\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08\\x46ontSize\\x18\\x03 \\x01(\\x05\\x12\\x11\\n\\tFontColor\\x18\\x04 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x05 \\x01(\\x05\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x06 \\x01(\\x05\\x12\\x0e\\n\\x06Locate\\x18\\x07 \\x01(\\t\\x12\\x0c\\n\\x04PosX\\x18\\x08 \\x01(\\x05\\x12\\x0c\\n\\x04PosY\\x18\\t \\x01(\\x05\\x12\\r\\n\\x05SizeX\\x18\\n \\x01(\\x05\\x12\\r\\n\\x05SizeY\\x18\\x0b \\x01(\\x05\\x12\\x11\\n\\tPosRatioX\\x18\\x0c \\x01(\\x01\\x12\\x11\\n\\tPosRatioY\\x18\\r \\x01(\\x01\\x12\\x12\\n\\nSizeRatioX\\x18\\x0e \\x01(\\x01\\x12\\x12\\n\\nSizeRatioY\\x18\\x0f \\x01(\\x01\\\"\\x92\\x02\\n\\x0eLogoDefinition\\x12\\x0c\\n\\x04Type\\x18\\x01 \\x01(\\t\\x12P\\n\\x13ImageLogoDefinition\\x18\\x02 \\x01(\\x0b\\x32\\x33.Volcengine.Vod.Models.Business.ImageLogoDefinition\\x12P\\n\\x13VideoLogoDefinition\\x18\\x03 \\x01(\\x0b\\x32\\x33.Volcengine.Vod.Models.Business.VideoLogoDefinition\\x12N\\n\\x12TextLogoDefinition\\x18\\x04 \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.TextLogoDefinition\\\"=\\n\\nFontShadow\\x12\\r\\n\\x05\\x43olor\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07OffsetX\\x18\\x02 \\x01(\\x05\\x12\\x0f\\n\\x07OffsetY\\x18\\x03 \\x01(\\x05\\\"\\x90\\x01\\n\\x0b\\x41\\x64\\x61ptConcat\\x12>\\n\\nAnchorSize\\x18\\x01 \\x01(\\x0b\\x32*.Volcengine.Vod.Models.Business.AnchorSize\\x12\\x41\\n\\x07\\x43oncats\\x18\\x02 \\x03(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.ConcatDefinition\\\"?\\n\\x10\\x43oncatDefinition\\x12\\x0c\\n\\x04Type\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Mid\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08Position\\x18\\x04 \\x01(\\t\\\"3\\n\\x12HiddenWatermarkAdd\\x12\\x0f\\n\\x07\\x43ontent\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x03 \\x01(\\t\\\"\\x8a\\x01\\n\\x1eVodListWatermarkResponseResult\\x12\\r\\n\\x05Limit\\x18\\x01 \\x01(\\x05\\x12\\x0e\\n\\x06Offset\\x18\\x02 \\x01(\\x05\\x12\\r\\n\\x05Total\\x18\\x03 \\x01(\\x03\\x12:\\n\\x04\\x44\\x61ta\\x18\\x04 \\x03(\\x0b\\x32,.Volcengine.Vod.Models.Business.LogoTemplate\\\"\\xc9\\x02\\n\\x05Video\\x12\\x0b\\n\\x03Res\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tScaleType\\x18\\x04 \\x01(\\x05\\x12\\x11\\n\\tScaleMode\\x18\\x16 \\x01(\\x05\\x12\\x12\\n\\nScaleWidth\\x18\\x05 \\x01(\\x05\\x12\\x13\\n\\x0bScaleHeight\\x18\\x06 \\x01(\\x05\\x12\\x12\\n\\nScaleShort\\x18\\x07 \\x01(\\x05\\x12\\x11\\n\\tScaleLong\\x18\\x08 \\x01(\\x05\\x12\\r\\n\\x05\\x43odec\\x18\\t \\x01(\\t\\x12\\x17\\n\\x0fRateControlMode\\x18\\n \\x01(\\t\\x12\\x12\\n\\nMaxBitrate\\x18\\x0b \\x01(\\x05\\x12\\x0f\\n\\x07\\x42itrate\\x18\\x0c \\x01(\\x05\\x12\\x0b\\n\\x03\\x43rf\\x18\\r \\x01(\\x02\\x12\\x0e\\n\\x06MaxFps\\x18\\x0f \\x01(\\x05\\x12\\r\\n\\x05Vsync\\x18\\x10 \\x01(\\t\\x12\\x0b\\n\\x03\\x46ps\\x18\\x11 \\x01(\\x02\\x12\\x0f\\n\\x07HDRMode\\x18\\x15 \\x01(\\x05\\x12\\x0f\\n\\x07GopSize\\x18\\x18 \\x01(\\x05\\x12\\x15\\n\\rDisableBFrame\\x18\\x19 \\x01(\\x08\\\"\\x99\\x01\\n\\x05\\x41udio\\x12\\r\\n\\x05\\x43odec\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nSampleRate\\x18\\x02 \\x01(\\x05\\x12\\x17\\n\\x0fRateControlMode\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07\\x42itrate\\x18\\x04 \\x01(\\x05\\x12\\x0f\\n\\x07MinRate\\x18\\x05 \\x01(\\x05\\x12\\x0f\\n\\x07MaxRate\\x18\\x06 \\x01(\\x05\\x12\\x10\\n\\x08\\x43hannels\\x18\\x07 \\x01(\\x05\\x12\\x0f\\n\\x07Profile\\x18\\x08 \\x01(\\t\\\"9\\n\\x07Segment\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08\\x44uration\\x18\\x03 \\x01(\\x05\\\"\\x84\\x02\\n\\tCondition\\x12\\x10\\n\\x08ResRange\\x18\\x01 \\x01(\\t\\x12\\x14\\n\\x0cLongResRange\\x18\\x02 \\x01(\\t\\x12\\x15\\n\\rDurationRange\\x18\\x03 \\x01(\\t\\x12\\x10\\n\\x08\\x46psRange\\x18\\x04 \\x01(\\t\\x12\\x14\\n\\x0c\\x42itrateRange\\x18\\x05 \\x01(\\t\\x12\\x19\\n\\x11\\x41udioBitrateRange\\x18\\x06 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileType\\x18\\x07 \\x01(\\t\\x12\\x14\\n\\x0cVQScoreRange\\x18\\x08 \\x01(\\t\\x12\\x1a\\n\\x12VideoDurationRange\\x18\\t \\x01(\\t\\x12\\x1a\\n\\x12\\x41udioDurationRange\\x18\\n \\x01(\\t\\x12\\x15\\n\\rUserCondition\\x18\\x0b \\x01(\\t\\\"!\\n\\x0eParallelParams\\x12\\x0f\\n\\x07\\x45nabled\\x18\\x01 \\x01(\\x08\\\"\\x1c\\n\\nEncryption\\x12\\x0e\\n\\x06Vendor\\x18\\x01 \\x01(\\t\\\"j\\n\\x06Volume\\x12\\x0e\\n\\x06Method\\x18\\x01 \\x01(\\t\\x12\\x1a\\n\\x12IntegratedLoudness\\x18\\x02 \\x01(\\x01\\x12\\x10\\n\\x08TruePeak\\x18\\x03 \\x01(\\x01\\x12\\x0e\\n\\x06Volume\\x18\\x04 \\x01(\\x01\\x12\\x12\\n\\nVolumeTime\\x18\\x05 \\x01(\\x01*z\\n\\x0bStageStatus\\x12\\x0b\\n\\x07Unknown\\x10\\x00\\x12\\r\\n\\tScheduled\\x10\\x01\\x12\\x0b\\n\\x07Running\\x10\\x02\\x12\\x0c\\n\\x08\\x43\\x61nceled\\x10\\x03\\x12\\x0c\\n\\x08TimedOut\\x10\\x04\\x12\\x0b\\n\\x07Skipped\\x10\\x05\\x12\\r\\n\\tCompleted\\x10\\x06\\x12\\n\\n\\x06\\x46\\x61iled\\x10\\x07\\x42\\xcc\\x01\\n)com.volcengine.service.vod.model.businessB\\x0bVodWorkflowP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\xa0\\x01\\x01\\xd8\\x01\\x01\\xca\\x02 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n_STAGESTATUS = DESCRIPTOR.enum_types_by_name['StageStatus']\nStageStatus = enum_type_wrapper.EnumTypeWrapper(_STAGESTATUS)\nUnknown = 0\nScheduled = 1\nRunning = 2\nCanceled = 3\nTimedOut = 4\nSkipped = 5\nCompleted = 6\nFailed = 7\n\n\n_VODSTARTWORKFLOWRESULT = DESCRIPTOR.message_types_by_name['VodStartWorkflowResult']\n_DIRECTURL = DESCRIPTOR.message_types_by_name['DirectUrl']\n_WORKFLOWPARAMS = DESCRIPTOR.message_types_by_name['WorkflowParams']\n_WORKFLOWPARAMS_CONDITIONENTRY = _WORKFLOWPARAMS.nested_types_by_name['ConditionEntry']\n_OVERRIDEPARAMS = DESCRIPTOR.message_types_by_name['OverrideParams']\n_LOGOOVERRIDE = DESCRIPTOR.message_types_by_name['LogoOverride']\n_LOGOOVERRIDE_VARSENTRY = _LOGOOVERRIDE.nested_types_by_name['VarsEntry']\n_TRANSCODEVIDEOOVERRIDE = DESCRIPTOR.message_types_by_name['TranscodeVideoOverride']\n_CLIP = DESCRIPTOR.message_types_by_name['Clip']\n_TRANSCODEAUDIOOVERRIDE = DESCRIPTOR.message_types_by_name['TranscodeAudioOverride']\n_SNAPSHOTOVERRIDE = DESCRIPTOR.message_types_by_name['SnapshotOverride']\n_ENHANCEOVERRIDE = DESCRIPTOR.message_types_by_name['EnhanceOverride']\n_TRANSCODERESULT = DESCRIPTOR.message_types_by_name['TranscodeResult']\n_INSPECTION = DESCRIPTOR.message_types_by_name['Inspection']\n_QUALITY = DESCRIPTOR.message_types_by_name['Quality']\n_DELOGOINFO = DESCRIPTOR.message_types_by_name['DeLogoInfo']\n_VISUALQUALITY = DESCRIPTOR.message_types_by_name['VisualQuality']\n_VOLUMEINFO = DESCRIPTOR.message_types_by_name['VolumeInfo']\n_CATEGORYTAGINFO = DESCRIPTOR.message_types_by_name['CategoryTagInfo']\n_CATEGORYTAGINFO_PARENTINFOENTRY = _CATEGORYTAGINFO.nested_types_by_name['ParentInfoEntry']\n_VODLISTWORKFLOWEXECUTIONRESULT = DESCRIPTOR.message_types_by_name['VodListWorkflowExecutionResult']\n_WORKFLOWEXECUTION = DESCRIPTOR.message_types_by_name['WorkflowExecution']\n_VODGETWORKFLOWEXECUTIONDETAILRESULT = DESCRIPTOR.message_types_by_name['VodGetWorkflowExecutionDetailResult']\n_EXECUTIONSTAGE = DESCRIPTOR.message_types_by_name['ExecutionStage']\n_STAGEDETAIL = DESCRIPTOR.message_types_by_name['StageDetail']\n_TASKDETAIL = DESCRIPTOR.message_types_by_name['TaskDetail']\n_SNAPSHOTPARAMSPOSTER = DESCRIPTOR.message_types_by_name['SnapshotParamsPoster']\n_SNAPSHOTPARAMSDYNPOST = DESCRIPTOR.message_types_by_name['SnapshotParamsDynpost']\n_SNAPSHOTPARAMSAIDYNPOST = DESCRIPTOR.message_types_by_name['SnapshotParamsAIDynpost']\n_SNAPSHOTPARAMSANIMATEDPOSTER = DESCRIPTOR.message_types_by_name['SnapshotParamsAnimatedPoster']\n_SNAPSHOTPARAMSSPRITE = DESCRIPTOR.message_types_by_name['SnapshotParamsSprite']\n_SNAPSHOTPARAMSSAMPLE = DESCRIPTOR.message_types_by_name['SnapshotParamsSample']\n_SNAPSHOTRESULT = DESCRIPTOR.message_types_by_name['SnapshotResult']\n_VODWORKFLOWRESULT = DESCRIPTOR.message_types_by_name['VodWorkflowResult']\n_TASKTEMPLATE = DESCRIPTOR.message_types_by_name['TaskTemplate']\n_TRANSCODEVIDEOTASKPARAMS = DESCRIPTOR.message_types_by_name['TranscodeVideoTaskParams']\n_BYTEHDTASKPARAMS = DESCRIPTOR.message_types_by_name['ByteHDTaskParams']\n_TRANSCODEAUDIOTASKPARAMS = DESCRIPTOR.message_types_by_name['TranscodeAudioTaskParams']\n_SNAPSHOTTASKPARAMS = DESCRIPTOR.message_types_by_name['SnapshotTaskParams']\n_POSTERSNAPSHOTPARAMS = DESCRIPTOR.message_types_by_name['PosterSnapshotParams']\n_DYNPOSTSNAPSHOTPARAMS = DESCRIPTOR.message_types_by_name['DynpostSnapshotParams']\n_ANIMATEDPOSTERSNAPSHOTPARAMS = DESCRIPTOR.message_types_by_name['AnimatedPosterSnapshotParams']\n_SPRITESNAPSHOTPARAMS = DESCRIPTOR.message_types_by_name['SpriteSnapshotParams']\n_SAMPLESNAPSHOTPARAMS = DESCRIPTOR.message_types_by_name['SampleSnapshotParams']\n_VODTASKTEMPLATERESULT = DESCRIPTOR.message_types_by_name['VodTaskTemplateResult']\n_VODLISTTASKTEMPLATERESULT = DESCRIPTOR.message_types_by_name['VodListTaskTemplateResult']\n_WORKFLOWTEMPLATE = DESCRIPTOR.message_types_by_name['WorkflowTemplate']\n_ACTIVITY = DESCRIPTOR.message_types_by_name['Activity']\n_TRANSCODEACTIVITY = DESCRIPTOR.message_types_by_name['TranscodeActivity']\n_TRANSCODEACTIVITY_ENHANCEPARAMS = _TRANSCODEACTIVITY.nested_types_by_name['EnhanceParams']\n_TRANSCODEACTIVITY_LOGOPARAMS = _TRANSCODEACTIVITY.nested_types_by_name['LogoParams']\n_TRANSCODEACTIVITY_SUBTITLEPARAMS = _TRANSCODEACTIVITY.nested_types_by_name['SubtitleParams']\n_SNAPSHOTACTIVITY = DESCRIPTOR.message_types_by_name['SnapshotActivity']\n_ENDACTIVITY = DESCRIPTOR.message_types_by_name['EndActivity']\n_VODWORKFLOWTEMPLATERESULT = DESCRIPTOR.message_types_by_name['VodWorkflowTemplateResult']\n_VODLISTWORKFLOWTEMPLATERESULT = DESCRIPTOR.message_types_by_name['VodListWorkflowTemplateResult']\n_LOGOTEMPLATE = DESCRIPTOR.message_types_by_name['LogoTemplate']\n_ADAPTLOGO = DESCRIPTOR.message_types_by_name['AdaptLogo']\n_ANCHORSIZE = DESCRIPTOR.message_types_by_name['AnchorSize']\n_IMAGELOGODEFINITION = DESCRIPTOR.message_types_by_name['ImageLogoDefinition']\n_VIDEOLOGODEFINITION = DESCRIPTOR.message_types_by_name['VideoLogoDefinition']\n_TEXTLOGODEFINITION = DESCRIPTOR.message_types_by_name['TextLogoDefinition']\n_LOGODEFINITION = DESCRIPTOR.message_types_by_name['LogoDefinition']\n_FONTSHADOW = DESCRIPTOR.message_types_by_name['FontShadow']\n_ADAPTCONCAT = DESCRIPTOR.message_types_by_name['AdaptConcat']\n_CONCATDEFINITION = DESCRIPTOR.message_types_by_name['ConcatDefinition']\n_HIDDENWATERMARKADD = DESCRIPTOR.message_types_by_name['HiddenWatermarkAdd']\n_VODLISTWATERMARKRESPONSERESULT = DESCRIPTOR.message_types_by_name['VodListWatermarkResponseResult']\n_VIDEO = DESCRIPTOR.message_types_by_name['Video']\n_AUDIO = DESCRIPTOR.message_types_by_name['Audio']\n_SEGMENT = DESCRIPTOR.message_types_by_name['Segment']\n_CONDITION = DESCRIPTOR.message_types_by_name['Condition']\n_PARALLELPARAMS = DESCRIPTOR.message_types_by_name['ParallelParams']\n_ENCRYPTION = DESCRIPTOR.message_types_by_name['Encryption']\n_VOLUME = DESCRIPTOR.message_types_by_name['Volume']\nVodStartWorkflowResult = _reflection.GeneratedProtocolMessageType('VodStartWorkflowResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODSTARTWORKFLOWRESULT,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodStartWorkflowResult)\n  })\n_sym_db.RegisterMessage(VodStartWorkflowResult)\n\nDirectUrl = _reflection.GeneratedProtocolMessageType('DirectUrl', (_message.Message,), {\n  'DESCRIPTOR' : _DIRECTURL,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DirectUrl)\n  })\n_sym_db.RegisterMessage(DirectUrl)\n\nWorkflowParams = _reflection.GeneratedProtocolMessageType('WorkflowParams', (_message.Message,), {\n\n  'ConditionEntry' : _reflection.GeneratedProtocolMessageType('ConditionEntry', (_message.Message,), {\n    'DESCRIPTOR' : _WORKFLOWPARAMS_CONDITIONENTRY,\n    '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n    # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.WorkflowParams.ConditionEntry)\n    })\n  ,\n  'DESCRIPTOR' : _WORKFLOWPARAMS,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.WorkflowParams)\n  })\n_sym_db.RegisterMessage(WorkflowParams)\n_sym_db.RegisterMessage(WorkflowParams.ConditionEntry)\n\nOverrideParams = _reflection.GeneratedProtocolMessageType('OverrideParams', (_message.Message,), {\n  'DESCRIPTOR' : _OVERRIDEPARAMS,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.OverrideParams)\n  })\n_sym_db.RegisterMessage(OverrideParams)\n\nLogoOverride = _reflection.GeneratedProtocolMessageType('LogoOverride', (_message.Message,), {\n\n  'VarsEntry' : _reflection.GeneratedProtocolMessageType('VarsEntry', (_message.Message,), {\n    'DESCRIPTOR' : _LOGOOVERRIDE_VARSENTRY,\n    '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n    # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.LogoOverride.VarsEntry)\n    })\n  ,\n  'DESCRIPTOR' : _LOGOOVERRIDE,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.LogoOverride)\n  })\n_sym_db.RegisterMessage(LogoOverride)\n_sym_db.RegisterMessage(LogoOverride.VarsEntry)\n\nTranscodeVideoOverride = _reflection.GeneratedProtocolMessageType('TranscodeVideoOverride', (_message.Message,), {\n  'DESCRIPTOR' : _TRANSCODEVIDEOOVERRIDE,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.TranscodeVideoOverride)\n  })\n_sym_db.RegisterMessage(TranscodeVideoOverride)\n\nClip = _reflection.GeneratedProtocolMessageType('Clip', (_message.Message,), {\n  'DESCRIPTOR' : _CLIP,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.Clip)\n  })\n_sym_db.RegisterMessage(Clip)\n\nTranscodeAudioOverride = _reflection.GeneratedProtocolMessageType('TranscodeAudioOverride', (_message.Message,), {\n  'DESCRIPTOR' : _TRANSCODEAUDIOOVERRIDE,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.TranscodeAudioOverride)\n  })\n_sym_db.RegisterMessage(TranscodeAudioOverride)\n\nSnapshotOverride = _reflection.GeneratedProtocolMessageType('SnapshotOverride', (_message.Message,), {\n  'DESCRIPTOR' : _SNAPSHOTOVERRIDE,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.SnapshotOverride)\n  })\n_sym_db.RegisterMessage(SnapshotOverride)\n\nEnhanceOverride = _reflection.GeneratedProtocolMessageType('EnhanceOverride', (_message.Message,), {\n  'DESCRIPTOR' : _ENHANCEOVERRIDE,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.EnhanceOverride)\n  })\n_sym_db.RegisterMessage(EnhanceOverride)\n\nTranscodeResult = _reflection.GeneratedProtocolMessageType('TranscodeResult', (_message.Message,), {\n  'DESCRIPTOR' : _TRANSCODERESULT,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.TranscodeResult)\n  })\n_sym_db.RegisterMessage(TranscodeResult)\n\nInspection = _reflection.GeneratedProtocolMessageType('Inspection', (_message.Message,), {\n  'DESCRIPTOR' : _INSPECTION,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.Inspection)\n  })\n_sym_db.RegisterMessage(Inspection)\n\nQuality = _reflection.GeneratedProtocolMessageType('Quality', (_message.Message,), {\n  'DESCRIPTOR' : _QUALITY,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.Quality)\n  })\n_sym_db.RegisterMessage(Quality)\n\nDeLogoInfo = _reflection.GeneratedProtocolMessageType('DeLogoInfo', (_message.Message,), {\n  'DESCRIPTOR' : _DELOGOINFO,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DeLogoInfo)\n  })\n_sym_db.RegisterMessage(DeLogoInfo)\n\nVisualQuality = _reflection.GeneratedProtocolMessageType('VisualQuality', (_message.Message,), {\n  'DESCRIPTOR' : _VISUALQUALITY,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VisualQuality)\n  })\n_sym_db.RegisterMessage(VisualQuality)\n\nVolumeInfo = _reflection.GeneratedProtocolMessageType('VolumeInfo', (_message.Message,), {\n  'DESCRIPTOR' : _VOLUMEINFO,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VolumeInfo)\n  })\n_sym_db.RegisterMessage(VolumeInfo)\n\nCategoryTagInfo = _reflection.GeneratedProtocolMessageType('CategoryTagInfo', (_message.Message,), {\n\n  'ParentInfoEntry' : _reflection.GeneratedProtocolMessageType('ParentInfoEntry', (_message.Message,), {\n    'DESCRIPTOR' : _CATEGORYTAGINFO_PARENTINFOENTRY,\n    '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n    # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CategoryTagInfo.ParentInfoEntry)\n    })\n  ,\n  'DESCRIPTOR' : _CATEGORYTAGINFO,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.CategoryTagInfo)\n  })\n_sym_db.RegisterMessage(CategoryTagInfo)\n_sym_db.RegisterMessage(CategoryTagInfo.ParentInfoEntry)\n\nVodListWorkflowExecutionResult = _reflection.GeneratedProtocolMessageType('VodListWorkflowExecutionResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTWORKFLOWEXECUTIONRESULT,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodListWorkflowExecutionResult)\n  })\n_sym_db.RegisterMessage(VodListWorkflowExecutionResult)\n\nWorkflowExecution = _reflection.GeneratedProtocolMessageType('WorkflowExecution', (_message.Message,), {\n  'DESCRIPTOR' : _WORKFLOWEXECUTION,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.WorkflowExecution)\n  })\n_sym_db.RegisterMessage(WorkflowExecution)\n\nVodGetWorkflowExecutionDetailResult = _reflection.GeneratedProtocolMessageType('VodGetWorkflowExecutionDetailResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETWORKFLOWEXECUTIONDETAILRESULT,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodGetWorkflowExecutionDetailResult)\n  })\n_sym_db.RegisterMessage(VodGetWorkflowExecutionDetailResult)\n\nExecutionStage = _reflection.GeneratedProtocolMessageType('ExecutionStage', (_message.Message,), {\n  'DESCRIPTOR' : _EXECUTIONSTAGE,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.ExecutionStage)\n  })\n_sym_db.RegisterMessage(ExecutionStage)\n\nStageDetail = _reflection.GeneratedProtocolMessageType('StageDetail', (_message.Message,), {\n  'DESCRIPTOR' : _STAGEDETAIL,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.StageDetail)\n  })\n_sym_db.RegisterMessage(StageDetail)\n\nTaskDetail = _reflection.GeneratedProtocolMessageType('TaskDetail', (_message.Message,), {\n  'DESCRIPTOR' : _TASKDETAIL,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.TaskDetail)\n  })\n_sym_db.RegisterMessage(TaskDetail)\n\nSnapshotParamsPoster = _reflection.GeneratedProtocolMessageType('SnapshotParamsPoster', (_message.Message,), {\n  'DESCRIPTOR' : _SNAPSHOTPARAMSPOSTER,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.SnapshotParamsPoster)\n  })\n_sym_db.RegisterMessage(SnapshotParamsPoster)\n\nSnapshotParamsDynpost = _reflection.GeneratedProtocolMessageType('SnapshotParamsDynpost', (_message.Message,), {\n  'DESCRIPTOR' : _SNAPSHOTPARAMSDYNPOST,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.SnapshotParamsDynpost)\n  })\n_sym_db.RegisterMessage(SnapshotParamsDynpost)\n\nSnapshotParamsAIDynpost = _reflection.GeneratedProtocolMessageType('SnapshotParamsAIDynpost', (_message.Message,), {\n  'DESCRIPTOR' : _SNAPSHOTPARAMSAIDYNPOST,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.SnapshotParamsAIDynpost)\n  })\n_sym_db.RegisterMessage(SnapshotParamsAIDynpost)\n\nSnapshotParamsAnimatedPoster = _reflection.GeneratedProtocolMessageType('SnapshotParamsAnimatedPoster', (_message.Message,), {\n  'DESCRIPTOR' : _SNAPSHOTPARAMSANIMATEDPOSTER,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.SnapshotParamsAnimatedPoster)\n  })\n_sym_db.RegisterMessage(SnapshotParamsAnimatedPoster)\n\nSnapshotParamsSprite = _reflection.GeneratedProtocolMessageType('SnapshotParamsSprite', (_message.Message,), {\n  'DESCRIPTOR' : _SNAPSHOTPARAMSSPRITE,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.SnapshotParamsSprite)\n  })\n_sym_db.RegisterMessage(SnapshotParamsSprite)\n\nSnapshotParamsSample = _reflection.GeneratedProtocolMessageType('SnapshotParamsSample', (_message.Message,), {\n  'DESCRIPTOR' : _SNAPSHOTPARAMSSAMPLE,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.SnapshotParamsSample)\n  })\n_sym_db.RegisterMessage(SnapshotParamsSample)\n\nSnapshotResult = _reflection.GeneratedProtocolMessageType('SnapshotResult', (_message.Message,), {\n  'DESCRIPTOR' : _SNAPSHOTRESULT,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.SnapshotResult)\n  })\n_sym_db.RegisterMessage(SnapshotResult)\n\nVodWorkflowResult = _reflection.GeneratedProtocolMessageType('VodWorkflowResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODWORKFLOWRESULT,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodWorkflowResult)\n  })\n_sym_db.RegisterMessage(VodWorkflowResult)\n\nTaskTemplate = _reflection.GeneratedProtocolMessageType('TaskTemplate', (_message.Message,), {\n  'DESCRIPTOR' : _TASKTEMPLATE,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.TaskTemplate)\n  })\n_sym_db.RegisterMessage(TaskTemplate)\n\nTranscodeVideoTaskParams = _reflection.GeneratedProtocolMessageType('TranscodeVideoTaskParams', (_message.Message,), {\n  'DESCRIPTOR' : _TRANSCODEVIDEOTASKPARAMS,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.TranscodeVideoTaskParams)\n  })\n_sym_db.RegisterMessage(TranscodeVideoTaskParams)\n\nByteHDTaskParams = _reflection.GeneratedProtocolMessageType('ByteHDTaskParams', (_message.Message,), {\n  'DESCRIPTOR' : _BYTEHDTASKPARAMS,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.ByteHDTaskParams)\n  })\n_sym_db.RegisterMessage(ByteHDTaskParams)\n\nTranscodeAudioTaskParams = _reflection.GeneratedProtocolMessageType('TranscodeAudioTaskParams', (_message.Message,), {\n  'DESCRIPTOR' : _TRANSCODEAUDIOTASKPARAMS,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.TranscodeAudioTaskParams)\n  })\n_sym_db.RegisterMessage(TranscodeAudioTaskParams)\n\nSnapshotTaskParams = _reflection.GeneratedProtocolMessageType('SnapshotTaskParams', (_message.Message,), {\n  'DESCRIPTOR' : _SNAPSHOTTASKPARAMS,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.SnapshotTaskParams)\n  })\n_sym_db.RegisterMessage(SnapshotTaskParams)\n\nPosterSnapshotParams = _reflection.GeneratedProtocolMessageType('PosterSnapshotParams', (_message.Message,), {\n  'DESCRIPTOR' : _POSTERSNAPSHOTPARAMS,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.PosterSnapshotParams)\n  })\n_sym_db.RegisterMessage(PosterSnapshotParams)\n\nDynpostSnapshotParams = _reflection.GeneratedProtocolMessageType('DynpostSnapshotParams', (_message.Message,), {\n  'DESCRIPTOR' : _DYNPOSTSNAPSHOTPARAMS,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.DynpostSnapshotParams)\n  })\n_sym_db.RegisterMessage(DynpostSnapshotParams)\n\nAnimatedPosterSnapshotParams = _reflection.GeneratedProtocolMessageType('AnimatedPosterSnapshotParams', (_message.Message,), {\n  'DESCRIPTOR' : _ANIMATEDPOSTERSNAPSHOTPARAMS,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.AnimatedPosterSnapshotParams)\n  })\n_sym_db.RegisterMessage(AnimatedPosterSnapshotParams)\n\nSpriteSnapshotParams = _reflection.GeneratedProtocolMessageType('SpriteSnapshotParams', (_message.Message,), {\n  'DESCRIPTOR' : _SPRITESNAPSHOTPARAMS,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.SpriteSnapshotParams)\n  })\n_sym_db.RegisterMessage(SpriteSnapshotParams)\n\nSampleSnapshotParams = _reflection.GeneratedProtocolMessageType('SampleSnapshotParams', (_message.Message,), {\n  'DESCRIPTOR' : _SAMPLESNAPSHOTPARAMS,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.SampleSnapshotParams)\n  })\n_sym_db.RegisterMessage(SampleSnapshotParams)\n\nVodTaskTemplateResult = _reflection.GeneratedProtocolMessageType('VodTaskTemplateResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODTASKTEMPLATERESULT,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodTaskTemplateResult)\n  })\n_sym_db.RegisterMessage(VodTaskTemplateResult)\n\nVodListTaskTemplateResult = _reflection.GeneratedProtocolMessageType('VodListTaskTemplateResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTTASKTEMPLATERESULT,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodListTaskTemplateResult)\n  })\n_sym_db.RegisterMessage(VodListTaskTemplateResult)\n\nWorkflowTemplate = _reflection.GeneratedProtocolMessageType('WorkflowTemplate', (_message.Message,), {\n  'DESCRIPTOR' : _WORKFLOWTEMPLATE,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.WorkflowTemplate)\n  })\n_sym_db.RegisterMessage(WorkflowTemplate)\n\nActivity = _reflection.GeneratedProtocolMessageType('Activity', (_message.Message,), {\n  'DESCRIPTOR' : _ACTIVITY,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.Activity)\n  })\n_sym_db.RegisterMessage(Activity)\n\nTranscodeActivity = _reflection.GeneratedProtocolMessageType('TranscodeActivity', (_message.Message,), {\n\n  'EnhanceParams' : _reflection.GeneratedProtocolMessageType('EnhanceParams', (_message.Message,), {\n    'DESCRIPTOR' : _TRANSCODEACTIVITY_ENHANCEPARAMS,\n    '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n    # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.TranscodeActivity.EnhanceParams)\n    })\n  ,\n\n  'LogoParams' : _reflection.GeneratedProtocolMessageType('LogoParams', (_message.Message,), {\n    'DESCRIPTOR' : _TRANSCODEACTIVITY_LOGOPARAMS,\n    '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n    # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.TranscodeActivity.LogoParams)\n    })\n  ,\n\n  'SubtitleParams' : _reflection.GeneratedProtocolMessageType('SubtitleParams', (_message.Message,), {\n    'DESCRIPTOR' : _TRANSCODEACTIVITY_SUBTITLEPARAMS,\n    '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n    # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.TranscodeActivity.SubtitleParams)\n    })\n  ,\n  'DESCRIPTOR' : _TRANSCODEACTIVITY,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.TranscodeActivity)\n  })\n_sym_db.RegisterMessage(TranscodeActivity)\n_sym_db.RegisterMessage(TranscodeActivity.EnhanceParams)\n_sym_db.RegisterMessage(TranscodeActivity.LogoParams)\n_sym_db.RegisterMessage(TranscodeActivity.SubtitleParams)\n\nSnapshotActivity = _reflection.GeneratedProtocolMessageType('SnapshotActivity', (_message.Message,), {\n  'DESCRIPTOR' : _SNAPSHOTACTIVITY,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.SnapshotActivity)\n  })\n_sym_db.RegisterMessage(SnapshotActivity)\n\nEndActivity = _reflection.GeneratedProtocolMessageType('EndActivity', (_message.Message,), {\n  'DESCRIPTOR' : _ENDACTIVITY,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.EndActivity)\n  })\n_sym_db.RegisterMessage(EndActivity)\n\nVodWorkflowTemplateResult = _reflection.GeneratedProtocolMessageType('VodWorkflowTemplateResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODWORKFLOWTEMPLATERESULT,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodWorkflowTemplateResult)\n  })\n_sym_db.RegisterMessage(VodWorkflowTemplateResult)\n\nVodListWorkflowTemplateResult = _reflection.GeneratedProtocolMessageType('VodListWorkflowTemplateResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTWORKFLOWTEMPLATERESULT,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodListWorkflowTemplateResult)\n  })\n_sym_db.RegisterMessage(VodListWorkflowTemplateResult)\n\nLogoTemplate = _reflection.GeneratedProtocolMessageType('LogoTemplate', (_message.Message,), {\n  'DESCRIPTOR' : _LOGOTEMPLATE,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.LogoTemplate)\n  })\n_sym_db.RegisterMessage(LogoTemplate)\n\nAdaptLogo = _reflection.GeneratedProtocolMessageType('AdaptLogo', (_message.Message,), {\n  'DESCRIPTOR' : _ADAPTLOGO,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.AdaptLogo)\n  })\n_sym_db.RegisterMessage(AdaptLogo)\n\nAnchorSize = _reflection.GeneratedProtocolMessageType('AnchorSize', (_message.Message,), {\n  'DESCRIPTOR' : _ANCHORSIZE,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.AnchorSize)\n  })\n_sym_db.RegisterMessage(AnchorSize)\n\nImageLogoDefinition = _reflection.GeneratedProtocolMessageType('ImageLogoDefinition', (_message.Message,), {\n  'DESCRIPTOR' : _IMAGELOGODEFINITION,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.ImageLogoDefinition)\n  })\n_sym_db.RegisterMessage(ImageLogoDefinition)\n\nVideoLogoDefinition = _reflection.GeneratedProtocolMessageType('VideoLogoDefinition', (_message.Message,), {\n  'DESCRIPTOR' : _VIDEOLOGODEFINITION,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VideoLogoDefinition)\n  })\n_sym_db.RegisterMessage(VideoLogoDefinition)\n\nTextLogoDefinition = _reflection.GeneratedProtocolMessageType('TextLogoDefinition', (_message.Message,), {\n  'DESCRIPTOR' : _TEXTLOGODEFINITION,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.TextLogoDefinition)\n  })\n_sym_db.RegisterMessage(TextLogoDefinition)\n\nLogoDefinition = _reflection.GeneratedProtocolMessageType('LogoDefinition', (_message.Message,), {\n  'DESCRIPTOR' : _LOGODEFINITION,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.LogoDefinition)\n  })\n_sym_db.RegisterMessage(LogoDefinition)\n\nFontShadow = _reflection.GeneratedProtocolMessageType('FontShadow', (_message.Message,), {\n  'DESCRIPTOR' : _FONTSHADOW,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.FontShadow)\n  })\n_sym_db.RegisterMessage(FontShadow)\n\nAdaptConcat = _reflection.GeneratedProtocolMessageType('AdaptConcat', (_message.Message,), {\n  'DESCRIPTOR' : _ADAPTCONCAT,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.AdaptConcat)\n  })\n_sym_db.RegisterMessage(AdaptConcat)\n\nConcatDefinition = _reflection.GeneratedProtocolMessageType('ConcatDefinition', (_message.Message,), {\n  'DESCRIPTOR' : _CONCATDEFINITION,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.ConcatDefinition)\n  })\n_sym_db.RegisterMessage(ConcatDefinition)\n\nHiddenWatermarkAdd = _reflection.GeneratedProtocolMessageType('HiddenWatermarkAdd', (_message.Message,), {\n  'DESCRIPTOR' : _HIDDENWATERMARKADD,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.HiddenWatermarkAdd)\n  })\n_sym_db.RegisterMessage(HiddenWatermarkAdd)\n\nVodListWatermarkResponseResult = _reflection.GeneratedProtocolMessageType('VodListWatermarkResponseResult', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTWATERMARKRESPONSERESULT,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.VodListWatermarkResponseResult)\n  })\n_sym_db.RegisterMessage(VodListWatermarkResponseResult)\n\nVideo = _reflection.GeneratedProtocolMessageType('Video', (_message.Message,), {\n  'DESCRIPTOR' : _VIDEO,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.Video)\n  })\n_sym_db.RegisterMessage(Video)\n\nAudio = _reflection.GeneratedProtocolMessageType('Audio', (_message.Message,), {\n  'DESCRIPTOR' : _AUDIO,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.Audio)\n  })\n_sym_db.RegisterMessage(Audio)\n\nSegment = _reflection.GeneratedProtocolMessageType('Segment', (_message.Message,), {\n  'DESCRIPTOR' : _SEGMENT,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.Segment)\n  })\n_sym_db.RegisterMessage(Segment)\n\nCondition = _reflection.GeneratedProtocolMessageType('Condition', (_message.Message,), {\n  'DESCRIPTOR' : _CONDITION,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.Condition)\n  })\n_sym_db.RegisterMessage(Condition)\n\nParallelParams = _reflection.GeneratedProtocolMessageType('ParallelParams', (_message.Message,), {\n  'DESCRIPTOR' : _PARALLELPARAMS,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.ParallelParams)\n  })\n_sym_db.RegisterMessage(ParallelParams)\n\nEncryption = _reflection.GeneratedProtocolMessageType('Encryption', (_message.Message,), {\n  'DESCRIPTOR' : _ENCRYPTION,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.Encryption)\n  })\n_sym_db.RegisterMessage(Encryption)\n\nVolume = _reflection.GeneratedProtocolMessageType('Volume', (_message.Message,), {\n  'DESCRIPTOR' : _VOLUME,\n  '__module__' : 'volcengine.vod.business.vod_workflow_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Business.Volume)\n  })\n_sym_db.RegisterMessage(Volume)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.vod.model.businessB\\013VodWorkflowP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/business\\240\\001\\001\\330\\001\\001\\312\\002 Volc\\\\Service\\\\Vod\\\\Models\\\\Business\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _WORKFLOWPARAMS_CONDITIONENTRY._options = None\n  _WORKFLOWPARAMS_CONDITIONENTRY._serialized_options = b'8\\001'\n  _LOGOOVERRIDE_VARSENTRY._options = None\n  _LOGOOVERRIDE_VARSENTRY._serialized_options = b'8\\001'\n  _CATEGORYTAGINFO_PARENTINFOENTRY._options = None\n  _CATEGORYTAGINFO_PARENTINFOENTRY._serialized_options = b'8\\001'\n  _STAGESTATUS._serialized_start=14189\n  _STAGESTATUS._serialized_end=14311\n  _VODSTARTWORKFLOWRESULT._serialized_start=153\n  _VODSTARTWORKFLOWRESULT._serialized_end=192\n  _DIRECTURL._serialized_start=194\n  _DIRECTURL._serialized_end=262\n  _WORKFLOWPARAMS._serialized_start=265\n  _WORKFLOWPARAMS._serialized_end=485\n  _WORKFLOWPARAMS_CONDITIONENTRY._serialized_start=437\n  _WORKFLOWPARAMS_CONDITIONENTRY._serialized_end=485\n  _OVERRIDEPARAMS._serialized_start=488\n  _OVERRIDEPARAMS._serialized_end=858\n  _LOGOOVERRIDE._serialized_start=861\n  _LOGOOVERRIDE._serialized_end=1010\n  _LOGOOVERRIDE_VARSENTRY._serialized_start=967\n  _LOGOOVERRIDE_VARSENTRY._serialized_end=1010\n  _TRANSCODEVIDEOOVERRIDE._serialized_start=1013\n  _TRANSCODEVIDEOOVERRIDE._serialized_end=1172\n  _CLIP._serialized_start=1174\n  _CLIP._serialized_end=1216\n  _TRANSCODEAUDIOOVERRIDE._serialized_start=1218\n  _TRANSCODEAUDIOOVERRIDE._serialized_end=1332\n  _SNAPSHOTOVERRIDE._serialized_start=1335\n  _SNAPSHOTOVERRIDE._serialized_end=1539\n  _ENHANCEOVERRIDE._serialized_start=1541\n  _ENHANCEOVERRIDE._serialized_end=1597\n  _TRANSCODERESULT._serialized_start=1600\n  _TRANSCODERESULT._serialized_end=1765\n  _INSPECTION._serialized_start=1768\n  _INSPECTION._serialized_end=1898\n  _QUALITY._serialized_start=1901\n  _QUALITY._serialized_end=2037\n  _DELOGOINFO._serialized_start=2039\n  _DELOGOINFO._serialized_end=2152\n  _VISUALQUALITY._serialized_start=2154\n  _VISUALQUALITY._serialized_end=2278\n  _VOLUMEINFO._serialized_start=2280\n  _VOLUMEINFO._serialized_end=2363\n  _CATEGORYTAGINFO._serialized_start=2366\n  _CATEGORYTAGINFO._serialized_end=2580\n  _CATEGORYTAGINFO_PARENTINFOENTRY._serialized_start=2531\n  _CATEGORYTAGINFO_PARENTINFOENTRY._serialized_end=2580\n  _VODLISTWORKFLOWEXECUTIONRESULT._serialized_start=2583\n  _VODLISTWORKFLOWEXECUTIONRESULT._serialized_end=2734\n  _WORKFLOWEXECUTION._serialized_start=2737\n  _WORKFLOWEXECUTION._serialized_end=3297\n  _VODGETWORKFLOWEXECUTIONDETAILRESULT._serialized_start=3300\n  _VODGETWORKFLOWEXECUTIONDETAILRESULT._serialized_end=3752\n  _EXECUTIONSTAGE._serialized_start=3755\n  _EXECUTIONSTAGE._serialized_end=3950\n  _STAGEDETAIL._serialized_start=3953\n  _STAGEDETAIL._serialized_end=4222\n  _TASKDETAIL._serialized_start=4225\n  _TASKDETAIL._serialized_end=4449\n  _SNAPSHOTPARAMSPOSTER._serialized_start=4451\n  _SNAPSHOTPARAMSPOSTER._serialized_end=4538\n  _SNAPSHOTPARAMSDYNPOST._serialized_start=4540\n  _SNAPSHOTPARAMSDYNPOST._serialized_end=4628\n  _SNAPSHOTPARAMSAIDYNPOST._serialized_start=4630\n  _SNAPSHOTPARAMSAIDYNPOST._serialized_end=4720\n  _SNAPSHOTPARAMSANIMATEDPOSTER._serialized_start=4722\n  _SNAPSHOTPARAMSANIMATEDPOSTER._serialized_end=4817\n  _SNAPSHOTPARAMSSPRITE._serialized_start=4820\n  _SNAPSHOTPARAMSSPRITE._serialized_end=4988\n  _SNAPSHOTPARAMSSAMPLE._serialized_start=4991\n  _SNAPSHOTPARAMSSAMPLE._serialized_end=5170\n  _SNAPSHOTRESULT._serialized_start=5173\n  _SNAPSHOTRESULT._serialized_end=5677\n  _VODWORKFLOWRESULT._serialized_start=5680\n  _VODWORKFLOWRESULT._serialized_end=6028\n  _TASKTEMPLATE._serialized_start=6031\n  _TASKTEMPLATE._serialized_end=6617\n  _TRANSCODEVIDEOTASKPARAMS._serialized_start=6620\n  _TRANSCODEVIDEOTASKPARAMS._serialized_end=7072\n  _BYTEHDTASKPARAMS._serialized_start=7075\n  _BYTEHDTASKPARAMS._serialized_end=7488\n  _TRANSCODEAUDIOTASKPARAMS._serialized_start=7491\n  _TRANSCODEAUDIOTASKPARAMS._serialized_end=7819\n  _SNAPSHOTTASKPARAMS._serialized_start=7822\n  _SNAPSHOTTASKPARAMS._serialized_end=8294\n  _POSTERSNAPSHOTPARAMS._serialized_start=8297\n  _POSTERSNAPSHOTPARAMS._serialized_end=8440\n  _DYNPOSTSNAPSHOTPARAMS._serialized_start=8443\n  _DYNPOSTSNAPSHOTPARAMS._serialized_end=8640\n  _ANIMATEDPOSTERSNAPSHOTPARAMS._serialized_start=8643\n  _ANIMATEDPOSTERSNAPSHOTPARAMS._serialized_end=8834\n  _SPRITESNAPSHOTPARAMS._serialized_start=8837\n  _SPRITESNAPSHOTPARAMS._serialized_end=9060\n  _SAMPLESNAPSHOTPARAMS._serialized_start=9063\n  _SAMPLESNAPSHOTPARAMS._serialized_end=9279\n  _VODTASKTEMPLATERESULT._serialized_start=9281\n  _VODTASKTEMPLATERESULT._serialized_end=9372\n  _VODLISTTASKTEMPLATERESULT._serialized_start=9375\n  _VODLISTTASKTEMPLATERESULT._serialized_end=9508\n  _WORKFLOWTEMPLATE._serialized_start=9511\n  _WORKFLOWTEMPLATE._serialized_end=9791\n  _ACTIVITY._serialized_start=9794\n  _ACTIVITY._serialized_end=10093\n  _TRANSCODEACTIVITY._serialized_start=10096\n  _TRANSCODEACTIVITY._serialized_end=10581\n  _TRANSCODEACTIVITY_ENHANCEPARAMS._serialized_start=10441\n  _TRANSCODEACTIVITY_ENHANCEPARAMS._serialized_end=10493\n  _TRANSCODEACTIVITY_LOGOPARAMS._serialized_start=10495\n  _TRANSCODEACTIVITY_LOGOPARAMS._serialized_end=10527\n  _TRANSCODEACTIVITY_SUBTITLEPARAMS._serialized_start=10529\n  _TRANSCODEACTIVITY_SUBTITLEPARAMS._serialized_end=10581\n  _SNAPSHOTACTIVITY._serialized_start=10583\n  _SNAPSHOTACTIVITY._serialized_end=10701\n  _ENDACTIVITY._serialized_start=10703\n  _ENDACTIVITY._serialized_end=10740\n  _VODWORKFLOWTEMPLATERESULT._serialized_start=10742\n  _VODWORKFLOWTEMPLATERESULT._serialized_end=10845\n  _VODLISTWORKFLOWTEMPLATERESULT._serialized_start=10848\n  _VODLISTWORKFLOWTEMPLATERESULT._serialized_end=10989\n  _LOGOTEMPLATE._serialized_start=10992\n  _LOGOTEMPLATE._serialized_end=11417\n  _ADAPTLOGO._serialized_start=11420\n  _ADAPTLOGO._serialized_end=11558\n  _ANCHORSIZE._serialized_start=11560\n  _ANCHORSIZE._serialized_end=11603\n  _IMAGELOGODEFINITION._serialized_start=11606\n  _IMAGELOGODEFINITION._serialized_end=11889\n  _VIDEOLOGODEFINITION._serialized_start=11892\n  _VIDEOLOGODEFINITION._serialized_end=12175\n  _TEXTLOGODEFINITION._serialized_start=12178\n  _TEXTLOGODEFINITION._serialized_end=12458\n  _LOGODEFINITION._serialized_start=12461\n  _LOGODEFINITION._serialized_end=12735\n  _FONTSHADOW._serialized_start=12737\n  _FONTSHADOW._serialized_end=12798\n  _ADAPTCONCAT._serialized_start=12801\n  _ADAPTCONCAT._serialized_end=12945\n  _CONCATDEFINITION._serialized_start=12947\n  _CONCATDEFINITION._serialized_end=13010\n  _HIDDENWATERMARKADD._serialized_start=13012\n  _HIDDENWATERMARKADD._serialized_end=13063\n  _VODLISTWATERMARKRESPONSERESULT._serialized_start=13066\n  _VODLISTWATERMARKRESPONSERESULT._serialized_end=13204\n  _VIDEO._serialized_start=13207\n  _VIDEO._serialized_end=13536\n  _AUDIO._serialized_start=13539\n  _AUDIO._serialized_end=13692\n  _SEGMENT._serialized_start=13694\n  _SEGMENT._serialized_end=13751\n  _CONDITION._serialized_start=13754\n  _CONDITION._serialized_end=14014\n  _PARALLELPARAMS._serialized_start=14016\n  _PARALLELPARAMS._serialized_end=14049\n  _ENCRYPTION._serialized_start=14051\n  _ENCRYPTION._serialized_end=14079\n  _VOLUME._serialized_start=14081\n  _VOLUME._serialized_end=14187\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/vod/models/request/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/vod/models/request/request_vod_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/request/request_vod.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\nfrom google.protobuf import wrappers_pb2 as google_dot_protobuf_dot_wrappers__pb2\nfrom volcengine.vod.models.business import vod_workflow_pb2 as volcengine_dot_vod_dot_business_dot_vod__workflow__pb2\nfrom volcengine.vod.models.business import vod_upload_pb2 as volcengine_dot_vod_dot_business_dot_vod__upload__pb2\nfrom volcengine.vod.models.business import vod_media_pb2 as volcengine_dot_vod_dot_business_dot_vod__media__pb2\nfrom volcengine.vod.models.business import vod_cdn_pb2 as volcengine_dot_vod_dot_business_dot_vod__cdn__pb2\nfrom volcengine.vod.models.business import vod_migrate_pb2 as volcengine_dot_vod_dot_business_dot_vod__migrate__pb2\nfrom volcengine.vod.models.business import vod_space_pb2 as volcengine_dot_vod_dot_business_dot_vod__space__pb2\nfrom volcengine.vod.models.business import vod_drama_pb2 as volcengine_dot_vod_dot_business_dot_vod__drama__pb2\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n(volcengine/vod/request/request_vod.proto\\x12\\x1dVolcengine.Vod.Models.Request\\x1a\\x1egoogle/protobuf/wrappers.proto\\x1a*volcengine/vod/business/vod_workflow.proto\\x1a(volcengine/vod/business/vod_upload.proto\\x1a\\'volcengine/vod/business/vod_media.proto\\x1a%volcengine/vod/business/vod_cdn.proto\\x1a)volcengine/vod/business/vod_migrate.proto\\x1a\\'volcengine/vod/business/vod_space.proto\\x1a\\'volcengine/vod/business/vod_drama.proto\\\"\\x84\\x03\\n\\x18VodGetAllPlayInfoRequest\\x12\\x0c\\n\\x04Vids\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07\\x46ormats\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06\\x43odecs\\x18\\x03 \\x01(\\t\\x12\\x13\\n\\x0b\\x44\\x65\\x66initions\\x18\\x04 \\x01(\\t\\x12\\x11\\n\\tFileTypes\\x18\\x05 \\x01(\\t\\x12\\x11\\n\\tLogoTypes\\x18\\x06 \\x01(\\t\\x12\\x19\\n\\x11NeedEncryptStream\\x18\\x07 \\x01(\\t\\x12\\x0b\\n\\x03Ssl\\x18\\x08 \\x01(\\t\\x12\\x12\\n\\nNeedThumbs\\x18\\t \\x01(\\t\\x12\\x17\\n\\x0fNeedBarrageMask\\x18\\n \\x01(\\t\\x12\\x0f\\n\\x07\\x43\\x64nType\\x18\\x0b \\x01(\\t\\x12\\x11\\n\\tUnionInfo\\x18\\x0c \\x01(\\t\\x12\\x11\\n\\tPlayScene\\x18\\r \\x01(\\t\\x12\\x1a\\n\\x12\\x44rmExpireTimestamp\\x18\\x0e \\x01(\\t\\x12\\x0f\\n\\x07HDRType\\x18\\x0f \\x01(\\t\\x12 \\n\\x18KeyFrameAlignmentVersion\\x18\\x10 \\x01(\\t\\x12\\x12\\n\\nUserAction\\x18\\x11 \\x01(\\t\\x12\\x0f\\n\\x07Quality\\x18\\x12 \\x01(\\t\\\"\\xe2\\x03\\n\\x15VodGetPlayInfoRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x02 \\x01(\\t\\x12\\r\\n\\x05\\x43odec\\x18\\x03 \\x01(\\t\\x12\\x12\\n\\nDefinition\\x18\\x04 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileType\\x18\\x05 \\x01(\\t\\x12\\x10\\n\\x08LogoType\\x18\\x06 \\x01(\\t\\x12\\x0e\\n\\x06\\x42\\x61se64\\x18\\x07 \\x01(\\t\\x12\\x0b\\n\\x03Ssl\\x18\\x08 \\x01(\\t\\x12\\x12\\n\\nNeedThumbs\\x18\\t \\x01(\\t\\x12\\x17\\n\\x0fNeedBarrageMask\\x18\\n \\x01(\\t\\x12\\x0f\\n\\x07\\x43\\x64nType\\x18\\x0b \\x01(\\t\\x12\\x11\\n\\tUnionInfo\\x18\\x0c \\x01(\\t\\x12\\x15\\n\\rHDRDefinition\\x18\\r \\x01(\\t\\x12\\x11\\n\\tPlayScene\\x18\\x0e \\x01(\\t\\x12\\x1a\\n\\x12\\x44rmExpireTimestamp\\x18\\x0f \\x01(\\t\\x12\\x0f\\n\\x07Quality\\x18\\x10 \\x01(\\t\\x12\\x12\\n\\nPlayConfig\\x18\\x11 \\x01(\\t\\x12\\x14\\n\\x0cNeedOriginal\\x18\\x12 \\x01(\\t\\x12\\x13\\n\\x0b\\x46orceExpire\\x18\\x13 \\x01(\\t\\x12\\x0e\\n\\x06GetAll\\x18\\x14 \\x01(\\x08\\x12\\x1c\\n\\x14\\x44igitalWatermarkType\\x18\\x15 \\x01(\\t\\x12\\x11\\n\\tUserToken\\x18\\x16 \\x01(\\t\\x12\\x0e\\n\\x06\\x44rmKEK\\x18\\x17 \\x01(\\t\\x12\\x10\\n\\x08JSPlayer\\x18\\x18 \\x01(\\t\\\"g\\n\\x1fVodGetPrivateDrmPlayAuthRequest\\x12\\x0f\\n\\x07\\x44rmType\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Vid\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0bPlayAuthIds\\x18\\x03 \\x01(\\t\\x12\\x11\\n\\tUnionInfo\\x18\\x04 \\x01(\\t\\\"Q\\n\\x1dVodGetHlsDecryptionKeyRequest\\x12\\x14\\n\\x0c\\x44rmAuthToken\\x18\\x01 \\x01(\\t\\x12\\n\\n\\x02\\x41k\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06Source\\x18\\x03 \\x01(\\t\\\"5\\n VodCreateHlsDecryptionKeyRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\\"\\x98\\x01\\n+VodGetPlayInfoWithLiveTimeShiftSceneRequest\\x12\\x11\\n\\tStoreUris\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tSpaceName\\x18\\x02 \\x01(\\t\\x12\\x0b\\n\\x03Ssl\\x18\\x03 \\x01(\\t\\x12\\x17\\n\\x0f\\x45xpireTimestamp\\x18\\x04 \\x01(\\t\\x12\\x1d\\n\\x15NeedComposeBucketName\\x18\\x05 \\x01(\\t\\\"*\\n\\x1cVodDescribeDrmDataKeyRequest\\x12\\n\\n\\x02\\x41k\\x18\\x01 \\x01(\\t\\\"\\xac\\x01\\n\\x1eVodSubmitMoveObjectTaskRequest\\x12\\x13\\n\\x0bSourceSpace\\x18\\x01 \\x01(\\t\\x12\\x16\\n\\x0eSourceFileName\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0bTargetSpace\\x18\\x03 \\x01(\\t\\x12\\x16\\n\\x0eTargetFileName\\x18\\x04 \\x01(\\t\\x12\\x18\\n\\x10SaveSourceObject\\x18\\x05 \\x01(\\x08\\x12\\x16\\n\\x0e\\x46orceOverwrite\\x18\\x06 \\x01(\\x08\\\"]\\n!VodQueryMoveObjectTaskInfoRequest\\x12\\x0e\\n\\x06TaskId\\x18\\x01 \\x01(\\t\\x12\\x13\\n\\x0bSourceSpace\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0bTargetSpace\\x18\\x03 \\x01(\\t\\\"y\\n VodSubmitBlockObjectTasksRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tOperation\\x18\\x02 \\x01(\\t\\x12\\x1b\\n\\x13\\x46ileNamesUrlEncoded\\x18\\x03 \\x01(\\t\\x12\\x12\\n\\nRefreshCdn\\x18\\x04 \\x01(\\t\\\"a\\n\\x1eVodListBlockObjectTasksRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x1b\\n\\x13\\x46ileNamesUrlEncoded\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07TaskIds\\x18\\x03 \\x01(\\t\\\"m\\n\\x13VodUrlUploadRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x43\\n\\x07URLSets\\x18\\x02 \\x03(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.VodUrlUploadURLSet\\\"/\\n\\x1dVodQueryUploadTaskInfoRequest\\x12\\x0e\\n\\x06JobIds\\x18\\x01 \\x01(\\t\\\"\\x87\\x02\\n\\x19VodApplyUploadInfoRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nSessionKey\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileSize\\x18\\x03 \\x01(\\x01\\x12\\x10\\n\\x08\\x46ileType\\x18\\x04 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileName\\x18\\x05 \\x01(\\t\\x12\\x14\\n\\x0cStorageClass\\x18\\x06 \\x01(\\x05\\x12\\x15\\n\\rFileExtension\\x18\\x07 \\x01(\\t\\x12\\x19\\n\\x11\\x43lientNetWorkMode\\x18\\x08 \\x01(\\t\\x12\\x15\\n\\rClientIDCMode\\x18\\t \\x01(\\t\\x12\\x14\\n\\x0cNeedFallback\\x18\\n \\x01(\\x08\\x12\\x18\\n\\x10UploadHostPrefer\\x18\\x0b \\x01(\\t\\\"\\xfb\\x02\\n\\x15VodUploadMediaRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x46ilePath\\x18\\x02 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x03 \\x01(\\t\\x12\\x11\\n\\tFunctions\\x18\\x04 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileName\\x18\\x05 \\x01(\\t\\x12\\x14\\n\\x0cStorageClass\\x18\\x06 \\x01(\\x05\\x12\\x15\\n\\rFileExtension\\x18\\x07 \\x01(\\t\\x12\\x17\\n\\x0fVodUploadSource\\x18\\x08 \\x01(\\t\\x12\\x16\\n\\x0eUploadStrategy\\x18\\t \\x01(\\x05\\x12\\x13\\n\\x0bParallelNum\\x18\\n \\x01(\\x05\\x12\\x19\\n\\x11\\x43lientNetWorkMode\\x18\\x0b \\x01(\\t\\x12\\x15\\n\\rClientIDCMode\\x18\\x0c \\x01(\\t\\x12\\x12\\n\\nExpireTime\\x18\\r \\x01(\\t\\x12\\x18\\n\\x10UploadHostPrefer\\x18\\x0e \\x01(\\t\\x12\\x11\\n\\tChunkSize\\x18\\x0f \\x01(\\x03\\x12\\x1c\\n\\x14SupportParseManifest\\x18\\x10 \\x01(\\x08\\\"\\xaf\\x02\\n\\x18VodUploadMaterialRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x46ilePath\\x18\\x02 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x03 \\x01(\\t\\x12\\x11\\n\\tFunctions\\x18\\x04 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileType\\x18\\x05 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileName\\x18\\x06 \\x01(\\t\\x12\\x15\\n\\rFileExtension\\x18\\x07 \\x01(\\t\\x12\\x16\\n\\x0eUploadStrategy\\x18\\x08 \\x01(\\x05\\x12\\x13\\n\\x0bParallelNum\\x18\\t \\x01(\\x05\\x12\\x19\\n\\x11\\x43lientNetWorkMode\\x18\\n \\x01(\\t\\x12\\x15\\n\\rClientIDCMode\\x18\\x0b \\x01(\\t\\x12\\x18\\n\\x10UploadHostPrefer\\x18\\x0c \\x01(\\t\\x12\\x11\\n\\tChunkSize\\x18\\r \\x01(\\x03\\\"\\x9b\\x02\\n\\x16VodUploadObjectRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08\\x46ilePath\\x18\\x02 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x03 \\x01(\\t\\x12\\x11\\n\\tFunctions\\x18\\x04 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileName\\x18\\x05 \\x01(\\t\\x12\\x15\\n\\rFileExtension\\x18\\x06 \\x01(\\t\\x12\\x16\\n\\x0eUploadStrategy\\x18\\x07 \\x01(\\x05\\x12\\x13\\n\\x0bParallelNum\\x18\\x08 \\x01(\\x05\\x12\\x19\\n\\x11\\x43lientNetWorkMode\\x18\\t \\x01(\\t\\x12\\x15\\n\\rClientIDCMode\\x18\\n \\x01(\\t\\x12\\x18\\n\\x10UploadHostPrefer\\x18\\x0b \\x01(\\t\\x12\\x11\\n\\tChunkSize\\x18\\x0c \\x01(\\x03\\\"\\x99\\x01\\n\\x1aVodCommitUploadInfoRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nSessionKey\\x18\\x02 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x03 \\x01(\\t\\x12\\x11\\n\\tFunctions\\x18\\x04 \\x01(\\t\\x12\\x17\\n\\x0fVodUploadSource\\x18\\x05 \\x01(\\t\\x12\\x12\\n\\nExpireTime\\x18\\x06 \\x01(\\t\\\"=\\n\\x17VodUrlUploadJsonRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07URLSets\\x18\\x02 \\x01(\\t\\\"a\\n\\x1dVodParseUploadManifestRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x14\\n\\x0cManifestType\\x18\\x02 \\x01(\\t\\x12\\x17\\n\\x0fManifestContent\\x18\\x03 \\x01(\\t\\\"i\\n&VodListFileMetaInfosByFileNamesRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x18\\n\\x10\\x46ileNameEncodeds\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nBucketName\\x18\\x03 \\x01(\\t\\\".\\n\\x1eVodGetRecommendedPosterRequest\\x12\\x0c\\n\\x04Vids\\x18\\x01 \\x01(\\t\\\"A\\n\\\"VodUpdateMediaPublishStatusRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x02 \\x01(\\t\\\"n\\n!VodUpdateMediaStorageClassRequest\\x12\\x0c\\n\\x04Vids\\x18\\x01 \\x01(\\t\\x12\\x14\\n\\x0cStorageClass\\x18\\x02 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07\\x46ileIds\\x18\\x04 \\x01(\\t\\\"\\xce\\x02\\n\\x19VodUpdateMediaInfoRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12/\\n\\tPosterUri\\x18\\x02 \\x01(\\x0b\\x32\\x1c.google.protobuf.StringValue\\x12+\\n\\x05Title\\x18\\x03 \\x01(\\x0b\\x32\\x1c.google.protobuf.StringValue\\x12\\x31\\n\\x0b\\x44\\x65scription\\x18\\x04 \\x01(\\x0b\\x32\\x1c.google.protobuf.StringValue\\x12*\\n\\x04Tags\\x18\\x05 \\x01(\\x0b\\x32\\x1c.google.protobuf.StringValue\\x12\\x35\\n\\x10\\x43lassificationId\\x18\\x06 \\x01(\\x0b\\x32\\x1b.google.protobuf.Int64Value\\x12\\x30\\n\\nExpireTime\\x18\\x07 \\x01(\\x0b\\x32\\x1c.google.protobuf.StringValue\\\"\\'\\n\\x17VodGetMediaInfosRequest\\x12\\x0c\\n\\x04Vids\\x18\\x01 \\x01(\\t\\\":\\n\\x18VodDeleteMaterialRequest\\x12\\x0b\\n\\x03Mid\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tSpaceName\\x18\\x02 \\x01(\\t\\\";\\n\\x15VodDeleteMediaRequest\\x12\\x0c\\n\\x04Vids\\x18\\x01 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x02 \\x01(\\t\\\"P\\n\\x1aVodDeleteTranscodesRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07\\x46ileIds\\x18\\x02 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x03 \\x01(\\t\\\"D\\n\\x1cVodDeleteMediaTosFileRequest\\x12\\x11\\n\\tFileNames\\x18\\x01 \\x03(\\t\\x12\\x11\\n\\tSpaceName\\x18\\x02 \\x01(\\t\\\"\\x8a\\x02\\n\\x16VodGetMediaListRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Vid\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x03 \\x01(\\t\\x12\\r\\n\\x05Order\\x18\\x04 \\x01(\\t\\x12\\x0c\\n\\x04Tags\\x18\\x05 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x06 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x07 \\x01(\\t\\x12\\x0e\\n\\x06Offset\\x18\\x08 \\x01(\\t\\x12\\x10\\n\\x08PageSize\\x18\\t \\x01(\\t\\x12\\x19\\n\\x11\\x43lassificationIds\\x18\\n \\x01(\\t\\x12\\x19\\n\\x11TosStorageClasses\\x18\\x0b \\x01(\\t\\x12\\x18\\n\\x10VodUploadSources\\x18\\x0c \\x01(\\t\\x12\\r\\n\\x05Title\\x18\\r \\x01(\\t\\\"\\xe6\\x01\\n\\x1dVodGetSubtitleInfoListRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07\\x46ileIds\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tLanguages\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07\\x46ormats\\x18\\x04 \\x01(\\t\\x12\\x13\\n\\x0bLanguageIds\\x18\\x05 \\x01(\\t\\x12\\x13\\n\\x0bSubtitleIds\\x18\\x06 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x07 \\x01(\\t\\x12\\r\\n\\x05Title\\x18\\x08 \\x01(\\t\\x12\\x0b\\n\\x03Tag\\x18\\t \\x01(\\t\\x12\\x0e\\n\\x06Offset\\x18\\n \\x01(\\t\\x12\\x10\\n\\x08PageSize\\x18\\x0b \\x01(\\t\\x12\\x0b\\n\\x03Ssl\\x18\\x0c \\x01(\\t\\\"r\\n\\x1eVodUpdateSubtitleStatusRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07\\x46ileIds\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tLanguages\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07\\x46ormats\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x05 \\x01(\\t\\\"\\xb5\\x01\\n\\x1cVodUpdateSubtitleInfoRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x46ileId\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08Language\\x18\\x03 \\x01(\\t\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x04 \\x01(\\t\\x12+\\n\\x05Title\\x18\\x06 \\x01(\\x0b\\x32\\x1c.google.protobuf.StringValue\\x12)\\n\\x03Tag\\x18\\x07 \\x01(\\x0b\\x32\\x1c.google.protobuf.StringValue\\\"w\\n VodGetAuditFramesForAuditRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08Strategy\\x18\\x02 \\x01(\\t\\x12\\x19\\n\\x11MinNumberOfFrames\\x18\\x03 \\x01(\\t\\x12\\x19\\n\\x11MaxNumberOfFrames\\x18\\x04 \\x01(\\t\\\"\\xa1\\x02\\n\\x1dVodGetMLFramesForAuditRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08Strategy\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08\\x46rameOpt\\x18\\x03 \\x01(\\t\\x12\\x10\\n\\x08\\x46rameFps\\x18\\x04 \\x01(\\t\\x12\\x16\\n\\x0eNumberOfFrames\\x18\\x05 \\x01(\\t\\x12\\x14\\n\\x0c\\x43utTimeMills\\x18\\x06 \\x01(\\t\\x12\\x16\\n\\x0eNeedFirstFrame\\x18\\x07 \\x01(\\t\\x12\\x15\\n\\rNeedLastFrame\\x18\\x08 \\x01(\\t\\x12\\x15\\n\\rStartTimeMill\\x18\\t \\x01(\\t\\x12\\x13\\n\\x0b\\x45ndTimeMill\\x18\\n \\x01(\\t\\x12\\x19\\n\\x11MinNumberOfFrames\\x18\\x0b \\x01(\\t\\x12\\x19\\n\\x11MaxNumberOfFrames\\x18\\x0c \\x01(\\t\\\"U\\n!VodGetBetterFramesForAuditRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08Strategy\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tCoverRate\\x18\\x03 \\x01(\\t\\\"?\\n\\x1eVodGetAudioInfoForAuditRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08Strategy\\x18\\x02 \\x01(\\t\\\"P\\n/VodGetAutomaticSpeechRecognitionForAuditRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08Strategy\\x18\\x02 \\x01(\\t\\\"I\\n(VodGetAudioEventDetectionForAuditRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08Strategy\\x18\\x02 \\x01(\\t\\\"q\\n#VodCreateVideoClassificationRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05Level\\x18\\x02 \\x01(\\x05\\x12\\x10\\n\\x08ParentId\\x18\\x03 \\x01(\\x03\\x12\\x16\\n\\x0e\\x43lassification\\x18\\x04 \\x01(\\t\\\"j\\n#VodUpdateVideoClassificationRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x18\\n\\x10\\x43lassificationId\\x18\\x02 \\x01(\\x03\\x12\\x16\\n\\x0e\\x43lassification\\x18\\x03 \\x01(\\t\\\"R\\n#VodDeleteVideoClassificationRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x18\\n\\x10\\x43lassificationId\\x18\\x02 \\x01(\\x03\\\"Q\\n\\\"VodListVideoClassificationsRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x18\\n\\x10\\x43lassificationId\\x18\\x02 \\x01(\\x03\\\"&\\n\\x17VodListSnapshotsRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\\"Z\\n\\x15VodGetFileListRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06Prefix\\x18\\x02 \\x01(\\t\\x12\\r\\n\\x05Limit\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07Starter\\x18\\x04 \\x01(\\t\\\"\\xad\\x01\\n\\x16VodGetFileInfosRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x18\\n\\x10\\x45ncodedFileNames\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nBucketName\\x18\\x03 \\x01(\\t\\x12\\x17\\n\\x0fNeedDownloadUrl\\x18\\x04 \\x01(\\x08\\x12\\x1e\\n\\x16\\x44ownloadUrlNetworkType\\x18\\x05 \\x01(\\t\\x12\\x19\\n\\x11\\x44ownloadUrlExpire\\x18\\x06 \\x01(\\x03\\\"\\x95\\x01\\n VodUpdateFileStorageClassRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12J\\n\\x0f\\x46ileUpdateInfos\\x18\\x02 \\x03(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.VodFileUpdateInfo\\x12\\x12\\n\\nBucketName\\x18\\x03 \\x01(\\t\\\"P\\n\\x1bVodGetInnerAuditURLsRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Vid\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tFileNames\\x18\\x03 \\x03(\\t\\\"R\\n\\x1fVodGetAdAuditResultByVidRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Vid\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x46ileIds\\x18\\x03 \\x03(\\t\\\"-\\n\\x1eVodExtractMediaMetaTaskRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\\"\\xa3\\x02\\n\\x17VodStartWorkflowRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nTemplateId\\x18\\x02 \\x01(\\t\\x12=\\n\\x05Input\\x18\\x03 \\x01(\\x0b\\x32..Volcengine.Vod.Models.Business.WorkflowParams\\x12\\x10\\n\\x08Priority\\x18\\x04 \\x01(\\x05\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x05 \\x01(\\t\\x12\\x19\\n\\x11\\x45nableLowPriority\\x18\\x06 \\x01(\\x08\\x12<\\n\\tDirectUrl\\x18\\x07 \\x01(\\x0b\\x32).Volcengine.Vod.Models.Business.DirectUrl\\x12\\x12\\n\\nTaskListId\\x18\\x08 \\x01(\\t\\x12\\x13\\n\\x0b\\x43lientToken\\x18\\t \\x01(\\t\\\"D\\n!VodRetrieveTranscodeResultRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nResultType\\x18\\x02 \\x01(\\t\\\"\\x9f\\x02\\n\\x1fVodListWorkflowExecutionRequest\\x12\\r\\n\\x05RunId\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Vid\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tSpaceName\\x18\\x03 \\x01(\\t\\x12\\x12\\n\\nTemplateId\\x18\\x04 \\x01(\\t\\x12\\x12\\n\\nTaskListId\\x18\\x05 \\x01(\\t\\x12\\x19\\n\\x11\\x45nableLowPriority\\x18\\x06 \\x01(\\t\\x12\\x11\\n\\tJobSource\\x18\\x07 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x08 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\t \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\n \\x01(\\t\\x12\\x10\\n\\x08PageSize\\x18\\x0b \\x01(\\t\\x12\\x0e\\n\\x06Offset\\x18\\x0c \\x01(\\t\\x12\\x12\\n\\nOrderByKey\\x18\\r \\x01(\\t\\x12\\r\\n\\x05Order\\x18\\x0e \\x01(\\t\\\"5\\n$VodGetWorkflowExecutionDetailRequest\\x12\\r\\n\\x05RunId\\x18\\x01 \\x01(\\t\\\",\\n\\x1bVodGetWorkflowResultRequest\\x12\\r\\n\\x05RunId\\x18\\x01 \\x01(\\t\\\"N\\n$VodGetWorkflowExecutionStatusRequest\\x12\\r\\n\\x05RunId\\x18\\x01 \\x01(\\t\\x12\\x17\\n\\x0fNeedTasksDetail\\x18\\x02 \\x01(\\t\\\"\\xba\\x03\\n\\x1cVodCreateTaskTemplateRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Name\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0b\\x44\\x65scription\\x18\\x03 \\x01(\\t\\x12\\x10\\n\\x08TaskType\\x18\\x07 \\x01(\\t\\x12Z\\n\\x18TranscodeVideoTaskParams\\x18\\x08 \\x01(\\x0b\\x32\\x38.Volcengine.Vod.Models.Business.TranscodeVideoTaskParams\\x12J\\n\\x10\\x42yteHDTaskParams\\x18\\x0b \\x01(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.ByteHDTaskParams\\x12Z\\n\\x18TranscodeAudioTaskParams\\x18\\x0c \\x01(\\x0b\\x32\\x38.Volcengine.Vod.Models.Business.TranscodeAudioTaskParams\\x12N\\n\\x12SnapshotTaskParams\\x18\\r \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.SnapshotTaskParams\\\"\\xbb\\x03\\n\\x1cVodUpdateTaskTemplateRequest\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Name\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0b\\x44\\x65scription\\x18\\x03 \\x01(\\t\\x12\\x10\\n\\x08TaskType\\x18\\x07 \\x01(\\t\\x12Z\\n\\x18TranscodeVideoTaskParams\\x18\\x08 \\x01(\\x0b\\x32\\x38.Volcengine.Vod.Models.Business.TranscodeVideoTaskParams\\x12J\\n\\x10\\x42yteHDTaskParams\\x18\\x0b \\x01(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.ByteHDTaskParams\\x12Z\\n\\x18TranscodeAudioTaskParams\\x18\\x0c \\x01(\\x0b\\x32\\x38.Volcengine.Vod.Models.Business.TranscodeAudioTaskParams\\x12N\\n\\x12SnapshotTaskParams\\x18\\r \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.SnapshotTaskParams\\\"2\\n\\x1cVodDeleteTaskTemplateRequest\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x01(\\t\\\"/\\n\\x19VodGetTaskTemplateRequest\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x01(\\t\\\"\\xb3\\x01\\n\\x1aVodListTaskTemplateRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nTemplateId\\x18\\x02 \\x01(\\t\\x12\\x0c\\n\\x04Name\\x18\\x03 \\x01(\\t\\x12\\x10\\n\\x08TaskType\\x18\\x04 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x06 \\x01(\\t\\x12\\r\\n\\x05Limit\\x18\\x07 \\x01(\\x05\\x12\\x0e\\n\\x06Offset\\x18\\x08 \\x01(\\x05\\x12\\x12\\n\\nOrderByKey\\x18\\t \\x01(\\t\\x12\\r\\n\\x05Order\\x18\\n \\x01(\\t\\\"\\xa8\\x02\\n\\x19VodCreateWatermarkRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Name\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0b\\x44\\x65scription\\x18\\x03 \\x01(\\t\\x12\\x10\\n\\x08LogoType\\x18\\x07 \\x01(\\t\\x12\\x38\\n\\x05Logos\\x18\\x08 \\x03(\\x0b\\x32).Volcengine.Vod.Models.Business.AdaptLogo\\x12<\\n\\x07\\x43oncats\\x18\\t \\x03(\\x0b\\x32+.Volcengine.Vod.Models.Business.AdaptConcat\\x12K\\n\\x0fHiddenWatermark\\x18\\n \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.HiddenWatermarkAdd\\\"\\xa9\\x02\\n\\x19VodUpdateWatermarkRequest\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Name\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0b\\x44\\x65scription\\x18\\x03 \\x01(\\t\\x12\\x10\\n\\x08LogoType\\x18\\x07 \\x01(\\t\\x12\\x38\\n\\x05Logos\\x18\\x08 \\x03(\\x0b\\x32).Volcengine.Vod.Models.Business.AdaptLogo\\x12<\\n\\x07\\x43oncats\\x18\\t \\x03(\\x0b\\x32+.Volcengine.Vod.Models.Business.AdaptConcat\\x12K\\n\\x0fHiddenWatermark\\x18\\n \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.HiddenWatermarkAdd\\\"/\\n\\x19VodDeleteWatermarkRequest\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x01(\\t\\\",\\n\\x16VodGetWatermarkRequest\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x01(\\t\\\"\\x9e\\x01\\n\\x17VodListWatermarkRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nTemplateId\\x18\\x02 \\x01(\\t\\x12\\x0c\\n\\x04Name\\x18\\x03 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x05 \\x01(\\t\\x12\\r\\n\\x05Limit\\x18\\x06 \\x01(\\x05\\x12\\x0e\\n\\x06Offset\\x18\\x07 \\x01(\\x05\\x12\\x12\\n\\nOrderByKey\\x18\\x08 \\x01(\\t\\x12\\r\\n\\x05Order\\x18\\t \\x01(\\t\\\"\\x96\\x01\\n VodCreateWorkflowTemplateRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Name\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0b\\x44\\x65scription\\x18\\x03 \\x01(\\t\\x12<\\n\\nActivities\\x18\\x07 \\x03(\\x0b\\x32(.Volcengine.Vod.Models.Business.Activity\\\"\\x97\\x01\\n VodUpdateWorkflowTemplateRequest\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Name\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0b\\x44\\x65scription\\x18\\x03 \\x01(\\t\\x12<\\n\\nActivities\\x18\\x07 \\x03(\\x0b\\x32(.Volcengine.Vod.Models.Business.Activity\\\"6\\n VodDeleteWorkflowTemplateRequest\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x01(\\t\\\"3\\n\\x1dVodGetWorkflowTemplateRequest\\x12\\x12\\n\\nTemplateId\\x18\\x01 \\x01(\\t\\\"\\xa5\\x01\\n\\x1eVodListWorkflowTemplateRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nTemplateId\\x18\\x02 \\x01(\\t\\x12\\x0c\\n\\x04Name\\x18\\x03 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x05 \\x01(\\t\\x12\\r\\n\\x05Limit\\x18\\x06 \\x01(\\x05\\x12\\x0e\\n\\x06Offset\\x18\\x07 \\x01(\\x05\\x12\\x12\\n\\nOrderByKey\\x18\\x08 \\x01(\\t\\x12\\r\\n\\x05Order\\x18\\t \\x01(\\t\\\"\\x9c\\x01\\n#VodSubmitDirectEditTaskAsyncRequest\\x12\\x10\\n\\x08Uploader\\x18\\x01 \\x01(\\t\\x12\\x13\\n\\x0b\\x41pplication\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tEditParam\\x18\\x04 \\x01(\\x0c\\x12\\x10\\n\\x08Priority\\x18\\x05 \\x01(\\x05\\x12\\x13\\n\\x0b\\x43\\x61llbackUri\\x18\\x06 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x07 \\x01(\\t\\\"^\\n\\\"VodSubmitDirectEditTaskSyncRequest\\x12\\x10\\n\\x08Uploader\\x18\\x01 \\x01(\\t\\x12\\x13\\n\\x0b\\x41pplication\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tEditParam\\x18\\x03 \\x01(\\x0c\\\"/\\n\\x1dVodGetDirectEditResultRequest\\x12\\x0e\\n\\x06ReqIds\\x18\\x01 \\x03(\\t\\\"0\\n\\x1fVodGetDirectEditProgressRequest\\x12\\r\\n\\x05ReqId\\x18\\x01 \\x01(\\t\\\"/\\n\\x1eVodCancelDirectEditTaskRequest\\x12\\r\\n\\x05ReqId\\x18\\x01 \\x01(\\t\\\"g\\n\\x1cVodAsyncVCreativeTaskRequest\\x12\\x10\\n\\x08Uploader\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08ParamStr\\x18\\x02 \\x01(\\t\\x12\\r\\n\\x05Scene\\x18\\x03 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x04 \\x01(\\t\\\"7\\n VodGetVCreativeTaskResultRequest\\x12\\x13\\n\\x0bVCreativeId\\x18\\x01 \\x01(\\t\\\"*\\n\\x15VodDeleteSpaceRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\\"v\\n\\x15VodCreateSpaceRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x13\\n\\x0bProjectName\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0b\\x44\\x65scription\\x18\\x03 \\x01(\\t\\x12\\x0e\\n\\x06Region\\x18\\x04 \\x01(\\t\\x12\\x10\\n\\x08UserName\\x18\\x05 \\x01(\\t\\\"-\\n\\x18VodGetSpaceDetailRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\\"4\\n\\x13VodListSpaceRequest\\x12\\x0e\\n\\x06Offset\\x18\\x01 \\x01(\\x01\\x12\\r\\n\\x05Limit\\x18\\x02 \\x01(\\x01\\\"u\\n\\x15VodUpdateSpaceRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x19\\n\\x11SourceProjectName\\x18\\x02 \\x01(\\t\\x12\\x19\\n\\x11TargetProjectName\\x18\\x03 \\x01(\\t\\x12\\x13\\n\\x0b\\x44\\x65scription\\x18\\x04 \\x01(\\t\\\"^\\n!VodUpdateSpaceUploadConfigRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tConfigKey\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0b\\x43onfigValue\\x18\\x03 \\x01(\\t\\\"8\\n#VodDescribeUploadSpaceConfigRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\\"\\x86\\x04\\n!VodUpdateUploadSpaceConfigRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nAutoPoster\\x18\\x02 \\x01(\\t\\x12N\\n\\x12\\x43ustomPosterConfig\\x18\\x03 \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.CustomPosterConfig\\x12\\x15\\n\\rGetPosterMode\\x18\\x04 \\x01(\\t\\x12\\x1b\\n\\x13\\x41utoPosterCandidate\\x18\\x05 \\x01(\\t\\x12\\x15\\n\\rAutoTranscode\\x18\\x06 \\x01(\\t\\x12H\\n\\x0fTranscodeConfig\\x18\\x07 \\x01(\\x0b\\x32/.Volcengine.Vod.Models.Business.TranscodeConfig\\x12\\x1a\\n\\x12\\x41utoSetVideoStatus\\x18\\x08 \\x01(\\t\\x12\\x17\\n\\x0fUploadOverwrite\\x18\\t \\x01(\\t\\x12\\x1d\\n\\x15\\x43\\x61llbackReturnPlayUrl\\x18\\n \\x01(\\t\\x12\\x1b\\n\\x13\\x43\\x61llbackReturnRunId\\x18\\x0b \\x01(\\t\\x12\\x13\\n\\x0bGetMetaMode\\x18\\x0c \\x01(\\t\\x12\\x1f\\n\\x17\\x41utoGetArchiveVideoMeta\\x18\\r \\x01(\\t\\x12\\x1a\\n\\x12\\x41utoGetIAVideoMeta\\x18\\x0e \\x01(\\t\\x12\\x12\\n\\nMetaGetMd5\\x18\\x0f \\x01(\\t\\\"\\x95\\x01\\n%VodDescribeVodSpaceStorageDataRequest\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x04 \\x01(\\x05\\x12\\x0c\\n\\x04Type\\x18\\x05 \\x01(\\t\\x12\\x12\\n\\nRegionList\\x18\\x06 \\x01(\\t\\\"\\\\\\n\\x1eVodUpdateDomainPlayRuleRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x15\\n\\rDefaultDomain\\x18\\x02 \\x01(\\t\\x12\\x10\\n\\x08PlayRule\\x18\\x03 \\x01(\\x05\\\"r\\n\\x1eVodAddDomainToSchedulerRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nDomainType\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x03 \\x01(\\t\\x12\\x19\\n\\x11SourceStationType\\x18\\x04 \\x01(\\x05\\\"w\\n#VodRemoveDomainFromSchedulerRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nDomainType\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x03 \\x01(\\t\\x12\\x19\\n\\x11SourceStationType\\x18\\x04 \\x01(\\x05\\\"O\\n\\x16VodDeleteDomainRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nDomainType\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x03 \\x01(\\t\\\"i\\n\\x15VodStartDomainRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nDomainType\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x03 \\x01(\\t\\x12\\x19\\n\\x11SourceStationType\\x18\\x04 \\x01(\\x05\\\"h\\n\\x14VodStopDomainRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nDomainType\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x03 \\x01(\\t\\x12\\x19\\n\\x11SourceStationType\\x18\\x04 \\x01(\\x05\\\"w\\n\\x14VodListDomainRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nDomainType\\x18\\x02 \\x01(\\t\\x12\\x19\\n\\x11SourceStationType\\x18\\x03 \\x01(\\x05\\x12\\x0e\\n\\x06Offset\\x18\\x04 \\x01(\\x05\\x12\\r\\n\\x05Limit\\x18\\x05 \\x01(\\x05\\\"O\\n\\x1eVodCreateCdnRefreshTaskRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Urls\\x18\\x02 \\x01(\\t\\x12\\x0c\\n\\x04Type\\x18\\x03 \\x01(\\t\\\"A\\n\\x1eVodCreateCdnPreloadTaskRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Urls\\x18\\x02 \\x01(\\t\\\"\\xc2\\x01\\n\\x16VodListCdnTasksRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06TaskId\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nDomainName\\x18\\x03 \\x01(\\t\\x12\\x10\\n\\x08TaskType\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x05 \\x01(\\t\\x12\\x16\\n\\x0eStartTimestamp\\x18\\x06 \\x01(\\x05\\x12\\x14\\n\\x0c\\x45ndTimestamp\\x18\\x07 \\x01(\\x05\\x12\\x0f\\n\\x07PageNum\\x18\\x08 \\x01(\\x05\\x12\\x10\\n\\x08PageSize\\x18\\t \\x01(\\x05\\\"\\xb4\\x01\\n\\x1aVodListCdnAccessLogRequest\\x12\\x0f\\n\\x07\\x44omains\\x18\\x01 \\x01(\\t\\x12\\x16\\n\\x0eStartTimestamp\\x18\\x02 \\x01(\\x05\\x12\\x14\\n\\x0c\\x45ndTimestamp\\x18\\x03 \\x01(\\x05\\x12\\x11\\n\\tSpaceName\\x18\\x04 \\x01(\\t\\x12\\x14\\n\\x07PageNum\\x18\\x05 \\x01(\\x03H\\x00\\x88\\x01\\x01\\x12\\x15\\n\\x08PageSize\\x18\\x06 \\x01(\\x03H\\x01\\x88\\x01\\x01\\x42\\n\\n\\x08_PageNumB\\x0b\\n\\t_PageSize\\\"p\\n\\x1dVodListCdnTopAccessUrlRequest\\x12\\x0f\\n\\x07\\x44omains\\x18\\x01 \\x01(\\t\\x12\\x16\\n\\x0eStartTimestamp\\x18\\x02 \\x01(\\x05\\x12\\x14\\n\\x0c\\x45ndTimestamp\\x18\\x03 \\x01(\\x05\\x12\\x10\\n\\x08SortType\\x18\\x04 \\x01(\\t\\\"{\\n\\x1aVodListCdnTopAccessRequest\\x12\\x0f\\n\\x07\\x44omains\\x18\\x01 \\x01(\\t\\x12\\x16\\n\\x0eStartTimestamp\\x18\\x02 \\x01(\\x05\\x12\\x14\\n\\x0c\\x45ndTimestamp\\x18\\x03 \\x01(\\x05\\x12\\x10\\n\\x08SortType\\x18\\x04 \\x01(\\t\\x12\\x0c\\n\\x04Item\\x18\\x05 \\x01(\\t\\\"\\xcb\\x01\\n(VodDescribeVodDomainBandwidthDataRequest\\x12\\x12\\n\\nDomainList\\x18\\x01 \\x01(\\t\\x12\\x19\\n\\x11\\x44omainInSpaceList\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x04 \\x01(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x05 \\x01(\\x05\\x12\\x15\\n\\rBandwidthType\\x18\\x06 \\x01(\\t\\x12\\x0c\\n\\x04\\x41rea\\x18\\x07 \\x01(\\t\\x12\\x12\\n\\nRegionList\\x18\\x08 \\x01(\\t\\\"\\x8a\\x02\\n\\x1aVodListCdnUsageDataRequest\\x12\\x0f\\n\\x07\\x44omains\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08Interval\\x18\\x02 \\x01(\\t\\x12\\x16\\n\\x0eStartTimestamp\\x18\\x03 \\x01(\\x03\\x12\\x14\\n\\x0c\\x45ndTimestamp\\x18\\x04 \\x01(\\x03\\x12\\x10\\n\\x08\\x44\\x61taType\\x18\\x05 \\x01(\\t\\x12\\x0e\\n\\x06Metric\\x18\\x06 \\x01(\\t\\x12\\x12\\n\\nNeedDetail\\x18\\x07 \\x01(\\x08\\x12\\x0c\\n\\x04\\x41rea\\x18\\x08 \\x01(\\t\\x12\\x0e\\n\\x06Region\\x18\\t \\x01(\\t\\x12\\x0b\\n\\x03Isp\\x18\\n \\x01(\\t\\x12\\x10\\n\\x08Protocol\\x18\\x0b \\x01(\\t\\x12\\x11\\n\\tIpVersion\\x18\\x0c \\x01(\\t\\x12\\x15\\n\\rBillingRegion\\x18\\r \\x01(\\t\\\"\\xa4\\x01\\n\\x1bVodListCdnStatusDataRequest\\x12\\x0f\\n\\x07\\x44omains\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08Interval\\x18\\x02 \\x01(\\t\\x12\\x16\\n\\x0eStartTimestamp\\x18\\x03 \\x01(\\x03\\x12\\x14\\n\\x0c\\x45ndTimestamp\\x18\\x04 \\x01(\\x03\\x12\\x10\\n\\x08\\x44\\x61taType\\x18\\x05 \\x01(\\t\\x12\\x0e\\n\\x06Metric\\x18\\x06 \\x01(\\t\\x12\\x12\\n\\nNeedDetail\\x18\\x07 \\x01(\\x08\\\"\\'\\n\\x18VodDescribeIPInfoRequest\\x12\\x0b\\n\\x03Ips\\x18\\x01 \\x01(\\t\\\"\\xa2\\x01\\n\\x17VodListCdnPvDataRequest\\x12\\x0f\\n\\x07\\x44omains\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08Interval\\x18\\x02 \\x01(\\t\\x12\\x16\\n\\x0eStartTimestamp\\x18\\x03 \\x01(\\x03\\x12\\x14\\n\\x0c\\x45ndTimestamp\\x18\\x04 \\x01(\\x03\\x12\\x10\\n\\x08\\x44\\x61taType\\x18\\x05 \\x01(\\t\\x12\\x12\\n\\nNeedDetail\\x18\\x06 \\x01(\\x08\\x12\\x10\\n\\x08Protocol\\x18\\x07 \\x01(\\t\\\"\\x93\\x01\\n\\x1cVodListCdnHitrateDataRequest\\x12\\x0f\\n\\x07\\x44omains\\x18\\x01 \\x01(\\t\\x12\\x10\\n\\x08Interval\\x18\\x02 \\x01(\\t\\x12\\x16\\n\\x0eStartTimestamp\\x18\\x03 \\x01(\\x03\\x12\\x14\\n\\x0c\\x45ndTimestamp\\x18\\x04 \\x01(\\x03\\x12\\x0e\\n\\x06Metric\\x18\\x05 \\x01(\\t\\x12\\x12\\n\\nNeedDetail\\x18\\x06 \\x01(\\x08\\\"\\xc7\\x01\\n&VodDescribeVodDomainTrafficDataRequest\\x12\\x12\\n\\nDomainList\\x18\\x01 \\x01(\\t\\x12\\x19\\n\\x11\\x44omainInSpaceList\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x04 \\x01(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x05 \\x01(\\x05\\x12\\x13\\n\\x0bTrafficType\\x18\\x06 \\x01(\\t\\x12\\x0c\\n\\x04\\x41rea\\x18\\x07 \\x01(\\t\\x12\\x12\\n\\nRegionList\\x18\\x08 \\x01(\\t\\\"T\\n\\x1aVodSubmitBlockTasksRequest\\x12\\x10\\n\\x08\\x46ileUrls\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tOperation\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tSpaceName\\x18\\x03 \\x01(\\t\\\"\\xb6\\x01\\n\\x1eVodGetContentBlockTasksRequest\\x12\\x0b\\n\\x03Url\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06TaskID\\x18\\x03 \\x01(\\t\\x12\\x10\\n\\x08TaskType\\x18\\x04 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x05 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x06 \\x01(\\x03\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x07 \\x01(\\x03\\x12\\x0f\\n\\x07PageNum\\x18\\x08 \\x01(\\x03\\x12\\x10\\n\\x08PageSize\\x18\\t \\x01(\\x03\\\"\\xef\\x03\\n\\x18VodCreateDomainV2Request\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nDomainType\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x03 \\x01(\\t\\x12\\x19\\n\\x11SourceStationType\\x18\\x05 \\x01(\\x05\\x12 \\n\\x18SourceStationAddressType\\x18\\x06 \\x01(\\x05\\x12\\x0f\\n\\x07Origins\\x18\\x07 \\x01(\\t\\x12\\x0c\\n\\x04\\x41rea\\x18\\x08 \\x01(\\t\\x12\\x12\\n\\nBucketName\\x18\\t \\x01(\\t\\x12\\x0c\\n\\x04Host\\x18\\n \\x01(\\t\\x12\\x1b\\n\\x13PrivateBucketAccess\\x18\\x0b \\x01(\\x08\\x12O\\n\\x11PrivateBucketAuth\\x18\\x0c \\x01(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.VodPrivateBucketAuth\\x12\\x0e\\n\\x06Region\\x18\\r \\x01(\\t\\x12\\x16\\n\\x0eOriginProtocol\\x18\\x0e \\x01(\\t\\x12\\x10\\n\\x08HttpPort\\x18\\x0f \\x01(\\t\\x12\\x11\\n\\tHttpsPort\\x18\\x10 \\x01(\\t\\x12\\x0e\\n\\x06Weight\\x18\\x11 \\x01(\\t\\x12=\\n\\x06Origin\\x18\\x12 \\x03(\\x0b\\x32-.Volcengine.Vod.Models.Business.CdnOriginRule\\x12\\x14\\n\\x0c\\x42usinessType\\x18\\x13 \\x01(\\t\\\"\\x81\\x02\\n\\x18VodCreateDomainV3Request\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nDomainType\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x03 \\x01(\\t\\x12\\x19\\n\\x11SourceStationType\\x18\\x05 \\x01(\\x05\\x12\\x0c\\n\\x04\\x41rea\\x18\\x08 \\x01(\\t\\x12\\x12\\n\\nBucketName\\x18\\t \\x01(\\t\\x12\\x32\\n\\x04IPv6\\x18\\n \\x01(\\x0b\\x32$.Volcengine.Vod.Models.Business.IPv6\\x12=\\n\\x06Origin\\x18\\x0b \\x03(\\x0b\\x32-.Volcengine.Vod.Models.Business.CdnOriginRule\\\"g\\n\\x1eVodUpdateDomainExpireV2Request\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nDomainType\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x03 \\x01(\\t\\x12\\x0e\\n\\x06\\x45xpire\\x18\\x04 \\x01(\\x05\\\"\\x8f\\x01\\n\\\"VodUpdateDomainAuthConfigV2Request\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nDomainType\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07MainKey\\x18\\x04 \\x01(\\t\\x12\\x11\\n\\tBackupKey\\x18\\x05 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x06 \\x01(\\t\\\"\\x92\\x01\\n%VodUpdateDomainUrlAuthConfigV2Request\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nDomainType\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07MainKey\\x18\\x04 \\x01(\\t\\x12\\x11\\n\\tBackupKey\\x18\\x05 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x06 \\x01(\\t\\\"\\xd4\\x01\\n\\x1bVodDescribeCdnEdgeIpRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nDomainType\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x03 \\x01(\\t\\x12\\x16\\n\\tIpVersion\\x18\\x04 \\x01(\\tH\\x00\\x88\\x01\\x01\\x12\\x10\\n\\x03Isp\\x18\\x05 \\x01(\\tH\\x01\\x88\\x01\\x01\\x12\\x13\\n\\x06Region\\x18\\x06 \\x01(\\tH\\x02\\x88\\x01\\x01\\x12\\x13\\n\\x06Status\\x18\\x07 \\x01(\\tH\\x03\\x88\\x01\\x01\\x42\\x0c\\n\\n_IpVersionB\\x06\\n\\x04_IspB\\t\\n\\x07_RegionB\\t\\n\\x07_Status\\\"?\\n!VodDescribeCdnRegionAndIspRequest\\x12\\x11\\n\\x04\\x41rea\\x18\\x01 \\x01(\\tH\\x00\\x88\\x01\\x01\\x42\\x07\\n\\x05_Area\\\"A\\n\\x1bVodVerifyDomainOwnerRequest\\x12\\x0e\\n\\x06\\x44omain\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nVerifyType\\x18\\x02 \\x01(\\t\\\"7\\n%VodDescribeDomainVerifyContentRequest\\x12\\x0e\\n\\x06\\x44omain\\x18\\x01 \\x01(\\t\\\"L\\n\\x18VodListPCDNDomainRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06Offset\\x18\\x02 \\x01(\\x05\\x12\\r\\n\\x05Limit\\x18\\x03 \\x01(\\x05\\\"?\\n\\x1aVodCreatePCDNDomainRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\\">\\n\\x19VodStartPCDNDomainRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\\"=\\n\\x18VodStopPCDNDomainRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\\"?\\n\\x1aVodDeletePCDNDomainRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\\"\\x96\\x01\\n\\x1cVodUpdateDomainConfigRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nDomainType\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x03 \\x01(\\t\\x12?\\n\\x06\\x43onfig\\x18\\x04 \\x01(\\x0b\\x32/.Volcengine.Vod.Models.Business.VodDomainConfig\\\"W\\n\\x1eVodDescribeDomainConfigRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nDomainType\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x03 \\x01(\\t\\\"\\x84\\x01\\n\\x1f\\x41\\x64\\x64OrUpdateCertificateV2Request\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nDomainType\\x18\\x03 \\x01(\\t\\x12\\x15\\n\\rCertificateId\\x18\\x04 \\x01(\\t\\x12\\x13\\n\\x0bHttpsStatus\\x18\\x05 \\x01(\\t\\\"^\\n\\x17UpdateDomainAreaRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x44omain\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nDomainType\\x18\\x03 \\x01(\\t\\x12\\x0c\\n\\x04\\x41rea\\x18\\x04 \\x01(\\t\\\"X\\n!VodAddCallbackSubscriptionRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Url\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0b\\x43ontentType\\x18\\x03 \\x01(\\t\\\"h\\n\\x1aVodSetCallbackEventRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x45vents\\x18\\x02 \\x01(\\t\\x12\\x13\\n\\x0b\\x41uthEnabled\\x18\\x03 \\x01(\\t\\x12\\x12\\n\\nPrivateKey\\x18\\x04 \\x01(\\t\\\"\\xab\\x01\\n\\x18GetCallbackRecordRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0b\\n\\x03Vid\\x18\\x02 \\x01(\\t\\x12\\x0e\\n\\x06Status\\x18\\x03 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x04 \\x01(\\x03\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x05 \\x01(\\x03\\x12\\r\\n\\x05Limit\\x18\\x06 \\x01(\\x05\\x12\\x11\\n\\tEventType\\x18\\x07 \\x01(\\t\\x12\\x19\\n\\x11\\x43ontinuationToken\\x18\\x08 \\x01(\\t\\\"\\xf4\\x01\\n&VodGetSmartStrategyLitePlayInfoRequest\\x12\\x0f\\n\\x07PlayUrl\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06\\x46ormat\\x18\\x02 \\x01(\\t\\x12\\r\\n\\x05\\x43odec\\x18\\x03 \\x01(\\t\\x12\\x12\\n\\nDefinition\\x18\\x04 \\x01(\\t\\x12\\x10\\n\\x08\\x46ileType\\x18\\x05 \\x01(\\t\\x12\\x10\\n\\x08LogoType\\x18\\x06 \\x01(\\t\\x12\\x0b\\n\\x03Ssl\\x18\\x07 \\x01(\\t\\x12\\x12\\n\\nNeedThumbs\\x18\\x08 \\x01(\\t\\x12\\x17\\n\\x0fNeedBarrageMask\\x18\\t \\x01(\\t\\x12\\x11\\n\\tUnionInfo\\x18\\n \\x01(\\t\\x12\\x15\\n\\rHDRDefinition\\x18\\x0b \\x01(\\t\\\"%\\n\\x14VodGetAppInfoRequest\\x12\\r\\n\\x05\\x41ppId\\x18\\x01 \\x01(\\x04\\\"\\xe4\\x01\\n$DescribeVodSpaceTranscodeDataRequest\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x15\\n\\rTranscodeType\\x18\\x04 \\x01(\\t\\x12\\x15\\n\\rSpecification\\x18\\x05 \\x01(\\t\\x12\\x15\\n\\rTaskStageList\\x18\\x06 \\x01(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x07 \\x01(\\x03\\x12\\x17\\n\\x0f\\x44\\x65tailFieldList\\x18\\x08 \\x01(\\t\\x12\\x12\\n\\nRegionList\\x18\\t \\x01(\\t\\\"\\xca\\x01\\n#DescribeVodSpaceAIStatisDataRequest\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x13\\n\\x0bMediaAiType\\x18\\x04 \\x01(\\t\\x12\\x15\\n\\rTaskStageList\\x18\\x05 \\x01(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x06 \\x01(\\x03\\x12\\x17\\n\\x0f\\x44\\x65tailFieldList\\x18\\x07 \\x01(\\t\\x12\\x12\\n\\nRegionList\\x18\\x08 \\x01(\\t\\\"\\xd1\\x01\\n)DescribeVodSpaceSubtitleStatisDataRequest\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x14\\n\\x0cSubtitleType\\x18\\x04 \\x01(\\t\\x12\\x15\\n\\rTaskStageList\\x18\\x05 \\x01(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x06 \\x01(\\x03\\x12\\x17\\n\\x0f\\x44\\x65tailFieldList\\x18\\x07 \\x01(\\t\\x12\\x12\\n\\nRegionList\\x18\\x08 \\x01(\\t\\\"\\xcd\\x01\\n\\'DescribeVodSpaceDetectStatisDataRequest\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x12\\n\\nDetectType\\x18\\x04 \\x01(\\t\\x12\\x15\\n\\rTaskStageList\\x18\\x05 \\x01(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x06 \\x01(\\x03\\x12\\x17\\n\\x0f\\x44\\x65tailFieldList\\x18\\x07 \\x01(\\t\\x12\\x12\\n\\nRegionList\\x18\\x08 \\x01(\\t\\\"\\xc6\\x01\\n\\x1e\\x44\\x65scribeVodSnapshotDataRequest\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x14\\n\\x0cSnapshotType\\x18\\x04 \\x01(\\t\\x12\\x15\\n\\rTaskStageList\\x18\\x05 \\x01(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x06 \\x01(\\x03\\x12\\x17\\n\\x0f\\x44\\x65tailFieldList\\x18\\x07 \\x01(\\t\\x12\\x12\\n\\nRegionList\\x18\\x08 \\x01(\\t\\\"\\x91\\x01\\n)DescribeVodSpaceWorkflowDetailDataRequest\\x12\\x0e\\n\\x06Region\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05Space\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x04 \\x01(\\t\\x12\\x10\\n\\x08PageSize\\x18\\x05 \\x01(\\x03\\x12\\x0f\\n\\x07PageNum\\x18\\x06 \\x01(\\x03\\\"\\x8d\\x01\\n%DescribeVodSpaceEditDetailDataRequest\\x12\\x0e\\n\\x06Region\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05Space\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x04 \\x01(\\t\\x12\\x10\\n\\x08PageSize\\x18\\x05 \\x01(\\x03\\x12\\x0f\\n\\x07PageNum\\x18\\x06 \\x01(\\x03\\\"_\\n%DescribeVodPlayFileLogByDomainRequest\\x12\\x11\\n\\tStartTime\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x02 \\x01(\\t\\x12\\x12\\n\\nDomainList\\x18\\x03 \\x01(\\t\\\"\\xb1\\x01\\n\\\"DescribeVodEnhanceImageDataRequest\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x14\\n\\x0cTaskTypeList\\x18\\x04 \\x01(\\t\\x12\\x15\\n\\rTaskStageList\\x18\\x05 \\x01(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x06 \\x01(\\x03\\x12\\x12\\n\\nRegionList\\x18\\x07 \\x01(\\t\\\"\\xb7\\x01\\n%DescribeVodSpaceEditStatisDataRequest\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x15\\n\\rSpecification\\x18\\x04 \\x01(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x05 \\x01(\\x03\\x12\\x17\\n\\x0f\\x44\\x65tailFieldList\\x18\\x06 \\x01(\\t\\x12\\x12\\n\\nRegionList\\x18\\x07 \\x01(\\t\\\"{\\n\\\"DescribeVodPlayedStatisDataRequest\\x12\\r\\n\\x05Space\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07VidList\\x18\\x04 \\x01(\\t\\x12\\x11\\n\\tOrderType\\x18\\x05 \\x01(\\t\\\"|\\n&DescribeVodMostPlayedStatisDataRequest\\x12\\r\\n\\x05Space\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x11\\n\\tOrderType\\x18\\x04 \\x01(\\t\\x12\\x0c\\n\\x04TopN\\x18\\x05 \\x01(\\x03\\\"\\x9f\\x01\\n#DescribeVodRealtimeMediaDataRequest\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\x12\\x13\\n\\x0bProcessType\\x18\\x04 \\x01(\\t\\x12\\x13\\n\\x0b\\x41ggregation\\x18\\x05 \\x01(\\x03\\x12\\x17\\n\\x0f\\x44\\x65tailFieldList\\x18\\x06 \\x01(\\t\\\"\\x91\\x01\\n)DescribeVodRealtimeMediaDetailDataRequest\\x12\\x0e\\n\\x06Region\\x18\\x01 \\x01(\\t\\x12\\r\\n\\x05Space\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x04 \\x01(\\t\\x12\\x10\\n\\x08PageSize\\x18\\x05 \\x01(\\x03\\x12\\x0f\\n\\x07PageNum\\x18\\x06 \\x01(\\x03\\\"\\\\\\n#DescribeVodVidTrafficFileLogRequest\\x12\\x11\\n\\tSpaceList\\x18\\x01 \\x01(\\t\\x12\\x11\\n\\tStartTime\\x18\\x02 \\x01(\\t\\x12\\x0f\\n\\x07\\x45ndTime\\x18\\x03 \\x01(\\t\\\"A\\n\\x1eVodSubmitBlockMediaTaskRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Vids\\x18\\x02 \\x01(\\t\\\"C\\n VodSubmitUnblockMediaTaskRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Vids\\x18\\x02 \\x01(\\t\\\"B\\n\\x1fVodQueryMediaBlockStatusRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Vids\\x18\\x02 \\x01(\\t\\\"\\x18\\n\\x16VodListProjectsRequest\\\"!\\n\\x1fVodGetTradeConfigurationRequest\\\"4\\n\\x15VodReportEventRequest\\x12\\n\\n\\x02Id\\x18\\x01 \\x01(\\t\\x12\\x0f\\n\\x07Reports\\x18\\x02 \\x01(\\x0c\\\"\\xae\\x01\\n\\x1cVodSetCloudMigrateJobRequest\\x12\\r\\n\\x05JobId\\x18\\x01 \\x01(\\x03\\x12S\\n\\rJobSourceInfo\\x18\\x02 \\x01(\\x0b\\x32<.Volcengine.Vod.Models.Business.VodCloudMigrateJobSourceInfo\\x12\\x17\\n\\x0f\\x43\\x61llbackAddress\\x18\\x03 \\x01(\\t\\x12\\x11\\n\\tSpaceName\\x18\\x04 \\x01(\\t\\\"\\x91\\x01\\n\\x1fVodSubmitCloudMigrateJobRequest\\x12\\r\\n\\x05JobId\\x18\\x01 \\x01(\\x03\\x12\\x10\\n\\x08SubAppId\\x18\\x02 \\x01(\\t\\x12\\x11\\n\\tSourceVid\\x18\\x03 \\x01(\\t\\x12\\x11\\n\\tTargetVid\\x18\\x04 \\x01(\\t\\x12\\x14\\n\\x0c\\x43\\x61llbackArgs\\x18\\x05 \\x01(\\t\\x12\\x11\\n\\tSpaceName\\x18\\x06 \\x01(\\t\\\"@\\n\\x1cVodGetCloudMigrateJobRequest\\x12\\r\\n\\x05JobId\\x18\\x01 \\x01(\\x03\\x12\\x11\\n\\tSpaceName\\x18\\x02 \\x01(\\t\\\"\\x8e\\x04\\n\\x1eVodCreateDramaRecapTaskRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Vids\\x18\\x02 \\x03(\\t\\x12\\x1e\\n\\x11\\x44ramaScriptTaskId\\x18\\x03 \\x01(\\tH\\x00\\x88\\x01\\x01\\x12\\x11\\n\\tRecapText\\x18\\x04 \\x01(\\t\\x12[\\n\\rSpeakerConfig\\x18\\x05 \\x01(\\x0b\\x32\\x44.Volcengine.Vod.Models.Business.VodCreateDramaRecapTaskSpeakerConfig\\x12\\x1c\\n\\x0fIsEraseSubtitle\\x18\\x06 \\x01(\\x08H\\x01\\x88\\x01\\x01\\x12U\\n\\nFontConfig\\x18\\x07 \\x01(\\x0b\\x32\\x41.Volcengine.Vod.Models.Business.VodCreateDramaRecapTaskFontconfig\\x12\\x1f\\n\\x12\\x42\\x61tchGenerateCount\\x18\\x08 \\x01(\\x05H\\x02\\x88\\x01\\x01\\x12O\\n\\x10\\x44ramaRecapConfig\\x18\\t \\x01(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.DramaRecapConfigH\\x03\\x88\\x01\\x01\\x42\\x14\\n\\x12_DramaScriptTaskIdB\\x12\\n\\x10_IsEraseSubtitleB\\x15\\n\\x13_BatchGenerateCountB\\x13\\n\\x11_DramaRecapConfig\\\"\\xc9\\x01\\n\\x1fVodCreateDramaScriptTaskRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0c\\n\\x04Vids\\x18\\x02 \\x03(\\t\\x12#\\n\\x16ReRunDramaScriptTaskId\\x18\\x03 \\x01(\\tH\\x00\\x88\\x01\\x01\\x12\\x1c\\n\\x0fHasHardSubtitle\\x18\\x04 \\x01(\\x08H\\x01\\x88\\x01\\x01\\x12\\x13\\n\\x0b\\x43lientToken\\x18\\x05 \\x01(\\tB\\x19\\n\\x17_ReRunDramaScriptTaskIdB\\x12\\n\\x10_HasHardSubtitle\\\"B\\n\\x1dVodQueryDramaRecapTaskRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06TaskId\\x18\\x02 \\x01(\\t\\\"C\\n\\x1eVodQueryDramaScriptTaskRequest\\x12\\x11\\n\\tSpaceName\\x18\\x01 \\x01(\\t\\x12\\x0e\\n\\x06TaskId\\x18\\x02 \\x01(\\t\\\"\\x8f\\x01\\n\\x1cVodGetMediaEntityListRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x13\\n\\x0b\\x45ntityTypes\\x18\\x02 \\x01(\\t\\x12\\x16\\n\\x0e\\x45ntityVersions\\x18\\x03 \\x01(\\t\\x12\\x0f\\n\\x07Sources\\x18\\x04 \\x01(\\t\\x12\\x12\\n\\nPageNumber\\x18\\x05 \\x01(\\x05\\x12\\x10\\n\\x08PageSize\\x18\\x06 \\x01(\\x05\\\"i\\n\\x18VodGetMediaEntityRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nEntityType\\x18\\x02 \\x01(\\t\\x12\\x15\\n\\rEntityVersion\\x18\\x03 \\x01(\\t\\x12\\x15\\n\\rNeedPublicUrl\\x18\\x04 \\x01(\\x08\\\"U\\n\\x1bVodDeleteMediaEntityRequest\\x12\\x0b\\n\\x03Vid\\x18\\x01 \\x01(\\t\\x12\\x12\\n\\nEntityType\\x18\\x02 \\x01(\\t\\x12\\x15\\n\\rEntityVersion\\x18\\x03 \\x01(\\tB\\xc8\\x01\\n(com.volcengine.service.vod.model.requestB\\nVodRequestP\\x01Z@github.com/volcengine/volc-sdk-golang/service/vod/models/request\\xa0\\x01\\x01\\xd8\\x01\\x01\\xca\\x02\\x1fVolc\\\\Service\\\\Vod\\\\Models\\\\Request\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_VODGETALLPLAYINFOREQUEST = DESCRIPTOR.message_types_by_name['VodGetAllPlayInfoRequest']\n_VODGETPLAYINFOREQUEST = DESCRIPTOR.message_types_by_name['VodGetPlayInfoRequest']\n_VODGETPRIVATEDRMPLAYAUTHREQUEST = DESCRIPTOR.message_types_by_name['VodGetPrivateDrmPlayAuthRequest']\n_VODGETHLSDECRYPTIONKEYREQUEST = DESCRIPTOR.message_types_by_name['VodGetHlsDecryptionKeyRequest']\n_VODCREATEHLSDECRYPTIONKEYREQUEST = DESCRIPTOR.message_types_by_name['VodCreateHlsDecryptionKeyRequest']\n_VODGETPLAYINFOWITHLIVETIMESHIFTSCENEREQUEST = DESCRIPTOR.message_types_by_name['VodGetPlayInfoWithLiveTimeShiftSceneRequest']\n_VODDESCRIBEDRMDATAKEYREQUEST = DESCRIPTOR.message_types_by_name['VodDescribeDrmDataKeyRequest']\n_VODSUBMITMOVEOBJECTTASKREQUEST = DESCRIPTOR.message_types_by_name['VodSubmitMoveObjectTaskRequest']\n_VODQUERYMOVEOBJECTTASKINFOREQUEST = DESCRIPTOR.message_types_by_name['VodQueryMoveObjectTaskInfoRequest']\n_VODSUBMITBLOCKOBJECTTASKSREQUEST = DESCRIPTOR.message_types_by_name['VodSubmitBlockObjectTasksRequest']\n_VODLISTBLOCKOBJECTTASKSREQUEST = DESCRIPTOR.message_types_by_name['VodListBlockObjectTasksRequest']\n_VODURLUPLOADREQUEST = DESCRIPTOR.message_types_by_name['VodUrlUploadRequest']\n_VODQUERYUPLOADTASKINFOREQUEST = DESCRIPTOR.message_types_by_name['VodQueryUploadTaskInfoRequest']\n_VODAPPLYUPLOADINFOREQUEST = DESCRIPTOR.message_types_by_name['VodApplyUploadInfoRequest']\n_VODUPLOADMEDIAREQUEST = DESCRIPTOR.message_types_by_name['VodUploadMediaRequest']\n_VODUPLOADMATERIALREQUEST = DESCRIPTOR.message_types_by_name['VodUploadMaterialRequest']\n_VODUPLOADOBJECTREQUEST = DESCRIPTOR.message_types_by_name['VodUploadObjectRequest']\n_VODCOMMITUPLOADINFOREQUEST = DESCRIPTOR.message_types_by_name['VodCommitUploadInfoRequest']\n_VODURLUPLOADJSONREQUEST = DESCRIPTOR.message_types_by_name['VodUrlUploadJsonRequest']\n_VODPARSEUPLOADMANIFESTREQUEST = DESCRIPTOR.message_types_by_name['VodParseUploadManifestRequest']\n_VODLISTFILEMETAINFOSBYFILENAMESREQUEST = DESCRIPTOR.message_types_by_name['VodListFileMetaInfosByFileNamesRequest']\n_VODGETRECOMMENDEDPOSTERREQUEST = DESCRIPTOR.message_types_by_name['VodGetRecommendedPosterRequest']\n_VODUPDATEMEDIAPUBLISHSTATUSREQUEST = DESCRIPTOR.message_types_by_name['VodUpdateMediaPublishStatusRequest']\n_VODUPDATEMEDIASTORAGECLASSREQUEST = DESCRIPTOR.message_types_by_name['VodUpdateMediaStorageClassRequest']\n_VODUPDATEMEDIAINFOREQUEST = DESCRIPTOR.message_types_by_name['VodUpdateMediaInfoRequest']\n_VODGETMEDIAINFOSREQUEST = DESCRIPTOR.message_types_by_name['VodGetMediaInfosRequest']\n_VODDELETEMATERIALREQUEST = DESCRIPTOR.message_types_by_name['VodDeleteMaterialRequest']\n_VODDELETEMEDIAREQUEST = DESCRIPTOR.message_types_by_name['VodDeleteMediaRequest']\n_VODDELETETRANSCODESREQUEST = DESCRIPTOR.message_types_by_name['VodDeleteTranscodesRequest']\n_VODDELETEMEDIATOSFILEREQUEST = DESCRIPTOR.message_types_by_name['VodDeleteMediaTosFileRequest']\n_VODGETMEDIALISTREQUEST = DESCRIPTOR.message_types_by_name['VodGetMediaListRequest']\n_VODGETSUBTITLEINFOLISTREQUEST = DESCRIPTOR.message_types_by_name['VodGetSubtitleInfoListRequest']\n_VODUPDATESUBTITLESTATUSREQUEST = DESCRIPTOR.message_types_by_name['VodUpdateSubtitleStatusRequest']\n_VODUPDATESUBTITLEINFOREQUEST = DESCRIPTOR.message_types_by_name['VodUpdateSubtitleInfoRequest']\n_VODGETAUDITFRAMESFORAUDITREQUEST = DESCRIPTOR.message_types_by_name['VodGetAuditFramesForAuditRequest']\n_VODGETMLFRAMESFORAUDITREQUEST = DESCRIPTOR.message_types_by_name['VodGetMLFramesForAuditRequest']\n_VODGETBETTERFRAMESFORAUDITREQUEST = DESCRIPTOR.message_types_by_name['VodGetBetterFramesForAuditRequest']\n_VODGETAUDIOINFOFORAUDITREQUEST = DESCRIPTOR.message_types_by_name['VodGetAudioInfoForAuditRequest']\n_VODGETAUTOMATICSPEECHRECOGNITIONFORAUDITREQUEST = DESCRIPTOR.message_types_by_name['VodGetAutomaticSpeechRecognitionForAuditRequest']\n_VODGETAUDIOEVENTDETECTIONFORAUDITREQUEST = DESCRIPTOR.message_types_by_name['VodGetAudioEventDetectionForAuditRequest']\n_VODCREATEVIDEOCLASSIFICATIONREQUEST = DESCRIPTOR.message_types_by_name['VodCreateVideoClassificationRequest']\n_VODUPDATEVIDEOCLASSIFICATIONREQUEST = DESCRIPTOR.message_types_by_name['VodUpdateVideoClassificationRequest']\n_VODDELETEVIDEOCLASSIFICATIONREQUEST = DESCRIPTOR.message_types_by_name['VodDeleteVideoClassificationRequest']\n_VODLISTVIDEOCLASSIFICATIONSREQUEST = DESCRIPTOR.message_types_by_name['VodListVideoClassificationsRequest']\n_VODLISTSNAPSHOTSREQUEST = DESCRIPTOR.message_types_by_name['VodListSnapshotsRequest']\n_VODGETFILELISTREQUEST = DESCRIPTOR.message_types_by_name['VodGetFileListRequest']\n_VODGETFILEINFOSREQUEST = DESCRIPTOR.message_types_by_name['VodGetFileInfosRequest']\n_VODUPDATEFILESTORAGECLASSREQUEST = DESCRIPTOR.message_types_by_name['VodUpdateFileStorageClassRequest']\n_VODGETINNERAUDITURLSREQUEST = DESCRIPTOR.message_types_by_name['VodGetInnerAuditURLsRequest']\n_VODGETADAUDITRESULTBYVIDREQUEST = DESCRIPTOR.message_types_by_name['VodGetAdAuditResultByVidRequest']\n_VODEXTRACTMEDIAMETATASKREQUEST = DESCRIPTOR.message_types_by_name['VodExtractMediaMetaTaskRequest']\n_VODSTARTWORKFLOWREQUEST = DESCRIPTOR.message_types_by_name['VodStartWorkflowRequest']\n_VODRETRIEVETRANSCODERESULTREQUEST = DESCRIPTOR.message_types_by_name['VodRetrieveTranscodeResultRequest']\n_VODLISTWORKFLOWEXECUTIONREQUEST = DESCRIPTOR.message_types_by_name['VodListWorkflowExecutionRequest']\n_VODGETWORKFLOWEXECUTIONDETAILREQUEST = DESCRIPTOR.message_types_by_name['VodGetWorkflowExecutionDetailRequest']\n_VODGETWORKFLOWRESULTREQUEST = DESCRIPTOR.message_types_by_name['VodGetWorkflowResultRequest']\n_VODGETWORKFLOWEXECUTIONSTATUSREQUEST = DESCRIPTOR.message_types_by_name['VodGetWorkflowExecutionStatusRequest']\n_VODCREATETASKTEMPLATEREQUEST = DESCRIPTOR.message_types_by_name['VodCreateTaskTemplateRequest']\n_VODUPDATETASKTEMPLATEREQUEST = DESCRIPTOR.message_types_by_name['VodUpdateTaskTemplateRequest']\n_VODDELETETASKTEMPLATEREQUEST = DESCRIPTOR.message_types_by_name['VodDeleteTaskTemplateRequest']\n_VODGETTASKTEMPLATEREQUEST = DESCRIPTOR.message_types_by_name['VodGetTaskTemplateRequest']\n_VODLISTTASKTEMPLATEREQUEST = DESCRIPTOR.message_types_by_name['VodListTaskTemplateRequest']\n_VODCREATEWATERMARKREQUEST = DESCRIPTOR.message_types_by_name['VodCreateWatermarkRequest']\n_VODUPDATEWATERMARKREQUEST = DESCRIPTOR.message_types_by_name['VodUpdateWatermarkRequest']\n_VODDELETEWATERMARKREQUEST = DESCRIPTOR.message_types_by_name['VodDeleteWatermarkRequest']\n_VODGETWATERMARKREQUEST = DESCRIPTOR.message_types_by_name['VodGetWatermarkRequest']\n_VODLISTWATERMARKREQUEST = DESCRIPTOR.message_types_by_name['VodListWatermarkRequest']\n_VODCREATEWORKFLOWTEMPLATEREQUEST = DESCRIPTOR.message_types_by_name['VodCreateWorkflowTemplateRequest']\n_VODUPDATEWORKFLOWTEMPLATEREQUEST = DESCRIPTOR.message_types_by_name['VodUpdateWorkflowTemplateRequest']\n_VODDELETEWORKFLOWTEMPLATEREQUEST = DESCRIPTOR.message_types_by_name['VodDeleteWorkflowTemplateRequest']\n_VODGETWORKFLOWTEMPLATEREQUEST = DESCRIPTOR.message_types_by_name['VodGetWorkflowTemplateRequest']\n_VODLISTWORKFLOWTEMPLATEREQUEST = DESCRIPTOR.message_types_by_name['VodListWorkflowTemplateRequest']\n_VODSUBMITDIRECTEDITTASKASYNCREQUEST = DESCRIPTOR.message_types_by_name['VodSubmitDirectEditTaskAsyncRequest']\n_VODSUBMITDIRECTEDITTASKSYNCREQUEST = DESCRIPTOR.message_types_by_name['VodSubmitDirectEditTaskSyncRequest']\n_VODGETDIRECTEDITRESULTREQUEST = DESCRIPTOR.message_types_by_name['VodGetDirectEditResultRequest']\n_VODGETDIRECTEDITPROGRESSREQUEST = DESCRIPTOR.message_types_by_name['VodGetDirectEditProgressRequest']\n_VODCANCELDIRECTEDITTASKREQUEST = DESCRIPTOR.message_types_by_name['VodCancelDirectEditTaskRequest']\n_VODASYNCVCREATIVETASKREQUEST = DESCRIPTOR.message_types_by_name['VodAsyncVCreativeTaskRequest']\n_VODGETVCREATIVETASKRESULTREQUEST = DESCRIPTOR.message_types_by_name['VodGetVCreativeTaskResultRequest']\n_VODDELETESPACEREQUEST = DESCRIPTOR.message_types_by_name['VodDeleteSpaceRequest']\n_VODCREATESPACEREQUEST = DESCRIPTOR.message_types_by_name['VodCreateSpaceRequest']\n_VODGETSPACEDETAILREQUEST = DESCRIPTOR.message_types_by_name['VodGetSpaceDetailRequest']\n_VODLISTSPACEREQUEST = DESCRIPTOR.message_types_by_name['VodListSpaceRequest']\n_VODUPDATESPACEREQUEST = DESCRIPTOR.message_types_by_name['VodUpdateSpaceRequest']\n_VODUPDATESPACEUPLOADCONFIGREQUEST = DESCRIPTOR.message_types_by_name['VodUpdateSpaceUploadConfigRequest']\n_VODDESCRIBEUPLOADSPACECONFIGREQUEST = DESCRIPTOR.message_types_by_name['VodDescribeUploadSpaceConfigRequest']\n_VODUPDATEUPLOADSPACECONFIGREQUEST = DESCRIPTOR.message_types_by_name['VodUpdateUploadSpaceConfigRequest']\n_VODDESCRIBEVODSPACESTORAGEDATAREQUEST = DESCRIPTOR.message_types_by_name['VodDescribeVodSpaceStorageDataRequest']\n_VODUPDATEDOMAINPLAYRULEREQUEST = DESCRIPTOR.message_types_by_name['VodUpdateDomainPlayRuleRequest']\n_VODADDDOMAINTOSCHEDULERREQUEST = DESCRIPTOR.message_types_by_name['VodAddDomainToSchedulerRequest']\n_VODREMOVEDOMAINFROMSCHEDULERREQUEST = DESCRIPTOR.message_types_by_name['VodRemoveDomainFromSchedulerRequest']\n_VODDELETEDOMAINREQUEST = DESCRIPTOR.message_types_by_name['VodDeleteDomainRequest']\n_VODSTARTDOMAINREQUEST = DESCRIPTOR.message_types_by_name['VodStartDomainRequest']\n_VODSTOPDOMAINREQUEST = DESCRIPTOR.message_types_by_name['VodStopDomainRequest']\n_VODLISTDOMAINREQUEST = DESCRIPTOR.message_types_by_name['VodListDomainRequest']\n_VODCREATECDNREFRESHTASKREQUEST = DESCRIPTOR.message_types_by_name['VodCreateCdnRefreshTaskRequest']\n_VODCREATECDNPRELOADTASKREQUEST = DESCRIPTOR.message_types_by_name['VodCreateCdnPreloadTaskRequest']\n_VODLISTCDNTASKSREQUEST = DESCRIPTOR.message_types_by_name['VodListCdnTasksRequest']\n_VODLISTCDNACCESSLOGREQUEST = DESCRIPTOR.message_types_by_name['VodListCdnAccessLogRequest']\n_VODLISTCDNTOPACCESSURLREQUEST = DESCRIPTOR.message_types_by_name['VodListCdnTopAccessUrlRequest']\n_VODLISTCDNTOPACCESSREQUEST = DESCRIPTOR.message_types_by_name['VodListCdnTopAccessRequest']\n_VODDESCRIBEVODDOMAINBANDWIDTHDATAREQUEST = DESCRIPTOR.message_types_by_name['VodDescribeVodDomainBandwidthDataRequest']\n_VODLISTCDNUSAGEDATAREQUEST = DESCRIPTOR.message_types_by_name['VodListCdnUsageDataRequest']\n_VODLISTCDNSTATUSDATAREQUEST = DESCRIPTOR.message_types_by_name['VodListCdnStatusDataRequest']\n_VODDESCRIBEIPINFOREQUEST = DESCRIPTOR.message_types_by_name['VodDescribeIPInfoRequest']\n_VODLISTCDNPVDATAREQUEST = DESCRIPTOR.message_types_by_name['VodListCdnPvDataRequest']\n_VODLISTCDNHITRATEDATAREQUEST = DESCRIPTOR.message_types_by_name['VodListCdnHitrateDataRequest']\n_VODDESCRIBEVODDOMAINTRAFFICDATAREQUEST = DESCRIPTOR.message_types_by_name['VodDescribeVodDomainTrafficDataRequest']\n_VODSUBMITBLOCKTASKSREQUEST = DESCRIPTOR.message_types_by_name['VodSubmitBlockTasksRequest']\n_VODGETCONTENTBLOCKTASKSREQUEST = DESCRIPTOR.message_types_by_name['VodGetContentBlockTasksRequest']\n_VODCREATEDOMAINV2REQUEST = DESCRIPTOR.message_types_by_name['VodCreateDomainV2Request']\n_VODCREATEDOMAINV3REQUEST = DESCRIPTOR.message_types_by_name['VodCreateDomainV3Request']\n_VODUPDATEDOMAINEXPIREV2REQUEST = DESCRIPTOR.message_types_by_name['VodUpdateDomainExpireV2Request']\n_VODUPDATEDOMAINAUTHCONFIGV2REQUEST = DESCRIPTOR.message_types_by_name['VodUpdateDomainAuthConfigV2Request']\n_VODUPDATEDOMAINURLAUTHCONFIGV2REQUEST = DESCRIPTOR.message_types_by_name['VodUpdateDomainUrlAuthConfigV2Request']\n_VODDESCRIBECDNEDGEIPREQUEST = DESCRIPTOR.message_types_by_name['VodDescribeCdnEdgeIpRequest']\n_VODDESCRIBECDNREGIONANDISPREQUEST = DESCRIPTOR.message_types_by_name['VodDescribeCdnRegionAndIspRequest']\n_VODVERIFYDOMAINOWNERREQUEST = DESCRIPTOR.message_types_by_name['VodVerifyDomainOwnerRequest']\n_VODDESCRIBEDOMAINVERIFYCONTENTREQUEST = DESCRIPTOR.message_types_by_name['VodDescribeDomainVerifyContentRequest']\n_VODLISTPCDNDOMAINREQUEST = DESCRIPTOR.message_types_by_name['VodListPCDNDomainRequest']\n_VODCREATEPCDNDOMAINREQUEST = DESCRIPTOR.message_types_by_name['VodCreatePCDNDomainRequest']\n_VODSTARTPCDNDOMAINREQUEST = DESCRIPTOR.message_types_by_name['VodStartPCDNDomainRequest']\n_VODSTOPPCDNDOMAINREQUEST = DESCRIPTOR.message_types_by_name['VodStopPCDNDomainRequest']\n_VODDELETEPCDNDOMAINREQUEST = DESCRIPTOR.message_types_by_name['VodDeletePCDNDomainRequest']\n_VODUPDATEDOMAINCONFIGREQUEST = DESCRIPTOR.message_types_by_name['VodUpdateDomainConfigRequest']\n_VODDESCRIBEDOMAINCONFIGREQUEST = DESCRIPTOR.message_types_by_name['VodDescribeDomainConfigRequest']\n_ADDORUPDATECERTIFICATEV2REQUEST = DESCRIPTOR.message_types_by_name['AddOrUpdateCertificateV2Request']\n_UPDATEDOMAINAREAREQUEST = DESCRIPTOR.message_types_by_name['UpdateDomainAreaRequest']\n_VODADDCALLBACKSUBSCRIPTIONREQUEST = DESCRIPTOR.message_types_by_name['VodAddCallbackSubscriptionRequest']\n_VODSETCALLBACKEVENTREQUEST = DESCRIPTOR.message_types_by_name['VodSetCallbackEventRequest']\n_GETCALLBACKRECORDREQUEST = DESCRIPTOR.message_types_by_name['GetCallbackRecordRequest']\n_VODGETSMARTSTRATEGYLITEPLAYINFOREQUEST = DESCRIPTOR.message_types_by_name['VodGetSmartStrategyLitePlayInfoRequest']\n_VODGETAPPINFOREQUEST = DESCRIPTOR.message_types_by_name['VodGetAppInfoRequest']\n_DESCRIBEVODSPACETRANSCODEDATAREQUEST = DESCRIPTOR.message_types_by_name['DescribeVodSpaceTranscodeDataRequest']\n_DESCRIBEVODSPACEAISTATISDATAREQUEST = DESCRIPTOR.message_types_by_name['DescribeVodSpaceAIStatisDataRequest']\n_DESCRIBEVODSPACESUBTITLESTATISDATAREQUEST = DESCRIPTOR.message_types_by_name['DescribeVodSpaceSubtitleStatisDataRequest']\n_DESCRIBEVODSPACEDETECTSTATISDATAREQUEST = DESCRIPTOR.message_types_by_name['DescribeVodSpaceDetectStatisDataRequest']\n_DESCRIBEVODSNAPSHOTDATAREQUEST = DESCRIPTOR.message_types_by_name['DescribeVodSnapshotDataRequest']\n_DESCRIBEVODSPACEWORKFLOWDETAILDATAREQUEST = DESCRIPTOR.message_types_by_name['DescribeVodSpaceWorkflowDetailDataRequest']\n_DESCRIBEVODSPACEEDITDETAILDATAREQUEST = DESCRIPTOR.message_types_by_name['DescribeVodSpaceEditDetailDataRequest']\n_DESCRIBEVODPLAYFILELOGBYDOMAINREQUEST = DESCRIPTOR.message_types_by_name['DescribeVodPlayFileLogByDomainRequest']\n_DESCRIBEVODENHANCEIMAGEDATAREQUEST = DESCRIPTOR.message_types_by_name['DescribeVodEnhanceImageDataRequest']\n_DESCRIBEVODSPACEEDITSTATISDATAREQUEST = DESCRIPTOR.message_types_by_name['DescribeVodSpaceEditStatisDataRequest']\n_DESCRIBEVODPLAYEDSTATISDATAREQUEST = DESCRIPTOR.message_types_by_name['DescribeVodPlayedStatisDataRequest']\n_DESCRIBEVODMOSTPLAYEDSTATISDATAREQUEST = DESCRIPTOR.message_types_by_name['DescribeVodMostPlayedStatisDataRequest']\n_DESCRIBEVODREALTIMEMEDIADATAREQUEST = DESCRIPTOR.message_types_by_name['DescribeVodRealtimeMediaDataRequest']\n_DESCRIBEVODREALTIMEMEDIADETAILDATAREQUEST = DESCRIPTOR.message_types_by_name['DescribeVodRealtimeMediaDetailDataRequest']\n_DESCRIBEVODVIDTRAFFICFILELOGREQUEST = DESCRIPTOR.message_types_by_name['DescribeVodVidTrafficFileLogRequest']\n_VODSUBMITBLOCKMEDIATASKREQUEST = DESCRIPTOR.message_types_by_name['VodSubmitBlockMediaTaskRequest']\n_VODSUBMITUNBLOCKMEDIATASKREQUEST = DESCRIPTOR.message_types_by_name['VodSubmitUnblockMediaTaskRequest']\n_VODQUERYMEDIABLOCKSTATUSREQUEST = DESCRIPTOR.message_types_by_name['VodQueryMediaBlockStatusRequest']\n_VODLISTPROJECTSREQUEST = DESCRIPTOR.message_types_by_name['VodListProjectsRequest']\n_VODGETTRADECONFIGURATIONREQUEST = DESCRIPTOR.message_types_by_name['VodGetTradeConfigurationRequest']\n_VODREPORTEVENTREQUEST = DESCRIPTOR.message_types_by_name['VodReportEventRequest']\n_VODSETCLOUDMIGRATEJOBREQUEST = DESCRIPTOR.message_types_by_name['VodSetCloudMigrateJobRequest']\n_VODSUBMITCLOUDMIGRATEJOBREQUEST = DESCRIPTOR.message_types_by_name['VodSubmitCloudMigrateJobRequest']\n_VODGETCLOUDMIGRATEJOBREQUEST = DESCRIPTOR.message_types_by_name['VodGetCloudMigrateJobRequest']\n_VODCREATEDRAMARECAPTASKREQUEST = DESCRIPTOR.message_types_by_name['VodCreateDramaRecapTaskRequest']\n_VODCREATEDRAMASCRIPTTASKREQUEST = DESCRIPTOR.message_types_by_name['VodCreateDramaScriptTaskRequest']\n_VODQUERYDRAMARECAPTASKREQUEST = DESCRIPTOR.message_types_by_name['VodQueryDramaRecapTaskRequest']\n_VODQUERYDRAMASCRIPTTASKREQUEST = DESCRIPTOR.message_types_by_name['VodQueryDramaScriptTaskRequest']\n_VODGETMEDIAENTITYLISTREQUEST = DESCRIPTOR.message_types_by_name['VodGetMediaEntityListRequest']\n_VODGETMEDIAENTITYREQUEST = DESCRIPTOR.message_types_by_name['VodGetMediaEntityRequest']\n_VODDELETEMEDIAENTITYREQUEST = DESCRIPTOR.message_types_by_name['VodDeleteMediaEntityRequest']\nVodGetAllPlayInfoRequest = _reflection.GeneratedProtocolMessageType('VodGetAllPlayInfoRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETALLPLAYINFOREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetAllPlayInfoRequest)\n  })\n_sym_db.RegisterMessage(VodGetAllPlayInfoRequest)\n\nVodGetPlayInfoRequest = _reflection.GeneratedProtocolMessageType('VodGetPlayInfoRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETPLAYINFOREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetPlayInfoRequest)\n  })\n_sym_db.RegisterMessage(VodGetPlayInfoRequest)\n\nVodGetPrivateDrmPlayAuthRequest = _reflection.GeneratedProtocolMessageType('VodGetPrivateDrmPlayAuthRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETPRIVATEDRMPLAYAUTHREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetPrivateDrmPlayAuthRequest)\n  })\n_sym_db.RegisterMessage(VodGetPrivateDrmPlayAuthRequest)\n\nVodGetHlsDecryptionKeyRequest = _reflection.GeneratedProtocolMessageType('VodGetHlsDecryptionKeyRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETHLSDECRYPTIONKEYREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetHlsDecryptionKeyRequest)\n  })\n_sym_db.RegisterMessage(VodGetHlsDecryptionKeyRequest)\n\nVodCreateHlsDecryptionKeyRequest = _reflection.GeneratedProtocolMessageType('VodCreateHlsDecryptionKeyRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEHLSDECRYPTIONKEYREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodCreateHlsDecryptionKeyRequest)\n  })\n_sym_db.RegisterMessage(VodCreateHlsDecryptionKeyRequest)\n\nVodGetPlayInfoWithLiveTimeShiftSceneRequest = _reflection.GeneratedProtocolMessageType('VodGetPlayInfoWithLiveTimeShiftSceneRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETPLAYINFOWITHLIVETIMESHIFTSCENEREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetPlayInfoWithLiveTimeShiftSceneRequest)\n  })\n_sym_db.RegisterMessage(VodGetPlayInfoWithLiveTimeShiftSceneRequest)\n\nVodDescribeDrmDataKeyRequest = _reflection.GeneratedProtocolMessageType('VodDescribeDrmDataKeyRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEDRMDATAKEYREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDescribeDrmDataKeyRequest)\n  })\n_sym_db.RegisterMessage(VodDescribeDrmDataKeyRequest)\n\nVodSubmitMoveObjectTaskRequest = _reflection.GeneratedProtocolMessageType('VodSubmitMoveObjectTaskRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITMOVEOBJECTTASKREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodSubmitMoveObjectTaskRequest)\n  })\n_sym_db.RegisterMessage(VodSubmitMoveObjectTaskRequest)\n\nVodQueryMoveObjectTaskInfoRequest = _reflection.GeneratedProtocolMessageType('VodQueryMoveObjectTaskInfoRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODQUERYMOVEOBJECTTASKINFOREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodQueryMoveObjectTaskInfoRequest)\n  })\n_sym_db.RegisterMessage(VodQueryMoveObjectTaskInfoRequest)\n\nVodSubmitBlockObjectTasksRequest = _reflection.GeneratedProtocolMessageType('VodSubmitBlockObjectTasksRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITBLOCKOBJECTTASKSREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodSubmitBlockObjectTasksRequest)\n  })\n_sym_db.RegisterMessage(VodSubmitBlockObjectTasksRequest)\n\nVodListBlockObjectTasksRequest = _reflection.GeneratedProtocolMessageType('VodListBlockObjectTasksRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTBLOCKOBJECTTASKSREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListBlockObjectTasksRequest)\n  })\n_sym_db.RegisterMessage(VodListBlockObjectTasksRequest)\n\nVodUrlUploadRequest = _reflection.GeneratedProtocolMessageType('VodUrlUploadRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODURLUPLOADREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUrlUploadRequest)\n  })\n_sym_db.RegisterMessage(VodUrlUploadRequest)\n\nVodQueryUploadTaskInfoRequest = _reflection.GeneratedProtocolMessageType('VodQueryUploadTaskInfoRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODQUERYUPLOADTASKINFOREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodQueryUploadTaskInfoRequest)\n  })\n_sym_db.RegisterMessage(VodQueryUploadTaskInfoRequest)\n\nVodApplyUploadInfoRequest = _reflection.GeneratedProtocolMessageType('VodApplyUploadInfoRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODAPPLYUPLOADINFOREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodApplyUploadInfoRequest)\n  })\n_sym_db.RegisterMessage(VodApplyUploadInfoRequest)\n\nVodUploadMediaRequest = _reflection.GeneratedProtocolMessageType('VodUploadMediaRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPLOADMEDIAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUploadMediaRequest)\n  })\n_sym_db.RegisterMessage(VodUploadMediaRequest)\n\nVodUploadMaterialRequest = _reflection.GeneratedProtocolMessageType('VodUploadMaterialRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPLOADMATERIALREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUploadMaterialRequest)\n  })\n_sym_db.RegisterMessage(VodUploadMaterialRequest)\n\nVodUploadObjectRequest = _reflection.GeneratedProtocolMessageType('VodUploadObjectRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPLOADOBJECTREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUploadObjectRequest)\n  })\n_sym_db.RegisterMessage(VodUploadObjectRequest)\n\nVodCommitUploadInfoRequest = _reflection.GeneratedProtocolMessageType('VodCommitUploadInfoRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODCOMMITUPLOADINFOREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodCommitUploadInfoRequest)\n  })\n_sym_db.RegisterMessage(VodCommitUploadInfoRequest)\n\nVodUrlUploadJsonRequest = _reflection.GeneratedProtocolMessageType('VodUrlUploadJsonRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODURLUPLOADJSONREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUrlUploadJsonRequest)\n  })\n_sym_db.RegisterMessage(VodUrlUploadJsonRequest)\n\nVodParseUploadManifestRequest = _reflection.GeneratedProtocolMessageType('VodParseUploadManifestRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODPARSEUPLOADMANIFESTREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodParseUploadManifestRequest)\n  })\n_sym_db.RegisterMessage(VodParseUploadManifestRequest)\n\nVodListFileMetaInfosByFileNamesRequest = _reflection.GeneratedProtocolMessageType('VodListFileMetaInfosByFileNamesRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTFILEMETAINFOSBYFILENAMESREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListFileMetaInfosByFileNamesRequest)\n  })\n_sym_db.RegisterMessage(VodListFileMetaInfosByFileNamesRequest)\n\nVodGetRecommendedPosterRequest = _reflection.GeneratedProtocolMessageType('VodGetRecommendedPosterRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETRECOMMENDEDPOSTERREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetRecommendedPosterRequest)\n  })\n_sym_db.RegisterMessage(VodGetRecommendedPosterRequest)\n\nVodUpdateMediaPublishStatusRequest = _reflection.GeneratedProtocolMessageType('VodUpdateMediaPublishStatusRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEMEDIAPUBLISHSTATUSREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUpdateMediaPublishStatusRequest)\n  })\n_sym_db.RegisterMessage(VodUpdateMediaPublishStatusRequest)\n\nVodUpdateMediaStorageClassRequest = _reflection.GeneratedProtocolMessageType('VodUpdateMediaStorageClassRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEMEDIASTORAGECLASSREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUpdateMediaStorageClassRequest)\n  })\n_sym_db.RegisterMessage(VodUpdateMediaStorageClassRequest)\n\nVodUpdateMediaInfoRequest = _reflection.GeneratedProtocolMessageType('VodUpdateMediaInfoRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEMEDIAINFOREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUpdateMediaInfoRequest)\n  })\n_sym_db.RegisterMessage(VodUpdateMediaInfoRequest)\n\nVodGetMediaInfosRequest = _reflection.GeneratedProtocolMessageType('VodGetMediaInfosRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETMEDIAINFOSREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetMediaInfosRequest)\n  })\n_sym_db.RegisterMessage(VodGetMediaInfosRequest)\n\nVodDeleteMaterialRequest = _reflection.GeneratedProtocolMessageType('VodDeleteMaterialRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEMATERIALREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDeleteMaterialRequest)\n  })\n_sym_db.RegisterMessage(VodDeleteMaterialRequest)\n\nVodDeleteMediaRequest = _reflection.GeneratedProtocolMessageType('VodDeleteMediaRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEMEDIAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDeleteMediaRequest)\n  })\n_sym_db.RegisterMessage(VodDeleteMediaRequest)\n\nVodDeleteTranscodesRequest = _reflection.GeneratedProtocolMessageType('VodDeleteTranscodesRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETETRANSCODESREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDeleteTranscodesRequest)\n  })\n_sym_db.RegisterMessage(VodDeleteTranscodesRequest)\n\nVodDeleteMediaTosFileRequest = _reflection.GeneratedProtocolMessageType('VodDeleteMediaTosFileRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEMEDIATOSFILEREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDeleteMediaTosFileRequest)\n  })\n_sym_db.RegisterMessage(VodDeleteMediaTosFileRequest)\n\nVodGetMediaListRequest = _reflection.GeneratedProtocolMessageType('VodGetMediaListRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETMEDIALISTREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetMediaListRequest)\n  })\n_sym_db.RegisterMessage(VodGetMediaListRequest)\n\nVodGetSubtitleInfoListRequest = _reflection.GeneratedProtocolMessageType('VodGetSubtitleInfoListRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETSUBTITLEINFOLISTREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetSubtitleInfoListRequest)\n  })\n_sym_db.RegisterMessage(VodGetSubtitleInfoListRequest)\n\nVodUpdateSubtitleStatusRequest = _reflection.GeneratedProtocolMessageType('VodUpdateSubtitleStatusRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATESUBTITLESTATUSREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUpdateSubtitleStatusRequest)\n  })\n_sym_db.RegisterMessage(VodUpdateSubtitleStatusRequest)\n\nVodUpdateSubtitleInfoRequest = _reflection.GeneratedProtocolMessageType('VodUpdateSubtitleInfoRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATESUBTITLEINFOREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUpdateSubtitleInfoRequest)\n  })\n_sym_db.RegisterMessage(VodUpdateSubtitleInfoRequest)\n\nVodGetAuditFramesForAuditRequest = _reflection.GeneratedProtocolMessageType('VodGetAuditFramesForAuditRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETAUDITFRAMESFORAUDITREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetAuditFramesForAuditRequest)\n  })\n_sym_db.RegisterMessage(VodGetAuditFramesForAuditRequest)\n\nVodGetMLFramesForAuditRequest = _reflection.GeneratedProtocolMessageType('VodGetMLFramesForAuditRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETMLFRAMESFORAUDITREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetMLFramesForAuditRequest)\n  })\n_sym_db.RegisterMessage(VodGetMLFramesForAuditRequest)\n\nVodGetBetterFramesForAuditRequest = _reflection.GeneratedProtocolMessageType('VodGetBetterFramesForAuditRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETBETTERFRAMESFORAUDITREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetBetterFramesForAuditRequest)\n  })\n_sym_db.RegisterMessage(VodGetBetterFramesForAuditRequest)\n\nVodGetAudioInfoForAuditRequest = _reflection.GeneratedProtocolMessageType('VodGetAudioInfoForAuditRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETAUDIOINFOFORAUDITREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetAudioInfoForAuditRequest)\n  })\n_sym_db.RegisterMessage(VodGetAudioInfoForAuditRequest)\n\nVodGetAutomaticSpeechRecognitionForAuditRequest = _reflection.GeneratedProtocolMessageType('VodGetAutomaticSpeechRecognitionForAuditRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETAUTOMATICSPEECHRECOGNITIONFORAUDITREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetAutomaticSpeechRecognitionForAuditRequest)\n  })\n_sym_db.RegisterMessage(VodGetAutomaticSpeechRecognitionForAuditRequest)\n\nVodGetAudioEventDetectionForAuditRequest = _reflection.GeneratedProtocolMessageType('VodGetAudioEventDetectionForAuditRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETAUDIOEVENTDETECTIONFORAUDITREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetAudioEventDetectionForAuditRequest)\n  })\n_sym_db.RegisterMessage(VodGetAudioEventDetectionForAuditRequest)\n\nVodCreateVideoClassificationRequest = _reflection.GeneratedProtocolMessageType('VodCreateVideoClassificationRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEVIDEOCLASSIFICATIONREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodCreateVideoClassificationRequest)\n  })\n_sym_db.RegisterMessage(VodCreateVideoClassificationRequest)\n\nVodUpdateVideoClassificationRequest = _reflection.GeneratedProtocolMessageType('VodUpdateVideoClassificationRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEVIDEOCLASSIFICATIONREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUpdateVideoClassificationRequest)\n  })\n_sym_db.RegisterMessage(VodUpdateVideoClassificationRequest)\n\nVodDeleteVideoClassificationRequest = _reflection.GeneratedProtocolMessageType('VodDeleteVideoClassificationRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEVIDEOCLASSIFICATIONREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDeleteVideoClassificationRequest)\n  })\n_sym_db.RegisterMessage(VodDeleteVideoClassificationRequest)\n\nVodListVideoClassificationsRequest = _reflection.GeneratedProtocolMessageType('VodListVideoClassificationsRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTVIDEOCLASSIFICATIONSREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListVideoClassificationsRequest)\n  })\n_sym_db.RegisterMessage(VodListVideoClassificationsRequest)\n\nVodListSnapshotsRequest = _reflection.GeneratedProtocolMessageType('VodListSnapshotsRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTSNAPSHOTSREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListSnapshotsRequest)\n  })\n_sym_db.RegisterMessage(VodListSnapshotsRequest)\n\nVodGetFileListRequest = _reflection.GeneratedProtocolMessageType('VodGetFileListRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETFILELISTREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetFileListRequest)\n  })\n_sym_db.RegisterMessage(VodGetFileListRequest)\n\nVodGetFileInfosRequest = _reflection.GeneratedProtocolMessageType('VodGetFileInfosRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETFILEINFOSREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetFileInfosRequest)\n  })\n_sym_db.RegisterMessage(VodGetFileInfosRequest)\n\nVodUpdateFileStorageClassRequest = _reflection.GeneratedProtocolMessageType('VodUpdateFileStorageClassRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEFILESTORAGECLASSREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUpdateFileStorageClassRequest)\n  })\n_sym_db.RegisterMessage(VodUpdateFileStorageClassRequest)\n\nVodGetInnerAuditURLsRequest = _reflection.GeneratedProtocolMessageType('VodGetInnerAuditURLsRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETINNERAUDITURLSREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetInnerAuditURLsRequest)\n  })\n_sym_db.RegisterMessage(VodGetInnerAuditURLsRequest)\n\nVodGetAdAuditResultByVidRequest = _reflection.GeneratedProtocolMessageType('VodGetAdAuditResultByVidRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETADAUDITRESULTBYVIDREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetAdAuditResultByVidRequest)\n  })\n_sym_db.RegisterMessage(VodGetAdAuditResultByVidRequest)\n\nVodExtractMediaMetaTaskRequest = _reflection.GeneratedProtocolMessageType('VodExtractMediaMetaTaskRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODEXTRACTMEDIAMETATASKREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodExtractMediaMetaTaskRequest)\n  })\n_sym_db.RegisterMessage(VodExtractMediaMetaTaskRequest)\n\nVodStartWorkflowRequest = _reflection.GeneratedProtocolMessageType('VodStartWorkflowRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODSTARTWORKFLOWREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodStartWorkflowRequest)\n  })\n_sym_db.RegisterMessage(VodStartWorkflowRequest)\n\nVodRetrieveTranscodeResultRequest = _reflection.GeneratedProtocolMessageType('VodRetrieveTranscodeResultRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODRETRIEVETRANSCODERESULTREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodRetrieveTranscodeResultRequest)\n  })\n_sym_db.RegisterMessage(VodRetrieveTranscodeResultRequest)\n\nVodListWorkflowExecutionRequest = _reflection.GeneratedProtocolMessageType('VodListWorkflowExecutionRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTWORKFLOWEXECUTIONREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListWorkflowExecutionRequest)\n  })\n_sym_db.RegisterMessage(VodListWorkflowExecutionRequest)\n\nVodGetWorkflowExecutionDetailRequest = _reflection.GeneratedProtocolMessageType('VodGetWorkflowExecutionDetailRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETWORKFLOWEXECUTIONDETAILREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetWorkflowExecutionDetailRequest)\n  })\n_sym_db.RegisterMessage(VodGetWorkflowExecutionDetailRequest)\n\nVodGetWorkflowResultRequest = _reflection.GeneratedProtocolMessageType('VodGetWorkflowResultRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETWORKFLOWRESULTREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetWorkflowResultRequest)\n  })\n_sym_db.RegisterMessage(VodGetWorkflowResultRequest)\n\nVodGetWorkflowExecutionStatusRequest = _reflection.GeneratedProtocolMessageType('VodGetWorkflowExecutionStatusRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETWORKFLOWEXECUTIONSTATUSREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetWorkflowExecutionStatusRequest)\n  })\n_sym_db.RegisterMessage(VodGetWorkflowExecutionStatusRequest)\n\nVodCreateTaskTemplateRequest = _reflection.GeneratedProtocolMessageType('VodCreateTaskTemplateRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATETASKTEMPLATEREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodCreateTaskTemplateRequest)\n  })\n_sym_db.RegisterMessage(VodCreateTaskTemplateRequest)\n\nVodUpdateTaskTemplateRequest = _reflection.GeneratedProtocolMessageType('VodUpdateTaskTemplateRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATETASKTEMPLATEREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUpdateTaskTemplateRequest)\n  })\n_sym_db.RegisterMessage(VodUpdateTaskTemplateRequest)\n\nVodDeleteTaskTemplateRequest = _reflection.GeneratedProtocolMessageType('VodDeleteTaskTemplateRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETETASKTEMPLATEREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDeleteTaskTemplateRequest)\n  })\n_sym_db.RegisterMessage(VodDeleteTaskTemplateRequest)\n\nVodGetTaskTemplateRequest = _reflection.GeneratedProtocolMessageType('VodGetTaskTemplateRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETTASKTEMPLATEREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetTaskTemplateRequest)\n  })\n_sym_db.RegisterMessage(VodGetTaskTemplateRequest)\n\nVodListTaskTemplateRequest = _reflection.GeneratedProtocolMessageType('VodListTaskTemplateRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTTASKTEMPLATEREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListTaskTemplateRequest)\n  })\n_sym_db.RegisterMessage(VodListTaskTemplateRequest)\n\nVodCreateWatermarkRequest = _reflection.GeneratedProtocolMessageType('VodCreateWatermarkRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEWATERMARKREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodCreateWatermarkRequest)\n  })\n_sym_db.RegisterMessage(VodCreateWatermarkRequest)\n\nVodUpdateWatermarkRequest = _reflection.GeneratedProtocolMessageType('VodUpdateWatermarkRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEWATERMARKREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUpdateWatermarkRequest)\n  })\n_sym_db.RegisterMessage(VodUpdateWatermarkRequest)\n\nVodDeleteWatermarkRequest = _reflection.GeneratedProtocolMessageType('VodDeleteWatermarkRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEWATERMARKREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDeleteWatermarkRequest)\n  })\n_sym_db.RegisterMessage(VodDeleteWatermarkRequest)\n\nVodGetWatermarkRequest = _reflection.GeneratedProtocolMessageType('VodGetWatermarkRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETWATERMARKREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetWatermarkRequest)\n  })\n_sym_db.RegisterMessage(VodGetWatermarkRequest)\n\nVodListWatermarkRequest = _reflection.GeneratedProtocolMessageType('VodListWatermarkRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTWATERMARKREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListWatermarkRequest)\n  })\n_sym_db.RegisterMessage(VodListWatermarkRequest)\n\nVodCreateWorkflowTemplateRequest = _reflection.GeneratedProtocolMessageType('VodCreateWorkflowTemplateRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEWORKFLOWTEMPLATEREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodCreateWorkflowTemplateRequest)\n  })\n_sym_db.RegisterMessage(VodCreateWorkflowTemplateRequest)\n\nVodUpdateWorkflowTemplateRequest = _reflection.GeneratedProtocolMessageType('VodUpdateWorkflowTemplateRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEWORKFLOWTEMPLATEREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUpdateWorkflowTemplateRequest)\n  })\n_sym_db.RegisterMessage(VodUpdateWorkflowTemplateRequest)\n\nVodDeleteWorkflowTemplateRequest = _reflection.GeneratedProtocolMessageType('VodDeleteWorkflowTemplateRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEWORKFLOWTEMPLATEREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDeleteWorkflowTemplateRequest)\n  })\n_sym_db.RegisterMessage(VodDeleteWorkflowTemplateRequest)\n\nVodGetWorkflowTemplateRequest = _reflection.GeneratedProtocolMessageType('VodGetWorkflowTemplateRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETWORKFLOWTEMPLATEREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetWorkflowTemplateRequest)\n  })\n_sym_db.RegisterMessage(VodGetWorkflowTemplateRequest)\n\nVodListWorkflowTemplateRequest = _reflection.GeneratedProtocolMessageType('VodListWorkflowTemplateRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTWORKFLOWTEMPLATEREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListWorkflowTemplateRequest)\n  })\n_sym_db.RegisterMessage(VodListWorkflowTemplateRequest)\n\nVodSubmitDirectEditTaskAsyncRequest = _reflection.GeneratedProtocolMessageType('VodSubmitDirectEditTaskAsyncRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITDIRECTEDITTASKASYNCREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodSubmitDirectEditTaskAsyncRequest)\n  })\n_sym_db.RegisterMessage(VodSubmitDirectEditTaskAsyncRequest)\n\nVodSubmitDirectEditTaskSyncRequest = _reflection.GeneratedProtocolMessageType('VodSubmitDirectEditTaskSyncRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITDIRECTEDITTASKSYNCREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodSubmitDirectEditTaskSyncRequest)\n  })\n_sym_db.RegisterMessage(VodSubmitDirectEditTaskSyncRequest)\n\nVodGetDirectEditResultRequest = _reflection.GeneratedProtocolMessageType('VodGetDirectEditResultRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETDIRECTEDITRESULTREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetDirectEditResultRequest)\n  })\n_sym_db.RegisterMessage(VodGetDirectEditResultRequest)\n\nVodGetDirectEditProgressRequest = _reflection.GeneratedProtocolMessageType('VodGetDirectEditProgressRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETDIRECTEDITPROGRESSREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetDirectEditProgressRequest)\n  })\n_sym_db.RegisterMessage(VodGetDirectEditProgressRequest)\n\nVodCancelDirectEditTaskRequest = _reflection.GeneratedProtocolMessageType('VodCancelDirectEditTaskRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODCANCELDIRECTEDITTASKREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodCancelDirectEditTaskRequest)\n  })\n_sym_db.RegisterMessage(VodCancelDirectEditTaskRequest)\n\nVodAsyncVCreativeTaskRequest = _reflection.GeneratedProtocolMessageType('VodAsyncVCreativeTaskRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODASYNCVCREATIVETASKREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodAsyncVCreativeTaskRequest)\n  })\n_sym_db.RegisterMessage(VodAsyncVCreativeTaskRequest)\n\nVodGetVCreativeTaskResultRequest = _reflection.GeneratedProtocolMessageType('VodGetVCreativeTaskResultRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETVCREATIVETASKRESULTREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetVCreativeTaskResultRequest)\n  })\n_sym_db.RegisterMessage(VodGetVCreativeTaskResultRequest)\n\nVodDeleteSpaceRequest = _reflection.GeneratedProtocolMessageType('VodDeleteSpaceRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETESPACEREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDeleteSpaceRequest)\n  })\n_sym_db.RegisterMessage(VodDeleteSpaceRequest)\n\nVodCreateSpaceRequest = _reflection.GeneratedProtocolMessageType('VodCreateSpaceRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATESPACEREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodCreateSpaceRequest)\n  })\n_sym_db.RegisterMessage(VodCreateSpaceRequest)\n\nVodGetSpaceDetailRequest = _reflection.GeneratedProtocolMessageType('VodGetSpaceDetailRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETSPACEDETAILREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetSpaceDetailRequest)\n  })\n_sym_db.RegisterMessage(VodGetSpaceDetailRequest)\n\nVodListSpaceRequest = _reflection.GeneratedProtocolMessageType('VodListSpaceRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTSPACEREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListSpaceRequest)\n  })\n_sym_db.RegisterMessage(VodListSpaceRequest)\n\nVodUpdateSpaceRequest = _reflection.GeneratedProtocolMessageType('VodUpdateSpaceRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATESPACEREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUpdateSpaceRequest)\n  })\n_sym_db.RegisterMessage(VodUpdateSpaceRequest)\n\nVodUpdateSpaceUploadConfigRequest = _reflection.GeneratedProtocolMessageType('VodUpdateSpaceUploadConfigRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATESPACEUPLOADCONFIGREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUpdateSpaceUploadConfigRequest)\n  })\n_sym_db.RegisterMessage(VodUpdateSpaceUploadConfigRequest)\n\nVodDescribeUploadSpaceConfigRequest = _reflection.GeneratedProtocolMessageType('VodDescribeUploadSpaceConfigRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEUPLOADSPACECONFIGREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDescribeUploadSpaceConfigRequest)\n  })\n_sym_db.RegisterMessage(VodDescribeUploadSpaceConfigRequest)\n\nVodUpdateUploadSpaceConfigRequest = _reflection.GeneratedProtocolMessageType('VodUpdateUploadSpaceConfigRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEUPLOADSPACECONFIGREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUpdateUploadSpaceConfigRequest)\n  })\n_sym_db.RegisterMessage(VodUpdateUploadSpaceConfigRequest)\n\nVodDescribeVodSpaceStorageDataRequest = _reflection.GeneratedProtocolMessageType('VodDescribeVodSpaceStorageDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEVODSPACESTORAGEDATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDescribeVodSpaceStorageDataRequest)\n  })\n_sym_db.RegisterMessage(VodDescribeVodSpaceStorageDataRequest)\n\nVodUpdateDomainPlayRuleRequest = _reflection.GeneratedProtocolMessageType('VodUpdateDomainPlayRuleRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEDOMAINPLAYRULEREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUpdateDomainPlayRuleRequest)\n  })\n_sym_db.RegisterMessage(VodUpdateDomainPlayRuleRequest)\n\nVodAddDomainToSchedulerRequest = _reflection.GeneratedProtocolMessageType('VodAddDomainToSchedulerRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODADDDOMAINTOSCHEDULERREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodAddDomainToSchedulerRequest)\n  })\n_sym_db.RegisterMessage(VodAddDomainToSchedulerRequest)\n\nVodRemoveDomainFromSchedulerRequest = _reflection.GeneratedProtocolMessageType('VodRemoveDomainFromSchedulerRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODREMOVEDOMAINFROMSCHEDULERREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodRemoveDomainFromSchedulerRequest)\n  })\n_sym_db.RegisterMessage(VodRemoveDomainFromSchedulerRequest)\n\nVodDeleteDomainRequest = _reflection.GeneratedProtocolMessageType('VodDeleteDomainRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEDOMAINREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDeleteDomainRequest)\n  })\n_sym_db.RegisterMessage(VodDeleteDomainRequest)\n\nVodStartDomainRequest = _reflection.GeneratedProtocolMessageType('VodStartDomainRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODSTARTDOMAINREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodStartDomainRequest)\n  })\n_sym_db.RegisterMessage(VodStartDomainRequest)\n\nVodStopDomainRequest = _reflection.GeneratedProtocolMessageType('VodStopDomainRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODSTOPDOMAINREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodStopDomainRequest)\n  })\n_sym_db.RegisterMessage(VodStopDomainRequest)\n\nVodListDomainRequest = _reflection.GeneratedProtocolMessageType('VodListDomainRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTDOMAINREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListDomainRequest)\n  })\n_sym_db.RegisterMessage(VodListDomainRequest)\n\nVodCreateCdnRefreshTaskRequest = _reflection.GeneratedProtocolMessageType('VodCreateCdnRefreshTaskRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATECDNREFRESHTASKREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodCreateCdnRefreshTaskRequest)\n  })\n_sym_db.RegisterMessage(VodCreateCdnRefreshTaskRequest)\n\nVodCreateCdnPreloadTaskRequest = _reflection.GeneratedProtocolMessageType('VodCreateCdnPreloadTaskRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATECDNPRELOADTASKREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodCreateCdnPreloadTaskRequest)\n  })\n_sym_db.RegisterMessage(VodCreateCdnPreloadTaskRequest)\n\nVodListCdnTasksRequest = _reflection.GeneratedProtocolMessageType('VodListCdnTasksRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTCDNTASKSREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListCdnTasksRequest)\n  })\n_sym_db.RegisterMessage(VodListCdnTasksRequest)\n\nVodListCdnAccessLogRequest = _reflection.GeneratedProtocolMessageType('VodListCdnAccessLogRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTCDNACCESSLOGREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListCdnAccessLogRequest)\n  })\n_sym_db.RegisterMessage(VodListCdnAccessLogRequest)\n\nVodListCdnTopAccessUrlRequest = _reflection.GeneratedProtocolMessageType('VodListCdnTopAccessUrlRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTCDNTOPACCESSURLREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListCdnTopAccessUrlRequest)\n  })\n_sym_db.RegisterMessage(VodListCdnTopAccessUrlRequest)\n\nVodListCdnTopAccessRequest = _reflection.GeneratedProtocolMessageType('VodListCdnTopAccessRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTCDNTOPACCESSREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListCdnTopAccessRequest)\n  })\n_sym_db.RegisterMessage(VodListCdnTopAccessRequest)\n\nVodDescribeVodDomainBandwidthDataRequest = _reflection.GeneratedProtocolMessageType('VodDescribeVodDomainBandwidthDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEVODDOMAINBANDWIDTHDATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDescribeVodDomainBandwidthDataRequest)\n  })\n_sym_db.RegisterMessage(VodDescribeVodDomainBandwidthDataRequest)\n\nVodListCdnUsageDataRequest = _reflection.GeneratedProtocolMessageType('VodListCdnUsageDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTCDNUSAGEDATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListCdnUsageDataRequest)\n  })\n_sym_db.RegisterMessage(VodListCdnUsageDataRequest)\n\nVodListCdnStatusDataRequest = _reflection.GeneratedProtocolMessageType('VodListCdnStatusDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTCDNSTATUSDATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListCdnStatusDataRequest)\n  })\n_sym_db.RegisterMessage(VodListCdnStatusDataRequest)\n\nVodDescribeIPInfoRequest = _reflection.GeneratedProtocolMessageType('VodDescribeIPInfoRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEIPINFOREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDescribeIPInfoRequest)\n  })\n_sym_db.RegisterMessage(VodDescribeIPInfoRequest)\n\nVodListCdnPvDataRequest = _reflection.GeneratedProtocolMessageType('VodListCdnPvDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTCDNPVDATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListCdnPvDataRequest)\n  })\n_sym_db.RegisterMessage(VodListCdnPvDataRequest)\n\nVodListCdnHitrateDataRequest = _reflection.GeneratedProtocolMessageType('VodListCdnHitrateDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTCDNHITRATEDATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListCdnHitrateDataRequest)\n  })\n_sym_db.RegisterMessage(VodListCdnHitrateDataRequest)\n\nVodDescribeVodDomainTrafficDataRequest = _reflection.GeneratedProtocolMessageType('VodDescribeVodDomainTrafficDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEVODDOMAINTRAFFICDATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDescribeVodDomainTrafficDataRequest)\n  })\n_sym_db.RegisterMessage(VodDescribeVodDomainTrafficDataRequest)\n\nVodSubmitBlockTasksRequest = _reflection.GeneratedProtocolMessageType('VodSubmitBlockTasksRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITBLOCKTASKSREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodSubmitBlockTasksRequest)\n  })\n_sym_db.RegisterMessage(VodSubmitBlockTasksRequest)\n\nVodGetContentBlockTasksRequest = _reflection.GeneratedProtocolMessageType('VodGetContentBlockTasksRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETCONTENTBLOCKTASKSREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetContentBlockTasksRequest)\n  })\n_sym_db.RegisterMessage(VodGetContentBlockTasksRequest)\n\nVodCreateDomainV2Request = _reflection.GeneratedProtocolMessageType('VodCreateDomainV2Request', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEDOMAINV2REQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodCreateDomainV2Request)\n  })\n_sym_db.RegisterMessage(VodCreateDomainV2Request)\n\nVodCreateDomainV3Request = _reflection.GeneratedProtocolMessageType('VodCreateDomainV3Request', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEDOMAINV3REQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodCreateDomainV3Request)\n  })\n_sym_db.RegisterMessage(VodCreateDomainV3Request)\n\nVodUpdateDomainExpireV2Request = _reflection.GeneratedProtocolMessageType('VodUpdateDomainExpireV2Request', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEDOMAINEXPIREV2REQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUpdateDomainExpireV2Request)\n  })\n_sym_db.RegisterMessage(VodUpdateDomainExpireV2Request)\n\nVodUpdateDomainAuthConfigV2Request = _reflection.GeneratedProtocolMessageType('VodUpdateDomainAuthConfigV2Request', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEDOMAINAUTHCONFIGV2REQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUpdateDomainAuthConfigV2Request)\n  })\n_sym_db.RegisterMessage(VodUpdateDomainAuthConfigV2Request)\n\nVodUpdateDomainUrlAuthConfigV2Request = _reflection.GeneratedProtocolMessageType('VodUpdateDomainUrlAuthConfigV2Request', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEDOMAINURLAUTHCONFIGV2REQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUpdateDomainUrlAuthConfigV2Request)\n  })\n_sym_db.RegisterMessage(VodUpdateDomainUrlAuthConfigV2Request)\n\nVodDescribeCdnEdgeIpRequest = _reflection.GeneratedProtocolMessageType('VodDescribeCdnEdgeIpRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBECDNEDGEIPREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDescribeCdnEdgeIpRequest)\n  })\n_sym_db.RegisterMessage(VodDescribeCdnEdgeIpRequest)\n\nVodDescribeCdnRegionAndIspRequest = _reflection.GeneratedProtocolMessageType('VodDescribeCdnRegionAndIspRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBECDNREGIONANDISPREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDescribeCdnRegionAndIspRequest)\n  })\n_sym_db.RegisterMessage(VodDescribeCdnRegionAndIspRequest)\n\nVodVerifyDomainOwnerRequest = _reflection.GeneratedProtocolMessageType('VodVerifyDomainOwnerRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODVERIFYDOMAINOWNERREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodVerifyDomainOwnerRequest)\n  })\n_sym_db.RegisterMessage(VodVerifyDomainOwnerRequest)\n\nVodDescribeDomainVerifyContentRequest = _reflection.GeneratedProtocolMessageType('VodDescribeDomainVerifyContentRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEDOMAINVERIFYCONTENTREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDescribeDomainVerifyContentRequest)\n  })\n_sym_db.RegisterMessage(VodDescribeDomainVerifyContentRequest)\n\nVodListPCDNDomainRequest = _reflection.GeneratedProtocolMessageType('VodListPCDNDomainRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTPCDNDOMAINREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListPCDNDomainRequest)\n  })\n_sym_db.RegisterMessage(VodListPCDNDomainRequest)\n\nVodCreatePCDNDomainRequest = _reflection.GeneratedProtocolMessageType('VodCreatePCDNDomainRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEPCDNDOMAINREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodCreatePCDNDomainRequest)\n  })\n_sym_db.RegisterMessage(VodCreatePCDNDomainRequest)\n\nVodStartPCDNDomainRequest = _reflection.GeneratedProtocolMessageType('VodStartPCDNDomainRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODSTARTPCDNDOMAINREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodStartPCDNDomainRequest)\n  })\n_sym_db.RegisterMessage(VodStartPCDNDomainRequest)\n\nVodStopPCDNDomainRequest = _reflection.GeneratedProtocolMessageType('VodStopPCDNDomainRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODSTOPPCDNDOMAINREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodStopPCDNDomainRequest)\n  })\n_sym_db.RegisterMessage(VodStopPCDNDomainRequest)\n\nVodDeletePCDNDomainRequest = _reflection.GeneratedProtocolMessageType('VodDeletePCDNDomainRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEPCDNDOMAINREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDeletePCDNDomainRequest)\n  })\n_sym_db.RegisterMessage(VodDeletePCDNDomainRequest)\n\nVodUpdateDomainConfigRequest = _reflection.GeneratedProtocolMessageType('VodUpdateDomainConfigRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEDOMAINCONFIGREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodUpdateDomainConfigRequest)\n  })\n_sym_db.RegisterMessage(VodUpdateDomainConfigRequest)\n\nVodDescribeDomainConfigRequest = _reflection.GeneratedProtocolMessageType('VodDescribeDomainConfigRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEDOMAINCONFIGREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDescribeDomainConfigRequest)\n  })\n_sym_db.RegisterMessage(VodDescribeDomainConfigRequest)\n\nAddOrUpdateCertificateV2Request = _reflection.GeneratedProtocolMessageType('AddOrUpdateCertificateV2Request', (_message.Message,), {\n  'DESCRIPTOR' : _ADDORUPDATECERTIFICATEV2REQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.AddOrUpdateCertificateV2Request)\n  })\n_sym_db.RegisterMessage(AddOrUpdateCertificateV2Request)\n\nUpdateDomainAreaRequest = _reflection.GeneratedProtocolMessageType('UpdateDomainAreaRequest', (_message.Message,), {\n  'DESCRIPTOR' : _UPDATEDOMAINAREAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.UpdateDomainAreaRequest)\n  })\n_sym_db.RegisterMessage(UpdateDomainAreaRequest)\n\nVodAddCallbackSubscriptionRequest = _reflection.GeneratedProtocolMessageType('VodAddCallbackSubscriptionRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODADDCALLBACKSUBSCRIPTIONREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodAddCallbackSubscriptionRequest)\n  })\n_sym_db.RegisterMessage(VodAddCallbackSubscriptionRequest)\n\nVodSetCallbackEventRequest = _reflection.GeneratedProtocolMessageType('VodSetCallbackEventRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODSETCALLBACKEVENTREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodSetCallbackEventRequest)\n  })\n_sym_db.RegisterMessage(VodSetCallbackEventRequest)\n\nGetCallbackRecordRequest = _reflection.GeneratedProtocolMessageType('GetCallbackRecordRequest', (_message.Message,), {\n  'DESCRIPTOR' : _GETCALLBACKRECORDREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.GetCallbackRecordRequest)\n  })\n_sym_db.RegisterMessage(GetCallbackRecordRequest)\n\nVodGetSmartStrategyLitePlayInfoRequest = _reflection.GeneratedProtocolMessageType('VodGetSmartStrategyLitePlayInfoRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETSMARTSTRATEGYLITEPLAYINFOREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetSmartStrategyLitePlayInfoRequest)\n  })\n_sym_db.RegisterMessage(VodGetSmartStrategyLitePlayInfoRequest)\n\nVodGetAppInfoRequest = _reflection.GeneratedProtocolMessageType('VodGetAppInfoRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETAPPINFOREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetAppInfoRequest)\n  })\n_sym_db.RegisterMessage(VodGetAppInfoRequest)\n\nDescribeVodSpaceTranscodeDataRequest = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceTranscodeDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACETRANSCODEDATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.DescribeVodSpaceTranscodeDataRequest)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceTranscodeDataRequest)\n\nDescribeVodSpaceAIStatisDataRequest = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceAIStatisDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEAISTATISDATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.DescribeVodSpaceAIStatisDataRequest)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceAIStatisDataRequest)\n\nDescribeVodSpaceSubtitleStatisDataRequest = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceSubtitleStatisDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACESUBTITLESTATISDATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.DescribeVodSpaceSubtitleStatisDataRequest)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceSubtitleStatisDataRequest)\n\nDescribeVodSpaceDetectStatisDataRequest = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceDetectStatisDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEDETECTSTATISDATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.DescribeVodSpaceDetectStatisDataRequest)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceDetectStatisDataRequest)\n\nDescribeVodSnapshotDataRequest = _reflection.GeneratedProtocolMessageType('DescribeVodSnapshotDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSNAPSHOTDATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.DescribeVodSnapshotDataRequest)\n  })\n_sym_db.RegisterMessage(DescribeVodSnapshotDataRequest)\n\nDescribeVodSpaceWorkflowDetailDataRequest = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceWorkflowDetailDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEWORKFLOWDETAILDATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.DescribeVodSpaceWorkflowDetailDataRequest)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceWorkflowDetailDataRequest)\n\nDescribeVodSpaceEditDetailDataRequest = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceEditDetailDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEEDITDETAILDATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.DescribeVodSpaceEditDetailDataRequest)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceEditDetailDataRequest)\n\nDescribeVodPlayFileLogByDomainRequest = _reflection.GeneratedProtocolMessageType('DescribeVodPlayFileLogByDomainRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODPLAYFILELOGBYDOMAINREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.DescribeVodPlayFileLogByDomainRequest)\n  })\n_sym_db.RegisterMessage(DescribeVodPlayFileLogByDomainRequest)\n\nDescribeVodEnhanceImageDataRequest = _reflection.GeneratedProtocolMessageType('DescribeVodEnhanceImageDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODENHANCEIMAGEDATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.DescribeVodEnhanceImageDataRequest)\n  })\n_sym_db.RegisterMessage(DescribeVodEnhanceImageDataRequest)\n\nDescribeVodSpaceEditStatisDataRequest = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceEditStatisDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEEDITSTATISDATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.DescribeVodSpaceEditStatisDataRequest)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceEditStatisDataRequest)\n\nDescribeVodPlayedStatisDataRequest = _reflection.GeneratedProtocolMessageType('DescribeVodPlayedStatisDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODPLAYEDSTATISDATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.DescribeVodPlayedStatisDataRequest)\n  })\n_sym_db.RegisterMessage(DescribeVodPlayedStatisDataRequest)\n\nDescribeVodMostPlayedStatisDataRequest = _reflection.GeneratedProtocolMessageType('DescribeVodMostPlayedStatisDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODMOSTPLAYEDSTATISDATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.DescribeVodMostPlayedStatisDataRequest)\n  })\n_sym_db.RegisterMessage(DescribeVodMostPlayedStatisDataRequest)\n\nDescribeVodRealtimeMediaDataRequest = _reflection.GeneratedProtocolMessageType('DescribeVodRealtimeMediaDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODREALTIMEMEDIADATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.DescribeVodRealtimeMediaDataRequest)\n  })\n_sym_db.RegisterMessage(DescribeVodRealtimeMediaDataRequest)\n\nDescribeVodRealtimeMediaDetailDataRequest = _reflection.GeneratedProtocolMessageType('DescribeVodRealtimeMediaDetailDataRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODREALTIMEMEDIADETAILDATAREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.DescribeVodRealtimeMediaDetailDataRequest)\n  })\n_sym_db.RegisterMessage(DescribeVodRealtimeMediaDetailDataRequest)\n\nDescribeVodVidTrafficFileLogRequest = _reflection.GeneratedProtocolMessageType('DescribeVodVidTrafficFileLogRequest', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODVIDTRAFFICFILELOGREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.DescribeVodVidTrafficFileLogRequest)\n  })\n_sym_db.RegisterMessage(DescribeVodVidTrafficFileLogRequest)\n\nVodSubmitBlockMediaTaskRequest = _reflection.GeneratedProtocolMessageType('VodSubmitBlockMediaTaskRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITBLOCKMEDIATASKREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodSubmitBlockMediaTaskRequest)\n  })\n_sym_db.RegisterMessage(VodSubmitBlockMediaTaskRequest)\n\nVodSubmitUnblockMediaTaskRequest = _reflection.GeneratedProtocolMessageType('VodSubmitUnblockMediaTaskRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITUNBLOCKMEDIATASKREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodSubmitUnblockMediaTaskRequest)\n  })\n_sym_db.RegisterMessage(VodSubmitUnblockMediaTaskRequest)\n\nVodQueryMediaBlockStatusRequest = _reflection.GeneratedProtocolMessageType('VodQueryMediaBlockStatusRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODQUERYMEDIABLOCKSTATUSREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodQueryMediaBlockStatusRequest)\n  })\n_sym_db.RegisterMessage(VodQueryMediaBlockStatusRequest)\n\nVodListProjectsRequest = _reflection.GeneratedProtocolMessageType('VodListProjectsRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTPROJECTSREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodListProjectsRequest)\n  })\n_sym_db.RegisterMessage(VodListProjectsRequest)\n\nVodGetTradeConfigurationRequest = _reflection.GeneratedProtocolMessageType('VodGetTradeConfigurationRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETTRADECONFIGURATIONREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetTradeConfigurationRequest)\n  })\n_sym_db.RegisterMessage(VodGetTradeConfigurationRequest)\n\nVodReportEventRequest = _reflection.GeneratedProtocolMessageType('VodReportEventRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODREPORTEVENTREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodReportEventRequest)\n  })\n_sym_db.RegisterMessage(VodReportEventRequest)\n\nVodSetCloudMigrateJobRequest = _reflection.GeneratedProtocolMessageType('VodSetCloudMigrateJobRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODSETCLOUDMIGRATEJOBREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodSetCloudMigrateJobRequest)\n  })\n_sym_db.RegisterMessage(VodSetCloudMigrateJobRequest)\n\nVodSubmitCloudMigrateJobRequest = _reflection.GeneratedProtocolMessageType('VodSubmitCloudMigrateJobRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITCLOUDMIGRATEJOBREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodSubmitCloudMigrateJobRequest)\n  })\n_sym_db.RegisterMessage(VodSubmitCloudMigrateJobRequest)\n\nVodGetCloudMigrateJobRequest = _reflection.GeneratedProtocolMessageType('VodGetCloudMigrateJobRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETCLOUDMIGRATEJOBREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetCloudMigrateJobRequest)\n  })\n_sym_db.RegisterMessage(VodGetCloudMigrateJobRequest)\n\nVodCreateDramaRecapTaskRequest = _reflection.GeneratedProtocolMessageType('VodCreateDramaRecapTaskRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEDRAMARECAPTASKREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodCreateDramaRecapTaskRequest)\n  })\n_sym_db.RegisterMessage(VodCreateDramaRecapTaskRequest)\n\nVodCreateDramaScriptTaskRequest = _reflection.GeneratedProtocolMessageType('VodCreateDramaScriptTaskRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEDRAMASCRIPTTASKREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodCreateDramaScriptTaskRequest)\n  })\n_sym_db.RegisterMessage(VodCreateDramaScriptTaskRequest)\n\nVodQueryDramaRecapTaskRequest = _reflection.GeneratedProtocolMessageType('VodQueryDramaRecapTaskRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODQUERYDRAMARECAPTASKREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodQueryDramaRecapTaskRequest)\n  })\n_sym_db.RegisterMessage(VodQueryDramaRecapTaskRequest)\n\nVodQueryDramaScriptTaskRequest = _reflection.GeneratedProtocolMessageType('VodQueryDramaScriptTaskRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODQUERYDRAMASCRIPTTASKREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodQueryDramaScriptTaskRequest)\n  })\n_sym_db.RegisterMessage(VodQueryDramaScriptTaskRequest)\n\nVodGetMediaEntityListRequest = _reflection.GeneratedProtocolMessageType('VodGetMediaEntityListRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETMEDIAENTITYLISTREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetMediaEntityListRequest)\n  })\n_sym_db.RegisterMessage(VodGetMediaEntityListRequest)\n\nVodGetMediaEntityRequest = _reflection.GeneratedProtocolMessageType('VodGetMediaEntityRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETMEDIAENTITYREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodGetMediaEntityRequest)\n  })\n_sym_db.RegisterMessage(VodGetMediaEntityRequest)\n\nVodDeleteMediaEntityRequest = _reflection.GeneratedProtocolMessageType('VodDeleteMediaEntityRequest', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEMEDIAENTITYREQUEST,\n  '__module__' : 'volcengine.vod.request.request_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Request.VodDeleteMediaEntityRequest)\n  })\n_sym_db.RegisterMessage(VodDeleteMediaEntityRequest)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n(com.volcengine.service.vod.model.requestB\\nVodRequestP\\001Z@github.com/volcengine/volc-sdk-golang/service/vod/models/request\\240\\001\\001\\330\\001\\001\\312\\002\\037Volc\\\\Service\\\\Vod\\\\Models\\\\Request\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _VODGETALLPLAYINFOREQUEST._serialized_start=399\n  _VODGETALLPLAYINFOREQUEST._serialized_end=787\n  _VODGETPLAYINFOREQUEST._serialized_start=790\n  _VODGETPLAYINFOREQUEST._serialized_end=1272\n  _VODGETPRIVATEDRMPLAYAUTHREQUEST._serialized_start=1274\n  _VODGETPRIVATEDRMPLAYAUTHREQUEST._serialized_end=1377\n  _VODGETHLSDECRYPTIONKEYREQUEST._serialized_start=1379\n  _VODGETHLSDECRYPTIONKEYREQUEST._serialized_end=1460\n  _VODCREATEHLSDECRYPTIONKEYREQUEST._serialized_start=1462\n  _VODCREATEHLSDECRYPTIONKEYREQUEST._serialized_end=1515\n  _VODGETPLAYINFOWITHLIVETIMESHIFTSCENEREQUEST._serialized_start=1518\n  _VODGETPLAYINFOWITHLIVETIMESHIFTSCENEREQUEST._serialized_end=1670\n  _VODDESCRIBEDRMDATAKEYREQUEST._serialized_start=1672\n  _VODDESCRIBEDRMDATAKEYREQUEST._serialized_end=1714\n  _VODSUBMITMOVEOBJECTTASKREQUEST._serialized_start=1717\n  _VODSUBMITMOVEOBJECTTASKREQUEST._serialized_end=1889\n  _VODQUERYMOVEOBJECTTASKINFOREQUEST._serialized_start=1891\n  _VODQUERYMOVEOBJECTTASKINFOREQUEST._serialized_end=1984\n  _VODSUBMITBLOCKOBJECTTASKSREQUEST._serialized_start=1986\n  _VODSUBMITBLOCKOBJECTTASKSREQUEST._serialized_end=2107\n  _VODLISTBLOCKOBJECTTASKSREQUEST._serialized_start=2109\n  _VODLISTBLOCKOBJECTTASKSREQUEST._serialized_end=2206\n  _VODURLUPLOADREQUEST._serialized_start=2208\n  _VODURLUPLOADREQUEST._serialized_end=2317\n  _VODQUERYUPLOADTASKINFOREQUEST._serialized_start=2319\n  _VODQUERYUPLOADTASKINFOREQUEST._serialized_end=2366\n  _VODAPPLYUPLOADINFOREQUEST._serialized_start=2369\n  _VODAPPLYUPLOADINFOREQUEST._serialized_end=2632\n  _VODUPLOADMEDIAREQUEST._serialized_start=2635\n  _VODUPLOADMEDIAREQUEST._serialized_end=3014\n  _VODUPLOADMATERIALREQUEST._serialized_start=3017\n  _VODUPLOADMATERIALREQUEST._serialized_end=3320\n  _VODUPLOADOBJECTREQUEST._serialized_start=3323\n  _VODUPLOADOBJECTREQUEST._serialized_end=3606\n  _VODCOMMITUPLOADINFOREQUEST._serialized_start=3609\n  _VODCOMMITUPLOADINFOREQUEST._serialized_end=3762\n  _VODURLUPLOADJSONREQUEST._serialized_start=3764\n  _VODURLUPLOADJSONREQUEST._serialized_end=3825\n  _VODPARSEUPLOADMANIFESTREQUEST._serialized_start=3827\n  _VODPARSEUPLOADMANIFESTREQUEST._serialized_end=3924\n  _VODLISTFILEMETAINFOSBYFILENAMESREQUEST._serialized_start=3926\n  _VODLISTFILEMETAINFOSBYFILENAMESREQUEST._serialized_end=4031\n  _VODGETRECOMMENDEDPOSTERREQUEST._serialized_start=4033\n  _VODGETRECOMMENDEDPOSTERREQUEST._serialized_end=4079\n  _VODUPDATEMEDIAPUBLISHSTATUSREQUEST._serialized_start=4081\n  _VODUPDATEMEDIAPUBLISHSTATUSREQUEST._serialized_end=4146\n  _VODUPDATEMEDIASTORAGECLASSREQUEST._serialized_start=4148\n  _VODUPDATEMEDIASTORAGECLASSREQUEST._serialized_end=4258\n  _VODUPDATEMEDIAINFOREQUEST._serialized_start=4261\n  _VODUPDATEMEDIAINFOREQUEST._serialized_end=4595\n  _VODGETMEDIAINFOSREQUEST._serialized_start=4597\n  _VODGETMEDIAINFOSREQUEST._serialized_end=4636\n  _VODDELETEMATERIALREQUEST._serialized_start=4638\n  _VODDELETEMATERIALREQUEST._serialized_end=4696\n  _VODDELETEMEDIAREQUEST._serialized_start=4698\n  _VODDELETEMEDIAREQUEST._serialized_end=4757\n  _VODDELETETRANSCODESREQUEST._serialized_start=4759\n  _VODDELETETRANSCODESREQUEST._serialized_end=4839\n  _VODDELETEMEDIATOSFILEREQUEST._serialized_start=4841\n  _VODDELETEMEDIATOSFILEREQUEST._serialized_end=4909\n  _VODGETMEDIALISTREQUEST._serialized_start=4912\n  _VODGETMEDIALISTREQUEST._serialized_end=5178\n  _VODGETSUBTITLEINFOLISTREQUEST._serialized_start=5181\n  _VODGETSUBTITLEINFOLISTREQUEST._serialized_end=5411\n  _VODUPDATESUBTITLESTATUSREQUEST._serialized_start=5413\n  _VODUPDATESUBTITLESTATUSREQUEST._serialized_end=5527\n  _VODUPDATESUBTITLEINFOREQUEST._serialized_start=5530\n  _VODUPDATESUBTITLEINFOREQUEST._serialized_end=5711\n  _VODGETAUDITFRAMESFORAUDITREQUEST._serialized_start=5713\n  _VODGETAUDITFRAMESFORAUDITREQUEST._serialized_end=5832\n  _VODGETMLFRAMESFORAUDITREQUEST._serialized_start=5835\n  _VODGETMLFRAMESFORAUDITREQUEST._serialized_end=6124\n  _VODGETBETTERFRAMESFORAUDITREQUEST._serialized_start=6126\n  _VODGETBETTERFRAMESFORAUDITREQUEST._serialized_end=6211\n  _VODGETAUDIOINFOFORAUDITREQUEST._serialized_start=6213\n  _VODGETAUDIOINFOFORAUDITREQUEST._serialized_end=6276\n  _VODGETAUTOMATICSPEECHRECOGNITIONFORAUDITREQUEST._serialized_start=6278\n  _VODGETAUTOMATICSPEECHRECOGNITIONFORAUDITREQUEST._serialized_end=6358\n  _VODGETAUDIOEVENTDETECTIONFORAUDITREQUEST._serialized_start=6360\n  _VODGETAUDIOEVENTDETECTIONFORAUDITREQUEST._serialized_end=6433\n  _VODCREATEVIDEOCLASSIFICATIONREQUEST._serialized_start=6435\n  _VODCREATEVIDEOCLASSIFICATIONREQUEST._serialized_end=6548\n  _VODUPDATEVIDEOCLASSIFICATIONREQUEST._serialized_start=6550\n  _VODUPDATEVIDEOCLASSIFICATIONREQUEST._serialized_end=6656\n  _VODDELETEVIDEOCLASSIFICATIONREQUEST._serialized_start=6658\n  _VODDELETEVIDEOCLASSIFICATIONREQUEST._serialized_end=6740\n  _VODLISTVIDEOCLASSIFICATIONSREQUEST._serialized_start=6742\n  _VODLISTVIDEOCLASSIFICATIONSREQUEST._serialized_end=6823\n  _VODLISTSNAPSHOTSREQUEST._serialized_start=6825\n  _VODLISTSNAPSHOTSREQUEST._serialized_end=6863\n  _VODGETFILELISTREQUEST._serialized_start=6865\n  _VODGETFILELISTREQUEST._serialized_end=6955\n  _VODGETFILEINFOSREQUEST._serialized_start=6958\n  _VODGETFILEINFOSREQUEST._serialized_end=7131\n  _VODUPDATEFILESTORAGECLASSREQUEST._serialized_start=7134\n  _VODUPDATEFILESTORAGECLASSREQUEST._serialized_end=7283\n  _VODGETINNERAUDITURLSREQUEST._serialized_start=7285\n  _VODGETINNERAUDITURLSREQUEST._serialized_end=7365\n  _VODGETADAUDITRESULTBYVIDREQUEST._serialized_start=7367\n  _VODGETADAUDITRESULTBYVIDREQUEST._serialized_end=7449\n  _VODEXTRACTMEDIAMETATASKREQUEST._serialized_start=7451\n  _VODEXTRACTMEDIAMETATASKREQUEST._serialized_end=7496\n  _VODSTARTWORKFLOWREQUEST._serialized_start=7499\n  _VODSTARTWORKFLOWREQUEST._serialized_end=7790\n  _VODRETRIEVETRANSCODERESULTREQUEST._serialized_start=7792\n  _VODRETRIEVETRANSCODERESULTREQUEST._serialized_end=7860\n  _VODLISTWORKFLOWEXECUTIONREQUEST._serialized_start=7863\n  _VODLISTWORKFLOWEXECUTIONREQUEST._serialized_end=8150\n  _VODGETWORKFLOWEXECUTIONDETAILREQUEST._serialized_start=8152\n  _VODGETWORKFLOWEXECUTIONDETAILREQUEST._serialized_end=8205\n  _VODGETWORKFLOWRESULTREQUEST._serialized_start=8207\n  _VODGETWORKFLOWRESULTREQUEST._serialized_end=8251\n  _VODGETWORKFLOWEXECUTIONSTATUSREQUEST._serialized_start=8253\n  _VODGETWORKFLOWEXECUTIONSTATUSREQUEST._serialized_end=8331\n  _VODCREATETASKTEMPLATEREQUEST._serialized_start=8334\n  _VODCREATETASKTEMPLATEREQUEST._serialized_end=8776\n  _VODUPDATETASKTEMPLATEREQUEST._serialized_start=8779\n  _VODUPDATETASKTEMPLATEREQUEST._serialized_end=9222\n  _VODDELETETASKTEMPLATEREQUEST._serialized_start=9224\n  _VODDELETETASKTEMPLATEREQUEST._serialized_end=9274\n  _VODGETTASKTEMPLATEREQUEST._serialized_start=9276\n  _VODGETTASKTEMPLATEREQUEST._serialized_end=9323\n  _VODLISTTASKTEMPLATEREQUEST._serialized_start=9326\n  _VODLISTTASKTEMPLATEREQUEST._serialized_end=9505\n  _VODCREATEWATERMARKREQUEST._serialized_start=9508\n  _VODCREATEWATERMARKREQUEST._serialized_end=9804\n  _VODUPDATEWATERMARKREQUEST._serialized_start=9807\n  _VODUPDATEWATERMARKREQUEST._serialized_end=10104\n  _VODDELETEWATERMARKREQUEST._serialized_start=10106\n  _VODDELETEWATERMARKREQUEST._serialized_end=10153\n  _VODGETWATERMARKREQUEST._serialized_start=10155\n  _VODGETWATERMARKREQUEST._serialized_end=10199\n  _VODLISTWATERMARKREQUEST._serialized_start=10202\n  _VODLISTWATERMARKREQUEST._serialized_end=10360\n  _VODCREATEWORKFLOWTEMPLATEREQUEST._serialized_start=10363\n  _VODCREATEWORKFLOWTEMPLATEREQUEST._serialized_end=10513\n  _VODUPDATEWORKFLOWTEMPLATEREQUEST._serialized_start=10516\n  _VODUPDATEWORKFLOWTEMPLATEREQUEST._serialized_end=10667\n  _VODDELETEWORKFLOWTEMPLATEREQUEST._serialized_start=10669\n  _VODDELETEWORKFLOWTEMPLATEREQUEST._serialized_end=10723\n  _VODGETWORKFLOWTEMPLATEREQUEST._serialized_start=10725\n  _VODGETWORKFLOWTEMPLATEREQUEST._serialized_end=10776\n  _VODLISTWORKFLOWTEMPLATEREQUEST._serialized_start=10779\n  _VODLISTWORKFLOWTEMPLATEREQUEST._serialized_end=10944\n  _VODSUBMITDIRECTEDITTASKASYNCREQUEST._serialized_start=10947\n  _VODSUBMITDIRECTEDITTASKASYNCREQUEST._serialized_end=11103\n  _VODSUBMITDIRECTEDITTASKSYNCREQUEST._serialized_start=11105\n  _VODSUBMITDIRECTEDITTASKSYNCREQUEST._serialized_end=11199\n  _VODGETDIRECTEDITRESULTREQUEST._serialized_start=11201\n  _VODGETDIRECTEDITRESULTREQUEST._serialized_end=11248\n  _VODGETDIRECTEDITPROGRESSREQUEST._serialized_start=11250\n  _VODGETDIRECTEDITPROGRESSREQUEST._serialized_end=11298\n  _VODCANCELDIRECTEDITTASKREQUEST._serialized_start=11300\n  _VODCANCELDIRECTEDITTASKREQUEST._serialized_end=11347\n  _VODASYNCVCREATIVETASKREQUEST._serialized_start=11349\n  _VODASYNCVCREATIVETASKREQUEST._serialized_end=11452\n  _VODGETVCREATIVETASKRESULTREQUEST._serialized_start=11454\n  _VODGETVCREATIVETASKRESULTREQUEST._serialized_end=11509\n  _VODDELETESPACEREQUEST._serialized_start=11511\n  _VODDELETESPACEREQUEST._serialized_end=11553\n  _VODCREATESPACEREQUEST._serialized_start=11555\n  _VODCREATESPACEREQUEST._serialized_end=11673\n  _VODGETSPACEDETAILREQUEST._serialized_start=11675\n  _VODGETSPACEDETAILREQUEST._serialized_end=11720\n  _VODLISTSPACEREQUEST._serialized_start=11722\n  _VODLISTSPACEREQUEST._serialized_end=11774\n  _VODUPDATESPACEREQUEST._serialized_start=11776\n  _VODUPDATESPACEREQUEST._serialized_end=11893\n  _VODUPDATESPACEUPLOADCONFIGREQUEST._serialized_start=11895\n  _VODUPDATESPACEUPLOADCONFIGREQUEST._serialized_end=11989\n  _VODDESCRIBEUPLOADSPACECONFIGREQUEST._serialized_start=11991\n  _VODDESCRIBEUPLOADSPACECONFIGREQUEST._serialized_end=12047\n  _VODUPDATEUPLOADSPACECONFIGREQUEST._serialized_start=12050\n  _VODUPDATEUPLOADSPACECONFIGREQUEST._serialized_end=12568\n  _VODDESCRIBEVODSPACESTORAGEDATAREQUEST._serialized_start=12571\n  _VODDESCRIBEVODSPACESTORAGEDATAREQUEST._serialized_end=12720\n  _VODUPDATEDOMAINPLAYRULEREQUEST._serialized_start=12722\n  _VODUPDATEDOMAINPLAYRULEREQUEST._serialized_end=12814\n  _VODADDDOMAINTOSCHEDULERREQUEST._serialized_start=12816\n  _VODADDDOMAINTOSCHEDULERREQUEST._serialized_end=12930\n  _VODREMOVEDOMAINFROMSCHEDULERREQUEST._serialized_start=12932\n  _VODREMOVEDOMAINFROMSCHEDULERREQUEST._serialized_end=13051\n  _VODDELETEDOMAINREQUEST._serialized_start=13053\n  _VODDELETEDOMAINREQUEST._serialized_end=13132\n  _VODSTARTDOMAINREQUEST._serialized_start=13134\n  _VODSTARTDOMAINREQUEST._serialized_end=13239\n  _VODSTOPDOMAINREQUEST._serialized_start=13241\n  _VODSTOPDOMAINREQUEST._serialized_end=13345\n  _VODLISTDOMAINREQUEST._serialized_start=13347\n  _VODLISTDOMAINREQUEST._serialized_end=13466\n  _VODCREATECDNREFRESHTASKREQUEST._serialized_start=13468\n  _VODCREATECDNREFRESHTASKREQUEST._serialized_end=13547\n  _VODCREATECDNPRELOADTASKREQUEST._serialized_start=13549\n  _VODCREATECDNPRELOADTASKREQUEST._serialized_end=13614\n  _VODLISTCDNTASKSREQUEST._serialized_start=13617\n  _VODLISTCDNTASKSREQUEST._serialized_end=13811\n  _VODLISTCDNACCESSLOGREQUEST._serialized_start=13814\n  _VODLISTCDNACCESSLOGREQUEST._serialized_end=13994\n  _VODLISTCDNTOPACCESSURLREQUEST._serialized_start=13996\n  _VODLISTCDNTOPACCESSURLREQUEST._serialized_end=14108\n  _VODLISTCDNTOPACCESSREQUEST._serialized_start=14110\n  _VODLISTCDNTOPACCESSREQUEST._serialized_end=14233\n  _VODDESCRIBEVODDOMAINBANDWIDTHDATAREQUEST._serialized_start=14236\n  _VODDESCRIBEVODDOMAINBANDWIDTHDATAREQUEST._serialized_end=14439\n  _VODLISTCDNUSAGEDATAREQUEST._serialized_start=14442\n  _VODLISTCDNUSAGEDATAREQUEST._serialized_end=14708\n  _VODLISTCDNSTATUSDATAREQUEST._serialized_start=14711\n  _VODLISTCDNSTATUSDATAREQUEST._serialized_end=14875\n  _VODDESCRIBEIPINFOREQUEST._serialized_start=14877\n  _VODDESCRIBEIPINFOREQUEST._serialized_end=14916\n  _VODLISTCDNPVDATAREQUEST._serialized_start=14919\n  _VODLISTCDNPVDATAREQUEST._serialized_end=15081\n  _VODLISTCDNHITRATEDATAREQUEST._serialized_start=15084\n  _VODLISTCDNHITRATEDATAREQUEST._serialized_end=15231\n  _VODDESCRIBEVODDOMAINTRAFFICDATAREQUEST._serialized_start=15234\n  _VODDESCRIBEVODDOMAINTRAFFICDATAREQUEST._serialized_end=15433\n  _VODSUBMITBLOCKTASKSREQUEST._serialized_start=15435\n  _VODSUBMITBLOCKTASKSREQUEST._serialized_end=15519\n  _VODGETCONTENTBLOCKTASKSREQUEST._serialized_start=15522\n  _VODGETCONTENTBLOCKTASKSREQUEST._serialized_end=15704\n  _VODCREATEDOMAINV2REQUEST._serialized_start=15707\n  _VODCREATEDOMAINV2REQUEST._serialized_end=16202\n  _VODCREATEDOMAINV3REQUEST._serialized_start=16205\n  _VODCREATEDOMAINV3REQUEST._serialized_end=16462\n  _VODUPDATEDOMAINEXPIREV2REQUEST._serialized_start=16464\n  _VODUPDATEDOMAINEXPIREV2REQUEST._serialized_end=16567\n  _VODUPDATEDOMAINAUTHCONFIGV2REQUEST._serialized_start=16570\n  _VODUPDATEDOMAINAUTHCONFIGV2REQUEST._serialized_end=16713\n  _VODUPDATEDOMAINURLAUTHCONFIGV2REQUEST._serialized_start=16716\n  _VODUPDATEDOMAINURLAUTHCONFIGV2REQUEST._serialized_end=16862\n  _VODDESCRIBECDNEDGEIPREQUEST._serialized_start=16865\n  _VODDESCRIBECDNEDGEIPREQUEST._serialized_end=17077\n  _VODDESCRIBECDNREGIONANDISPREQUEST._serialized_start=17079\n  _VODDESCRIBECDNREGIONANDISPREQUEST._serialized_end=17142\n  _VODVERIFYDOMAINOWNERREQUEST._serialized_start=17144\n  _VODVERIFYDOMAINOWNERREQUEST._serialized_end=17209\n  _VODDESCRIBEDOMAINVERIFYCONTENTREQUEST._serialized_start=17211\n  _VODDESCRIBEDOMAINVERIFYCONTENTREQUEST._serialized_end=17266\n  _VODLISTPCDNDOMAINREQUEST._serialized_start=17268\n  _VODLISTPCDNDOMAINREQUEST._serialized_end=17344\n  _VODCREATEPCDNDOMAINREQUEST._serialized_start=17346\n  _VODCREATEPCDNDOMAINREQUEST._serialized_end=17409\n  _VODSTARTPCDNDOMAINREQUEST._serialized_start=17411\n  _VODSTARTPCDNDOMAINREQUEST._serialized_end=17473\n  _VODSTOPPCDNDOMAINREQUEST._serialized_start=17475\n  _VODSTOPPCDNDOMAINREQUEST._serialized_end=17536\n  _VODDELETEPCDNDOMAINREQUEST._serialized_start=17538\n  _VODDELETEPCDNDOMAINREQUEST._serialized_end=17601\n  _VODUPDATEDOMAINCONFIGREQUEST._serialized_start=17604\n  _VODUPDATEDOMAINCONFIGREQUEST._serialized_end=17754\n  _VODDESCRIBEDOMAINCONFIGREQUEST._serialized_start=17756\n  _VODDESCRIBEDOMAINCONFIGREQUEST._serialized_end=17843\n  _ADDORUPDATECERTIFICATEV2REQUEST._serialized_start=17846\n  _ADDORUPDATECERTIFICATEV2REQUEST._serialized_end=17978\n  _UPDATEDOMAINAREAREQUEST._serialized_start=17980\n  _UPDATEDOMAINAREAREQUEST._serialized_end=18074\n  _VODADDCALLBACKSUBSCRIPTIONREQUEST._serialized_start=18076\n  _VODADDCALLBACKSUBSCRIPTIONREQUEST._serialized_end=18164\n  _VODSETCALLBACKEVENTREQUEST._serialized_start=18166\n  _VODSETCALLBACKEVENTREQUEST._serialized_end=18270\n  _GETCALLBACKRECORDREQUEST._serialized_start=18273\n  _GETCALLBACKRECORDREQUEST._serialized_end=18444\n  _VODGETSMARTSTRATEGYLITEPLAYINFOREQUEST._serialized_start=18447\n  _VODGETSMARTSTRATEGYLITEPLAYINFOREQUEST._serialized_end=18691\n  _VODGETAPPINFOREQUEST._serialized_start=18693\n  _VODGETAPPINFOREQUEST._serialized_end=18730\n  _DESCRIBEVODSPACETRANSCODEDATAREQUEST._serialized_start=18733\n  _DESCRIBEVODSPACETRANSCODEDATAREQUEST._serialized_end=18961\n  _DESCRIBEVODSPACEAISTATISDATAREQUEST._serialized_start=18964\n  _DESCRIBEVODSPACEAISTATISDATAREQUEST._serialized_end=19166\n  _DESCRIBEVODSPACESUBTITLESTATISDATAREQUEST._serialized_start=19169\n  _DESCRIBEVODSPACESUBTITLESTATISDATAREQUEST._serialized_end=19378\n  _DESCRIBEVODSPACEDETECTSTATISDATAREQUEST._serialized_start=19381\n  _DESCRIBEVODSPACEDETECTSTATISDATAREQUEST._serialized_end=19586\n  _DESCRIBEVODSNAPSHOTDATAREQUEST._serialized_start=19589\n  _DESCRIBEVODSNAPSHOTDATAREQUEST._serialized_end=19787\n  _DESCRIBEVODSPACEWORKFLOWDETAILDATAREQUEST._serialized_start=19790\n  _DESCRIBEVODSPACEWORKFLOWDETAILDATAREQUEST._serialized_end=19935\n  _DESCRIBEVODSPACEEDITDETAILDATAREQUEST._serialized_start=19938\n  _DESCRIBEVODSPACEEDITDETAILDATAREQUEST._serialized_end=20079\n  _DESCRIBEVODPLAYFILELOGBYDOMAINREQUEST._serialized_start=20081\n  _DESCRIBEVODPLAYFILELOGBYDOMAINREQUEST._serialized_end=20176\n  _DESCRIBEVODENHANCEIMAGEDATAREQUEST._serialized_start=20179\n  _DESCRIBEVODENHANCEIMAGEDATAREQUEST._serialized_end=20356\n  _DESCRIBEVODSPACEEDITSTATISDATAREQUEST._serialized_start=20359\n  _DESCRIBEVODSPACEEDITSTATISDATAREQUEST._serialized_end=20542\n  _DESCRIBEVODPLAYEDSTATISDATAREQUEST._serialized_start=20544\n  _DESCRIBEVODPLAYEDSTATISDATAREQUEST._serialized_end=20667\n  _DESCRIBEVODMOSTPLAYEDSTATISDATAREQUEST._serialized_start=20669\n  _DESCRIBEVODMOSTPLAYEDSTATISDATAREQUEST._serialized_end=20793\n  _DESCRIBEVODREALTIMEMEDIADATAREQUEST._serialized_start=20796\n  _DESCRIBEVODREALTIMEMEDIADATAREQUEST._serialized_end=20955\n  _DESCRIBEVODREALTIMEMEDIADETAILDATAREQUEST._serialized_start=20958\n  _DESCRIBEVODREALTIMEMEDIADETAILDATAREQUEST._serialized_end=21103\n  _DESCRIBEVODVIDTRAFFICFILELOGREQUEST._serialized_start=21105\n  _DESCRIBEVODVIDTRAFFICFILELOGREQUEST._serialized_end=21197\n  _VODSUBMITBLOCKMEDIATASKREQUEST._serialized_start=21199\n  _VODSUBMITBLOCKMEDIATASKREQUEST._serialized_end=21264\n  _VODSUBMITUNBLOCKMEDIATASKREQUEST._serialized_start=21266\n  _VODSUBMITUNBLOCKMEDIATASKREQUEST._serialized_end=21333\n  _VODQUERYMEDIABLOCKSTATUSREQUEST._serialized_start=21335\n  _VODQUERYMEDIABLOCKSTATUSREQUEST._serialized_end=21401\n  _VODLISTPROJECTSREQUEST._serialized_start=21403\n  _VODLISTPROJECTSREQUEST._serialized_end=21427\n  _VODGETTRADECONFIGURATIONREQUEST._serialized_start=21429\n  _VODGETTRADECONFIGURATIONREQUEST._serialized_end=21462\n  _VODREPORTEVENTREQUEST._serialized_start=21464\n  _VODREPORTEVENTREQUEST._serialized_end=21516\n  _VODSETCLOUDMIGRATEJOBREQUEST._serialized_start=21519\n  _VODSETCLOUDMIGRATEJOBREQUEST._serialized_end=21693\n  _VODSUBMITCLOUDMIGRATEJOBREQUEST._serialized_start=21696\n  _VODSUBMITCLOUDMIGRATEJOBREQUEST._serialized_end=21841\n  _VODGETCLOUDMIGRATEJOBREQUEST._serialized_start=21843\n  _VODGETCLOUDMIGRATEJOBREQUEST._serialized_end=21907\n  _VODCREATEDRAMARECAPTASKREQUEST._serialized_start=21910\n  _VODCREATEDRAMARECAPTASKREQUEST._serialized_end=22436\n  _VODCREATEDRAMASCRIPTTASKREQUEST._serialized_start=22439\n  _VODCREATEDRAMASCRIPTTASKREQUEST._serialized_end=22640\n  _VODQUERYDRAMARECAPTASKREQUEST._serialized_start=22642\n  _VODQUERYDRAMARECAPTASKREQUEST._serialized_end=22708\n  _VODQUERYDRAMASCRIPTTASKREQUEST._serialized_start=22710\n  _VODQUERYDRAMASCRIPTTASKREQUEST._serialized_end=22777\n  _VODGETMEDIAENTITYLISTREQUEST._serialized_start=22780\n  _VODGETMEDIAENTITYLISTREQUEST._serialized_end=22923\n  _VODGETMEDIAENTITYREQUEST._serialized_start=22925\n  _VODGETMEDIAENTITYREQUEST._serialized_end=23030\n  _VODDELETEMEDIAENTITYREQUEST._serialized_start=23032\n  _VODDELETEMEDIAENTITYREQUEST._serialized_end=23117\n# @@protoc_insertion_point(module_scope)\n"
  },
  {
    "path": "volcengine/vod/models/response/__init__.py",
    "content": ""
  },
  {
    "path": "volcengine/vod/models/response/response_vod_pb2.py",
    "content": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler.  DO NOT EDIT!\n# source: volcengine/vod/response/response_vod.proto\n\"\"\"Generated protocol buffer code.\"\"\"\nfrom google.protobuf import descriptor as _descriptor\nfrom google.protobuf import descriptor_pool as _descriptor_pool\nfrom google.protobuf import message as _message\nfrom google.protobuf import reflection as _reflection\nfrom google.protobuf import symbol_database as _symbol_database\n# @@protoc_insertion_point(imports)\n\n_sym_db = _symbol_database.Default()\n\n\nfrom volcengine.base.models.base import base_pb2 as volcengine_dot_base_dot_base__pb2\nfrom volcengine.vod.models.business import vod_play_pb2 as volcengine_dot_vod_dot_business_dot_vod__play__pb2\nfrom volcengine.vod.models.business import vod_media_pb2 as volcengine_dot_vod_dot_business_dot_vod__media__pb2\nfrom volcengine.vod.models.business import vod_upload_pb2 as volcengine_dot_vod_dot_business_dot_vod__upload__pb2\nfrom volcengine.vod.models.business import vod_workflow_pb2 as volcengine_dot_vod_dot_business_dot_vod__workflow__pb2\nfrom volcengine.vod.models.business import vod_edit_pb2 as volcengine_dot_vod_dot_business_dot_vod__edit__pb2\nfrom volcengine.vod.models.business import vod_space_pb2 as volcengine_dot_vod_dot_business_dot_vod__space__pb2\nfrom volcengine.vod.models.business import vod_cdn_pb2 as volcengine_dot_vod_dot_business_dot_vod__cdn__pb2\nfrom volcengine.vod.models.business import vod_common_pb2 as volcengine_dot_vod_dot_business_dot_vod__common__pb2\nfrom volcengine.vod.models.business import vod_smart_strategy_pb2 as volcengine_dot_vod_dot_business_dot_vod__smart__strategy__pb2\nfrom volcengine.vod.models.business import vod_apps_manage_pb2 as volcengine_dot_vod_dot_business_dot_vod__apps__manage__pb2\nfrom volcengine.vod.models.business import vod_measure_pb2 as volcengine_dot_vod_dot_business_dot_vod__measure__pb2\nfrom volcengine.vod.models.business import vod_project_pb2 as volcengine_dot_vod_dot_business_dot_vod__project__pb2\nfrom volcengine.vod.models.business import vod_trade_pb2 as volcengine_dot_vod_dot_business_dot_vod__trade__pb2\nfrom volcengine.vod.models.business import vod_object_pb2 as volcengine_dot_vod_dot_business_dot_vod__object__pb2\nfrom volcengine.vod.models.business import vod_migrate_pb2 as volcengine_dot_vod_dot_business_dot_vod__migrate__pb2\nfrom volcengine.vod.models.business import vod_callback_pb2 as volcengine_dot_vod_dot_business_dot_vod__callback__pb2\nfrom volcengine.vod.models.business import vod_reporter_pb2 as volcengine_dot_vod_dot_business_dot_vod__reporter__pb2\nfrom volcengine.vod.models.business import vod_drama_pb2 as volcengine_dot_vod_dot_business_dot_vod__drama__pb2\n\n\nDESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\\n*volcengine/vod/response/response_vod.proto\\x12\\x1eVolcengine.Vod.Models.Response\\x1a\\x1avolcengine/base/base.proto\\x1a&volcengine/vod/business/vod_play.proto\\x1a\\'volcengine/vod/business/vod_media.proto\\x1a(volcengine/vod/business/vod_upload.proto\\x1a*volcengine/vod/business/vod_workflow.proto\\x1a&volcengine/vod/business/vod_edit.proto\\x1a\\'volcengine/vod/business/vod_space.proto\\x1a%volcengine/vod/business/vod_cdn.proto\\x1a(volcengine/vod/business/vod_common.proto\\x1a\\x30volcengine/vod/business/vod_smart_strategy.proto\\x1a-volcengine/vod/business/vod_apps_manage.proto\\x1a)volcengine/vod/business/vod_measure.proto\\x1a)volcengine/vod/business/vod_project.proto\\x1a\\'volcengine/vod/business/vod_trade.proto\\x1a(volcengine/vod/business/vod_object.proto\\x1a)volcengine/vod/business/vod_migrate.proto\\x1a*volcengine/vod/business/vod_callback.proto\\x1a*volcengine/vod/business/vod_reporter.proto\\x1a\\'volcengine/vod/business/vod_drama.proto\\\"\\xaa\\x01\\n\\x19VodGetAllPlayInfoResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x44\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.VodAllPlayInfoResult\\\"\\xa3\\x01\\n\\x16VodGetPlayInfoResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12@\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.VodPlayInfoModel\\\"\\xb7\\x01\\n\\x1eVodGetOriginalPlayInfoResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12L\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32<.Volcengine.Vod.Models.Business.VodGetOriginalPlayInfoResult\\\"\\xbb\\x01\\n VodGetPrivateDrmPlayAuthResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12N\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32>.Volcengine.Vod.Models.Business.VodGetPrivateDrmPlayAuthResult\\\"\\xb7\\x01\\n\\x1eVodGetHlsDecryptionKeyResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12L\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32<.Volcengine.Vod.Models.Business.VodGetHlsDecryptionKeyResult\\\"\\xbd\\x01\\n!VodCreateHlsDecryptionKeyResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12O\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32?.Volcengine.Vod.Models.Business.VodCreateHlsDecryptionKeyResult\\\"\\xd3\\x01\\n,VodGetPlayInfoWithLiveTimeShiftSceneResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12Z\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32J.Volcengine.Vod.Models.Business.VodGetPlayInfoWithLiveTimeShiftSceneResult\\\"\\xb5\\x01\\n\\x1dVodDescribeDrmDataKeyResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12K\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32;.Volcengine.Vod.Models.Business.VodDescribeDrmDataKeyResult\\\"\\xbb\\x01\\n\\x1fVodSubmitMoveObjectTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12O\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32?.Volcengine.Vod.Models.Business.VodSubmitMoveObjectTaskRespData\\\"\\xc0\\x01\\n\\\"VodQueryMoveObjectTaskInfoResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12Q\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x41.Volcengine.Vod.Models.Business.VodQueryMoveObjectTaskInfoResData\\\"\\xbd\\x01\\n!VodSubmitBlockObjectTasksResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12O\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32?.Volcengine.Vod.Models.Business.VodSubmitBlockObjectTasksResult\\\"\\xb9\\x01\\n\\x1fVodListBlockObjectTasksResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12M\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32=.Volcengine.Vod.Models.Business.VodListBlockObjectTasksResult\\\"\\xa0\\x01\\n\\x16VodUploadMediaResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12=\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32-.Volcengine.Vod.Models.Business.VodCommitData\\\"\\xa7\\x01\\n\\x1eVodQueryUploadTaskInfoResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12<\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32,.Volcengine.Vod.Models.Business.VodQueryData\\\"\\xa3\\x01\\n\\x14VodUrlUploadResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x42\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.VodUrlResponseData\\\"\\xaf\\x01\\n\\x1aVodApplyUploadInfoResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12H\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x38.Volcengine.Vod.Models.Business.VodApplyUploadInfoResult\\\"\\xb1\\x01\\n\\x1bVodCommitUploadInfoResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12I\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x39.Volcengine.Vod.Models.Business.VodCommitUploadInfoResult\\\"\\xb7\\x01\\n\\x1eVodParseUploadManifestResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12L\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32<.Volcengine.Vod.Models.Business.VodParseUploadManifestResult\\\"\\xc9\\x01\\n\\'VodListFileMetaInfosByFileNamesResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12U\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x45.Volcengine.Vod.Models.Business.VodListFileMetaInfosByFileNamesResult\\\"\\xa9\\x01\\n\\x18VodGetMediaInfosResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x44\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.VodGetMediaInfosData\\\"e\\n\\x1aVodUpdateMediaInfoResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xaf\\x01\\n\\x1fVodGetRecommendedPosterResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x43\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x33.Volcengine.Vod.Models.Business.VodGetRecPosterData\\\"n\\n#VodUpdateMediaPublishStatusResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xbd\\x01\\n\\\"VodUpdateMediaStorageClassResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12N\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32>.Volcengine.Vod.Models.Business.VodUpdateMediaStorageClassData\\\"\\xa5\\x01\\n\\x16VodDeleteMediaResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x42\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x32.Volcengine.Vod.Models.Business.VodDeleteMediaData\\\"d\\n\\x19VodDeleteMaterialResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xaf\\x01\\n\\x1bVodDeleteTranscodesResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12G\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x37.Volcengine.Vod.Models.Business.VodDeleteTranscodesData\\\"\\xb3\\x01\\n\\x1dVodDeleteMediaTosFileResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12I\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x39.Volcengine.Vod.Models.Business.VodDeleteMediaTosFileData\\\"\\xa7\\x01\\n\\x17VodGetMediaListResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x43\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x33.Volcengine.Vod.Models.Business.VodGetMediaListData\\\"\\xb5\\x01\\n\\x1eVodGetSubtitleInfoListResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12J\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32:.Volcengine.Vod.Models.Business.VodGetSubtitleInfoListData\\\"\\xb7\\x01\\n\\x1fVodUpdateSubtitleStatusResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12K\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32;.Volcengine.Vod.Models.Business.VodUpdateSubtitleStatusData\\\"h\\n\\x1dVodUpdateSubtitleInfoResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xb8\\x01\\n!VodGetAuditFramesForAuditResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12J\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32:.Volcengine.Vod.Models.Business.VodGetFramesForAuditResult\\\"\\xb5\\x01\\n\\x1eVodGetMLFramesForAuditResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12J\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32:.Volcengine.Vod.Models.Business.VodGetFramesForAuditResult\\\"\\xbf\\x01\\n\\\"VodGetBetterFramesForAuditResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12P\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32@.Volcengine.Vod.Models.Business.VodGetBetterFramesForAuditResult\\\"\\xb9\\x01\\n\\x1fVodGetAudioInfoForAuditResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12M\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32=.Volcengine.Vod.Models.Business.VodGetAudioInfoForAuditResult\\\"\\xdb\\x01\\n0VodGetAutomaticSpeechRecognitionForAuditResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12^\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32N.Volcengine.Vod.Models.Business.VodGetAutomaticSpeechRecognitionForAuditResult\\\"\\xcd\\x01\\n)VodGetAudioEventDetectionForAuditResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12W\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32G.Volcengine.Vod.Models.Business.VodGetAudioEventDetectionForAuditResult\\\"\\xc1\\x01\\n$VodCreateVideoClassificationResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12P\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32@.Volcengine.Vod.Models.Business.VodCreateVideoClassificationData\\\"o\\n$VodUpdateVideoClassificationResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"o\\n$VodDeleteVideoClassificationResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xbb\\x01\\n#VodListVideoClassificationsResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12K\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32;.Volcengine.Vod.Models.Business.VodVideoClassificationsData\\\"\\xa4\\x01\\n\\x18VodListSnapshotsResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12?\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32/.Volcengine.Vod.Models.Business.VodSnapshotData\\\"\\xa7\\x01\\n\\x16VodGetFileListResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x44\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.VodGetMediaInfosData\\\"\\xa7\\x01\\n\\x17VodGetFileInfosResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x43\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x33.Volcengine.Vod.Models.Business.VodGetFileInfosData\\\"\\xbb\\x01\\n!VodUpdateFileStorageClassResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12M\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32=.Volcengine.Vod.Models.Business.VodUpdateFileStorageClassData\\\"\\xb1\\x01\\n\\x1cVodGetInnerAuditURLsResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12H\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x38.Volcengine.Vod.Models.Business.VodGetInnerAuditURLsData\\\"\\xb9\\x01\\n VodGetAdAuditResultByVidResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12L\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32<.Volcengine.Vod.Models.Business.VodGetAdAuditResultByVidData\\\"j\\n\\x1fVodExtractMediaMetaTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xab\\x01\\n\\x18VodStartWorkflowResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x46\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x36.Volcengine.Vod.Models.Business.VodStartWorkflowResult\\\"\\xae\\x01\\n\\\"VodRetrieveTranscodeResultResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12?\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32/.Volcengine.Vod.Models.Business.TranscodeResult\\\"\\xbb\\x01\\n VodListWorkflowExecutionResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12N\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32>.Volcengine.Vod.Models.Business.VodListWorkflowExecutionResult\\\"\\xc5\\x01\\n%VodGetWorkflowExecutionDetailResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12S\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x43.Volcengine.Vod.Models.Business.VodGetWorkflowExecutionDetailResult\\\"\\xb3\\x01\\n%VodGetWorkflowExecutionStatusResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x41\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.WorkflowExecution\\\"\\xaa\\x01\\n\\x1cVodGetWorkflowResultResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x41\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x31.Volcengine.Vod.Models.Business.VodWorkflowResult\\\"\\xaf\\x01\\n\\x1dVodCreateTaskTemplateResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x45\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x35.Volcengine.Vod.Models.Business.VodTaskTemplateResult\\\"\\xaf\\x01\\n\\x1dVodUpdateTaskTemplateResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x45\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x35.Volcengine.Vod.Models.Business.VodTaskTemplateResult\\\"\\xaf\\x01\\n\\x1dVodDeleteTaskTemplateResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x45\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x35.Volcengine.Vod.Models.Business.VodTaskTemplateResult\\\"\\xac\\x01\\n\\x1aVodGetTaskTemplateResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x45\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x35.Volcengine.Vod.Models.Business.VodTaskTemplateResult\\\"\\xb1\\x01\\n\\x1bVodListTaskTemplateResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12I\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x39.Volcengine.Vod.Models.Business.VodListTaskTemplateResult\\\"\\xb7\\x01\\n!VodCreateWorkflowTemplateResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12I\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x39.Volcengine.Vod.Models.Business.VodWorkflowTemplateResult\\\"l\\n!VodUpdateWorkflowTemplateResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"l\\n!VodDeleteWorkflowTemplateResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xb4\\x01\\n\\x1eVodGetWorkflowTemplateResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12I\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x39.Volcengine.Vod.Models.Business.VodWorkflowTemplateResult\\\"\\xb9\\x01\\n\\x1fVodListWorkflowTemplateResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12M\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32=.Volcengine.Vod.Models.Business.VodListWorkflowTemplateResult\\\"\\xa3\\x01\\n\\x1aVodCreateWatermarkResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12<\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32,.Volcengine.Vod.Models.Business.LogoTemplate\\\"e\\n\\x1aVodUpdateWatermarkResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"e\\n\\x1aVodDeleteWatermarkResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xa0\\x01\\n\\x17VodGetWatermarkResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12<\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32,.Volcengine.Vod.Models.Business.LogoTemplate\\\"\\xb3\\x01\\n\\x18VodListWatermarkResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12N\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32>.Volcengine.Vod.Models.Business.VodListWatermarkResponseResult\\\"\\xc0\\x01\\n$VodSubmitDirectEditTaskAsyncResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12O\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32?.Volcengine.Vod.Models.Business.SubmitDirectEditTaskAsyncResult\\\"\\xbe\\x01\\n#VodSubmitDirectEditTaskSyncResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12N\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32>.Volcengine.Vod.Models.Business.SubmitDirectEditTaskSyncResult\\\"\\xb2\\x01\\n VodGetDirectEditProgressResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x45\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x35.Volcengine.Vod.Models.Business.GetDirectEditProgress\\\"\\xae\\x01\\n\\x1eVodGetDirectEditResultResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x43\\n\\x06Result\\x18\\x02 \\x03(\\x0b\\x32\\x33.Volcengine.Vod.Models.Business.GetDirectEditResult\\\"\\xb0\\x01\\n\\x1fVodCancelDirectEditTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x44\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.CancelDirectEditTask\\\"\\xb2\\x01\\n\\x1dVodAsyncVCreativeTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12H\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x38.Volcengine.Vod.Models.Business.AsyncVCreativeTaskResult\\\"\\xb4\\x01\\n!VodGetVCreativeTaskResultResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x46\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x36.Volcengine.Vod.Models.Business.GetVCreativeTaskResult\\\"a\\n\\x16VodCreateSpaceResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"a\\n\\x16VodDeleteSpaceResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\x9d\\x01\\n\\x14VodListSpaceResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12<\\n\\x06Result\\x18\\x02 \\x03(\\x0b\\x32,.Volcengine.Vod.Models.Business.VodSpaceInfo\\\"\\xa2\\x01\\n\\x19VodGetSpaceDetailResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12<\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32,.Volcengine.Vod.Models.Business.VodSpaceInfo\\\"a\\n\\x16VodUpdateSpaceResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"m\\n\\\"VodUpdateSpaceUploadConfigResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xb5\\x01\\n$VodDescribeUploadSpaceConfigResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x44\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.VodUploadSpaceConfig\\\"m\\n\\\"VodUpdateUploadSpaceConfigResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xc7\\x01\\n&VodDescribeVodSpaceStorageDataResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12T\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x44.Volcengine.Vod.Models.Business.VodDescribeVodSpaceStorageDataResult\\\"j\\n\\x1fVodUpdateDomainPlayRuleResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"j\\n\\x1fVodAddDomainToSchedulerResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"o\\n$VodRemoveDomainFromSchedulerResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"b\\n\\x17VodDeleteDomainResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"a\\n\\x16VodStartDomainResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"`\\n\\x15VodStopDomainResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xa5\\x01\\n\\x15VodListDomainResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x43\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x33.Volcengine.Vod.Models.Business.VodDomainConfigInfo\\\"\\xb2\\x01\\n\\x1fVodCreateCdnRefreshTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x46\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x36.Volcengine.Vod.Models.Business.VodCreateCdnTaskResult\\\"\\xb2\\x01\\n\\x1fVodCreateCdnPreloadTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x46\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x36.Volcengine.Vod.Models.Business.VodCreateCdnTaskResult\\\"\\xa4\\x01\\n\\x17VodListCdnTasksResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12@\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x30.Volcengine.Vod.Models.Business.VodCdnTaskResult\\\"\\xb1\\x01\\n\\x1bVodListCdnAccessLogResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12I\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x39.Volcengine.Vod.Models.Business.VodListCdnAccessLogResult\\\"\\xb7\\x01\\n\\x1eVodListCdnTopAccessUrlResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12L\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32<.Volcengine.Vod.Models.Business.VodListCdnTopAccessUrlResult\\\"\\xb1\\x01\\n\\x1bVodListCdnTopAccessResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12I\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x39.Volcengine.Vod.Models.Business.VodListCdnTopAccessResult\\\"\\xcd\\x01\\n)VodDescribeVodDomainBandwidthDataResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12W\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32G.Volcengine.Vod.Models.Business.VodDescribeVodDomainBandwidthDataResult\\\"\\xb7\\x01\\n\\x1eVodCdnStatisticsCommonResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12L\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32<.Volcengine.Vod.Models.Business.VodCdnStatisticsCommonResult\\\"\\xa2\\x01\\n\\x19VodDescribeIPInfoResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12<\\n\\x06Result\\x18\\x02 \\x03(\\x0b\\x32,.Volcengine.Vod.Models.Business.VodCdnIpInfo\\\"\\xc9\\x01\\n\\'VodDescribeVodDomainTrafficDataResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12U\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x45.Volcengine.Vod.Models.Business.VodDescribeVodDomainTrafficDataResult\\\"\\xb1\\x01\\n\\x1bVodSubmitBlockTasksResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12I\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x39.Volcengine.Vod.Models.Business.VodSubmitBlockTasksResult\\\"\\xb9\\x01\\n\\x1fVodGetContentBlockTasksResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12M\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32=.Volcengine.Vod.Models.Business.VodGetContentBlockTasksResult\\\"d\\n\\x19VodCreateDomainV2Response\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"d\\n\\x19VodCreateDomainV3Response\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"j\\n\\x1fVodUpdateDomainExpireV2Response\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"n\\n#VodUpdateDomainAuthConfigV2Response\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"q\\n&VodUpdateDomainUrlAuthConfigV2Response\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xb3\\x01\\n\\x1cVodVerifyDomainOwnerResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12J\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32:.Volcengine.Vod.Models.Business.VodVerifyDomainOwnerResult\\\"\\xc7\\x01\\n&VodDescribeDomainVerifyContentResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12T\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x44.Volcengine.Vod.Models.Business.VodDescribeDomainVerifyContentResult\\\"\\xad\\x01\\n\\x19VodListPCDNDomainResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12G\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x37.Volcengine.Vod.Models.Business.VodPCDNDomainConfigInfo\\\"f\\n\\x1bVodCreatePCDNDomainResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"e\\n\\x1aVodStartPCDNDomainResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"d\\n\\x19VodStopPCDNDomainResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"f\\n\\x1bVodDeletePCDNDomainResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"h\\n\\x1dVodUpdateDomainConfigResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xb9\\x01\\n\\x1fVodDescribeDomainConfigResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12M\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32=.Volcengine.Vod.Models.Business.VodDescribeDomainConfigResult\\\"\\xb3\\x01\\n\\x1cVodDescribeCdnEdgeIpResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12J\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32:.Volcengine.Vod.Models.Business.VodDescribeCdnEdgeIpResult\\\"\\xbf\\x01\\n\\\"VodDescribeCdnRegionAndIspResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12P\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32@.Volcengine.Vod.Models.Business.VodDescribeCdnRegionAndIspResult\\\"k\\n AddOrUpdateCertificateV2Response\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"c\\n\\x18UpdateDomainAreaResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"m\\n\\\"VodAddCallbackSubscriptionResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"f\\n\\x1bVodSetCallbackEventResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xa5\\x01\\n\\x19GetCallbackRecordResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12?\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32/.Volcengine.Vod.Models.Business.CallbackRecords\\\"\\xc9\\x01\\n\\'VodGetSmartStrategyLitePlayInfoResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12U\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x45.Volcengine.Vod.Models.Business.VodGetSmartStrategyLitePlayInfoResult\\\"\\xa5\\x01\\n\\x15VodGetAppInfoResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x43\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x33.Volcengine.Vod.Models.Business.VodGetAppInfoResult\\\"\\xc5\\x01\\n%DescribeVodSpaceTranscodeDataResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12S\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x43.Volcengine.Vod.Models.Business.DescribeVodSpaceTranscodeDataResult\\\"\\xc3\\x01\\n$DescribeVodSpaceAIStatisDataResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12R\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x42.Volcengine.Vod.Models.Business.DescribeVodSpaceAIStatisDataResult\\\"\\xcf\\x01\\n*DescribeVodSpaceSubtitleStatisDataResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12X\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32H.Volcengine.Vod.Models.Business.DescribeVodSpaceSubtitleStatisDataResult\\\"\\xcb\\x01\\n(DescribeVodSpaceDetectStatisDataResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12V\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x46.Volcengine.Vod.Models.Business.DescribeVodSpaceDetectStatisDataResult\\\"\\xb9\\x01\\n\\x1f\\x44\\x65scribeVodSnapshotDataResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12M\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32=.Volcengine.Vod.Models.Business.DescribeVodSnapshotDataResult\\\"\\xcf\\x01\\n*DescribeVodSpaceWorkflowDetailDataResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12X\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32H.Volcengine.Vod.Models.Business.DescribeVodSpaceWorkflowDetailDataResult\\\"\\xc7\\x01\\n&DescribeVodSpaceEditDetailDataResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12T\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x44.Volcengine.Vod.Models.Business.DescribeVodSpaceEditDetailDataResult\\\"\\xc3\\x01\\n$DescribeVodRealtimeMediaDataResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12R\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x42.Volcengine.Vod.Models.Business.DescribeVodRealtimeMediaDataResult\\\"\\xcf\\x01\\n*DescribeVodRealtimeMediaDetailDataResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12X\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32H.Volcengine.Vod.Models.Business.DescribeVodRealtimeMediaDetailDataResult\\\"\\xc7\\x01\\n&DescribeVodPlayFileLogByDomainResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12T\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x44.Volcengine.Vod.Models.Business.DescribeVodPlayFileLogByDomainResult\\\"\\xc1\\x01\\n#DescribeVodEnhanceImageDataResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12Q\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x41.Volcengine.Vod.Models.Business.DescribeVodEnhanceImageDataResult\\\"\\xc7\\x01\\n&DescribeVodSpaceEditStatisDataResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12T\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x44.Volcengine.Vod.Models.Business.DescribeVodSpaceEditStatisDataResult\\\"\\xc1\\x01\\n#DescribeVodPlayedStatisDataResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12Q\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x41.Volcengine.Vod.Models.Business.DescribeVodPlayedStatisDataResult\\\"\\xc9\\x01\\n\\'DescribeVodMostPlayedStatisDataResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12U\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x45.Volcengine.Vod.Models.Business.DescribeVodMostPlayedStatisDataResult\\\"\\xc3\\x01\\n$DescribeVodVidTrafficFileLogResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12R\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x42.Volcengine.Vod.Models.Business.DescribeVodVidTrafficFileLogResult\\\"\\xb9\\x01\\n\\x1fVodSubmitBlockMediaTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12M\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32=.Volcengine.Vod.Models.Business.VodSubmitBlockMediaTaskResult\\\"\\xbd\\x01\\n!VodSubmitUnblockMediaTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12O\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32?.Volcengine.Vod.Models.Business.VodSubmitUnblockMediaTaskResult\\\"\\xbb\\x01\\n VodQueryMediaBlockStatusResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12N\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32>.Volcengine.Vod.Models.Business.VodQueryMediaBlockStatusResult\\\"\\xa9\\x01\\n\\x17VodListProjectsResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x45\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x35.Volcengine.Vod.Models.Business.VodListProjectsResult\\\"\\xb9\\x01\\n VodGetTradeConfigurationResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12L\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32<.Volcengine.Vod.Models.Business.TradeConfigurationInfoResult\\\"\\xb5\\x01\\n\\x1dVodSetCloudMigrateJobResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12K\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32;.Volcengine.Vod.Models.Business.VodSetCloudMigrateJobResult\\\"k\\n VodSubmitCloudMigrateJobResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xb5\\x01\\n\\x1dVodGetCloudMigrateJobResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12K\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32;.Volcengine.Vod.Models.Business.VodGetCloudMigrateJobResult\\\"\\xa7\\x01\\n\\x16VodReportEventResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x44\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.VodReportEventResult\\\"\\xb9\\x01\\n\\x1fVodCreateDramaRecapTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12M\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32=.Volcengine.Vod.Models.Business.VodCreateDramaRecapTaskResult\\\"\\xbb\\x01\\n VodCreateDramaScriptTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12N\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32>.Volcengine.Vod.Models.Business.VodCreateDramaScriptTaskResult\\\"\\xb7\\x01\\n\\x1eVodQueryDramaRecapTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12L\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32<.Volcengine.Vod.Models.Business.VodQueryDramaRecapTaskResult\\\"\\xb9\\x01\\n\\x1fVodQueryDramaScriptTaskResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12M\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32=.Volcengine.Vod.Models.Business.VodQueryDramaScriptTaskResult\\\"\\xb5\\x01\\n\\x1dVodGetMediaEntityListResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12K\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32;.Volcengine.Vod.Models.Business.VodGetMediaEntityListResult\\\"\\xad\\x01\\n\\x19VodGetMediaEntityResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12G\\n\\x06Result\\x18\\x02 \\x01(\\x0b\\x32\\x37.Volcengine.Vod.Models.Business.VodGetMediaEntityResult\\\"g\\n\\x1cVodDeleteMediaEntityResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\\"\\xb4\\x01\\n#VodGetMediaEntityConfigListResponse\\x12G\\n\\x10ResponseMetadata\\x18\\x01 \\x01(\\x0b\\x32-.Volcengine.Base.Models.Base.ResponseMetadata\\x12\\x44\\n\\x06Result\\x18\\x02 \\x03(\\x0b\\x32\\x34.Volcengine.Vod.Models.Business.VodMediaEntityConfigB\\xcc\\x01\\n)com.volcengine.service.vod.model.responseB\\x0bVodResponseP\\x01ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/response\\xa0\\x01\\x01\\xd8\\x01\\x01\\xca\\x02 Volc\\\\Service\\\\Vod\\\\Models\\\\Response\\xe2\\x02#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadatab\\x06proto3')\n\n\n\n_VODGETALLPLAYINFORESPONSE = DESCRIPTOR.message_types_by_name['VodGetAllPlayInfoResponse']\n_VODGETPLAYINFORESPONSE = DESCRIPTOR.message_types_by_name['VodGetPlayInfoResponse']\n_VODGETORIGINALPLAYINFORESPONSE = DESCRIPTOR.message_types_by_name['VodGetOriginalPlayInfoResponse']\n_VODGETPRIVATEDRMPLAYAUTHRESPONSE = DESCRIPTOR.message_types_by_name['VodGetPrivateDrmPlayAuthResponse']\n_VODGETHLSDECRYPTIONKEYRESPONSE = DESCRIPTOR.message_types_by_name['VodGetHlsDecryptionKeyResponse']\n_VODCREATEHLSDECRYPTIONKEYRESPONSE = DESCRIPTOR.message_types_by_name['VodCreateHlsDecryptionKeyResponse']\n_VODGETPLAYINFOWITHLIVETIMESHIFTSCENERESPONSE = DESCRIPTOR.message_types_by_name['VodGetPlayInfoWithLiveTimeShiftSceneResponse']\n_VODDESCRIBEDRMDATAKEYRESPONSE = DESCRIPTOR.message_types_by_name['VodDescribeDrmDataKeyResponse']\n_VODSUBMITMOVEOBJECTTASKRESPONSE = DESCRIPTOR.message_types_by_name['VodSubmitMoveObjectTaskResponse']\n_VODQUERYMOVEOBJECTTASKINFORESPONSE = DESCRIPTOR.message_types_by_name['VodQueryMoveObjectTaskInfoResponse']\n_VODSUBMITBLOCKOBJECTTASKSRESPONSE = DESCRIPTOR.message_types_by_name['VodSubmitBlockObjectTasksResponse']\n_VODLISTBLOCKOBJECTTASKSRESPONSE = DESCRIPTOR.message_types_by_name['VodListBlockObjectTasksResponse']\n_VODUPLOADMEDIARESPONSE = DESCRIPTOR.message_types_by_name['VodUploadMediaResponse']\n_VODQUERYUPLOADTASKINFORESPONSE = DESCRIPTOR.message_types_by_name['VodQueryUploadTaskInfoResponse']\n_VODURLUPLOADRESPONSE = DESCRIPTOR.message_types_by_name['VodUrlUploadResponse']\n_VODAPPLYUPLOADINFORESPONSE = DESCRIPTOR.message_types_by_name['VodApplyUploadInfoResponse']\n_VODCOMMITUPLOADINFORESPONSE = DESCRIPTOR.message_types_by_name['VodCommitUploadInfoResponse']\n_VODPARSEUPLOADMANIFESTRESPONSE = DESCRIPTOR.message_types_by_name['VodParseUploadManifestResponse']\n_VODLISTFILEMETAINFOSBYFILENAMESRESPONSE = DESCRIPTOR.message_types_by_name['VodListFileMetaInfosByFileNamesResponse']\n_VODGETMEDIAINFOSRESPONSE = DESCRIPTOR.message_types_by_name['VodGetMediaInfosResponse']\n_VODUPDATEMEDIAINFORESPONSE = DESCRIPTOR.message_types_by_name['VodUpdateMediaInfoResponse']\n_VODGETRECOMMENDEDPOSTERRESPONSE = DESCRIPTOR.message_types_by_name['VodGetRecommendedPosterResponse']\n_VODUPDATEMEDIAPUBLISHSTATUSRESPONSE = DESCRIPTOR.message_types_by_name['VodUpdateMediaPublishStatusResponse']\n_VODUPDATEMEDIASTORAGECLASSRESPONSE = DESCRIPTOR.message_types_by_name['VodUpdateMediaStorageClassResponse']\n_VODDELETEMEDIARESPONSE = DESCRIPTOR.message_types_by_name['VodDeleteMediaResponse']\n_VODDELETEMATERIALRESPONSE = DESCRIPTOR.message_types_by_name['VodDeleteMaterialResponse']\n_VODDELETETRANSCODESRESPONSE = DESCRIPTOR.message_types_by_name['VodDeleteTranscodesResponse']\n_VODDELETEMEDIATOSFILERESPONSE = DESCRIPTOR.message_types_by_name['VodDeleteMediaTosFileResponse']\n_VODGETMEDIALISTRESPONSE = DESCRIPTOR.message_types_by_name['VodGetMediaListResponse']\n_VODGETSUBTITLEINFOLISTRESPONSE = DESCRIPTOR.message_types_by_name['VodGetSubtitleInfoListResponse']\n_VODUPDATESUBTITLESTATUSRESPONSE = DESCRIPTOR.message_types_by_name['VodUpdateSubtitleStatusResponse']\n_VODUPDATESUBTITLEINFORESPONSE = DESCRIPTOR.message_types_by_name['VodUpdateSubtitleInfoResponse']\n_VODGETAUDITFRAMESFORAUDITRESPONSE = DESCRIPTOR.message_types_by_name['VodGetAuditFramesForAuditResponse']\n_VODGETMLFRAMESFORAUDITRESPONSE = DESCRIPTOR.message_types_by_name['VodGetMLFramesForAuditResponse']\n_VODGETBETTERFRAMESFORAUDITRESPONSE = DESCRIPTOR.message_types_by_name['VodGetBetterFramesForAuditResponse']\n_VODGETAUDIOINFOFORAUDITRESPONSE = DESCRIPTOR.message_types_by_name['VodGetAudioInfoForAuditResponse']\n_VODGETAUTOMATICSPEECHRECOGNITIONFORAUDITRESPONSE = DESCRIPTOR.message_types_by_name['VodGetAutomaticSpeechRecognitionForAuditResponse']\n_VODGETAUDIOEVENTDETECTIONFORAUDITRESPONSE = DESCRIPTOR.message_types_by_name['VodGetAudioEventDetectionForAuditResponse']\n_VODCREATEVIDEOCLASSIFICATIONRESPONSE = DESCRIPTOR.message_types_by_name['VodCreateVideoClassificationResponse']\n_VODUPDATEVIDEOCLASSIFICATIONRESPONSE = DESCRIPTOR.message_types_by_name['VodUpdateVideoClassificationResponse']\n_VODDELETEVIDEOCLASSIFICATIONRESPONSE = DESCRIPTOR.message_types_by_name['VodDeleteVideoClassificationResponse']\n_VODLISTVIDEOCLASSIFICATIONSRESPONSE = DESCRIPTOR.message_types_by_name['VodListVideoClassificationsResponse']\n_VODLISTSNAPSHOTSRESPONSE = DESCRIPTOR.message_types_by_name['VodListSnapshotsResponse']\n_VODGETFILELISTRESPONSE = DESCRIPTOR.message_types_by_name['VodGetFileListResponse']\n_VODGETFILEINFOSRESPONSE = DESCRIPTOR.message_types_by_name['VodGetFileInfosResponse']\n_VODUPDATEFILESTORAGECLASSRESPONSE = DESCRIPTOR.message_types_by_name['VodUpdateFileStorageClassResponse']\n_VODGETINNERAUDITURLSRESPONSE = DESCRIPTOR.message_types_by_name['VodGetInnerAuditURLsResponse']\n_VODGETADAUDITRESULTBYVIDRESPONSE = DESCRIPTOR.message_types_by_name['VodGetAdAuditResultByVidResponse']\n_VODEXTRACTMEDIAMETATASKRESPONSE = DESCRIPTOR.message_types_by_name['VodExtractMediaMetaTaskResponse']\n_VODSTARTWORKFLOWRESPONSE = DESCRIPTOR.message_types_by_name['VodStartWorkflowResponse']\n_VODRETRIEVETRANSCODERESULTRESPONSE = DESCRIPTOR.message_types_by_name['VodRetrieveTranscodeResultResponse']\n_VODLISTWORKFLOWEXECUTIONRESPONSE = DESCRIPTOR.message_types_by_name['VodListWorkflowExecutionResponse']\n_VODGETWORKFLOWEXECUTIONDETAILRESPONSE = DESCRIPTOR.message_types_by_name['VodGetWorkflowExecutionDetailResponse']\n_VODGETWORKFLOWEXECUTIONSTATUSRESPONSE = DESCRIPTOR.message_types_by_name['VodGetWorkflowExecutionStatusResponse']\n_VODGETWORKFLOWRESULTRESPONSE = DESCRIPTOR.message_types_by_name['VodGetWorkflowResultResponse']\n_VODCREATETASKTEMPLATERESPONSE = DESCRIPTOR.message_types_by_name['VodCreateTaskTemplateResponse']\n_VODUPDATETASKTEMPLATERESPONSE = DESCRIPTOR.message_types_by_name['VodUpdateTaskTemplateResponse']\n_VODDELETETASKTEMPLATERESPONSE = DESCRIPTOR.message_types_by_name['VodDeleteTaskTemplateResponse']\n_VODGETTASKTEMPLATERESPONSE = DESCRIPTOR.message_types_by_name['VodGetTaskTemplateResponse']\n_VODLISTTASKTEMPLATERESPONSE = DESCRIPTOR.message_types_by_name['VodListTaskTemplateResponse']\n_VODCREATEWORKFLOWTEMPLATERESPONSE = DESCRIPTOR.message_types_by_name['VodCreateWorkflowTemplateResponse']\n_VODUPDATEWORKFLOWTEMPLATERESPONSE = DESCRIPTOR.message_types_by_name['VodUpdateWorkflowTemplateResponse']\n_VODDELETEWORKFLOWTEMPLATERESPONSE = DESCRIPTOR.message_types_by_name['VodDeleteWorkflowTemplateResponse']\n_VODGETWORKFLOWTEMPLATERESPONSE = DESCRIPTOR.message_types_by_name['VodGetWorkflowTemplateResponse']\n_VODLISTWORKFLOWTEMPLATERESPONSE = DESCRIPTOR.message_types_by_name['VodListWorkflowTemplateResponse']\n_VODCREATEWATERMARKRESPONSE = DESCRIPTOR.message_types_by_name['VodCreateWatermarkResponse']\n_VODUPDATEWATERMARKRESPONSE = DESCRIPTOR.message_types_by_name['VodUpdateWatermarkResponse']\n_VODDELETEWATERMARKRESPONSE = DESCRIPTOR.message_types_by_name['VodDeleteWatermarkResponse']\n_VODGETWATERMARKRESPONSE = DESCRIPTOR.message_types_by_name['VodGetWatermarkResponse']\n_VODLISTWATERMARKRESPONSE = DESCRIPTOR.message_types_by_name['VodListWatermarkResponse']\n_VODSUBMITDIRECTEDITTASKASYNCRESPONSE = DESCRIPTOR.message_types_by_name['VodSubmitDirectEditTaskAsyncResponse']\n_VODSUBMITDIRECTEDITTASKSYNCRESPONSE = DESCRIPTOR.message_types_by_name['VodSubmitDirectEditTaskSyncResponse']\n_VODGETDIRECTEDITPROGRESSRESPONSE = DESCRIPTOR.message_types_by_name['VodGetDirectEditProgressResponse']\n_VODGETDIRECTEDITRESULTRESPONSE = DESCRIPTOR.message_types_by_name['VodGetDirectEditResultResponse']\n_VODCANCELDIRECTEDITTASKRESPONSE = DESCRIPTOR.message_types_by_name['VodCancelDirectEditTaskResponse']\n_VODASYNCVCREATIVETASKRESPONSE = DESCRIPTOR.message_types_by_name['VodAsyncVCreativeTaskResponse']\n_VODGETVCREATIVETASKRESULTRESPONSE = DESCRIPTOR.message_types_by_name['VodGetVCreativeTaskResultResponse']\n_VODCREATESPACERESPONSE = DESCRIPTOR.message_types_by_name['VodCreateSpaceResponse']\n_VODDELETESPACERESPONSE = DESCRIPTOR.message_types_by_name['VodDeleteSpaceResponse']\n_VODLISTSPACERESPONSE = DESCRIPTOR.message_types_by_name['VodListSpaceResponse']\n_VODGETSPACEDETAILRESPONSE = DESCRIPTOR.message_types_by_name['VodGetSpaceDetailResponse']\n_VODUPDATESPACERESPONSE = DESCRIPTOR.message_types_by_name['VodUpdateSpaceResponse']\n_VODUPDATESPACEUPLOADCONFIGRESPONSE = DESCRIPTOR.message_types_by_name['VodUpdateSpaceUploadConfigResponse']\n_VODDESCRIBEUPLOADSPACECONFIGRESPONSE = DESCRIPTOR.message_types_by_name['VodDescribeUploadSpaceConfigResponse']\n_VODUPDATEUPLOADSPACECONFIGRESPONSE = DESCRIPTOR.message_types_by_name['VodUpdateUploadSpaceConfigResponse']\n_VODDESCRIBEVODSPACESTORAGEDATARESPONSE = DESCRIPTOR.message_types_by_name['VodDescribeVodSpaceStorageDataResponse']\n_VODUPDATEDOMAINPLAYRULERESPONSE = DESCRIPTOR.message_types_by_name['VodUpdateDomainPlayRuleResponse']\n_VODADDDOMAINTOSCHEDULERRESPONSE = DESCRIPTOR.message_types_by_name['VodAddDomainToSchedulerResponse']\n_VODREMOVEDOMAINFROMSCHEDULERRESPONSE = DESCRIPTOR.message_types_by_name['VodRemoveDomainFromSchedulerResponse']\n_VODDELETEDOMAINRESPONSE = DESCRIPTOR.message_types_by_name['VodDeleteDomainResponse']\n_VODSTARTDOMAINRESPONSE = DESCRIPTOR.message_types_by_name['VodStartDomainResponse']\n_VODSTOPDOMAINRESPONSE = DESCRIPTOR.message_types_by_name['VodStopDomainResponse']\n_VODLISTDOMAINRESPONSE = DESCRIPTOR.message_types_by_name['VodListDomainResponse']\n_VODCREATECDNREFRESHTASKRESPONSE = DESCRIPTOR.message_types_by_name['VodCreateCdnRefreshTaskResponse']\n_VODCREATECDNPRELOADTASKRESPONSE = DESCRIPTOR.message_types_by_name['VodCreateCdnPreloadTaskResponse']\n_VODLISTCDNTASKSRESPONSE = DESCRIPTOR.message_types_by_name['VodListCdnTasksResponse']\n_VODLISTCDNACCESSLOGRESPONSE = DESCRIPTOR.message_types_by_name['VodListCdnAccessLogResponse']\n_VODLISTCDNTOPACCESSURLRESPONSE = DESCRIPTOR.message_types_by_name['VodListCdnTopAccessUrlResponse']\n_VODLISTCDNTOPACCESSRESPONSE = DESCRIPTOR.message_types_by_name['VodListCdnTopAccessResponse']\n_VODDESCRIBEVODDOMAINBANDWIDTHDATARESPONSE = DESCRIPTOR.message_types_by_name['VodDescribeVodDomainBandwidthDataResponse']\n_VODCDNSTATISTICSCOMMONRESPONSE = DESCRIPTOR.message_types_by_name['VodCdnStatisticsCommonResponse']\n_VODDESCRIBEIPINFORESPONSE = DESCRIPTOR.message_types_by_name['VodDescribeIPInfoResponse']\n_VODDESCRIBEVODDOMAINTRAFFICDATARESPONSE = DESCRIPTOR.message_types_by_name['VodDescribeVodDomainTrafficDataResponse']\n_VODSUBMITBLOCKTASKSRESPONSE = DESCRIPTOR.message_types_by_name['VodSubmitBlockTasksResponse']\n_VODGETCONTENTBLOCKTASKSRESPONSE = DESCRIPTOR.message_types_by_name['VodGetContentBlockTasksResponse']\n_VODCREATEDOMAINV2RESPONSE = DESCRIPTOR.message_types_by_name['VodCreateDomainV2Response']\n_VODCREATEDOMAINV3RESPONSE = DESCRIPTOR.message_types_by_name['VodCreateDomainV3Response']\n_VODUPDATEDOMAINEXPIREV2RESPONSE = DESCRIPTOR.message_types_by_name['VodUpdateDomainExpireV2Response']\n_VODUPDATEDOMAINAUTHCONFIGV2RESPONSE = DESCRIPTOR.message_types_by_name['VodUpdateDomainAuthConfigV2Response']\n_VODUPDATEDOMAINURLAUTHCONFIGV2RESPONSE = DESCRIPTOR.message_types_by_name['VodUpdateDomainUrlAuthConfigV2Response']\n_VODVERIFYDOMAINOWNERRESPONSE = DESCRIPTOR.message_types_by_name['VodVerifyDomainOwnerResponse']\n_VODDESCRIBEDOMAINVERIFYCONTENTRESPONSE = DESCRIPTOR.message_types_by_name['VodDescribeDomainVerifyContentResponse']\n_VODLISTPCDNDOMAINRESPONSE = DESCRIPTOR.message_types_by_name['VodListPCDNDomainResponse']\n_VODCREATEPCDNDOMAINRESPONSE = DESCRIPTOR.message_types_by_name['VodCreatePCDNDomainResponse']\n_VODSTARTPCDNDOMAINRESPONSE = DESCRIPTOR.message_types_by_name['VodStartPCDNDomainResponse']\n_VODSTOPPCDNDOMAINRESPONSE = DESCRIPTOR.message_types_by_name['VodStopPCDNDomainResponse']\n_VODDELETEPCDNDOMAINRESPONSE = DESCRIPTOR.message_types_by_name['VodDeletePCDNDomainResponse']\n_VODUPDATEDOMAINCONFIGRESPONSE = DESCRIPTOR.message_types_by_name['VodUpdateDomainConfigResponse']\n_VODDESCRIBEDOMAINCONFIGRESPONSE = DESCRIPTOR.message_types_by_name['VodDescribeDomainConfigResponse']\n_VODDESCRIBECDNEDGEIPRESPONSE = DESCRIPTOR.message_types_by_name['VodDescribeCdnEdgeIpResponse']\n_VODDESCRIBECDNREGIONANDISPRESPONSE = DESCRIPTOR.message_types_by_name['VodDescribeCdnRegionAndIspResponse']\n_ADDORUPDATECERTIFICATEV2RESPONSE = DESCRIPTOR.message_types_by_name['AddOrUpdateCertificateV2Response']\n_UPDATEDOMAINAREARESPONSE = DESCRIPTOR.message_types_by_name['UpdateDomainAreaResponse']\n_VODADDCALLBACKSUBSCRIPTIONRESPONSE = DESCRIPTOR.message_types_by_name['VodAddCallbackSubscriptionResponse']\n_VODSETCALLBACKEVENTRESPONSE = DESCRIPTOR.message_types_by_name['VodSetCallbackEventResponse']\n_GETCALLBACKRECORDRESPONSE = DESCRIPTOR.message_types_by_name['GetCallbackRecordResponse']\n_VODGETSMARTSTRATEGYLITEPLAYINFORESPONSE = DESCRIPTOR.message_types_by_name['VodGetSmartStrategyLitePlayInfoResponse']\n_VODGETAPPINFORESPONSE = DESCRIPTOR.message_types_by_name['VodGetAppInfoResponse']\n_DESCRIBEVODSPACETRANSCODEDATARESPONSE = DESCRIPTOR.message_types_by_name['DescribeVodSpaceTranscodeDataResponse']\n_DESCRIBEVODSPACEAISTATISDATARESPONSE = DESCRIPTOR.message_types_by_name['DescribeVodSpaceAIStatisDataResponse']\n_DESCRIBEVODSPACESUBTITLESTATISDATARESPONSE = DESCRIPTOR.message_types_by_name['DescribeVodSpaceSubtitleStatisDataResponse']\n_DESCRIBEVODSPACEDETECTSTATISDATARESPONSE = DESCRIPTOR.message_types_by_name['DescribeVodSpaceDetectStatisDataResponse']\n_DESCRIBEVODSNAPSHOTDATARESPONSE = DESCRIPTOR.message_types_by_name['DescribeVodSnapshotDataResponse']\n_DESCRIBEVODSPACEWORKFLOWDETAILDATARESPONSE = DESCRIPTOR.message_types_by_name['DescribeVodSpaceWorkflowDetailDataResponse']\n_DESCRIBEVODSPACEEDITDETAILDATARESPONSE = DESCRIPTOR.message_types_by_name['DescribeVodSpaceEditDetailDataResponse']\n_DESCRIBEVODREALTIMEMEDIADATARESPONSE = DESCRIPTOR.message_types_by_name['DescribeVodRealtimeMediaDataResponse']\n_DESCRIBEVODREALTIMEMEDIADETAILDATARESPONSE = DESCRIPTOR.message_types_by_name['DescribeVodRealtimeMediaDetailDataResponse']\n_DESCRIBEVODPLAYFILELOGBYDOMAINRESPONSE = DESCRIPTOR.message_types_by_name['DescribeVodPlayFileLogByDomainResponse']\n_DESCRIBEVODENHANCEIMAGEDATARESPONSE = DESCRIPTOR.message_types_by_name['DescribeVodEnhanceImageDataResponse']\n_DESCRIBEVODSPACEEDITSTATISDATARESPONSE = DESCRIPTOR.message_types_by_name['DescribeVodSpaceEditStatisDataResponse']\n_DESCRIBEVODPLAYEDSTATISDATARESPONSE = DESCRIPTOR.message_types_by_name['DescribeVodPlayedStatisDataResponse']\n_DESCRIBEVODMOSTPLAYEDSTATISDATARESPONSE = DESCRIPTOR.message_types_by_name['DescribeVodMostPlayedStatisDataResponse']\n_DESCRIBEVODVIDTRAFFICFILELOGRESPONSE = DESCRIPTOR.message_types_by_name['DescribeVodVidTrafficFileLogResponse']\n_VODSUBMITBLOCKMEDIATASKRESPONSE = DESCRIPTOR.message_types_by_name['VodSubmitBlockMediaTaskResponse']\n_VODSUBMITUNBLOCKMEDIATASKRESPONSE = DESCRIPTOR.message_types_by_name['VodSubmitUnblockMediaTaskResponse']\n_VODQUERYMEDIABLOCKSTATUSRESPONSE = DESCRIPTOR.message_types_by_name['VodQueryMediaBlockStatusResponse']\n_VODLISTPROJECTSRESPONSE = DESCRIPTOR.message_types_by_name['VodListProjectsResponse']\n_VODGETTRADECONFIGURATIONRESPONSE = DESCRIPTOR.message_types_by_name['VodGetTradeConfigurationResponse']\n_VODSETCLOUDMIGRATEJOBRESPONSE = DESCRIPTOR.message_types_by_name['VodSetCloudMigrateJobResponse']\n_VODSUBMITCLOUDMIGRATEJOBRESPONSE = DESCRIPTOR.message_types_by_name['VodSubmitCloudMigrateJobResponse']\n_VODGETCLOUDMIGRATEJOBRESPONSE = DESCRIPTOR.message_types_by_name['VodGetCloudMigrateJobResponse']\n_VODREPORTEVENTRESPONSE = DESCRIPTOR.message_types_by_name['VodReportEventResponse']\n_VODCREATEDRAMARECAPTASKRESPONSE = DESCRIPTOR.message_types_by_name['VodCreateDramaRecapTaskResponse']\n_VODCREATEDRAMASCRIPTTASKRESPONSE = DESCRIPTOR.message_types_by_name['VodCreateDramaScriptTaskResponse']\n_VODQUERYDRAMARECAPTASKRESPONSE = DESCRIPTOR.message_types_by_name['VodQueryDramaRecapTaskResponse']\n_VODQUERYDRAMASCRIPTTASKRESPONSE = DESCRIPTOR.message_types_by_name['VodQueryDramaScriptTaskResponse']\n_VODGETMEDIAENTITYLISTRESPONSE = DESCRIPTOR.message_types_by_name['VodGetMediaEntityListResponse']\n_VODGETMEDIAENTITYRESPONSE = DESCRIPTOR.message_types_by_name['VodGetMediaEntityResponse']\n_VODDELETEMEDIAENTITYRESPONSE = DESCRIPTOR.message_types_by_name['VodDeleteMediaEntityResponse']\n_VODGETMEDIAENTITYCONFIGLISTRESPONSE = DESCRIPTOR.message_types_by_name['VodGetMediaEntityConfigListResponse']\nVodGetAllPlayInfoResponse = _reflection.GeneratedProtocolMessageType('VodGetAllPlayInfoResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETALLPLAYINFORESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetAllPlayInfoResponse)\n  })\n_sym_db.RegisterMessage(VodGetAllPlayInfoResponse)\n\nVodGetPlayInfoResponse = _reflection.GeneratedProtocolMessageType('VodGetPlayInfoResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETPLAYINFORESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetPlayInfoResponse)\n  })\n_sym_db.RegisterMessage(VodGetPlayInfoResponse)\n\nVodGetOriginalPlayInfoResponse = _reflection.GeneratedProtocolMessageType('VodGetOriginalPlayInfoResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETORIGINALPLAYINFORESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetOriginalPlayInfoResponse)\n  })\n_sym_db.RegisterMessage(VodGetOriginalPlayInfoResponse)\n\nVodGetPrivateDrmPlayAuthResponse = _reflection.GeneratedProtocolMessageType('VodGetPrivateDrmPlayAuthResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETPRIVATEDRMPLAYAUTHRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetPrivateDrmPlayAuthResponse)\n  })\n_sym_db.RegisterMessage(VodGetPrivateDrmPlayAuthResponse)\n\nVodGetHlsDecryptionKeyResponse = _reflection.GeneratedProtocolMessageType('VodGetHlsDecryptionKeyResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETHLSDECRYPTIONKEYRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetHlsDecryptionKeyResponse)\n  })\n_sym_db.RegisterMessage(VodGetHlsDecryptionKeyResponse)\n\nVodCreateHlsDecryptionKeyResponse = _reflection.GeneratedProtocolMessageType('VodCreateHlsDecryptionKeyResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEHLSDECRYPTIONKEYRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodCreateHlsDecryptionKeyResponse)\n  })\n_sym_db.RegisterMessage(VodCreateHlsDecryptionKeyResponse)\n\nVodGetPlayInfoWithLiveTimeShiftSceneResponse = _reflection.GeneratedProtocolMessageType('VodGetPlayInfoWithLiveTimeShiftSceneResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETPLAYINFOWITHLIVETIMESHIFTSCENERESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetPlayInfoWithLiveTimeShiftSceneResponse)\n  })\n_sym_db.RegisterMessage(VodGetPlayInfoWithLiveTimeShiftSceneResponse)\n\nVodDescribeDrmDataKeyResponse = _reflection.GeneratedProtocolMessageType('VodDescribeDrmDataKeyResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEDRMDATAKEYRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDescribeDrmDataKeyResponse)\n  })\n_sym_db.RegisterMessage(VodDescribeDrmDataKeyResponse)\n\nVodSubmitMoveObjectTaskResponse = _reflection.GeneratedProtocolMessageType('VodSubmitMoveObjectTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITMOVEOBJECTTASKRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodSubmitMoveObjectTaskResponse)\n  })\n_sym_db.RegisterMessage(VodSubmitMoveObjectTaskResponse)\n\nVodQueryMoveObjectTaskInfoResponse = _reflection.GeneratedProtocolMessageType('VodQueryMoveObjectTaskInfoResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODQUERYMOVEOBJECTTASKINFORESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodQueryMoveObjectTaskInfoResponse)\n  })\n_sym_db.RegisterMessage(VodQueryMoveObjectTaskInfoResponse)\n\nVodSubmitBlockObjectTasksResponse = _reflection.GeneratedProtocolMessageType('VodSubmitBlockObjectTasksResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITBLOCKOBJECTTASKSRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodSubmitBlockObjectTasksResponse)\n  })\n_sym_db.RegisterMessage(VodSubmitBlockObjectTasksResponse)\n\nVodListBlockObjectTasksResponse = _reflection.GeneratedProtocolMessageType('VodListBlockObjectTasksResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTBLOCKOBJECTTASKSRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodListBlockObjectTasksResponse)\n  })\n_sym_db.RegisterMessage(VodListBlockObjectTasksResponse)\n\nVodUploadMediaResponse = _reflection.GeneratedProtocolMessageType('VodUploadMediaResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPLOADMEDIARESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUploadMediaResponse)\n  })\n_sym_db.RegisterMessage(VodUploadMediaResponse)\n\nVodQueryUploadTaskInfoResponse = _reflection.GeneratedProtocolMessageType('VodQueryUploadTaskInfoResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODQUERYUPLOADTASKINFORESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodQueryUploadTaskInfoResponse)\n  })\n_sym_db.RegisterMessage(VodQueryUploadTaskInfoResponse)\n\nVodUrlUploadResponse = _reflection.GeneratedProtocolMessageType('VodUrlUploadResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODURLUPLOADRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUrlUploadResponse)\n  })\n_sym_db.RegisterMessage(VodUrlUploadResponse)\n\nVodApplyUploadInfoResponse = _reflection.GeneratedProtocolMessageType('VodApplyUploadInfoResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODAPPLYUPLOADINFORESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodApplyUploadInfoResponse)\n  })\n_sym_db.RegisterMessage(VodApplyUploadInfoResponse)\n\nVodCommitUploadInfoResponse = _reflection.GeneratedProtocolMessageType('VodCommitUploadInfoResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODCOMMITUPLOADINFORESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodCommitUploadInfoResponse)\n  })\n_sym_db.RegisterMessage(VodCommitUploadInfoResponse)\n\nVodParseUploadManifestResponse = _reflection.GeneratedProtocolMessageType('VodParseUploadManifestResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODPARSEUPLOADMANIFESTRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodParseUploadManifestResponse)\n  })\n_sym_db.RegisterMessage(VodParseUploadManifestResponse)\n\nVodListFileMetaInfosByFileNamesResponse = _reflection.GeneratedProtocolMessageType('VodListFileMetaInfosByFileNamesResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTFILEMETAINFOSBYFILENAMESRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodListFileMetaInfosByFileNamesResponse)\n  })\n_sym_db.RegisterMessage(VodListFileMetaInfosByFileNamesResponse)\n\nVodGetMediaInfosResponse = _reflection.GeneratedProtocolMessageType('VodGetMediaInfosResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETMEDIAINFOSRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetMediaInfosResponse)\n  })\n_sym_db.RegisterMessage(VodGetMediaInfosResponse)\n\nVodUpdateMediaInfoResponse = _reflection.GeneratedProtocolMessageType('VodUpdateMediaInfoResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEMEDIAINFORESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUpdateMediaInfoResponse)\n  })\n_sym_db.RegisterMessage(VodUpdateMediaInfoResponse)\n\nVodGetRecommendedPosterResponse = _reflection.GeneratedProtocolMessageType('VodGetRecommendedPosterResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETRECOMMENDEDPOSTERRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetRecommendedPosterResponse)\n  })\n_sym_db.RegisterMessage(VodGetRecommendedPosterResponse)\n\nVodUpdateMediaPublishStatusResponse = _reflection.GeneratedProtocolMessageType('VodUpdateMediaPublishStatusResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEMEDIAPUBLISHSTATUSRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUpdateMediaPublishStatusResponse)\n  })\n_sym_db.RegisterMessage(VodUpdateMediaPublishStatusResponse)\n\nVodUpdateMediaStorageClassResponse = _reflection.GeneratedProtocolMessageType('VodUpdateMediaStorageClassResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEMEDIASTORAGECLASSRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUpdateMediaStorageClassResponse)\n  })\n_sym_db.RegisterMessage(VodUpdateMediaStorageClassResponse)\n\nVodDeleteMediaResponse = _reflection.GeneratedProtocolMessageType('VodDeleteMediaResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEMEDIARESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDeleteMediaResponse)\n  })\n_sym_db.RegisterMessage(VodDeleteMediaResponse)\n\nVodDeleteMaterialResponse = _reflection.GeneratedProtocolMessageType('VodDeleteMaterialResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEMATERIALRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDeleteMaterialResponse)\n  })\n_sym_db.RegisterMessage(VodDeleteMaterialResponse)\n\nVodDeleteTranscodesResponse = _reflection.GeneratedProtocolMessageType('VodDeleteTranscodesResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETETRANSCODESRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDeleteTranscodesResponse)\n  })\n_sym_db.RegisterMessage(VodDeleteTranscodesResponse)\n\nVodDeleteMediaTosFileResponse = _reflection.GeneratedProtocolMessageType('VodDeleteMediaTosFileResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEMEDIATOSFILERESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDeleteMediaTosFileResponse)\n  })\n_sym_db.RegisterMessage(VodDeleteMediaTosFileResponse)\n\nVodGetMediaListResponse = _reflection.GeneratedProtocolMessageType('VodGetMediaListResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETMEDIALISTRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetMediaListResponse)\n  })\n_sym_db.RegisterMessage(VodGetMediaListResponse)\n\nVodGetSubtitleInfoListResponse = _reflection.GeneratedProtocolMessageType('VodGetSubtitleInfoListResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETSUBTITLEINFOLISTRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetSubtitleInfoListResponse)\n  })\n_sym_db.RegisterMessage(VodGetSubtitleInfoListResponse)\n\nVodUpdateSubtitleStatusResponse = _reflection.GeneratedProtocolMessageType('VodUpdateSubtitleStatusResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATESUBTITLESTATUSRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUpdateSubtitleStatusResponse)\n  })\n_sym_db.RegisterMessage(VodUpdateSubtitleStatusResponse)\n\nVodUpdateSubtitleInfoResponse = _reflection.GeneratedProtocolMessageType('VodUpdateSubtitleInfoResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATESUBTITLEINFORESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUpdateSubtitleInfoResponse)\n  })\n_sym_db.RegisterMessage(VodUpdateSubtitleInfoResponse)\n\nVodGetAuditFramesForAuditResponse = _reflection.GeneratedProtocolMessageType('VodGetAuditFramesForAuditResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETAUDITFRAMESFORAUDITRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetAuditFramesForAuditResponse)\n  })\n_sym_db.RegisterMessage(VodGetAuditFramesForAuditResponse)\n\nVodGetMLFramesForAuditResponse = _reflection.GeneratedProtocolMessageType('VodGetMLFramesForAuditResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETMLFRAMESFORAUDITRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetMLFramesForAuditResponse)\n  })\n_sym_db.RegisterMessage(VodGetMLFramesForAuditResponse)\n\nVodGetBetterFramesForAuditResponse = _reflection.GeneratedProtocolMessageType('VodGetBetterFramesForAuditResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETBETTERFRAMESFORAUDITRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetBetterFramesForAuditResponse)\n  })\n_sym_db.RegisterMessage(VodGetBetterFramesForAuditResponse)\n\nVodGetAudioInfoForAuditResponse = _reflection.GeneratedProtocolMessageType('VodGetAudioInfoForAuditResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETAUDIOINFOFORAUDITRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetAudioInfoForAuditResponse)\n  })\n_sym_db.RegisterMessage(VodGetAudioInfoForAuditResponse)\n\nVodGetAutomaticSpeechRecognitionForAuditResponse = _reflection.GeneratedProtocolMessageType('VodGetAutomaticSpeechRecognitionForAuditResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETAUTOMATICSPEECHRECOGNITIONFORAUDITRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetAutomaticSpeechRecognitionForAuditResponse)\n  })\n_sym_db.RegisterMessage(VodGetAutomaticSpeechRecognitionForAuditResponse)\n\nVodGetAudioEventDetectionForAuditResponse = _reflection.GeneratedProtocolMessageType('VodGetAudioEventDetectionForAuditResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETAUDIOEVENTDETECTIONFORAUDITRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetAudioEventDetectionForAuditResponse)\n  })\n_sym_db.RegisterMessage(VodGetAudioEventDetectionForAuditResponse)\n\nVodCreateVideoClassificationResponse = _reflection.GeneratedProtocolMessageType('VodCreateVideoClassificationResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEVIDEOCLASSIFICATIONRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodCreateVideoClassificationResponse)\n  })\n_sym_db.RegisterMessage(VodCreateVideoClassificationResponse)\n\nVodUpdateVideoClassificationResponse = _reflection.GeneratedProtocolMessageType('VodUpdateVideoClassificationResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEVIDEOCLASSIFICATIONRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUpdateVideoClassificationResponse)\n  })\n_sym_db.RegisterMessage(VodUpdateVideoClassificationResponse)\n\nVodDeleteVideoClassificationResponse = _reflection.GeneratedProtocolMessageType('VodDeleteVideoClassificationResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEVIDEOCLASSIFICATIONRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDeleteVideoClassificationResponse)\n  })\n_sym_db.RegisterMessage(VodDeleteVideoClassificationResponse)\n\nVodListVideoClassificationsResponse = _reflection.GeneratedProtocolMessageType('VodListVideoClassificationsResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTVIDEOCLASSIFICATIONSRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodListVideoClassificationsResponse)\n  })\n_sym_db.RegisterMessage(VodListVideoClassificationsResponse)\n\nVodListSnapshotsResponse = _reflection.GeneratedProtocolMessageType('VodListSnapshotsResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTSNAPSHOTSRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodListSnapshotsResponse)\n  })\n_sym_db.RegisterMessage(VodListSnapshotsResponse)\n\nVodGetFileListResponse = _reflection.GeneratedProtocolMessageType('VodGetFileListResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETFILELISTRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetFileListResponse)\n  })\n_sym_db.RegisterMessage(VodGetFileListResponse)\n\nVodGetFileInfosResponse = _reflection.GeneratedProtocolMessageType('VodGetFileInfosResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETFILEINFOSRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetFileInfosResponse)\n  })\n_sym_db.RegisterMessage(VodGetFileInfosResponse)\n\nVodUpdateFileStorageClassResponse = _reflection.GeneratedProtocolMessageType('VodUpdateFileStorageClassResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEFILESTORAGECLASSRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUpdateFileStorageClassResponse)\n  })\n_sym_db.RegisterMessage(VodUpdateFileStorageClassResponse)\n\nVodGetInnerAuditURLsResponse = _reflection.GeneratedProtocolMessageType('VodGetInnerAuditURLsResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETINNERAUDITURLSRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetInnerAuditURLsResponse)\n  })\n_sym_db.RegisterMessage(VodGetInnerAuditURLsResponse)\n\nVodGetAdAuditResultByVidResponse = _reflection.GeneratedProtocolMessageType('VodGetAdAuditResultByVidResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETADAUDITRESULTBYVIDRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetAdAuditResultByVidResponse)\n  })\n_sym_db.RegisterMessage(VodGetAdAuditResultByVidResponse)\n\nVodExtractMediaMetaTaskResponse = _reflection.GeneratedProtocolMessageType('VodExtractMediaMetaTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODEXTRACTMEDIAMETATASKRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodExtractMediaMetaTaskResponse)\n  })\n_sym_db.RegisterMessage(VodExtractMediaMetaTaskResponse)\n\nVodStartWorkflowResponse = _reflection.GeneratedProtocolMessageType('VodStartWorkflowResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODSTARTWORKFLOWRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodStartWorkflowResponse)\n  })\n_sym_db.RegisterMessage(VodStartWorkflowResponse)\n\nVodRetrieveTranscodeResultResponse = _reflection.GeneratedProtocolMessageType('VodRetrieveTranscodeResultResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODRETRIEVETRANSCODERESULTRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodRetrieveTranscodeResultResponse)\n  })\n_sym_db.RegisterMessage(VodRetrieveTranscodeResultResponse)\n\nVodListWorkflowExecutionResponse = _reflection.GeneratedProtocolMessageType('VodListWorkflowExecutionResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTWORKFLOWEXECUTIONRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodListWorkflowExecutionResponse)\n  })\n_sym_db.RegisterMessage(VodListWorkflowExecutionResponse)\n\nVodGetWorkflowExecutionDetailResponse = _reflection.GeneratedProtocolMessageType('VodGetWorkflowExecutionDetailResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETWORKFLOWEXECUTIONDETAILRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetWorkflowExecutionDetailResponse)\n  })\n_sym_db.RegisterMessage(VodGetWorkflowExecutionDetailResponse)\n\nVodGetWorkflowExecutionStatusResponse = _reflection.GeneratedProtocolMessageType('VodGetWorkflowExecutionStatusResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETWORKFLOWEXECUTIONSTATUSRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetWorkflowExecutionStatusResponse)\n  })\n_sym_db.RegisterMessage(VodGetWorkflowExecutionStatusResponse)\n\nVodGetWorkflowResultResponse = _reflection.GeneratedProtocolMessageType('VodGetWorkflowResultResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETWORKFLOWRESULTRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetWorkflowResultResponse)\n  })\n_sym_db.RegisterMessage(VodGetWorkflowResultResponse)\n\nVodCreateTaskTemplateResponse = _reflection.GeneratedProtocolMessageType('VodCreateTaskTemplateResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATETASKTEMPLATERESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodCreateTaskTemplateResponse)\n  })\n_sym_db.RegisterMessage(VodCreateTaskTemplateResponse)\n\nVodUpdateTaskTemplateResponse = _reflection.GeneratedProtocolMessageType('VodUpdateTaskTemplateResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATETASKTEMPLATERESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUpdateTaskTemplateResponse)\n  })\n_sym_db.RegisterMessage(VodUpdateTaskTemplateResponse)\n\nVodDeleteTaskTemplateResponse = _reflection.GeneratedProtocolMessageType('VodDeleteTaskTemplateResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETETASKTEMPLATERESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDeleteTaskTemplateResponse)\n  })\n_sym_db.RegisterMessage(VodDeleteTaskTemplateResponse)\n\nVodGetTaskTemplateResponse = _reflection.GeneratedProtocolMessageType('VodGetTaskTemplateResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETTASKTEMPLATERESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetTaskTemplateResponse)\n  })\n_sym_db.RegisterMessage(VodGetTaskTemplateResponse)\n\nVodListTaskTemplateResponse = _reflection.GeneratedProtocolMessageType('VodListTaskTemplateResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTTASKTEMPLATERESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodListTaskTemplateResponse)\n  })\n_sym_db.RegisterMessage(VodListTaskTemplateResponse)\n\nVodCreateWorkflowTemplateResponse = _reflection.GeneratedProtocolMessageType('VodCreateWorkflowTemplateResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEWORKFLOWTEMPLATERESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodCreateWorkflowTemplateResponse)\n  })\n_sym_db.RegisterMessage(VodCreateWorkflowTemplateResponse)\n\nVodUpdateWorkflowTemplateResponse = _reflection.GeneratedProtocolMessageType('VodUpdateWorkflowTemplateResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEWORKFLOWTEMPLATERESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUpdateWorkflowTemplateResponse)\n  })\n_sym_db.RegisterMessage(VodUpdateWorkflowTemplateResponse)\n\nVodDeleteWorkflowTemplateResponse = _reflection.GeneratedProtocolMessageType('VodDeleteWorkflowTemplateResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEWORKFLOWTEMPLATERESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDeleteWorkflowTemplateResponse)\n  })\n_sym_db.RegisterMessage(VodDeleteWorkflowTemplateResponse)\n\nVodGetWorkflowTemplateResponse = _reflection.GeneratedProtocolMessageType('VodGetWorkflowTemplateResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETWORKFLOWTEMPLATERESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetWorkflowTemplateResponse)\n  })\n_sym_db.RegisterMessage(VodGetWorkflowTemplateResponse)\n\nVodListWorkflowTemplateResponse = _reflection.GeneratedProtocolMessageType('VodListWorkflowTemplateResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTWORKFLOWTEMPLATERESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodListWorkflowTemplateResponse)\n  })\n_sym_db.RegisterMessage(VodListWorkflowTemplateResponse)\n\nVodCreateWatermarkResponse = _reflection.GeneratedProtocolMessageType('VodCreateWatermarkResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEWATERMARKRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodCreateWatermarkResponse)\n  })\n_sym_db.RegisterMessage(VodCreateWatermarkResponse)\n\nVodUpdateWatermarkResponse = _reflection.GeneratedProtocolMessageType('VodUpdateWatermarkResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEWATERMARKRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUpdateWatermarkResponse)\n  })\n_sym_db.RegisterMessage(VodUpdateWatermarkResponse)\n\nVodDeleteWatermarkResponse = _reflection.GeneratedProtocolMessageType('VodDeleteWatermarkResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEWATERMARKRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDeleteWatermarkResponse)\n  })\n_sym_db.RegisterMessage(VodDeleteWatermarkResponse)\n\nVodGetWatermarkResponse = _reflection.GeneratedProtocolMessageType('VodGetWatermarkResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETWATERMARKRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetWatermarkResponse)\n  })\n_sym_db.RegisterMessage(VodGetWatermarkResponse)\n\nVodListWatermarkResponse = _reflection.GeneratedProtocolMessageType('VodListWatermarkResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTWATERMARKRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodListWatermarkResponse)\n  })\n_sym_db.RegisterMessage(VodListWatermarkResponse)\n\nVodSubmitDirectEditTaskAsyncResponse = _reflection.GeneratedProtocolMessageType('VodSubmitDirectEditTaskAsyncResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITDIRECTEDITTASKASYNCRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodSubmitDirectEditTaskAsyncResponse)\n  })\n_sym_db.RegisterMessage(VodSubmitDirectEditTaskAsyncResponse)\n\nVodSubmitDirectEditTaskSyncResponse = _reflection.GeneratedProtocolMessageType('VodSubmitDirectEditTaskSyncResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITDIRECTEDITTASKSYNCRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodSubmitDirectEditTaskSyncResponse)\n  })\n_sym_db.RegisterMessage(VodSubmitDirectEditTaskSyncResponse)\n\nVodGetDirectEditProgressResponse = _reflection.GeneratedProtocolMessageType('VodGetDirectEditProgressResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETDIRECTEDITPROGRESSRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetDirectEditProgressResponse)\n  })\n_sym_db.RegisterMessage(VodGetDirectEditProgressResponse)\n\nVodGetDirectEditResultResponse = _reflection.GeneratedProtocolMessageType('VodGetDirectEditResultResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETDIRECTEDITRESULTRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetDirectEditResultResponse)\n  })\n_sym_db.RegisterMessage(VodGetDirectEditResultResponse)\n\nVodCancelDirectEditTaskResponse = _reflection.GeneratedProtocolMessageType('VodCancelDirectEditTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODCANCELDIRECTEDITTASKRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodCancelDirectEditTaskResponse)\n  })\n_sym_db.RegisterMessage(VodCancelDirectEditTaskResponse)\n\nVodAsyncVCreativeTaskResponse = _reflection.GeneratedProtocolMessageType('VodAsyncVCreativeTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODASYNCVCREATIVETASKRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodAsyncVCreativeTaskResponse)\n  })\n_sym_db.RegisterMessage(VodAsyncVCreativeTaskResponse)\n\nVodGetVCreativeTaskResultResponse = _reflection.GeneratedProtocolMessageType('VodGetVCreativeTaskResultResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETVCREATIVETASKRESULTRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetVCreativeTaskResultResponse)\n  })\n_sym_db.RegisterMessage(VodGetVCreativeTaskResultResponse)\n\nVodCreateSpaceResponse = _reflection.GeneratedProtocolMessageType('VodCreateSpaceResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATESPACERESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodCreateSpaceResponse)\n  })\n_sym_db.RegisterMessage(VodCreateSpaceResponse)\n\nVodDeleteSpaceResponse = _reflection.GeneratedProtocolMessageType('VodDeleteSpaceResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETESPACERESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDeleteSpaceResponse)\n  })\n_sym_db.RegisterMessage(VodDeleteSpaceResponse)\n\nVodListSpaceResponse = _reflection.GeneratedProtocolMessageType('VodListSpaceResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTSPACERESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodListSpaceResponse)\n  })\n_sym_db.RegisterMessage(VodListSpaceResponse)\n\nVodGetSpaceDetailResponse = _reflection.GeneratedProtocolMessageType('VodGetSpaceDetailResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETSPACEDETAILRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetSpaceDetailResponse)\n  })\n_sym_db.RegisterMessage(VodGetSpaceDetailResponse)\n\nVodUpdateSpaceResponse = _reflection.GeneratedProtocolMessageType('VodUpdateSpaceResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATESPACERESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUpdateSpaceResponse)\n  })\n_sym_db.RegisterMessage(VodUpdateSpaceResponse)\n\nVodUpdateSpaceUploadConfigResponse = _reflection.GeneratedProtocolMessageType('VodUpdateSpaceUploadConfigResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATESPACEUPLOADCONFIGRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUpdateSpaceUploadConfigResponse)\n  })\n_sym_db.RegisterMessage(VodUpdateSpaceUploadConfigResponse)\n\nVodDescribeUploadSpaceConfigResponse = _reflection.GeneratedProtocolMessageType('VodDescribeUploadSpaceConfigResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEUPLOADSPACECONFIGRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDescribeUploadSpaceConfigResponse)\n  })\n_sym_db.RegisterMessage(VodDescribeUploadSpaceConfigResponse)\n\nVodUpdateUploadSpaceConfigResponse = _reflection.GeneratedProtocolMessageType('VodUpdateUploadSpaceConfigResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEUPLOADSPACECONFIGRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUpdateUploadSpaceConfigResponse)\n  })\n_sym_db.RegisterMessage(VodUpdateUploadSpaceConfigResponse)\n\nVodDescribeVodSpaceStorageDataResponse = _reflection.GeneratedProtocolMessageType('VodDescribeVodSpaceStorageDataResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEVODSPACESTORAGEDATARESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDescribeVodSpaceStorageDataResponse)\n  })\n_sym_db.RegisterMessage(VodDescribeVodSpaceStorageDataResponse)\n\nVodUpdateDomainPlayRuleResponse = _reflection.GeneratedProtocolMessageType('VodUpdateDomainPlayRuleResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEDOMAINPLAYRULERESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUpdateDomainPlayRuleResponse)\n  })\n_sym_db.RegisterMessage(VodUpdateDomainPlayRuleResponse)\n\nVodAddDomainToSchedulerResponse = _reflection.GeneratedProtocolMessageType('VodAddDomainToSchedulerResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODADDDOMAINTOSCHEDULERRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodAddDomainToSchedulerResponse)\n  })\n_sym_db.RegisterMessage(VodAddDomainToSchedulerResponse)\n\nVodRemoveDomainFromSchedulerResponse = _reflection.GeneratedProtocolMessageType('VodRemoveDomainFromSchedulerResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODREMOVEDOMAINFROMSCHEDULERRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodRemoveDomainFromSchedulerResponse)\n  })\n_sym_db.RegisterMessage(VodRemoveDomainFromSchedulerResponse)\n\nVodDeleteDomainResponse = _reflection.GeneratedProtocolMessageType('VodDeleteDomainResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEDOMAINRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDeleteDomainResponse)\n  })\n_sym_db.RegisterMessage(VodDeleteDomainResponse)\n\nVodStartDomainResponse = _reflection.GeneratedProtocolMessageType('VodStartDomainResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODSTARTDOMAINRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodStartDomainResponse)\n  })\n_sym_db.RegisterMessage(VodStartDomainResponse)\n\nVodStopDomainResponse = _reflection.GeneratedProtocolMessageType('VodStopDomainResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODSTOPDOMAINRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodStopDomainResponse)\n  })\n_sym_db.RegisterMessage(VodStopDomainResponse)\n\nVodListDomainResponse = _reflection.GeneratedProtocolMessageType('VodListDomainResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTDOMAINRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodListDomainResponse)\n  })\n_sym_db.RegisterMessage(VodListDomainResponse)\n\nVodCreateCdnRefreshTaskResponse = _reflection.GeneratedProtocolMessageType('VodCreateCdnRefreshTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATECDNREFRESHTASKRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodCreateCdnRefreshTaskResponse)\n  })\n_sym_db.RegisterMessage(VodCreateCdnRefreshTaskResponse)\n\nVodCreateCdnPreloadTaskResponse = _reflection.GeneratedProtocolMessageType('VodCreateCdnPreloadTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATECDNPRELOADTASKRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodCreateCdnPreloadTaskResponse)\n  })\n_sym_db.RegisterMessage(VodCreateCdnPreloadTaskResponse)\n\nVodListCdnTasksResponse = _reflection.GeneratedProtocolMessageType('VodListCdnTasksResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTCDNTASKSRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodListCdnTasksResponse)\n  })\n_sym_db.RegisterMessage(VodListCdnTasksResponse)\n\nVodListCdnAccessLogResponse = _reflection.GeneratedProtocolMessageType('VodListCdnAccessLogResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTCDNACCESSLOGRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodListCdnAccessLogResponse)\n  })\n_sym_db.RegisterMessage(VodListCdnAccessLogResponse)\n\nVodListCdnTopAccessUrlResponse = _reflection.GeneratedProtocolMessageType('VodListCdnTopAccessUrlResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTCDNTOPACCESSURLRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodListCdnTopAccessUrlResponse)\n  })\n_sym_db.RegisterMessage(VodListCdnTopAccessUrlResponse)\n\nVodListCdnTopAccessResponse = _reflection.GeneratedProtocolMessageType('VodListCdnTopAccessResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTCDNTOPACCESSRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodListCdnTopAccessResponse)\n  })\n_sym_db.RegisterMessage(VodListCdnTopAccessResponse)\n\nVodDescribeVodDomainBandwidthDataResponse = _reflection.GeneratedProtocolMessageType('VodDescribeVodDomainBandwidthDataResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEVODDOMAINBANDWIDTHDATARESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDescribeVodDomainBandwidthDataResponse)\n  })\n_sym_db.RegisterMessage(VodDescribeVodDomainBandwidthDataResponse)\n\nVodCdnStatisticsCommonResponse = _reflection.GeneratedProtocolMessageType('VodCdnStatisticsCommonResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODCDNSTATISTICSCOMMONRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodCdnStatisticsCommonResponse)\n  })\n_sym_db.RegisterMessage(VodCdnStatisticsCommonResponse)\n\nVodDescribeIPInfoResponse = _reflection.GeneratedProtocolMessageType('VodDescribeIPInfoResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEIPINFORESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDescribeIPInfoResponse)\n  })\n_sym_db.RegisterMessage(VodDescribeIPInfoResponse)\n\nVodDescribeVodDomainTrafficDataResponse = _reflection.GeneratedProtocolMessageType('VodDescribeVodDomainTrafficDataResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEVODDOMAINTRAFFICDATARESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDescribeVodDomainTrafficDataResponse)\n  })\n_sym_db.RegisterMessage(VodDescribeVodDomainTrafficDataResponse)\n\nVodSubmitBlockTasksResponse = _reflection.GeneratedProtocolMessageType('VodSubmitBlockTasksResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITBLOCKTASKSRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodSubmitBlockTasksResponse)\n  })\n_sym_db.RegisterMessage(VodSubmitBlockTasksResponse)\n\nVodGetContentBlockTasksResponse = _reflection.GeneratedProtocolMessageType('VodGetContentBlockTasksResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETCONTENTBLOCKTASKSRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetContentBlockTasksResponse)\n  })\n_sym_db.RegisterMessage(VodGetContentBlockTasksResponse)\n\nVodCreateDomainV2Response = _reflection.GeneratedProtocolMessageType('VodCreateDomainV2Response', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEDOMAINV2RESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodCreateDomainV2Response)\n  })\n_sym_db.RegisterMessage(VodCreateDomainV2Response)\n\nVodCreateDomainV3Response = _reflection.GeneratedProtocolMessageType('VodCreateDomainV3Response', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEDOMAINV3RESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodCreateDomainV3Response)\n  })\n_sym_db.RegisterMessage(VodCreateDomainV3Response)\n\nVodUpdateDomainExpireV2Response = _reflection.GeneratedProtocolMessageType('VodUpdateDomainExpireV2Response', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEDOMAINEXPIREV2RESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUpdateDomainExpireV2Response)\n  })\n_sym_db.RegisterMessage(VodUpdateDomainExpireV2Response)\n\nVodUpdateDomainAuthConfigV2Response = _reflection.GeneratedProtocolMessageType('VodUpdateDomainAuthConfigV2Response', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEDOMAINAUTHCONFIGV2RESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUpdateDomainAuthConfigV2Response)\n  })\n_sym_db.RegisterMessage(VodUpdateDomainAuthConfigV2Response)\n\nVodUpdateDomainUrlAuthConfigV2Response = _reflection.GeneratedProtocolMessageType('VodUpdateDomainUrlAuthConfigV2Response', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEDOMAINURLAUTHCONFIGV2RESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUpdateDomainUrlAuthConfigV2Response)\n  })\n_sym_db.RegisterMessage(VodUpdateDomainUrlAuthConfigV2Response)\n\nVodVerifyDomainOwnerResponse = _reflection.GeneratedProtocolMessageType('VodVerifyDomainOwnerResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODVERIFYDOMAINOWNERRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodVerifyDomainOwnerResponse)\n  })\n_sym_db.RegisterMessage(VodVerifyDomainOwnerResponse)\n\nVodDescribeDomainVerifyContentResponse = _reflection.GeneratedProtocolMessageType('VodDescribeDomainVerifyContentResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEDOMAINVERIFYCONTENTRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDescribeDomainVerifyContentResponse)\n  })\n_sym_db.RegisterMessage(VodDescribeDomainVerifyContentResponse)\n\nVodListPCDNDomainResponse = _reflection.GeneratedProtocolMessageType('VodListPCDNDomainResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTPCDNDOMAINRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodListPCDNDomainResponse)\n  })\n_sym_db.RegisterMessage(VodListPCDNDomainResponse)\n\nVodCreatePCDNDomainResponse = _reflection.GeneratedProtocolMessageType('VodCreatePCDNDomainResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEPCDNDOMAINRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodCreatePCDNDomainResponse)\n  })\n_sym_db.RegisterMessage(VodCreatePCDNDomainResponse)\n\nVodStartPCDNDomainResponse = _reflection.GeneratedProtocolMessageType('VodStartPCDNDomainResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODSTARTPCDNDOMAINRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodStartPCDNDomainResponse)\n  })\n_sym_db.RegisterMessage(VodStartPCDNDomainResponse)\n\nVodStopPCDNDomainResponse = _reflection.GeneratedProtocolMessageType('VodStopPCDNDomainResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODSTOPPCDNDOMAINRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodStopPCDNDomainResponse)\n  })\n_sym_db.RegisterMessage(VodStopPCDNDomainResponse)\n\nVodDeletePCDNDomainResponse = _reflection.GeneratedProtocolMessageType('VodDeletePCDNDomainResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEPCDNDOMAINRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDeletePCDNDomainResponse)\n  })\n_sym_db.RegisterMessage(VodDeletePCDNDomainResponse)\n\nVodUpdateDomainConfigResponse = _reflection.GeneratedProtocolMessageType('VodUpdateDomainConfigResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODUPDATEDOMAINCONFIGRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodUpdateDomainConfigResponse)\n  })\n_sym_db.RegisterMessage(VodUpdateDomainConfigResponse)\n\nVodDescribeDomainConfigResponse = _reflection.GeneratedProtocolMessageType('VodDescribeDomainConfigResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBEDOMAINCONFIGRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDescribeDomainConfigResponse)\n  })\n_sym_db.RegisterMessage(VodDescribeDomainConfigResponse)\n\nVodDescribeCdnEdgeIpResponse = _reflection.GeneratedProtocolMessageType('VodDescribeCdnEdgeIpResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBECDNEDGEIPRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDescribeCdnEdgeIpResponse)\n  })\n_sym_db.RegisterMessage(VodDescribeCdnEdgeIpResponse)\n\nVodDescribeCdnRegionAndIspResponse = _reflection.GeneratedProtocolMessageType('VodDescribeCdnRegionAndIspResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDESCRIBECDNREGIONANDISPRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDescribeCdnRegionAndIspResponse)\n  })\n_sym_db.RegisterMessage(VodDescribeCdnRegionAndIspResponse)\n\nAddOrUpdateCertificateV2Response = _reflection.GeneratedProtocolMessageType('AddOrUpdateCertificateV2Response', (_message.Message,), {\n  'DESCRIPTOR' : _ADDORUPDATECERTIFICATEV2RESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.AddOrUpdateCertificateV2Response)\n  })\n_sym_db.RegisterMessage(AddOrUpdateCertificateV2Response)\n\nUpdateDomainAreaResponse = _reflection.GeneratedProtocolMessageType('UpdateDomainAreaResponse', (_message.Message,), {\n  'DESCRIPTOR' : _UPDATEDOMAINAREARESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.UpdateDomainAreaResponse)\n  })\n_sym_db.RegisterMessage(UpdateDomainAreaResponse)\n\nVodAddCallbackSubscriptionResponse = _reflection.GeneratedProtocolMessageType('VodAddCallbackSubscriptionResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODADDCALLBACKSUBSCRIPTIONRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodAddCallbackSubscriptionResponse)\n  })\n_sym_db.RegisterMessage(VodAddCallbackSubscriptionResponse)\n\nVodSetCallbackEventResponse = _reflection.GeneratedProtocolMessageType('VodSetCallbackEventResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODSETCALLBACKEVENTRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodSetCallbackEventResponse)\n  })\n_sym_db.RegisterMessage(VodSetCallbackEventResponse)\n\nGetCallbackRecordResponse = _reflection.GeneratedProtocolMessageType('GetCallbackRecordResponse', (_message.Message,), {\n  'DESCRIPTOR' : _GETCALLBACKRECORDRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.GetCallbackRecordResponse)\n  })\n_sym_db.RegisterMessage(GetCallbackRecordResponse)\n\nVodGetSmartStrategyLitePlayInfoResponse = _reflection.GeneratedProtocolMessageType('VodGetSmartStrategyLitePlayInfoResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETSMARTSTRATEGYLITEPLAYINFORESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetSmartStrategyLitePlayInfoResponse)\n  })\n_sym_db.RegisterMessage(VodGetSmartStrategyLitePlayInfoResponse)\n\nVodGetAppInfoResponse = _reflection.GeneratedProtocolMessageType('VodGetAppInfoResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETAPPINFORESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetAppInfoResponse)\n  })\n_sym_db.RegisterMessage(VodGetAppInfoResponse)\n\nDescribeVodSpaceTranscodeDataResponse = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceTranscodeDataResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACETRANSCODEDATARESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.DescribeVodSpaceTranscodeDataResponse)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceTranscodeDataResponse)\n\nDescribeVodSpaceAIStatisDataResponse = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceAIStatisDataResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEAISTATISDATARESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.DescribeVodSpaceAIStatisDataResponse)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceAIStatisDataResponse)\n\nDescribeVodSpaceSubtitleStatisDataResponse = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceSubtitleStatisDataResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACESUBTITLESTATISDATARESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.DescribeVodSpaceSubtitleStatisDataResponse)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceSubtitleStatisDataResponse)\n\nDescribeVodSpaceDetectStatisDataResponse = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceDetectStatisDataResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEDETECTSTATISDATARESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.DescribeVodSpaceDetectStatisDataResponse)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceDetectStatisDataResponse)\n\nDescribeVodSnapshotDataResponse = _reflection.GeneratedProtocolMessageType('DescribeVodSnapshotDataResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSNAPSHOTDATARESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.DescribeVodSnapshotDataResponse)\n  })\n_sym_db.RegisterMessage(DescribeVodSnapshotDataResponse)\n\nDescribeVodSpaceWorkflowDetailDataResponse = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceWorkflowDetailDataResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEWORKFLOWDETAILDATARESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.DescribeVodSpaceWorkflowDetailDataResponse)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceWorkflowDetailDataResponse)\n\nDescribeVodSpaceEditDetailDataResponse = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceEditDetailDataResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEEDITDETAILDATARESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.DescribeVodSpaceEditDetailDataResponse)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceEditDetailDataResponse)\n\nDescribeVodRealtimeMediaDataResponse = _reflection.GeneratedProtocolMessageType('DescribeVodRealtimeMediaDataResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODREALTIMEMEDIADATARESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.DescribeVodRealtimeMediaDataResponse)\n  })\n_sym_db.RegisterMessage(DescribeVodRealtimeMediaDataResponse)\n\nDescribeVodRealtimeMediaDetailDataResponse = _reflection.GeneratedProtocolMessageType('DescribeVodRealtimeMediaDetailDataResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODREALTIMEMEDIADETAILDATARESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.DescribeVodRealtimeMediaDetailDataResponse)\n  })\n_sym_db.RegisterMessage(DescribeVodRealtimeMediaDetailDataResponse)\n\nDescribeVodPlayFileLogByDomainResponse = _reflection.GeneratedProtocolMessageType('DescribeVodPlayFileLogByDomainResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODPLAYFILELOGBYDOMAINRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.DescribeVodPlayFileLogByDomainResponse)\n  })\n_sym_db.RegisterMessage(DescribeVodPlayFileLogByDomainResponse)\n\nDescribeVodEnhanceImageDataResponse = _reflection.GeneratedProtocolMessageType('DescribeVodEnhanceImageDataResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODENHANCEIMAGEDATARESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.DescribeVodEnhanceImageDataResponse)\n  })\n_sym_db.RegisterMessage(DescribeVodEnhanceImageDataResponse)\n\nDescribeVodSpaceEditStatisDataResponse = _reflection.GeneratedProtocolMessageType('DescribeVodSpaceEditStatisDataResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODSPACEEDITSTATISDATARESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.DescribeVodSpaceEditStatisDataResponse)\n  })\n_sym_db.RegisterMessage(DescribeVodSpaceEditStatisDataResponse)\n\nDescribeVodPlayedStatisDataResponse = _reflection.GeneratedProtocolMessageType('DescribeVodPlayedStatisDataResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODPLAYEDSTATISDATARESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.DescribeVodPlayedStatisDataResponse)\n  })\n_sym_db.RegisterMessage(DescribeVodPlayedStatisDataResponse)\n\nDescribeVodMostPlayedStatisDataResponse = _reflection.GeneratedProtocolMessageType('DescribeVodMostPlayedStatisDataResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODMOSTPLAYEDSTATISDATARESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.DescribeVodMostPlayedStatisDataResponse)\n  })\n_sym_db.RegisterMessage(DescribeVodMostPlayedStatisDataResponse)\n\nDescribeVodVidTrafficFileLogResponse = _reflection.GeneratedProtocolMessageType('DescribeVodVidTrafficFileLogResponse', (_message.Message,), {\n  'DESCRIPTOR' : _DESCRIBEVODVIDTRAFFICFILELOGRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.DescribeVodVidTrafficFileLogResponse)\n  })\n_sym_db.RegisterMessage(DescribeVodVidTrafficFileLogResponse)\n\nVodSubmitBlockMediaTaskResponse = _reflection.GeneratedProtocolMessageType('VodSubmitBlockMediaTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITBLOCKMEDIATASKRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodSubmitBlockMediaTaskResponse)\n  })\n_sym_db.RegisterMessage(VodSubmitBlockMediaTaskResponse)\n\nVodSubmitUnblockMediaTaskResponse = _reflection.GeneratedProtocolMessageType('VodSubmitUnblockMediaTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITUNBLOCKMEDIATASKRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodSubmitUnblockMediaTaskResponse)\n  })\n_sym_db.RegisterMessage(VodSubmitUnblockMediaTaskResponse)\n\nVodQueryMediaBlockStatusResponse = _reflection.GeneratedProtocolMessageType('VodQueryMediaBlockStatusResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODQUERYMEDIABLOCKSTATUSRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodQueryMediaBlockStatusResponse)\n  })\n_sym_db.RegisterMessage(VodQueryMediaBlockStatusResponse)\n\nVodListProjectsResponse = _reflection.GeneratedProtocolMessageType('VodListProjectsResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODLISTPROJECTSRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodListProjectsResponse)\n  })\n_sym_db.RegisterMessage(VodListProjectsResponse)\n\nVodGetTradeConfigurationResponse = _reflection.GeneratedProtocolMessageType('VodGetTradeConfigurationResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETTRADECONFIGURATIONRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetTradeConfigurationResponse)\n  })\n_sym_db.RegisterMessage(VodGetTradeConfigurationResponse)\n\nVodSetCloudMigrateJobResponse = _reflection.GeneratedProtocolMessageType('VodSetCloudMigrateJobResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODSETCLOUDMIGRATEJOBRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodSetCloudMigrateJobResponse)\n  })\n_sym_db.RegisterMessage(VodSetCloudMigrateJobResponse)\n\nVodSubmitCloudMigrateJobResponse = _reflection.GeneratedProtocolMessageType('VodSubmitCloudMigrateJobResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODSUBMITCLOUDMIGRATEJOBRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodSubmitCloudMigrateJobResponse)\n  })\n_sym_db.RegisterMessage(VodSubmitCloudMigrateJobResponse)\n\nVodGetCloudMigrateJobResponse = _reflection.GeneratedProtocolMessageType('VodGetCloudMigrateJobResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETCLOUDMIGRATEJOBRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetCloudMigrateJobResponse)\n  })\n_sym_db.RegisterMessage(VodGetCloudMigrateJobResponse)\n\nVodReportEventResponse = _reflection.GeneratedProtocolMessageType('VodReportEventResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODREPORTEVENTRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodReportEventResponse)\n  })\n_sym_db.RegisterMessage(VodReportEventResponse)\n\nVodCreateDramaRecapTaskResponse = _reflection.GeneratedProtocolMessageType('VodCreateDramaRecapTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEDRAMARECAPTASKRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodCreateDramaRecapTaskResponse)\n  })\n_sym_db.RegisterMessage(VodCreateDramaRecapTaskResponse)\n\nVodCreateDramaScriptTaskResponse = _reflection.GeneratedProtocolMessageType('VodCreateDramaScriptTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODCREATEDRAMASCRIPTTASKRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodCreateDramaScriptTaskResponse)\n  })\n_sym_db.RegisterMessage(VodCreateDramaScriptTaskResponse)\n\nVodQueryDramaRecapTaskResponse = _reflection.GeneratedProtocolMessageType('VodQueryDramaRecapTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODQUERYDRAMARECAPTASKRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodQueryDramaRecapTaskResponse)\n  })\n_sym_db.RegisterMessage(VodQueryDramaRecapTaskResponse)\n\nVodQueryDramaScriptTaskResponse = _reflection.GeneratedProtocolMessageType('VodQueryDramaScriptTaskResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODQUERYDRAMASCRIPTTASKRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodQueryDramaScriptTaskResponse)\n  })\n_sym_db.RegisterMessage(VodQueryDramaScriptTaskResponse)\n\nVodGetMediaEntityListResponse = _reflection.GeneratedProtocolMessageType('VodGetMediaEntityListResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETMEDIAENTITYLISTRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetMediaEntityListResponse)\n  })\n_sym_db.RegisterMessage(VodGetMediaEntityListResponse)\n\nVodGetMediaEntityResponse = _reflection.GeneratedProtocolMessageType('VodGetMediaEntityResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETMEDIAENTITYRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetMediaEntityResponse)\n  })\n_sym_db.RegisterMessage(VodGetMediaEntityResponse)\n\nVodDeleteMediaEntityResponse = _reflection.GeneratedProtocolMessageType('VodDeleteMediaEntityResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODDELETEMEDIAENTITYRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodDeleteMediaEntityResponse)\n  })\n_sym_db.RegisterMessage(VodDeleteMediaEntityResponse)\n\nVodGetMediaEntityConfigListResponse = _reflection.GeneratedProtocolMessageType('VodGetMediaEntityConfigListResponse', (_message.Message,), {\n  'DESCRIPTOR' : _VODGETMEDIAENTITYCONFIGLISTRESPONSE,\n  '__module__' : 'volcengine.vod.response.response_vod_pb2'\n  # @@protoc_insertion_point(class_scope:Volcengine.Vod.Models.Response.VodGetMediaEntityConfigListResponse)\n  })\n_sym_db.RegisterMessage(VodGetMediaEntityConfigListResponse)\n\nif _descriptor._USE_C_DESCRIPTORS == False:\n\n  DESCRIPTOR._options = None\n  DESCRIPTOR._serialized_options = b'\\n)com.volcengine.service.vod.model.responseB\\013VodResponseP\\001ZAgithub.com/volcengine/volc-sdk-golang/service/vod/models/response\\240\\001\\001\\330\\001\\001\\312\\002 Volc\\\\Service\\\\Vod\\\\Models\\\\Response\\342\\002#Volc\\\\Service\\\\Vod\\\\Models\\\\GPBMetadata'\n  _VODGETALLPLAYINFORESPONSE._serialized_start=874\n  _VODGETALLPLAYINFORESPONSE._serialized_end=1044\n  _VODGETPLAYINFORESPONSE._serialized_start=1047\n  _VODGETPLAYINFORESPONSE._serialized_end=1210\n  _VODGETORIGINALPLAYINFORESPONSE._serialized_start=1213\n  _VODGETORIGINALPLAYINFORESPONSE._serialized_end=1396\n  _VODGETPRIVATEDRMPLAYAUTHRESPONSE._serialized_start=1399\n  _VODGETPRIVATEDRMPLAYAUTHRESPONSE._serialized_end=1586\n  _VODGETHLSDECRYPTIONKEYRESPONSE._serialized_start=1589\n  _VODGETHLSDECRYPTIONKEYRESPONSE._serialized_end=1772\n  _VODCREATEHLSDECRYPTIONKEYRESPONSE._serialized_start=1775\n  _VODCREATEHLSDECRYPTIONKEYRESPONSE._serialized_end=1964\n  _VODGETPLAYINFOWITHLIVETIMESHIFTSCENERESPONSE._serialized_start=1967\n  _VODGETPLAYINFOWITHLIVETIMESHIFTSCENERESPONSE._serialized_end=2178\n  _VODDESCRIBEDRMDATAKEYRESPONSE._serialized_start=2181\n  _VODDESCRIBEDRMDATAKEYRESPONSE._serialized_end=2362\n  _VODSUBMITMOVEOBJECTTASKRESPONSE._serialized_start=2365\n  _VODSUBMITMOVEOBJECTTASKRESPONSE._serialized_end=2552\n  _VODQUERYMOVEOBJECTTASKINFORESPONSE._serialized_start=2555\n  _VODQUERYMOVEOBJECTTASKINFORESPONSE._serialized_end=2747\n  _VODSUBMITBLOCKOBJECTTASKSRESPONSE._serialized_start=2750\n  _VODSUBMITBLOCKOBJECTTASKSRESPONSE._serialized_end=2939\n  _VODLISTBLOCKOBJECTTASKSRESPONSE._serialized_start=2942\n  _VODLISTBLOCKOBJECTTASKSRESPONSE._serialized_end=3127\n  _VODUPLOADMEDIARESPONSE._serialized_start=3130\n  _VODUPLOADMEDIARESPONSE._serialized_end=3290\n  _VODQUERYUPLOADTASKINFORESPONSE._serialized_start=3293\n  _VODQUERYUPLOADTASKINFORESPONSE._serialized_end=3460\n  _VODURLUPLOADRESPONSE._serialized_start=3463\n  _VODURLUPLOADRESPONSE._serialized_end=3626\n  _VODAPPLYUPLOADINFORESPONSE._serialized_start=3629\n  _VODAPPLYUPLOADINFORESPONSE._serialized_end=3804\n  _VODCOMMITUPLOADINFORESPONSE._serialized_start=3807\n  _VODCOMMITUPLOADINFORESPONSE._serialized_end=3984\n  _VODPARSEUPLOADMANIFESTRESPONSE._serialized_start=3987\n  _VODPARSEUPLOADMANIFESTRESPONSE._serialized_end=4170\n  _VODLISTFILEMETAINFOSBYFILENAMESRESPONSE._serialized_start=4173\n  _VODLISTFILEMETAINFOSBYFILENAMESRESPONSE._serialized_end=4374\n  _VODGETMEDIAINFOSRESPONSE._serialized_start=4377\n  _VODGETMEDIAINFOSRESPONSE._serialized_end=4546\n  _VODUPDATEMEDIAINFORESPONSE._serialized_start=4548\n  _VODUPDATEMEDIAINFORESPONSE._serialized_end=4649\n  _VODGETRECOMMENDEDPOSTERRESPONSE._serialized_start=4652\n  _VODGETRECOMMENDEDPOSTERRESPONSE._serialized_end=4827\n  _VODUPDATEMEDIAPUBLISHSTATUSRESPONSE._serialized_start=4829\n  _VODUPDATEMEDIAPUBLISHSTATUSRESPONSE._serialized_end=4939\n  _VODUPDATEMEDIASTORAGECLASSRESPONSE._serialized_start=4942\n  _VODUPDATEMEDIASTORAGECLASSRESPONSE._serialized_end=5131\n  _VODDELETEMEDIARESPONSE._serialized_start=5134\n  _VODDELETEMEDIARESPONSE._serialized_end=5299\n  _VODDELETEMATERIALRESPONSE._serialized_start=5301\n  _VODDELETEMATERIALRESPONSE._serialized_end=5401\n  _VODDELETETRANSCODESRESPONSE._serialized_start=5404\n  _VODDELETETRANSCODESRESPONSE._serialized_end=5579\n  _VODDELETEMEDIATOSFILERESPONSE._serialized_start=5582\n  _VODDELETEMEDIATOSFILERESPONSE._serialized_end=5761\n  _VODGETMEDIALISTRESPONSE._serialized_start=5764\n  _VODGETMEDIALISTRESPONSE._serialized_end=5931\n  _VODGETSUBTITLEINFOLISTRESPONSE._serialized_start=5934\n  _VODGETSUBTITLEINFOLISTRESPONSE._serialized_end=6115\n  _VODUPDATESUBTITLESTATUSRESPONSE._serialized_start=6118\n  _VODUPDATESUBTITLESTATUSRESPONSE._serialized_end=6301\n  _VODUPDATESUBTITLEINFORESPONSE._serialized_start=6303\n  _VODUPDATESUBTITLEINFORESPONSE._serialized_end=6407\n  _VODGETAUDITFRAMESFORAUDITRESPONSE._serialized_start=6410\n  _VODGETAUDITFRAMESFORAUDITRESPONSE._serialized_end=6594\n  _VODGETMLFRAMESFORAUDITRESPONSE._serialized_start=6597\n  _VODGETMLFRAMESFORAUDITRESPONSE._serialized_end=6778\n  _VODGETBETTERFRAMESFORAUDITRESPONSE._serialized_start=6781\n  _VODGETBETTERFRAMESFORAUDITRESPONSE._serialized_end=6972\n  _VODGETAUDIOINFOFORAUDITRESPONSE._serialized_start=6975\n  _VODGETAUDIOINFOFORAUDITRESPONSE._serialized_end=7160\n  _VODGETAUTOMATICSPEECHRECOGNITIONFORAUDITRESPONSE._serialized_start=7163\n  _VODGETAUTOMATICSPEECHRECOGNITIONFORAUDITRESPONSE._serialized_end=7382\n  _VODGETAUDIOEVENTDETECTIONFORAUDITRESPONSE._serialized_start=7385\n  _VODGETAUDIOEVENTDETECTIONFORAUDITRESPONSE._serialized_end=7590\n  _VODCREATEVIDEOCLASSIFICATIONRESPONSE._serialized_start=7593\n  _VODCREATEVIDEOCLASSIFICATIONRESPONSE._serialized_end=7786\n  _VODUPDATEVIDEOCLASSIFICATIONRESPONSE._serialized_start=7788\n  _VODUPDATEVIDEOCLASSIFICATIONRESPONSE._serialized_end=7899\n  _VODDELETEVIDEOCLASSIFICATIONRESPONSE._serialized_start=7901\n  _VODDELETEVIDEOCLASSIFICATIONRESPONSE._serialized_end=8012\n  _VODLISTVIDEOCLASSIFICATIONSRESPONSE._serialized_start=8015\n  _VODLISTVIDEOCLASSIFICATIONSRESPONSE._serialized_end=8202\n  _VODLISTSNAPSHOTSRESPONSE._serialized_start=8205\n  _VODLISTSNAPSHOTSRESPONSE._serialized_end=8369\n  _VODGETFILELISTRESPONSE._serialized_start=8372\n  _VODGETFILELISTRESPONSE._serialized_end=8539\n  _VODGETFILEINFOSRESPONSE._serialized_start=8542\n  _VODGETFILEINFOSRESPONSE._serialized_end=8709\n  _VODUPDATEFILESTORAGECLASSRESPONSE._serialized_start=8712\n  _VODUPDATEFILESTORAGECLASSRESPONSE._serialized_end=8899\n  _VODGETINNERAUDITURLSRESPONSE._serialized_start=8902\n  _VODGETINNERAUDITURLSRESPONSE._serialized_end=9079\n  _VODGETADAUDITRESULTBYVIDRESPONSE._serialized_start=9082\n  _VODGETADAUDITRESULTBYVIDRESPONSE._serialized_end=9267\n  _VODEXTRACTMEDIAMETATASKRESPONSE._serialized_start=9269\n  _VODEXTRACTMEDIAMETATASKRESPONSE._serialized_end=9375\n  _VODSTARTWORKFLOWRESPONSE._serialized_start=9378\n  _VODSTARTWORKFLOWRESPONSE._serialized_end=9549\n  _VODRETRIEVETRANSCODERESULTRESPONSE._serialized_start=9552\n  _VODRETRIEVETRANSCODERESULTRESPONSE._serialized_end=9726\n  _VODLISTWORKFLOWEXECUTIONRESPONSE._serialized_start=9729\n  _VODLISTWORKFLOWEXECUTIONRESPONSE._serialized_end=9916\n  _VODGETWORKFLOWEXECUTIONDETAILRESPONSE._serialized_start=9919\n  _VODGETWORKFLOWEXECUTIONDETAILRESPONSE._serialized_end=10116\n  _VODGETWORKFLOWEXECUTIONSTATUSRESPONSE._serialized_start=10119\n  _VODGETWORKFLOWEXECUTIONSTATUSRESPONSE._serialized_end=10298\n  _VODGETWORKFLOWRESULTRESPONSE._serialized_start=10301\n  _VODGETWORKFLOWRESULTRESPONSE._serialized_end=10471\n  _VODCREATETASKTEMPLATERESPONSE._serialized_start=10474\n  _VODCREATETASKTEMPLATERESPONSE._serialized_end=10649\n  _VODUPDATETASKTEMPLATERESPONSE._serialized_start=10652\n  _VODUPDATETASKTEMPLATERESPONSE._serialized_end=10827\n  _VODDELETETASKTEMPLATERESPONSE._serialized_start=10830\n  _VODDELETETASKTEMPLATERESPONSE._serialized_end=11005\n  _VODGETTASKTEMPLATERESPONSE._serialized_start=11008\n  _VODGETTASKTEMPLATERESPONSE._serialized_end=11180\n  _VODLISTTASKTEMPLATERESPONSE._serialized_start=11183\n  _VODLISTTASKTEMPLATERESPONSE._serialized_end=11360\n  _VODCREATEWORKFLOWTEMPLATERESPONSE._serialized_start=11363\n  _VODCREATEWORKFLOWTEMPLATERESPONSE._serialized_end=11546\n  _VODUPDATEWORKFLOWTEMPLATERESPONSE._serialized_start=11548\n  _VODUPDATEWORKFLOWTEMPLATERESPONSE._serialized_end=11656\n  _VODDELETEWORKFLOWTEMPLATERESPONSE._serialized_start=11658\n  _VODDELETEWORKFLOWTEMPLATERESPONSE._serialized_end=11766\n  _VODGETWORKFLOWTEMPLATERESPONSE._serialized_start=11769\n  _VODGETWORKFLOWTEMPLATERESPONSE._serialized_end=11949\n  _VODLISTWORKFLOWTEMPLATERESPONSE._serialized_start=11952\n  _VODLISTWORKFLOWTEMPLATERESPONSE._serialized_end=12137\n  _VODCREATEWATERMARKRESPONSE._serialized_start=12140\n  _VODCREATEWATERMARKRESPONSE._serialized_end=12303\n  _VODUPDATEWATERMARKRESPONSE._serialized_start=12305\n  _VODUPDATEWATERMARKRESPONSE._serialized_end=12406\n  _VODDELETEWATERMARKRESPONSE._serialized_start=12408\n  _VODDELETEWATERMARKRESPONSE._serialized_end=12509\n  _VODGETWATERMARKRESPONSE._serialized_start=12512\n  _VODGETWATERMARKRESPONSE._serialized_end=12672\n  _VODLISTWATERMARKRESPONSE._serialized_start=12675\n  _VODLISTWATERMARKRESPONSE._serialized_end=12854\n  _VODSUBMITDIRECTEDITTASKASYNCRESPONSE._serialized_start=12857\n  _VODSUBMITDIRECTEDITTASKASYNCRESPONSE._serialized_end=13049\n  _VODSUBMITDIRECTEDITTASKSYNCRESPONSE._serialized_start=13052\n  _VODSUBMITDIRECTEDITTASKSYNCRESPONSE._serialized_end=13242\n  _VODGETDIRECTEDITPROGRESSRESPONSE._serialized_start=13245\n  _VODGETDIRECTEDITPROGRESSRESPONSE._serialized_end=13423\n  _VODGETDIRECTEDITRESULTRESPONSE._serialized_start=13426\n  _VODGETDIRECTEDITRESULTRESPONSE._serialized_end=13600\n  _VODCANCELDIRECTEDITTASKRESPONSE._serialized_start=13603\n  _VODCANCELDIRECTEDITTASKRESPONSE._serialized_end=13779\n  _VODASYNCVCREATIVETASKRESPONSE._serialized_start=13782\n  _VODASYNCVCREATIVETASKRESPONSE._serialized_end=13960\n  _VODGETVCREATIVETASKRESULTRESPONSE._serialized_start=13963\n  _VODGETVCREATIVETASKRESULTRESPONSE._serialized_end=14143\n  _VODCREATESPACERESPONSE._serialized_start=14145\n  _VODCREATESPACERESPONSE._serialized_end=14242\n  _VODDELETESPACERESPONSE._serialized_start=14244\n  _VODDELETESPACERESPONSE._serialized_end=14341\n  _VODLISTSPACERESPONSE._serialized_start=14344\n  _VODLISTSPACERESPONSE._serialized_end=14501\n  _VODGETSPACEDETAILRESPONSE._serialized_start=14504\n  _VODGETSPACEDETAILRESPONSE._serialized_end=14666\n  _VODUPDATESPACERESPONSE._serialized_start=14668\n  _VODUPDATESPACERESPONSE._serialized_end=14765\n  _VODUPDATESPACEUPLOADCONFIGRESPONSE._serialized_start=14767\n  _VODUPDATESPACEUPLOADCONFIGRESPONSE._serialized_end=14876\n  _VODDESCRIBEUPLOADSPACECONFIGRESPONSE._serialized_start=14879\n  _VODDESCRIBEUPLOADSPACECONFIGRESPONSE._serialized_end=15060\n  _VODUPDATEUPLOADSPACECONFIGRESPONSE._serialized_start=15062\n  _VODUPDATEUPLOADSPACECONFIGRESPONSE._serialized_end=15171\n  _VODDESCRIBEVODSPACESTORAGEDATARESPONSE._serialized_start=15174\n  _VODDESCRIBEVODSPACESTORAGEDATARESPONSE._serialized_end=15373\n  _VODUPDATEDOMAINPLAYRULERESPONSE._serialized_start=15375\n  _VODUPDATEDOMAINPLAYRULERESPONSE._serialized_end=15481\n  _VODADDDOMAINTOSCHEDULERRESPONSE._serialized_start=15483\n  _VODADDDOMAINTOSCHEDULERRESPONSE._serialized_end=15589\n  _VODREMOVEDOMAINFROMSCHEDULERRESPONSE._serialized_start=15591\n  _VODREMOVEDOMAINFROMSCHEDULERRESPONSE._serialized_end=15702\n  _VODDELETEDOMAINRESPONSE._serialized_start=15704\n  _VODDELETEDOMAINRESPONSE._serialized_end=15802\n  _VODSTARTDOMAINRESPONSE._serialized_start=15804\n  _VODSTARTDOMAINRESPONSE._serialized_end=15901\n  _VODSTOPDOMAINRESPONSE._serialized_start=15903\n  _VODSTOPDOMAINRESPONSE._serialized_end=15999\n  _VODLISTDOMAINRESPONSE._serialized_start=16002\n  _VODLISTDOMAINRESPONSE._serialized_end=16167\n  _VODCREATECDNREFRESHTASKRESPONSE._serialized_start=16170\n  _VODCREATECDNREFRESHTASKRESPONSE._serialized_end=16348\n  _VODCREATECDNPRELOADTASKRESPONSE._serialized_start=16351\n  _VODCREATECDNPRELOADTASKRESPONSE._serialized_end=16529\n  _VODLISTCDNTASKSRESPONSE._serialized_start=16532\n  _VODLISTCDNTASKSRESPONSE._serialized_end=16696\n  _VODLISTCDNACCESSLOGRESPONSE._serialized_start=16699\n  _VODLISTCDNACCESSLOGRESPONSE._serialized_end=16876\n  _VODLISTCDNTOPACCESSURLRESPONSE._serialized_start=16879\n  _VODLISTCDNTOPACCESSURLRESPONSE._serialized_end=17062\n  _VODLISTCDNTOPACCESSRESPONSE._serialized_start=17065\n  _VODLISTCDNTOPACCESSRESPONSE._serialized_end=17242\n  _VODDESCRIBEVODDOMAINBANDWIDTHDATARESPONSE._serialized_start=17245\n  _VODDESCRIBEVODDOMAINBANDWIDTHDATARESPONSE._serialized_end=17450\n  _VODCDNSTATISTICSCOMMONRESPONSE._serialized_start=17453\n  _VODCDNSTATISTICSCOMMONRESPONSE._serialized_end=17636\n  _VODDESCRIBEIPINFORESPONSE._serialized_start=17639\n  _VODDESCRIBEIPINFORESPONSE._serialized_end=17801\n  _VODDESCRIBEVODDOMAINTRAFFICDATARESPONSE._serialized_start=17804\n  _VODDESCRIBEVODDOMAINTRAFFICDATARESPONSE._serialized_end=18005\n  _VODSUBMITBLOCKTASKSRESPONSE._serialized_start=18008\n  _VODSUBMITBLOCKTASKSRESPONSE._serialized_end=18185\n  _VODGETCONTENTBLOCKTASKSRESPONSE._serialized_start=18188\n  _VODGETCONTENTBLOCKTASKSRESPONSE._serialized_end=18373\n  _VODCREATEDOMAINV2RESPONSE._serialized_start=18375\n  _VODCREATEDOMAINV2RESPONSE._serialized_end=18475\n  _VODCREATEDOMAINV3RESPONSE._serialized_start=18477\n  _VODCREATEDOMAINV3RESPONSE._serialized_end=18577\n  _VODUPDATEDOMAINEXPIREV2RESPONSE._serialized_start=18579\n  _VODUPDATEDOMAINEXPIREV2RESPONSE._serialized_end=18685\n  _VODUPDATEDOMAINAUTHCONFIGV2RESPONSE._serialized_start=18687\n  _VODUPDATEDOMAINAUTHCONFIGV2RESPONSE._serialized_end=18797\n  _VODUPDATEDOMAINURLAUTHCONFIGV2RESPONSE._serialized_start=18799\n  _VODUPDATEDOMAINURLAUTHCONFIGV2RESPONSE._serialized_end=18912\n  _VODVERIFYDOMAINOWNERRESPONSE._serialized_start=18915\n  _VODVERIFYDOMAINOWNERRESPONSE._serialized_end=19094\n  _VODDESCRIBEDOMAINVERIFYCONTENTRESPONSE._serialized_start=19097\n  _VODDESCRIBEDOMAINVERIFYCONTENTRESPONSE._serialized_end=19296\n  _VODLISTPCDNDOMAINRESPONSE._serialized_start=19299\n  _VODLISTPCDNDOMAINRESPONSE._serialized_end=19472\n  _VODCREATEPCDNDOMAINRESPONSE._serialized_start=19474\n  _VODCREATEPCDNDOMAINRESPONSE._serialized_end=19576\n  _VODSTARTPCDNDOMAINRESPONSE._serialized_start=19578\n  _VODSTARTPCDNDOMAINRESPONSE._serialized_end=19679\n  _VODSTOPPCDNDOMAINRESPONSE._serialized_start=19681\n  _VODSTOPPCDNDOMAINRESPONSE._serialized_end=19781\n  _VODDELETEPCDNDOMAINRESPONSE._serialized_start=19783\n  _VODDELETEPCDNDOMAINRESPONSE._serialized_end=19885\n  _VODUPDATEDOMAINCONFIGRESPONSE._serialized_start=19887\n  _VODUPDATEDOMAINCONFIGRESPONSE._serialized_end=19991\n  _VODDESCRIBEDOMAINCONFIGRESPONSE._serialized_start=19994\n  _VODDESCRIBEDOMAINCONFIGRESPONSE._serialized_end=20179\n  _VODDESCRIBECDNEDGEIPRESPONSE._serialized_start=20182\n  _VODDESCRIBECDNEDGEIPRESPONSE._serialized_end=20361\n  _VODDESCRIBECDNREGIONANDISPRESPONSE._serialized_start=20364\n  _VODDESCRIBECDNREGIONANDISPRESPONSE._serialized_end=20555\n  _ADDORUPDATECERTIFICATEV2RESPONSE._serialized_start=20557\n  _ADDORUPDATECERTIFICATEV2RESPONSE._serialized_end=20664\n  _UPDATEDOMAINAREARESPONSE._serialized_start=20666\n  _UPDATEDOMAINAREARESPONSE._serialized_end=20765\n  _VODADDCALLBACKSUBSCRIPTIONRESPONSE._serialized_start=20767\n  _VODADDCALLBACKSUBSCRIPTIONRESPONSE._serialized_end=20876\n  _VODSETCALLBACKEVENTRESPONSE._serialized_start=20878\n  _VODSETCALLBACKEVENTRESPONSE._serialized_end=20980\n  _GETCALLBACKRECORDRESPONSE._serialized_start=20983\n  _GETCALLBACKRECORDRESPONSE._serialized_end=21148\n  _VODGETSMARTSTRATEGYLITEPLAYINFORESPONSE._serialized_start=21151\n  _VODGETSMARTSTRATEGYLITEPLAYINFORESPONSE._serialized_end=21352\n  _VODGETAPPINFORESPONSE._serialized_start=21355\n  _VODGETAPPINFORESPONSE._serialized_end=21520\n  _DESCRIBEVODSPACETRANSCODEDATARESPONSE._serialized_start=21523\n  _DESCRIBEVODSPACETRANSCODEDATARESPONSE._serialized_end=21720\n  _DESCRIBEVODSPACEAISTATISDATARESPONSE._serialized_start=21723\n  _DESCRIBEVODSPACEAISTATISDATARESPONSE._serialized_end=21918\n  _DESCRIBEVODSPACESUBTITLESTATISDATARESPONSE._serialized_start=21921\n  _DESCRIBEVODSPACESUBTITLESTATISDATARESPONSE._serialized_end=22128\n  _DESCRIBEVODSPACEDETECTSTATISDATARESPONSE._serialized_start=22131\n  _DESCRIBEVODSPACEDETECTSTATISDATARESPONSE._serialized_end=22334\n  _DESCRIBEVODSNAPSHOTDATARESPONSE._serialized_start=22337\n  _DESCRIBEVODSNAPSHOTDATARESPONSE._serialized_end=22522\n  _DESCRIBEVODSPACEWORKFLOWDETAILDATARESPONSE._serialized_start=22525\n  _DESCRIBEVODSPACEWORKFLOWDETAILDATARESPONSE._serialized_end=22732\n  _DESCRIBEVODSPACEEDITDETAILDATARESPONSE._serialized_start=22735\n  _DESCRIBEVODSPACEEDITDETAILDATARESPONSE._serialized_end=22934\n  _DESCRIBEVODREALTIMEMEDIADATARESPONSE._serialized_start=22937\n  _DESCRIBEVODREALTIMEMEDIADATARESPONSE._serialized_end=23132\n  _DESCRIBEVODREALTIMEMEDIADETAILDATARESPONSE._serialized_start=23135\n  _DESCRIBEVODREALTIMEMEDIADETAILDATARESPONSE._serialized_end=23342\n  _DESCRIBEVODPLAYFILELOGBYDOMAINRESPONSE._serialized_start=23345\n  _DESCRIBEVODPLAYFILELOGBYDOMAINRESPONSE._serialized_end=23544\n  _DESCRIBEVODENHANCEIMAGEDATARESPONSE._serialized_start=23547\n  _DESCRIBEVODENHANCEIMAGEDATARESPONSE._serialized_end=23740\n  _DESCRIBEVODSPACEEDITSTATISDATARESPONSE._serialized_start=23743\n  _DESCRIBEVODSPACEEDITSTATISDATARESPONSE._serialized_end=23942\n  _DESCRIBEVODPLAYEDSTATISDATARESPONSE._serialized_start=23945\n  _DESCRIBEVODPLAYEDSTATISDATARESPONSE._serialized_end=24138\n  _DESCRIBEVODMOSTPLAYEDSTATISDATARESPONSE._serialized_start=24141\n  _DESCRIBEVODMOSTPLAYEDSTATISDATARESPONSE._serialized_end=24342\n  _DESCRIBEVODVIDTRAFFICFILELOGRESPONSE._serialized_start=24345\n  _DESCRIBEVODVIDTRAFFICFILELOGRESPONSE._serialized_end=24540\n  _VODSUBMITBLOCKMEDIATASKRESPONSE._serialized_start=24543\n  _VODSUBMITBLOCKMEDIATASKRESPONSE._serialized_end=24728\n  _VODSUBMITUNBLOCKMEDIATASKRESPONSE._serialized_start=24731\n  _VODSUBMITUNBLOCKMEDIATASKRESPONSE._serialized_end=24920\n  _VODQUERYMEDIABLOCKSTATUSRESPONSE._serialized_start=24923\n  _VODQUERYMEDIABLOCKSTATUSRESPONSE._serialized_end=25110\n  _VODLISTPROJECTSRESPONSE._serialized_start=25113\n  _VODLISTPROJECTSRESPONSE._serialized_end=25282\n  _VODGETTRADECONFIGURATIONRESPONSE._serialized_start=25285\n  _VODGETTRADECONFIGURATIONRESPONSE._serialized_end=25470\n  _VODSETCLOUDMIGRATEJOBRESPONSE._serialized_start=25473\n  _VODSETCLOUDMIGRATEJOBRESPONSE._serialized_end=25654\n  _VODSUBMITCLOUDMIGRATEJOBRESPONSE._serialized_start=25656\n  _VODSUBMITCLOUDMIGRATEJOBRESPONSE._serialized_end=25763\n  _VODGETCLOUDMIGRATEJOBRESPONSE._serialized_start=25766\n  _VODGETCLOUDMIGRATEJOBRESPONSE._serialized_end=25947\n  _VODREPORTEVENTRESPONSE._serialized_start=25950\n  _VODREPORTEVENTRESPONSE._serialized_end=26117\n  _VODCREATEDRAMARECAPTASKRESPONSE._serialized_start=26120\n  _VODCREATEDRAMARECAPTASKRESPONSE._serialized_end=26305\n  _VODCREATEDRAMASCRIPTTASKRESPONSE._serialized_start=26308\n  _VODCREATEDRAMASCRIPTTASKRESPONSE._serialized_end=26495\n  _VODQUERYDRAMARECAPTASKRESPONSE._serialized_start=26498\n  _VODQUERYDRAMARECAPTASKRESPONSE._serialized_end=26681\n  _VODQUERYDRAMASCRIPTTASKRESPONSE._serialized_start=26684\n  _VODQUERYDRAMASCRIPTTASKRESPONSE._serialized_end=26869\n  _VODGETMEDIAENTITYLISTRESPONSE._serialized_start=26872\n  _VODGETMEDIAENTITYLISTRESPONSE._serialized_end=27053\n  _VODGETMEDIAENTITYRESPONSE._serialized_start=27056\n  _VODGETMEDIAENTITYRESPONSE._serialized_end=27229\n  _VODDELETEMEDIAENTITYRESPONSE._serialized_start=27231\n  _VODDELETEMEDIAENTITYRESPONSE._serialized_end=27334\n  _VODGETMEDIAENTITYCONFIGLISTRESPONSE._serialized_start=27337\n  _VODGETMEDIAENTITYCONFIGLISTRESPONSE._serialized_end=27517\n# @@protoc_insertion_point(module_scope)\n"
  }
]