deepfos 1.1.52__tar.gz → 1.1.53__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 (192) hide show
  1. {deepfos-1.1.52 → deepfos-1.1.53}/CHANGELOG.md +10 -0
  2. {deepfos-1.1.52 → deepfos-1.1.53}/PKG-INFO +12 -10
  3. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/_version.py +3 -3
  4. deepfos-1.1.53/deepfos/api/deep_pipeline.py +61 -0
  5. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/deepconnector.py +6 -0
  6. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/deepmodel.py +17 -0
  7. deepfos-1.1.53/deepfos/api/models/deep_pipeline.py +55 -0
  8. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/python.py +9 -3
  9. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/logictable/sqlcondition.py +22 -8
  10. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/logictable/tablemodel.py +6 -5
  11. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/element/__init__.py +2 -0
  12. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/element/bizmodel.py +2 -2
  13. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/element/datatable.py +1 -1
  14. deepfos-1.1.53/deepfos/element/deep_pipeline.py +186 -0
  15. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/element/dimension.py +2 -2
  16. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/element/pyscript.py +16 -8
  17. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/exceptions/__init__.py +36 -0
  18. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/deepchart.py +7 -7
  19. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/redis.py +2 -1
  20. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/subtask.py +2 -0
  21. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos.egg-info/PKG-INFO +12 -10
  22. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos.egg-info/SOURCES.txt +6 -0
  23. deepfos-1.1.53/deepfos.egg-info/requires.txt +18 -0
  24. {deepfos-1.1.52 → deepfos-1.1.53}/setup.cfg +11 -9
  25. {deepfos-1.1.52 → deepfos-1.1.53}/setup.py +6 -6
  26. deepfos-1.1.52/deepfos.egg-info/requires.txt +0 -16
  27. {deepfos-1.1.52 → deepfos-1.1.53}/.gitattributes +0 -0
  28. {deepfos-1.1.52 → deepfos-1.1.53}/.gitee/ISSUE_GUIDELINES.md +0 -0
  29. {deepfos-1.1.52 → deepfos-1.1.53}/.gitee/ISSUE_TEMPLATE.md +0 -0
  30. {deepfos-1.1.52 → deepfos-1.1.53}/.gitignore +0 -0
  31. {deepfos-1.1.52 → deepfos-1.1.53}/MANIFEST.in +0 -0
  32. {deepfos-1.1.52 → deepfos-1.1.53}/README.md +0 -0
  33. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/__init__.py +0 -0
  34. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/algo/__init__.py +0 -0
  35. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/algo/graph.py +0 -0
  36. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/V1_1/__init__.py +0 -0
  37. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/V1_1/business_model.py +0 -0
  38. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/V1_1/dimension.py +0 -0
  39. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/V1_1/models/__init__.py +0 -0
  40. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/V1_1/models/business_model.py +0 -0
  41. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/V1_1/models/dimension.py +0 -0
  42. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/V1_2/__init__.py +0 -0
  43. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/V1_2/dimension.py +0 -0
  44. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/V1_2/models/__init__.py +0 -0
  45. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/V1_2/models/dimension.py +0 -0
  46. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/__init__.py +0 -0
  47. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/account.py +0 -0
  48. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/accounting_engines.py +0 -0
  49. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/app.py +0 -0
  50. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/approval_process.py +0 -0
  51. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/base.py +0 -0
  52. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/business_model.py +0 -0
  53. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/consolidation.py +0 -0
  54. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/consolidation_process.py +0 -0
  55. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/datatable.py +0 -0
  56. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/deepfos_task.py +0 -0
  57. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/dimension.py +0 -0
  58. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/financial_model.py +0 -0
  59. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/journal_model.py +0 -0
  60. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/journal_template.py +0 -0
  61. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/memory_financial_model.py +0 -0
  62. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/__init__.py +0 -0
  63. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/account.py +0 -0
  64. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/accounting_engines.py +0 -0
  65. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/app.py +0 -0
  66. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/approval_process.py +0 -0
  67. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/base.py +0 -0
  68. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/business_model.py +0 -0
  69. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/consolidation.py +0 -0
  70. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/consolidation_process.py +0 -0
  71. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/datatable_mysql.py +0 -0
  72. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/deepconnector.py +0 -0
  73. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/deepfos_task.py +0 -0
  74. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/deepmodel.py +0 -0
  75. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/dimension.py +0 -0
  76. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/financial_model.py +0 -0
  77. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/journal_model.py +0 -0
  78. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/journal_template.py +0 -0
  79. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/memory_financial_model.py +0 -0
  80. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/platform.py +0 -0
  81. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/python.py +0 -0
  82. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/reconciliation_engine.py +0 -0
  83. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/reconciliation_report.py +0 -0
  84. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/role_strategy.py +0 -0
  85. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/smartlist.py +0 -0
  86. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/space.py +0 -0
  87. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/system.py +0 -0
  88. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/variable.py +0 -0
  89. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/models/workflow.py +0 -0
  90. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/platform.py +0 -0
  91. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/reconciliation_engine.py +0 -0
  92. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/reconciliation_report.py +0 -0
  93. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/role_strategy.py +0 -0
  94. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/smartlist.py +0 -0
  95. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/space.py +0 -0
  96. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/system.py +0 -0
  97. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/variable.py +0 -0
  98. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/api/workflow.py +0 -0
  99. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/boost/__init__.py +0 -0
  100. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/boost/jstream.c +0 -0
  101. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/boost/jstream.pyx +0 -0
  102. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/boost/pandas.c +0 -0
  103. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/boost/pandas.pyx +0 -0
  104. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/boost/py_jstream.py +0 -0
  105. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/boost/py_pandas.py +0 -0
  106. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/cache.py +0 -0
  107. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/config.py +0 -0
  108. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/__init__.py +0 -0
  109. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/cube/__init__.py +0 -0
  110. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/cube/_base.py +0 -0
  111. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/cube/constants.py +0 -0
  112. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/cube/cube.py +0 -0
  113. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/cube/formula.py +0 -0
  114. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/cube/syscube.py +0 -0
  115. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/cube/typing.py +0 -0
  116. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/cube/utils.py +0 -0
  117. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/dimension/__init__.py +0 -0
  118. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/dimension/_base.py +0 -0
  119. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/dimension/dimcreator.py +0 -0
  120. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/dimension/dimension.py +0 -0
  121. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/dimension/dimexpr.py +0 -0
  122. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/dimension/dimmember.py +0 -0
  123. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/dimension/eledimension.py +0 -0
  124. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/dimension/filters.py +0 -0
  125. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/dimension/sysdimension.py +0 -0
  126. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/logictable/__init__.py +0 -0
  127. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/logictable/_cache.py +0 -0
  128. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/logictable/_operator.py +0 -0
  129. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/core/logictable/nodemixin.py +0 -0
  130. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/db/__init__.py +0 -0
  131. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/db/cipher.py +0 -0
  132. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/db/clickhouse.py +0 -0
  133. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/db/connector.py +0 -0
  134. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/db/daclickhouse.py +0 -0
  135. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/db/dameng.py +0 -0
  136. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/db/damysql.py +0 -0
  137. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/db/dbkits.py +0 -0
  138. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/db/deepengine.py +0 -0
  139. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/db/deepmodel.py +0 -0
  140. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/db/deepmodel_kingbase.py +0 -0
  141. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/db/edb.py +0 -0
  142. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/db/gauss.py +0 -0
  143. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/db/kingbase.py +0 -0
  144. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/db/mysql.py +0 -0
  145. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/db/oracle.py +0 -0
  146. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/db/postgresql.py +0 -0
  147. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/db/sqlserver.py +0 -0
  148. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/db/utils.py +0 -0
  149. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/element/accounting.py +0 -0
  150. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/element/apvlprocess.py +0 -0
  151. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/element/base.py +0 -0
  152. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/element/deepconnector.py +0 -0
  153. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/element/deepmodel.py +0 -0
  154. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/element/fact_table.py +0 -0
  155. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/element/finmodel.py +0 -0
  156. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/element/journal.py +0 -0
  157. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/element/journal_template.py +0 -0
  158. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/element/reconciliation.py +0 -0
  159. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/element/rolestrategy.py +0 -0
  160. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/element/smartlist.py +0 -0
  161. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/element/variable.py +0 -0
  162. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/element/workflow.py +0 -0
  163. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/exceptions/hook.py +0 -0
  164. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lazy.py +0 -0
  165. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/__init__.py +0 -0
  166. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/_javaobj.py +0 -0
  167. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/asynchronous.py +0 -0
  168. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/concurrency.py +0 -0
  169. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/constant.py +0 -0
  170. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/decorator.py +0 -0
  171. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/deepux.py +0 -0
  172. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/discovery.py +0 -0
  173. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/edb_lexer.py +0 -0
  174. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/eureka.py +0 -0
  175. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/filterparser.py +0 -0
  176. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/httpcli.py +0 -0
  177. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/jsonstreamer.py +0 -0
  178. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/msg.py +0 -0
  179. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/nacos.py +0 -0
  180. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/patch.py +0 -0
  181. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/serutils.py +0 -0
  182. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/stopwatch.py +0 -0
  183. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/sysutils.py +0 -0
  184. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/lib/utils.py +0 -0
  185. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/local.py +0 -0
  186. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/options.py +0 -0
  187. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos/translation.py +0 -0
  188. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos.egg-info/dependency_links.txt +0 -0
  189. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos.egg-info/not-zip-safe +0 -0
  190. {deepfos-1.1.52 → deepfos-1.1.53}/deepfos.egg-info/top_level.txt +0 -0
  191. {deepfos-1.1.52 → deepfos-1.1.53}/requirements.txt +0 -0
  192. {deepfos-1.1.52 → deepfos-1.1.53}/versioneer.py +0 -0
