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.
Files changed (191) hide show
  1. {deepfos-1.1.68 → deepfos-1.1.70}/CHANGELOG.md +14 -0
  2. {deepfos-1.1.68 → deepfos-1.1.70}/PKG-INFO +1 -1
  3. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/_version.py +3 -3
  4. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/system.py +2 -0
  5. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/exceptions/__init__.py +1 -1
  6. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/msg.py +34 -8
  7. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos.egg-info/PKG-INFO +1 -1
  8. {deepfos-1.1.68 → deepfos-1.1.70}/.gitattributes +0 -0
  9. {deepfos-1.1.68 → deepfos-1.1.70}/.gitee/ISSUE_GUIDELINES.md +0 -0
  10. {deepfos-1.1.68 → deepfos-1.1.70}/.gitee/ISSUE_TEMPLATE.md +0 -0
  11. {deepfos-1.1.68 → deepfos-1.1.70}/.gitignore +0 -0
  12. {deepfos-1.1.68 → deepfos-1.1.70}/MANIFEST.in +0 -0
  13. {deepfos-1.1.68 → deepfos-1.1.70}/README.md +0 -0
  14. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/__init__.py +0 -0
  15. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/algo/__init__.py +0 -0
  16. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/algo/graph.py +0 -0
  17. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_1/__init__.py +0 -0
  18. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_1/business_model.py +0 -0
  19. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_1/dimension.py +0 -0
  20. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_1/models/__init__.py +0 -0
  21. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_1/models/business_model.py +0 -0
  22. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_1/models/dimension.py +0 -0
  23. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_2/__init__.py +0 -0
  24. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_2/dimension.py +0 -0
  25. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_2/models/__init__.py +0 -0
  26. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/V1_2/models/dimension.py +0 -0
  27. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/__init__.py +0 -0
  28. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/account.py +0 -0
  29. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/accounting_engines.py +0 -0
  30. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/app.py +0 -0
  31. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/approval_process.py +0 -0
  32. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/base.py +0 -0
  33. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/business_model.py +0 -0
  34. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/consolidation.py +0 -0
  35. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/consolidation_process.py +0 -0
  36. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/datatable.py +0 -0
  37. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/deep_pipeline.py +0 -0
  38. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/deepconnector.py +0 -0
  39. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/deepfos_task.py +0 -0
  40. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/deepmodel.py +0 -0
  41. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/dimension.py +0 -0
  42. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/financial_model.py +0 -0
  43. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/journal_model.py +0 -0
  44. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/journal_template.py +0 -0
  45. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/memory_financial_model.py +0 -0
  46. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/__init__.py +0 -0
  47. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/account.py +0 -0
  48. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/accounting_engines.py +0 -0
  49. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/app.py +0 -0
  50. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/approval_process.py +0 -0
  51. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/base.py +0 -0
  52. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/business_model.py +0 -0
  53. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/consolidation.py +0 -0
  54. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/consolidation_process.py +0 -0
  55. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/datatable_mysql.py +0 -0
  56. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/deep_pipeline.py +0 -0
  57. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/deepconnector.py +0 -0
  58. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/deepfos_task.py +0 -0
  59. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/deepmodel.py +0 -0
  60. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/dimension.py +0 -0
  61. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/financial_model.py +0 -0
  62. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/journal_model.py +0 -0
  63. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/journal_template.py +0 -0
  64. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/memory_financial_model.py +0 -0
  65. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/platform.py +0 -0
  66. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/python.py +0 -0
  67. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/reconciliation_engine.py +0 -0
  68. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/reconciliation_report.py +0 -0
  69. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/role_strategy.py +0 -0
  70. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/smartlist.py +0 -0
  71. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/space.py +0 -0
  72. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/variable.py +0 -0
  73. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/models/workflow.py +0 -0
  74. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/platform.py +0 -0
  75. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/python.py +0 -0
  76. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/reconciliation_engine.py +0 -0
  77. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/reconciliation_report.py +0 -0
  78. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/role_strategy.py +0 -0
  79. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/smartlist.py +0 -0
  80. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/space.py +0 -0
  81. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/system.py +0 -0
  82. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/variable.py +0 -0
  83. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/api/workflow.py +0 -0
  84. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/boost/__init__.py +0 -0
  85. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/boost/jstream.c +0 -0
  86. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/boost/jstream.pyx +0 -0
  87. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/boost/pandas.c +0 -0
  88. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/boost/pandas.pyx +0 -0
  89. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/boost/py_jstream.py +0 -0
  90. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/boost/py_pandas.py +0 -0
  91. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/cache.py +0 -0
  92. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/config.py +0 -0
  93. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/__init__.py +0 -0
  94. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/cube/__init__.py +0 -0
  95. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/cube/_base.py +0 -0
  96. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/cube/constants.py +0 -0
  97. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/cube/cube.py +0 -0
  98. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/cube/formula.py +0 -0
  99. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/cube/syscube.py +0 -0
  100. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/cube/typing.py +0 -0
  101. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/cube/utils.py +0 -0
  102. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/dimension/__init__.py +0 -0
  103. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/dimension/_base.py +0 -0
  104. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/dimension/dimcreator.py +0 -0
  105. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/dimension/dimension.py +0 -0
  106. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/dimension/dimexpr.py +0 -0
  107. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/dimension/dimmember.py +0 -0
  108. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/dimension/eledimension.py +0 -0
  109. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/dimension/filters.py +0 -0
  110. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/dimension/sysdimension.py +0 -0
  111. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/logictable/__init__.py +0 -0
  112. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/logictable/_cache.py +0 -0
  113. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/logictable/_operator.py +0 -0
  114. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/logictable/nodemixin.py +0 -0
  115. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/logictable/sqlcondition.py +0 -0
  116. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/core/logictable/tablemodel.py +0 -0
  117. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/__init__.py +0 -0
  118. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/cipher.py +0 -0
  119. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/clickhouse.py +0 -0
  120. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/connector.py +0 -0
  121. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/daclickhouse.py +0 -0
  122. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/dameng.py +0 -0
  123. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/damysql.py +0 -0
  124. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/dbkits.py +0 -0
  125. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/deepengine.py +0 -0
  126. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/deepmodel.py +0 -0
  127. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/deepmodel_kingbase.py +0 -0
  128. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/edb.py +0 -0
  129. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/gauss.py +0 -0
  130. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/kingbase.py +0 -0
  131. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/mysql.py +0 -0
  132. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/oracle.py +0 -0
  133. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/postgresql.py +0 -0
  134. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/sqlserver.py +0 -0
  135. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/db/utils.py +0 -0
  136. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/__init__.py +0 -0
  137. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/accounting.py +0 -0
  138. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/apvlprocess.py +0 -0
  139. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/base.py +0 -0
  140. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/bizmodel.py +0 -0
  141. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/datatable.py +0 -0
  142. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/deep_pipeline.py +0 -0
  143. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/deepconnector.py +0 -0
  144. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/deepmodel.py +0 -0
  145. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/dimension.py +0 -0
  146. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/fact_table.py +0 -0
  147. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/finmodel.py +0 -0
  148. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/journal.py +0 -0
  149. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/journal_template.py +0 -0
  150. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/pyscript.py +0 -0
  151. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/reconciliation.py +0 -0
  152. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/rolestrategy.py +0 -0
  153. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/smartlist.py +0 -0
  154. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/variable.py +0 -0
  155. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/element/workflow.py +0 -0
  156. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/exceptions/hook.py +0 -0
  157. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lazy.py +0 -0
  158. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/__init__.py +0 -0
  159. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/_javaobj.py +0 -0
  160. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/asynchronous.py +0 -0
  161. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/concurrency.py +0 -0
  162. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/constant.py +0 -0
  163. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/decorator.py +0 -0
  164. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/deepchart.py +0 -0
  165. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/deepux.py +0 -0
  166. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/discovery.py +0 -0
  167. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/edb_lexer.py +0 -0
  168. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/eureka.py +0 -0
  169. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/filterparser.py +0 -0
  170. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/httpcli.py +0 -0
  171. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/jsonstreamer.py +0 -0
  172. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/nacos.py +0 -0
  173. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/patch.py +0 -0
  174. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/redis.py +0 -0
  175. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/serutils.py +0 -0
  176. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/stopwatch.py +0 -0
  177. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/subtask.py +0 -0
  178. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/sysutils.py +0 -0
  179. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/lib/utils.py +0 -0
  180. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/local.py +0 -0
  181. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/options.py +0 -0
  182. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos/translation.py +0 -0
  183. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos.egg-info/SOURCES.txt +0 -0
  184. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos.egg-info/dependency_links.txt +0 -0
  185. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos.egg-info/not-zip-safe +0 -0
  186. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos.egg-info/requires.txt +0 -0
  187. {deepfos-1.1.68 → deepfos-1.1.70}/deepfos.egg-info/top_level.txt +0 -0
  188. {deepfos-1.1.68 → deepfos-1.1.70}/requirements.txt +0 -0
  189. {deepfos-1.1.68 → deepfos-1.1.70}/setup.cfg +0 -0
  190. {deepfos-1.1.68 → deepfos-1.1.70}/setup.py +0 -0
  191. {deepfos-1.1.68 → deepfos-1.1.70}/versioneer.py +0 -0
@@ -1,3 +1,17 @@
1
+ ## [1.1.70] - 2025-08-19
2
+
3
+ ### 新增
4
+
5
+ * 消息中心推送增加抄送用户、用户组参数
6
+
7
+
8
+ ## [1.1.69] - 2025-08-12
9
+
10
+ ### 新增
11
+
12
+ * 消息中心推送接受发送成功规则参数
13
+
14
+
1
15
  ## [1.1.68] - 2025-07-29
2
16
 
3
17
  ### 更新
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deepfos
3
- Version: 1.1.68
3
+ Version: 1.1.70
4
4
  Summary: Collecions of useful and handy tools for deepfos platform
5
5
  Home-page: http://py.deepfos.com
6
6
  Author: deepfos-python-team
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-08-07T03:10:50+0000",
11
+ "date": "2025-08-18T10:23:53+0000",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "e1b02f36c62e37f03965c5219dc9426d19af95a8",
15
- "version": "1.1.68"
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 '推送失败,报错信息:' + '\n'.join([r.errorMsg for r in self.reasons])
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[str] = None,
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
  ...
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deepfos
3
- Version: 1.1.68
3
+ Version: 1.1.70
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes