deepfos 1.1.39__tar.gz → 1.1.41__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.39 → deepfos-1.1.41}/CHANGELOG.md +13 -0
  2. {deepfos-1.1.39 → deepfos-1.1.41}/PKG-INFO +1 -1
  3. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/__init__.py +1 -0
  4. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/_version.py +3 -3
  5. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/db/edb.py +27 -0
  6. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/element/deepmodel.py +58 -23
  7. deepfos-1.1.41/deepfos/lib/edb_lexer.py +789 -0
  8. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos.egg-info/PKG-INFO +1 -1
  9. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos.egg-info/SOURCES.txt +2 -0
  10. {deepfos-1.1.39 → deepfos-1.1.41}/.gitattributes +0 -0
  11. {deepfos-1.1.39 → deepfos-1.1.41}/.gitee/ISSUE_GUIDELINES.md +0 -0
  12. {deepfos-1.1.39 → deepfos-1.1.41}/.gitee/ISSUE_TEMPLATE.md +0 -0
  13. {deepfos-1.1.39 → deepfos-1.1.41}/.gitignore +0 -0
  14. {deepfos-1.1.39 → deepfos-1.1.41}/MANIFEST.in +0 -0
  15. {deepfos-1.1.39 → deepfos-1.1.41}/README.md +0 -0
  16. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/algo/__init__.py +0 -0
  17. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/algo/graph.py +0 -0
  18. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/V1_1/__init__.py +0 -0
  19. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/V1_1/business_model.py +0 -0
  20. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/V1_1/dimension.py +0 -0
  21. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/V1_1/models/__init__.py +0 -0
  22. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/V1_1/models/business_model.py +0 -0
  23. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/V1_1/models/dimension.py +0 -0
  24. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/V1_2/__init__.py +0 -0
  25. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/V1_2/dimension.py +0 -0
  26. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/V1_2/models/__init__.py +0 -0
  27. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/V1_2/models/dimension.py +0 -0
  28. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/__init__.py +0 -0
  29. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/account.py +0 -0
  30. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/accounting_engines.py +0 -0
  31. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/app.py +0 -0
  32. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/approval_process.py +0 -0
  33. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/base.py +0 -0
  34. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/business_model.py +0 -0
  35. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/consolidation.py +0 -0
  36. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/consolidation_process.py +0 -0
  37. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/datatable.py +0 -0
  38. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/deepconnector.py +0 -0
  39. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/deepfos_task.py +0 -0
  40. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/deepmodel.py +0 -0
  41. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/dimension.py +0 -0
  42. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/financial_model.py +0 -0
  43. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/journal_model.py +0 -0
  44. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/journal_template.py +0 -0
  45. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/memory_financial_model.py +0 -0
  46. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/__init__.py +0 -0
  47. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/account.py +0 -0
  48. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/accounting_engines.py +0 -0
  49. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/app.py +0 -0
  50. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/approval_process.py +0 -0
  51. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/base.py +0 -0
  52. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/business_model.py +0 -0
  53. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/consolidation.py +0 -0
  54. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/consolidation_process.py +0 -0
  55. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/datatable_mysql.py +0 -0
  56. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/deepconnector.py +0 -0
  57. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/deepfos_task.py +0 -0
  58. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/deepmodel.py +0 -0
  59. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/dimension.py +0 -0
  60. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/financial_model.py +0 -0
  61. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/journal_model.py +0 -0
  62. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/journal_template.py +0 -0
  63. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/memory_financial_model.py +0 -0
  64. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/platform.py +0 -0
  65. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/python.py +0 -0
  66. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/reconciliation_engine.py +0 -0
  67. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/reconciliation_report.py +0 -0
  68. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/role_strategy.py +0 -0
  69. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/smartlist.py +0 -0
  70. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/space.py +0 -0
  71. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/system.py +0 -0
  72. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/variable.py +0 -0
  73. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/models/workflow.py +0 -0
  74. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/platform.py +0 -0
  75. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/python.py +0 -0
  76. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/reconciliation_engine.py +0 -0
  77. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/reconciliation_report.py +0 -0
  78. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/role_strategy.py +0 -0
  79. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/smartlist.py +0 -0
  80. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/space.py +0 -0
  81. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/system.py +0 -0
  82. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/variable.py +0 -0
  83. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/api/workflow.py +0 -0
  84. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/boost/__init__.py +0 -0
  85. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/boost/jstream.c +0 -0
  86. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/boost/jstream.pyx +0 -0
  87. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/boost/pandas.c +0 -0
  88. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/boost/pandas.pyx +0 -0
  89. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/boost/py_jstream.py +0 -0
  90. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/boost/py_pandas.py +0 -0
  91. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/cache.py +0 -0
  92. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/config.py +0 -0
  93. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/__init__.py +0 -0
  94. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/cube/__init__.py +0 -0
  95. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/cube/_base.py +0 -0
  96. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/cube/constants.py +0 -0
  97. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/cube/cube.py +0 -0
  98. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/cube/formula.py +0 -0
  99. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/cube/syscube.py +0 -0
  100. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/cube/typing.py +0 -0
  101. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/cube/utils.py +0 -0
  102. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/dimension/__init__.py +0 -0
  103. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/dimension/_base.py +0 -0
  104. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/dimension/dimcreator.py +0 -0
  105. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/dimension/dimension.py +0 -0
  106. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/dimension/dimexpr.py +0 -0
  107. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/dimension/dimmember.py +0 -0
  108. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/dimension/eledimension.py +0 -0
  109. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/dimension/filters.py +0 -0
  110. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/dimension/sysdimension.py +0 -0
  111. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/logictable/__init__.py +0 -0
  112. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/logictable/_cache.py +0 -0
  113. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/logictable/_operator.py +0 -0
  114. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/logictable/nodemixin.py +0 -0
  115. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/logictable/sqlcondition.py +0 -0
  116. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/core/logictable/tablemodel.py +0 -0
  117. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/db/__init__.py +0 -0
  118. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/db/cipher.py +0 -0
  119. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/db/clickhouse.py +0 -0
  120. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/db/connector.py +0 -0
  121. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/db/daclickhouse.py +0 -0
  122. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/db/dameng.py +0 -0
  123. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/db/damysql.py +0 -0
  124. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/db/dbkits.py +0 -0
  125. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/db/deepengine.py +0 -0
  126. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/db/deepmodel.py +0 -0
  127. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/db/deepmodel_kingbase.py +0 -0
  128. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/db/gauss.py +0 -0
  129. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/db/kingbase.py +0 -0
  130. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/db/mysql.py +0 -0
  131. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/db/oracle.py +0 -0
  132. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/db/postgresql.py +0 -0
  133. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/db/sqlserver.py +0 -0
  134. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/db/utils.py +0 -0
  135. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/element/__init__.py +0 -0
  136. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/element/accounting.py +0 -0
  137. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/element/apvlprocess.py +0 -0
  138. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/element/base.py +0 -0
  139. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/element/bizmodel.py +0 -0
  140. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/element/datatable.py +0 -0
  141. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/element/deepconnector.py +0 -0
  142. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/element/dimension.py +0 -0
  143. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/element/fact_table.py +0 -0
  144. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/element/finmodel.py +0 -0
  145. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/element/journal.py +0 -0
  146. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/element/journal_template.py +0 -0
  147. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/element/pyscript.py +0 -0
  148. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/element/reconciliation.py +0 -0
  149. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/element/rolestrategy.py +0 -0
  150. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/element/smartlist.py +0 -0
  151. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/element/variable.py +0 -0
  152. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/element/workflow.py +0 -0
  153. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/exceptions/__init__.py +0 -0
  154. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/exceptions/hook.py +0 -0
  155. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lazy.py +0 -0
  156. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/__init__.py +0 -0
  157. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/_javaobj.py +0 -0
  158. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/asynchronous.py +0 -0
  159. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/concurrency.py +0 -0
  160. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/constant.py +0 -0
  161. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/decorator.py +0 -0
  162. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/deepchart.py +0 -0
  163. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/deepux.py +0 -0
  164. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/discovery.py +0 -0
  165. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/eureka.py +0 -0
  166. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/filterparser.py +0 -0
  167. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/httpcli.py +0 -0
  168. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/jsonstreamer.py +0 -0
  169. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/msg.py +0 -0
  170. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/nacos.py +0 -0
  171. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/patch.py +0 -0
  172. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/redis.py +0 -0
  173. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/serutils.py +0 -0
  174. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/stopwatch.py +0 -0
  175. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/subtask.py +0 -0
  176. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/sysutils.py +0 -0
  177. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/lib/utils.py +0 -0
  178. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/local.py +0 -0
  179. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/options.py +0 -0
  180. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos/translation.py +0 -0
  181. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos.egg-info/dependency_links.txt +0 -0
  182. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos.egg-info/not-zip-safe +0 -0
  183. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos.egg-info/requires.txt +0 -0
  184. {deepfos-1.1.39 → deepfos-1.1.41}/deepfos.egg-info/top_level.txt +0 -0
  185. {deepfos-1.1.39 → deepfos-1.1.41}/requirements.txt +0 -0
  186. {deepfos-1.1.39 → deepfos-1.1.41}/setup.cfg +0 -0
  187. {deepfos-1.1.39 → deepfos-1.1.41}/setup.py +0 -0
  188. {deepfos-1.1.39 → deepfos-1.1.41}/versioneer.py +0 -0