@@ -1,3 +1,13 @@
1
+ ## [1.1.53] - 2025-02-25
2
+
3
+ ### 新增
4
+
5
+ * 封装数据流3.0组件元素
6
+
7
+ ### 变更
8
+
9
+ * 依赖的三方库版本升级
10
+
1
11
  ## [1.1.52] - 2025-01-07
2
12
 
3
13
  ### 变更
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deepfos
3
- Version: 1.1.52
3
+ Version: 1.1.53
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
@@ -12,19 +12,21 @@ Classifier: Programming Language :: Python :: 3.8
12
12
  Classifier: Programming Language :: Python :: 3.9
13
13
  Classifier: Programming Language :: Python :: 3.10
14
14
  Requires-Python: >=3.8.3
15
- Requires-Dist: pandas==1.2.0
16
- Requires-Dist: requests==2.25.1
15
+ Requires-Dist: pandas
16
+ Requires-Dist: requests~=2.26
17
17
  Requires-Dist: pymysql==1.1.1
18
- Requires-Dist: aiohttp==3.9.0
19
- Requires-Dist: pydantic==1.8.2
20
- Requires-Dist: cachetools==4.2.2
18
+ Requires-Dist: aiohttp~=3.9.5
19
+ Requires-Dist: pydantic<2.0.0,>=1.10.0
20
+ Requires-Dist: cachetools<6,>=5.0.0
21
21
  Requires-Dist: loguru==0.5.3
