tccli 3.0.1135.1__py2.py3-none-any.whl → 3.0.1136.1__py2.py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. tccli/__init__.py +1 -1
  2. tccli/services/__init__.py +3 -0
  3. tccli/services/asr/asr_client.py +53 -0
  4. tccli/services/asr/v20190614/api.json +193 -1
  5. tccli/services/asr/v20190614/examples.json +8 -0
  6. tccli/services/batch/v20170312/api.json +8 -5
  7. tccli/services/batch/v20170312/examples.json +1 -1
  8. tccli/services/ckafka/v20190819/api.json +1 -1
  9. tccli/services/dlc/dlc_client.py +53 -0
  10. tccli/services/dlc/v20210125/api.json +134 -0
  11. tccli/services/dlc/v20210125/examples.json +8 -0
  12. tccli/services/dsgc/v20190723/api.json +35 -35
  13. tccli/services/eiam/v20210420/api.json +4 -4
  14. tccli/services/eiam/v20210420/examples.json +4 -4
  15. tccli/services/ess/v20201111/api.json +1 -1
  16. tccli/services/essbasic/v20210526/api.json +2 -2
  17. tccli/services/iotexplorer/iotexplorer_client.py +53 -0
  18. tccli/services/iotexplorer/v20190423/api.json +133 -0
  19. tccli/services/iotexplorer/v20190423/examples.json +8 -0
  20. tccli/services/lighthouse/v20200324/api.json +14 -14
  21. tccli/services/lighthouse/v20200324/examples.json +7 -7
  22. tccli/services/lke/lke_client.py +175 -16
  23. tccli/services/lke/v20231130/api.json +429 -4
  24. tccli/services/lke/v20231130/examples.json +24 -0
  25. tccli/services/ocr/v20181119/api.json +1 -1
  26. tccli/services/tdmq/tdmq_client.py +53 -0
  27. tccli/services/tdmq/v20200217/api.json +301 -0
  28. tccli/services/tdmq/v20200217/examples.json +8 -0
  29. tccli/services/tem/v20210701/api.json +8 -5
  30. tccli/services/tem/v20210701/examples.json +2 -2
  31. tccli/services/trocket/trocket_client.py +65 -12
  32. tccli/services/trocket/v20230308/api.json +196 -0
  33. tccli/services/trocket/v20230308/examples.json +8 -0
  34. tccli/services/trtc/v20190722/api.json +45 -63
  35. tccli/services/tsi/__init__.py +4 -0
  36. tccli/services/tsi/tsi_client.py +301 -0
  37. tccli/services/tsi/v20210325/api.json +373 -0
  38. tccli/services/tsi/v20210325/examples.json +29 -0
  39. tccli/services/vpc/v20170312/api.json +36 -16
  40. tccli/services/vpc/v20170312/examples.json +9 -3
  41. tccli/services/waf/v20180125/api.json +70 -0
  42. tccli/services/waf/v20180125/examples.json +8 -0
  43. tccli/services/waf/waf_client.py +53 -0
  44. {tccli-3.0.1135.1.dist-info → tccli-3.0.1136.1.dist-info}/METADATA +2 -2
  45. {tccli-3.0.1135.1.dist-info → tccli-3.0.1136.1.dist-info}/RECORD +48 -44
  46. {tccli-3.0.1135.1.dist-info → tccli-3.0.1136.1.dist-info}/WHEEL +0 -0
  47. {tccli-3.0.1135.1.dist-info → tccli-3.0.1136.1.dist-info}/entry_points.txt +0 -0
  48. {tccli-3.0.1135.1.dist-info → tccli-3.0.1136.1.dist-info}/license_files/LICENSE +0 -0
@@ -3475,6 +3475,15 @@
3475
3475
  "name": "BackgroundCustomRender",
3476
3476
  "required": false,
3477
3477
  "type": "object"
3478
+ },
3479
+ {
3480
+ "disabled": false,
3481
+ "document": "子背景色生效模式,默认值为0表示均不生效。\nbit0:占位图缩放是否生效。\nbit1:上行流缩放是否生效。\n您可以将相应bit位置1启动生效,例如:\n0(00)表示子背景色不生效。\n1(01)表示子背景色只在占位图缩放时生效。\n2(10)表示子背景色只在上行流缩放时生效。\n3(11)表示子背景色在占位图缩放和上行流缩放时均生效。\n",
3482
+ "example": "BackGroundColorMode",
3483
+ "member": "uint64",
3484
+ "name": "BackGroundColorMode",
3485
+ "required": false,
3486
+ "type": "int"
3478
3487
  }
3479
3488
  ],
3480
3489
  "usage": "in"
@@ -3978,8 +3987,7 @@
3978
3987
  "member": "uint64",
3979
3988
  "name": "Top",
3980
3989
  "required": true,
