deepfos 1.1.24__tar.gz → 1.1.26__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.24 → deepfos-1.1.26}/PKG-INFO +1 -1
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/_version.py +3 -3
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/journal_model.py +10 -1
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/financial_model.py +2 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/element/finmodel.py +105 -21
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/element/journal.py +250 -101
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/exceptions/__init__.py +4 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/asynchronous.py +49 -23
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/serutils.py +4 -20
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos.egg-info/PKG-INFO +1 -1
- {deepfos-1.1.24 → deepfos-1.1.26}/MANIFEST.in +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/README.md +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/__init__.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/algo/__init__.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/algo/graph.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/V1_1/__init__.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/V1_1/business_model.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/V1_1/dimension.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/V1_1/models/__init__.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/V1_1/models/business_model.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/V1_1/models/dimension.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/V1_2/__init__.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/V1_2/dimension.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/V1_2/models/__init__.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/V1_2/models/dimension.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/__init__.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/account.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/accounting_engines.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/app.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/approval_process.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/base.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/business_model.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/consolidation.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/consolidation_process.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/datatable.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/deepconnector.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/deepfos_task.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/deepmodel.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/dimension.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/financial_model.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/journal_template.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/memory_financial_model.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/__init__.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/account.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/accounting_engines.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/app.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/approval_process.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/base.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/business_model.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/consolidation.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/consolidation_process.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/datatable_mysql.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/deepconnector.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/deepfos_task.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/deepmodel.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/dimension.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/journal_model.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/journal_template.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/memory_financial_model.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/platform.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/python.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/reconciliation_engine.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/reconciliation_report.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/role_strategy.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/smartlist.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/space.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/system.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/variable.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/models/workflow.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/platform.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/python.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/reconciliation_engine.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/reconciliation_report.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/role_strategy.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/smartlist.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/space.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/system.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/variable.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/api/workflow.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/boost/__init__.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/boost/jstream.c +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/boost/jstream.pyx +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/boost/pandas.c +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/boost/pandas.pyx +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/boost/py_jstream.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/boost/py_pandas.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/cache.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/config.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/__init__.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/cube/__init__.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/cube/_base.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/cube/constants.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/cube/cube.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/cube/formula.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/cube/syscube.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/cube/typing.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/cube/utils.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/dimension/__init__.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/dimension/_base.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/dimension/dimcreator.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/dimension/dimension.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/dimension/dimexpr.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/dimension/dimmember.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/dimension/eledimension.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/dimension/filters.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/dimension/sysdimension.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/logictable/__init__.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/logictable/_cache.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/logictable/_operator.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/logictable/nodemixin.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/logictable/sqlcondition.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/core/logictable/tablemodel.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/db/__init__.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/db/cipher.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/db/clickhouse.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/db/connector.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/db/daclickhouse.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/db/dameng.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/db/damysql.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/db/dbkits.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/db/deepengine.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/db/deepmodel.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/db/deepmodel_kingbase.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/db/edb.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/db/gauss.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/db/kingbase.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/db/mysql.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/db/oracle.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/db/postgresql.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/db/sqlserver.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/db/utils.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/element/__init__.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/element/accounting.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/element/apvlprocess.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/element/base.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/element/bizmodel.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/element/datatable.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/element/deepconnector.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/element/deepmodel.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/element/dimension.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/element/fact_table.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/element/journal_template.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/element/pyscript.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/element/reconciliation.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/element/rolestrategy.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/element/smartlist.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/element/variable.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/element/workflow.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/exceptions/hook.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lazy.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/__init__.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/_javaobj.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/concurrency.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/constant.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/decorator.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/deepchart.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/deepux.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/discovery.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/eureka.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/filterparser.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/httpcli.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/jsonstreamer.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/nacos.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/patch.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/redis.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/stopwatch.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/subtask.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/sysutils.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/lib/utils.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/local.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/options.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos/translation.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos.egg-info/SOURCES.txt +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos.egg-info/dependency_links.txt +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos.egg-info/not-zip-safe +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos.egg-info/requires.txt +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/deepfos.egg-info/top_level.txt +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/setup.cfg +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/setup.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/tests/__init__.py +0 -0
- {deepfos-1.1.24 → deepfos-1.1.26}/versioneer.py +0 -0
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2023-12-
|
|
11
|
+
"date": "2023-12-28T02:24:37+0000",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "1.1.
|
|
14
|
+
"full-revisionid": "7b2975015e7105274b4054e1136a0dfc22361966",
|
|
15
|
+
"version": "1.1.26"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -30,7 +30,16 @@ class JournalModelData(ChildAPI):
|
|
|
30
30
|
基于凭证模型的数据批量保存
|
|
31
31
|
"""
|
|
32
32
|
return {'body': batch}
|
|
33
|
-
|
|
33
|
+
|
|
34
|
+
@post('/data/update')
|
|
35
|
+
def update(self, batch: ModelDataBatchDTO) -> Union[CommonResultDTO, Awaitable[CommonResultDTO]]:
|
|
36
|
+
"""
|
|
37
|
+
【★】凭证模型-数据-单条更新-只支持头行更新及行插入和删除
|
|
38
|
+
|
|
39
|
+
基于凭证模型的数据更新
|
|
40
|
+
"""
|
|
41
|
+
return {'body': batch}
|
|
42
|
+
|
|
34
43
|
@post('data/calc/net/amount')
|
|
35
44
|
def calc_net_amount(self, param: JmPostParamVO) -> Union[JmPostResultVO, Awaitable[JmPostResultVO]]:
|
|
36
45
|
"""
|
|
@@ -44,8 +44,7 @@ from deepfos.api.models.financial_model import (
|
|
|
44
44
|
from deepfos.api.models.base import BaseModel
|
|
45
45
|
from deepfos.options import OPTION
|
|
46
46
|
from deepfos.lib.decorator import cached_property
|
|
47
|
-
from deepfos.exceptions import MDXExecuteTimeout
|
|
48
|
-
|
|
47
|
+
from deepfos.exceptions import MDXExecuteTimeout, MDXExecuteFail
|
|
49
48
|
|
|
50
49
|
__all__ = [
|
|
51
50
|
'AsyncFinancialCube',
|
|
@@ -487,6 +486,7 @@ class AsyncFinancialCube(ElementBase[FinancialModelAPI]):
|
|
|
487
486
|
need_check: bool = True,
|
|
488
487
|
data_audit: bool = True,
|
|
489
488
|
chunksize: Optional[int] = None,
|
|
489
|
+
callback: bool = True
|
|
490
490
|
):
|
|
491
491
|
"""
|
|
492
492
|
将DataFrame的数据保存至cube。
|
|
@@ -499,6 +499,7 @@ class AsyncFinancialCube(ElementBase[FinancialModelAPI]):
|
|
|
499
499
|
data_audit: 是否需要记录到数据审计
|
|
500
500
|
chunksize: 单次调用保存接口时最大的dataframe行数。
|
|
501
501
|
当data的行数超过此值时,将会分多次进行保存。
|
|
502
|
+
callback: 是否回调
|
|
502
503
|
|
|
503
504
|
Note:
|
|
504
505
|
此方法会对落库数据做以下处理:
|
|
@@ -539,7 +540,10 @@ class AsyncFinancialCube(ElementBase[FinancialModelAPI]):
|
|
|
539
540
|
if missing_dims := required_cols - set(data.columns):
|
|
540
541
|
raise ValueError(
|
|
541
542
|
f"Cannot save data because following columns are missing: {missing_dims}")
|
|
542
|
-
return await self._save_impl(
|
|
543
|
+
return await self._save_impl(
|
|
544
|
+
data[list(required_cols)],
|
|
545
|
+
pov, need_check, data_audit, chunksize, callback
|
|
546
|
+
)
|
|
543
547
|
|
|
544
548
|
async def save_unpivot(
|
|
545
549
|
self,
|
|
@@ -550,6 +554,7 @@ class AsyncFinancialCube(ElementBase[FinancialModelAPI]):
|
|
|
550
554
|
data_audit: bool = True,
|
|
551
555
|
chunksize: Optional[int] = None,
|
|
552
556
|
save_nan: bool = False,
|
|
557
|
+
callback: bool = True
|
|
553
558
|
):
|
|
554
559
|
"""保存有某个维度所有成员在列上的 ``DataFrame``
|
|
555
560
|
|
|
@@ -567,6 +572,7 @@ class AsyncFinancialCube(ElementBase[FinancialModelAPI]):
|
|
|
567
572
|
chunksize: 单次调用保存接口时最大的dataframe行数。
|
|
568
573
|
当data的行数超过此值时,将会分多次进行保存。
|
|
569
574
|
save_nan: 当把数据列成员转换到行上时,data为空的数据是否保存
|
|
575
|
+
callback: 是否回调
|
|
570
576
|
|
|
571
577
|
Warnings:
|
|
572
578
|
由于数据完整性等原因,此方法接收的dataframe数据列经常会有一些额外的空值。
|
|
@@ -610,7 +616,9 @@ class AsyncFinancialCube(ElementBase[FinancialModelAPI]):
|
|
|
610
616
|
logger.info("Will not save to cube because dataframe is empty.")
|
|
611
617
|
return
|
|
612
618
|
|
|
613
|
-
return await self._save_impl(
|
|
619
|
+
return await self._save_impl(
|
|
620
|
+
data, pov, need_check, data_audit, chunksize, callback
|
|
621
|
+
)
|
|
614
622
|
|
|
615
623
|
async def _save_impl(
|
|
616
624
|
self,
|
|
@@ -619,6 +627,7 @@ class AsyncFinancialCube(ElementBase[FinancialModelAPI]):
|
|
|
619
627
|
need_check: bool = True,
|
|
620
628
|
data_audit: bool = True,
|
|
621
629
|
chunksize: Optional[int] = None,
|
|
630
|
+
callback: bool = True
|
|
622
631
|
):
|
|
623
632
|
# replace NaN to standard None
|
|
624
633
|
data = data.mask(data.isna(), None)
|
|
@@ -643,18 +652,20 @@ class AsyncFinancialCube(ElementBase[FinancialModelAPI]):
|
|
|
643
652
|
needCheck=need_check,
|
|
644
653
|
dataAuditSwitch=data_audit,
|
|
645
654
|
entryMode=1,
|
|
646
|
-
validateDimensionMember=need_check
|
|
655
|
+
validateDimensionMember=need_check,
|
|
656
|
+
callback=callback
|
|
657
|
+
)
|
|
658
|
+
r = await self.async_api.reactspreadsheet.save(
|
|
659
|
+
payload.dict(exclude_unset=True)
|
|
647
660
|
)
|
|
648
|
-
r = await self.async_api.reactspreadsheet.save(payload.dict(exclude_unset=True))
|
|
649
661
|
resp.append(r)
|
|
650
662
|
return resp
|
|
651
663
|
|
|
652
|
-
async def
|
|
664
|
+
async def delete_with_mdx(
|
|
653
665
|
self,
|
|
654
|
-
expression: Union[str, Dict[str, Union[List[str], str]]]
|
|
655
|
-
chunksize: Optional[int] = None
|
|
666
|
+
expression: Union[str, Dict[str, Union[List[str], str]]]
|
|
656
667
|
):
|
|
657
|
-
"""
|
|
668
|
+
"""通过MDX脚本删除数据
|
|
658
669
|
|
|
659
670
|
根据维度表达式删除Cube数据
|
|
660
671
|
|
|
@@ -665,7 +676,6 @@ class AsyncFinancialCube(ElementBase[FinancialModelAPI]):
|
|
|
665
676
|
|
|
666
677
|
Args:
|
|
667
678
|
expression: 维度表达式
|
|
668
|
-
chunksize: 目前使用MDX实现,已弃用(弃用版本: 1.1.24),仅兼容旧版本保留
|
|
669
679
|
|
|
670
680
|
.. admonition:: 示例
|
|
671
681
|
|
|
@@ -676,25 +686,20 @@ class AsyncFinancialCube(ElementBase[FinancialModelAPI]):
|
|
|
676
686
|
|
|
677
687
|
cube = FinancialCube('example')
|
|
678
688
|
expr = 'Year{2021;2022}->Entiy{Base(TotalEntity,0)}'
|
|
679
|
-
r = cube.
|
|
689
|
+
r = cube.delete_with_mdx(expr)
|
|
680
690
|
expr_dict = {
|
|
681
691
|
"Year": ['2021', '2022'],
|
|
682
692
|
"Entity": "Base(TotalEntity,0)"
|
|
683
693
|
}
|
|
684
|
-
r = cube.
|
|
694
|
+
r = cube.delete_with_mdx(expr_dict)
|
|
685
695
|
|
|
686
696
|
Returns:
|
|
687
|
-
|
|
697
|
+
MDX执行结果
|
|
688
698
|
|
|
689
699
|
See Also:
|
|
690
|
-
:meth:`insert_null`
|
|
700
|
+
:meth:`insert_null` :meth:`delete`
|
|
691
701
|
|
|
692
702
|
"""
|
|
693
|
-
if chunksize:
|
|
694
|
-
logger.warning(
|
|
695
|
-
'Parameter \'chunksize\' is deprecated since 1.1.24'
|
|
696
|
-
)
|
|
697
|
-
|
|
698
703
|
if isinstance(expression, dict):
|
|
699
704
|
expression = dict_to_expr(expression)
|
|
700
705
|
|
|
@@ -779,6 +784,69 @@ class AsyncFinancialCube(ElementBase[FinancialModelAPI]):
|
|
|
779
784
|
|
|
780
785
|
return await self.mdx_execution(script)
|
|
781
786
|
|
|
787
|
+
async def delete(
|
|
788
|
+
self,
|
|
789
|
+
expression: Union[str, Dict[str, Union[List[str], str]]],
|
|
790
|
+
chunksize: Optional[int] = None,
|
|
791
|
+
use_mdx: bool = False,
|
|
792
|
+
callback: bool = True
|
|
793
|
+
):
|
|
794
|
+
"""删除数据
|
|
795
|
+
|
|
796
|
+
根据维度表达式删除Cube数据。
|
|
797
|
+
|
|
798
|
+
Warnings:
|
|
799
|
+
此方法首先查询数据,并且替换为null再调用保存接口。
|
|
800
|
+
因此如果要删除的数据量大,可能导致内存不足等问题。
|
|
801
|
+
如果不需要数据审计功能,请使用 :meth:`insert_null`
|
|
802
|
+
|
|
803
|
+
Args:
|
|
804
|
+
expression: 维度表达式
|
|
805
|
+
chunksize: 单次调用保存接口时最大的dataframe行数。
|
|
806
|
+
当data的行数超过此值时,将会分多次进行保存。
|
|
807
|
+
use_mdx: 是否使用MDX脚本实现,默认为否,等效于调用 :meth:`delete_with_mdx`
|
|
808
|
+
callback: 是否回调
|
|
809
|
+
|
|
810
|
+
.. admonition:: 示例
|
|
811
|
+
|
|
812
|
+
两种调用方式等价:
|
|
813
|
+
|
|
814
|
+
.. code-block:: python
|
|
815
|
+
:emphasize-lines: 3,8
|
|
816
|
+
|
|
817
|
+
cube = FinancialCube('example')
|
|
818
|
+
expr = 'Year{2021;2022}->Entiy{Base(TotalEntity,0)}'
|
|
819
|
+
r = cube.delete(expr)
|
|
820
|
+
expr_dict = {
|
|
821
|
+
"Year": ['2021', '2022'],
|
|
822
|
+
"Entity": "Base(TotalEntity,0)"
|
|
823
|
+
}
|
|
824
|
+
r = cube.delete(expr_dict)
|
|
825
|
+
|
|
826
|
+
Returns:
|
|
827
|
+
删除结果
|
|
828
|
+
|
|
829
|
+
See Also:
|
|
830
|
+
:meth:`insert_null` :meth:`delete_with_mdx`
|
|
831
|
+
|
|
832
|
+
"""
|
|
833
|
+
if use_mdx:
|
|
834
|
+
return await self.delete_with_mdx(expression)
|
|
835
|
+
|
|
836
|
+
if self._meta.autoCalculation:
|
|
837
|
+
if isinstance(expression, str):
|
|
838
|
+
expression = expr_to_dict(expression)
|
|
839
|
+
expression = {**expression}
|
|
840
|
+
|
|
841
|
+
if isinstance(expression, dict):
|
|
842
|
+
expression = dict_to_expr(expression)
|
|
843
|
+
|
|
844
|
+
data, pov = await self.query(expression)
|
|
845
|
+
data[DFLT_DATA_COLUMN] = None
|
|
846
|
+
return await self.save(
|
|
847
|
+
data, pov, data_audit=True, chunksize=chunksize, callback=callback
|
|
848
|
+
)
|
|
849
|
+
|
|
782
850
|
async def queries(
|
|
783
851
|
self,
|
|
784
852
|
expressions: Iterable[str],
|
|
@@ -1204,6 +1272,11 @@ class AsyncFinancialCube(ElementBase[FinancialModelAPI]):
|
|
|
1204
1272
|
if res.status == 1:
|
|
1205
1273
|
raise MDXExecuteTimeout(f'MDX执行超时,具体响应:\n{res}')
|
|
1206
1274
|
|
|
1275
|
+
if res.result is False:
|
|
1276
|
+
raise MDXExecuteFail(
|
|
1277
|
+
f'MDX执行失败,失败原因:\n{res.failReason}'
|
|
1278
|
+
)
|
|
1279
|
+
|
|
1207
1280
|
return res
|
|
1208
1281
|
|
|
1209
1282
|
|
|
@@ -1214,6 +1287,7 @@ class FinancialCube(AsyncFinancialCube, metaclass=SyncMeta):
|
|
|
1214
1287
|
'save',
|
|
1215
1288
|
'save_unpivot',
|
|
1216
1289
|
'delete',
|
|
1290
|
+
'delete_with_mdx',
|
|
1217
1291
|
'pc_init',
|
|
1218
1292
|
'pc_update',
|
|
1219
1293
|
'pc_upsert',
|
|
@@ -1252,6 +1326,7 @@ class FinancialCube(AsyncFinancialCube, metaclass=SyncMeta):
|
|
|
1252
1326
|
need_check: bool = True,
|
|
1253
1327
|
data_audit: bool = True,
|
|
1254
1328
|
chunksize: Optional[int] = None,
|
|
1329
|
+
callback: bool = True
|
|
1255
1330
|
):
|
|
1256
1331
|
...
|
|
1257
1332
|
|
|
@@ -1264,13 +1339,22 @@ class FinancialCube(AsyncFinancialCube, metaclass=SyncMeta):
|
|
|
1264
1339
|
data_audit: bool = True,
|
|
1265
1340
|
chunksize: Optional[int] = None,
|
|
1266
1341
|
save_nan: bool = False,
|
|
1342
|
+
callback: bool = True
|
|
1267
1343
|
):
|
|
1268
1344
|
...
|
|
1269
1345
|
|
|
1270
1346
|
def delete(
|
|
1271
1347
|
self,
|
|
1272
1348
|
expression: Union[str, Dict[str, Union[List[str], str]]],
|
|
1273
|
-
chunksize: Optional[int] = None
|
|
1349
|
+
chunksize: Optional[int] = None,
|
|
1350
|
+
use_mdx: bool = False,
|
|
1351
|
+
callback: bool = True
|
|
1352
|
+
):
|
|
1353
|
+
...
|
|
1354
|
+
|
|
1355
|
+
def delete_with_mdx(
|
|
1356
|
+
self,
|
|
1357
|
+
expression: Union[str, Dict[str, Union[List[str], str]]]
|
|
1274
1358
|
):
|
|
1275
1359
|
...
|
|
1276
1360
|
|