22
22
  Requires-Dist: PyPika==0.48.8
23
- Requires-Dist: aiomysql==0.2.0
24
- Requires-Dist: clickhouse-driver==0.2.2
23
+ Requires-Dist: aiomysql~=0.2.0
24
+ Requires-Dist: clickhouse-driver~=0.2.9
25
25
  Requires-Dist: aioredis==2.0.1
26
26
  Requires-Dist: redis==4.5.3
27
- Requires-Dist: deepfos-ipc~=1.2.3
28
- Requires-Dist: typing-extensions==4.5.0
27
+ Requires-Dist: nest-asyncio==1.5.4
28
+ Requires-Dist: deepfos-ipc~=1.3.1
29
+ Requires-Dist: typing-extensions>=4.8.0
29
30
  Requires-Dist: edgedb~=1.4.0
30
31
  Requires-Dist: asyncpg~=0.29.0
32
+ Requires-Dist: numpy<2.0.0
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-01-08T03:11:42+0000",
11
+ "date": "2025-02-27T06:36:31+0000",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "da07717ad109df0e4a31cc93ce68ad1a37470045",
15
- "version": "1.1.52"
14
+ "full-revisionid": "8a59c898c75628d287c6ef2d8889139be57b7cfe",
15
+ "version": "1.1.53"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -0,0 +1,61 @@
1
+ from typing import Union, Any, Awaitable
2
+
3
+ from deepfos.lib.decorator import cached_property
4
+ from .base import DynamicRootAPI, ChildAPI, get, post
5
+ from .models.deep_pipeline import *
6
+
7
+ __all__ = ['DeepPipelineAPI']
8
+
9
+
10
+ class RunAPI(ChildAPI):
11
+ """数据流的执行、获取执行信息等逻辑"""
12
+ endpoint = '/'
13
+
14
+ @post('run')
15
+ def run_async(self, run_info: RunInfo) -> Union[str, Awaitable[str]]:
16
+ """
17
+ 异步执行数据流
18
+ 异步执行数据流,返回任务id
19
+ """
20
+ return {'body': run_info}
21
+
22
+ @get('run')
23
+ def result(self, task_id: str, timeout: int = None) -> Union[Any, Awaitable[Any]]:
24
+ """获取执行结果"""
25
+ return {'param': {'timeout': timeout}, 'path': f'{task_id}/result'}
26
+
27
+
28
+ class FlowAPI(ChildAPI):
29
+ """数据流定义相关接口"""
30
+ endpoint = '/flow'
31
+
32
+ @get('')
33
+ def open(self, element_name: str, folder_id: str, version: str) -> Union[FlowInfo, Awaitable[FlowInfo]]:
34
+ """查看数据流"""
35
+ return {
36
+ 'param': {
37
+ 'elementName': element_name,
38
+ 'folderId': folder_id,
39
+ 'version': version
40
+ }
41
+ }
42
+
43
+
44
+ class DeepPipelineAPI(DynamicRootAPI, builtin=True):
45
+ """DeepPipeline组件接口"""
46
+ module_type = 'DPL'
47
+ default_version = (3, 0)
48
+ multi_version = False
49
+ cls_name = 'DeepPipelineAPI'
50
+ module_name = 'deepfos.api.deep_pipeline'
51
+ api_version = (3, 0)
52
+
53
+ @cached_property
54
+ def run(self) -> RunAPI:
55
+ """数据流的执行、获取执行信息等逻辑"""
56
+ return RunAPI(self)
57
+
58
+ @cached_property
59
+ def flow(self) -> FlowAPI:
60
+ """数据流定义相关接口"""
61
+ return FlowAPI(self)
@@ -7,7 +7,11 @@ from .base import ChildAPI, get, RootAPI
7
7
  from .models.deepconnector import *
