deepfos 1.1.34__tar.gz → 1.1.35__tar.gz

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 (188) hide show
  1. deepfos-1.1.35/.gitattributes +1 -0
  2. deepfos-1.1.35/.gitee/ISSUE_GUIDELINES.md +7 -0
  3. deepfos-1.1.35/.gitee/ISSUE_TEMPLATE.md +57 -0
  4. deepfos-1.1.35/.gitignore +27 -0
  5. deepfos-1.1.35/CHANGELOG.md +368 -0
  6. {deepfos-1.1.34 → deepfos-1.1.35}/PKG-INFO +1 -6
  7. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/_version.py +3 -3
  8. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/element/base.py +9 -3
  9. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/element/deepmodel.py +28 -20
  10. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/element/pyscript.py +2 -1
  11. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/asynchronous.py +20 -2
  12. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos.egg-info/PKG-INFO +1 -6
  13. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos.egg-info/SOURCES.txt +171 -2
  14. deepfos-1.1.35/requirements.txt +2 -0
  15. deepfos-1.1.34/tests/__init__.py +0 -4
  16. {deepfos-1.1.34 → deepfos-1.1.35}/MANIFEST.in +0 -0
  17. {deepfos-1.1.34 → deepfos-1.1.35}/README.md +0 -0
  18. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/__init__.py +0 -0
  19. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/algo/__init__.py +0 -0
  20. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/algo/graph.py +0 -0
  21. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/V1_1/__init__.py +0 -0
  22. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/V1_1/business_model.py +0 -0
  23. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/V1_1/dimension.py +0 -0
  24. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/V1_1/models/__init__.py +0 -0
  25. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/V1_1/models/business_model.py +0 -0
  26. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/V1_1/models/dimension.py +0 -0
  27. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/V1_2/__init__.py +0 -0
  28. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/V1_2/dimension.py +0 -0
  29. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/V1_2/models/__init__.py +0 -0
  30. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/V1_2/models/dimension.py +0 -0
  31. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/__init__.py +0 -0
  32. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/account.py +0 -0
  33. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/accounting_engines.py +0 -0
  34. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/app.py +0 -0
  35. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/approval_process.py +0 -0
  36. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/base.py +0 -0
  37. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/business_model.py +0 -0
  38. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/consolidation.py +0 -0
  39. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/consolidation_process.py +0 -0
  40. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/datatable.py +0 -0
  41. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/deepconnector.py +0 -0
  42. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/deepfos_task.py +0 -0
  43. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/deepmodel.py +0 -0
  44. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/dimension.py +0 -0
  45. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/financial_model.py +0 -0
  46. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/journal_model.py +0 -0
  47. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/journal_template.py +0 -0
  48. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/memory_financial_model.py +0 -0
  49. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/__init__.py +0 -0
  50. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/account.py +0 -0
  51. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/accounting_engines.py +0 -0
  52. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/app.py +0 -0
  53. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/approval_process.py +0 -0
  54. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/base.py +0 -0
  55. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/business_model.py +0 -0
  56. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/consolidation.py +0 -0
  57. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/consolidation_process.py +0 -0
  58. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/datatable_mysql.py +0 -0
  59. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/deepconnector.py +0 -0
  60. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/deepfos_task.py +0 -0
  61. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/deepmodel.py +0 -0
  62. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/dimension.py +0 -0
  63. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/financial_model.py +0 -0
  64. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/journal_model.py +0 -0
  65. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/journal_template.py +0 -0
  66. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/memory_financial_model.py +0 -0
  67. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/platform.py +0 -0
  68. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/python.py +0 -0
  69. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/reconciliation_engine.py +0 -0
  70. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/reconciliation_report.py +0 -0
  71. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/role_strategy.py +0 -0
  72. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/smartlist.py +0 -0
  73. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/space.py +0 -0
  74. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/system.py +0 -0
  75. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/variable.py +0 -0
  76. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/models/workflow.py +0 -0
  77. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/platform.py +0 -0
  78. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/python.py +0 -0
  79. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/reconciliation_engine.py +0 -0
  80. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/reconciliation_report.py +0 -0
  81. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/role_strategy.py +0 -0
  82. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/smartlist.py +0 -0
  83. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/space.py +0 -0
  84. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/system.py +0 -0
  85. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/variable.py +0 -0
  86. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/api/workflow.py +0 -0
  87. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/boost/__init__.py +0 -0
  88. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/boost/jstream.c +0 -0
  89. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/boost/jstream.pyx +0 -0
  90. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/boost/pandas.c +0 -0
  91. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/boost/pandas.pyx +0 -0
  92. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/boost/py_jstream.py +0 -0
  93. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/boost/py_pandas.py +0 -0
  94. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/cache.py +0 -0
  95. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/config.py +0 -0
  96. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/__init__.py +0 -0
  97. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/cube/__init__.py +0 -0
  98. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/cube/_base.py +0 -0
  99. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/cube/constants.py +0 -0
  100. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/cube/cube.py +0 -0
  101. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/cube/formula.py +0 -0
  102. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/cube/syscube.py +0 -0
  103. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/cube/typing.py +0 -0
  104. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/cube/utils.py +0 -0
  105. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/dimension/__init__.py +0 -0
  106. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/dimension/_base.py +0 -0
  107. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/dimension/dimcreator.py +0 -0
  108. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/dimension/dimension.py +0 -0
  109. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/dimension/dimexpr.py +0 -0
  110. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/dimension/dimmember.py +0 -0
  111. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/dimension/eledimension.py +0 -0
  112. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/dimension/filters.py +0 -0
  113. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/dimension/sysdimension.py +0 -0
  114. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/logictable/__init__.py +0 -0
  115. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/logictable/_cache.py +0 -0
  116. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/logictable/_operator.py +0 -0
  117. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/logictable/nodemixin.py +0 -0
  118. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/logictable/sqlcondition.py +0 -0
  119. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/core/logictable/tablemodel.py +0 -0
  120. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/db/__init__.py +0 -0
  121. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/db/cipher.py +0 -0
  122. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/db/clickhouse.py +0 -0
  123. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/db/connector.py +0 -0
  124. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/db/daclickhouse.py +0 -0
  125. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/db/dameng.py +0 -0
  126. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/db/damysql.py +0 -0
  127. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/db/dbkits.py +0 -0
  128. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/db/deepengine.py +0 -0
  129. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/db/deepmodel.py +0 -0
  130. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/db/deepmodel_kingbase.py +0 -0
  131. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/db/edb.py +0 -0
  132. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/db/gauss.py +0 -0
  133. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/db/kingbase.py +0 -0
  134. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/db/mysql.py +0 -0
  135. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/db/oracle.py +0 -0
  136. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/db/postgresql.py +0 -0
  137. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/db/sqlserver.py +0 -0
  138. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/db/utils.py +0 -0
  139. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/element/__init__.py +0 -0
  140. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/element/accounting.py +0 -0
  141. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/element/apvlprocess.py +0 -0
  142. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/element/bizmodel.py +0 -0
  143. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/element/datatable.py +0 -0
  144. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/element/deepconnector.py +0 -0
  145. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/element/dimension.py +0 -0
  146. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/element/fact_table.py +0 -0
  147. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/element/finmodel.py +0 -0
  148. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/element/journal.py +0 -0
  149. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/element/journal_template.py +0 -0
  150. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/element/reconciliation.py +0 -0
  151. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/element/rolestrategy.py +0 -0
  152. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/element/smartlist.py +0 -0
  153. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/element/variable.py +0 -0
  154. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/element/workflow.py +0 -0
  155. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/exceptions/__init__.py +0 -0
  156. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/exceptions/hook.py +0 -0
  157. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lazy.py +0 -0
  158. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/__init__.py +0 -0
  159. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/_javaobj.py +0 -0
  160. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/concurrency.py +0 -0
  161. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/constant.py +0 -0
  162. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/decorator.py +0 -0
  163. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/deepchart.py +0 -0
  164. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/deepux.py +0 -0
  165. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/discovery.py +0 -0
  166. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/eureka.py +0 -0
  167. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/filterparser.py +0 -0
  168. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/httpcli.py +0 -0
  169. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/jsonstreamer.py +0 -0
  170. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/msg.py +0 -0
  171. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/nacos.py +0 -0
  172. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/patch.py +0 -0
  173. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/redis.py +0 -0
  174. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/serutils.py +0 -0
  175. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/stopwatch.py +0 -0
  176. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/subtask.py +0 -0
  177. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/sysutils.py +0 -0
  178. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/lib/utils.py +0 -0
  179. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/local.py +0 -0
  180. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/options.py +0 -0
  181. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos/translation.py +0 -0
  182. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos.egg-info/dependency_links.txt +0 -0
  183. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos.egg-info/not-zip-safe +0 -0
  184. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos.egg-info/requires.txt +0 -0
  185. {deepfos-1.1.34 → deepfos-1.1.35}/deepfos.egg-info/top_level.txt +0 -0
  186. {deepfos-1.1.34 → deepfos-1.1.35}/setup.cfg +0 -0
  187. {deepfos-1.1.34 → deepfos-1.1.35}/setup.py +0 -0
  188. {deepfos-1.1.34 → deepfos-1.1.35}/versioneer.py +0 -0
