deepfos 1.1.63__tar.gz → 1.1.64__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 (191) hide show
  1. {deepfos-1.1.63 → deepfos-1.1.64}/CHANGELOG.md +8 -0
  2. {deepfos-1.1.63 → deepfos-1.1.64}/PKG-INFO +1 -1
  3. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/_version.py +3 -3
  4. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/deepconnector.py +3 -3
  5. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/deepconnector.py +1 -0
  6. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/deepconnector.py +34 -1
  7. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/deepmodel.py +38 -25
  8. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/workflow.py +6 -4
  9. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/sysutils.py +6 -7
  10. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos.egg-info/PKG-INFO +1 -1
  11. {deepfos-1.1.63 → deepfos-1.1.64}/.gitattributes +0 -0
  12. {deepfos-1.1.63 → deepfos-1.1.64}/.gitee/ISSUE_GUIDELINES.md +0 -0
  13. {deepfos-1.1.63 → deepfos-1.1.64}/.gitee/ISSUE_TEMPLATE.md +0 -0
  14. {deepfos-1.1.63 → deepfos-1.1.64}/.gitignore +0 -0
  15. {deepfos-1.1.63 → deepfos-1.1.64}/MANIFEST.in +0 -0
  16. {deepfos-1.1.63 → deepfos-1.1.64}/README.md +0 -0
  17. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/__init__.py +0 -0
  18. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/algo/__init__.py +0 -0
  19. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/algo/graph.py +0 -0
  20. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/V1_1/__init__.py +0 -0
  21. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/V1_1/business_model.py +0 -0
  22. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/V1_1/dimension.py +0 -0
  23. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/V1_1/models/__init__.py +0 -0
  24. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/V1_1/models/business_model.py +0 -0
  25. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/V1_1/models/dimension.py +0 -0
  26. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/V1_2/__init__.py +0 -0
  27. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/V1_2/dimension.py +0 -0
  28. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/V1_2/models/__init__.py +0 -0
  29. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/V1_2/models/dimension.py +0 -0
  30. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/__init__.py +0 -0
  31. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/account.py +0 -0
  32. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/accounting_engines.py +0 -0
  33. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/app.py +0 -0
  34. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/approval_process.py +0 -0
  35. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/base.py +0 -0
  36. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/business_model.py +0 -0
  37. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/consolidation.py +0 -0
  38. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/consolidation_process.py +0 -0
  39. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/datatable.py +0 -0
  40. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/deep_pipeline.py +0 -0
  41. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/deepfos_task.py +0 -0
  42. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/deepmodel.py +0 -0
  43. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/dimension.py +0 -0
  44. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/financial_model.py +0 -0
  45. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/journal_model.py +0 -0
  46. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/journal_template.py +0 -0
  47. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/memory_financial_model.py +0 -0
  48. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/__init__.py +0 -0
  49. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/account.py +0 -0
  50. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/accounting_engines.py +0 -0
  51. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/app.py +0 -0
  52. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/approval_process.py +0 -0
  53. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/base.py +0 -0
  54. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/business_model.py +0 -0
  55. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/consolidation.py +0 -0
  56. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/consolidation_process.py +0 -0
  57. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/datatable_mysql.py +0 -0
  58. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/deep_pipeline.py +0 -0
  59. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/deepfos_task.py +0 -0
  60. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/deepmodel.py +0 -0
  61. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/dimension.py +0 -0
  62. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/financial_model.py +0 -0
  63. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/journal_model.py +0 -0
  64. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/journal_template.py +0 -0
  65. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/memory_financial_model.py +0 -0
  66. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/platform.py +0 -0
  67. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/python.py +0 -0
  68. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/reconciliation_engine.py +0 -0
  69. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/reconciliation_report.py +0 -0
  70. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/role_strategy.py +0 -0
  71. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/smartlist.py +0 -0
  72. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/space.py +0 -0
  73. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/system.py +0 -0
  74. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/variable.py +0 -0
  75. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/models/workflow.py +0 -0
  76. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/platform.py +0 -0
  77. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/python.py +0 -0
  78. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/reconciliation_engine.py +0 -0
  79. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/reconciliation_report.py +0 -0
  80. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/role_strategy.py +0 -0
  81. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/smartlist.py +0 -0
  82. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/space.py +0 -0
  83. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/system.py +0 -0
  84. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/variable.py +0 -0
  85. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/api/workflow.py +0 -0
  86. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/boost/__init__.py +0 -0
  87. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/boost/jstream.c +0 -0
  88. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/boost/jstream.pyx +0 -0
  89. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/boost/pandas.c +0 -0
  90. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/boost/pandas.pyx +0 -0
  91. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/boost/py_jstream.py +0 -0
  92. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/boost/py_pandas.py +0 -0
  93. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/cache.py +0 -0
  94. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/config.py +0 -0
  95. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/__init__.py +0 -0
  96. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/cube/__init__.py +0 -0
  97. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/cube/_base.py +0 -0
  98. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/cube/constants.py +0 -0
  99. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/cube/cube.py +0 -0
  100. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/cube/formula.py +0 -0
  101. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/cube/syscube.py +0 -0
  102. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/cube/typing.py +0 -0
  103. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/cube/utils.py +0 -0
  104. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/dimension/__init__.py +0 -0
  105. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/dimension/_base.py +0 -0
  106. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/dimension/dimcreator.py +0 -0
  107. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/dimension/dimension.py +0 -0
  108. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/dimension/dimexpr.py +0 -0
  109. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/dimension/dimmember.py +0 -0
  110. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/dimension/eledimension.py +0 -0
  111. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/dimension/filters.py +0 -0
  112. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/dimension/sysdimension.py +0 -0
  113. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/logictable/__init__.py +0 -0
  114. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/logictable/_cache.py +0 -0
  115. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/logictable/_operator.py +0 -0
  116. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/logictable/nodemixin.py +0 -0
  117. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/logictable/sqlcondition.py +0 -0
  118. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/core/logictable/tablemodel.py +0 -0
  119. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/db/__init__.py +0 -0
  120. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/db/cipher.py +0 -0
  121. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/db/clickhouse.py +0 -0
  122. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/db/connector.py +0 -0
  123. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/db/daclickhouse.py +0 -0
  124. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/db/dameng.py +0 -0
  125. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/db/damysql.py +0 -0
  126. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/db/dbkits.py +0 -0
  127. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/db/deepengine.py +0 -0
  128. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/db/deepmodel.py +0 -0
  129. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/db/deepmodel_kingbase.py +0 -0
  130. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/db/edb.py +0 -0
  131. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/db/gauss.py +0 -0
  132. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/db/kingbase.py +0 -0
  133. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/db/mysql.py +0 -0
  134. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/db/oracle.py +0 -0
  135. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/db/postgresql.py +0 -0
  136. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/db/sqlserver.py +0 -0
  137. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/db/utils.py +0 -0
  138. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/__init__.py +0 -0
  139. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/accounting.py +0 -0
  140. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/apvlprocess.py +0 -0
  141. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/base.py +0 -0
  142. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/bizmodel.py +0 -0
  143. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/datatable.py +0 -0
  144. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/deep_pipeline.py +0 -0
  145. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/dimension.py +0 -0
  146. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/fact_table.py +0 -0
  147. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/finmodel.py +0 -0
  148. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/journal.py +0 -0
  149. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/journal_template.py +0 -0
  150. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/pyscript.py +0 -0
  151. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/reconciliation.py +0 -0
  152. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/rolestrategy.py +0 -0
  153. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/smartlist.py +0 -0
  154. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/element/variable.py +0 -0
  155. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/exceptions/__init__.py +0 -0
  156. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/exceptions/hook.py +0 -0
  157. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lazy.py +0 -0
  158. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/__init__.py +0 -0
  159. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/_javaobj.py +0 -0
  160. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/asynchronous.py +0 -0
  161. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/concurrency.py +0 -0
  162. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/constant.py +0 -0
  163. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/decorator.py +0 -0
  164. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/deepchart.py +0 -0
  165. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/deepux.py +0 -0
  166. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/discovery.py +0 -0
  167. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/edb_lexer.py +0 -0
  168. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/eureka.py +0 -0
  169. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/filterparser.py +0 -0
  170. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/httpcli.py +0 -0
  171. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/jsonstreamer.py +0 -0
  172. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/msg.py +0 -0
  173. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/nacos.py +0 -0
  174. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/patch.py +0 -0
  175. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/redis.py +0 -0
  176. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/serutils.py +0 -0
  177. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/stopwatch.py +0 -0
  178. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/subtask.py +0 -0
  179. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/lib/utils.py +0 -0
  180. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/local.py +0 -0
  181. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/options.py +0 -0
  182. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos/translation.py +0 -0
  183. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos.egg-info/SOURCES.txt +0 -0
  184. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos.egg-info/dependency_links.txt +0 -0
  185. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos.egg-info/not-zip-safe +0 -0
  186. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos.egg-info/requires.txt +0 -0
  187. {deepfos-1.1.63 → deepfos-1.1.64}/deepfos.egg-info/top_level.txt +0 -0
  188. {deepfos-1.1.63 → deepfos-1.1.64}/requirements.txt +0 -0
  189. {deepfos-1.1.63 → deepfos-1.1.64}/setup.cfg +0 -0
  190. {deepfos-1.1.63 → deepfos-1.1.64}/setup.py +0 -0
  191. {deepfos-1.1.63 → deepfos-1.1.64}/versioneer.py +0 -0