8
8
 
9
9
 
10
+ __all__ = ['DeepConnectorAPI']
11
+
12
+
10
13
  class DataSourceAPI(ChildAPI):
14
+ """连接信息相关接口"""
11
15
  endpoint = '/apis/v3/ds/spaces/{space}/apps/{app}'
12
16
 
13
17
  @get('connection-info', data_wrapped=False)
@@ -21,10 +25,12 @@ class DataSourceAPI(ChildAPI):
21
25
 
22
26
 
23
27
  class DeepConnectorAPI(RootAPI):
28
+ """连接器组件接口"""
24
29
  prefix = lambda: 'http://deep-connector-server'
25
30
  url_need_format = True
26
31
  module_type = 'CONN'
27
32
 
28
33
  @cached_property
29
34
  def datasource(self) -> DataSourceAPI:
35
+ """连接信息相关接口"""
30
36
  return DataSourceAPI(self)
@@ -4,8 +4,11 @@ from deepfos.lib.decorator import cached_property
4
4
  from .base import DynamicRootAPI, ChildAPI, get, post
5
5
  from .models.deepmodel import *
6
6
 
7
+ __all__ = ['DeepModelAPI']
8
+
7
9
 
8
10
  class ObjectAPI(ChildAPI):
11
+ """模型对象相关"""
9
12
  endpoint = '/object'
10
13
 
11
14
  @get('all/get')
@@ -22,6 +25,7 @@ class ObjectAPI(ChildAPI):
22
25
 
23
26
 
24
27
  class RuleAPI(ChildAPI):
28
+ """规则清单相关"""
25
29
  endpoint = '/rules'
26
30
 
27
31
  @get('/')
@@ -38,6 +42,7 @@ class RuleAPI(ChildAPI):
38
42
 
39
43
 
40
44
  class SeqAPI(ChildAPI):
45
+ """序列生成相关"""
41
46
  endpoint = '/sequence'
42
47
 
43
48
  @post('/instance/edit')
@@ -79,6 +84,7 @@ class SeqAPI(ChildAPI):
79
84
 
80
85
 
81
86
  class ShardingAPI(ChildAPI):
87
+ """分库信息"""
82
88
  endpoint = '/sharding'
83
89
 
84
90
  @get('database')
@@ -87,6 +93,7 @@ class ShardingAPI(ChildAPI):
87
93
 
88
94
 
89
95
  class DeepQLAPI(ChildAPI):
96
+ """查询器"""
90
97
  endpoint = '/public/deepql/actions'
91
98
 
92
99
  @post('query')
@@ -99,6 +106,7 @@ class DeepQLAPI(ChildAPI):
99
106
 
100
107
 
101
108
  class PresentationAPI(ChildAPI):
109
+ """展示层"""
102
110
  endpoint = '/presentation-layer'
103
111
 
104
112
  @get('ql-selector/ql-record-info')
@@ -127,6 +135,7 @@ class PresentationAPI(ChildAPI):
127
135
 
