deepfos 1.1.60__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 (175) hide show
  1. deepfos/__init__.py +6 -0
  2. deepfos/_version.py +21 -0
  3. deepfos/algo/__init__.py +0 -0
  4. deepfos/algo/graph.py +171 -0
  5. deepfos/algo/segtree.py +31 -0
  6. deepfos/api/V1_1/__init__.py +0 -0
  7. deepfos/api/V1_1/business_model.py +119 -0
  8. deepfos/api/V1_1/dimension.py +599 -0
  9. deepfos/api/V1_1/models/__init__.py +0 -0
  10. deepfos/api/V1_1/models/business_model.py +1033 -0
  11. deepfos/api/V1_1/models/dimension.py +2768 -0
  12. deepfos/api/V1_2/__init__.py +0 -0
  13. deepfos/api/V1_2/dimension.py +285 -0
  14. deepfos/api/V1_2/models/__init__.py +0 -0
  15. deepfos/api/V1_2/models/dimension.py +2923 -0
  16. deepfos/api/__init__.py +0 -0
  17. deepfos/api/account.py +167 -0
  18. deepfos/api/accounting_engines.py +147 -0
  19. deepfos/api/app.py +626 -0
  20. deepfos/api/approval_process.py +198 -0
  21. deepfos/api/base.py +983 -0
  22. deepfos/api/business_model.py +160 -0
  23. deepfos/api/consolidation.py +129 -0
  24. deepfos/api/consolidation_process.py +106 -0
  25. deepfos/api/datatable.py +341 -0
  26. deepfos/api/deep_pipeline.py +61 -0
  27. deepfos/api/deepconnector.py +36 -0
  28. deepfos/api/deepfos_task.py +92 -0
  29. deepfos/api/deepmodel.py +188 -0
  30. deepfos/api/dimension.py +486 -0
  31. deepfos/api/financial_model.py +319 -0
  32. deepfos/api/journal_model.py +119 -0
  33. deepfos/api/journal_template.py +132 -0
  34. deepfos/api/memory_financial_model.py +98 -0
  35. deepfos/api/models/__init__.py +3 -0
  36. deepfos/api/models/account.py +483 -0
  37. deepfos/api/models/accounting_engines.py +756 -0
  38. deepfos/api/models/app.py +1338 -0
  39. deepfos/api/models/approval_process.py +1043 -0
  40. deepfos/api/models/base.py +234 -0
  41. deepfos/api/models/business_model.py +805 -0
  42. deepfos/api/models/consolidation.py +711 -0
  43. deepfos/api/models/consolidation_process.py +248 -0
  44. deepfos/api/models/datatable_mysql.py +427 -0
  45. deepfos/api/models/deep_pipeline.py +55 -0
  46. deepfos/api/models/deepconnector.py +28 -0
  47. deepfos/api/models/deepfos_task.py +386 -0
  48. deepfos/api/models/deepmodel.py +308 -0
  49. deepfos/api/models/dimension.py +1576 -0
  50. deepfos/api/models/financial_model.py +1796 -0
  51. deepfos/api/models/journal_model.py +341 -0
  52. deepfos/api/models/journal_template.py +854 -0
  53. deepfos/api/models/memory_financial_model.py +478 -0
  54. deepfos/api/models/platform.py +178 -0
  55. deepfos/api/models/python.py +221 -0
  56. deepfos/api/models/reconciliation_engine.py +411 -0
  57. deepfos/api/models/reconciliation_report.py +161 -0
  58. deepfos/api/models/role_strategy.py +884 -0
  59. deepfos/api/models/smartlist.py +237 -0
  60. deepfos/api/models/space.py +1137 -0
  61. deepfos/api/models/system.py +1065 -0
  62. deepfos/api/models/variable.py +463 -0
  63. deepfos/api/models/workflow.py +946 -0
  64. deepfos/api/platform.py +199 -0
  65. deepfos/api/python.py +90 -0
  66. deepfos/api/reconciliation_engine.py +181 -0
  67. deepfos/api/reconciliation_report.py +64 -0
  68. deepfos/api/role_strategy.py +234 -0
  69. deepfos/api/smartlist.py +69 -0
  70. deepfos/api/space.py +582 -0
  71. deepfos/api/system.py +372 -0
  72. deepfos/api/variable.py +154 -0
  73. deepfos/api/workflow.py +264 -0
  74. deepfos/boost/__init__.py +6 -0
  75. deepfos/boost/py_jstream.py +89 -0
  76. deepfos/boost/py_pandas.py +20 -0
  77. deepfos/cache.py +121 -0
  78. deepfos/config.py +6 -0
  79. deepfos/core/__init__.py +27 -0
  80. deepfos/core/cube/__init__.py +10 -0
  81. deepfos/core/cube/_base.py +462 -0
  82. deepfos/core/cube/constants.py +21 -0
  83. deepfos/core/cube/cube.py +408 -0
  84. deepfos/core/cube/formula.py +707 -0
  85. deepfos/core/cube/syscube.py +532 -0
  86. deepfos/core/cube/typing.py +7 -0
  87. deepfos/core/cube/utils.py +238 -0
  88. deepfos/core/dimension/__init__.py +11 -0
  89. deepfos/core/dimension/_base.py +506 -0
  90. deepfos/core/dimension/dimcreator.py +184 -0
  91. deepfos/core/dimension/dimension.py +472 -0
  92. deepfos/core/dimension/dimexpr.py +271 -0
  93. deepfos/core/dimension/dimmember.py +155 -0
  94. deepfos/core/dimension/eledimension.py +22 -0
  95. deepfos/core/dimension/filters.py +99 -0
  96. deepfos/core/dimension/sysdimension.py +168 -0
  97. deepfos/core/logictable/__init__.py +5 -0
  98. deepfos/core/logictable/_cache.py +141 -0
  99. deepfos/core/logictable/_operator.py +663 -0
  100. deepfos/core/logictable/nodemixin.py +673 -0
  101. deepfos/core/logictable/sqlcondition.py +609 -0
  102. deepfos/core/logictable/tablemodel.py +497 -0
  103. deepfos/db/__init__.py +36 -0
  104. deepfos/db/cipher.py +660 -0
  105. deepfos/db/clickhouse.py +191 -0
  106. deepfos/db/connector.py +195 -0
  107. deepfos/db/daclickhouse.py +171 -0
  108. deepfos/db/dameng.py +101 -0
  109. deepfos/db/damysql.py +189 -0
  110. deepfos/db/dbkits.py +358 -0
  111. deepfos/db/deepengine.py +99 -0
  112. deepfos/db/deepmodel.py +82 -0
  113. deepfos/db/deepmodel_kingbase.py +83 -0
  114. deepfos/db/edb.py +214 -0
  115. deepfos/db/gauss.py +83 -0
  116. deepfos/db/kingbase.py +83 -0
  117. deepfos/db/mysql.py +184 -0
  118. deepfos/db/oracle.py +131 -0
  119. deepfos/db/postgresql.py +192 -0
  120. deepfos/db/sqlserver.py +99 -0
  121. deepfos/db/utils.py +135 -0
  122. deepfos/element/__init__.py +89 -0
  123. deepfos/element/accounting.py +348 -0
  124. deepfos/element/apvlprocess.py +215 -0
  125. deepfos/element/base.py +398 -0
  126. deepfos/element/bizmodel.py +1269 -0
  127. deepfos/element/datatable.py +2467 -0
  128. deepfos/element/deep_pipeline.py +186 -0
  129. deepfos/element/deepconnector.py +59 -0
  130. deepfos/element/deepmodel.py +1806 -0
  131. deepfos/element/dimension.py +1254 -0
  132. deepfos/element/fact_table.py +427 -0
  133. deepfos/element/finmodel.py +1485 -0
  134. deepfos/element/journal.py +840 -0
  135. deepfos/element/journal_template.py +943 -0
  136. deepfos/element/pyscript.py +412 -0
  137. deepfos/element/reconciliation.py +553 -0
  138. deepfos/element/rolestrategy.py +243 -0
  139. deepfos/element/smartlist.py +457 -0
  140. deepfos/element/variable.py +756 -0
  141. deepfos/element/workflow.py +560 -0
  142. deepfos/exceptions/__init__.py +239 -0
  143. deepfos/exceptions/hook.py +86 -0
  144. deepfos/lazy.py +104 -0
  145. deepfos/lazy_import.py +84 -0
  146. deepfos/lib/__init__.py +0 -0
  147. deepfos/lib/_javaobj.py +366 -0
  148. deepfos/lib/asynchronous.py +879 -0
  149. deepfos/lib/concurrency.py +107 -0
  150. deepfos/lib/constant.py +39 -0
  151. deepfos/lib/decorator.py +310 -0
  152. deepfos/lib/deepchart.py +778 -0
  153. deepfos/lib/deepux.py +477 -0
  154. deepfos/lib/discovery.py +273 -0
  155. deepfos/lib/edb_lexer.py +789 -0
  156. deepfos/lib/eureka.py +156 -0
  157. deepfos/lib/filterparser.py +751 -0
  158. deepfos/lib/httpcli.py +106 -0
  159. deepfos/lib/jsonstreamer.py +80 -0
  160. deepfos/lib/msg.py +394 -0
  161. deepfos/lib/nacos.py +225 -0
  162. deepfos/lib/patch.py +92 -0
  163. deepfos/lib/redis.py +241 -0
  164. deepfos/lib/serutils.py +181 -0
  165. deepfos/lib/stopwatch.py +99 -0
  166. deepfos/lib/subtask.py +572 -0
  167. deepfos/lib/sysutils.py +703 -0
  168. deepfos/lib/utils.py +1003 -0
  169. deepfos/local.py +160 -0
  170. deepfos/options.py +670 -0
  171. deepfos/translation.py +237 -0
  172. deepfos-1.1.60.dist-info/METADATA +33 -0
  173. deepfos-1.1.60.dist-info/RECORD +175 -0
  174. deepfos-1.1.60.dist-info/WHEEL +5 -0
  175. deepfos-1.1.60.dist-info/top_level.txt +1 -0
