deepfos 1.1.40__tar.gz → 1.1.42__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.40 → deepfos-1.1.42}/CHANGELOG.md +13 -0
  2. {deepfos-1.1.40 → deepfos-1.1.42}/PKG-INFO +1 -1
  3. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/_version.py +3 -3
  4. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/V1_2/dimension.py +27 -0
  5. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/V1_2/models/dimension.py +81 -1
  6. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/db/edb.py +27 -0
  7. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/element/deepmodel.py +57 -22
  8. deepfos-1.1.42/deepfos/lib/edb_lexer.py +789 -0
  9. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos.egg-info/PKG-INFO +1 -1
  10. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos.egg-info/SOURCES.txt +2 -0
  11. {deepfos-1.1.40 → deepfos-1.1.42}/.gitattributes +0 -0
  12. {deepfos-1.1.40 → deepfos-1.1.42}/.gitee/ISSUE_GUIDELINES.md +0 -0
  13. {deepfos-1.1.40 → deepfos-1.1.42}/.gitee/ISSUE_TEMPLATE.md +0 -0
  14. {deepfos-1.1.40 → deepfos-1.1.42}/.gitignore +0 -0
  15. {deepfos-1.1.40 → deepfos-1.1.42}/MANIFEST.in +0 -0
  16. {deepfos-1.1.40 → deepfos-1.1.42}/README.md +0 -0
  17. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/__init__.py +0 -0
  18. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/algo/__init__.py +0 -0
  19. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/algo/graph.py +0 -0
  20. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/V1_1/__init__.py +0 -0
  21. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/V1_1/business_model.py +0 -0
  22. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/V1_1/dimension.py +0 -0
  23. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/V1_1/models/__init__.py +0 -0
  24. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/V1_1/models/business_model.py +0 -0
  25. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/V1_1/models/dimension.py +0 -0
  26. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/V1_2/__init__.py +0 -0
  27. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/V1_2/models/__init__.py +0 -0
  28. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/__init__.py +0 -0
  29. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/account.py +0 -0
  30. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/accounting_engines.py +0 -0
  31. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/app.py +0 -0
  32. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/approval_process.py +0 -0
  33. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/base.py +0 -0
  34. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/business_model.py +0 -0
  35. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/consolidation.py +0 -0
  36. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/consolidation_process.py +0 -0
  37. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/datatable.py +0 -0
  38. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/deepconnector.py +0 -0
  39. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/deepfos_task.py +0 -0
  40. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/deepmodel.py +0 -0
  41. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/dimension.py +0 -0
  42. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/financial_model.py +0 -0
  43. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/journal_model.py +0 -0
  44. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/journal_template.py +0 -0
  45. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/memory_financial_model.py +0 -0
  46. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/__init__.py +0 -0
  47. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/account.py +0 -0
  48. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/accounting_engines.py +0 -0
  49. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/app.py +0 -0
  50. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/approval_process.py +0 -0
  51. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/base.py +0 -0
  52. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/business_model.py +0 -0
  53. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/consolidation.py +0 -0
  54. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/consolidation_process.py +0 -0
  55. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/datatable_mysql.py +0 -0
  56. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/deepconnector.py +0 -0
  57. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/deepfos_task.py +0 -0
  58. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/deepmodel.py +0 -0
  59. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/dimension.py +0 -0
  60. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/financial_model.py +0 -0
  61. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/journal_model.py +0 -0
  62. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/journal_template.py +0 -0
  63. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/memory_financial_model.py +0 -0
  64. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/platform.py +0 -0
  65. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/python.py +0 -0
  66. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/reconciliation_engine.py +0 -0
  67. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/reconciliation_report.py +0 -0
  68. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/role_strategy.py +0 -0
  69. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/smartlist.py +0 -0
  70. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/space.py +0 -0
  71. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/system.py +0 -0
  72. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/variable.py +0 -0
  73. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/models/workflow.py +0 -0
  74. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/platform.py +0 -0
  75. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/python.py +0 -0
  76. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/reconciliation_engine.py +0 -0
  77. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/reconciliation_report.py +0 -0
  78. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/role_strategy.py +0 -0
  79. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/smartlist.py +0 -0
  80. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/space.py +0 -0
  81. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/system.py +0 -0
  82. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/variable.py +0 -0
  83. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/api/workflow.py +0 -0
  84. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/boost/__init__.py +0 -0
  85. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/boost/jstream.c +0 -0
  86. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/boost/jstream.pyx +0 -0
  87. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/boost/pandas.c +0 -0
  88. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/boost/pandas.pyx +0 -0
  89. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/boost/py_jstream.py +0 -0
  90. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/boost/py_pandas.py +0 -0
  91. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/cache.py +0 -0
  92. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/config.py +0 -0
  93. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/__init__.py +0 -0
  94. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/cube/__init__.py +0 -0
  95. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/cube/_base.py +0 -0
  96. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/cube/constants.py +0 -0
  97. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/cube/cube.py +0 -0
  98. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/cube/formula.py +0 -0
  99. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/cube/syscube.py +0 -0
  100. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/cube/typing.py +0 -0
  101. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/cube/utils.py +0 -0
  102. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/dimension/__init__.py +0 -0
  103. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/dimension/_base.py +0 -0
  104. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/dimension/dimcreator.py +0 -0
  105. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/dimension/dimension.py +0 -0
  106. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/dimension/dimexpr.py +0 -0
  107. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/dimension/dimmember.py +0 -0
  108. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/dimension/eledimension.py +0 -0
  109. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/dimension/filters.py +0 -0
  110. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/dimension/sysdimension.py +0 -0
  111. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/logictable/__init__.py +0 -0
  112. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/logictable/_cache.py +0 -0
  113. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/logictable/_operator.py +0 -0
  114. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/logictable/nodemixin.py +0 -0
  115. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/logictable/sqlcondition.py +0 -0
  116. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/core/logictable/tablemodel.py +0 -0
  117. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/db/__init__.py +0 -0
  118. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/db/cipher.py +0 -0
  119. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/db/clickhouse.py +0 -0
  120. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/db/connector.py +0 -0
  121. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/db/daclickhouse.py +0 -0
  122. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/db/dameng.py +0 -0
  123. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/db/damysql.py +0 -0
  124. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/db/dbkits.py +0 -0
  125. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/db/deepengine.py +0 -0
  126. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/db/deepmodel.py +0 -0
  127. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/db/deepmodel_kingbase.py +0 -0
  128. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/db/gauss.py +0 -0
  129. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/db/kingbase.py +0 -0
  130. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/db/mysql.py +0 -0
  131. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/db/oracle.py +0 -0
  132. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/db/postgresql.py +0 -0
  133. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/db/sqlserver.py +0 -0
  134. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/db/utils.py +0 -0
  135. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/element/__init__.py +0 -0
  136. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/element/accounting.py +0 -0
  137. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/element/apvlprocess.py +0 -0
  138. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/element/base.py +0 -0
  139. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/element/bizmodel.py +0 -0
  140. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/element/datatable.py +0 -0
  141. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/element/deepconnector.py +0 -0
  142. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/element/dimension.py +0 -0
  143. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/element/fact_table.py +0 -0
  144. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/element/finmodel.py +0 -0
  145. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/element/journal.py +0 -0
  146. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/element/journal_template.py +0 -0
  147. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/element/pyscript.py +0 -0
  148. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/element/reconciliation.py +0 -0
  149. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/element/rolestrategy.py +0 -0
  150. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/element/smartlist.py +0 -0
  151. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/element/variable.py +0 -0
  152. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/element/workflow.py +0 -0
  153. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/exceptions/__init__.py +0 -0
  154. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/exceptions/hook.py +0 -0
  155. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lazy.py +0 -0
  156. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/__init__.py +0 -0
  157. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/_javaobj.py +0 -0
  158. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/asynchronous.py +0 -0
  159. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/concurrency.py +0 -0
  160. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/constant.py +0 -0
  161. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/decorator.py +0 -0
  162. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/deepchart.py +0 -0
  163. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/deepux.py +0 -0
  164. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/discovery.py +0 -0
  165. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/eureka.py +0 -0
  166. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/filterparser.py +0 -0
  167. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/httpcli.py +0 -0
  168. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/jsonstreamer.py +0 -0
  169. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/msg.py +0 -0
  170. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/nacos.py +0 -0
  171. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/patch.py +0 -0
  172. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/redis.py +0 -0
  173. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/serutils.py +0 -0
  174. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/stopwatch.py +0 -0
  175. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/subtask.py +0 -0
  176. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/sysutils.py +0 -0
  177. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/lib/utils.py +0 -0
  178. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/local.py +0 -0
  179. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/options.py +0 -0
  180. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos/translation.py +0 -0
  181. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos.egg-info/dependency_links.txt +0 -0
  182. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos.egg-info/not-zip-safe +0 -0
  183. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos.egg-info/requires.txt +0 -0
  184. {deepfos-1.1.40 → deepfos-1.1.42}/deepfos.egg-info/top_level.txt +0 -0
  185. {deepfos-1.1.40 → deepfos-1.1.42}/requirements.txt +0 -0
  186. {deepfos-1.1.40 → deepfos-1.1.42}/setup.cfg +0 -0
  187. {deepfos-1.1.40 → deepfos-1.1.42}/setup.py +0 -0
  188. {deepfos-1.1.40 → deepfos-1.1.42}/versioneer.py +0 -0