128
136
 
129
137
  class ExtraAPI(ChildAPI):
138
+ """其他接口"""
130
139
  endpoint = '/'
131
140
 
132
141
  @get('git-version')
@@ -135,6 +144,7 @@ class ExtraAPI(ChildAPI):
135
144
 
136
145
 
137
146
  class DeepModelAPI(DynamicRootAPI, builtin=True):
147
+ """DeepModel组件接口"""
138
148
  module_type = 'DM'
139
149
  default_version = (1, 0)
140
150
  multi_version = False
@@ -144,28 +154,35 @@ class DeepModelAPI(DynamicRootAPI, builtin=True):
144
154
 
145
155
  @cached_property
146
156
  def object(self) -> ObjectAPI:
157
+ """模型对象相关"""
147
158
  return ObjectAPI(self)
148
159
 
149
160
  @cached_property
150
161
  def deepql(self) -> DeepQLAPI:
162
+ """查询器"""
151
163
  return DeepQLAPI(self)
152
164
 
153
165
  @cached_property
154
166
  def rule(self) -> RuleAPI:
167
+ """规则清单相关"""
155
168
  return RuleAPI(self)
156
169
 
157
170
  @cached_property
158
171
  def seq(self) -> SeqAPI:
172
+ """序列生成相关"""
159
173
  return SeqAPI(self)
160
174
 
161
175
  @cached_property
162
176
  def sharding(self) -> ShardingAPI:
177
+ """分库信息"""
163
178
  return ShardingAPI(self)
164
179
 
165
180
  @cached_property
166
181
  def presentation(self) -> PresentationAPI:
182
+ """展示层"""
167
183
  return PresentationAPI(self)
168
184
 
169
185
  @cached_property
170
186
  def extra(self) -> ExtraAPI:
187
+ """其他接口"""
171
188
  return ExtraAPI(self)
@@ -0,0 +1,55 @@
1
+ from typing import Any, Optional
2
+
3
+ from .base import BaseModel
4
+
5
+ __all__ = [
6
+ "RunInfo", "FlowInfo",
7
+ ]
8
+
9
+
10
+ class RunInfo(BaseModel):
11
+ #: 元素名/编码
12
+ elementName: str
13
+ #: 元素类型
14
+ elementType: str = "DPL"
15
+ #: 执行参数
16
+ parameter: Any
17
+ #: 文件路径
18
+ path: str = None
19
+ #: 文件夹id
20
+ folderId: str = None
21
+ # 是否在同一个进程执行
22
+ inProcess: bool = False
23
+
24
+
25
+ class Revision(BaseModel):
26
+ #: 版本号
27
+ version: str
28
+ #: 版本名
29
+ name: str
30
+
31
+
32
+ class Configure(BaseModel):
33
+ #: 超时时间(秒)
34
+ timeout: int
35
+ #: 公共脚本
36
+ prelude: str = None
37
+ #: 实例名称
38
+ runNameTemplate: str = None
39
+ #: 版本
40
+ revision: Revision
41
+ #: 状态
42
+ status: str
43
+
44
+
45
+ class FlowInfo(BaseModel):
46
+ #: 元素名/编码
47
+ elementName: str
48
+ #: 元素类型
49
+ elementType: str
50
+ #: 文件夹id
51
+ folderId: str = None
52
+ #: 元素id
53
+ elementId: str = None
54
+ #: 数据流配置
55
+ configure: Configure
@@ -3,8 +3,11 @@ from .models.python import *
3
3
  from deepfos.lib.decorator import cached_property
4
4
  from typing import List, Dict, Union, Any, Awaitable
5
5
 
6
+ __all__ = ['PythonAPI']
7
+
6
8
 
7
9
  class WorkerAPI(ChildAPI):
10
+ """python工作进程相关接口"""
8
11
  endpoint = '/worker'
9
12
 
10
13
  @post('register')
@@ -17,6 +20,7 @@ class WorkerAPI(ChildAPI):
17
20
 
18
21
 
19
22
  class ScriptAPI(ChildAPI):
23
+ """python脚本的运行,关闭,进度查询等逻辑"""
20
24
  endpoint = '/script'
21
25
 
22
26
  @post('run')
@@ -33,6 +37,7 @@ class ScriptAPI(ChildAPI):
33
37
 
34
38
 
35
39
  class FileAPI(ChildAPI):
40
+ """python文件的新建,上传,更新逻辑"""
36
41
  endpoint = '/file'
37
42
 
38
43
  @post('add')
