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.
- deepfos/__init__.py +6 -0
- deepfos/_version.py +21 -0
- deepfos/algo/__init__.py +0 -0
- deepfos/algo/graph.py +171 -0
- deepfos/algo/segtree.py +31 -0
- deepfos/api/V1_1/__init__.py +0 -0
- deepfos/api/V1_1/business_model.py +119 -0
- deepfos/api/V1_1/dimension.py +599 -0
- deepfos/api/V1_1/models/__init__.py +0 -0
- deepfos/api/V1_1/models/business_model.py +1033 -0
- deepfos/api/V1_1/models/dimension.py +2768 -0
- deepfos/api/V1_2/__init__.py +0 -0
- deepfos/api/V1_2/dimension.py +285 -0
- deepfos/api/V1_2/models/__init__.py +0 -0
- deepfos/api/V1_2/models/dimension.py +2923 -0
- deepfos/api/__init__.py +0 -0
- deepfos/api/account.py +167 -0
- deepfos/api/accounting_engines.py +147 -0
- deepfos/api/app.py +626 -0
- deepfos/api/approval_process.py +198 -0
- deepfos/api/base.py +983 -0
- deepfos/api/business_model.py +160 -0
- deepfos/api/consolidation.py +129 -0
- deepfos/api/consolidation_process.py +106 -0
- deepfos/api/datatable.py +341 -0
- deepfos/api/deep_pipeline.py +61 -0
- deepfos/api/deepconnector.py +36 -0
- deepfos/api/deepfos_task.py +92 -0
- deepfos/api/deepmodel.py +188 -0
- deepfos/api/dimension.py +486 -0
- deepfos/api/financial_model.py +319 -0
- deepfos/api/journal_model.py +119 -0
- deepfos/api/journal_template.py +132 -0
- deepfos/api/memory_financial_model.py +98 -0
- deepfos/api/models/__init__.py +3 -0
- deepfos/api/models/account.py +483 -0
- deepfos/api/models/accounting_engines.py +756 -0
- deepfos/api/models/app.py +1338 -0
- deepfos/api/models/approval_process.py +1043 -0
- deepfos/api/models/base.py +234 -0
- deepfos/api/models/business_model.py +805 -0
- deepfos/api/models/consolidation.py +711 -0
- deepfos/api/models/consolidation_process.py +248 -0
- deepfos/api/models/datatable_mysql.py +427 -0
- deepfos/api/models/deep_pipeline.py +55 -0
- deepfos/api/models/deepconnector.py +28 -0
- deepfos/api/models/deepfos_task.py +386 -0
- deepfos/api/models/deepmodel.py +308 -0
- deepfos/api/models/dimension.py +1576 -0
- deepfos/api/models/financial_model.py +1796 -0
- deepfos/api/models/journal_model.py +341 -0
- deepfos/api/models/journal_template.py +854 -0
- deepfos/api/models/memory_financial_model.py +478 -0
- deepfos/api/models/platform.py +178 -0
- deepfos/api/models/python.py +221 -0
- deepfos/api/models/reconciliation_engine.py +411 -0
- deepfos/api/models/reconciliation_report.py +161 -0
- deepfos/api/models/role_strategy.py +884 -0
- deepfos/api/models/smartlist.py +237 -0
- deepfos/api/models/space.py +1137 -0
- deepfos/api/models/system.py +1065 -0
- deepfos/api/models/variable.py +463 -0
- deepfos/api/models/workflow.py +946 -0
- deepfos/api/platform.py +199 -0
- deepfos/api/python.py +90 -0
- deepfos/api/reconciliation_engine.py +181 -0
- deepfos/api/reconciliation_report.py +64 -0
- deepfos/api/role_strategy.py +234 -0
- deepfos/api/smartlist.py +69 -0
- deepfos/api/space.py +582 -0
- deepfos/api/system.py +372 -0
- deepfos/api/variable.py +154 -0
- deepfos/api/workflow.py +264 -0
- deepfos/boost/__init__.py +6 -0
- deepfos/boost/py_jstream.py +89 -0
- deepfos/boost/py_pandas.py +20 -0
- deepfos/cache.py +121 -0
- deepfos/config.py +6 -0
- deepfos/core/__init__.py +27 -0
- deepfos/core/cube/__init__.py +10 -0
- deepfos/core/cube/_base.py +462 -0
- deepfos/core/cube/constants.py +21 -0
- deepfos/core/cube/cube.py +408 -0
- deepfos/core/cube/formula.py +707 -0
- deepfos/core/cube/syscube.py +532 -0
- deepfos/core/cube/typing.py +7 -0
- deepfos/core/cube/utils.py +238 -0
- deepfos/core/dimension/__init__.py +11 -0
- deepfos/core/dimension/_base.py +506 -0
- deepfos/core/dimension/dimcreator.py +184 -0
- deepfos/core/dimension/dimension.py +472 -0
- deepfos/core/dimension/dimexpr.py +271 -0
- deepfos/core/dimension/dimmember.py +155 -0
- deepfos/core/dimension/eledimension.py +22 -0
- deepfos/core/dimension/filters.py +99 -0
- deepfos/core/dimension/sysdimension.py +168 -0
- deepfos/core/logictable/__init__.py +5 -0
- deepfos/core/logictable/_cache.py +141 -0
- deepfos/core/logictable/_operator.py +663 -0
- deepfos/core/logictable/nodemixin.py +673 -0
- deepfos/core/logictable/sqlcondition.py +609 -0
- deepfos/core/logictable/tablemodel.py +497 -0
- deepfos/db/__init__.py +36 -0
- deepfos/db/cipher.py +660 -0
- deepfos/db/clickhouse.py +191 -0
- deepfos/db/connector.py +195 -0
- deepfos/db/daclickhouse.py +171 -0
- deepfos/db/dameng.py +101 -0
- deepfos/db/damysql.py +189 -0
- deepfos/db/dbkits.py +358 -0
- deepfos/db/deepengine.py +99 -0
- deepfos/db/deepmodel.py +82 -0
- deepfos/db/deepmodel_kingbase.py +83 -0
- deepfos/db/edb.py +214 -0
- deepfos/db/gauss.py +83 -0
- deepfos/db/kingbase.py +83 -0
- deepfos/db/mysql.py +184 -0
- deepfos/db/oracle.py +131 -0
- deepfos/db/postgresql.py +192 -0
- deepfos/db/sqlserver.py +99 -0
- deepfos/db/utils.py +135 -0
- deepfos/element/__init__.py +89 -0
- deepfos/element/accounting.py +348 -0
- deepfos/element/apvlprocess.py +215 -0
- deepfos/element/base.py +398 -0
- deepfos/element/bizmodel.py +1269 -0
- deepfos/element/datatable.py +2467 -0
- deepfos/element/deep_pipeline.py +186 -0
- deepfos/element/deepconnector.py +59 -0
- deepfos/element/deepmodel.py +1806 -0
- deepfos/element/dimension.py +1254 -0
- deepfos/element/fact_table.py +427 -0
- deepfos/element/finmodel.py +1485 -0
- deepfos/element/journal.py +840 -0
- deepfos/element/journal_template.py +943 -0
- deepfos/element/pyscript.py +412 -0
- deepfos/element/reconciliation.py +553 -0
- deepfos/element/rolestrategy.py +243 -0
- deepfos/element/smartlist.py +457 -0
- deepfos/element/variable.py +756 -0
- deepfos/element/workflow.py +560 -0
- deepfos/exceptions/__init__.py +239 -0
- deepfos/exceptions/hook.py +86 -0
- deepfos/lazy.py +104 -0
- deepfos/lazy_import.py +84 -0
- deepfos/lib/__init__.py +0 -0
- deepfos/lib/_javaobj.py +366 -0
- deepfos/lib/asynchronous.py +879 -0
- deepfos/lib/concurrency.py +107 -0
- deepfos/lib/constant.py +39 -0
- deepfos/lib/decorator.py +310 -0
- deepfos/lib/deepchart.py +778 -0
- deepfos/lib/deepux.py +477 -0
- deepfos/lib/discovery.py +273 -0
- deepfos/lib/edb_lexer.py +789 -0
- deepfos/lib/eureka.py +156 -0
- deepfos/lib/filterparser.py +751 -0
- deepfos/lib/httpcli.py +106 -0
- deepfos/lib/jsonstreamer.py +80 -0
- deepfos/lib/msg.py +394 -0
- deepfos/lib/nacos.py +225 -0
- deepfos/lib/patch.py +92 -0
- deepfos/lib/redis.py +241 -0
- deepfos/lib/serutils.py +181 -0
- deepfos/lib/stopwatch.py +99 -0
- deepfos/lib/subtask.py +572 -0
- deepfos/lib/sysutils.py +703 -0
- deepfos/lib/utils.py +1003 -0
- deepfos/local.py +160 -0
- deepfos/options.py +670 -0
- deepfos/translation.py +237 -0
- deepfos-1.1.60.dist-info/METADATA +33 -0
- deepfos-1.1.60.dist-info/RECORD +175 -0
- deepfos-1.1.60.dist-info/WHEEL +5 -0
- deepfos-1.1.60.dist-info/top_level.txt +1 -0
deepfos/api/app.py
ADDED
|
@@ -0,0 +1,626 @@
|
|
|
1
|
+
"""
|
|
2
|
+
APIs provided by app-server
|
|
3
|
+
|
|
4
|
+
generated by model_code_gen.py
|
|
5
|
+
- **filename** : ``app.py``
|
|
6
|
+
- **json timestamp** : ``2022-08-16 10:07:18``
|
|
7
|
+
"""
|
|
8
|
+
from .base import RootAPI, ChildAPI, get, post
|
|
9
|
+
from .models.app import *
|
|
10
|
+
from deepfos.options import OPTION
|
|
11
|
+
from deepfos.lib.decorator import cached_property
|
|
12
|
+
from typing import List, Dict, Union, Any, Awaitable
|
|
13
|
+
from pydantic import BaseModel as PydanticBaseModel
|
|
14
|
+
|
|
15
|
+
__all__ = ['AppAPI']
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class AppElementInfoAPI(ChildAPI):
|
|
19
|
+
endpoint = '/element-info'
|
|
20
|
+
|
|
21
|
+
@post('copy-element')
|
|
22
|
+
def copy_element(self, copyElementDto: CopyElementDto, copyBusinessDataTag: bool = None) -> Union[int, Awaitable[int]]:
|
|
23
|
+
"""
|
|
24
|
+
复制文件夹或元素
|
|
25
|
+
|
|
26
|
+
对目标文件夹无写入权限,无法复制;复制操作默认跳过无权限元素(含同名合
|
|
27
|
+
并);合并文件夹下存在同名元素,根据用户选择的替换列表更新元素,不替换
|
|
28
|
+
_copy新增平台复制完成后根据组件登记时的后置通知配置信息,通知组件
|
|
29
|
+
处理后续业务;注:带业务数据标识的元素直接调用对应组件服务依赖组件复制
|
|
30
|
+
"""
|
|
31
|
+
return {'body': copyElementDto, 'param': {'copyBusinessDataTag': copyBusinessDataTag}}
|
|
32
|
+
|
|
33
|
+
@post('copy-folders-elements')
|
|
34
|
+
def copy_folders_elements(self, copyElementDtoList: List[CopyElementDto], copyBusinessDataTag: bool = None) -> Union[int, Awaitable[int]]:
|
|
35
|
+
"""
|
|
36
|
+
批量复制文件夹和元素
|
|
37
|
+
|
|
38
|
+
对目标文件夹无写入权限,无法复制;复制操作默认跳过无权限元素(含同名合
|
|
39
|
+
并);合并文件夹下存在同名元素,根据用户选择的替换列表更新元素,不替换
|
|
40
|
+
_copy新增平台复制完成后根据组件登记时的后置通知配置信息,通知组件
|
|
41
|
+
处理后续业务;批量复制发生异常时复制操作将停止,该异常前已复制成功的文
|
|
42
|
+
件夹/元素不受影响注:带业务数据标识的元素直接调用对应组件服务依赖组件
|
|
43
|
+
复制
|
|
44
|
+
"""
|
|
45
|
+
return {
|
|
46
|
+
'body': copyElementDtoList,
|
|
47
|
+
'param': {'copyBusinessDataTag': copyBusinessDataTag},
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@get('get-all-element')
|
|
51
|
+
def get_all_element(self, elementType: str = None) -> Union[List[ElementInfoPO], Awaitable[List[ElementInfoPO]]]:
|
|
52
|
+
"""
|
|
53
|
+
查询所有元素基础信息
|
|
54
|
+
|
|
55
|
+
"""
|
|
56
|
+
return {'param': {'elementType': elementType}}
|
|
57
|
+
|
|
58
|
+
@post('get-element-folder/by-folder-list')
|
|
59
|
+
def get_element_folder_by_folder_list(self, folderList: List[FolderInfo]) -> Union[List[ElementFolderTree], Awaitable[List[ElementFolderTree]]]:
|
|
60
|
+
"""
|
|
61
|
+
根据文件夹id查询所有子集数据接口
|
|
62
|
+
|
|
63
|
+
查询某文件夹下所有文件夹及元素信息,返回树形结构
|
|
64
|
+
"""
|
|
65
|
+
return {'body': folderList}
|
|
66
|
+
|
|
67
|
+
@post('get-element-folder/by-folder-list-relation')
|
|
68
|
+
def get_element_folder_by_folder_list_relation(self, folderInfoAddRelation: FolderInfoAddRelation) -> Union[List[ElementFolderTree], Awaitable[List[ElementFolderTree]]]:
|
|
69
|
+
"""
|
|
70
|
+
根据文件夹id,元素id查询所有子集数据及关联元素接口
|
|
71
|
+
|
|
72
|
+
查询某文件夹下所有文件夹及元素信息以及关联元素,返回树形结构
|
|
73
|
+
"""
|
|
74
|
+
return {'body': folderInfoAddRelation}
|
|
75
|
+
|
|
76
|
+
@post('get-server-names')
|
|
77
|
+
def get_server_names(self, queryElementInfoByTypeDtoList: List[QueryElementInfoByTypeDto]) -> Union[List[ModuleServerNameVO], Awaitable[List[ModuleServerNameVO]]]:
|
|
78
|
+
"""
|
|
79
|
+
批量获取组件服务名
|
|
80
|
+
|
|
81
|
+
根据元素名称,类型,路径/文件夹等条件查询元素对应组件id,再调用
|
|
82
|
+
space服务根据组件id查询组件详细信息(批量)接口(含服务名)
|
|
83
|
+
"""
|
|
84
|
+
return {'body': queryElementInfoByTypeDtoList}
|
|
85
|
+
|
|
86
|
+
@post('get-server-names/v2')
|
|
87
|
+
def get_server_names_v2(self, queryModuleServerNameDtoList: List[QueryModuleServerNameDto]) -> Union[List[ModuleServerNamesVO], Awaitable[List[ModuleServerNamesVO]]]:
|
|
88
|
+
"""
|
|
89
|
+
批量获取组件服务名带错误信息
|
|
90
|
+
|
|
91
|
+
根据元素名称,类型,路径/文件夹等条件查询元素对应组件id,再调用
|
|
92
|
+
space服务根据组件id查询组件详细信息(批量)接口(含服务名)
|
|
93
|
+
"""
|
|
94
|
+
return {'body': queryModuleServerNameDtoList}
|
|
95
|
+
|
|
96
|
+
@get('list')
|
|
97
|
+
def list(self, folderId: str = None, moduleIdList: List[str] = None, path: str = None) -> Union[List[FolderListVO], Awaitable[List[FolderListVO]]]:
|
|
98
|
+
"""
|
|
99
|
+
查询指定目录下元素列表接口
|
|
100
|
+
|
|
101
|
+
查询某文件夹下所有文件夹及元素,其中元素描述多语言信息
|
|
102
|
+
elementNameDes通过元素id和language从
|
|
103
|
+
app_element_name_des表取
|
|
104
|
+
"""
|
|
105
|
+
return {'param': {'folderId': folderId, 'moduleIdList': moduleIdList, 'path': path}}
|
|
106
|
+
|
|
107
|
+
@get('list-all')
|
|
108
|
+
def list_all(self, ) -> Union[List[FolderListVO], Awaitable[List[FolderListVO]]]:
|
|
109
|
+
"""
|
|
110
|
+
查询所有元素列表信息
|
|
111
|
+
|
|
112
|
+
查询当前app下所有文件夹及元素列表,其中元素描述多语言信息
|
|
113
|
+
elementNameDes通过元素id和language从
|
|
114
|
+
app_element_name_des表取
|
|
115
|
+
"""
|
|
116
|
+
return {}
|
|
117
|
+
|
|
118
|
+
@post('modify-element-name')
|
|
119
|
+
def modify_element_name(self, modifyElementNameDto: ModifyElementNameDto) -> Union[int, Awaitable[int]]:
|
|
120
|
+
"""
|
|
121
|
+
修改元素名称
|
|
122
|
+
|
|
123
|
+
修改元素名称,存在关联元素时也需修改关联元素名称
|
|
124
|
+
"""
|
|
125
|
+
return {'body': modifyElementNameDto}
|
|
126
|
+
|
|
127
|
+
@post('move-element')
|
|
128
|
+
def move_element(self, moveElementDto: MoveElementDto) -> Union[int, Awaitable[int]]:
|
|
129
|
+
"""
|
|
130
|
+
移动文件夹或元素
|
|
131
|
+
|
|
132
|
+
对目标文件夹无写入权限,无法移动;移动操作默认跳过无权限元素(含同名合
|
|
133
|
+
并);合并文件夹下存在同名元素,根据用户选择的替换列表更新元素
|
|
134
|
+
"""
|
|
135
|
+
return {'body': moveElementDto}
|
|
136
|
+
|
|
137
|
+
@post('move-folders-elements')
|
|
138
|
+
def move_folders_elements(self, moveElementDtoList: List[MoveElementDto]) -> Union[int, Awaitable[int]]:
|
|
139
|
+
"""
|
|
140
|
+
批量移动文件夹和元素
|
|
141
|
+
|
|
142
|
+
对目标文件夹无写入权限,无法移动;移动操作默认跳过无权限元素(含同名合
|
|
143
|
+
并);合并文件夹下存在同名元素,根据用户选择的替换列表更新元素
|
|
144
|
+
"""
|
|
145
|
+
return {'body': moveElementDtoList}
|
|
146
|
+
|
|
147
|
+
@post('register/usable')
|
|
148
|
+
def register_usable(self, elementRegisterUsableQueryDtoList: List[ElementRegisterUsableQueryDto]) -> Union[List[ElementRegisterStatusInfoVo], Awaitable[List[ElementRegisterStatusInfoVo]]]:
|
|
149
|
+
"""
|
|
150
|
+
查询元素是否可用
|
|
151
|
+
|
|
152
|
+
根据元素名称、类型、文件夹id拿到元素对应组件id,再根据组件id分别
|
|
153
|
+
调用space获取其可用状态、system服务获取服务基本信息
|
|
154
|
+
"""
|
|
155
|
+
return {'body': elementRegisterUsableQueryDtoList}
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
class AppElementRelatioinAPI(ChildAPI):
|
|
159
|
+
endpoint = '/element-relations'
|
|
160
|
+
|
|
161
|
+
@get('by-cite')
|
|
162
|
+
def by_cite(self, elementType: str, elementName: str, folderId: str = None, path: str = None, relationType: List[str] = None) -> Union[List[ElementRelationInfo], Awaitable[List[ElementRelationInfo]]]:
|
|
163
|
+
"""
|
|
164
|
+
获取某元素关联引用的元素列表接口
|
|
165
|
+
|
|
166
|
+
"""
|
|
167
|
+
return {
|
|
168
|
+
'param': {
|
|
169
|
+
'elementName': elementName,
|
|
170
|
+
'elementType': elementType,
|
|
171
|
+
'folderId': folderId,
|
|
172
|
+
'path': path,
|
|
173
|
+
'relationType': relationType,
|
|
174
|
+
},
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
@get('by-cited')
|
|
178
|
+
def by_cited(self, elementType: str, elementName: str, folderId: str = None, path: str = None, relationType: List[str] = None) -> Union[List[ElementRelationInfo], Awaitable[List[ElementRelationInfo]]]:
|
|
179
|
+
"""
|
|
180
|
+
获取某元素关联被引用的元素列表接口
|
|
181
|
+
|
|
182
|
+
"""
|
|
183
|
+
return {
|
|
184
|
+
'param': {
|
|
185
|
+
'elementName': elementName,
|
|
186
|
+
'elementType': elementType,
|
|
187
|
+
'folderId': folderId,
|
|
188
|
+
'path': path,
|
|
189
|
+
'relationType': relationType,
|
|
190
|
+
},
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
@post('referenced-element')
|
|
194
|
+
def referenced_element(self, elementInfoBaseDtoList: List[ElementInfoBaseDto]) -> Union[List[ReferencedElementVO], Awaitable[List[ReferencedElementVO]]]:
|
|
195
|
+
"""
|
|
196
|
+
获取某元素关联被引用的元素列表接口-批量
|
|
197
|
+
|
|
198
|
+
获取某元素关联被引用的元素列表-批量
|
|
199
|
+
"""
|
|
200
|
+
return {'body': elementInfoBaseDtoList}
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
class AppElementAPI(ChildAPI):
|
|
204
|
+
endpoint = '/element'
|
|
205
|
+
|
|
206
|
+
@post('element-upgrade')
|
|
207
|
+
def element_upgrade(self, elementUpgradeInfoDtoList: List[ElementUpgradeInfoDto]) -> Union[ElementUpgradeInfo, Awaitable[ElementUpgradeInfo]]:
|
|
208
|
+
"""
|
|
209
|
+
元素升级接口
|
|
210
|
+
|
|
211
|
+
"""
|
|
212
|
+
return {'body': elementUpgradeInfoDtoList}
|
|
213
|
+
|
|
214
|
+
@get('upgrade-info')
|
|
215
|
+
def upgrade_info(self, type: str, name: str, folderId: str) -> Union[List[ElementUpgradeInfoVO], Awaitable[List[ElementUpgradeInfoVO]]]:
|
|
216
|
+
"""
|
|
217
|
+
元素升级信息查询接口
|
|
218
|
+
|
|
219
|
+
"""
|
|
220
|
+
return {'param': {'folderId': folderId, 'name': name, 'type': type}}
|
|
221
|
+
|
|
222
|
+
@post('upgrade-info-batch')
|
|
223
|
+
def upgrade_info_batch(self, list: List[UpgradeInfoQuerryDto]) -> Union[List[ElementUpgradeInfoVO], Awaitable[List[ElementUpgradeInfoVO]]]:
|
|
224
|
+
"""
|
|
225
|
+
元素升级信息批量查询接口
|
|
226
|
+
|
|
227
|
+
"""
|
|
228
|
+
return {'body': list}
|
|
229
|
+
|
|
230
|
+
@get('upgrade-log/by-id')
|
|
231
|
+
def upgrade_log_by_id(self, id: int) -> Union[ElementUpgradeInfo, Awaitable[ElementUpgradeInfo]]:
|
|
232
|
+
"""
|
|
233
|
+
根据升级记录主表id查询元素升级记录接口
|
|
234
|
+
|
|
235
|
+
"""
|
|
236
|
+
return {'param': {'id': id}}
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
class AppElementsAPI(ChildAPI):
|
|
240
|
+
endpoint = '/elements'
|
|
241
|
+
|
|
242
|
+
def _get_description(self, desc: Union[PydanticBaseModel, dict]):
|
|
243
|
+
if desc is None:
|
|
244
|
+
return None
|
|
245
|
+
if isinstance(desc, PydanticBaseModel):
|
|
246
|
+
desc = desc.dict(by_alias=True)
|
|
247
|
+
|
|
248
|
+
new_desc = {
|
|
249
|
+
k: v
|
|
250
|
+
for k, v in desc.items() if v
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
if not new_desc:
|
|
254
|
+
return None
|
|
255
|
+
return new_desc
|
|
256
|
+
|
|
257
|
+
@get('check-element-exist')
|
|
258
|
+
def check_element_exist(self, elementType: str, elementName: str, folderId: str = None, path: str = None) -> Union[bool, Awaitable[bool]]:
|
|
259
|
+
"""
|
|
260
|
+
根据元素名称/类型/路径(或文件夹id)校验该元素是否已经存在
|
|
261
|
+
|
|
262
|
+
若path绝对路径有传参数,则以路径为准,通过路径去
|
|
263
|
+
folder_info表拿folderId,再通过元素名称/类型/文件
|
|
264
|
+
夹id查询元素是否存在
|
|
265
|
+
"""
|
|
266
|
+
return {
|
|
267
|
+
'param': {
|
|
268
|
+
'elementName': elementName,
|
|
269
|
+
'elementType': elementType,
|
|
270
|
+
'folderId': folderId,
|
|
271
|
+
'path': path,
|
|
272
|
+
},
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
@post('check-element-exist-by-list')
|
|
276
|
+
def check_element_exist_by_list(self, checkElementExistDtoList: List[ElementExistsDto]) -> Union[List[ElementExistsVo], Awaitable[List[ElementExistsVo]]]:
|
|
277
|
+
"""
|
|
278
|
+
根据元素名称/类型/路径(或文件夹id)批量校验该元素是否已经存在
|
|
279
|
+
|
|
280
|
+
若path绝对路径有传参数,则以路径为准,通过路径去
|
|
281
|
+
folder_info表拿folderId,再通过元素名称/类型
|
|
282
|
+
/folderId查询element_info元素是否存在
|
|
283
|
+
"""
|
|
284
|
+
return {'body': checkElementExistDtoList}
|
|
285
|
+
|
|
286
|
+
@get('check-element-exist/v2')
|
|
287
|
+
def check_element_exist_v2(self, elementType: str, elementName: str, folderId: str = None, path: str = None, toFolderId: str = None, toPath: str = None) -> Union[ElementBaseInfoVO, Awaitable[ElementBaseInfoVO]]:
|
|
288
|
+
"""
|
|
289
|
+
根据元素名称/类型/路径(或文件夹id)/相对路径(或相对文件夹id)校验该元素是否已经存在
|
|
290
|
+
|
|
291
|
+
若path绝对/相对路径有传参数,则以路径为准,根据路径去
|
|
292
|
+
folder_info表拿文件夹id,再通过元素名称/类型/文件夹
|
|
293
|
+
id查询元素是否存在
|
|
294
|
+
"""
|
|
295
|
+
return {
|
|
296
|
+
'param': {
|
|
297
|
+
'elementName': elementName,
|
|
298
|
+
'elementType': elementType,
|
|
299
|
+
'folderId': folderId,
|
|
300
|
+
'path': path,
|
|
301
|
+
'toFolderId': toFolderId,
|
|
302
|
+
'toPath': toPath,
|
|
303
|
+
},
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
@post('confirm-element')
|
|
307
|
+
def confirm_element(self, confirmElementInfoDto: ConfirmElementInfoDto) -> Union[int, Awaitable[int]]:
|
|
308
|
+
"""
|
|
309
|
+
元素实例创建确认
|
|
310
|
+
|
|
311
|
+
元素表保存了元素创建完成标识confirm,未创建完成的数据不显示,元
|
|
312
|
+
素实例创建完成可通过该接口更改为已确认
|
|
313
|
+
"""
|
|
314
|
+
return {'body': confirmElementInfoDto}
|
|
315
|
+
|
|
316
|
+
@post('create-element')
|
|
317
|
+
def create_element(self, createElementInfoDto: CreateElementInfoDto) -> Union[ElementVO, Awaitable[ElementVO]]:
|
|
318
|
+
"""
|
|
319
|
+
元素实例创建
|
|
320
|
+
|
|
321
|
+
"""
|
|
322
|
+
createElementInfoDto.elementNameDesAll = self._get_description(createElementInfoDto.elementNameDesAll)
|
|
323
|
+
return {'body': createElementInfoDto}
|
|
324
|
+
|
|
325
|
+
@post('del-element')
|
|
326
|
+
def del_element(self, removeElementInfoDtoList: List[RemoveElementInfoDto], confirm: bool = None) -> Union[int, Awaitable[int]]:
|
|
327
|
+
"""
|
|
328
|
+
元素实例删除
|
|
329
|
+
|
|
330
|
+
"""
|
|
331
|
+
return {'body': removeElementInfoDtoList, 'param': {'confirm': confirm}}
|
|
332
|
+
|
|
333
|
+
@get('element-infos')
|
|
334
|
+
def list_element_infos(self, elementType: str) -> Union[List[ElementInfoVO], Awaitable[List[ElementInfoVO]]]:
|
|
335
|
+
"""
|
|
336
|
+
根据元素类型查询元素信息
|
|
337
|
+
|
|
338
|
+
"""
|
|
339
|
+
return {'param': {'elementType': elementType}}
|
|
340
|
+
|
|
341
|
+
@post('get-element-info-base-by-id')
|
|
342
|
+
def get_element_info_base_by_id(self, elementInfoIdList: List[str]) -> Union[List[ElementInfoBaseVO], Awaitable[List[ElementInfoBaseVO]]]:
|
|
343
|
+
"""
|
|
344
|
+
根据元素id批量查询元素基本信息(入参最大100,超过100返回空)
|
|
345
|
+
|
|
346
|
+
"""
|
|
347
|
+
return {'body': elementInfoIdList}
|
|
348
|
+
|
|
349
|
+
@post('get-element-info-by-id')
|
|
350
|
+
def get_element_info_by_id(self, elementInfoIdList: List[str]) -> Union[List[ElementInfoVO], Awaitable[List[ElementInfoVO]]]:
|
|
351
|
+
"""
|
|
352
|
+
根据元素id批量查询元素信息(入参最大100,超过100返回空)
|
|
353
|
+
|
|
354
|
+
"""
|
|
355
|
+
return {'body': elementInfoIdList}
|
|
356
|
+
|
|
357
|
+
@get('get-element-info-by-name/base-info')
|
|
358
|
+
def get_element_info_by_name(self, elementName: str, elementType: str = None) -> Union[List[ElementRelationInfo], Awaitable[List[ElementRelationInfo]]]:
|
|
359
|
+
"""
|
|
360
|
+
根据元素名称查询元素信息
|
|
361
|
+
|
|
362
|
+
"""
|
|
363
|
+
return {'param': {'elementName': elementName, 'elementType': elementType}}
|
|
364
|
+
|
|
365
|
+
@post('get-element-info-by-type')
|
|
366
|
+
def get_element_info_by_type(self, queryElementInfoByTypeDtoList: List[QueryElementInfoByTypeDto]) -> Union[List[ElementInfoVO], Awaitable[List[ElementInfoVO]]]:
|
|
367
|
+
"""
|
|
368
|
+
元素信息查询
|
|
369
|
+
|
|
370
|
+
"""
|
|
371
|
+
return {'body': queryElementInfoByTypeDtoList}
|
|
372
|
+
|
|
373
|
+
@post('get-element-permission-by-type')
|
|
374
|
+
def get_element_permission_by_type(self, queryElementPermissionByTypeDtoList: List[QueryElementPermissionByTypeDto]) -> Union[List[ElementPermissionVO], Awaitable[List[ElementPermissionVO]]]:
|
|
375
|
+
"""
|
|
376
|
+
元素权限查询
|
|
377
|
+
|
|
378
|
+
根据元素类型,名称,路径/文件夹id查询元素的权限
|
|
379
|
+
"""
|
|
380
|
+
return {'body': queryElementPermissionByTypeDtoList}
|
|
381
|
+
|
|
382
|
+
@post('get-elements-by-protocol')
|
|
383
|
+
def get_elements_by_protocol(self, queryElementInfoByProtocolDto: QueryElementInfoByProtocolDto, eqElementTypeChild: List[str] = None, includeElementType: str = None) -> Union[List[ElementInfoForProtocolVO], Awaitable[List[ElementInfoForProtocolVO]]]:
|
|
384
|
+
"""
|
|
385
|
+
根据组件使用的协议查询支持的元素实例接口
|
|
386
|
+
|
|
387
|
+
调用space服务获取使用该协议和版本的所有组件,再通过组件id获取元
|
|
388
|
+
素信息
|
|
389
|
+
"""
|
|
390
|
+
return {
|
|
391
|
+
'body': queryElementInfoByProtocolDto,
|
|
392
|
+
'param': {
|
|
393
|
+
'eqElementTypeChild': eqElementTypeChild,
|
|
394
|
+
'includeElementType': includeElementType,
|
|
395
|
+
},
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
@post('get-elements-by-protocol-list')
|
|
399
|
+
def get_elements_by_protocol_list(self, queryElementInfoByProtocolDtoList: List[QueryElementInfoByProtocolDto], elementType: List[str] = None, eqElementTypeChild: List[str] = None) -> Union[List[ElementInfoForProtocolVO], Awaitable[List[ElementInfoForProtocolVO]]]:
|
|
400
|
+
"""
|
|
401
|
+
根据组件使用的协议查询支持的元素实例(批量)接口
|
|
402
|
+
|
|
403
|
+
调用space服务获取使用该协议和版本的所有组件,再通过组件id获取元
|
|
404
|
+
素信息(批量)
|
|
405
|
+
"""
|
|
406
|
+
return {
|
|
407
|
+
'body': queryElementInfoByProtocolDtoList,
|
|
408
|
+
'param': {
|
|
409
|
+
'elementType': elementType,
|
|
410
|
+
'eqElementTypeChild': eqElementTypeChild,
|
|
411
|
+
},
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
@get('get-menu-list')
|
|
415
|
+
def get_menu_list(self, ) -> Union[List[ElementVO], Awaitable[List[ElementVO]]]:
|
|
416
|
+
"""
|
|
417
|
+
获取菜单列表接口
|
|
418
|
+
|
|
419
|
+
查询element-type为MEN的元素信息
|
|
420
|
+
"""
|
|
421
|
+
return {}
|
|
422
|
+
|
|
423
|
+
@post('save-element')
|
|
424
|
+
def save_element(self, createElementInfoDto: CreateElementInfoDto) -> Union[int, Awaitable[int]]:
|
|
425
|
+
"""
|
|
426
|
+
元素实例保存
|
|
427
|
+
|
|
428
|
+
元素不存在创建元素,该元素所在文件夹不存在先创建文件夹再创建元素;否则
|
|
429
|
+
修改元素信息
|
|
430
|
+
"""
|
|
431
|
+
return {'body': createElementInfoDto}
|
|
432
|
+
|
|
433
|
+
@post('update-element')
|
|
434
|
+
def update_element(self, modifyElementInfoDto: ModifyElementInfoDto) -> Union[int, Awaitable[int]]:
|
|
435
|
+
"""
|
|
436
|
+
元素实例更新
|
|
437
|
+
|
|
438
|
+
"""
|
|
439
|
+
modifyElementInfoDto.elementNameDesAll = self._get_description(modifyElementInfoDto.elementNameDesAll)
|
|
440
|
+
return {'body': modifyElementInfoDto}
|
|
441
|
+
|
|
442
|
+
@post('update-element-warning')
|
|
443
|
+
def update_element_warning(self, elementWarningDefend: ElementWarningDefend) -> Union[Any, Awaitable[Any]]:
|
|
444
|
+
"""
|
|
445
|
+
维护元素信息警告标识接口
|
|
446
|
+
|
|
447
|
+
根据path和folderId获取最终有效的folderId,根据
|
|
448
|
+
elementName、elementType、folderId更新
|
|
449
|
+
element_info表对应元素el_warning字段值
|
|
450
|
+
"""
|
|
451
|
+
return {'body': elementWarningDefend}
|
|
452
|
+
|
|
453
|
+
|
|
454
|
+
class AppFolderAPI(ChildAPI):
|
|
455
|
+
endpoint = '/folders'
|
|
456
|
+
|
|
457
|
+
@post('create-folder')
|
|
458
|
+
def create_folder(self, createFolderInfoDto: CreateFolderInfoDto) -> Union[int, Awaitable[int]]:
|
|
459
|
+
"""
|
|
460
|
+
创建文件夹
|
|
461
|
+
|
|
462
|
+
所在路径下不存在同名文件夹时创建
|
|
463
|
+
"""
|
|
464
|
+
return {'body': createFolderInfoDto}
|
|
465
|
+
|
|
466
|
+
@post('del-folder')
|
|
467
|
+
def del_folder(self, confirm: bool = None, ids: List[str] = None) -> Union[int, Awaitable[int]]:
|
|
468
|
+
"""
|
|
469
|
+
删除文件夹
|
|
470
|
+
|
|
471
|
+
默认跳过无权限元素;根据文件夹id删除该文件夹下所有文件夹及元素,从最
|
|
472
|
+
里层开始,删除发生异常时删除操作将停止,该异常前已删除成功的文件夹/元
|
|
473
|
+
素不受影响
|
|
474
|
+
"""
|
|
475
|
+
return {'body': ids, 'param': {'confirm': confirm}}
|
|
476
|
+
|
|
477
|
+
@post('del-folder-element')
|
|
478
|
+
def del_folder_element(self, delFolderElementDtoList: List[DelFolderElementDto], confirm: bool = None) -> Union[int, Awaitable[int]]:
|
|
479
|
+
"""
|
|
480
|
+
批量删除文件夹和元素
|
|
481
|
+
|
|
482
|
+
默认跳过无权限元素;根据元素名称、类型、组件id或者文件夹id删除对应
|
|
483
|
+
元素或文件夹,批量删除发生异常时删除操作将停止,该异常前已删除成功的文
|
|
484
|
+
件夹/元素不受影响
|
|
485
|
+
"""
|
|
486
|
+
return {'body': delFolderElementDtoList, 'param': {'confirm': confirm}}
|
|
487
|
+
|
|
488
|
+
@post('edit-folder')
|
|
489
|
+
def edit_folder(self, modifyFolderInfoDto: ModifyFolderInfoDto) -> Union[int, Awaitable[int]]:
|
|
490
|
+
"""
|
|
491
|
+
编辑文件夹
|
|
492
|
+
|
|
493
|
+
修改文件夹信息
|
|
494
|
+
"""
|
|
495
|
+
return {'body': modifyFolderInfoDto}
|
|
496
|
+
|
|
497
|
+
@get('get-folder-full')
|
|
498
|
+
def get_folder_full(self, folderId: str) -> Union[Any, Awaitable[Any]]:
|
|
499
|
+
"""
|
|
500
|
+
查询文件夹全路径
|
|
501
|
+
|
|
502
|
+
根据文件夹id查询文件夹全路径
|
|
503
|
+
"""
|
|
504
|
+
return {'param': {'folderId': folderId}}
|
|
505
|
+
|
|
506
|
+
@get('get-folder-id/by-full-path')
|
|
507
|
+
def get_folder_id_by_full_path(self, fullPath: str) -> Union[Any, Awaitable[Any]]:
|
|
508
|
+
"""
|
|
509
|
+
根据全路径查询文件夹id
|
|
510
|
+
|
|
511
|
+
"""
|
|
512
|
+
return {'param': {'fullPath': fullPath}}
|
|
513
|
+
|
|
514
|
+
@get('get-folder-info')
|
|
515
|
+
def get_folder_info(self, folderId: str) -> Union[FolderInfoVO, Awaitable[FolderInfoVO]]:
|
|
516
|
+
"""
|
|
517
|
+
查询文件夹明细
|
|
518
|
+
|
|
519
|
+
"""
|
|
520
|
+
return {'param': {'folderId': folderId}}
|
|
521
|
+
|
|
522
|
+
@get('get-folders')
|
|
523
|
+
def get_folders(self, folderId: str = None) -> Union[List[FolderInfoVO], Awaitable[List[FolderInfoVO]]]:
|
|
524
|
+
"""
|
|
525
|
+
查询文件夹列表
|
|
526
|
+
|
|
527
|
+
根据文件夹id查询文件夹下所有文件
|
|
528
|
+
"""
|
|
529
|
+
return {'param': {'folderId': folderId}}
|
|
530
|
+
|
|
531
|
+
@post('update-open-extend')
|
|
532
|
+
def update_open_extend(self, folderInfoUpdateOpenExtendDto: FolderInfoUpdateOpenExtendDto) -> Union[int, Awaitable[int]]:
|
|
533
|
+
"""
|
|
534
|
+
文件夹启用/禁用继承开关接口
|
|
535
|
+
|
|
536
|
+
用于用户选择是否继承于父级文件夹的权限还是自定义配置权限
|
|
537
|
+
"""
|
|
538
|
+
return {'body': folderInfoUpdateOpenExtendDto}
|
|
539
|
+
|
|
540
|
+
|
|
541
|
+
class PermissionAPI(ChildAPI):
|
|
542
|
+
endpoint = '/permission'
|
|
543
|
+
|
|
544
|
+
@get('add-group')
|
|
545
|
+
def add_group(self, groupId: str = None, pGroupId: str = None) -> Union[int, Awaitable[int]]:
|
|
546
|
+
"""
|
|
547
|
+
新增用户组关联的权限数据
|
|
548
|
+
|
|
549
|
+
"""
|
|
550
|
+
return {'param': {'groupId': groupId, 'pGroupId': pGroupId}}
|
|
551
|
+
|
|
552
|
+
@get('delete-group')
|
|
553
|
+
def delete_group(self, groupId: str = None) -> Union[int, Awaitable[int]]:
|
|
554
|
+
"""
|
|
555
|
+
删除用户组关联的权限数据
|
|
556
|
+
|
|
557
|
+
删除用户组及各子用户组关联的权限数据
|
|
558
|
+
"""
|
|
559
|
+
return {'param': {'groupId': groupId}}
|
|
560
|
+
|
|
561
|
+
@post('edit')
|
|
562
|
+
def edit(self, requsetDto: RightDistributionReqBody = None) -> Union[RightDistributionRespBody, Awaitable[RightDistributionRespBody]]:
|
|
563
|
+
"""
|
|
564
|
+
权限编辑
|
|
565
|
+
|
|
566
|
+
元素及文件夹权限新增及删除
|
|
567
|
+
"""
|
|
568
|
+
return {'body': requsetDto}
|
|
569
|
+
|
|
570
|
+
@get('get-enterprise-group')
|
|
571
|
+
def get_enterprise_group(self, ) -> Union[List[str], Awaitable[List[str]]]:
|
|
572
|
+
"""
|
|
573
|
+
查询元素或文件夹中有配置 所有用户/企业所有用户组权限对应的组id
|
|
574
|
+
|
|
575
|
+
2.8.0版本
|
|
576
|
+
"""
|
|
577
|
+
return {}
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
class AppAPI(RootAPI):
|
|
581
|
+
"""应用服务接口"""
|
|
582
|
+
prefix = lambda: OPTION.server.app
|
|
583
|
+
|
|
584
|
+
@cached_property
|
|
585
|
+
def element_info(self) -> AppElementInfoAPI:
|
|
586
|
+
"""
|
|
587
|
+
元素信息
|
|
588
|
+
"""
|
|
589
|
+
return AppElementInfoAPI(self)
|
|
590
|
+
|
|
591
|
+
@cached_property
|
|
592
|
+
def element_relation(self) -> AppElementRelatioinAPI:
|
|
593
|
+
"""
|
|
594
|
+
元素引用关系
|
|
595
|
+
"""
|
|
596
|
+
return AppElementRelatioinAPI(self)
|
|
597
|
+
|
|
598
|
+
@cached_property
|
|
599
|
+
def element(self) -> AppElementAPI:
|
|
600
|
+
"""
|
|
601
|
+
元素升级信息操作接口
|
|
602
|
+
"""
|
|
603
|
+
return AppElementAPI(self)
|
|
604
|
+
|
|
605
|
+
@cached_property
|
|
606
|
+
def elements(self) -> AppElementsAPI:
|
|
607
|
+
"""
|
|
608
|
+
元素相关接口
|
|
609
|
+
"""
|
|
610
|
+
return AppElementsAPI(self)
|
|
611
|
+
|
|
612
|
+
@cached_property
|
|
613
|
+
def folder(self) -> AppFolderAPI:
|
|
614
|
+
"""
|
|
615
|
+
文件夹操作接口
|
|
616
|
+
"""
|
|
617
|
+
return AppFolderAPI(self)
|
|
618
|
+
|
|
619
|
+
@cached_property
|
|
620
|
+
def permission(self) -> PermissionAPI:
|
|
621
|
+
"""
|
|
622
|
+
权限接口
|
|
623
|
+
"""
|
|
624
|
+
return PermissionAPI(self)
|
|
625
|
+
|
|
626
|
+
|