3981
- "type": "int",
3982
- "value_allowed_null": false
3990
+ "type": "int"
3983
3991
  },
3984
3992
  {
3985
3993
  "disabled": false,
@@ -3988,8 +3996,7 @@
3988
3996
  "member": "uint64",
3989
3997
  "name": "Left",
3990
3998
  "required": true,
3991
- "type": "int",
3992
- "value_allowed_null": false
3999
+ "type": "int"
3993
4000
  },
3994
4001
  {
3995
4002
  "disabled": false,
@@ -3998,8 +4005,7 @@
3998
4005
  "member": "uint64",
3999
4006
  "name": "Width",
4000
4007
  "required": true,
4001
- "type": "int",
4002
- "value_allowed_null": false
4008
+ "type": "int"
4003
4009
  },
4004
4010
  {
4005
4011
  "disabled": false,
@@ -4008,8 +4014,7 @@
4008
4014
  "member": "uint64",
4009
4015
  "name": "Height",
4010
4016
  "required": true,
4011
- "type": "int",
4012
- "value_allowed_null": false
4017
+ "type": "int"
4013
4018
  },
4014
4019
  {
4015
4020
  "disabled": false,
@@ -4018,8 +4023,7 @@
4018
4023
  "member": "string",
4019
4024
  "name": "UserId",
4020
4025
  "required": false,
4021
- "type": "string",
4022
- "value_allowed_null": false
4026
+ "type": "string"
4023
4027
  },
4024
4028
  {
4025
4029
  "disabled": false,
@@ -4028,8 +4032,7 @@
4028
4032
  "member": "uint64",
4029
4033
  "name": "Alpha",
4030
4034
  "required": false,
4031
- "type": "int",
4032
- "value_allowed_null": false
4035
+ "type": "int"
4033
4036
  },
4034
4037
  {
4035
4038
  "disabled": false,
@@ -4038,8 +4041,7 @@
4038
4041
  "member": "uint64",
4039
4042
  "name": "RenderMode",
4040
4043
  "required": false,
4041
- "type": "int",
4042
- "value_allowed_null": false
4044
+ "type": "int"
4043
4045
  },
4044
4046
  {
4045
4047
  "disabled": false,
@@ -4048,8 +4050,7 @@
4048
4050
  "member": "uint64",
4049
4051
  "name": "MediaId",
4050
4052
  "required": false,
4051
- "type": "int",
4052
- "value_allowed_null": false
4053
+ "type": "int"
4053
4054
  },
4054
4055
  {
4055
4056
  "disabled": false,
@@ -4058,18 +4059,16 @@
4058
4059
  "member": "uint64",
4059
4060
  "name": "ImageLayer",
4060
4061
  "required": false,
4061
- "type": "int",
4062
- "value_allowed_null": false
4062
+ "type": "int"
4063
4063
  },
4064
4064
  {
4065
4065
  "disabled": false,
4066
- "document": "图片的url地址, 只支持jpg png,大小限制不超过5M,宽高比不一致的处理方案同 RenderMode。",
4067
- "example": "https://xxxx",
4066
+ "document": "图片的url地址, 只支持jpg, png, jpeg,大小限制不超过5M。注意,url必须携带格式后缀,url内只支持特定的字符串, 范围是a-z A-Z 0-9 '-', '.', '_', '~', ':', '/', '?', '#', '[', ']' '@', '!', '&', '(', ')', '*', '+', ',', '%', '='",
4067
+ "example": "https://xxxx/image.jpg, https://xxxx/image.jpg?token=xxx",
4068
4068
  "member": "string",
4069
4069
  "name": "SubBackgroundImage",
4070
4070
  "required": false,
4071
- "type": "string",
4072
- "value_allowed_null": false
4071
+ "type": "string"
4073
4072
  }
4074
4073
  ],
4075
4074
  "usage": "in"