@@ -61,6 +66,7 @@ class FileAPI(ChildAPI):
61
66
 
62
67
 
63
68
  class PythonAPI(DynamicRootAPI, builtin=True):
69
+ """Python组件"""
64
70
  module_type = 'PY'
65
71
  default_version = (2, 0)
66
72
  multi_version = False
@@ -70,15 +76,15 @@ class PythonAPI(DynamicRootAPI, builtin=True):
70
76
 
71
77
  @cached_property
72
78
  def worker(self) -> WorkerAPI:
79
+ """python工作进程相关接口"""
73
80
  return WorkerAPI(self)
74
81
 
75
82
  @cached_property
76
83
  def script(self) -> ScriptAPI:
84
+ """python脚本的运行,关闭,进度查询等逻辑"""
77
85
  return ScriptAPI(self)
78
86
 
79
87
  @cached_property
80
88
  def file(self) -> FileAPI:
81
- """
82
- python文件管理相关接口
83
- """
89
+ """python文件的新建,上传,更新逻辑"""
84
90
  return FileAPI(self)
@@ -410,12 +410,20 @@ class SQLCondition:
410
410
  val_list = self.val_list.copy()
411
411
  elif 1 == len(fd_me) == len(fd_other):
412
412
  val_list = pd.DataFrame()
413
- self.__static_cond = self.__static_cond.append(
414
- pd.DataFrame(data={'field': self.fields[0], 'op': [OpFactory(IN, self.val_list.iloc[:, 0])]})
415
- )
416
- other.__static_cond = other.__static_cond.append(
417
- pd.DataFrame(data={'field': other.fields[0], 'op': [OpFactory(IN, other.val_list.iloc[:, 0])]})
418
- )
413
+ self.__static_cond = pd.concat([
414
+ self.__static_cond,
415
+ pd.DataFrame(data={
416
+ 'field': self.fields[0],
417
+ 'op': [OpFactory(IN, self.val_list.iloc[:, 0])]
418
+ })
419
+ ])
420
+ other.__static_cond = pd.concat([
421
+ other.__static_cond,
422
+ pd.DataFrame(data={
423
+ 'field': other.fields[0],
424
+ 'op': [OpFactory(IN, other.val_list.iloc[:, 0])]
425
+ })
426
+ ])
419
427
  else:
420
428
  # 字段越多,限制条件越多,一般数据量越小,定义为sub
421
429
  if fd_me.issubset(fd_other):
@@ -465,8 +473,14 @@ class SQLCondition:
465
473
 
466
474
  if len(fields) == 1:
467
475
  # 将条件归类至sta_cond
468
- static_cond = self.__static_cond.append(
469
- pd.DataFrame(data={'field': fields, 'op': [OpFactory(IN, val_list.iloc[:, 0])]})
476
+ static_cond = pd.concat(
477
+ [
478
+ self.__static_cond,
479
+ pd.DataFrame(data={
480
+ 'field': fields,
481
+ 'op': [OpFactory(IN, val_list.iloc[:, 0])]
482
+ })
483
+ ]
470
484
  ).sort_values('field').reset_index(drop=True)
471
485
  val_list = pd.DataFrame()
472
486
  else:
@@ -339,11 +339,12 @@ class MetaTable(MetaNodeMixin):
339
339
 
340
340
  df = pd.DataFrame()
341
341
  for cd in cond.to_sql():
342
- df = df.append(cls.datatable.select(
343
- columns=fields,
344
- where=cd,
345
- distinct=unique,
346
- ))
342
+ df = pd.concat(
343
+ [
344
+ df,
345
+ cls.datatable.select(columns=fields, where=cd, distinct=unique)
346
+ ]
347
+ )
347
348
 
348
349
  logger.debug(f"Got DATA:\n {df}")
349
350
 
@@ -35,6 +35,7 @@ if TYPE_CHECKING: # pragma: no cover
35
35
  from .journal import AsyncJournalModel, JournalModel
36
36
  from .deepmodel import AsyncDeepModel, DeepModel
37
37
  from .deepconnector import AsyncDeepConnector, DeepConnector
38
+ from .deep_pipeline import AsyncDeepPipeline, DeepPipeline
38
39
 
39
40
 
40
41
  lazify(
@@ -82,6 +83,7 @@ lazify(
82
83
  'deepfos.element.journal': ('AsyncJournalModel', 'JournalModel'),
83
84
  'deepfos.element.deepmodel': ('AsyncDeepModel', 'DeepModel'),
84
85
  'deepfos.element.deepconnector': ('AsyncDeepConnector', 'DeepConnector'),
86
+ 'deepfos.element.deep_pipeline': ('AsyncDeepPipeline', 'DeepPipeline'),
85
87
  },
86
88
  globals()
87
89
  )
@@ -646,7 +646,7 @@ class AsyncBusinessModel(ElementBase[BusinessModelAPI]):
646
646
  df_row = pd.DataFrame([{'process_operation_id': operation_info.id,
647
647
  'origin_status': operation_info.originStatusList,
648
648
  'target_status': operation_info.targetStatus}])
649
- df_operation = df_operation.append(df_row)
649
+ df_operation = pd.concat([df_operation, df_row])
650
650
  df_operation.reset_index(drop=True, inplace=True)
651
651
  if len(df_operation) > 1:
652
652
  df_operation['target_status_shift'] = df_operation['target_status'].shift(1)
@@ -699,7 +699,7 @@ class AsyncBusinessModel(ElementBase[BusinessModelAPI]):
699
699
  df_success['line_no'] += 1
700
700
  df_success['result_status'] = row['target_status']
701
701
  df_success['process_operation_id'] = row['process_operation_id']
702
- df_insert = df_insert.append(df_success)
702
+ df_insert = pd.concat([df_insert, df_success])
703
703
 
704
704
  tbl_main = self.logic_tables[main_tbl_name].async_datatable
705
705
  if not df_failure.empty:
@@ -1690,7 +1690,7 @@ class AsyncDirectAccessDataTableMySQL(AsyncDataTableMySQL):
1690
1690
  limit=limit,
1691
1691
  offset=offset
1692
1692
  )
