deepfos 1.1.36__tar.gz → 1.1.37__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 (187) hide show
  1. {deepfos-1.1.36 → deepfos-1.1.37}/CHANGELOG.md +14 -0
  2. {deepfos-1.1.36 → deepfos-1.1.37}/PKG-INFO +1 -1
  3. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/_version.py +3 -3
  4. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/deepmodel.py +25 -0
  5. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/deepmodel.py +13 -1
  6. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/edb.py +4 -3
  7. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/deepmodel.py +42 -18
  8. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/decorator.py +20 -8
  9. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/utils.py +3 -2
  10. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos.egg-info/PKG-INFO +1 -1
  11. {deepfos-1.1.36 → deepfos-1.1.37}/.gitattributes +0 -0
  12. {deepfos-1.1.36 → deepfos-1.1.37}/.gitee/ISSUE_GUIDELINES.md +0 -0
  13. {deepfos-1.1.36 → deepfos-1.1.37}/.gitee/ISSUE_TEMPLATE.md +0 -0
  14. {deepfos-1.1.36 → deepfos-1.1.37}/.gitignore +0 -0
  15. {deepfos-1.1.36 → deepfos-1.1.37}/MANIFEST.in +0 -0
  16. {deepfos-1.1.36 → deepfos-1.1.37}/README.md +0 -0
  17. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/__init__.py +0 -0
  18. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/algo/__init__.py +0 -0
  19. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/algo/graph.py +0 -0
  20. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_1/__init__.py +0 -0
  21. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_1/business_model.py +0 -0
  22. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_1/dimension.py +0 -0
  23. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_1/models/__init__.py +0 -0
  24. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_1/models/business_model.py +0 -0
  25. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_1/models/dimension.py +0 -0
  26. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_2/__init__.py +0 -0
  27. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_2/dimension.py +0 -0
  28. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_2/models/__init__.py +0 -0
  29. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_2/models/dimension.py +0 -0
  30. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/__init__.py +0 -0
  31. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/account.py +0 -0
  32. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/accounting_engines.py +0 -0
  33. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/app.py +0 -0
  34. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/approval_process.py +0 -0
  35. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/base.py +0 -0
  36. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/business_model.py +0 -0
  37. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/consolidation.py +0 -0
  38. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/consolidation_process.py +0 -0
  39. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/datatable.py +0 -0
  40. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/deepconnector.py +0 -0
  41. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/deepfos_task.py +0 -0
  42. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/dimension.py +0 -0
  43. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/financial_model.py +0 -0
  44. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/journal_model.py +0 -0
  45. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/journal_template.py +0 -0
  46. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/memory_financial_model.py +0 -0
  47. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/__init__.py +0 -0
  48. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/account.py +0 -0
  49. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/accounting_engines.py +0 -0
  50. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/app.py +0 -0
  51. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/approval_process.py +0 -0
  52. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/base.py +0 -0
  53. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/business_model.py +0 -0
  54. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/consolidation.py +0 -0
  55. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/consolidation_process.py +0 -0
  56. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/datatable_mysql.py +0 -0
  57. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/deepconnector.py +0 -0
  58. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/deepfos_task.py +0 -0
  59. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/dimension.py +0 -0
  60. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/financial_model.py +0 -0
  61. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/journal_model.py +0 -0
  62. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/journal_template.py +0 -0
  63. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/memory_financial_model.py +0 -0
  64. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/platform.py +0 -0
  65. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/python.py +0 -0
  66. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/reconciliation_engine.py +0 -0
  67. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/reconciliation_report.py +0 -0
  68. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/role_strategy.py +0 -0
  69. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/smartlist.py +0 -0
  70. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/space.py +0 -0
  71. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/system.py +0 -0
  72. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/variable.py +0 -0
  73. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/workflow.py +0 -0
  74. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/platform.py +0 -0
  75. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/python.py +0 -0
  76. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/reconciliation_engine.py +0 -0
  77. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/reconciliation_report.py +0 -0
  78. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/role_strategy.py +0 -0
  79. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/smartlist.py +0 -0
  80. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/space.py +0 -0
  81. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/system.py +0 -0
  82. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/variable.py +0 -0
  83. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/workflow.py +0 -0
  84. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/boost/__init__.py +0 -0
  85. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/boost/jstream.c +0 -0
  86. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/boost/jstream.pyx +0 -0
  87. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/boost/pandas.c +0 -0
  88. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/boost/pandas.pyx +0 -0
  89. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/boost/py_jstream.py +0 -0
  90. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/boost/py_pandas.py +0 -0
  91. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/cache.py +0 -0
  92. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/config.py +0 -0
  93. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/__init__.py +0 -0
  94. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/cube/__init__.py +0 -0
  95. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/cube/_base.py +0 -0
  96. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/cube/constants.py +0 -0
  97. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/cube/cube.py +0 -0
  98. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/cube/formula.py +0 -0
  99. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/cube/syscube.py +0 -0
  100. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/cube/typing.py +0 -0
  101. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/cube/utils.py +0 -0
  102. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/dimension/__init__.py +0 -0
  103. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/dimension/_base.py +0 -0
  104. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/dimension/dimcreator.py +0 -0
  105. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/dimension/dimension.py +0 -0
  106. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/dimension/dimexpr.py +0 -0
  107. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/dimension/dimmember.py +0 -0
  108. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/dimension/eledimension.py +0 -0
  109. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/dimension/filters.py +0 -0
  110. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/dimension/sysdimension.py +0 -0
  111. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/logictable/__init__.py +0 -0
  112. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/logictable/_cache.py +0 -0
  113. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/logictable/_operator.py +0 -0
  114. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/logictable/nodemixin.py +0 -0
  115. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/logictable/sqlcondition.py +0 -0
  116. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/logictable/tablemodel.py +0 -0
  117. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/__init__.py +0 -0
  118. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/cipher.py +0 -0
  119. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/clickhouse.py +0 -0
  120. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/connector.py +0 -0
  121. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/daclickhouse.py +0 -0
  122. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/dameng.py +0 -0
  123. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/damysql.py +0 -0
  124. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/dbkits.py +0 -0
  125. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/deepengine.py +0 -0
  126. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/deepmodel.py +0 -0
  127. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/deepmodel_kingbase.py +0 -0
  128. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/gauss.py +0 -0
  129. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/kingbase.py +0 -0
  130. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/mysql.py +0 -0
  131. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/oracle.py +0 -0
  132. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/postgresql.py +0 -0
  133. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/sqlserver.py +0 -0
  134. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/utils.py +0 -0
  135. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/__init__.py +0 -0
  136. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/accounting.py +0 -0
  137. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/apvlprocess.py +0 -0
  138. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/base.py +0 -0
  139. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/bizmodel.py +0 -0
  140. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/datatable.py +0 -0
  141. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/deepconnector.py +0 -0
  142. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/dimension.py +0 -0
  143. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/fact_table.py +0 -0
  144. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/finmodel.py +0 -0
  145. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/journal.py +0 -0
  146. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/journal_template.py +0 -0
  147. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/pyscript.py +0 -0
  148. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/reconciliation.py +0 -0
  149. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/rolestrategy.py +0 -0
  150. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/smartlist.py +0 -0
  151. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/variable.py +0 -0
  152. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/workflow.py +0 -0
  153. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/exceptions/__init__.py +0 -0
  154. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/exceptions/hook.py +0 -0
  155. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lazy.py +0 -0
  156. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/__init__.py +0 -0
  157. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/_javaobj.py +0 -0
  158. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/asynchronous.py +0 -0
  159. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/concurrency.py +0 -0
  160. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/constant.py +0 -0
  161. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/deepchart.py +0 -0
  162. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/deepux.py +0 -0
  163. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/discovery.py +0 -0
  164. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/eureka.py +0 -0
  165. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/filterparser.py +0 -0
  166. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/httpcli.py +0 -0
  167. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/jsonstreamer.py +0 -0
  168. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/msg.py +0 -0
  169. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/nacos.py +0 -0
  170. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/patch.py +0 -0
  171. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/redis.py +0 -0
  172. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/serutils.py +0 -0
  173. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/stopwatch.py +0 -0
  174. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/subtask.py +0 -0
  175. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/sysutils.py +0 -0
  176. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/local.py +0 -0
  177. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/options.py +0 -0
  178. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/translation.py +0 -0
  179. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos.egg-info/SOURCES.txt +0 -0
  180. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos.egg-info/dependency_links.txt +0 -0
  181. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos.egg-info/not-zip-safe +0 -0
  182. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos.egg-info/requires.txt +0 -0
  183. {deepfos-1.1.36 → deepfos-1.1.37}/deepfos.egg-info/top_level.txt +0 -0
  184. {deepfos-1.1.36 → deepfos-1.1.37}/requirements.txt +0 -0
  185. {deepfos-1.1.36 → deepfos-1.1.37}/setup.cfg +0 -0
  186. {deepfos-1.1.36 → deepfos-1.1.37}/setup.py +0 -0
  187. {deepfos-1.1.36 → deepfos-1.1.37}/versioneer.py +0 -0
@@ -1,3 +1,17 @@
1
+ ## [1.1.37] - 2024-06-14
2
+
3
+ ### 新增
4
+
5
+ * DeepModel兼容外部库的直连
6
+
7
+ ### 变更
8
+
9
+ * 无
10
+
11
+ ### 文档
12
+
13
+ * 无
14
+
1
15
  ## [1.1.36] - 2024-06-05
2
16
 
3
17
  ### 新增
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deepfos
3
- Version: 1.1.36
3
+ Version: 1.1.37
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": "2024-06-13T03:28:47+0000",
11
+ "date": "2024-06-20T03:28:41+0000",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "c5a5bf3e7fd0a5d6c8596d27d66fa32752792983",
15
- "version": "1.1.36"
14
+ "full-revisionid": "7f98da1b818edb559a68f03f99464a02b1af6899",
15
+ "version": "1.1.37"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -77,6 +77,15 @@ class SeqAPI(ChildAPI):
77
77
  """
78
78
  return {'param': {'id': id, 'filterValue': filter_value}}
79
79
 
80
+
81
+ class ShardingAPI(ChildAPI):
82
+ endpoint = '/sharding'
83
+
84
+ @get('database')
85
+ def database(self, ) -> Union[SimpleSpaceConnectionConfig, Awaitable[SimpleSpaceConnectionConfig]]:
86
+ return {}
87
+
88
+
80
89
  class DeepQLAPI(ChildAPI):
81
90
  endpoint = '/public/deepql/actions'
82
91
 
@@ -89,6 +98,14 @@ class DeepQLAPI(ChildAPI):
89
98
  return {'body': {'module': module, 'query': query, 'variables': variables}}
90
99
 
91
100
 
101
+ class ExtraAPI(ChildAPI):
102
+ endpoint = '/'
103
+
104
+ @get('git-version')
105
+ def version(self, ) -> Union[str, Awaitable[str]]:
106
+ return {}
107
+
108
+
92
109
  class DeepModelAPI(DynamicRootAPI, builtin=True):
93
110
  module_type = 'DM'
94
111
  default_version = (1, 0)
@@ -112,3 +129,11 @@ class DeepModelAPI(DynamicRootAPI, builtin=True):
112
129
  @cached_property
113
130
  def seq(self) -> SeqAPI:
114
131
  return SeqAPI(self)
132
+
133
+ @cached_property
134
+ def sharding(self) -> ShardingAPI:
135
+ return ShardingAPI(self)
136
+
137
+ @cached_property
138
+ def extra(self) -> ExtraAPI:
139
+ return ExtraAPI(self)
@@ -19,7 +19,8 @@ __all__ = [
19
19
  "RuleErrorMsg",
20
20
  "RuleParam",
21
21
  "SequenceInstance",
22
- "_IndexParam"
22
+ "_IndexParam",
23
+ "SimpleSpaceConnectionConfig"
23
24
  ]
24
25
 
25
26
 
@@ -254,5 +255,16 @@ class SequenceInstance(BaseModel):
254
255
  sequenceName: Optional[str]
255
256
 
256
257
 
258
+ class SimpleSpaceConnectionConfig(BaseModel):
259
+ space: str
260
+ dbType: Optional[str]
261
+ dbName: Optional[str]
262
+ schema_: Optional[str] = Field(alias='schema')
263
+ edgedbName: str
264
+ edgedbSchema: Optional[str]
265
+ createTime: Optional[str]
266
+ updateTime: Optional[str]
267
+
268
+
257
269
  ObjectParam.update_forward_refs()
258
270
  ObjectLinkParam.update_forward_refs()
@@ -170,9 +170,10 @@ deprecated_space = [
170
170
  ]
171
171
 
172
172
 
173
- def create_async_client(default_module=None):
174
- space = OPTION.api.header['space']
175
- dbname = None if space in deprecated_space else f"deepmodel_space{space}"
173
+ def create_async_client(default_module=None, dbname=None):
174
+ if dbname is None:
175
+ space = OPTION.api.header['space']
176
+ dbname = None if space in deprecated_space else f"deepmodel_space{space}"
176
177
  cli = _AsyncIOClient(
177
178
  connection_class=_AsyncEdgeDBConnection,
178
179
  max_concurrency=None,
@@ -23,6 +23,7 @@ from deepfos.api.models.deepmodel import (
23
23
  ObjectBasicDTO, ObjectParam,
24
24
  QueryResultObjectInfo, QueryResult
25
25
  )
26
+ from deepfos.cache import SpaceSeperatedLRUCache
26
27
  from deepfos.db.edb import create_async_client
27
28
  from deepfos.element.base import ElementBase, SyncMeta
28
29
  from deepfos.exceptions import (
@@ -32,8 +33,8 @@ from deepfos.exceptions import (
32
33
  )
33
34
  from deepfos.lib import serutils
34
35
  from deepfos.lib.asynchronous import future_property, evloop
35
- from deepfos.lib.decorator import flagmethod, cached_property
36
- from deepfos.lib.utils import AliasGenerator
36
+ from deepfos.lib.decorator import flagmethod, cached_property, lru_cache
37
+ from deepfos.lib.utils import AliasGenerator, to_version_tuple
37
38
 
38
39
  __all__ = ['AsyncDeepModel', 'DeepModel', 'to_fields', 'QueryWithArgs']
39
40
 
@@ -737,6 +738,19 @@ class _TxnConfig:
737
738
  self.txn_support = False
738
739
 
739
740
 
741
+ @lru_cache(maxsize=128, cache_factory=SpaceSeperatedLRUCache)
742
+ async def get_element_info():
743
+ from deepfos.api.space import SpaceAPI
744
+ from deepfos.api.models.app import ElementRelationInfo
745
+ from deepfos.exceptions import ElementTypeMissingError
746
+ modules = await SpaceAPI(sync=False).module.get_usable_module()
747
+ target_module = ['MAINVIEW', 'DM']
748
+ for mdl in modules:
749
+ if mdl.moduleType in target_module and mdl.status == 1:
750
+ return ElementRelationInfo.construct_from(mdl)
751
+ raise ElementTypeMissingError('DeepModel组件在空间内不可用')
752
+
753
+
740
754
  # -----------------------------------------------------------------------------
741
755
  # core
742
756
  class AsyncDeepModel(ElementBase[DeepModelAPI]):
@@ -753,32 +767,42 @@ class AsyncDeepModel(ElementBase[DeepModelAPI]):
753
767
  self.appmodule = f"app{OPTION.api.header['app']}"
754
768
  self.spacemodule = f"space{OPTION.api.header['space']}"
755
769
  self.direct_access = direct_access
756
- if direct_access:
757
- self.client = create_async_client(default_module=self.appmodule)
770
+ self.alias = AliasGenerator()
771
+ self.pg_dsn = pg_dsn
772
+
773
+ @future_property
774
+ async def client(self):
775
+ if self.direct_access:
776
+ api = await self.wait_for('async_api')
777
+ ver = await api.extra.version()
778
+ if to_version_tuple(ver, -1) >= (3, 0, 18, 8, 0):
779
+ db_info = await api.sharding.database()
780
+ space = OPTION.api.header['space']
781
+ if db_info.space != space:
782
+ raise ValueError(
783
+ f'Space id in sharding database info invalid. '
784
+ f'Expected space id: {space}, actual: {db_info.space}'
785
+ )
786
+ dbname = db_info.edgedbName
787
+ else:
788
+ dbname = None
789
+ client = create_async_client(
790
+ default_module=self.appmodule,
791
+ dbname=dbname
792
+ )
758
793
  if user_id := OPTION.api.header.get('user'):
759
- self.client = self.client.with_globals(
794
+ client = client.with_globals(
760
795
  **{
761
796
  f'{self.spacemodule}::current_user_id':
762
797
  user_id
763
798
  }
764
799
  )
765
- else:
766
- self.client = None
767
- self.alias = AliasGenerator()
768
- self.pg_dsn = pg_dsn
800
+ return client
769
801
 
770
802
  @future_property
771
803
  async def element_info(self):
772
804
  """元素信息"""
773
- from deepfos.api.space import SpaceAPI
774
- from deepfos.api.models.app import ElementRelationInfo
775
- from deepfos.exceptions import ElementTypeMissingError
776
- modules = await SpaceAPI(sync=False).module.get_usable_module()
777
- target_module = ['MAINVIEW', 'DM']
778
- for mdl in modules:
779
- if mdl.moduleType in target_module and mdl.status == 1:
780
- return ElementRelationInfo.construct_from(mdl)
781
- raise ElementTypeMissingError('DeepModel组件在空间内不可用')
805
+ return await get_element_info()
782
806
 
783
807
  @future_property
784
808
  async def async_api(self):
@@ -282,16 +282,28 @@ def lru_cache(maxsize=128, cache_factory=LRUCache):
282
282
  cache = Manager.create_cache(cache_factory, maxsize=maxsize)
283
283
 
284
284
  def deco_fun(func):
285
- @functools.wraps(func)
286
- def wrapper(*args, **kwargs):
287
- key = hashkey(*args, **kwargs)
285
+ if inspect.iscoroutinefunction(func):
286
+ @functools.wraps(func)
287
+ async def wrapper(*args, **kwargs):
288
+ key = hashkey(*args, **kwargs)
289
+
290
+ if key in cache:
291
+ return cache[key]
292
+
293
+ result = await func(*args, **kwargs)
294
+ cache[key] = result
295
+ return result
296
+ else:
297
+ @functools.wraps(func)
298
+ def wrapper(*args, **kwargs):
299
+ key = hashkey(*args, **kwargs)
288
300
 
289
- if key in cache:
290
- return cache[key]
301
+ if key in cache:
302
+ return cache[key]
291
303
 
292
- result = func(*args, **kwargs)
293
- cache[key] = result
294
- return result
304
+ result = func(*args, **kwargs)
305
+ cache[key] = result
306
+ return result
295
307
 
296
308
  return wrapper
297
309
 
@@ -903,18 +903,19 @@ def find_str(
903
903
  return candidate
904
904
 
905
905
 
906
- def to_version_tuple(ver: Union[float, str]):
906
+ def to_version_tuple(ver: Union[float, str], max_split: int = 1):
907
907
  """返回版本元组
908
908
 
909
909
  Args:
910
910
  ver: 表示版本的字符串或数字,例如'1.0','1_0',1.0
911
+ max_split: 以'.'和'_'分割的最大次数,如为-1,则无限制
911
912
 
912
913
  Returns:
913
914
  形如(1, 0)的版本元组
914
915
  """
915
916
  if isinstance(ver, float):
916
917
  ver = str(ver)
917
- version_parts = ver.replace('.', '_').split('_', 1)
918
+ version_parts = ver.replace('.', '_').split('_', max_split)
918
919
  version_list = [int(part) for part in version_parts]
919
920
  return tuple(version_list)
920
921
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deepfos
3
- Version: 1.1.36
3
+ Version: 1.1.37
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