deepfos 1.1.68__tar.gz → 1.1.70__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.68 → deepfos-1.1.70}/CHANGELOG.md +14 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/PKG-INFO +1 -1
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/_version.py +3 -3
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/system.py +2 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/exceptions/__init__.py +1 -1
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/msg.py +34 -8
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos.egg-info/PKG-INFO +1 -1
- {deepfos-1.1.68 → deepfos-1.1.70}/.gitattributes +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/.gitee/ISSUE_GUIDELINES.md +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/.gitee/ISSUE_TEMPLATE.md +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/.gitignore +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/MANIFEST.in +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/README.md +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/__init__.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/algo/__init__.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/algo/graph.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_1/__init__.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_1/business_model.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_1/dimension.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_1/models/__init__.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_1/models/business_model.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_1/models/dimension.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_2/__init__.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_2/dimension.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_2/models/__init__.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_2/models/dimension.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/__init__.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/account.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/accounting_engines.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/app.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/approval_process.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/base.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/business_model.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/consolidation.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/consolidation_process.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/datatable.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/deep_pipeline.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/deepconnector.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/deepfos_task.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/deepmodel.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/dimension.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/financial_model.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/journal_model.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/journal_template.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/memory_financial_model.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/__init__.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/account.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/accounting_engines.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/app.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/approval_process.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/base.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/business_model.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/consolidation.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/consolidation_process.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/datatable_mysql.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/deep_pipeline.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/deepconnector.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/deepfos_task.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/deepmodel.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/dimension.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/financial_model.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/journal_model.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/journal_template.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/memory_financial_model.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/platform.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/python.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/reconciliation_engine.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/reconciliation_report.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/role_strategy.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/smartlist.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/space.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/variable.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/workflow.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/platform.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/python.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/reconciliation_engine.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/reconciliation_report.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/role_strategy.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/smartlist.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/space.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/system.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/variable.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/workflow.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/boost/__init__.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/boost/jstream.c +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/boost/jstream.pyx +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/boost/pandas.c +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/boost/pandas.pyx +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/boost/py_jstream.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/boost/py_pandas.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/cache.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/config.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/__init__.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/cube/__init__.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/cube/_base.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/cube/constants.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/cube/cube.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/cube/formula.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/cube/syscube.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/cube/typing.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/cube/utils.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/dimension/__init__.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/dimension/_base.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/dimension/dimcreator.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/dimension/dimension.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/dimension/dimexpr.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/dimension/dimmember.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/dimension/eledimension.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/dimension/filters.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/dimension/sysdimension.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/logictable/__init__.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/logictable/_cache.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/logictable/_operator.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/logictable/nodemixin.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/logictable/sqlcondition.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/logictable/tablemodel.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/__init__.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/cipher.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/clickhouse.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/connector.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/daclickhouse.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/dameng.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/damysql.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/dbkits.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/deepengine.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/deepmodel.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/deepmodel_kingbase.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/edb.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/gauss.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/kingbase.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/mysql.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/oracle.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/postgresql.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/sqlserver.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/utils.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/__init__.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/accounting.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/apvlprocess.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/base.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/bizmodel.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/datatable.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/deep_pipeline.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/deepconnector.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/deepmodel.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/dimension.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/fact_table.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/finmodel.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/journal.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/journal_template.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/pyscript.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/reconciliation.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/rolestrategy.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/smartlist.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/variable.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/workflow.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/exceptions/hook.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lazy.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/__init__.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/_javaobj.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/asynchronous.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/concurrency.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/constant.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/decorator.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/deepchart.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/deepux.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/discovery.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/edb_lexer.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/eureka.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/filterparser.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/httpcli.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/jsonstreamer.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/nacos.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/patch.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/redis.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/serutils.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/stopwatch.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/subtask.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/sysutils.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/utils.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/local.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/options.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/translation.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos.egg-info/SOURCES.txt +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos.egg-info/dependency_links.txt +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos.egg-info/not-zip-safe +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos.egg-info/requires.txt +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/deepfos.egg-info/top_level.txt +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/requirements.txt +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/setup.cfg +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/setup.py +0 -0
- {deepfos-1.1.68 → deepfos-1.1.70}/versioneer.py +0 -0
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2025-08-
|
|
11
|
+
"date": "2025-08-18T10:23:53+0000",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "1.1.
|
|
14
|
+
"full-revisionid": "7c62afcad8175dbdb4e323deb062c91083af3793",
|
|
15
|
+
"version": "1.1.70"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -954,6 +954,8 @@ class MsgPushHasAttachmentRequestVO(BaseModel):
|
|
|
954
954
|
params: Optional[List[MessageTemplateParamVO]] = None
|
|
955
955
|
#: 接收对象(用户/用户组)
|
|
956
956
|
receiver: List[MessageReceiverVO]
|
|
957
|
+
#: 抄送对象(用户/用户组)
|
|
958
|
+
ccEmail: Optional[List[MessageReceiverVO]] = None
|
|
957
959
|
#: 发送人
|
|
958
960
|
sender: Optional[str] = None
|
|
959
961
|
#: 模板编码
|
|
@@ -200,7 +200,7 @@ class MsgCenterError(DeepfosBaseException):
|
|
|
200
200
|
self.reasons = reasons
|
|
201
201
|
|
|
202
202
|
def __str__(self):
|
|
203
|
-
return '
|
|
203
|
+
return '推送失败,响应错误详情:\n' + '\n'.join([str(r.dict()) for r in self.reasons])
|
|
204
204
|
|
|
205
205
|
|
|
206
206
|
# -----------------------------------------------------------------------------
|
|
@@ -110,8 +110,9 @@ class AsyncMsgCenter:
|
|
|
110
110
|
title_param: Dict[str, str] = None,
|
|
111
111
|
content_param: Dict[str, str] = None,
|
|
112
112
|
attachments: Dict[str, Union[str, bytes]] = None,
|
|
113
|
-
cc_email: List
|
|
114
|
-
api_idx: Literal[0, 1] = 0
|
|
113
|
+
cc_email: List = None,
|
|
114
|
+
api_idx: Literal[0, 1] = 0,
|
|
115
|
+
success_rule: Literal['partial', 'all'] = 'all'
|
|
115
116
|
) -> List:
|
|
116
117
|
payload = {
|
|
117
118
|
'receiver': receivers,
|
|
@@ -139,7 +140,11 @@ class AsyncMsgCenter:
|
|
|
139
140
|
|
|
140
141
|
api = self.type_api_map[tpl_type][api_idx]
|
|
141
142
|
resp = await api(payload)
|
|
142
|
-
if resp.failure
|
|
143
|
+
if resp.failure and (
|
|
144
|
+
success_rule == 'all' or (
|
|
145
|
+
success_rule == 'partial' and not resp.success
|
|
146
|
+
)
|
|
147
|
+
):
|
|
143
148
|
raise MsgCenterError(*resp.failure)
|
|
144
149
|
|
|
145
150
|
return resp.success
|
|
@@ -153,6 +158,9 @@ class AsyncMsgCenter:
|
|
|
153
158
|
title_param: Dict[str, str] = None,
|
|
154
159
|
content_param: Dict[str, str] = None,
|
|
155
160
|
attachments: Dict[str, Union[str, bytes]] = None,
|
|
161
|
+
success_rule: Literal['partial', 'all'] = 'all',
|
|
162
|
+
cc_users: List[str] = None,
|
|
163
|
+
cc_groups: List[str] = None,
|
|
156
164
|
) -> List:
|
|
157
165
|
"""推送指定消息模版的消息
|
|
158
166
|
|
|
@@ -164,6 +172,9 @@ class AsyncMsgCenter:
|
|
|
164
172
|
title_param: 可选,标题变量
|
|
165
173
|
content_param: 可选,内容变量
|
|
166
174
|
attachments: 可选,站内消息或邮箱的消息附件,以 文件名: 文件(字符串/bytes) 的字典形式提供
|
|
175
|
+
success_rule: 可选,发送成功规则,'partial' 表示部分成功即可,'all' 表示所有收件人都必须成功
|
|
176
|
+
cc_users: 可选,抄送人userid列表
|
|
177
|
+
cc_groups: 可选,抄送人groupid列表
|
|
167
178
|
|
|
168
179
|
.. admonition:: 示例
|
|
169
180
|
|
|
@@ -210,6 +221,11 @@ class AsyncMsgCenter:
|
|
|
210
221
|
receivers.extend([{'id': r, 'type': 'USER'} for r in receiver_users])
|
|
211
222
|
if receiver_groups:
|
|
212
223
|
receivers.extend([{'id': r, 'type': 'GROUP'} for r in receiver_groups])
|
|
224
|
+
cc_email = []
|
|
225
|
+
if cc_users:
|
|
226
|
+
cc_email.extend([{'id': r, 'type': 'USER'} for r in cc_users])
|
|
227
|
+
if cc_groups:
|
|
228
|
+
cc_email.extend([{'id': r, 'type': 'GROUP'} for r in cc_groups])
|
|
213
229
|
|
|
214
230
|
if not receivers:
|
|
215
231
|
raise ValueError('需提供receiver_users和receiver_groups中的至少一项')
|
|
@@ -217,7 +233,8 @@ class AsyncMsgCenter:
|
|
|
217
233
|
return await self._publish(
|
|
218
234
|
template, sender=sender, receivers=receivers,
|
|
219
235
|
title_param=title_param, content_param=content_param,
|
|
220
|
-
attachments=attachments,
|
|
236
|
+
attachments=attachments, success_rule=success_rule,
|
|
237
|
+
cc_email=cc_email
|
|
221
238
|
)
|
|
222
239
|
|
|
223
240
|
async def send_mail(
|
|
@@ -229,6 +246,7 @@ class AsyncMsgCenter:
|
|
|
229
246
|
content_param: Dict[str, str] = None,
|
|
230
247
|
attachments: Dict[str, Union[str, bytes]] = None,
|
|
231
248
|
cc_email: List[str] = None,
|
|
249
|
+
success_rule: Literal['partial', 'all'] = 'all'
|
|
232
250
|
) -> List:
|
|
233
251
|
"""发送指定消息模版的邮件
|
|
234
252
|
|
|
@@ -240,6 +258,7 @@ class AsyncMsgCenter:
|
|
|
240
258
|
content_param: 可选,内容变量
|
|
241
259
|
attachments: 可选,附件,以 文件名: 文件(字符串/bytes) 的字典形式提供
|
|
242
260
|
cc_email: 可选,抄送人列表
|
|
261
|
+
success_rule: 可选,发送成功规则,'partial' 表示部分成功即可,'all' 表示所有收件人都必须成功
|
|
243
262
|
|
|
244
263
|
|
|
245
264
|
.. admonition:: 示例
|
|
@@ -289,7 +308,7 @@ class AsyncMsgCenter:
|
|
|
289
308
|
template, sender=sender, receivers=receivers,
|
|
290
309
|
title_param=title_param, content_param=content_param,
|
|
291
310
|
attachments=attachments, cc_email=cc_email,
|
|
292
|
-
api_idx=1
|
|
311
|
+
api_idx=1, success_rule=success_rule,
|
|
293
312
|
)
|
|
294
313
|
|
|
295
314
|
async def send_sms(
|
|
@@ -298,7 +317,8 @@ class AsyncMsgCenter:
|
|
|
298
317
|
receivers: List[str],
|
|
299
318
|
sender: str = None,
|
|
300
319
|
title_param: Dict[str, str] = None,
|
|
301
|
-
content_param: Dict[str, str] = None
|
|
320
|
+
content_param: Dict[str, str] = None,
|
|
321
|
+
success_rule: Literal['partial', 'all'] = 'all'
|
|
302
322
|
) -> List:
|
|
303
323
|
"""发送指定消息模版的短信
|
|
304
324
|
|
|
@@ -308,6 +328,7 @@ class AsyncMsgCenter:
|
|
|
308
328
|
sender: 可选,发送人userid,默认为当前用户id
|
|
309
329
|
title_param: 可选,标题变量
|
|
310
330
|
content_param: 可选,内容变量
|
|
331
|
+
success_rule: 可选,发送成功规则,'partial' 表示部分成功即可,'all' 表示所有收件人都必须成功
|
|
311
332
|
|
|
312
333
|
|
|
313
334
|
.. admonition:: 示例
|
|
@@ -351,7 +372,7 @@ class AsyncMsgCenter:
|
|
|
351
372
|
return await self._publish(
|
|
352
373
|
template, sender=sender, receivers=receivers,
|
|
353
374
|
title_param=title_param, content_param=content_param,
|
|
354
|
-
api_idx=1
|
|
375
|
+
api_idx=1, success_rule=success_rule,
|
|
355
376
|
)
|
|
356
377
|
|
|
357
378
|
|
|
@@ -368,6 +389,9 @@ class MsgCenter(AsyncMsgCenter, metaclass=SyncMeta):
|
|
|
368
389
|
title_param: Dict[str, str] = None,
|
|
369
390
|
content_param: Dict[str, str] = None,
|
|
370
391
|
attachments: Dict[str, Union[str, bytes]] = None,
|
|
392
|
+
success_rule: Literal['partial', 'all'] = 'all',
|
|
393
|
+
cc_users: List[str] = None,
|
|
394
|
+
cc_groups: List[str] = None,
|
|
371
395
|
) -> List:
|
|
372
396
|
...
|
|
373
397
|
|
|
@@ -380,6 +404,7 @@ class MsgCenter(AsyncMsgCenter, metaclass=SyncMeta):
|
|
|
380
404
|
content_param: Dict[str, str] = None,
|
|
381
405
|
attachments: Dict[str, Union[str, bytes]] = None,
|
|
382
406
|
cc_email: List[str] = None,
|
|
407
|
+
success_rule: Literal['partial', 'all'] = 'all'
|
|
383
408
|
) -> List:
|
|
384
409
|
...
|
|
385
410
|
|
|
@@ -389,6 +414,7 @@ class MsgCenter(AsyncMsgCenter, metaclass=SyncMeta):
|
|
|
389
414
|
receivers: List[str],
|
|
390
415
|
sender: str = None,
|
|
391
416
|
title_param: Dict[str, str] = None,
|
|
392
|
-
content_param: Dict[str, str] = None
|
|
417
|
+
content_param: Dict[str, str] = None,
|
|
418
|
+
success_rule: Literal['partial', 'all'] = 'all'
|
|
393
419
|
) -> List:
|
|
394
420
|
...
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|