@@ -0,0 +1 @@
1
+ deepfos/_version.py export-subst
@@ -0,0 +1,7 @@
1
+ 在您提交issue之前, 请先根据您的issue类型选取对应的问题集:
2
+
3
+ - 缺陷 | BUG
4
+ - 需求 | Feature Requests
5
+ - 问题 | Question
6
+
7
+ 删除不属于您想要提交的issue类型,并且回答剩余的问题。
@@ -0,0 +1,57 @@
1
+ <!-- # BUG | 缺陷 -->
2
+ <!-- 把下面一行作为您的标题
3
+ 【🐞 缺陷】补充您的描述
4
+ -->
5
+ ## 现象描述
6
+
7
+ [描述问题的现象,最好能够提供屏幕截图 或 gif 动画]
8
+
9
+ ## 环境信息
10
+
11
+ [在此填写python版本,系统环境等相关的环境信息,debug文件可以在此处提交或者使用附件]
12
+
13
+ ## 重现步骤
14
+
15
+ [在此填写能够重现该问题的操作步骤]
16
+
17
+ - 步骤1,...
18
+ - 步骤2,...
19
+ - 步骤3,...
20
+
21
+ ## 报错信息
22
+
23
+ [在此填写报错信息]
24
+
25
+ <!------------------ 分割线 -------------->
26
+
27
+ <!-- # Feature Requests | 需求 -->
28
+ <!-- 把下面一行作为您的标题
29
+ 【✨ 需求】补充您的描述
30
+ -->
31
+ ## 您希望增加什么样的功能?
32
+
33
+ [在此填写该功能的详细描述,也可以写您设想的实现方式]
34
+
35
+ ## 这个功能目前能否实现?
36
+
37
+ [目前是否完全无法实现,或者能够实现,但是步骤繁琐,应该作为标准功能]
38
+
39
+ ## 这个功能有哪些应用场景?
40
+
41
+ [说明这个功能是否有足够的泛用性]
42
+
43
+
44
+ <!------------------ 分割线 -------------->
45
+
46
+ <!-- # Question | 问题 -->
47
+ <!-- 把下面一行作为您的标题
48
+ 【🤔 问题】补充您的描述
49
+ -->
50
+
51
+ ## 这个问题是否在文档和issue中都没有被回答?
52
+
53
+ [一般来说不建议在issue中提问,在提问前,请先查阅文档和可能关联的issue]
54
+
55
+ ## 您遇到了什么问题?
56
+
57
+ [在此填写该问题的描述]
@@ -0,0 +1,27 @@
1
+ logs
2
+ __pycache__
3
+ .idea
4
+ venv
5
+ dist
6
+ deepfos.egg-info
7
+ docs/source/deepfos/generated
8
+ docs/build
9
+ scripts/_*
10
+ scripts/V*
11
+ .ipynb_checkpoints
12
+ examples/quick_start/debug.py
13
+ _local_test
14
+ sdist
15
+ .run
16
+ _bug_fix
17
+ build
18
+ .vscode
19
+ docs_debug
20
+ Python
21
+ *.pyd
22
+ examples/notebook/debug.py
23
+ docs/source/_static
24
+ docs/source/network_backup
25
+ tests/.coverage
26
+ tests/test_log.log
27
+ i18n
@@ -0,0 +1,368 @@
1
+ ## [1.1.35] - 2024-05-28
2
+
3
+ ### 变更
4
+
5
+ * pyscript中初始化redis client时的密码增加quota
6
+
7
+ ### 文档
8
+
9
+ * 修复部分文档显示错误/重复的问题
10
+
11
+
12
+ ## [1.1.34] - 2024-04-23
13
+
14
+ ### 新增
15
+
16
+ * DeepModel增加批量插入pg底表方法
17
+
18
+ ### 变更
19
+
20
+ * 财务模型元素save方法支持保存备注
21
+ * 财务模型元素save方法增加数据保存权鉴模式参数
22
+
23
+
24
+ ## [1.1.33] - 2024-04-16
25
+
26
+ ### 新增
27
+
28
+ * 封装消息中心
29
+
30
+ ### 变更
31
+
32
+ * 无
33
+
34
+
35
+ ## [1.1.32] - 2024-04-02
36
+
37
+ ### 新增
38
+
39
+ * DeepModel提供设置globals方法
40
+ * DeepModel开放直连参数
41
+
42
+ ### 变更
43
+
44
+ * DeepModel execute方法返回DML结果
45
+ * 支持配置多节点Eureka地址
46
+
47
+
48
+ ## [1.1.31] - 2024-03-26
49
+
50
+ ### 新增
51
+
52
+ * DeepUX支持作为图结构数据源
53
+
54
+ ### 变更
55
+
56
+ * DeepModel修正查询返回结构字段顺序与语句不一致问题
57
+
58
+
59
+ ## [1.1.30] - 2024-03-05
60
+
61
+ ### 新增
62
+
63
+ * 无
64
+
65
+ ### 变更
66
+
67
+ * PythonScript线下模式获取运行结果完善错误提示
68
+
69
+
70
+ ## [1.1.29] - 2024-02-27
71
+
72
+ ### 新增
73
+
74
+ * 无
75
+
76
+ ### 变更
77
+
78
+ * 凭证元素save方法headMainId生成规则改为生成uuid
79
+
80
+
81
+ ## [1.1.28] - 2024-02-20
82
+
83
+ ### 新增
84
+
85
+ * DeepModel元素增加objects属性
86
+ * 服务发现的缓存增加轮询和随机策略
87
+
88
+ ### 变更
89
+
90
+ * 凭证元素save方法文档更新
91
+ * 维度元素save方法DimMember兼容1.0与1.1&1.2的字段差异
92
+
93
+
94
+ ## [1.1.27] - 2024-01-30
95
+
96
+ ### 新增
97
+
98
+ * DeepModel元素insert_df支持upsert句式
99
+
100
+ ### 变更
101
+
102
+ * DeepModel元素query_df结果增加符合列类型的cast
103
+ * 维度1.1&1.2元素使用的全量和增量保存接口更新,与前端使用的保持一致
104
+
105
+
106
+ ## [1.1.26] - 2023-12-26
107
+
108
+ ### 新增
109
+
110
+ * 凭证模型元素提供update方法
111
+
112
+ ### 变更
113
+
114
+ * 无
115
+
116
+ ## [1.1.25] - 2023-12-19
117
+
118
+ ### 新增
119
+
120
+ * 财务模型元素提供delete_with_mdx方法
121
+
122
+ ### 变更
123
+
124
+ * 财务模型元素delete方法提供是否使用MDX脚本实现的flag
125
+ * DeepModel序列化排除日期和UUID类型转string
126
+ * 财务模型元素delete, save, save_unpivot方法增加callback入参
127
+
128
+ ## [1.1.24] - 2023-12-12
129
+
130
+ ### 新增
131
+
132
+ * 无
133
+
134
+ ### 变更
135
+
136
+ * 财务模型元素delete方法使用MDX脚本实现
137
+
138
+ ## [1.1.23] - 2023-11-16
139
+
140
+ ### 新增
141
+
142
+ * 财务模型元素新增封装权限状态upsert更新接口
143
+
144
+ ### 变更
145
+
146
+ * 修正postgresql类数据表copy_rows为自增列赋默认值的问题
147
+
148
+ ## [1.1.22] - 2023-11-02
149
+
150
+ ### 新增
151
+
152
+ * 合并流程api封装
153
+
154
+ ### 变更
155
+
156
+ * 凭证组件元素接口响应success=False时报错
157
+ * 维度元素封装修改成员父级功能
158
+
159
+ ## [1.1.21] - 2023-10-26
160
+
161
+ ### 变更
162
+
163
+ * 更新KingBase数据表quote char
164
+
165
+
166
+ ## [1.1.20] - 2023-10-17
167
+
168
+ ### 新增
169
+
170
+ * 添加DeepModel KingBase数据表
171
+ * 维度元素封装sync_data方法
172
+
173
+ ### 变更
174
+
175
+ * 财务模型query方法增加对ignore列的处理
176
+
177
+
178
+ ## [1.1.19] - 2023-10-10
179
+
180
+ ### 变更
181
+
182
+ * 修正凭证元素save的头行df自带index时的请求体组织问题
183
+
184
+
185
+ ## [1.1.18] - 2023-09-19
186
+
187
+ ### 变更
188
+
189
+ * 修正DeepModel元素批量插入自链接对象时未排除计算link的问题
190
+
191
+
192
+ ## [1.1.17] - 2023-09-12
193
+
194
+ ### 新增
195
+
196
+ * 维度1.2支持多维度实体配置参数
197
+
198
+ ### 变更
199
+
200
+ * 修正维度1.1 1.2版本增量编辑响应的数据类型
201
+
202
+
203
+ ## [1.1.16] - 2023-09-05
204
+
205
+ ### 新增
206
+
207
+ * Deep Connector封装获取连接信息方法
208
+
209
+ ### 变更
210
+
211
+ * 维度修正共享成员维度保存的问题
212
+
213
+
214
+ ## [1.1.15] - 2023-08-29
215
+
216
+ ### 变更
217
+
218
+ * DeepModel 部分bug修复
219
+ * 维度修正共享成员维度保存的问题
220
+ * 优化redislock的renew lock逻辑
221
+
222
+
223
+ ## [1.1.14] - 2023-08-15
224
+
225
+ ### 变更
226
+
227
+ * 维度涉及ud字段的model统一扩充至60个ud
228
+ * 维度1.2 /refactor/dimension/info/save接口请求响应model更新
229
+
230
+
231
+ ## [1.1.13] - 2023-08-08
232
+
233
+ ### 变更
234
+
235
+ * DeepModel 部分bug修复
236
+ * pyscript redislock 延迟初始化
237
+ * 凭证元素接口字段修改 `type -> _type`(breaking)
238
+
239
+
240
+ ## [1.1.12] - 2023-07-27
241
+
242
+ ### 新增
243
+ * 维度同步至DeepModel对象
244
+
245
+ ### 变更
246
+
247
+ * DeepModel取消元素初始化逻辑(同步组件变更)
248
+
249
+
250
+ ## [1.1.11] - 2023-07-18
251
+
252
+ ### 新增
253
+ * 添加DeepModel数据表
254
+
255
+
256
+ ## [1.1.10] - 2023-07-13
257
+
258
+ ### 新增
259
+ * DeepModel insert_df增加对multi link的支持
260
+
261
+ ### 变更
262
+ * DeepModel本地执行时使用API
263
+ * 维度元素扩充DimensionMemberBean的ud数量至60
264
+ * 凭证元素已知问题修正
265
+
266
+ ## [1.1.9] - 2023-07-04
267
+
268
+ ### 新增
269
+ * 新增DeepModel元素
270
+ * 新增凭证元素
271
+
272
+ ## [1.1.8] - 2023-06-29
273
+
274
+ ### 变更
275
+ * deepux支持返回字段描述
276
+
277
+
278
+ ## [1.1.7] - 2023-06-20
279
+
280
+ ### 变更
281
+ * 兼容deepchart原BaseField的name成员可以被访问的逻辑
282
+ * 修复api/base中错误访问root属性的bug
283
+
284
+
285
+ ## [1.1.6] - 2023-06-13
286
+
287
+ ### 新增
288
+ * 支持nacos
289
+
290
+ ### 变更
291
+
292
+ * 修复oracle/dameng数据表查询字段大小写不一致的问题
293
+ * dataframe中set类型的索引器改为list类型 [@李杨](https://e.gitee.com/proinnova/members/trend/ryan_li1384)
294
+ * 优化DataframeSQLConvertor的性能 [@李杨](https://e.gitee.com/proinnova/members/trend/ryan_li1384)
295
+ * 修复多线程情况下future_property的死锁问题
296
+ * eureka相关代码重构
297
+ * 统一数据表获取方式为``get_table_class``,支持服务名作为参数
298
+
299
+
300
+ ## [1.1.5] - 2023-06-01
301
+
302
+ ### 变更
303
+
304
+ * 将dbkits的table_cache纳入Cache Manager管理
305
+ * 去除db库内对build_api的cache_async装饰
306
+
307
+ ## [1.1.4] - 2023-05-30
308
+
309
+ ### 新增
310
+
311
+ * 维度1.2新增/refactor/dimension/object/sync-data接口
312
+
313
+ ### 变更
314
+
315
+ * 修正试图将Oracle自增列置为null的默认逻辑
316
+
317
+ ## [1.1.3] - 2023-05-11
318
+
319
+ ### 变更
320
+
321
+ * 支持mysql标准以外SQL的字符串转义
322
+ * 修复 `bizmodel.set_approval_ex` 固定了审批流数据表为Mysql的问题
323
+
324
+ ## [1.1.2] - 2023-05-09
325
+
326
+ ### 新增
327
+
328
+ * 增加对账引擎对账集、数据集元素 [@陈文雍](https://e.gitee.com/proinnova/members/trend/calvinstk)
329
+ * 工作流新增封装批量启动流程接口
330
+ * 提供全局Cache、by space/app 级别的缓存管理
331
+
332
+ ### 变更
333
+
334
+ * APIResponseError增加code属性
335
+ * 单元测试代码重构,简化元素的单元测试编写工作
336
+ * 修复sqlcondition固定quote char为"`"的问题
337
+ * 优化elementBase的实现,增加async_api/api的自动补全(Pylance only,Pycharm不支持)
338
+
339
+
340
+ ## [1.1.1] - 2023-04-20
341
+
342
+ ### 新增
343
+
344
+ * 支持python作为DeepUX数据源
345
+ * 支持PostgreSQL, DeepEngine数据表
346
+
347
+ ### 变更
348
+
349
+ * 修复维度保存可能不返回errors的兼容性问题
350
+ * 修复多线程事务不支持的问题
351
+ * future_property失败时不再抛出BadFutureError,而是抛出实际发生的错误
352
+ * 修复单元测试用例
353
+ * 精简出现异常时打印的错误栈信息
354
+
355
+
356
+ ## [1.1.0] - 2023-04-06
357
+
358
+ ### 新增
359
+
360
+ * :tada: v1.1 第一次发版
361
+
362
+ ### 变更
363
+
364
+ * 无
365
+
366
+ ### 文档
367
+
368
+ * 无
@@ -1,12 +1,10 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deepfos
3
- Version: 1.1.34
3
+ Version: 1.1.35
4
4
  Summary: Collecions of useful and handy tools for deepfos platform
5
5
  Home-page: http://py.deepfos.com
6
6
  Author: deepfos-python-team
7
7
  Author-email: wei.wei@proinnova.com.cn
8
- License: UNKNOWN
9
- Platform: UNKNOWN
10
8
  Classifier: Development Status :: 3 - Alpha
11
9
  Classifier: Intended Audience :: Developers
12
10
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
@@ -14,6 +12,3 @@ Classifier: Programming Language :: Python :: 3.8
14
12
  Classifier: Programming Language :: Python :: 3.9
15
13
  Classifier: Programming Language :: Python :: 3.10
16
14
  Requires-Python: >=3.8.3
17
-
18
- UNKNOWN
19
-
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2024-04-24T08:40:21+0000",
11
+ "date": "2024-05-30T02:50:45+0000",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "d4749ace516e3a51df0fef77c0f1ce567d0108f3",
15
- "version": "1.1.34"
14
+ "full-revisionid": "15a16105c782ac73048953617059577fed00d93b",
15
+ "version": "1.1.35"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -29,7 +29,7 @@ _HINT = """
29
29
  """
30
30
 
31
31
  _ARGS = {
32
- "element_name": "数据表元素名",
32
+ "element_name": "元素名",
33
33
  "folder_id": "元素所在的文件夹id",
34
34
  "path": "元素所在的文件夹绝对路径",
35
35
  }
@@ -39,6 +39,8 @@ T_ApiClass = TypeVar('T_ApiClass', bound=DynamicRootAPI)
39
39
 
40
40
 
41
41
  class _ElementMeta(FuturePropertyMeta):
42
+ __mangle_docs__ = True
43
+
42
44
  def __new__(mcs, name, bases, namespace, **kwargs):
43
45
  if '__doc__' not in namespace:
44
46
  for base in bases:
@@ -47,8 +49,10 @@ class _ElementMeta(FuturePropertyMeta):
47
49
  break
48
50
 
49
51
  cls = super().__new__(mcs, name, bases, namespace, **kwargs)
50
- cls_doc = mcs._split_doc(cls.__doc__)
51
- cls.__doc__ = mcs._recover_doc(cls_doc)
52
+
53
+ if cls.__mangle_docs__:
54
+ cls_doc = mcs._split_doc(cls.__doc__)
55
+ cls.__doc__ = mcs._recover_doc(cls_doc)
52
56
 
53
57
  if "api_class" not in namespace and ElementBase in bases:
54
58
  for base in cls.__orig_bases__: # noqa
@@ -331,6 +335,8 @@ class ElementBase(Generic[T_ApiClass], metaclass=_ElementMeta):
331
335
 
332
336
 
333
337
  class SyncMeta(_ElementMeta):
338
+ __mangle_docs__ = False
339
+
334
340
  def __new__(mcs, name, bases, namespace, **kwargs):
335
341
  base = bases[0]
336
342
  methods = None
@@ -124,7 +124,7 @@ class ObjectElement(ObjectParam):
124
124
 
125
125
  class QueryWithArgs(BaseModel):
126
126
  commands: str
127
- kwargs: Dict[str, Union[str, int]] = Field(default_factory=dict)
127
+ kwargs: Dict[str, Any] = Field(default_factory=dict)
128
128
 
129
129
 
130
130
  class MainField(NamedTuple):
@@ -740,7 +740,13 @@ class _TxnConfig:
740
740
  # -----------------------------------------------------------------------------
741
741
  # core
742
742
  class AsyncDeepModel(ElementBase[DeepModelAPI]):
743
- """DeepModel"""
743
+ """DeepModel元素
744
+
745
+ Args:
746
+ direct_access: 是否使用直连模式
747
+ pg_dsn: PG连接信息
748
+ """
749
+ __mangle_docs__ = False
744
750
 
745
751
  def __init__(self, direct_access: bool = True, pg_dsn: str = None): # noqa
746
752
  self._txn_ = ContextVar('QLTXN')
@@ -859,8 +865,7 @@ class AsyncDeepModel(ElementBase[DeepModelAPI]):
859
865
 
860
866
  if self.direct_access:
861
867
  logger.opt(lazy=True).debug(f"Query: [{ql}], \nkwargs: [{kwargs}].")
862
- async with self.client as cli:
863
- _, result = await cli.query(ql, **kwargs)
868
+ _, result = await self.client.query(ql, **kwargs)
864
869
  return result
865
870
 
866
871
  result = await AsyncDeepModel.query(self, ql, **kwargs)
@@ -895,8 +900,7 @@ class AsyncDeepModel(ElementBase[DeepModelAPI]):
895
900
  """
896
901
  if self.direct_access:
897
902
  logger.opt(lazy=True).debug(f"Query: [{ql}], \nkwargs: [{kwargs}].")
898
- async with self.client as cli:
899
- frame_desc, result = await cli.query(ql, **kwargs)
903
+ frame_desc, result = await self.client.query(ql, **kwargs)
900
904
  return serutils.serialize(
901
905
  result, ctx=serutils.Context(frame_desc=frame_desc)
902
906
  )
@@ -943,8 +947,7 @@ class AsyncDeepModel(ElementBase[DeepModelAPI]):
943
947
 
944
948
  """
945
949
  if self.direct_access:
946
- async with self.client as cli:
947
- frame_desc, data = await cli.query(ql, **kwargs)
950
+ frame_desc, data = await self.client.query(ql, **kwargs)
948
951
 
949
952
  data = pd.DataFrame(data=serutils.serialize(
950
953
  data, ctx=serutils.Context(frame_desc=frame_desc)
@@ -1047,17 +1050,16 @@ class AsyncDeepModel(ElementBase[DeepModelAPI]):
1047
1050
  return affected
1048
1051
 
1049
1052
  result = []
1050
- async with self.client as cli:
1051
- async for tx in cli.transaction():
1052
- async with tx:
1053
- for ql in qls_with_args:
1054
- logger.opt(lazy=True).debug(
1055
- f"Execute QL: [{ql.commands}], \nkwargs: [{ql.kwargs}]."
1056
- )
1057
- desc, affected = await tx.execute(ql.commands, **ql.kwargs)
1058
- result.append(serutils.serialize(
1059
- affected, ctx=serutils.Context(frame_desc=desc)
1060
- ))
1053
+ async for tx in self.client.transaction():
1054
+ async with tx:
1055
+ for ql in qls_with_args:
1056
+ logger.opt(lazy=True).debug(
1057
+ f"Execute QL: [{ql.commands}], \nkwargs: [{ql.kwargs}]."
1058
+ )
1059
+ desc, affected = await tx.execute(ql.commands, **ql.kwargs)
1060
+ result.append(serutils.serialize(
1061
+ affected, ctx=serutils.Context(frame_desc=desc)
1062
+ ))
1061
1063
  if len(result) == 1:
1062
1064
  return result[0]
1063
1065
  return result
@@ -1322,7 +1324,13 @@ class AsyncDeepModel(ElementBase[DeepModelAPI]):
1322
1324
  kwargs={kw_name: part.to_json(orient='records', double_precision=15)}
1323
1325
  ))
1324
1326
 
1325
- def get_object(self, object_name) -> edgedb.Object:
1327
+ def get_object(self, object_name: str) -> edgedb.Object:
1328
+ """获取指定对象名的对象
1329
+
1330
+ Args:
1331
+ object_name: 对象名
1332
+
1333
+ """
1326
1334
  if object_name in self.user_objects:
1327
1335
  obj = self.user_objects[object_name]
1328
1336
  elif object_name in self.system_objects:
@@ -7,6 +7,7 @@ from contextlib import contextmanager
7
7
  from importlib import import_module
8
8
  from math import ceil
9
9
  from typing import Any, Dict, Tuple
10
+ from urllib.parse import quote_plus
10
11
 
11
12
  from loguru import logger
12
13
 
@@ -59,7 +60,7 @@ if ONLINE_MODE: # pragma: no cover
59
60
  assert SERVER_OPTION.redis.mode == 'single', 'Only supported in redis single mode'
60
61
 
61
62
  redis_addr = SERVER_OPTION.redis.addr
62
- redis_password = SERVER_OPTION.redis.password
63
+ redis_password = quote_plus(SERVER_OPTION.redis.password)
63
64
 
64
65
  CONCURRENCY_KEY_PREFIX = f'celery_concurrency_task:{OPTION.general.task_info.get("worker_name")}'
65
66
  redis_cli = RedisCli(f"redis://:{redis_password}@{redis_addr}/13")
@@ -2,7 +2,6 @@ from __future__ import annotations
2
2
 
3
3
  import asyncio
4
4
  import itertools
5
- from asyncio import SelectorEventLoop
6
5
  import asyncio.events as events
7
6
  from asyncio import Future as AioFuture
8
7
  import sys
@@ -102,10 +101,18 @@ def _patch_task():
102
101
 
103
102
  _patch_task()
104
103
 
104
+ if sys.platform == 'win32':
105
+ BaseEventLoop = asyncio.ProactorEventLoop
106
+ is_proactorloop = True
107
+ else:
108
+ BaseEventLoop = asyncio.SelectorEventLoop
109
+ is_proactorloop = False
110
+
105
111
 
106
112
  # noinspection PyUnresolvedReferences,PyAttributeOutsideInit,PyProtectedMember
107
- class ReentrantLoop(SelectorEventLoop):
113
+ class ReentrantLoop(BaseEventLoop):
108
114
  _num_runs_pending = 0
115
+ _is_proactorloop = is_proactorloop
109
116
  _nest_patched = True
110
117
 
111
118
  def run_forever(self):
@@ -140,11 +147,22 @@ class ReentrantLoop(SelectorEventLoop):
140
147
  self._thread_id = threading.get_ident()
141
148
  events._set_running_loop(self)
142
149
  self._num_runs_pending += 1
150
+ if self._is_proactorloop:
151
+ if self._self_reading_future is None:
152
+ self.call_soon(self._loop_self_reading)
143
153
  yield
144
154
  finally:
145
155
  self._thread_id = old_thread_id
146
156
  events._set_running_loop(old_running_loop)
147
157
  self._num_runs_pending -= 1
158
+ if self._is_proactorloop:
159
+ if (self._num_runs_pending == 0
160
+ and self._self_reading_future is not None):
161
+ ov = self._self_reading_future._ov
162
+ self._self_reading_future.cancel()
163
+ if ov is not None:
164
+ self._proactor._unregister(ov)
165
+ self._self_reading_future = None
148
166
 
149
167
  @contextmanager
150
168
  def manage_asyncgens(self):