@@ -1,3 +1,16 @@
1
+ ## [1.1.42] - 2024-09-19
2
+
3
+ ### 新增
4
+
5
+ * 维度1.2 API 封装多维实体维度配置表查询和增量保存接口
6
+
7
+ ## [1.1.41] - 2024-08-26
8
+
9
+ ### 变更
10
+
11
+ * DeepModel get_object方法改为执行object查询语句
12
+ * DeepModel 查询和执行方法在kwargs的key缺省时自动补充None值
13
+
1
14
  ## [1.1.40] - 2024-07-23
2
15
 
3
16
  ### 变更
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deepfos
3
- Version: 1.1.40
3
+ Version: 1.1.42
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-07-23T02:39:33+0000",
11
+ "date": "2024-09-24T05:39:42+0000",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "3e90e105e5c58d7b9a248b89626c7c9ae2d93173",
15
- "version": "1.1.40"
14
+ "full-revisionid": "14152a2be32b02192ca40c87779a76367645c6a4",
15
+ "version": "1.1.42"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -213,6 +213,26 @@ class DimObjectAPI(ChildAPI):
213
213
  return {'param': {'folderId': folderId, 'name': name, 'path': path}}
214
214
 
215
215
 
216
+ class DimensionConfig(ChildAPI):
217
+ endpoint = '/dimension/config'
218
+
219
+ @get('entity')
220
+ def entity(self, dimensionName: str = None, folderId: str = None, path: str = None) -> Union[List[MultidimensionalEntityConfigMemberVO], Awaitable[List[MultidimensionalEntityConfigMemberVO]]]:
221
+ """
222
+ 多维实体维度配置表查询全部数据
223
+
224
+ """
225
+ return {'param': {'dimensionName': dimensionName, 'folderId': folderId, 'path': path}}
226
+
227
+ @post('entity/increment')
228
+ def entity_increment(self, multidimensionalEntityConfigIncrementDTO: MultidimensionalEntityConfigIncrementDTO) -> Union[None, Awaitable[None]]:
229
+ """
230
+ 多维实体维度配置表增量保存数据
231
+
232
+ """
233
+ return {'body': multidimensionalEntityConfigIncrementDTO}
234
+
235
+
216
236
  class DimensionAPI(DynamicRootAPI, builtin=True):
