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.
- {deepfos-1.1.36 → deepfos-1.1.37}/CHANGELOG.md +14 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/PKG-INFO +1 -1
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/_version.py +3 -3
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/deepmodel.py +25 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/deepmodel.py +13 -1
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/edb.py +4 -3
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/deepmodel.py +42 -18
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/decorator.py +20 -8
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/utils.py +3 -2
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos.egg-info/PKG-INFO +1 -1
- {deepfos-1.1.36 → deepfos-1.1.37}/.gitattributes +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/.gitee/ISSUE_GUIDELINES.md +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/.gitee/ISSUE_TEMPLATE.md +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/.gitignore +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/MANIFEST.in +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/README.md +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/__init__.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/algo/__init__.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/algo/graph.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_1/__init__.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_1/business_model.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_1/dimension.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_1/models/__init__.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_1/models/business_model.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_1/models/dimension.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_2/__init__.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_2/dimension.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_2/models/__init__.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/V1_2/models/dimension.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/__init__.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/account.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/accounting_engines.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/app.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/approval_process.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/base.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/business_model.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/consolidation.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/consolidation_process.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/datatable.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/deepconnector.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/deepfos_task.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/dimension.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/financial_model.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/journal_model.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/journal_template.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/memory_financial_model.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/__init__.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/account.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/accounting_engines.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/app.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/approval_process.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/base.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/business_model.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/consolidation.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/consolidation_process.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/datatable_mysql.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/deepconnector.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/deepfos_task.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/dimension.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/financial_model.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/journal_model.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/journal_template.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/memory_financial_model.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/platform.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/python.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/reconciliation_engine.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/reconciliation_report.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/role_strategy.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/smartlist.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/space.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/system.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/variable.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/models/workflow.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/platform.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/python.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/reconciliation_engine.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/reconciliation_report.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/role_strategy.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/smartlist.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/space.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/system.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/variable.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/api/workflow.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/boost/__init__.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/boost/jstream.c +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/boost/jstream.pyx +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/boost/pandas.c +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/boost/pandas.pyx +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/boost/py_jstream.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/boost/py_pandas.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/cache.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/config.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/__init__.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/cube/__init__.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/cube/_base.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/cube/constants.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/cube/cube.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/cube/formula.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/cube/syscube.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/cube/typing.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/cube/utils.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/dimension/__init__.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/dimension/_base.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/dimension/dimcreator.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/dimension/dimension.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/dimension/dimexpr.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/dimension/dimmember.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/dimension/eledimension.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/dimension/filters.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/dimension/sysdimension.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/logictable/__init__.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/logictable/_cache.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/logictable/_operator.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/logictable/nodemixin.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/logictable/sqlcondition.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/core/logictable/tablemodel.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/__init__.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/cipher.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/clickhouse.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/connector.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/daclickhouse.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/dameng.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/damysql.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/dbkits.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/deepengine.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/deepmodel.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/deepmodel_kingbase.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/gauss.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/kingbase.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/mysql.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/oracle.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/postgresql.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/sqlserver.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/db/utils.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/__init__.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/accounting.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/apvlprocess.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/base.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/bizmodel.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/datatable.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/deepconnector.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/dimension.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/fact_table.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/finmodel.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/journal.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/journal_template.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/pyscript.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/reconciliation.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/rolestrategy.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/smartlist.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/variable.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/element/workflow.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/exceptions/__init__.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/exceptions/hook.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lazy.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/__init__.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/_javaobj.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/asynchronous.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/concurrency.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/constant.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/deepchart.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/deepux.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/discovery.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/eureka.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/filterparser.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/httpcli.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/jsonstreamer.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/msg.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/nacos.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/patch.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/redis.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/serutils.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/stopwatch.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/subtask.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/lib/sysutils.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/local.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/options.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos/translation.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos.egg-info/SOURCES.txt +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos.egg-info/dependency_links.txt +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos.egg-info/not-zip-safe +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos.egg-info/requires.txt +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/deepfos.egg-info/top_level.txt +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/requirements.txt +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/setup.cfg +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/setup.py +0 -0
- {deepfos-1.1.36 → deepfos-1.1.37}/versioneer.py +0 -0
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2024-06-
|
|
11
|
+
"date": "2024-06-20T03:28:41+0000",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "1.1.
|
|
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
|
-
|
|
175
|
-
|
|
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
|
-
|
|
757
|
-
|
|
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
|
-
|
|
794
|
+
client = client.with_globals(
|
|
760
795
|
**{
|
|
761
796
|
f'{self.spacemodule}::current_user_id':
|
|
762
797
|
user_id
|
|
763
798
|
}
|
|
764
799
|
)
|
|
765
|
-
|
|
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
|
-
|
|
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
|
-
|
|
286
|
-
|
|
287
|
-
|
|
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
|
-
|
|
290
|
-
|
|
301
|
+
if key in cache:
|
|
302
|
+
return cache[key]
|
|
291
303
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
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('_',
|
|
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
|
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|