tccli 3.0.1341.1__py2.py3-none-any.whl → 3.0.1343.1__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. tccli/__init__.py +1 -1
  2. tccli/plugins/sso/__init__.py +14 -0
  3. tccli/plugins/sso/login.py +23 -6
  4. tccli/plugins/sso/texts.py +4 -0
  5. tccli/services/__init__.py +3 -0
  6. tccli/services/ams/v20201229/api.json +195 -185
  7. tccli/services/apm/apm_client.py +53 -0
  8. tccli/services/apm/v20210622/api.json +117 -0
  9. tccli/services/apm/v20210622/examples.json +8 -0
  10. tccli/services/cdb/v20170320/api.json +17 -17
  11. tccli/services/cdb/v20170320/examples.json +2 -2
  12. tccli/services/ctem/__init__.py +4 -0
  13. tccli/services/ctem/ctem_client.py +1479 -0
  14. tccli/services/ctem/v20231128/api.json +6138 -0
  15. tccli/services/ctem/v20231128/examples.json +205 -0
  16. tccli/services/dlc/v20210125/api.json +19 -7
  17. tccli/services/ecm/v20190719/api.json +14 -14
  18. tccli/services/ess/v20201111/api.json +1 -1
  19. tccli/services/essbasic/v20210526/api.json +1 -1
  20. tccli/services/hunyuan/v20230901/api.json +10 -1
  21. tccli/services/ims/v20201229/api.json +30 -30
  22. tccli/services/iotexplorer/v20190423/api.json +2 -2
  23. tccli/services/iotexplorer/v20190423/examples.json +1 -1
  24. tccli/services/iotvideo/v20201215/api.json +2 -2
  25. tccli/services/iotvideo/v20201215/examples.json +1 -1
  26. tccli/services/iotvideo/v20211125/api.json +1 -1
  27. tccli/services/iotvideo/v20211125/examples.json +1 -1
  28. tccli/services/lke/v20231130/api.json +22 -1
  29. tccli/services/mongodb/mongodb_client.py +57 -4
  30. tccli/services/mongodb/v20190725/api.json +199 -0
  31. tccli/services/mongodb/v20190725/examples.json +8 -0
  32. tccli/services/mps/v20190612/api.json +113 -25
  33. tccli/services/mqtt/mqtt_client.py +53 -0
  34. tccli/services/mqtt/v20240516/api.json +150 -0
  35. tccli/services/mqtt/v20240516/examples.json +8 -0
  36. tccli/services/ocr/v20181119/api.json +10 -0
  37. tccli/services/redis/v20180412/api.json +3 -3
  38. tccli/services/redis/v20180412/examples.json +19 -1
  39. tccli/services/teo/teo_client.py +269 -4
  40. tccli/services/teo/v20220901/api.json +469 -0
  41. tccli/services/teo/v20220901/examples.json +76 -0
  42. tccli/services/tke/v20180525/api.json +10 -0
  43. tccli/services/tms/v20201229/api.json +59 -59
  44. tccli/services/trocket/v20230308/api.json +71 -71
  45. tccli/services/trocket/v20230308/examples.json +4 -4
  46. tccli/services/vm/v20210922/api.json +363 -333
  47. tccli/services/wedata/v20210820/api.json +128 -0
  48. tccli/services/wedata/v20210820/examples.json +8 -0
  49. tccli/services/wedata/wedata_client.py +53 -0
  50. {tccli-3.0.1341.1.dist-info → tccli-3.0.1343.1.dist-info}/METADATA +2 -2
  51. {tccli-3.0.1341.1.dist-info → tccli-3.0.1343.1.dist-info}/RECORD +54 -50
  52. {tccli-3.0.1341.1.dist-info → tccli-3.0.1343.1.dist-info}/WHEEL +0 -0
  53. {tccli-3.0.1341.1.dist-info → tccli-3.0.1343.1.dist-info}/entry_points.txt +0 -0
  54. {tccli-3.0.1341.1.dist-info → tccli-3.0.1343.1.dist-info}/license_files/LICENSE +0 -0
@@ -17,6 +17,58 @@ from tencentcloud.apm.v20210622 import models as models_v20210622
17
17
  from jmespath import search
18
18
  import time
19
19
 
20
+ def doCreateProfileTask(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.ApmClient(cred, g_param[OptionsDefine.Region], profile)
47
+ client._sdkVersion += ("_CLI_" + __version__)
48
+ models = MODELS_MAP[g_param[OptionsDefine.Version]]
49
+ model = models.CreateProfileTaskRequest()
50
+ model.from_json_string(json.dumps(args))
51
+ start_time = time.time()
52
+ while True:
53
+ rsp = client.CreateProfileTask(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
+
20
72
  def doDescribeGeneralApmApplicationConfig(args, parsed_globals):
21
73
  g_param = parse_global_arg(parsed_globals)
22
74
 
@@ -704,6 +756,7 @@ MODELS_MAP = {
704
756
  }
705
757
 
706
758
  ACTION_MAP = {
759
+ "CreateProfileTask": doCreateProfileTask,
707
760
  "DescribeGeneralApmApplicationConfig": doDescribeGeneralApmApplicationConfig,
708
761
  "DescribeTagValues": doDescribeTagValues,
709
762
  "DescribeGeneralSpanList": doDescribeGeneralSpanList,
@@ -7,6 +7,13 @@
7
7
  "output": "CreateApmInstanceResponse",
8
8
  "status": "online"
9
9
  },
10
+ "CreateProfileTask": {
11
+ "document": "创建事件任务",
12
+ "input": "CreateProfileTaskRequest",
13
+ "name": "创建性能剖析事件任务",
14
+ "output": "CreateProfileTaskResponse",
15
+ "status": "online"
16
+ },
10
17
  "DescribeApmAgent": {
11
18
  "document": "获取 APM 接入点",
12
19
  "input": "DescribeApmAgentRequest",
@@ -1069,6 +1076,106 @@
1069
1076
  ],
1070
1077
  "type": "object"
1071
1078
  },
1079
+ "CreateProfileTaskRequest": {
1080
+ "document": "CreateProfileTask请求参数结构体",
1081
+ "members": [
1082
+ {
1083
+ "disabled": false,
1084
+ "document": "应用名称",
1085
+ "example": "springboot-service",
1086
+ "member": "string",
1087
+ "name": "ServiceName",
1088
+ "required": true,
1089
+ "type": "string"
1090
+ },
1091
+ {
1092
+ "disabled": false,
1093
+ "document": "APM业务系统ID",
1094
+ "example": "apm-eQls4MGPr",
1095
+ "member": "string",
1096
+ "name": "InstanceId",
1097
+ "required": true,
1098
+ "type": "string"
1099
+ },
1100
+ {
1101
+ "disabled": false,
1102
+ "document": "应用实例(在线)",
1103
+ "example": "127.0.0.1",
1104
+ "member": "string",
1105
+ "name": "ServiceInstance",
1106
+ "required": true,
1107
+ "type": "string"
1108
+ },
1109
+ {
1110
+ "disabled": false,
1111
+ "document": "事件类型(cpu、alloc)",
1112
+ "example": "cpu",
1113
+ "member": "string",
1114
+ "name": "Event",
1115
+ "required": true,
1116
+ "type": "string"
1117
+ },
1118
+ {
1119
+ "disabled": false,
1120
+ "document": "任务持续时长(单位:毫秒),范围限制在5~180秒",
1121
+ "example": "5000",
1122
+ "member": "int64",
1123
+ "name": "Duration",
1124
+ "required": true,
1125
+ "type": "int"
1126
+ },
1127
+ {
1128
+ "disabled": false,
1129
+ "document": "执行次数,范围限制在1~100次",
1130
+ "example": "1",
1131
+ "member": "int64",
1132
+ "name": "AllTimes",
1133
+ "required": true,
1134
+ "type": "int"
1135
+ },
1136
+ {
1137
+ "disabled": false,
1138
+ "document": "开始时间戳,0代表从当前开始(单位:秒)",
1139
+ "example": "0",
1140
+ "member": "int64",
1141
+ "name": "StartTime",
1142
+ "required": false,
1143
+ "type": "int"
1144
+ },
1145
+ {
1146
+ "disabled": false,
1147
+ "document": "任务执行间隔(单位:毫秒),范围限制在10~600秒,不可小于1.5倍的Duration",
1148
+ "example": "5000",
1149
+ "member": "int64",
1150
+ "name": "TaskInterval",
1151
+ "required": false,
1152
+ "type": "int"
1153
+ }
1154
+ ],
1155
+ "type": "object"
1156
+ },
1157
+ "CreateProfileTaskResponse": {
1158
+ "document": "CreateProfileTask返回参数结构体",
1159
+ "members": [
1160
+ {
1161
+ "disabled": false,
1162
+ "document": "任务ID",
1163
+ "example": "100001",
1164
+ "member": "int64",
1165
+ "name": "TaskId",
1166
+ "output_required": true,
1167
+ "type": "int",
1168
+ "value_allowed_null": false
1169
+ },
1170
+ {
1171
+ "document": "唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。",
1172
+ "member": "string",
1173
+ "name": "RequestId",
1174
+ "type": "string"
1175
+ }
1176
+ ],
1177
+ "type": "object"
1178
+ },
1072
1179
  "DescribeApmAgentRequest": {
1073
1180
  "document": "DescribeApmAgent请求参数结构体",
1074
1181
  "members": [
@@ -2117,6 +2224,16 @@
2117
2224
  "output_required": true,
2118
2225
  "type": "list",
2119
2226
  "value_allowed_null": false
2227
+ },
2228
+ {
2229
+ "disabled": false,
2230
+ "document": "指标数据单位",
2231
+ "example": "个/秒",
2232
+ "member": "string",
2233
+ "name": "MetricUnit",
2234
+ "output_required": false,
2235
+ "type": "string",
2236
+ "value_allowed_null": false
2120
2237
  }
2121
2238
  ],
2122
2239
  "usage": "out"
@@ -8,6 +8,14 @@
8
8
  "title": "创建 APM 业务系统"
9
9
  }
10
10
  ],
11
+ "CreateProfileTask": [
12
+ {
13
+ "document": "成功示例",
14
+ "input": "POST / HTTP/1.1\nHost: apm.tencentcloudapi.com\nContent-Type: application/json\nX-TC-Action: CreateProfileTask\n<公共请求参数>\n\n{\n \"ServiceName\": \"springboot-service\",\n \"InstanceId\": \"apm-ewyzCXlxj\",\n \"ServiceInstance\": \"127.0.0.1\",\n \"StartTime\": 0,\n \"Duration\": 5000,\n \"Event\": \"cpu\",\n \"AllTimes\": 1,\n \"TaskInterval\": 10000\n}",
15
+ "output": "{\n \"Response\": {\n \"RequestId\": \"eac7cf53-1900-4367-9076-a5649ddd4dbb\",\n \"TaskId\": 10001\n }\n}",
16
+ "title": "成功示例"
17
+ }
18
+ ],
11
19
  "DescribeApmAgent": [
12
20
  {
13
21
  "document": "获取 APM 接入点示例",
@@ -85,7 +85,7 @@
85
85
  "status": "online"
86
86
  },
87
87
  "CreateAccounts": {
88
- "document": "本接口(CreateAccounts)用于创建云数据库的账户,需要指定新的账户名和域名,以及所对应的密码,同时可以设置账号的备注信息以及最大可用连接数。",
88
+ "document": "本接口(CreateAccounts)用于创建云数据库的账户,需要指定新的账户名和域名,以及所对应的密码,同时可以设置账号的备注信息以及最大可用连接数。",
89
89
  "input": "CreateAccountsRequest",
90
90
  "name": "创建云数据库的账户",
91
91
  "output": "CreateAccountsResponse",
@@ -806,7 +806,7 @@
806
806
  "status": "online"
807
807
  },
808
808
  "ModifyAccountMaxUserConnections": {
809
- "document": "本接口(ModifyAccountMaxUserConnections)用于修改云数据库账户最大可用连接数。",
809
+ "document": "本接口(ModifyAccountMaxUserConnections)用于修改云数据库账户最大可用连接数。",
810
810
  "input": "ModifyAccountMaxUserConnectionsRequest",
811
811
  "name": "修改账户最大可用连接数",
812
812
  "output": "ModifyAccountMaxUserConnectionsResponse",
@@ -4787,7 +4787,7 @@
4787
4787
  {
4788
4788
  "disabled": false,
4789
4789
  "document": "云数据库账号。",
4790
- "example": "",
4790
+ "example": "[{\"Host\": \"127.0.0.1\",\"User\": \"ajnnw\"}]",
4791
4791
  "member": "Account",
4792
4792
  "name": "Accounts",
4793
4793
  "required": true,
@@ -4795,7 +4795,7 @@
4795
4795
  },
4796
4796
  {
4797
4797
  "disabled": false,
4798
- "document": "新账户的密码。",
4798
+ "document": "新账户的密码。\n说明:\n1. 在8 ~ 64位字符数以内(推荐12位以上)。\n2. 至少包含其中两项:小写字母 a ~ z 或 大写字母 A ~ Z。数字0 ~ 9。_+-,&=!@#$%^*().|。\n3. 不能包含非法字符。",
4799
4799
  "example": "fsdgfdgfd",
4800
4800
  "member": "string",
4801
4801
  "name": "Password",
@@ -4804,7 +4804,7 @@
4804
4804
  },
4805
4805
  {
4806
4806
  "disabled": false,
4807
- "document": "备注信息。",
4807
+ "document": "备注信息。最多支持输入255个字符。",
4808
4808
  "example": "test description",
4809
4809
  "member": "string",
4810
4810
  "name": "Description",
@@ -7166,7 +7166,7 @@
7166
7166
  {
7167
7167
  "disabled": false,
7168
7168
  "document": "云数据库账号。",
7169
- "example": "[\"User\": \"andy\",\"Host\": \"192.1.1.1\"}]",
7169
+ "example": "[{\"User\": \"andy\",\"Host\": \"192.1.1.1\"}]",
7170
7170
  "member": "Account",
7171
7171
  "name": "Accounts",
7172
7172
  "required": true,
@@ -15733,7 +15733,7 @@
15733
15733
  "members": [
15734
15734
  {
15735
15735
  "disabled": false,
15736
- "document": "云数据库账号。",
15736
+ "document": "云数据库账号。可通过 [DescribeAccounts](https://cloud.tencent.com/document/api/236/17499) 接口获取。",
15737
15737
  "example": "andy",
15738
15738
  "member": "Account",
15739
15739
  "name": "Accounts",
@@ -15806,8 +15806,8 @@
15806
15806
  },
15807
15807
  {
15808
15808
  "disabled": false,
15809
- "document": "云数据库账号。",
15810
- "example": "",
15809
+ "document": "云数据库账号。可通过 [DescribeAccounts](https://cloud.tencent.com/document/api/236/17499) 接口获取。",
15810
+ "example": "andy",
15811
15811
  "member": "Account",
15812
15812
  "name": "Accounts",
15813
15813
  "required": true,
@@ -15852,8 +15852,8 @@
15852
15852
  },
15853
15853
  {
15854
15854
  "disabled": false,
15855
- "document": "数据库的账号,包括用户名和域名。",
15856
- "example": "andy",
15855
+ "document": "数据库的账号,包括用户名和域名。可通过 [DescribeAccounts](https://cloud.tencent.com/document/api/236/17499) 接口获取。",
15856
+ "example": "[{\"User\": \"andy\",\"Host\": \"%\"}]",
15857
15857
  "member": "Account",
15858
15858
  "name": "Accounts",
15859
15859
  "required": true,
@@ -17476,7 +17476,7 @@
17476
17476
  "members": [
17477
17477
  {
17478
17478
  "disabled": false,
17479
- "document": "RO 组的 ID",
17479
+ "document": "RO 组的 ID。可通过 [DescribeRoGroups](https://cloud.tencent.com/document/api/236/40939) 接口获取。",
17480
17480
  "example": "cdbrg-iup41a4t",
17481
17481
  "member": "string",
17482
17482
  "name": "RoGroupId",
@@ -17486,7 +17486,7 @@
17486
17486
  {
17487
17487
  "disabled": false,
17488
17488
  "document": "RO 组的详细信息。",
17489
- "example": "{\"RoOfflineDelay\": \"1\",\"MinRoInGroup\": \"1\",\"RoMaxDelayTime\": \"10\"}",
17489
+ "example": "{\"RoOfflineDelay\": 1,\"MinRoInGroup\": 1,\"RoMaxDelayTime\": 10}",
17490
17490
  "member": "RoGroupAttr",
17491
17491
  "name": "RoGroupInfo",
17492
17492
  "required": false,
@@ -17494,8 +17494,8 @@
17494
17494
  },
17495
17495
  {
17496
17496
  "disabled": false,
17497
- "document": "RO 组内实例的权重。若修改 RO 组的权重模式为用户自定义模式(custom),则必须设置该参数,且需要设置每个 RO 实例的权重值。",
17498
- "example": " [{\"InstanceId\": \"cdbr0-test1234\",\"Weight\": \"70\"},{\"InstanceId\": \"cdbr0-iup41a4t\",\"Weight\": \"30\"}]",
17497
+ "document": "RO 组内实例的权重。若修改 RO 组的权重模式为用户自定义模式(custom),则必须设置该参数,且需要设置每个 RO 实例的权重值。RO 实例 ID 可通过 [DescribeRoGroups](https://cloud.tencent.com/document/api/236/40939) 接口获取。",
17498
+ "example": " [{\"InstanceId\": \"cdbr0-test1234\",\"Weight\": 70},{\"InstanceId\": \"cdbr0-iup41a4t\",\"Weight\": 30}]",
17499
17499
  "member": "RoWeightValue",
17500
17500
  "name": "RoWeightValues",
17501
17501
  "required": false,
@@ -19241,8 +19241,8 @@
19241
19241
  "members": [
19242
19242
  {
19243
19243
  "disabled": false,
19244
- "document": "实例id",
19245
- "example": "cdb-xxxx",
19244
+ "document": "实例 ID。可通过 [DescribeDBInstances](https://cloud.tencent.com/document/product/236/15872) 接口获取。",
19245
+ "example": "cdb-4t34ozl0",
19246
19246
  "member": "string",
19247
19247
  "name": "InstanceId",
19248
19248
  "required": true,
@@ -977,7 +977,7 @@
977
977
  "ModifyAccountMaxUserConnections": [
978
978
  {
979
979
  "document": "",
980
- "input": "POST / HTTP/1.1\nHost: cdb.tencentcloudapi.com\nContent-Type: application/json\nX-TC-Action: ModifyAccountMaxUserConnections\n<公共请求参数>\n\n{\n \"InstanceId\": \"cdb-f35wr6wj\",\n \"MaxUserConnections\": \"100\",\n \"Accounts\": [\n {\n \"Host\": \"127.0.0.1\",\n \"User\": \"ajnnw\"\n }\n ]\n}",
980
+ "input": "POST / HTTP/1.1\nHost: cdb.tencentcloudapi.com\nContent-Type: application/json\nX-TC-Action: ModifyAccountMaxUserConnections\n<公共请求参数>\n\n{\n \"InstanceId\": \"cdb-f35wr6wj\",\n \"MaxUserConnections\": 100,\n \"Accounts\": [\n {\n \"Host\": \"127.0.0.1\",\n \"User\": \"ajnnw\"\n }\n ]\n}",
981
981
  "output": "{\n \"Response\": {\n \"RequestId\": \"6EF60BEC-0242-43AF-BB20-270359FB54A7\",\n \"AsyncRequestId\": \"256117ed-efa08b54-61784d44-91781bbd\"\n }\n}",
982
982
  "title": "修改云数据库账户最大可用连接数"
983
983
  }
@@ -1201,7 +1201,7 @@
1201
1201
  "ModifyRoGroupInfo": [
1202
1202
  {
1203
1203
  "document": "",
1204
- "input": "POST / HTTP/1.1\nHost: cdb.tencentcloudapi.com\nContent-Type: application/json\nX-TC-Action: ModifyRoGroupInfo\n<公共请求参数>\n\n{\n \"RoGroupId\": \"cdbrg-iup41a4t\",\n \"RoGroupInfo\": {\n \"RoOfflineDelay\": \"1\",\n \"MinRoInGroup\": \"1\",\n \"RoMaxDelayTime\": \"10\"\n }\n}",
1204
+ "input": "POST / HTTP/1.1\nHost: cdb.tencentcloudapi.com\nContent-Type: application/json\nX-TC-Action: ModifyRoGroupInfo\n<公共请求参数>\n\n{\n \"RoGroupId\": \"cdbrg-iup41a4t\",\n \"RoGroupInfo\": {\n \"RoOfflineDelay\": 1,\n \"MinRoInGroup\": 1,\n \"RoMaxDelayTime\": 10\n }\n}",
1205
1205
  "output": "{\n \"Response\": {\n \"RequestId\": \"6EF60BEC-0242-43AF-BB20-270359FB54A7\",\n \"AsyncRequestId\": \"a6040589-3b098df5-b551d9e5-81c6bfdc\"\n }\n}",
1206
1206
  "title": "设置RO组的延迟剔除策略"
1207
1207
  },
@@ -0,0 +1,4 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from tccli.services.ctem.ctem_client import action_caller
4
+