1693
- return raw_data.to_dict(orient='record')
1693
+ return raw_data.to_dict(orient='records')
1694
1694
 
1695
1695
  @txn_support
1696
1696
  async def run_sql(self, sql: str):
@@ -0,0 +1,186 @@
1
+ import asyncio
2
+ import time
3
+ from math import ceil
4
+ from typing import Any, TYPE_CHECKING, List
5
+
6
+ from deepfos import OPTION
7
+ from deepfos.api.deep_pipeline import DeepPipelineAPI
8
+ from deepfos.api.models.deep_pipeline import RunInfo, FlowInfo
9
+ from deepfos.element.base import ElementBase, SyncMeta
10
+ from deepfos.exceptions import (
11
+ APIResponseError, RunIdInvalid, RunTerminated,
12
+ ReleaseFlowTimeout, RunFailedError, ReleaseFlowNotExists,
13
+ )
14
+ from deepfos.lib.asynchronous import future_property
15
+ from deepfos.lib.decorator import cached_property
16
+
17
+ errcode_map = {
18
+ 42030002: ReleaseFlowTimeout,
19
+ 42030003: RunIdInvalid,
20
+ 42030009: RunFailedError,
21
+ 42030010: RunTerminated,
22
+ }
23
+
24
+
25
+ # -----------------------------------------------------------------------------
26
+ # core
27
+ class AsyncDeepPipeline(ElementBase[DeepPipelineAPI]):
28
+ """数据流3.0"""
29
+
30
+ @future_property
31
+ async def release(self) -> FlowInfo:
32
+ """发布版信息"""
33
+ api = await self.wait_for('async_api')
34
+ ele_info = await self.wait_for('element_info')
35
+ return await api.flow.open(
36
+ folder_id=ele_info.folderId,
37
+ element_name=ele_info.elementName,
38
+ version='release'
39
+ )
40
+
41
+ @cached_property
42
+ def has_approved_release(self) -> bool:
43
+ return (
44
+ self.release is not None
45
+ and self.release.configure.status == 'APPROVED'
46
+ )
47
+
48
+ async def run(
49
+ self,
50
+ parameter: Any = None,
51
+ timeout: int = None,
52
+ in_process: bool = True,
53
+ ) -> Any:
54
+ """
55
+ 同步启动数据流
56
+
57
+ Args:
58
+ parameter: 执行参数
59
+ timeout: 超时时间(秒)
60
+ in_process: 是否在同一个进程执行
61
+
62
+ Returns:
63
+ 执行结果
64
+ """
65
+ run_id = await self.run_async(parameter, in_process)
66
+ return await self.result(run_id, timeout)
67
+
68
+ async def run_async(
69
+ self,
70
+ parameter: Any = None,
71
+ in_process: bool = True,
72
+ ) -> str:
73
+ """
74
+ 异步启动数据流
75
+
76
+ Args:
77
+ parameter: 执行参数
78
+ in_process: 是否在同一个进程执行
79
+
80
+ Returns:
81
+ 执行ID
82
+ """
83
+ if not self.has_approved_release:
84
+ raise ReleaseFlowNotExists('暂无启用中状态的数据流版本')
85
+
86
+ return await self.async_api.run.run_async(
87
+ RunInfo(
88
+ elementName=self.element_name,
89
+ parameter=parameter,
90
+ folderId=self.element_info.folderId,
91
+ inProcess=in_process
92
+ )
93
+ )
94
+
95
+ async def result(self, run_id: str, timeout: int = None) -> Any:
96
+ """
97
+ 获取异步执行结果
98
+
99
+ Args:
100
+ run_id: 执行ID
101
+ timeout: 超时时间(秒)
102
+
103
+ Returns:
104
+ 执行结果
105
+
106
+ """
107
+ start_time = time.time()
108
+ remaining_time = interval = min(max(OPTION.api.timeout - 1, 1), 5)
109
+ if timeout is not None:
110
+ remaining_time = min(interval, timeout)
111
+
112
+ while timeout is None or remaining_time > 0:
113
+ try:
114
+ return await self.async_api.run.result(
115
+ run_id,
116
+ timeout=remaining_time
117
+ )
118
+ except APIResponseError as e:
119
+ if e.code not in errcode_map:
120
+ raise
121
+
122
+ err_cls = errcode_map[e.code]
123
+ if err_cls is not ReleaseFlowTimeout:
124
+ raise errcode_map[e.code](str(e)) from None
125
+
126
+ delta_time = time.time() - start_time
127
+ remaining_time = (
128
+ ceil(min(interval, timeout - delta_time))
129
+ if timeout is not None else interval
130
+ )
131
+
132
+ raise ReleaseFlowTimeout() from None
133
+
134
+ async def run_batch(
135
+ self,
136
+ parameters: List[Any],
137
+ in_process: bool = True,
138
+ ) -> List[str]:
139
+ """
140
+ 批量异步启动数据流
141
+
142
+ Args:
143
+ parameters: 执行参数列表
144
+ in_process: 是否在同一个进程执行
145
+
146
+ Returns:
147
+ 执行ID列表
148
+ """
149
+ if not self.has_approved_release:
150
+ raise ReleaseFlowNotExists('暂无启用中状态的数据流版本')
151
+
152
+ result = await asyncio.gather(*(
153
+ self.run_async(parameter, in_process)
154
+ for parameter in parameters
155
+ ))
156
+ return list(result)
157
+
158
+
159
+ class DeepPipeline(AsyncDeepPipeline, metaclass=SyncMeta):
160
+ synchronize = ('run', 'run_async', 'result', 'run_batch')
161
+
162
+ if TYPE_CHECKING: # pragma: no cover
163
+ def run(
164
+ self,
165
+ parameter: Any = None,
166
+ timeout: int = None,
167
+ in_process: bool = True,
168
+ ) -> Any:
169
+ ...
170
+
171
+ def run_async(
172
+ self,
173
+ parameter: Any = None,
174
+ in_process: bool = True,
175
+ ) -> str:
176
+ ...
177
+
178
+ def result(self, run_id: str, timeout: int = None) -> Any:
179
+ ...
180
+
181
+ def run_batch(
182
+ self,
183
+ parameters: List[Any],
184
+ in_process: bool = True,
185
+ ):
186
+ ...
@@ -1118,7 +1118,7 @@ class AsyncDimension(ElementBase[DimensionAPI]):
1118
1118
  if 'shared_member' not in dataframe.columns:
1119
1119
  dataframe = dataframe.assign(shared_member=False)
1120
1120
 
1121
- records = dataframe[fields].to_dict(orient="records")
1121
+ records = dataframe[list(fields)].to_dict(orient="records")
1122
1122
  mbrs = []
1123
1123
  for record in records:
1124
1124
  mbrs.append(
@@ -1173,7 +1173,7 @@ def _validate_df_for_dimension(df: pd.DataFrame):
1173
1173
  duplicated = unique_df[unique_df['size'] > 1]
1174
1174
  if not duplicated.empty:
1175
1175
  raise ValueError(
1176
- f"Duplicated member name for: {duplicated.to_dict(orient='record')}"
1176
+ f"Duplicated member name for: {duplicated.to_dict(orient='records')}"
1177
1177
  )
1178
1178
  else:
1179
1179
  if df[DFLT_NAME_COLUMN].nunique() != len(df):