@@ -4079,13 +4078,12 @@
4079
4078
  "members": [
4080
4079
  {
4081
4080
  "disabled": false,
4082
- "document": "布局模式:\n1:悬浮布局;\n2:屏幕分享布局;\n3:九宫格布局(默认);\n4:自定义布局;\n\n悬浮布局:默认第一个进入房间的主播(也可以指定一个主播)的视频画面会铺满整个屏幕。其他主播的视频画面从左下角开始依次按照进房顺序水平排列,显示为小画面,小画面悬浮于大画面之上。当画面数量小于等于17个时,每行4个(4 x 4排列)。当画面数量大于17个时,重新布局小画面为每行5个(5 x 5)排列。最多支持25个画面,如果用户只发送音频,仍然会占用画面位置。\n\n屏幕分享布局:指定一个主播在屏幕左侧的大画面位置(如果不指定,那么大画面位置为背景色),其他主播自上而下依次垂直排列于右侧。当画面数量少于17个的时候,右侧每列最多8人,最多占据两列。当画面数量多于17个的时候,超过17个画面的主播从左下角开始依次水平排列。最多支持25个画面,如果主播只发送音频,仍然会占用画面位置。\n\n九宫格布局:根据主播的数量自动调整每个画面的大小,每个主播的画面大小一致,最多支持25个画面。\n\n自定义布局:根据需要在MixLayoutList内定制每个主播画面的布局。",
4081
+ "document": "布局模式:\n1:悬浮布局;\n2:屏幕分享布局;\n3:九宫格布局;\n4:自定义布局;\n\n悬浮布局:默认第一个进入房间的主播(也可以指定一个主播)的视频画面会铺满整个屏幕。其他主播的视频画面从左下角开始依次按照进房顺序水平排列,显示为小画面,小画面悬浮于大画面之上。当画面数量小于等于17个时,每行4个(4 x 4排列)。当画面数量大于17个时,重新布局小画面为每行5个(5 x 5)排列。最多支持25个画面,如果用户只发送音频,仍然会占用画面位置。\n\n屏幕分享布局:指定一个主播在屏幕左侧的大画面位置(如果不指定,那么大画面位置为背景色),其他主播自上而下依次垂直排列于右侧。当画面数量少于17个的时候,右侧每列最多8人,最多占据两列。当画面数量多于17个的时候,超过17个画面的主播从左下角开始依次水平排列。最多支持25个画面,如果主播只发送音频,仍然会占用画面位置。\n\n九宫格布局:根据主播的数量自动调整每个画面的大小,每个主播的画面大小一致,最多支持25个画面。\n\n自定义布局:根据需要在MixLayoutList内定制每个主播画面的布局。",
4083
4082
  "example": "3",
4084
4083
  "member": "uint64",
4085
4084
  "name": "MixLayoutMode",
4086
4085
  "required": true,
4087
- "type": "int",
4088
- "value_allowed_null": false
4086
+ "type": "int"
4089
4087
  },
4090
4088
  {
4091
4089
  "disabled": false,
@@ -4094,8 +4092,7 @@
4094
4092
  "member": "MixLayout",
4095
4093
  "name": "MixLayoutList",
4096
4094
  "required": false,
4097
- "type": "list",
4098
- "value_allowed_null": false
4095
+ "type": "list"
4099
4096
  },
4100
4097
  {
4101
4098
  "disabled": false,
@@ -4104,8 +4101,7 @@
4104
4101
  "member": "string",
4105
4102
  "name": "BackGroundColor",
4106
4103
  "required": false,
4107
- "type": "string",
4108
- "value_allowed_null": false
4104
+ "type": "string"
4109
4105
  },
4110
4106
  {
4111
4107
  "disabled": false,
@@ -4114,8 +4110,7 @@
4114
4110
  "member": "string",
4115
4111
  "name": "MaxResolutionUserId",
4116
4112
  "required": false,
4117
- "type": "string",
4118
- "value_allowed_null": false
4113
+ "type": "string"
4119
4114
  },
4120
4115
  {
4121
4116
  "disabled": false,
@@ -4124,18 +4119,16 @@
4124
4119
  "member": "uint64",
4125
4120
  "name": "MediaId",
4126
4121
  "required": false,
4127
- "type": "int",
4128
- "value_allowed_null": false
4122
+ "type": "int"
4129
4123
  },
4130
4124
  {
4131
4125
  "disabled": false,
4132
- "document": "图片的url地址, 只支持jpg png,大小限制不超过5Murl不可包含中文。",
4133
- "example": "https://xxxx",
4126
+ "document": "图片的url地址,只支持jpg, png, jpeg,大小限制不超过5M。注意,url必须携带格式后缀,url内只支持特定的字符串, 范围是a-z A-Z 0-9 '-', '.', '_', '~', ':', '/', '?', '#', '[', ']' '@', '!', '&', '(', ')', '*', '+', ',', '%', '='",
4127
+ "example": "https://xxxx/image.jpg, https://xxxx/image.jpg?token=xxx",
4134
4128
  "member": "string",
4135
4129
  "name": "BackgroundImageUrl",
4136
4130
  "required": false,
4137
- "type": "string",
4138
- "value_allowed_null": false
4131
+ "type": "string"
4139
4132
  },
4140
4133
  {
4141
4134
  "disabled": false,
@@ -4144,8 +4137,7 @@
4144
4137
  "member": "uint64",
4145
4138
  "name": "PlaceHolderMode",
4146
4139
  "required": false,
4147
- "type": "int",
4148
- "value_allowed_null": false
4140
+ "type": "int"
4149
4141
  },
4150
4142
  {
4151
4143
  "disabled": false,
@@ -4154,18 +4146,16 @@
4154
4146
  "member": "uint64",
4155
4147
  "name": "BackgroundImageRenderMode",
4156
4148
  "required": false,
4157
- "type": "int",
4158
- "value_allowed_null": false
4149
+ "type": "int"
4159
4150
  },
4160
4151
  {
4161
4152
  "disabled": false,
4162
- "document": "子画面占位图url地址, 只支持jpg png,大小限制不超过5M,宽高比不一致的处理方案同 RenderMode。",
4163
- "example": "https://xxxx",
4153
+ "document": "子画面占位图url地址,只支持jpg, png, jpeg,大小限制不超过5M。注意,url必须携带格式后缀,url内只支持特定的字符串, 范围是a-z A-Z 0-9 '-', '.', '_', '~', ':', '/', '?', '#', '[', ']' '@', '!', '&', '(', ')', '*', '+', ',', '%', '='",
4154
+ "example": "https://xxxx/image.jpg, https://xxxx/image.jpg?token=xxx",
4164
4155
  "member": "string",
4165
4156
  "name": "DefaultSubBackgroundImage",
4166
4157
  "required": false,
4167
- "type": "string",
4168
- "value_allowed_null": false
4158
+ "type": "string"
4169
4159
  },
4170
4160
  {
4171
4161
  "disabled": false,
@@ -4174,8 +4164,7 @@
4174
4164
  "member": "WaterMark",
4175
4165
  "name": "WaterMarkList",
4176
4166
  "required": false,
4177
- "type": "list",
4178
- "value_allowed_null": false
4167
+ "type": "list"
4179
4168
  },
4180
4169
  {
4181
4170
  "disabled": false,
@@ -4184,8 +4173,7 @@
4184
4173
  "member": "uint64",
4185
4174
  "name": "RenderMode",
4186
4175
  "required": false,
4187
- "type": "int",
4188
- "value_allowed_null": false
4176
+ "type": "int"
4189
4177
  },
4190
4178
  {
4191
4179
  "disabled": false,
@@ -4194,8 +4182,7 @@
4194
4182
  "member": "uint64",
4195
4183
  "name": "MaxResolutionUserAlign",
4196
4184
  "required": false,
4197
- "type": "int",
4198
- "value_allowed_null": false
4185
+ "type": "int"
4199
4186
  }
4200
4187
  ],