@@ -0,0 +1,560 @@
1
+ from functools import partial
2
+ from typing import *
3
+
4
+ import pandas as pd
5
+ from pydantic import parse_obj_as
6
+
7
+ from deepfos.api.models.workflow import *
8
+ from deepfos.api.workflow import WorkFlowAPI
9
+ from deepfos.element.base import ElementBase, SyncMeta
10
+ from deepfos.lib.asynchronous import future_property
11
+ from deepfos.lib.utils import fetch_all_pages, CIEnum
12
+
13
+ __all__ = [
14
+ 'CompareType',
15
+ 'StatusType',
16
+ 'AsyncWorkFlow',
17
+ 'WorkFlow',
18
+ ]
19
+
20
+
21
+ class ScopeType(CIEnum):
22
+ all_subscriber = "ALL_SUBSCRIBER"
23
+ process_instance = "PROCESS_INSTANCE"
24
+
25
+
26
+ class CompareType(CIEnum):
27
+ equal = "EQUAL"
28
+ like = "LIKE"
29
+
30
+
31
+ class StatusType(CIEnum):
32
+ #: 进行中
33
+ in_progress = "InProgress"
34
+ #: 已完成
35
+ completed = "Completed"
36
+ #: 已终止
37
+ terminated = "Terminated"
38
+
39
+
40
+ def _get_record_count(response: Union[UnderwayPageInfo, TodoPageInfo, PageInfo]):
41
+ if response.lists is None:
42
+ return 0
43
+ return len(response.lists)
44
+
45
+
46
+ # -----------------------------------------------------------------------------
47
+ # core
48
+ class AsyncWorkFlow(ElementBase[WorkFlowAPI]):
49
+ """工作流"""
50
+ @future_property
51
+ async def all_version(self) -> List[ProcessVersionVO]:
52
+ """所有版本信息"""
53
+ api = await self.wait_for('async_api')
54
+ ele_info = await self.wait_for('element_info')
55
+ return await api.version_control.list(
56
+ self.element_name,
57
+ ele_info.folderId
58
+ )
59
+
60
+ @future_property
61
+ async def msg_list(self) -> List[Message]:
62
+ """消息列表"""
63
+ api = await self.wait_for('async_api')
64
+ ele_info = await self.wait_for('element_info')
65
+ return await api.message.list(ele_info)
66
+
67
+ @future_property
68
+ async def global_params(self) -> List[Value]:
69
+ """全局变量"""
70
+ api = await self.wait_for('async_api')
71
+ ele_info = await self.wait_for('element_info')
72
+ return await api.instance.global_params(ele_info)
73
+
74
+ @future_property
75
+ async def launch_params(self) -> List[ProcessLaunchParamsVO]:
76
+ """启动参数"""
77
+ api = await self.wait_for('async_api')
78
+ ele_info = await self.wait_for('element_info')
79
+ return await api.process.launch_params(
80
+ self.element_name, ele_info.folderId
81
+ )
82
+
83
+ async def _send_msg(
84
+ self,
85
+ msg_code: str,
86
+ msg_body: Dict[str, Any],
87
+ processes: List[str] = None,
88
+ scope: ScopeType = ScopeType.all_subscriber
89
+ ):
90
+ scope_info = MessageScope(type=ScopeType.all_subscriber)
91
+
92
+ if scope == ScopeType.process_instance:
93
+ scope_info = MessageScope(
94
+ processInstanceIds=processes,
95
+ type=ScopeType.process_instance
96
+ )
97
+
98
+ return await self.async_api.process.send_message(
99
+ SendMessageParam(
100
+ messageInfo=MessageInfo(
101
+ messageBody=msg_body,
102
+ messageCode=msg_code,
103
+ relateProcess=self.element_info
104
+ ),
105
+ scope=scope_info
106
+ )
107
+ )
108
+
109
+ async def broadcast(self, msg_code: str, msg_body: Dict[str, Any]):
110
+ """广播发送消息至所有订阅者
111
+
112
+ Args:
113
+ msg_code: 消息编码,消息编码全集信息来自消息列表
114
+ msg_body: 消息体,消息体格式信息来自消息列表
115
+
116
+ See Also:
117
+ :attr:`msg_list`, 用于查看当前工作流的消息列表
118
+ :func:`send_msg_to_processes`, 发送消息至流程实例列表
119
+
120
+ """
121
+ if msg_code is None:
122
+ raise ValueError("msg_code不可为空")
123
+
124
+ return await self._send_msg(msg_code, msg_body)
125
+
126
+ async def send_msg_to_processes(
127
+ self,
128
+ msg_code: str,
129
+ msg_body: Dict[str, Any],
130
+ processes: List[str]
131
+ ):
132
+ """发送消息至流程实例列表
133
+
134
+ Args:
135
+ msg_code: 消息编码,消息编码全集信息来自消息列表
136
+ msg_body: 消息体,消息体格式信息来自消息列表
137
+ processes: 目标流程实例id列表
138
+
139
+ See Also:
140
+ :attr:`msg_list`, 用于查看当前工作流的消息列表
141
+ :func:`broadcast`, 广播发送消息至所有订阅者
142
+
143
+ """
144
+ if msg_code is None:
145
+ raise ValueError("msg_code不可为空")
146
+
147
+ return await self._send_msg(msg_code, msg_body, processes, ScopeType.process_instance)
148
+
149
+ async def launch_process(
150
+ self,
151
+ param: Dict = None,
152
+ file_path: str = None,
153
+ comment: str = None
154
+ ) -> LaunchReturnVO:
155
+ """启动流程
156
+
157
+ Args:
158
+ param: 启动参数
159
+ file_path: 附件路径
160
+ comment: 备注
161
+
162
+ """
163
+ return await self.async_api.process.launch(
164
+ ProcessLaunchDTO(
165
+ paramMap=param,
166
+ filePath=file_path,
167
+ comment=comment,
168
+ elementDetail=self.element_info
169
+ )
170
+ )
171
+
172
+ async def batch_launch_process(
173
+ self,
174
+ params: Union[
175
+ List[Dict[str, str]],
176
+ List[ProcessStartMultipleDTO]
177
+ ] = None
178
+ ) -> List[LaunchReturnForBatchVO]:
179
+ """批量启动流程
180
+
181
+ Args:
182
+ params: 启动参数集合列表
183
+
184
+ """
185
+ if params is not None and not isinstance(params, list):
186
+ raise TypeError('params参数应为List类型')
187
+
188
+ if isinstance(params, list):
189
+ params = parse_obj_as(List[ProcessStartMultipleDTO], params)
190
+
191
+ return await self.async_api.process.launch_batch(
192
+ ProcessLaunchMultipleDTO(
193
+ multipleParams=params,
194
+ elementDetail=self.element_info
195
+ )
196
+ )
197
+
198
+ async def get_process_by_param(
199
+ self,
200
+ param: Dict,
201
+ version: str = None
202
+ ) -> List[ProcessInstanceVO]:
203
+ """通过启动参数查询流程实例
204
+
205
+ Args:
206
+ param: 启动参数
207
+ version: 可选,工作流版本,默认为最新版本
208
+
209
+ See Also:
210
+ :func:`get_process_by_business_key`
211
+
212
+ """
213
+ return await self.async_api.process.process_instance_get_by_launch_params(
214
+ LaunchParamsDTO(elementDetail=self.element_info, paramMap=param, version=version)
215
+ )
216
+
217
+ async def get_process_by_business_key(
218
+ self,
219
+ business_key: str,
220
+ compare_type: Union[CompareType, str] = CompareType.equal,
221
+ version: str = None
222
+ ) -> List[ProcessInstanceVO]:
223
+ """通过业务键查询流程实例
224
+
225
+ Args:
226
+ business_key: 业务键
227
+ compare_type: 业务键匹配方式为equal还是like,默认为equal
228
+ version: 可选,工作流版本,默认为最新版本
229
+
230
+ See Also:
231
+ :func:`get_process_by_param`
232
+
233
+ """
234
+ if business_key is None:
235
+ raise ValueError("business_key不可为空")
236
+
237
+ return await self.async_api.process.process_instance_get_by_business_key(
238
+ BusinessKeyQueryDTO(
239
+ elementDetail=self.element_info,
240
+ businessKey=BusinessKey(compareType=CompareType[compare_type], key=business_key),
241
+ version=version
242
+ )
243
+ )
244
+
245
+ async def get_task_by_param(
246
+ self,
247
+ param: Dict,
248
+ version: str = None
249
+ ) -> List[TaskInstanceVO]:
250
+ """通过启动参数查询任务实例
251
+
252
+ Args:
253
+ param: 启动参数
254
+ version: 可选,工作流版本,默认为最新版本
255
+
256
+ See Also:
257
+ :func:`get_task_by_business_key`
258
+
259
+ """
260
+ return await self.async_api.process.task_instance_get_by_launch_params(
261
+ LaunchParamsDTO(elementDetail=self.element_info, paramMap=param, version=version)
262
+ )
263
+
264
+ async def get_task_by_business_key(
265
+ self,
266
+ business_key: str,
267
+ compare_type: Union[CompareType, str] = CompareType.equal,
268
+ version: str = None
269
+ ) -> List[TaskInstanceVO]:
270
+ """通过业务键查询任务实例
271
+
272
+ Args:
273
+ business_key: 业务键
274
+ compare_type: 业务键匹配方式为equal还是like,默认为equal
275
+ version: 可选,工作流版本,默认为最新版本
276
+
277
+ See Also:
278
+ :func:`get_task_by_param`
279
+
280
+ """
281
+ if business_key is None:
282
+ raise ValueError("business_key不可为空")
283
+
284
+ return await self.async_api.process.task_instance_get_by_business_key(
285
+ BusinessKeyQueryDTO(
286
+ elementDetail=self.element_info,
287
+ businessKey=BusinessKey(compareType=CompareType[compare_type], key=business_key),
288
+ version=version
289
+ )
290
+ )
291
+
292
+ async def complete_task_by_id(
293
+ self,
294
+ task_id: str,
295
+ comment: str = None,
296
+ file_path: str = None,
297
+ outcome: str = None,
298
+ ) -> bool:
299
+ """完成任务实例
300
+
301
+ Args:
302
+ task_id: 任务实例id
303
+ comment: 备注
304
+ file_path: 附件路径
305
+ outcome: 结果选项,在任务可选结果不唯一时,必须提供
306
+
307
+ Returns:
308
+ True: 成功
309
+ False: 失败
310
+
311
+ """
312
+ return await self.async_api.task.express_complete(
313
+ TaskCompleteInstance(comment=comment, filePath=file_path, outcome=outcome, taskId=task_id)
314
+ )
315
+
316
+ async def list_process(
317
+ self,
318
+ status: List[Union[str, StatusType]] = None,
319
+ as_dataframe: bool = False
320
+ ) -> Union[pd.DataFrame, List[Optional[FlowInstanceDto]]]:
321
+ """查看流程
322
+
323
+ Args:
324
+ status: 筛选列表,默认筛选进行中
325
+ 筛选可选值: 进行中: in_progress; 已完成: completed; 已终止: terminated
326
+
327
+ as_dataframe: 是否将结果处理为pd.DataFrame
328
+
329
+ Returns:
330
+ - 如果 ``as_dataframe == False``, 返回 :obj:`List[FlowInstanceDto]` 类型
331
+ - 如果 ``as_dataframe == True``,返回 :obj:`DataFrame` 类型
332
+
333
+ """
334
+ if status is None:
335
+ status = [StatusType.in_progress]
336
+ else:
337
+ status = [StatusType[s] for s in status]
338
+
339
+ fn = partial(
340
+ self._query_process_impl,
341
+ status=','.join(status),
342
+ call_api=self.async_api.instance.monitor_page
343
+ )
344
+
345
+ pages = await fetch_all_pages(
346
+ fn,
347
+ count_getter=_get_record_count,
348
+ page_size=200,
349
+ page_no_key='page_no',
350
+ page_size_key='page_size'
351
+ )
352
+
353
+ raw_result = [record for page in pages if page.lists for record in page.lists]
354
+
355
+ if not as_dataframe:
356
+ return raw_result
357
+
358
+ if len(raw_result) == 0:
359
+ return pd.DataFrame(columns=FlowInstanceDto.__fields__)
360
+
361
+ return pd.DataFrame([dto.dict() for dto in raw_result])
362
+
363
+ @staticmethod
364
+ def _query_task_impl(status, call_api, page_no, page_size):
365
+ return call_api(UserTaskQueryDTO(status=status, pageNo=page_no, pageSize=page_size))
366
+
367
+ @staticmethod
368
+ def _query_process_impl(status, call_api, page_no, page_size):
369
+ return call_api(
370
+ processInstanceQueryDTO=FlowInstanceQueryDto(status=status, pageNo=page_no, pageSize=page_size)
371
+ )
372
+
373
+ async def list_my_task(
374
+ self,
375
+ status: List[Union[str, StatusType]] = None,
376
+ as_dataframe: bool = False
377
+ ) -> Union[pd.DataFrame, List[UserTaskVO]]:
378
+ """查看我的任务
379
+
380
+ Args:
381
+ status: 筛选列表,默认筛选进行中
382
+ 筛选可选值: 进行中: in_progress; 已完成: completed; 已终止: terminated
383
+
384
+ as_dataframe: 是否将结果处理为pd.DataFrame
385
+
386
+ Returns:
387
+ - 如果 ``as_dataframe == False``, 返回 :obj:`List[UserTaskVO]` 类型
388
+ - 如果 ``as_dataframe == True``,返回 :obj:`DataFrame` 类型
389
+
390
+ """
391
+ if status is None:
392
+ status = [StatusType.in_progress]
393
+ else:
394
+ status = [StatusType[s] for s in status]
395
+
396
+ fn = partial(
397
+ self._query_task_impl,
398
+ status=','.join(status),
399
+ call_api=self.async_api.task.myTask_list_page
400
+ )
401
+
402
+ pages = await fetch_all_pages(
403
+ fn,
404
+ count_getter=_get_record_count,
405
+ page_size=200,
406
+ page_no_key='page_no',
407
+ page_size_key='page_size'
408
+ )
409
+
410
+ raw_result = [record for page in pages if page.lists for record in page.lists]
411
+
412
+ if not as_dataframe:
413
+ return raw_result
414
+
415
+ if len(raw_result) == 0:
416
+ return pd.DataFrame(columns=UserTaskVO.__fields__)
417
+
418
+ return pd.DataFrame([dto.dict() for dto in raw_result])
419
+
420
+ async def list_claim_task(
421
+ self,
422
+ as_dataframe: bool = False
423
+ ) -> Union[pd.DataFrame, List[UserTaskVO]]:
424
+ """查看待认领任务
425
+
426
+ Args:
427
+ as_dataframe: 是否将结果处理为pd.DataFrame
428
+
429
+ Returns:
430
+ - 如果 ``as_dataframe == False``, 返回 :obj:`List[UserTaskVO]` 类型
431
+ - 如果 ``as_dataframe == True``,返回 :obj:`DataFrame` 类型
432
+
433
+ """
434
+ fn = partial(
435
+ self._query_task_impl,
436
+ status='',
437
+ call_api=self.async_api.task.claim_list_page
438
+ )
439
+
440
+ pages = await fetch_all_pages(
441
+ fn,
442
+ count_getter=_get_record_count,
443
+ page_size=200,
444
+ page_no_key='page_no',
445
+ page_size_key='page_size'
446
+ )
447
+
448
+ raw_result = [record for page in pages if page.lists for record in page.lists]
449
+
450
+ if not as_dataframe:
451
+ return raw_result
452
+
453
+ if len(raw_result) == 0:
454
+ return pd.DataFrame(columns=UserTaskVO.__fields__)
455
+
456
+ return pd.DataFrame([dto.dict() for dto in raw_result])
457
+
458
+
459
+ class WorkFlow(AsyncWorkFlow, metaclass=SyncMeta):
460
+ synchronize = (
461
+ 'broadcast',
462
+ 'send_msg_to_processes',
463
+ 'launch_process',
464
+ 'batch_launch_process',
465
+ 'get_process_by_param',
466
+ 'get_process_by_business_key',
467
+ 'get_task_by_param',
468
+ 'get_task_by_business_key',
469
+ 'complete_task_by_id',
470
+ 'list_process',
471
+ 'list_my_task',
472
+ 'list_claim_task',
473
+ )
474
+ if TYPE_CHECKING: # pragma: no cover
475
+ def broadcast(self, msg_code: str, msg_body: Dict[str, Any]):
476
+ ...
477
+
478
+ def send_msg_to_processes(
479
+ self,
480
+ msg_code: str,
481
+ msg_body: Dict[str, Any],
482
+ processes: List[str]
483
+ ):
484
+ ...
485
+
486
+ def launch_process(
487
+ self,
488
+ param: Dict = None,
489
+ file_path: str = None,
490
+ comment: str = None
491
+ ) -> LaunchReturnVO:
492
+ ...
493
+
494
+ def batch_launch_process(
495
+ self,
496
+ params: Union[
497
+ List[Dict[str, str]],
498
+ List[ProcessStartMultipleDTO]
499
+ ] = None
500
+ ) -> List[LaunchReturnForBatchVO]:
501
+ ...
502
+
503
+ def get_process_by_param(
504
+ self,
505
+ param: Dict,
506
+ version: str = None
507
+ ) -> List[ProcessInstanceVO]:
508
+ ...
509
+
510
+ def get_process_by_business_key(
511
+ self,
512
+ business_key: str,
513
+ compare_type: Union[CompareType, str] = CompareType.equal,
514
+ version: str = None
515
+ ) -> List[ProcessInstanceVO]:
516
+ ...
517
+
518
+ def get_task_by_param(
519
+ self,
520
+ param: Dict,
521
+ version: str = None
522
+ ) -> List[TaskInstanceVO]:
523
+ ...
524
+
525
+ def get_task_by_business_key(
526
+ self,
527
+ business_key: str,
528
+ compare_type: Union[CompareType, str] = CompareType.equal,
529
+ version: str = None
530
+ ) -> List[TaskInstanceVO]:
531
+ ...
532
+
533
+ def complete_task_by_id(
534
+ self,
535
+ task_id: str,
536
+ comment: str = None,
537
+ file_path: str = None,
538
+ outcome: str = None,
539
+ ) -> bool:
540
+ ...
541
+
542
+ def list_process(
543
+ self,
544
+ status: List[Union[str, StatusType]] = None,
545
+ as_dataframe: bool = False
546
+ ) -> Union[pd.DataFrame, List[Optional[FlowInstanceDto]]]:
547
+ ...
548
+
549
+ def list_my_task(
550
+ self,
551
+ status: List[Union[str, StatusType]] = None,
552
+ as_dataframe: bool = False
553
+ ) -> Union[pd.DataFrame, List[UserTaskVO]]:
554
+ ...
555
+
556
+ def list_claim_task(
557
+ self,
558
+ as_dataframe: bool = False
559
+ ) -> Union[pd.DataFrame, List[UserTaskVO]]:
560
+ ...