@@ -1,3 +1,11 @@
1
+ ## [1.1.64] - 2025-07-08
2
+
3
+ ### 更新
4
+
5
+ * 更新连接器元素获取连接信息的接口和密码处理逻辑
6
+ * TaskUtil的api实例化延迟至TaskUtil实例化过程中
7
+
8
+
1
9
  ## [1.1.63] - 2025-07-01
2
10
 
3
11
  ### 更新
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deepfos
3
- Version: 1.1.63
3
+ Version: 1.1.64
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
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-07-01T03:16:02+0000",
11
+ "date": "2025-07-08T07:07:33+0000",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "ee27ae20cda4c8955b87eabb5b3b1c73e528e8e3",
15
- "version": "1.1.63"
14
+ "full-revisionid": "53d949a38fa538718df6900080ebd8b0bc1358c9",
15
+ "version": "1.1.64"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -3,7 +3,7 @@ from typing import Union, Awaitable
3
3
  from deepfos.element.base import T_ElementInfoWithServer
4
4
  from deepfos.lib.decorator import cached_property
5
5
 
6
- from .base import ChildAPI, get, RootAPI
6
+ from .base import ChildAPI, RootAPI, post
7
7
  from .models.deepconnector import *
8
8
 
9
9
 
@@ -14,10 +14,10 @@ class DataSourceAPI(ChildAPI):
14
14
  """连接信息相关接口"""