217
237
  """维度组件接口"""
218
238
  module_type = 'DIM'
@@ -256,3 +276,10 @@ class DimensionAPI(DynamicRootAPI, builtin=True):
256
276
  维度与模型对象相关接口
257
277
  """
258
278
  return DimObjectAPI(self)
279
+
280
+ @cached_property
281
+ def config(self) -> DimensionConfig:
282
+ """
283
+ 维度配置相关接口
284
+ """
285
+ return DimensionConfig(self)
@@ -98,7 +98,11 @@ __all__ = [
98
98
  'MultiEntityRelationDimension',
99
99
  'RelationCub',
100
100
  'ModelSyncInfo',
101
- 'MultiEntityConfigResult'
101
+ 'MultiEntityConfigResult',
102
+ 'MultidimensionalEntityConfigMemberDTO',
103
+ 'DimensionElementInfo',
104
+ 'MultidimensionalEntityConfigIncrementDTO',
105
+ 'MultidimensionalEntityConfigMemberVO',
102
106
  ]
103
107
 
104
108
 
@@ -2832,3 +2836,79 @@ class DimensionInfoAndMemberObj(BaseModel):
2832
2836
  dimensionInfo: Optional[DimensionInfoObj]
2833
2837
  #: dimensionMemberList
2834
2838
  dimensionMemberList: Optional[List[DimensionMemberChangeObj]]
2839
+
2840
+
2841
+ class MultidimensionalEntityConfigMemberVO(BaseModel):
2842
+ #: isActive
2843
+ isActive: Optional[int]
2844
+ #: name
2845
+ name: Optional[str]
2846
+ #: parentName
2847
+ parentName: Optional[str]
2848
+ #: period
2849
+ period: Optional[str]
2850
+ #: scenario
2851
+ scenario: Optional[str]
2852
+ #: version
2853
+ version: Optional[str]
2854
+ #: year
2855
+ year: Optional[str]
2856
+
2857
+
2858
+ class ConfigDeleteFilter(BaseModel):
2859
+ #: period
2860
+ period: Optional[str]
2861
+ #: scenario
2862
+ scenario: Optional[str]
2863
+ #: version
2864
+ version: Optional[str]
2865
+ #: year
2866
+ year: Optional[str]
2867
+
2868
+
2869
+ class MultidimensionalEntityConfigMemberDTO(BaseModel):
2870
+ #: 是否active 默认1 0 否 1是
2871
+ isActive: Optional[int]
2872
+ #: 维度成员编码
2873
+ name: Optional[str]
2874
+ #: 维度成员父级编码
2875
+ parentName: Optional[str]
2876
+ #: 期间
2877
+ period: Optional[str]
2878
+ #: 场景
2879
+ scenario: Optional[str]
2880
+ #: 版本
2881
+ version: Optional[str]
2882
+ #: 年份
2883
+ year: Optional[str]
2884
+
2885
+
2886
+ class DimensionElementInfo(BaseModel):
2887
+ """Dimension Element Info
2888
+
2889
+ .. admonition:: 引用接口
2890
+
2891
+ - **POST** ``/dimension/config/entity/export``
2892
+ """
2893
+ #: 维度名称
2894
+ dimensionName: str
2895
+ #: 维度folderId
2896
+ folderId: Optional[str]
2897
+ #: path 和 folderId 取一个,优先path
2898
+ path: Optional[str]
2899
+
2900
+
2901
+ class MultidimensionalEntityConfigIncrementDTO(BaseModel):
2902
+ """Multidimensional Entity Config Increment DTO
2903
+
2904
+ .. admonition:: 引用接口
2905
+
2906
+ - **POST** ``/dimension/config/entity``
2907
+ - **POST** ``/dimension/config/entity/increment``
2908
+ """
2909
+ #: 实体维度配置表需要删除的数据,参数为空则不删除任何数据
2910
+ delete: List[ConfigDeleteFilter]
2911
+ #: 维度元素信息
2912
+ dimensionElementInfo: DimensionElementInfo
2913
+ #: 实体维度配置表数据
2914
+ multidimensionalEntityConfigMemberList: List[MultidimensionalEntityConfigMemberDTO]
@@ -1,4 +1,5 @@
1
1
  import asyncio
2
+ from typing import Dict
2
3
 
3
4
  from edgedb import AsyncIOClient, errors, enums, describe, abstract
4
5
  from edgedb.abstract import (
@@ -34,6 +35,25 @@ def collect_output_frame(ele_desc: describe.AnyType):
34
35
  return ele_desc.name
35
36
 
36
37
 
38
+ def normalize_kw(query: str, kw: Dict):
39
+ from deepfos.lib.edb_lexer import EdgeQLLexer
40
+ lexer = EdgeQLLexer()
41
+ lexer.setinputstr(query)
42
+ expected_args = list(
43
+ map(
44
+ lambda t: t.text[1::],
45
+ filter(lambda x: x.type == 'ARGUMENT', lexer.lex())
46
+ )
47
+ )
48
+ result = {}
49
+ for arg_name in expected_args:
50
+ if arg_name in kw:
51
+ result[arg_name] = kw[arg_name]
52
+ else:
53
+ result.setdefault(arg_name)
54
+ return result
55
+
56
+
37
57
  class _AsyncEdgeDBConnection(AsyncIOConnection):
38
58
  async def raw_query(self, query_context, capabilities=enums.Capability.NONE):
39
59
  if self.is_closed():
@@ -41,6 +61,13 @@ class _AsyncEdgeDBConnection(AsyncIOConnection):
41
61
 
42
62
  reconnect = False
43
63
  i = 0
64
+ query = query_context.query.query
65
+ kwargs = query_context.query.kwargs
66
+ query_context = query_context._replace(
67
+ query=query_context.query._replace(
68
+ kwargs=normalize_kw(query, kwargs)
69
+ )
70
+ )
44
71
  args = dict(
45
72
  query=query_context.query.query,
46
73
  args=query_context.query.args,
@@ -858,12 +858,15 @@ class AsyncDeepModel(ElementBase[DeepModelAPI]):
858
858
 
859
859
  @cached_property
860
860
  def objects(self) -> Dict[str, ObjectTypeFrame]:
861
- return {
862
- name: format_obj(obj)
863
- for name, obj in chain(
864
- self.user_objects.items(), self.system_objects.items()
865
- )
866
- }
861
+ result = {name: format_obj(obj) for name, obj in self.user_objects.items()}
862
+ for name, obj in self.system_objects.items():
863
+ # In case of duplicate name both in app obj& space obj
864
+ if name in result:
865
+ result[f'{self.spacemodule}::{name}'] = format_obj(obj)
866
+ else:
867
+ result[name] = format_obj(obj)
868
+
869
+ return result
867
870
 
868
871
  @staticmethod
869
872
  def _prepare_variables(kwargs):
@@ -1267,7 +1270,15 @@ class AsyncDeepModel(ElementBase[DeepModelAPI]):
1267
1270
  logger.info("data为空,无DML执行")
1268
1271
  return
1269
1272
 
1270
- obj = format_obj(self.get_object(object_name))
1273
+ if object_name in self.objects:
1274
+ obj = self.objects[object_name]
1275
+ else:
1276
+ raise ObjectNotExist(
1277
+ f'DeepModel对象[{object_name}]在当前应用不存在,无法插入数据'
1278
+ )
1279
+ if obj.external:
1280
+ raise ExternalObjectReadOnly('外部对象只可读')
1281
+
1271
1282
  structure = ObjectStructure(name=obj.name, structure=obj.fields.values())
1272
1283
 
1273
1284
  self._valid_data(data, object_name, relation, structure)
@@ -1348,24 +1359,33 @@ class AsyncDeepModel(ElementBase[DeepModelAPI]):
1348
1359
  kwargs={kw_name: part.to_json(orient='records', double_precision=15)}
1349
1360
  ))
1350
1361
 
1351
- def get_object(self, object_name: str) -> edgedb.Object:
1362
+ async def get_object(
1363
+ self,
1364
+ object_name: str,
1365
+ raw: bool = True
1366
+ ) -> Optional[Union[ObjectTypeFrame, edgedb.Object]]:
1352
1367
  """获取指定对象名的对象
1353
1368
 
1354
1369
  Args:
1355
- object_name: 对象名
1370
+ object_name: 对象名,如对象名未提供module name部分,则默认module name为当前app module
1371
+ 如需查询其他module的对象,应以 module_name::object_name 的形式提供
1372
+ raw: 是否获取edgedb.Object数据,为False时将转换为ObjectTypeFrame数据
1373
+ 默认为True
1356
1374
 
1357
1375
  """
1358
- if object_name in self.user_objects:
1359
- obj = self.user_objects[object_name]
1360
- elif object_name in self.system_objects:
1361
- obj = self.system_objects[object_name]
1362
- else:
1363
- raise ObjectNotExist(
1364
- f'DeepModel对象[{object_name}]在当前应用不存在,无法插入数据'
1365
- )
1366
- if obj.external:
1367
- raise ExternalObjectReadOnly('外部对象只可读')
1368
- return obj
1376
+ if '::' not in object_name:
1377
+ object_name = f'{self.appmodule}::{object_name}'
1378
+ objs = await AsyncDeepModel.query_object(
1379
+ self,
1380
+ f"{OBJECT_QUERY} filter .name = '{object_name}'",
1381
+ )
1382
+ if len(objs) == 0:
1383
+ return
1384
+
1385
+ if raw:
1386
+ return objs[0]
1387
+
1388
+ return format_obj(objs[0])
1369
1389
 
1370
1390
  async def _get_bkey(
1371
1391
  self,
@@ -1467,7 +1487,15 @@ class AsyncDeepModel(ElementBase[DeepModelAPI]):
1467
1487
  if data.empty:
1468
1488
  return
1469
1489
 
1470
- obj = format_obj(self.get_object(object_name))
1490
+ if object_name in self.objects:
1491
+ obj = self.objects[object_name]
1492
+ else:
1493
+ raise ObjectNotExist(
1494
+ f'DeepModel对象[{object_name}]在当前应用不存在,无法插入数据'
1495
+ )
1496
+ if obj.external:
1497
+ raise ExternalObjectReadOnly('外部对象只可读')
1498
+
1471
1499
  structure = ObjectStructure(
1472
1500
  name=obj.name,
1473
1501
  structure=obj.fields.values(),
@@ -1632,7 +1660,7 @@ class AsyncDeepModel(ElementBase[DeepModelAPI]):
1632
1660
  class DeepModel(AsyncDeepModel, metaclass=SyncMeta):
1633
1661
  synchronize = (
1634
1662
  'query_object', 'query', 'query_df',
1635
- 'execute',
1663
+ 'execute', 'get_object',
1636
1664
  'insert_df', 'insert_df_pg'
1637
1665
  )
1638
1666
 
@@ -1653,6 +1681,13 @@ class DeepModel(AsyncDeepModel, metaclass=SyncMeta):
1653
1681
  ) -> Optional[List]:
1654
1682
  ...
1655
1683
 
1684
+ def get_object(
1685
+ self,
1686
+ object_name: str,
1687
+ raw: bool = True
1688
+ ) -> Optional[Union[ObjectTypeFrame, edgedb.Object]]:
1689
+ ...
1690
+
1656
1691
  def insert_df(
1657
1692
  self,
1658
1693
  object_name: str,