4201
4188
  "usage": "in"
@@ -7060,13 +7047,12 @@
7060
7047
  "members": [
7061
7048
  {
7062
7049
  "disabled": false,
7063
- "document": "下载的url地址, 只支持jpg png,大小限制不超过5M",
7064
- "example": "https://xxxx",
7050
+ "document": "下载的url地址, 只支持jpg, png, jpeg,大小限制不超过5M。注意,url必须携带格式后缀,url内只支持特定的字符串, 范围是a-z A-Z 0-9 '-', '.', '_', '~', ':', '/', '?', '#', '[', ']' '@', '!', '&', '(', ')', '*', '+', ',', '%', '='",
7051
+ "example": "https://xxxx/image.jpg, https://xxxx/image.jpg?token=xxx",
7065
7052
  "member": "string",
7066
7053
  "name": "WaterMarkUrl",
7067
7054
  "required": true,
7068
- "type": "string",
7069
- "value_allowed_null": false
7055
+ "type": "string"
7070
7056
  },
7071
7057
  {
7072
7058
  "disabled": false,
@@ -7075,8 +7061,7 @@
7075
7061
  "member": "uint64",
7076
7062
  "name": "Top",
7077
7063
  "required": true,
7078
- "type": "int",
7079
- "value_allowed_null": false
7064
+ "type": "int"
7080
7065
  },
7081
7066
  {
7082
7067
  "disabled": false,
@@ -7085,8 +7070,7 @@
7085
7070
  "member": "uint64",
7086
7071
  "name": "Left",
7087
7072
  "required": true,
7088
- "type": "int",
7089
- "value_allowed_null": false
7073
+ "type": "int"
7090
7074
  },
7091
7075
  {
7092
7076
  "disabled": false,
@@ -7095,8 +7079,7 @@
7095
7079
  "member": "uint64",
7096
7080
  "name": "Width",
7097
7081
  "required": true,
7098
- "type": "int",
7099
- "value_allowed_null": false
7082
+ "type": "int"
7100
7083
  },
7101
7084
  {
7102
7085
  "disabled": false,
@@ -7105,8 +7088,7 @@
7105
7088
  "member": "uint64",
7106
7089
  "name": "Height",
7107
7090
  "required": true,
7108
- "type": "int",
7109
- "value_allowed_null": false
7091
+ "type": "int"
7110
7092
  }
7111
7093
  ],
7112
7094
  "usage": "in"