@@ -1,3 +1,16 @@
1
+ ## [1.1.41] - 2024-08-26
2
+
3
+ ### 变更
4
+
5
+ * DeepModel get_object方法改为执行object查询语句
6
+ * DeepModel 查询和执行方法在kwargs的key缺省时自动补充None值
7
+
8
+ ## [1.1.40] - 2024-07-23
9
+
10
+ ### 变更
11
+
12
+ * DeepModel insert_df不排除外部对象链接
13
+
1
14
  ## [1.1.39] - 2024-07-16
2
15
 
3
16
  ### 新增
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deepfos
3
- Version: 1.1.39
3
+ Version: 1.1.41
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
@@ -3,3 +3,4 @@ from .options import OPTION, set_option, show_option
3
3
 
4
4
  from . import _version
5
5
  __version__ = _version.get_versions()['version']
6
+ __product_version__ = '3.0.0'
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2024-07-18T05:22:46+0000",
11
+ "date": "2024-08-27T03:14:45+0000",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "34556e8bf4fa85558117403f5410ccd173164c10",
15
- "version": "1.1.39"
14
+ "full-revisionid": "7ad5b47463259c3d454add43b3ce449ddd818120",
15
+ "version": "1.1.41"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -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,
@@ -420,7 +420,7 @@ class ObjectStructure:
420
420
  self.fields = {
421
421
  field.name: FieldFactory(field)
422
422
  for field in structure
423
- if not field.computable and field.name != 'id' and not field.external
423
+ if not field.computable and field.name != 'id'
424
424
  }
425
425
  # Make one for batch insert pg
426
426
  if include_id:
@@ -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,