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
deepfos/__init__.py ADDED
@@ -0,0 +1,6 @@
1
+ # from .core import *
2
+ from .options import OPTION, set_option, show_option
3
+
4
+ from . import _version
5
+ __version__ = _version.get_versions()['version']
6
+ __product_version__ = '3.0.0'
deepfos/_version.py ADDED
@@ -0,0 +1,21 @@
1
+
2
+ # This file was generated by 'versioneer.py' (0.20) from
3
+ # revision-control system data, or from the parent directory name of an
4
+ # unpacked source archive. Distribution tarballs contain a pre-generated copy
5
+ # of this file.
6
+
7
+ import json
8
+
9
+ version_json = '''
10
+ {
11
+ "date": "2025-02-19T15:49:28+0800",
12
+ "dirty": false,
13
+ "error": null,
14
+ "full-revisionid": "fd1a0dfd27f3bf0d25680e7593fbcdb9d43c7b33",
15
+ "version": "1.1.60"
16
+ }
17
+ ''' # END VERSION_JSON
18
+
19
+
20
+ def get_versions():
21
+ return json.loads(version_json)
File without changes
deepfos/algo/graph.py ADDED
@@ -0,0 +1,171 @@
1
+ from collections import Counter
2
+
3
+
4
+ class DAGraph:
5
+ """A directed acyclic graph of objects and their dependencies.
6
+
7
+ Supports a robust topological sort
8
+ to detect the order in which they must be handled.
9
+
10
+ Takes an optional iterator of ``(obj, dependencies)``
11
+ tuples to build the graph from.
12
+
13
+ Warning:
14
+ Does not support cycle detection.
15
+ """
16
+
17
+ def __init__(self, it=None):
18
+ self.adjacent = {}
19
+ if it is not None:
20
+ self.update(it)
21
+
22
+ def add_edge(self, A, B):
23
+ """Add an edge from object ``A`` to object ``B``.
24
+
25
+ I.e. ``A`` depends on ``B``.
26
+ """
27
+ self.adjacent.setdefault(A, []).append(B)
28
+
29
+ def connect(self, graph):
30
+ """Add nodes from another graph."""
31
+ self.adjacent.update(graph.adjacent)
32
+
33
+ def valency_of(self, vertex):
34
+ """Return the valency (degree) of a vertex in the graph."""
35
+ if vertex not in self:
36
+ return 0
37
+
38
+ adj_len = [len(self[vertex])]
39
+ for node in self[vertex]:
40
+ adj_len.append(self.valency_of(node))
41
+ return sum(adj_len)
42
+
43
+ def update(self, edges):
44
+ """Update graph with data from a list of ``(obj, deps)`` tuples."""
45
+ for vertex, successors in edges:
46
+ for succ in successors:
47
+ self.add_edge(vertex, succ)
48
+
49
+ def edges(self):
50
+ """Return generator that yields for all edges in the graph."""
51
+ return (obj for obj, adj in self.items() if adj)
52
+
53
+ def topsort(self):
54
+ """Sort the graph topologically.
55
+
56
+ Perform Khan's simple topological sort algorithm from '62.
57
+
58
+ See https://en.wikipedia.org/wiki/Topological_sorting
59
+ """
60
+ count = Counter()
61
+ result = []
62
+ getter = self.adjacent.get
63
+
64
+ for node in self:
65
+ for successor in self[node]:
66
+ count[successor] += 1
67
+ ready = [node for node in self if not count[node]]
68
+
69
+ while ready:
70
+ node = ready.pop()
71
+ result.append(node)
72
+
73
+ for successor in getter(node, []):
74
+ count[successor] -= 1
75
+ if count[successor] == 0:
76
+ ready.append(successor)
77
+
78
+ return result
79
+
80
+ def _tarjan72(self):
81
+ """Perform Tarjan's algorithm to find strongly connected components.
82
+
83
+ See Also:
84
+ :wikipedia:`Tarjan%27s_strongly_connected_components_algorithm`
85
+ """
86
+ result, stack, low = [], [], {}
87
+ getter = self.adjacent.get
88
+
89
+ def visit(node):
90
+ if node in low:
91
+ return
92
+ num = len(low)
93
+ low[node] = num
94
+ stack_pos = len(stack)
95
+ stack.append(node)
96
+
97
+ for successor in getter(node, []):
98
+ visit(successor)
99
+ low[node] = min(low[node], low[successor])
100
+
101
+ if num == low[node]:
102
+ component = tuple(stack[stack_pos:])
103
+ stack[stack_pos:] = []
104
+ result.append(component)
105
+ for item in component:
106
+ low[item] = len(self)
107
+
108
+ for n in self:
109
+ visit(n)
110
+
111
+ return result
112
+
113
+ def __iter__(self):
114
+ return self.adjacent.__iter__()
115
+
116
+ def __getitem__(self, node):
117
+ return self.adjacent.__getitem__(node)
118
+
119
+ def __len__(self):
120
+ return self.adjacent.__len__()
121
+
122
+ def __contains__(self, obj):
123
+ return self.adjacent.__contains__(obj)
124
+
125
+ def _iterate_items(self):
126
+ return self.adjacent.items()
127
+
128
+ items = iteritems = _iterate_items
129
+
130
+ @property
131
+ def is_acyclic(self):
132
+ scc = self._tarjan72()
133
+ return all(len(item) == 1 for item in scc)
134
+
135
+ def __repr__(self):
136
+ return '\n'.join(self.repr_node(N) for N in self)
137
+
138
+ def repr_node(self, obj, level=1, fmt='{0}({1})'):
139
+ output = [fmt.format(obj, self.valency_of(obj))]
140
+ if obj in self:
141
+ for other in self[obj]:
142
+ d = fmt.format(other, self.valency_of(other))
143
+ output.append(' ' * level + d)
144
+ output.extend(self.repr_node(other, level + 1).split('\n')[1:])
145
+ return '\n'.join(output)
146
+
147
+ def topsort_ori(self):
148
+ """Sort the graph topologically.
149
+
150
+ Returns:
151
+ List: of objects in the order in which they must be handled.
152
+ """
153
+ graph = self.__class__()
154
+ components = self._tarjan72()
155
+
156
+ NC = {
157
+ node: component for component in components for node in component
158
+ }
159
+ for component in components:
160
+ graph.add_arc(component)
161
+ for node in self:
162
+ node_c = NC[node]
163
+ for successor in self[node]:
164
+ successor_c = NC[successor]
165
+ if node_c != successor_c:
166
+ graph.add_edge(node_c, successor_c)
167
+ return [t[0] for t in graph.topsort()]
168
+
169
+ def add_arc(self, obj):
170
+ """Add an object to the graph."""
171
+ self.adjacent.setdefault(obj, [])
@@ -0,0 +1,31 @@
1
+ """
2
+ Segment Tree
3
+ """
4
+
5
+ from typing import Protocol, Sequence, Optional, Callable, Iterable, Any
6
+
7
+
8
+ class NodeLike(Protocol):
9
+ name: str
10
+ parent: Optional['NodeLike']
11
+ children: Sequence['NodeLike']
12
+
13
+
14
+ class Visitor:
15
+ def __init__(self, on_node: Callable[[NodeLike], Any]):
16
+ self.on_node = on_node
17
+
18
+ def visit(self, node: NodeLike):
19
+ for node in self.iter_node(node):
20
+ self.on_node(node)
21
+
22
+ def iter_node(self, node: NodeLike) -> Iterable[NodeLike]:
23
+ raise NotImplementedError()
24
+
25
+
26
+ class DFVisitor(Visitor):
27
+ def iter_node(self, node: NodeLike) -> Iterable[NodeLike]:
28
+ yield node
29
+ for child in node.children:
30
+ yield from self.iter_node(child)
31
+
File without changes
@@ -0,0 +1,119 @@
1
+ """
2
+ APIs provided by business-model-server1-1
3
+
4
+ generated by api_code_gen.py
5
+ - **filename** : ``business_model.py``
6
+ - **json timestamp** : ``2023-03-02 16:19:07``
7
+ """
8
+ from deepfos.api.base import get, post, DynamicRootAPI, ChildAPI
9
+ from .models.business_model import *
10
+ from deepfos.lib.decorator import cached_property
11
+ from typing import List, Dict, Union, Any, Awaitable
12
+
13
+ import deepfos.api.business_model as last_ver
14
+
15
+ __all__ = ['BusinessModelAPI']
16
+
17
+
18
+ class ModelAPI(last_ver.ModelAPI):
19
+ endpoint = '/business'
20
+
21
+ @post('model')
22
+ def save(self, logicTableInfo: BusinessModelDTOReq) -> Union[BusinessModelResultVO, Awaitable[BusinessModelResultVO]]:
23
+ """
24
+ 业务模型-配置-基础配置-保存
25
+
26
+ 业务模型配置(不含权限)保存,使用场景:1、通过页面配置业务模型保存时
27
+ 使用
28
+ """
29
+ return {'body': logicTableInfo}
30
+
31
+
32
+ class ApprovalAPI(last_ver.ApprovalAPI):
33
+ endpoint = '/business/model'
34
+
35
+
36
+
37
+ class DataAPI(ChildAPI):
38
+ endpoint = '/business/model/data'
39
+
40
+ @post('save')
41
+ def save(self, modelDataSaveDTO: ModelDataSaveDTO) -> Union[List[ModelDataReturnDTO], Awaitable[List[ModelDataReturnDTO]]]:
42
+ """
43
+ 基于业务模型的数据保存,应用场景:业务明细表使用视图保存。
44
+ """
45
+ return {'body': modelDataSaveDTO}
46
+
47
+
48
+ class ConfigureAPI(last_ver.ConfigureAPI):
49
+ endpoint = '/business/model/form'
50
+
51
+ @get('structure/top')
52
+ def structure_top(self, elementName: str, folderId: str = None, path: str = None) -> Union[StructureDTO, Awaitable[StructureDTO]]:
53
+ """
54
+ 业务模型-基础配置相关-主表配置查询接口
55
+
56
+ object 含数据表信息、字段信息、业务主键、冗余字段等
57
+ """
58
+ return {'param': {'elementName': elementName, 'folderId': folderId, 'path': path}}
59
+
60
+ @get('structures')
61
+ def structures(self, elementName: str, folderId: str = None, path: str = None) -> Union[List[StructureDTO], Awaitable[List[StructureDTO]]]:
62
+ """
63
+ 业务模型表-基础配置相关-查询接口模型元素
64
+
65
+ list 含数据表信息、字段信息、业务主键、冗余字段等
66
+ """
67
+ return {'param': {'elementName': elementName, 'folderId': folderId, 'path': path}}
68
+
69
+
70
+ class PermissionAPI(last_ver.PermissionAPI):
71
+ endpoint = '/business/model'
72
+
73
+
74
+
75
+ class BusinessModelAPI(DynamicRootAPI, builtin=True):
76
+ """业务模型组件接口"""
77
+ module_type = 'BCUB'
78
+ default_version = (1, 0)
79
+ multi_version = True
80
+ cls_name = 'BusinessModelAPI'
81
+ module_name = 'deepfos.api.V1_1.business_model'
82
+ api_version = (1, 1)
83
+
84
+ @cached_property
85
+ def model(self) -> ModelAPI:
86
+ """
87
+ 业务模型基础配置
88
+ """
89
+ return ModelAPI(self)
90
+
91
+ @cached_property
92
+ def approval(self) -> ApprovalAPI:
93
+ """
94
+ 业务模型审批流相关接口
95
+ """
96
+ return ApprovalAPI(self)
97
+
98
+ @cached_property
99
+ def data(self) -> DataAPI:
100
+ """
101
+ 业务模型数据相关接口
102
+ """
103
+ return DataAPI(self)
104
+
105
+ @cached_property
106
+ def configure(self) -> ConfigureAPI:
107
+ """
108
+ 业务模型基本配置相关接口
109
+ """
110
+ return ConfigureAPI(self)
111
+
112
+ @cached_property
113
+ def permission(self) -> PermissionAPI:
114
+ """
115
+ 业务模型权限配置
116
+ """
117
+ return PermissionAPI(self)
118
+
119
+