@@ -0,0 +1,4 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from tccli.services.tsi.tsi_client import action_caller
4
+
@@ -0,0 +1,301 @@
1
+ # -*- coding: utf-8 -*-
2
+ import os
3
+ import sys
4
+ import six
5
+ import json
6
+ import tccli.options_define as OptionsDefine
7
+ import tccli.format_output as FormatOutput
8
+ from tccli import __version__
9
+ from tccli.utils import Utils
10
+ from tccli.exceptions import ConfigurationError, ClientError, ParamError
11
+ from tencentcloud.common import credential
12
+ from tencentcloud.common.profile.http_profile import HttpProfile
13
+ from tencentcloud.common.profile.client_profile import ClientProfile
14
+ from tencentcloud.tsi.v20210325 import tsi_client as tsi_client_v20210325
15
+ from tencentcloud.tsi.v20210325 import models as models_v20210325
16
+
17
+ from jmespath import search
18
+ import time
19
+
20
+ def doTongChuanRecognize(args, parsed_globals):
21
+ g_param = parse_global_arg(parsed_globals)
22
+
23
+ if g_param[OptionsDefine.UseCVMRole.replace('-', '_')]:
24
+ cred = credential.CVMRoleCredential()
25
+ elif g_param[OptionsDefine.RoleArn.replace('-', '_')] and g_param[OptionsDefine.RoleSessionName.replace('-', '_')]:
26
+ cred = credential.STSAssumeRoleCredential(
27
+ g_param[OptionsDefine.SecretId], g_param[OptionsDefine.SecretKey], g_param[OptionsDefine.RoleArn.replace('-', '_')],
28
+ g_param[OptionsDefine.RoleSessionName.replace('-', '_')], endpoint=g_param["sts_cred_endpoint"]
29
+ )
30
+ elif os.getenv(OptionsDefine.ENV_TKE_REGION) and os.getenv(OptionsDefine.ENV_TKE_PROVIDER_ID) and os.getenv(OptionsDefine.ENV_TKE_WEB_IDENTITY_TOKEN_FILE) and os.getenv(OptionsDefine.ENV_TKE_ROLE_ARN):
31
+ cred = credential.DefaultTkeOIDCRoleArnProvider().get_credentials()
32
+ else:
33
+ cred = credential.Credential(
34
+ g_param[OptionsDefine.SecretId], g_param[OptionsDefine.SecretKey], g_param[OptionsDefine.Token]
35
+ )
36
+ http_profile = HttpProfile(
37
+ reqTimeout=60 if g_param[OptionsDefine.Timeout] is None else int(g_param[OptionsDefine.Timeout]),
38
+ reqMethod="POST",
39
+ endpoint=g_param[OptionsDefine.Endpoint],
40
+ proxy=g_param[OptionsDefine.HttpsProxy.replace('-', '_')]
41
+ )
42
+ profile = ClientProfile(httpProfile=http_profile, signMethod="HmacSHA256")
43
+ if g_param[OptionsDefine.Language]:
44
+ profile.language = g_param[OptionsDefine.Language]
45
+ mod = CLIENT_MAP[g_param[OptionsDefine.Version]]
46
+ client = mod.TsiClient(cred, g_param[OptionsDefine.Region], profile)
47
+ client._sdkVersion += ("_CLI_" + __version__)
48
+ models = MODELS_MAP[g_param[OptionsDefine.Version]]
49
+ model = models.TongChuanRecognizeRequest()
50
+ model.from_json_string(json.dumps(args))
51
+ start_time = time.time()
52
+ while True:
53
+ rsp = client.TongChuanRecognize(model)
54
+ result = rsp.to_json_string()
55
+ try:
56
+ json_obj = json.loads(result)
57
+ except TypeError as e:
58
+ json_obj = json.loads(result.decode('utf-8')) # python3.3
59
+ if not g_param[OptionsDefine.Waiter] or search(g_param['OptionsDefine.WaiterInfo']['expr'], json_obj) == g_param['OptionsDefine.WaiterInfo']['to']:
60
+ break
61
+ cur_time = time.time()
62
+ if cur_time - start_time >= g_param['OptionsDefine.WaiterInfo']['timeout']:
63
+ raise ClientError('Request timeout, wait `%s` to `%s` timeout, last request is %s' %
64
+ (g_param['OptionsDefine.WaiterInfo']['expr'], g_param['OptionsDefine.WaiterInfo']['to'],
65
+ search(g_param['OptionsDefine.WaiterInfo']['expr'], json_obj)))
66
+ else:
67
+ print('Inquiry result is %s.' % search(g_param['OptionsDefine.WaiterInfo']['expr'], json_obj))
68
+ time.sleep(g_param['OptionsDefine.WaiterInfo']['interval'])
69
+ FormatOutput.output("action", json_obj, g_param[OptionsDefine.Output], g_param[OptionsDefine.Filter])
70
+
71
+
72
+ def doTongChuanDisplay(args, parsed_globals):
73
+ g_param = parse_global_arg(parsed_globals)
74
+
75
+ if g_param[OptionsDefine.UseCVMRole.replace('-', '_')]:
76
+ cred = credential.CVMRoleCredential()
77
+ elif g_param[OptionsDefine.RoleArn.replace('-', '_')] and g_param[OptionsDefine.RoleSessionName.replace('-', '_')]:
78
+ cred = credential.STSAssumeRoleCredential(
79
+ g_param[OptionsDefine.SecretId], g_param[OptionsDefine.SecretKey], g_param[OptionsDefine.RoleArn.replace('-', '_')],
80
+ g_param[OptionsDefine.RoleSessionName.replace('-', '_')], endpoint=g_param["sts_cred_endpoint"]
81
+ )
82
+ elif os.getenv(OptionsDefine.ENV_TKE_REGION) and os.getenv(OptionsDefine.ENV_TKE_PROVIDER_ID) and os.getenv(OptionsDefine.ENV_TKE_WEB_IDENTITY_TOKEN_FILE) and os.getenv(OptionsDefine.ENV_TKE_ROLE_ARN):
83
+ cred = credential.DefaultTkeOIDCRoleArnProvider().get_credentials()
84
+ else:
85
+ cred = credential.Credential(
86
+ g_param[OptionsDefine.SecretId], g_param[OptionsDefine.SecretKey], g_param[OptionsDefine.Token]
87
+ )
88
+ http_profile = HttpProfile(
89
+ reqTimeout=60 if g_param[OptionsDefine.Timeout] is None else int(g_param[OptionsDefine.Timeout]),
90
+ reqMethod="POST",
91
+ endpoint=g_param[OptionsDefine.Endpoint],
92
+ proxy=g_param[OptionsDefine.HttpsProxy.replace('-', '_')]
93
+ )
94
+ profile = ClientProfile(httpProfile=http_profile, signMethod="HmacSHA256")
95
+ if g_param[OptionsDefine.Language]:
96
+ profile.language = g_param[OptionsDefine.Language]
97
+ mod = CLIENT_MAP[g_param[OptionsDefine.Version]]
98
+ client = mod.TsiClient(cred, g_param[OptionsDefine.Region], profile)
99
+ client._sdkVersion += ("_CLI_" + __version__)
100
+ models = MODELS_MAP[g_param[OptionsDefine.Version]]
101
+ model = models.TongChuanDisplayRequest()
102
+ model.from_json_string(json.dumps(args))
103
+ start_time = time.time()
104
+ while True:
105
+ rsp = client.TongChuanDisplay(model)
106
+ result = rsp.to_json_string()
107
+ try:
108
+ json_obj = json.loads(result)
109
+ except TypeError as e:
110
+ json_obj = json.loads(result.decode('utf-8')) # python3.3
111
+ if not g_param[OptionsDefine.Waiter] or search(g_param['OptionsDefine.WaiterInfo']['expr'], json_obj) == g_param['OptionsDefine.WaiterInfo']['to']:
112
+ break
113
+ cur_time = time.time()
114
+ if cur_time - start_time >= g_param['OptionsDefine.WaiterInfo']['timeout']:
115
+ raise ClientError('Request timeout, wait `%s` to `%s` timeout, last request is %s' %
116
+ (g_param['OptionsDefine.WaiterInfo']['expr'], g_param['OptionsDefine.WaiterInfo']['to'],
117
+ search(g_param['OptionsDefine.WaiterInfo']['expr'], json_obj)))
118
+ else:
119
+ print('Inquiry result is %s.' % search(g_param['OptionsDefine.WaiterInfo']['expr'], json_obj))
120
+ time.sleep(g_param['OptionsDefine.WaiterInfo']['interval'])
121
+ FormatOutput.output("action", json_obj, g_param[OptionsDefine.Output], g_param[OptionsDefine.Filter])
122
+
123
+
124
+ def doTongChuanSync(args, parsed_globals):
125
+ g_param = parse_global_arg(parsed_globals)
126
+
127
+ if g_param[OptionsDefine.UseCVMRole.replace('-', '_')]:
128
+ cred = credential.CVMRoleCredential()
129
+ elif g_param[OptionsDefine.RoleArn.replace('-', '_')] and g_param[OptionsDefine.RoleSessionName.replace('-', '_')]:
130
+ cred = credential.STSAssumeRoleCredential(
131
+ g_param[OptionsDefine.SecretId], g_param[OptionsDefine.SecretKey], g_param[OptionsDefine.RoleArn.replace('-', '_')],
132
+ g_param[OptionsDefine.RoleSessionName.replace('-', '_')], endpoint=g_param["sts_cred_endpoint"]
133
+ )
134
+ elif os.getenv(OptionsDefine.ENV_TKE_REGION) and os.getenv(OptionsDefine.ENV_TKE_PROVIDER_ID) and os.getenv(OptionsDefine.ENV_TKE_WEB_IDENTITY_TOKEN_FILE) and os.getenv(OptionsDefine.ENV_TKE_ROLE_ARN):
135
+ cred = credential.DefaultTkeOIDCRoleArnProvider().get_credentials()
136
+ else:
137
+ cred = credential.Credential(
138
+ g_param[OptionsDefine.SecretId], g_param[OptionsDefine.SecretKey], g_param[OptionsDefine.Token]
139
+ )
140
+ http_profile = HttpProfile(
141
+ reqTimeout=60 if g_param[OptionsDefine.Timeout] is None else int(g_param[OptionsDefine.Timeout]),
142
+ reqMethod="POST",
143
+ endpoint=g_param[OptionsDefine.Endpoint],
144
+ proxy=g_param[OptionsDefine.HttpsProxy.replace('-', '_')]
145
+ )
146
+ profile = ClientProfile(httpProfile=http_profile, signMethod="HmacSHA256")
147
+ if g_param[OptionsDefine.Language]:
148
+ profile.language = g_param[OptionsDefine.Language]
149
+ mod = CLIENT_MAP[g_param[OptionsDefine.Version]]
150
+ client = mod.TsiClient(cred, g_param[OptionsDefine.Region], profile)
151
+ client._sdkVersion += ("_CLI_" + __version__)
152
+ models = MODELS_MAP[g_param[OptionsDefine.Version]]
153
+ model = models.TongChuanSyncRequest()
154
+ model.from_json_string(json.dumps(args))
155
+ start_time = time.time()
156
+ while True:
157
+ rsp = client.TongChuanSync(model)
158
+ result = rsp.to_json_string()
159
+ try:
160
+ json_obj = json.loads(result)
161
+ except TypeError as e:
162
+ json_obj = json.loads(result.decode('utf-8')) # python3.3
163
+ if not g_param[OptionsDefine.Waiter] or search(g_param['OptionsDefine.WaiterInfo']['expr'], json_obj) == g_param['OptionsDefine.WaiterInfo']['to']:
164
+ break
165
+ cur_time = time.time()
166
+ if cur_time - start_time >= g_param['OptionsDefine.WaiterInfo']['timeout']:
167
+ raise ClientError('Request timeout, wait `%s` to `%s` timeout, last request is %s' %
168
+ (g_param['OptionsDefine.WaiterInfo']['expr'], g_param['OptionsDefine.WaiterInfo']['to'],
169
+ search(g_param['OptionsDefine.WaiterInfo']['expr'], json_obj)))
170
+ else:
171
+ print('Inquiry result is %s.' % search(g_param['OptionsDefine.WaiterInfo']['expr'], json_obj))
172
+ time.sleep(g_param['OptionsDefine.WaiterInfo']['interval'])
173
+ FormatOutput.output("action", json_obj, g_param[OptionsDefine.Output], g_param[OptionsDefine.Filter])
174
+
175
+
176
+ CLIENT_MAP = {
177
+ "v20210325": tsi_client_v20210325,
178
+
179
+ }
180
+
181
+ MODELS_MAP = {
182
+ "v20210325": models_v20210325,
183
+
184
+ }
185
+
186
+ ACTION_MAP = {
187
+ "TongChuanRecognize": doTongChuanRecognize,
188
+ "TongChuanDisplay": doTongChuanDisplay,
189
+ "TongChuanSync": doTongChuanSync,
190
+
191
+ }
192
+
193
+ AVAILABLE_VERSION_LIST = [
194
+ "v20210325",
195
+
196
+ ]
197
+
198
+
199
+ def action_caller():
200
+ return ACTION_MAP
201
+
202
+
203
+ def parse_global_arg(parsed_globals):
204
+ g_param = parsed_globals
205
+
206
+ is_exist_profile = True
207
+ if not parsed_globals["profile"]:
208
+ is_exist_profile = False
209
+ g_param["profile"] = os.environ.get("TCCLI_PROFILE", "default")
210
+
211
+ configure_path = os.path.join(os.path.expanduser("~"), ".tccli")
212
+ is_conf_exist, conf_path = Utils.file_existed(configure_path, g_param["profile"] + ".configure")
213
+ is_cred_exist, cred_path = Utils.file_existed(configure_path, g_param["profile"] + ".credential")
214
+
215
+ conf = {}
216
+ cred = {}
217
+
218
+ if is_conf_exist:
219
+ conf = Utils.load_json_msg(conf_path)
220
+ if is_cred_exist:
221
+ cred = Utils.load_json_msg(cred_path)
222
+
223
+ if not (isinstance(conf, dict) and isinstance(cred, dict)):
224
+ raise ConfigurationError(
225
+ "file: %s or %s is not json format"
226
+ % (g_param["profile"] + ".configure", g_param["profile"] + ".credential"))
227
+
228
+ if OptionsDefine.Token not in cred:
229
+ cred[OptionsDefine.Token] = None
230
+
231
+ if not is_exist_profile:
232
+ if os.environ.get(OptionsDefine.ENV_SECRET_ID) and os.environ.get(OptionsDefine.ENV_SECRET_KEY):
233
+ cred[OptionsDefine.SecretId] = os.environ.get(OptionsDefine.ENV_SECRET_ID)
234
+ cred[OptionsDefine.SecretKey] = os.environ.get(OptionsDefine.ENV_SECRET_KEY)
235
+ cred[OptionsDefine.Token] = os.environ.get(OptionsDefine.ENV_TOKEN)
236
+
237
+ if os.environ.get(OptionsDefine.ENV_REGION):
238
+ conf[OptionsDefine.SysParam][OptionsDefine.Region] = os.environ.get(OptionsDefine.ENV_REGION)
239
+
240
+ if os.environ.get(OptionsDefine.ENV_ROLE_ARN) and os.environ.get(OptionsDefine.ENV_ROLE_SESSION_NAME):
241
+ cred[OptionsDefine.RoleArn] = os.environ.get(OptionsDefine.ENV_ROLE_ARN)
242
+ cred[OptionsDefine.RoleSessionName] = os.environ.get(OptionsDefine.ENV_ROLE_SESSION_NAME)
243
+
244
+ for param in g_param.keys():
245
+ if g_param[param] is None:
246
+ if param in [OptionsDefine.SecretKey, OptionsDefine.SecretId, OptionsDefine.Token]:
247
+ if param in cred:
248
+ g_param[param] = cred[param]
249
+ elif not (g_param[OptionsDefine.UseCVMRole.replace('-', '_')]
250
+ or os.getenv(OptionsDefine.ENV_TKE_ROLE_ARN)):
251
+ raise ConfigurationError("%s is invalid" % param)
252
+ elif param in [OptionsDefine.Region, OptionsDefine.Output, OptionsDefine.Language]:
253
+ if param in conf[OptionsDefine.SysParam]:
254
+ g_param[param] = conf[OptionsDefine.SysParam][param]
255
+ elif param != OptionsDefine.Language:
256
+ raise ConfigurationError("%s is invalid" % param)
257
+ elif param.replace('_', '-') in [OptionsDefine.RoleArn, OptionsDefine.RoleSessionName]:
258
+ if param.replace('_', '-') in cred:
259
+ g_param[param] = cred[param.replace('_', '-')]
260
+
261
+ try:
262
+ if g_param[OptionsDefine.ServiceVersion]:
263
+ g_param[OptionsDefine.Version] = "v" + g_param[OptionsDefine.ServiceVersion].replace('-', '')
264
+ else:
265
+ version = conf["tsi"][OptionsDefine.Version]
266
+ g_param[OptionsDefine.Version] = "v" + version.replace('-', '')
267
+
268
+ if g_param[OptionsDefine.Endpoint] is None:
269
+ g_param[OptionsDefine.Endpoint] = conf["tsi"][OptionsDefine.Endpoint]
270
+ g_param["sts_cred_endpoint"] = conf.get("sts", {}).get("endpoint")
271
+ except Exception as err:
272
+ raise ConfigurationError("config file:%s error, %s" % (conf_path, str(err)))
273
+
274
+ if g_param[OptionsDefine.Version] not in AVAILABLE_VERSION_LIST:
275
+ raise Exception("available versions: %s" % " ".join(AVAILABLE_VERSION_LIST))
276
+
277
+ if g_param[OptionsDefine.Waiter]:
278
+ param = eval(g_param[OptionsDefine.Waiter])
279
+ if 'expr' not in param:
280
+ raise Exception('`expr` in `--waiter` must be defined')
281
+ if 'to' not in param:
282
+ raise Exception('`to` in `--waiter` must be defined')
283
+ if 'timeout' not in param:
284
+ if 'waiter' in conf and 'timeout' in conf['waiter']:
285
+ param['timeout'] = conf['waiter']['timeout']
286
+ else:
287
+ param['timeout'] = 180
288
+ if 'interval' not in param:
289
+ if 'waiter' in conf and 'interval' in conf['waiter']:
290
+ param['interval'] = conf['waiter']['interval']
291
+ else:
292
+ param['interval'] = 5
293
+ param['interval'] = min(param['interval'], param['timeout'])
294
+ g_param['OptionsDefine.WaiterInfo'] = param
295
+
296
+ if six.PY2:
297
+ for key, value in g_param.items():
298
+ if isinstance(value, six.text_type):
299
+ g_param[key] = value.encode('utf-8')
300
+ return g_param
301
+