bkflow-sdk 0.0.28__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.
- bkflow/__init__.py +11 -0
- bkflow/client/__init__.py +10 -0
- bkflow/client/apis/__init__.py +10 -0
- bkflow/client/apis/bkflow.py +342 -0
- bkflow/client/base.py +104 -0
- bkflow/client/core.py +253 -0
- bkflow/common/__init__.py +10 -0
- bkflow/common/decorators.py +107 -0
- bkflow/common/exceptions.py +46 -0
- bkflow/common/validator.py +96 -0
- bkflow/common/views.py +50 -0
- bkflow/config/__init__.py +10 -0
- bkflow/config/default.py +61 -0
- bkflow/interface/__init__.py +10 -0
- bkflow/interface/apps.py +18 -0
- bkflow/interface/serializers.py +270 -0
- bkflow/interface/signals.py +25 -0
- bkflow/interface/urls.py +35 -0
- bkflow/interface/views.py +748 -0
- bkflow_sdk-0.0.28.dist-info/METADATA +248 -0
- bkflow_sdk-0.0.28.dist-info/RECORD +23 -0
- bkflow_sdk-0.0.28.dist-info/WHEEL +5 -0
- bkflow_sdk-0.0.28.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,748 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Tencent is pleased to support the open source community by making 蓝鲸智云 - PaaS平台 (BlueKing - PaaS System) available.
|
|
3
|
+
Copyright (C) 2022 THL A29 Limited, a Tencent company. All rights reserved.
|
|
4
|
+
Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
http://opensource.org/licenses/MIT
|
|
7
|
+
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
|
|
8
|
+
an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
|
|
9
|
+
specific language governing permissions and limitations under the License.
|
|
10
|
+
"""
|
|
11
|
+
from drf_yasg.utils import swagger_auto_schema
|
|
12
|
+
from rest_framework.decorators import action
|
|
13
|
+
from rest_framework.response import Response
|
|
14
|
+
|
|
15
|
+
from bkflow.client.core import get_redirect_client, get_redirect_client_with_auth
|
|
16
|
+
from bkflow.common.decorators import params_valid, token_inject
|
|
17
|
+
from bkflow.common.views import SimpleGenericViewSet
|
|
18
|
+
from bkflow.config.default import API_TOKEN_HEADER_KEY
|
|
19
|
+
from bkflow.interface.serializers import (
|
|
20
|
+
AnalysisConstantsRefSerializer,
|
|
21
|
+
BatchTaskStatesSerializer,
|
|
22
|
+
BKPluginSerializer,
|
|
23
|
+
CalculateVersionSerializer,
|
|
24
|
+
CheckVariableKeySerializer,
|
|
25
|
+
CopyTemplateSerializer,
|
|
26
|
+
CreateTaskSerializer,
|
|
27
|
+
CreateTemplateSerializer,
|
|
28
|
+
DecisionTableSerializer,
|
|
29
|
+
DeleteTemplateSerializer,
|
|
30
|
+
GetConstantPreviewResultSerializer,
|
|
31
|
+
GetDraftTemplateSerializer,
|
|
32
|
+
GetServicePluginSerializer,
|
|
33
|
+
InnerPluginDetailSerializer,
|
|
34
|
+
OperateTaskSerializer,
|
|
35
|
+
PluginCodeQuerySerializer,
|
|
36
|
+
PreviewTaskTreeSerializer,
|
|
37
|
+
ScopeSerializer,
|
|
38
|
+
ServicePluginDetailSerializer,
|
|
39
|
+
SnapshotSerializer,
|
|
40
|
+
SpaceSerializer,
|
|
41
|
+
TaskListSerializer,
|
|
42
|
+
TaskSerializer,
|
|
43
|
+
TemplateDetailQuerySerializer,
|
|
44
|
+
TemplateListSerializer,
|
|
45
|
+
TemplateReleaseSerializer,
|
|
46
|
+
TemplateRollbackSerializer,
|
|
47
|
+
UniFormAPiSerializer,
|
|
48
|
+
UpdateTemplateSerializer,
|
|
49
|
+
)
|
|
50
|
+
from bkflow.interface.signals import (
|
|
51
|
+
post_mock_task_signal,
|
|
52
|
+
post_task_signal,
|
|
53
|
+
post_template_signal,
|
|
54
|
+
pre_mock_task_signal,
|
|
55
|
+
pre_task_signal,
|
|
56
|
+
pre_template_signal,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class TemplateViewSet(SimpleGenericViewSet):
|
|
61
|
+
"""流程模板视图集
|
|
62
|
+
|
|
63
|
+
提供流程模板的创建、查询、更新、删除等操作
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
lookup_field = "template_id"
|
|
67
|
+
|
|
68
|
+
@swagger_auto_schema(
|
|
69
|
+
operation_summary="获取流程模板列表",
|
|
70
|
+
operation_description="获取指定空间下的流程模板列表,支持按名称、创建者、更新人等条件筛选,支持分页查询",
|
|
71
|
+
query_serializer=TemplateListSerializer,
|
|
72
|
+
tags=["流程模板"],
|
|
73
|
+
)
|
|
74
|
+
@params_valid(TemplateListSerializer)
|
|
75
|
+
def list(self, request, params):
|
|
76
|
+
"""获取流程列表"""
|
|
77
|
+
pre_template_signal.send(sender="list_template", request_data=params)
|
|
78
|
+
|
|
79
|
+
client = get_redirect_client(request)
|
|
80
|
+
space_id = params.pop("space_id")
|
|
81
|
+
data = client.bkflow.list_templates(path_params={"space_id": space_id}, **params)
|
|
82
|
+
|
|
83
|
+
post_template_signal.send(sender="list_template", response_data=data, request_data=params)
|
|
84
|
+
return Response(data)
|
|
85
|
+
|
|
86
|
+
@swagger_auto_schema(
|
|
87
|
+
method="POST",
|
|
88
|
+
operation_summary="创建流程模板",
|
|
89
|
+
operation_description="在指定空间下创建新的流程模板,支持从已有模板复制或创建空白模板",
|
|
90
|
+
request_body=CreateTemplateSerializer,
|
|
91
|
+
tags=["流程模板"],
|
|
92
|
+
)
|
|
93
|
+
@action(methods=["POST"], detail=False)
|
|
94
|
+
@params_valid(CreateTemplateSerializer)
|
|
95
|
+
def create_template(self, request, params):
|
|
96
|
+
"""创建流程"""
|
|
97
|
+
pre_template_signal.send(sender="create_template", request_data=params)
|
|
98
|
+
|
|
99
|
+
client = get_redirect_client_with_auth(request)
|
|
100
|
+
space_id = params.pop("space_id")
|
|
101
|
+
data = client.bkflow.create_template(**params, path_params={"space_id": space_id})
|
|
102
|
+
|
|
103
|
+
post_template_signal.send(sender="create_template", response_data=data, request_data=params)
|
|
104
|
+
return Response(data)
|
|
105
|
+
|
|
106
|
+
@swagger_auto_schema(
|
|
107
|
+
method="POST",
|
|
108
|
+
operation_summary="创建流程任务",
|
|
109
|
+
operation_description="基于流程模板创建任务实例,可指定任务参数和常量值",
|
|
110
|
+
request_body=CreateTaskSerializer,
|
|
111
|
+
tags=["流程任务"],
|
|
112
|
+
)
|
|
113
|
+
@action(methods=["POST"], detail=False)
|
|
114
|
+
@params_valid(CreateTaskSerializer)
|
|
115
|
+
def create_task(self, request, params):
|
|
116
|
+
"""创建任务"""
|
|
117
|
+
pre_task_signal.send(sender="create_task", request_data=params)
|
|
118
|
+
|
|
119
|
+
client = get_redirect_client(request)
|
|
120
|
+
space_id = params.pop("space_id")
|
|
121
|
+
data = client.bkflow.create_task(params, path_params={"space_id": space_id})
|
|
122
|
+
|
|
123
|
+
post_task_signal.send(sender="create_task", response_data=data, request_data=params)
|
|
124
|
+
return Response(data)
|
|
125
|
+
|
|
126
|
+
@swagger_auto_schema(
|
|
127
|
+
method="GET",
|
|
128
|
+
operation_summary="获取流程模板详情",
|
|
129
|
+
operation_description="获取指定流程模板的完整信息,包括流程树、变量配置等,支持获取 Mock 数据",
|
|
130
|
+
query_serializer=TemplateDetailQuerySerializer,
|
|
131
|
+
tags=["流程模板"],
|
|
132
|
+
)
|
|
133
|
+
@action(methods=["GET"], detail=True)
|
|
134
|
+
@token_inject
|
|
135
|
+
@params_valid(TemplateDetailQuerySerializer)
|
|
136
|
+
def fetch_template(self, request, template_id, params):
|
|
137
|
+
"""获取流程详情"""
|
|
138
|
+
pre_template_signal.send(sender="fetch_template", request_data=params)
|
|
139
|
+
|
|
140
|
+
client = get_redirect_client_with_auth(request)
|
|
141
|
+
data = client.bkflow.fetch_template(
|
|
142
|
+
params, path_params={"template_id": template_id}, headers={API_TOKEN_HEADER_KEY: request.token}
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
post_template_signal.send(sender="fetch_template", response_data=data, request_data=params)
|
|
146
|
+
return Response(data)
|
|
147
|
+
|
|
148
|
+
@swagger_auto_schema(
|
|
149
|
+
method="PUT",
|
|
150
|
+
operation_summary="更新流程模板",
|
|
151
|
+
operation_description="更新指定流程模板的配置信息,包括流程树、变量、触发器等",
|
|
152
|
+
request_body=UpdateTemplateSerializer,
|
|
153
|
+
tags=["流程模板"],
|
|
154
|
+
)
|
|
155
|
+
@action(methods=["PUT"], detail=True)
|
|
156
|
+
@token_inject
|
|
157
|
+
@params_valid(UpdateTemplateSerializer)
|
|
158
|
+
def update_template(self, request, template_id, params):
|
|
159
|
+
pre_template_signal.send(sender="update_template", request_data=params)
|
|
160
|
+
|
|
161
|
+
client = get_redirect_client_with_auth(request)
|
|
162
|
+
data = client.bkflow.update_template(
|
|
163
|
+
path_params={"template_id": template_id}, headers={API_TOKEN_HEADER_KEY: request.token}, **params
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
post_template_signal.send(sender="update_template", response_data=data, request_data=params)
|
|
167
|
+
return Response(data)
|
|
168
|
+
|
|
169
|
+
@swagger_auto_schema(
|
|
170
|
+
method="POST",
|
|
171
|
+
operation_summary="复制流程",
|
|
172
|
+
operation_description="",
|
|
173
|
+
request_body=CopyTemplateSerializer,
|
|
174
|
+
tags=["流程模板"],
|
|
175
|
+
)
|
|
176
|
+
@action(methods=["POST"], detail=True)
|
|
177
|
+
@params_valid(CopyTemplateSerializer)
|
|
178
|
+
def copy_template(self, request, template_id, params):
|
|
179
|
+
pre_template_signal.send(sender="copy_template", request_data=params)
|
|
180
|
+
|
|
181
|
+
client = get_redirect_client_with_auth(request)
|
|
182
|
+
data = client.bkflow.copy_template(
|
|
183
|
+
{
|
|
184
|
+
"template_id": template_id,
|
|
185
|
+
"space_id": params.get("space_id"),
|
|
186
|
+
}
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
post_template_signal.send(sender="copy_template", response_data=data, request_data=params)
|
|
190
|
+
return Response(data)
|
|
191
|
+
|
|
192
|
+
@swagger_auto_schema(
|
|
193
|
+
method="GET",
|
|
194
|
+
operation_summary="获取空间相关配置",
|
|
195
|
+
operation_description="获取流程模板所在空间的相关配置信息,包括权限配置、资源配置等",
|
|
196
|
+
tags=["流程模板"],
|
|
197
|
+
)
|
|
198
|
+
@action(methods=["GET"], detail=True)
|
|
199
|
+
@token_inject
|
|
200
|
+
def get_space_related_configs(self, request, template_id):
|
|
201
|
+
client = get_redirect_client_with_auth(request)
|
|
202
|
+
data = client.bkflow.get_space_related_configs(
|
|
203
|
+
path_params={"template_id": template_id}, headers={API_TOKEN_HEADER_KEY: request.token}
|
|
204
|
+
)
|
|
205
|
+
return Response(data)
|
|
206
|
+
|
|
207
|
+
@swagger_auto_schema(
|
|
208
|
+
method="POST",
|
|
209
|
+
operation_summary="变量引用统计分析",
|
|
210
|
+
operation_description="分析流程中变量的引用情况,包括活动节点、网关、常量等对变量的引用关系",
|
|
211
|
+
request_body=AnalysisConstantsRefSerializer,
|
|
212
|
+
tags=["流程变量"],
|
|
213
|
+
)
|
|
214
|
+
@action(methods=["POST"], detail=False)
|
|
215
|
+
@token_inject
|
|
216
|
+
@params_valid(AnalysisConstantsRefSerializer)
|
|
217
|
+
def analysis_constants_ref(self, request, params):
|
|
218
|
+
pre_template_signal.send(sender="analysis_constants_ref", request_data=params)
|
|
219
|
+
|
|
220
|
+
client = get_redirect_client_with_auth(request)
|
|
221
|
+
data = client.bkflow.analysis_constants_ref(**params, headers={API_TOKEN_HEADER_KEY: request.token})
|
|
222
|
+
|
|
223
|
+
post_task_signal.send(sender="analysis_constants_ref", response_data=data, request_data=params)
|
|
224
|
+
return Response(data)
|
|
225
|
+
|
|
226
|
+
@swagger_auto_schema(
|
|
227
|
+
method="GET",
|
|
228
|
+
operation_summary="获取流程操作记录",
|
|
229
|
+
operation_description="获取指定流程模板的操作历史记录,包括创建、更新、删除等操作日志",
|
|
230
|
+
query_serializer=ScopeSerializer,
|
|
231
|
+
tags=["流程模板"],
|
|
232
|
+
)
|
|
233
|
+
@action(methods=["GET"], detail=True)
|
|
234
|
+
@token_inject
|
|
235
|
+
@params_valid(ScopeSerializer)
|
|
236
|
+
def operation_record(self, request, template_id, params):
|
|
237
|
+
pre_template_signal.send(sender="operation_record", request_data=params)
|
|
238
|
+
|
|
239
|
+
client = get_redirect_client_with_auth(request)
|
|
240
|
+
data = client.bkflow.operation_record(
|
|
241
|
+
path_params={"template_id": template_id},
|
|
242
|
+
headers={API_TOKEN_HEADER_KEY: request.token},
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
post_template_signal.send(sender="operation_record", response_data=data, request_data=params)
|
|
246
|
+
return Response(data)
|
|
247
|
+
|
|
248
|
+
@swagger_auto_schema(
|
|
249
|
+
method="POST",
|
|
250
|
+
operation_summary="操作流程任务",
|
|
251
|
+
operation_description="对流程任务进行操作控制,支持启动、暂停、继续、撤销、重试等操作",
|
|
252
|
+
request_body=OperateTaskSerializer,
|
|
253
|
+
tags=["流程任务"],
|
|
254
|
+
)
|
|
255
|
+
@action(methods=["POST"], detail=False)
|
|
256
|
+
@token_inject
|
|
257
|
+
@params_valid(OperateTaskSerializer)
|
|
258
|
+
def operate_task(self, request, params):
|
|
259
|
+
pre_task_signal.send(sender="operate_task", request_data=params)
|
|
260
|
+
client = get_redirect_client_with_auth(request, with_apply_token=True)
|
|
261
|
+
space_id = params.get("space_id")
|
|
262
|
+
data = client.bkflow.front_operate_task(
|
|
263
|
+
path_params={"task_id": params.get("task_id"), "action": params.get("action")},
|
|
264
|
+
space_id=space_id,
|
|
265
|
+
headers={API_TOKEN_HEADER_KEY: request.token},
|
|
266
|
+
)
|
|
267
|
+
post_task_signal.send(sender="operate_task", response_data=data, request_data=params)
|
|
268
|
+
return Response(data)
|
|
269
|
+
|
|
270
|
+
@swagger_auto_schema(
|
|
271
|
+
method="GET",
|
|
272
|
+
operation_summary="获取任务 Mock 数据",
|
|
273
|
+
operation_description="获取任务节点的 Mock 测试数据,用于调试和测试流程",
|
|
274
|
+
query_serializer=TaskSerializer,
|
|
275
|
+
tags=["流程任务"],
|
|
276
|
+
)
|
|
277
|
+
@action(methods=["GET"], detail=False)
|
|
278
|
+
@token_inject
|
|
279
|
+
@params_valid(TaskSerializer)
|
|
280
|
+
def get_task_mock_data(self, request, params):
|
|
281
|
+
pre_mock_task_signal.send(sender="get_task_mock_data", request_data=params)
|
|
282
|
+
|
|
283
|
+
client = get_redirect_client_with_auth(request)
|
|
284
|
+
data = client.bkflow.get_task_mock_data(
|
|
285
|
+
path_params={"task_id": params.get("task_id")}, headers={API_TOKEN_HEADER_KEY: request.token}
|
|
286
|
+
)
|
|
287
|
+
|
|
288
|
+
post_mock_task_signal.send(sender="get_task_mock_data", response_data=data, request_data=params)
|
|
289
|
+
return Response(data)
|
|
290
|
+
|
|
291
|
+
@swagger_auto_schema(
|
|
292
|
+
method="GET",
|
|
293
|
+
operation_summary="获取任务列表",
|
|
294
|
+
operation_description="获取指定空间下的任务列表,支持按状态、创建时间等条件筛选",
|
|
295
|
+
query_serializer=ScopeSerializer,
|
|
296
|
+
tags=["流程任务"],
|
|
297
|
+
)
|
|
298
|
+
@action(methods=["GET"], detail=False)
|
|
299
|
+
@params_valid(TaskListSerializer)
|
|
300
|
+
def get_task_list(self, request, params):
|
|
301
|
+
pre_task_signal.send(sender="get_task_list", request_data=params)
|
|
302
|
+
client = get_redirect_client(request)
|
|
303
|
+
|
|
304
|
+
data = client.bkflow.get_task_list(path_params={"space_id": params.get("space_id")}, **params)
|
|
305
|
+
post_task_signal.send(sender="get_task_list", response_data=data, request_data=params)
|
|
306
|
+
return Response(data)
|
|
307
|
+
|
|
308
|
+
@swagger_auto_schema(
|
|
309
|
+
method="GET",
|
|
310
|
+
operation_summary="获取任务状态",
|
|
311
|
+
operation_description="获取指定任务的执行状态信息,包括各节点的执行情况",
|
|
312
|
+
query_serializer=TaskSerializer,
|
|
313
|
+
tags=["流程任务"],
|
|
314
|
+
)
|
|
315
|
+
@action(methods=["GET"], detail=False)
|
|
316
|
+
@params_valid(TaskSerializer)
|
|
317
|
+
def get_task_states(self, request, params):
|
|
318
|
+
pre_task_signal.send(sender="get_task_states", request_data=params)
|
|
319
|
+
client = get_redirect_client(request)
|
|
320
|
+
|
|
321
|
+
data = client.bkflow.get_task_states(
|
|
322
|
+
path_params={"space_id": params.get("space_id"), "task_id": params.get("task_id")}
|
|
323
|
+
)
|
|
324
|
+
post_task_signal.send(sender="get_task_states", response_data=data, request_data=params)
|
|
325
|
+
return Response(data)
|
|
326
|
+
|
|
327
|
+
@swagger_auto_schema(
|
|
328
|
+
method="GET",
|
|
329
|
+
operation_summary="获取任务详情",
|
|
330
|
+
operation_description="获取指定任务的完整详细信息,包括任务配置、执行参数等",
|
|
331
|
+
query_serializer=TaskSerializer,
|
|
332
|
+
tags=["流程任务"],
|
|
333
|
+
)
|
|
334
|
+
@action(methods=["GET"], detail=False)
|
|
335
|
+
@params_valid(TaskSerializer)
|
|
336
|
+
def get_task_detail(self, request, params):
|
|
337
|
+
pre_task_signal.send(sender="get_task_detail", request_data=params)
|
|
338
|
+
client = get_redirect_client(request)
|
|
339
|
+
|
|
340
|
+
data = client.bkflow.get_task_detail(
|
|
341
|
+
path_params={"space_id": params.get("space_id"), "task_id": params.get("task_id")}
|
|
342
|
+
)
|
|
343
|
+
post_task_signal.send(sender="get_task_detail", response_data=data, request_data=params)
|
|
344
|
+
return Response(data)
|
|
345
|
+
|
|
346
|
+
@swagger_auto_schema(
|
|
347
|
+
method="POST",
|
|
348
|
+
operation_summary="批量获取任务状态",
|
|
349
|
+
operation_description="批量获取多个任务的执行状态信息,提高查询效率",
|
|
350
|
+
request_body=BatchTaskStatesSerializer,
|
|
351
|
+
tags=["流程任务"],
|
|
352
|
+
)
|
|
353
|
+
@action(methods=["POST"], detail=False)
|
|
354
|
+
@params_valid(BatchTaskStatesSerializer)
|
|
355
|
+
def get_tasks_states(self, request, params):
|
|
356
|
+
pre_task_signal.send(sender="get_tasks_states", request_data=params)
|
|
357
|
+
client = get_redirect_client(request)
|
|
358
|
+
|
|
359
|
+
data = client.bkflow.get_tasks_states(path_params={"space_id": params.get("space_id")}, **params)
|
|
360
|
+
post_task_signal.send(sender="get_tasks_states", response_data=data, request_data=params)
|
|
361
|
+
return Response(data)
|
|
362
|
+
|
|
363
|
+
@swagger_auto_schema(
|
|
364
|
+
method="DELETE",
|
|
365
|
+
operation_summary="删除流程",
|
|
366
|
+
operation_description="删除指定流程实例",
|
|
367
|
+
request_body=DeleteTemplateSerializer,
|
|
368
|
+
tags=["流程任务"],
|
|
369
|
+
)
|
|
370
|
+
@action(methods=["DELETE"], detail=True)
|
|
371
|
+
@params_valid(DeleteTemplateSerializer)
|
|
372
|
+
def delete_template(self, request, template_id, params):
|
|
373
|
+
pre_template_signal.send(sender="delete_template", request_data=params)
|
|
374
|
+
client = get_redirect_client(request)
|
|
375
|
+
data = client.bkflow.delete_template(
|
|
376
|
+
path_params={"space_id": params.get("space_id"), "template_id": template_id}
|
|
377
|
+
)
|
|
378
|
+
post_template_signal.send(sender="delete_template", response_data=data, request_data=params)
|
|
379
|
+
return Response(data)
|
|
380
|
+
|
|
381
|
+
@swagger_auto_schema(
|
|
382
|
+
method="POST",
|
|
383
|
+
operation_summary="预览任务树",
|
|
384
|
+
operation_description="预览指定任务的执行树结构",
|
|
385
|
+
request_body=PreviewTaskTreeSerializer,
|
|
386
|
+
tags=["流程任务"],
|
|
387
|
+
)
|
|
388
|
+
@action(methods=["POST"], detail=False)
|
|
389
|
+
@token_inject
|
|
390
|
+
@params_valid(PreviewTaskTreeSerializer)
|
|
391
|
+
def preview_task_tree(self, request, template_id, params):
|
|
392
|
+
pre_task_signal.send(sender="preview_task_tree", request_data=params)
|
|
393
|
+
client = get_redirect_client_with_auth(request)
|
|
394
|
+
data = client.bkflow.preview_task_tree(
|
|
395
|
+
path_params={"template_id": template_id}, headers={API_TOKEN_HEADER_KEY: request.token}, **params
|
|
396
|
+
)
|
|
397
|
+
post_task_signal.send(sender="preview_task_tree", response_data=data, request_data=params)
|
|
398
|
+
return Response(data)
|
|
399
|
+
|
|
400
|
+
swagger_auto_schema(
|
|
401
|
+
method="GET",
|
|
402
|
+
operation_summary="获取流程草稿",
|
|
403
|
+
operation_description="获取指定流程的草稿版本",
|
|
404
|
+
query_serializer=GetDraftTemplateSerializer,
|
|
405
|
+
tags=["流程模板"],
|
|
406
|
+
)
|
|
407
|
+
|
|
408
|
+
@action(methods=["GET"], detail=True)
|
|
409
|
+
@token_inject
|
|
410
|
+
@params_valid(GetDraftTemplateSerializer)
|
|
411
|
+
def get_draft_template(self, request, template_id, params):
|
|
412
|
+
pre_template_signal.send(sender="get_draft_template", request_data=params)
|
|
413
|
+
client = get_redirect_client_with_auth(request)
|
|
414
|
+
data = client.bkflow.get_draft_template(
|
|
415
|
+
path_params={"template_id": template_id}, headers={API_TOKEN_HEADER_KEY: request.token}
|
|
416
|
+
)
|
|
417
|
+
post_template_signal.send(sender="get_draft_template", response_data=data, request_data=params)
|
|
418
|
+
return Response(data)
|
|
419
|
+
|
|
420
|
+
@swagger_auto_schema(
|
|
421
|
+
method="POST",
|
|
422
|
+
operation_summary="计算流程版本",
|
|
423
|
+
operation_description="计算指定流程的版本号",
|
|
424
|
+
request_body=CalculateVersionSerializer,
|
|
425
|
+
tags=["流程模板"],
|
|
426
|
+
)
|
|
427
|
+
@action(methods=["POST"], detail=True)
|
|
428
|
+
@token_inject
|
|
429
|
+
@params_valid(CalculateVersionSerializer)
|
|
430
|
+
def calculate_version(self, request, template_id, params):
|
|
431
|
+
pre_template_signal.send(sender="calculate_version", request_data=params)
|
|
432
|
+
client = get_redirect_client_with_auth(request)
|
|
433
|
+
data = client.bkflow.calculate_version(
|
|
434
|
+
path_params={"template_id": template_id}, headers={API_TOKEN_HEADER_KEY: request.token}
|
|
435
|
+
)
|
|
436
|
+
post_template_signal.send(sender="calculate_version", response_data=data, request_data=params)
|
|
437
|
+
return Response(data)
|
|
438
|
+
|
|
439
|
+
@swagger_auto_schema(
|
|
440
|
+
method="POST",
|
|
441
|
+
operation_summary="发布流程",
|
|
442
|
+
operation_description="发布指定流程版本,使其可被任务创建",
|
|
443
|
+
request_body=TemplateReleaseSerializer,
|
|
444
|
+
tags=["流程模板"],
|
|
445
|
+
)
|
|
446
|
+
@action(methods=["POST"], detail=True)
|
|
447
|
+
@token_inject
|
|
448
|
+
@params_valid(TemplateReleaseSerializer)
|
|
449
|
+
def release_template(self, request, template_id, params):
|
|
450
|
+
pre_template_signal.send(sender="release_template", request_data=params)
|
|
451
|
+
client = get_redirect_client_with_auth(request)
|
|
452
|
+
data = client.bkflow.release_template(
|
|
453
|
+
path_params={"template_id": template_id}, headers={API_TOKEN_HEADER_KEY: request.token}, **params
|
|
454
|
+
)
|
|
455
|
+
post_template_signal.send(sender="release_template", response_data=data, request_data=params)
|
|
456
|
+
return Response(data)
|
|
457
|
+
|
|
458
|
+
@swagger_auto_schema(
|
|
459
|
+
method="POST",
|
|
460
|
+
operation_summary="回滚流程",
|
|
461
|
+
operation_description="回滚指定流程到指定版本",
|
|
462
|
+
request_body=TemplateRollbackSerializer,
|
|
463
|
+
tags=["流程模板"],
|
|
464
|
+
)
|
|
465
|
+
@action(methods=["POST"], detail=True)
|
|
466
|
+
@token_inject
|
|
467
|
+
@params_valid(TemplateRollbackSerializer)
|
|
468
|
+
def rollback_template(self, request, template_id, params):
|
|
469
|
+
pre_template_signal.send(sender="rollback_template", request_data=params)
|
|
470
|
+
client = get_redirect_client_with_auth(request)
|
|
471
|
+
data = client.bkflow.rollback_template(
|
|
472
|
+
path_params={"template_id": template_id}, headers={API_TOKEN_HEADER_KEY: request.token}, **params
|
|
473
|
+
)
|
|
474
|
+
post_template_signal.send(sender="rollback_template", response_data=data, request_data=params)
|
|
475
|
+
return Response(data)
|
|
476
|
+
|
|
477
|
+
|
|
478
|
+
class InnerPluginViewSet(SimpleGenericViewSet):
|
|
479
|
+
"""内置插件视图集
|
|
480
|
+
|
|
481
|
+
提供内置插件的查询功能
|
|
482
|
+
"""
|
|
483
|
+
|
|
484
|
+
lookup_field = "code"
|
|
485
|
+
|
|
486
|
+
@swagger_auto_schema(
|
|
487
|
+
method="GET",
|
|
488
|
+
operation_summary="获取内置插件列表",
|
|
489
|
+
operation_description="获取系统内置的所有插件列表,包括标准原子、子流程等",
|
|
490
|
+
query_serializer=SpaceSerializer,
|
|
491
|
+
tags=["插件管理"],
|
|
492
|
+
)
|
|
493
|
+
@action(methods=["GET"], detail=False)
|
|
494
|
+
@token_inject
|
|
495
|
+
@params_valid(SpaceSerializer)
|
|
496
|
+
def plugins(self, request, params):
|
|
497
|
+
client = get_redirect_client_with_auth(request)
|
|
498
|
+
data = client.bkflow.list_inner_plugins(params, headers={API_TOKEN_HEADER_KEY: request.token})
|
|
499
|
+
return Response(data)
|
|
500
|
+
|
|
501
|
+
@swagger_auto_schema(
|
|
502
|
+
method="GET",
|
|
503
|
+
operation_summary="获取内置插件详情",
|
|
504
|
+
operation_description="获取指定内置插件的详细配置信息,包括输入输出参数定义",
|
|
505
|
+
query_serializer=InnerPluginDetailSerializer,
|
|
506
|
+
tags=["插件管理"],
|
|
507
|
+
)
|
|
508
|
+
@action(methods=["GET"], detail=True)
|
|
509
|
+
@token_inject
|
|
510
|
+
@params_valid(InnerPluginDetailSerializer)
|
|
511
|
+
def plugin_detail(self, request, code, params):
|
|
512
|
+
client = get_redirect_client_with_auth(request)
|
|
513
|
+
data = client.bkflow.get_inner_plugin_detail(
|
|
514
|
+
params, path_params={"code": code}, headers={API_TOKEN_HEADER_KEY: request.token}
|
|
515
|
+
)
|
|
516
|
+
return Response(data)
|
|
517
|
+
|
|
518
|
+
|
|
519
|
+
class PluginServiceViewSet(SimpleGenericViewSet):
|
|
520
|
+
"""第三方插件服务视图集
|
|
521
|
+
|
|
522
|
+
提供第三方插件的管理功能
|
|
523
|
+
"""
|
|
524
|
+
|
|
525
|
+
lookup_field = "plugin_code"
|
|
526
|
+
|
|
527
|
+
@swagger_auto_schema(
|
|
528
|
+
method="GET", operation_summary="获取插件标签分类", operation_description="获取第三方插件的标签分类信息,用于插件分组展示", tags=["插件管理"]
|
|
529
|
+
)
|
|
530
|
+
@action(methods=["GET"], detail=False)
|
|
531
|
+
def tags(self, request):
|
|
532
|
+
client = get_redirect_client_with_auth(request)
|
|
533
|
+
response = client.bkflow.list_plugin_tags()
|
|
534
|
+
return Response(response)
|
|
535
|
+
|
|
536
|
+
@swagger_auto_schema(
|
|
537
|
+
method="GET",
|
|
538
|
+
operation_summary="获取第三方插件元数据",
|
|
539
|
+
operation_description="获取指定第三方插件的元信息,包括插件版本、作者等基础信息",
|
|
540
|
+
query_serializer=GetServicePluginSerializer,
|
|
541
|
+
tags=["插件管理"],
|
|
542
|
+
)
|
|
543
|
+
@action(methods=["GET"], detail=False)
|
|
544
|
+
@params_valid(GetServicePluginSerializer)
|
|
545
|
+
def meta(self, request, params):
|
|
546
|
+
client = get_redirect_client_with_auth(request)
|
|
547
|
+
data = client.bkflow.get_plugin_meta(params)
|
|
548
|
+
return Response(data)
|
|
549
|
+
|
|
550
|
+
@swagger_auto_schema(
|
|
551
|
+
method="GET",
|
|
552
|
+
operation_summary="获取第三方插件配置详情",
|
|
553
|
+
operation_description="获取指定第三方插件的完整配置信息,包括表单定义、输出参数等",
|
|
554
|
+
query_serializer=ServicePluginDetailSerializer,
|
|
555
|
+
tags=["插件管理"],
|
|
556
|
+
)
|
|
557
|
+
@action(methods=["GET"], detail=False)
|
|
558
|
+
@params_valid(ServicePluginDetailSerializer)
|
|
559
|
+
def plugin_detail(self, request, params):
|
|
560
|
+
client = get_redirect_client_with_auth(request)
|
|
561
|
+
data = client.bkflow.get_service_plugin_detail(params)
|
|
562
|
+
return Response(data)
|
|
563
|
+
|
|
564
|
+
@swagger_auto_schema(
|
|
565
|
+
method="GET",
|
|
566
|
+
operation_summary="获取第三方插件列表",
|
|
567
|
+
operation_description="获取第三方插件列表",
|
|
568
|
+
query_serializer=BKPluginSerializer,
|
|
569
|
+
tags=["插件管理"],
|
|
570
|
+
)
|
|
571
|
+
@action(methods=["GET"], detail=False)
|
|
572
|
+
@params_valid(BKPluginSerializer)
|
|
573
|
+
def list_plugin(self, request, params):
|
|
574
|
+
client = get_redirect_client_with_auth(request)
|
|
575
|
+
data = client.bkflow.list_plugin(**params)
|
|
576
|
+
return Response(data)
|
|
577
|
+
|
|
578
|
+
@swagger_auto_schema(
|
|
579
|
+
method="GET",
|
|
580
|
+
operation_summary="获取插件服务App详情",
|
|
581
|
+
operation_description="获取插件服务App详情",
|
|
582
|
+
query_serializer=PluginCodeQuerySerializer,
|
|
583
|
+
tags=["插件管理"],
|
|
584
|
+
)
|
|
585
|
+
@action(methods=["GET"], detail=False)
|
|
586
|
+
@params_valid(PluginCodeQuerySerializer)
|
|
587
|
+
def get_plugin_app_detail(self, request, params):
|
|
588
|
+
client = get_redirect_client_with_auth(request)
|
|
589
|
+
data = client.bkflow.get_plugin_app_detail(**params)
|
|
590
|
+
return Response(data)
|
|
591
|
+
|
|
592
|
+
|
|
593
|
+
class UniformApiViewSet(SimpleGenericViewSet):
|
|
594
|
+
"""统一 API 插件视图集
|
|
595
|
+
|
|
596
|
+
提供统一 API 插件的查询功能
|
|
597
|
+
"""
|
|
598
|
+
|
|
599
|
+
lookup_field = "space_id"
|
|
600
|
+
|
|
601
|
+
@swagger_auto_schema(
|
|
602
|
+
method="GET",
|
|
603
|
+
operation_summary="获取统一 API 插件列表",
|
|
604
|
+
operation_description="获取指定空间下的统一 API 插件分类列表",
|
|
605
|
+
query_serializer=UniFormAPiSerializer,
|
|
606
|
+
tags=["插件管理"],
|
|
607
|
+
)
|
|
608
|
+
@action(methods=["GET"], detail=False)
|
|
609
|
+
@token_inject
|
|
610
|
+
@params_valid(UniFormAPiSerializer)
|
|
611
|
+
def category_list(self, request, params):
|
|
612
|
+
client = get_redirect_client_with_auth(request)
|
|
613
|
+
data = client.bkflow.uniform_api(
|
|
614
|
+
params,
|
|
615
|
+
path_params={
|
|
616
|
+
"space_id": params.get("space_id"),
|
|
617
|
+
},
|
|
618
|
+
headers={API_TOKEN_HEADER_KEY: request.token},
|
|
619
|
+
)
|
|
620
|
+
return Response(data)
|
|
621
|
+
|
|
622
|
+
|
|
623
|
+
class SystemVariableViewSet(SimpleGenericViewSet):
|
|
624
|
+
"""系统变量视图集
|
|
625
|
+
|
|
626
|
+
提供系统变量和自定义变量的管理功能
|
|
627
|
+
"""
|
|
628
|
+
|
|
629
|
+
lookup_field = "variable_id"
|
|
630
|
+
|
|
631
|
+
@swagger_auto_schema(
|
|
632
|
+
method="GET", operation_summary="获取系统变量列表", operation_description="获取系统预定义的所有变量列表,如当前用户、当前时间等", tags=["流程变量"]
|
|
633
|
+
)
|
|
634
|
+
@action(methods=["GET"], detail=False)
|
|
635
|
+
@token_inject
|
|
636
|
+
def system_variables(self, request):
|
|
637
|
+
client = get_redirect_client_with_auth(request)
|
|
638
|
+
response = client.bkflow.system_variables(headers={API_TOKEN_HEADER_KEY: request.token})
|
|
639
|
+
return Response(response)
|
|
640
|
+
|
|
641
|
+
@swagger_auto_schema(
|
|
642
|
+
method="GET", operation_summary="获取自定义变量列表", operation_description="获取系统中定义的所有自定义变量类型列表", tags=["流程变量"]
|
|
643
|
+
)
|
|
644
|
+
@action(methods=["GET"], detail=False)
|
|
645
|
+
def variable_class_list(self, request):
|
|
646
|
+
client = get_redirect_client_with_auth(request)
|
|
647
|
+
response = client.bkflow.variable_class_list()
|
|
648
|
+
return Response(response)
|
|
649
|
+
|
|
650
|
+
@swagger_auto_schema(
|
|
651
|
+
method="GET", operation_summary="获取自定义变量详情", operation_description="获取指定自定义变量的详细配置信息", tags=["流程变量"]
|
|
652
|
+
)
|
|
653
|
+
@action(methods=["GET"], detail=True)
|
|
654
|
+
def variable_class_detail(self, request, variable_id):
|
|
655
|
+
client = get_redirect_client_with_auth(request)
|
|
656
|
+
response = client.bkflow.variable_class_detail(path_params={"variable_id": variable_id})
|
|
657
|
+
return Response(response)
|
|
658
|
+
|
|
659
|
+
@swagger_auto_schema(
|
|
660
|
+
method="GET",
|
|
661
|
+
operation_summary="检测变量 Key 是否合法",
|
|
662
|
+
operation_description="检测变量 Key 的命名是否符合规范,是否已被使用",
|
|
663
|
+
query_serializer=CheckVariableKeySerializer,
|
|
664
|
+
tags=["流程变量"],
|
|
665
|
+
)
|
|
666
|
+
@action(methods=["GET"], detail=False)
|
|
667
|
+
@params_valid(CheckVariableKeySerializer)
|
|
668
|
+
def check_variable_key(self, request, params):
|
|
669
|
+
client = get_redirect_client_with_auth(request)
|
|
670
|
+
response = client.bkflow.check_variable_key(**params)
|
|
671
|
+
return Response(response)
|
|
672
|
+
|
|
673
|
+
@swagger_auto_schema(
|
|
674
|
+
method="POST",
|
|
675
|
+
operation_summary="获取常量预览结果",
|
|
676
|
+
operation_description="预览流程常量的实际值,用于调试和验证变量引用",
|
|
677
|
+
request_body=GetConstantPreviewResultSerializer,
|
|
678
|
+
tags=["流程变量"],
|
|
679
|
+
)
|
|
680
|
+
@action(methods=["POST"], detail=False)
|
|
681
|
+
@params_valid(GetConstantPreviewResultSerializer)
|
|
682
|
+
def get_constant_preview_result(self, request, params):
|
|
683
|
+
client = get_redirect_client_with_auth(request)
|
|
684
|
+
response = client.bkflow.get_constant_preview_result(**params)
|
|
685
|
+
return Response(response)
|
|
686
|
+
|
|
687
|
+
|
|
688
|
+
class DecisionTableViewSet(SimpleGenericViewSet):
|
|
689
|
+
"""决策表视图集
|
|
690
|
+
|
|
691
|
+
提供决策表插件的管理功能
|
|
692
|
+
"""
|
|
693
|
+
|
|
694
|
+
lookup_field = "template_id"
|
|
695
|
+
|
|
696
|
+
@swagger_auto_schema(
|
|
697
|
+
method="GET",
|
|
698
|
+
operation_summary="获取决策表插件列表",
|
|
699
|
+
operation_description="获取用户创建的决策表插件列表,支持分页查询",
|
|
700
|
+
query_serializer=DecisionTableSerializer,
|
|
701
|
+
tags=["插件管理"],
|
|
702
|
+
)
|
|
703
|
+
@action(methods=["GET"], detail=False)
|
|
704
|
+
@token_inject
|
|
705
|
+
@params_valid(DecisionTableSerializer)
|
|
706
|
+
def lists(self, request, params):
|
|
707
|
+
client = get_redirect_client_with_auth(request)
|
|
708
|
+
data = client.bkflow.list_decision(params, headers={API_TOKEN_HEADER_KEY: request.token})
|
|
709
|
+
return Response(data)
|
|
710
|
+
|
|
711
|
+
|
|
712
|
+
class TemplateSnapshotViewSet(SimpleGenericViewSet):
|
|
713
|
+
|
|
714
|
+
lookup_field = "snapshot_id"
|
|
715
|
+
|
|
716
|
+
@swagger_auto_schema(
|
|
717
|
+
method="GET",
|
|
718
|
+
operation_summary="获取流程快照列表",
|
|
719
|
+
operation_description="获取流程快照列表,支持分页查询",
|
|
720
|
+
query_serializer=SnapshotSerializer,
|
|
721
|
+
tags=["流程快照"],
|
|
722
|
+
)
|
|
723
|
+
@action(methods=["GET"], detail=False)
|
|
724
|
+
@token_inject
|
|
725
|
+
@params_valid(SnapshotSerializer)
|
|
726
|
+
def list_snapshot(self, request, params):
|
|
727
|
+
client = get_redirect_client_with_auth(request)
|
|
728
|
+
data = client.bkflow.list_snapshot(headers={API_TOKEN_HEADER_KEY: request.token}, **params)
|
|
729
|
+
return Response(data)
|
|
730
|
+
|
|
731
|
+
@swagger_auto_schema(
|
|
732
|
+
method="POST",
|
|
733
|
+
operation_summary="删除流程快照",
|
|
734
|
+
operation_description="删除流程快照",
|
|
735
|
+
query_serializer=SnapshotSerializer,
|
|
736
|
+
tags=["流程快照"],
|
|
737
|
+
)
|
|
738
|
+
@action(methods=["POST"], detail=True)
|
|
739
|
+
@token_inject
|
|
740
|
+
@params_valid(SnapshotSerializer)
|
|
741
|
+
def delete_snapshot(self, request, snapshot_id, params):
|
|
742
|
+
pre_template_signal.send(sender="rollback_template", request_data=params)
|
|
743
|
+
client = get_redirect_client_with_auth(request)
|
|
744
|
+
data = client.bkflow.delete_snapshot(
|
|
745
|
+
path_params={"snapshot_id": snapshot_id}, headers={API_TOKEN_HEADER_KEY: request.token}, **params
|
|
746
|
+
)
|
|
747
|
+
post_template_signal.send(sender="rollback_template", request_data=params)
|
|
748
|
+
return Response(data)
|