15
15
  endpoint = '/apis/v3/ds/spaces/{space}/apps/{app}'
16
16
 
17
- @get('connection-info', data_wrapped=False)
17
+ @post('connection-info/query', data_wrapped=False)
18
18
  def connection_info(self, element_info: T_ElementInfoWithServer) -> Union[ConnectionInfoVo, Awaitable[ConnectionInfoVo]]:
19
19
  return {
20
- 'param': {
20
+ 'body': {
21
21
  'elementName': element_info.elementName,
22
22
  'folderId': element_info.folderId
23
23
  }
@@ -26,3 +26,4 @@ class ConnectionInfoVo(BaseModel):
26
26
  serviceTypeName: Optional[str] = None
27
27
  serviceVersion: Optional[str] = None
28
28
  username: str
29
+ encryptType: Optional[str] = None
@@ -1,7 +1,10 @@
1
1
  import base64
2
+ import binascii
3
+ import os
2
4
 
3
5
  from deepfos.api.deepconnector import DeepConnectorAPI
4
6
  from deepfos.api.models import BaseModel
7
+ from deepfos.db.cipher import AES
5
8
  from deepfos.element.base import ElementBase, SyncMeta
6
9
  from deepfos.lib.asynchronous import future_property
7
10
  from deepfos.lib.decorator import cached_property
@@ -9,6 +12,20 @@ from deepfos.lib.decorator import cached_property
9
12
  __all__ = ['AsyncDeepConnector', 'DeepConnector', 'ConnectionInfo']
10
13
 
11
14
 
15
+ def decrypt(secret, cipher_text, encoding='utf8'):
16
+ pwd_padded = AES(secret).decrypt(
17
+ base64.b16decode(cipher_text)
18
+ )
19
+ if pwd_padded[-1] in range(1, 17):
20
+ pad_length = pwd_padded[-1]
21
+ pad_char = chr(pwd_padded[-1])
22
+ guess_pad = pad_char * pwd_padded[-1]
23
+
24
+ if pwd_padded.decode(encoding).endswith(guess_pad):
25
+ return pwd_padded.decode(encoding)[:-pad_length:]
26
+ return pwd_padded.decode(encoding)
27
+
28
+
12
29
  class ConnectionInfo(BaseModel):
13
30
  host: str
14
31
  port: int
@@ -45,12 +62,28 @@ class AsyncDeepConnector(ElementBase[DeepConnectorAPI]):
45
62
  info = await api.datasource.connection_info(
46
63
  element_info=ele_info,
47
64
  )
65
+ if info.encryptType == 'AES':
66
+ try:
67
+ password = decrypt(
68
+ os.environ.get('EXPORT_DEEPFOS_AES_KEY', '!ABCD-EFGH-IJKL@').encode(),
69
+ info.password,
70
+ encoding='utf-8'
71
+ )
72
+ except ValueError:
73
+ raise ValueError(
74
+ '连接器连接信息解密失败,请检查公共环境变量:EXPORT_DEEPFOS_AES_KEY'
75
+ ) from None
76
+ else:
77
+ try:
78
+ password = base64.decodebytes(info.password.encode()).decode()
79
+ except binascii.Error:
80
+ password = info.password
48
81
  return ConnectionInfo(
49
82
  host=info.connectionHost,
50
83
  port=info.connectionPort,
51
84
  db=info.dbName,
52
85
  user=info.username,
53
- password=base64.decodebytes(info.password.encode()).decode(),
86
+ password=password,
54
87
  dbtype=info.serviceName,
55
88
  )
56
89
 
@@ -1,4 +1,5 @@
1
1
  import re
2
+ import threading
2
3
 
3
4
  import numpy as np
4
5
  from asyncpg.connection import connect as pg_conn
@@ -806,36 +807,48 @@ class AsyncDeepModel(ElementBase[DeepModelAPI]):
806
807
  self._globals = {}
807
808
  self.before_chunk = before_chunk
808
809
  self.after_chunk = after_chunk
810
+ self._clients = threading.local()
809
811
 
810
812
  @future_property
811
- async def client(self):
812
- if self.direct_access:
813
- api = await self.wait_for('async_api')
814
- ver = await api.extra.version()
815
- if to_version_tuple(ver, 4) >= (3, 0, 18, 8, 0):
816
- db_info = await api.sharding.database()
817
- space = OPTION.api.header['space']
818
- if db_info.space != space:
819
- raise ValueError(
820
- f'Space id in sharding database info invalid. '
821
- f'Expected space id: {space}, actual: {db_info.space}'
822
- )
823
- dbname = db_info.edgedbName
824
- else:
825
- dbname = None
826
- client = create_async_client(
827
- default_module=self.appmodule,
828
- dbname=dbname
813
+ async def _internal_dbname(self):
814
+ if not self.direct_access:
815
+ # N.B: only retrieved when direct access is enabled
816
+ return
817
+ api = await self.wait_for('async_api')
818
+ ver = await api.extra.version()
819
+ if to_version_tuple(ver, 4) < (3, 0, 18, 8, 0):
820
+ return
821
+ db_info = await api.sharding.database()
822
+ space = OPTION.api.header['space']
823
+ if db_info.space != space:
824
+ raise ValueError(
825
+ f'Space id in sharding database info invalid. '
826
+ f'Expected space id: {space}, actual: {db_info.space}'
829
827
  )
830
- if user_id := OPTION.api.header.get('user'):
831
- default_globals = {
832
- f'{self.spacemodule}::current_user_id':
833
- user_id
834
- }
835
- client = client.with_globals(**default_globals)
836
- self._globals = client._options.state._globals
828
+ return db_info.edgedbName
829
+
830
+ @property
831
+ def client(self):
832
+ if not self.direct_access:
833
+ return
834
+
835
+ if (client := getattr(self._clients, 'value', None)) is not None:
837
836
  return client
838
837
 
838
+ client = create_async_client(
839
+ default_module=self.appmodule,
840
+ dbname=self._internal_dbname
841
+ )
842
+ if user_id := OPTION.api.header.get('user'):
843
+ default_globals = {
844
+ f'{self.spacemodule}::current_user_id':
845
+ user_id
846
+ }
847
+ client = client.with_globals(**default_globals)
848
+ self._globals = client._options.state._globals
849
+ self._clients.value = client
850
+ return client
851
+
839
852
  @future_property
840
853
  async def element_info(self):
841
854
  """元素信息"""
@@ -311,9 +311,14 @@ class AsyncWorkFlow(ElementBase[WorkFlowAPI]):
311
311
  内容一般来自文件管理的/files/upload或/files/upload/content响应值
312
312
 
313
313
 
314
+ Returns:
315
+ True: 成功
316
+ False: 失败
317
+
314
318
  .. admonition:: 示例
315
319
 
316
320
  .. code-block:: python
321
+
317
322
  from deepfos.api.platform import PlatformAPI
318
323
  from deepfos.element.workflow import WorkFlow
319
324
 
@@ -321,6 +326,7 @@ class AsyncWorkFlow(ElementBase[WorkFlowAPI]):
321
326
  upload_resp = PlatformAPI().file.upload(
322
327
  file_type='DL', file_name='t.txt', file='some text'
323
328
  )
329
+
324
330
  # 以动作approve,参数{"a": 1, "b": "42"}完成任务实例,
325
331
  # 并提供附件信息为上传的't.txt'文件,备注为"Completed by SDK"
326
332
  test_task = WorkFlow('test_task')
@@ -332,10 +338,6 @@ class AsyncWorkFlow(ElementBase[WorkFlowAPI]):
332
338
  attachments=[upload_resp]
333
339
  )
334
340
 
335
- Returns:
336
- True: 成功
337
- False: 失败
338
-
339
341
  """
340
342
  action_id = None
341
343
  if outcome is not None:
@@ -479,14 +479,14 @@ class TaskUtil:
479
479
  py_info: 任务实例对应的python元素信息,如未提供,仍可在 `run_job_contents` 中提供
480
480
 
481
481
  """
482
- api = TaskAPI(sync=True)
483
- _chunksize = 200
484
482
 
485
483
  def __init__(self, task_code, py_info: PyInfo = None):
486
484
  self.task_code = task_code
485
+ self.api = TaskAPI(sync=True)
487
486
  if self.meta is None:
488
487
  raise ValueError(f"No config for task_code: [{self.task_code}].")
489
488
  self.py_info = py_info
489
+ self._chunksize = 200
490
490
 
491
491
  @cached_property
492
492
  def meta(self):
@@ -579,18 +579,17 @@ class TaskUtil:
579
579
  if not_found_col:
580
580
  raise ValueError(f'Required columns:{sorted(not_found_col)} since they are compositeKeys.')
581
581
 
582
- @classmethod
583
- def _create_task_instance(cls, call_api, job_contents, payload):
584
- if job_contents.shape[0] <= cls._chunksize:
582
+ def _create_task_instance(self, call_api, job_contents, payload):
583
+ if job_contents.shape[0] <= self._chunksize:
585
584
  payload.jobContent = job_contents.to_dict(orient='records')
586
585
  payload.lastBatch = True
587
586
  call_api(payload)
588
587
  else:
589
- payload.jobContent = job_contents.iloc[0:cls._chunksize:].to_dict(orient='records')
588
+ payload.jobContent = job_contents.iloc[0:self._chunksize:].to_dict(orient='records')
590
589
  payload.batchId = call_api(payload).batchId
591
590
  payloads = []
592
591
 
593
- for batch_contents in split_dataframe(job_contents.iloc[cls._chunksize::], cls._chunksize):
592
+ for batch_contents in split_dataframe(job_contents.iloc[self._chunksize::], self._chunksize):
594
593
  payload.jobContent = batch_contents.to_dict(orient='records')
595
594
  payloads.append(payload)
596
595
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deepfos
3
- Version: 1.1.63
3
+ Version: 1.1.64
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes