symphony_bdk_python 2.10.dev0__py3-none-any.whl → 2.11.0__py3-none-any.whl

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 (435) hide show
  1. symphony/bdk/core/__init__.py +1 -0
  2. symphony/bdk/core/activity/__init__.py +1 -2
  3. symphony/bdk/core/activity/api.py +4 -4
  4. symphony/bdk/core/activity/command.py +17 -9
  5. symphony/bdk/core/activity/exception.py +2 -4
  6. symphony/bdk/core/activity/help_command.py +3 -2
  7. symphony/bdk/core/activity/parsing/arguments.py +1 -1
  8. symphony/bdk/core/activity/parsing/command_token.py +5 -4
  9. symphony/bdk/core/activity/parsing/input_tokenizer.py +13 -5
  10. symphony/bdk/core/activity/parsing/match_result.py +5 -3
  11. symphony/bdk/core/activity/parsing/message_entities.py +7 -6
  12. symphony/bdk/core/activity/parsing/slash_command_pattern.py +22 -7
  13. symphony/bdk/core/activity/registry.py +17 -7
  14. symphony/bdk/core/auth/__init__.py +1 -2
  15. symphony/bdk/core/auth/auth_session.py +33 -14
  16. symphony/bdk/core/auth/authenticator_factory.py +41 -21
  17. symphony/bdk/core/auth/bot_authenticator.py +33 -21
  18. symphony/bdk/core/auth/exception.py +3 -6
  19. symphony/bdk/core/auth/ext_app_authenticator.py +40 -30
  20. symphony/bdk/core/auth/jwt_helper.py +36 -15
  21. symphony/bdk/core/auth/obo_authenticator.py +27 -18
  22. symphony/bdk/core/auth/tokens_repository.py +5 -6
  23. symphony/bdk/core/client/__init__.py +2 -2
  24. symphony/bdk/core/client/api_client_factory.py +40 -22
  25. symphony/bdk/core/client/trace_id.py +3 -4
  26. symphony/bdk/core/config/__init__.py +1 -2
  27. symphony/bdk/core/config/exception.py +2 -4
  28. symphony/bdk/core/config/loader.py +2 -2
  29. symphony/bdk/core/config/model/bdk_app_config.py +5 -3
  30. symphony/bdk/core/config/model/bdk_authentication_config.py +13 -7
  31. symphony/bdk/core/config/model/bdk_bot_config.py +6 -3
  32. symphony/bdk/core/config/model/bdk_client_config.py +1 -1
  33. symphony/bdk/core/config/model/bdk_config.py +12 -7
  34. symphony/bdk/core/config/model/bdk_datafeed_config.py +7 -6
  35. symphony/bdk/core/config/model/bdk_datahose_config.py +1 -2
  36. symphony/bdk/core/config/model/bdk_retry_config.py +7 -3
  37. symphony/bdk/core/config/model/bdk_rsa_key_config.py +4 -5
  38. symphony/bdk/core/config/model/bdk_server_config.py +7 -2
  39. symphony/bdk/core/extension.py +15 -13
  40. symphony/bdk/core/retry/__init__.py +13 -9
  41. symphony/bdk/core/retry/_asyncio.py +10 -7
  42. symphony/bdk/core/retry/strategy.py +5 -2
  43. symphony/bdk/core/service/__init__.py +1 -2
  44. symphony/bdk/core/service/application/application_service.py +51 -41
  45. symphony/bdk/core/service/connection/connection_service.py +14 -23
  46. symphony/bdk/core/service/connection/model/connection_status.py +1 -0
  47. symphony/bdk/core/service/datafeed/abstract_ackId_event_loop.py +24 -14
  48. symphony/bdk/core/service/datafeed/abstract_datafeed_loop.py +16 -7
  49. symphony/bdk/core/service/datafeed/abstract_datahose_loop.py +2 -2
  50. symphony/bdk/core/service/datafeed/datafeed_loop_v1.py +18 -10
  51. symphony/bdk/core/service/datafeed/datafeed_loop_v2.py +31 -21
  52. symphony/bdk/core/service/datafeed/datahose_loop.py +22 -11
  53. symphony/bdk/core/service/datafeed/on_disk_datafeed_id_repository.py +10 -4
  54. symphony/bdk/core/service/datafeed/real_time_event_listener.py +32 -18
  55. symphony/bdk/core/service/exception.py +3 -6
  56. symphony/bdk/core/service/health/health_service.py +5 -4
  57. symphony/bdk/core/service/message/message_parser.py +10 -8
  58. symphony/bdk/core/service/message/message_service.py +196 -161
  59. symphony/bdk/core/service/message/messageml_util.py +6 -6
  60. symphony/bdk/core/service/message/model.py +15 -5
  61. symphony/bdk/core/service/message/multi_attachments_messages_api.py +134 -219
  62. symphony/bdk/core/service/obo_services.py +5 -4
  63. symphony/bdk/core/service/pagination.py +9 -6
  64. symphony/bdk/core/service/presence/presence_service.py +40 -28
  65. symphony/bdk/core/service/session/session_service.py +7 -13
  66. symphony/bdk/core/service/signal/signal_service.py +66 -33
  67. symphony/bdk/core/service/stream/stream_service.py +186 -69
  68. symphony/bdk/core/service/stream/stream_util.py +1 -0
  69. symphony/bdk/core/service/user/model/delegate_action_enum.py +1 -0
  70. symphony/bdk/core/service/user/model/role_id.py +1 -0
  71. symphony/bdk/core/service/user/user_service.py +225 -313
  72. symphony/bdk/core/service/user/user_util.py +4 -6
  73. symphony/bdk/core/service/version/__init__.py +0 -0
  74. symphony/bdk/core/service/version/agent_version_service.py +62 -0
  75. symphony/bdk/core/service_factory.py +50 -53
  76. symphony/bdk/core/symphony_bdk.py +34 -18
  77. symphony/bdk/ext/group.py +52 -37
  78. symphony/bdk/gen/agent_api/attachments_api.py +10 -18
  79. symphony/bdk/gen/agent_api/audit_trail_api.py +8 -12
  80. symphony/bdk/gen/agent_api/datafeed_api.py +34 -219
  81. symphony/bdk/gen/agent_api/datahose_api.py +184 -0
  82. symphony/bdk/gen/agent_api/dlp_policies_and_dictionary_management_api.py +130 -214
  83. symphony/bdk/gen/agent_api/messages_api.py +99 -119
  84. symphony/bdk/gen/agent_api/share_api.py +7 -11
  85. symphony/bdk/gen/agent_api/signals_api.py +1 -1
  86. symphony/bdk/gen/agent_api/system_api.py +1 -1
  87. symphony/bdk/gen/agent_api/util_api.py +13 -21
  88. symphony/bdk/gen/agent_api/violations_api.py +45 -73
  89. symphony/bdk/gen/agent_model/ack_id.py +1 -1
  90. symphony/bdk/gen/agent_model/agent_info.py +1 -1
  91. symphony/bdk/gen/agent_model/attachment_info.py +1 -1
  92. symphony/bdk/gen/agent_model/base_message.py +1 -1
  93. symphony/bdk/gen/agent_model/base_signal.py +1 -1
  94. symphony/bdk/gen/agent_model/channel_subscriber.py +1 -1
  95. symphony/bdk/gen/agent_model/channel_subscriber_response.py +1 -1
  96. symphony/bdk/gen/agent_model/channel_subscription_error.py +1 -1
  97. symphony/bdk/gen/agent_model/channel_subscription_response.py +1 -1
  98. symphony/bdk/gen/agent_model/connection_request_message.py +1 -1
  99. symphony/bdk/gen/agent_model/connection_request_message_all_of.py +1 -1
  100. symphony/bdk/gen/agent_model/datafeed.py +1 -1
  101. symphony/bdk/gen/agent_model/error.py +1 -1
  102. symphony/bdk/gen/agent_model/import_response.py +1 -1
  103. symphony/bdk/gen/agent_model/import_response_list.py +1 -1
  104. symphony/bdk/gen/agent_model/imported_message.py +1 -1
  105. symphony/bdk/gen/agent_model/ingestion_error.py +266 -0
  106. symphony/bdk/gen/agent_model/message.py +1 -1
  107. symphony/bdk/gen/agent_model/message_all_of.py +1 -1
  108. symphony/bdk/gen/agent_model/message_import_list.py +1 -1
  109. symphony/bdk/gen/agent_model/message_list.py +1 -1
  110. symphony/bdk/gen/agent_model/message_search_query.py +1 -1
  111. symphony/bdk/gen/agent_model/message_submission.py +1 -1
  112. symphony/bdk/gen/agent_model/pagination.py +1 -1
  113. symphony/bdk/gen/agent_model/pagination_cursors.py +1 -1
  114. symphony/bdk/gen/agent_model/room_created_message.py +1 -1
  115. symphony/bdk/gen/agent_model/room_created_message_all_of.py +1 -1
  116. symphony/bdk/gen/agent_model/room_deactivated_message.py +1 -1
  117. symphony/bdk/gen/agent_model/room_deactivated_message_all_of.py +1 -1
  118. symphony/bdk/gen/agent_model/room_member_demoted_from_owner_message.py +1 -1
  119. symphony/bdk/gen/agent_model/room_member_demoted_from_owner_message_all_of.py +1 -1
  120. symphony/bdk/gen/agent_model/room_member_promoted_to_owner_message.py +1 -1
  121. symphony/bdk/gen/agent_model/room_member_promoted_to_owner_message_all_of.py +1 -1
  122. symphony/bdk/gen/agent_model/room_reactivated_message.py +1 -1
  123. symphony/bdk/gen/agent_model/room_reactivated_message_all_of.py +1 -1
  124. symphony/bdk/gen/agent_model/room_tag.py +1 -1
  125. symphony/bdk/gen/agent_model/room_updated_message.py +1 -1
  126. symphony/bdk/gen/agent_model/room_updated_message_all_of.py +1 -1
  127. symphony/bdk/gen/agent_model/share_article.py +1 -1
  128. symphony/bdk/gen/agent_model/share_content.py +1 -1
  129. symphony/bdk/gen/agent_model/signal.py +1 -1
  130. symphony/bdk/gen/agent_model/signal_all_of.py +1 -6
  131. symphony/bdk/gen/agent_model/signal_list.py +1 -1
  132. symphony/bdk/gen/agent_model/simple_message.py +1 -1
  133. symphony/bdk/gen/agent_model/success_response.py +1 -1
  134. symphony/bdk/gen/agent_model/user_joined_room_message.py +1 -1
  135. symphony/bdk/gen/agent_model/user_joined_room_message_all_of.py +1 -1
  136. symphony/bdk/gen/agent_model/user_left_room_message.py +1 -1
  137. symphony/bdk/gen/agent_model/user_left_room_message_all_of.py +1 -1
  138. symphony/bdk/gen/agent_model/v1_audit_trail_initiator_list.py +1 -1
  139. symphony/bdk/gen/agent_model/v1_audit_trail_initiator_response.py +1 -1
  140. symphony/bdk/gen/agent_model/v1_dlp_content_type.py +1 -1
  141. symphony/bdk/gen/agent_model/v1_dlp_dictionary.py +1 -1
  142. symphony/bdk/gen/agent_model/v1_dlp_dictionary_content.py +1 -1
  143. symphony/bdk/gen/agent_model/v1_dlp_dictionary_metadata.py +1 -1
  144. symphony/bdk/gen/agent_model/v1_dlp_dictionary_metadata_collection_response.py +1 -1
  145. symphony/bdk/gen/agent_model/v1_dlp_dictionary_metadata_create_request.py +1 -1
  146. symphony/bdk/gen/agent_model/v1_dlp_dictionary_metadata_response.py +1 -1
  147. symphony/bdk/gen/agent_model/v1_dlp_dictionary_metadata_update_request.py +1 -1
  148. symphony/bdk/gen/agent_model/v1_dlp_dictionary_ref.py +1 -1
  149. symphony/bdk/gen/agent_model/v1_dlp_matched_policy.py +1 -1
  150. symphony/bdk/gen/agent_model/v1_dlp_matched_policy_list.py +1 -1
  151. symphony/bdk/gen/agent_model/v1_dlp_outcome.py +1 -1
  152. symphony/bdk/gen/agent_model/v1_dlp_policies_collection_response.py +1 -1
  153. symphony/bdk/gen/agent_model/v1_dlp_policy.py +1 -1
  154. symphony/bdk/gen/agent_model/v1_dlp_policy_request.py +9 -8
  155. symphony/bdk/gen/agent_model/v1_dlp_policy_response.py +1 -1
  156. symphony/bdk/gen/agent_model/v1_dlp_signal.py +6 -1
  157. symphony/bdk/gen/agent_model/v1_dlp_stream.py +1 -1
  158. symphony/bdk/gen/agent_model/v1_dlp_violation.py +1 -1
  159. symphony/bdk/gen/agent_model/v1_dlp_violation_message.py +1 -1
  160. symphony/bdk/gen/agent_model/v1_dlp_violation_message_response.py +1 -1
  161. symphony/bdk/gen/agent_model/v1_dlp_violation_signal.py +1 -1
  162. symphony/bdk/gen/agent_model/v1_dlp_violation_signal_response.py +1 -1
  163. symphony/bdk/gen/agent_model/v1_dlp_violation_stream.py +1 -1
  164. symphony/bdk/gen/agent_model/v1_dlp_violation_stream_response.py +1 -1
  165. symphony/bdk/gen/agent_model/v1_health_check_response.py +1 -1
  166. symphony/bdk/gen/agent_model/v2_base_message.py +1 -1
  167. symphony/bdk/gen/agent_model/v2_error.py +1 -1
  168. symphony/bdk/gen/agent_model/v2_health_check_response.py +1 -1
  169. symphony/bdk/gen/agent_model/v2_import_response.py +1 -1
  170. symphony/bdk/gen/agent_model/v2_import_response_list.py +1 -1
  171. symphony/bdk/gen/agent_model/v2_imported_message.py +1 -1
  172. symphony/bdk/gen/agent_model/v2_message.py +1 -1
  173. symphony/bdk/gen/agent_model/v2_message_all_of.py +1 -1
  174. symphony/bdk/gen/agent_model/v2_message_import_list.py +1 -1
  175. symphony/bdk/gen/agent_model/v2_message_list.py +1 -1
  176. symphony/bdk/gen/agent_model/v2_message_submission.py +1 -1
  177. symphony/bdk/gen/agent_model/v3_dlp_dictionary_meta.py +1 -1
  178. symphony/bdk/gen/agent_model/v3_dlp_file_classifier_config.py +1 -1
  179. symphony/bdk/gen/agent_model/v3_dlp_file_extension_config.py +1 -1
  180. symphony/bdk/gen/agent_model/v3_dlp_file_password_config.py +1 -1
  181. symphony/bdk/gen/agent_model/v3_dlp_file_size_config.py +1 -1
  182. symphony/bdk/gen/agent_model/v3_dlp_policies_collection_response.py +1 -1
  183. symphony/bdk/gen/agent_model/v3_dlp_policy.py +1 -1
  184. symphony/bdk/gen/agent_model/v3_dlp_policy_applies_to.py +1 -1
  185. symphony/bdk/gen/agent_model/v3_dlp_policy_request.py +1 -1
  186. symphony/bdk/gen/agent_model/v3_dlp_policy_response.py +1 -1
  187. symphony/bdk/gen/agent_model/v3_dlp_rule.py +1 -1
  188. symphony/bdk/gen/agent_model/v3_dlp_text_match_config.py +1 -1
  189. symphony/bdk/gen/agent_model/v3_dlp_violation.py +1 -1
  190. symphony/bdk/gen/agent_model/v3_dlp_violation_message.py +1 -1
  191. symphony/bdk/gen/agent_model/v3_dlp_violation_message_response.py +1 -1
  192. symphony/bdk/gen/agent_model/v3_dlp_violation_signal.py +1 -1
  193. symphony/bdk/gen/agent_model/v3_dlp_violation_signal_response.py +1 -1
  194. symphony/bdk/gen/agent_model/v3_dlp_violation_stream.py +1 -1
  195. symphony/bdk/gen/agent_model/v3_dlp_violation_stream_response.py +1 -1
  196. symphony/bdk/gen/agent_model/v3_health.py +1 -1
  197. symphony/bdk/gen/agent_model/v3_health_auth_type.py +1 -1
  198. symphony/bdk/gen/agent_model/v3_health_component.py +1 -1
  199. symphony/bdk/gen/agent_model/v3_health_status.py +1 -1
  200. symphony/bdk/gen/agent_model/v4_attachment_info.py +1 -1
  201. symphony/bdk/gen/agent_model/v4_connection_accepted.py +1 -1
  202. symphony/bdk/gen/agent_model/v4_connection_requested.py +1 -1
  203. symphony/bdk/gen/agent_model/v4_event.py +3 -3
  204. symphony/bdk/gen/agent_model/v4_event_list.py +1 -1
  205. symphony/bdk/gen/agent_model/v4_generic_system_event.py +279 -0
  206. symphony/bdk/gen/agent_model/v4_import_response.py +1 -1
  207. symphony/bdk/gen/agent_model/v4_import_response_list.py +1 -1
  208. symphony/bdk/gen/agent_model/v4_imported_message.py +1 -1
  209. symphony/bdk/gen/agent_model/v4_imported_message_attachment.py +1 -1
  210. symphony/bdk/gen/agent_model/v4_initiator.py +1 -1
  211. symphony/bdk/gen/agent_model/v4_instant_message_created.py +1 -1
  212. symphony/bdk/gen/agent_model/v4_key_value_pair.py +1 -1
  213. symphony/bdk/gen/agent_model/v4_message.py +1 -1
  214. symphony/bdk/gen/agent_model/v4_message_blast_response.py +1 -1
  215. symphony/bdk/gen/agent_model/v4_message_import_list.py +1 -1
  216. symphony/bdk/gen/agent_model/v4_message_list.py +1 -1
  217. symphony/bdk/gen/agent_model/v4_message_sent.py +1 -1
  218. symphony/bdk/gen/agent_model/v4_message_suppressed.py +1 -1
  219. symphony/bdk/gen/agent_model/v4_payload.py +8 -1
  220. symphony/bdk/gen/agent_model/v4_room_created.py +1 -1
  221. symphony/bdk/gen/agent_model/v4_room_deactivated.py +1 -1
  222. symphony/bdk/gen/agent_model/v4_room_member_demoted_from_owner.py +1 -1
  223. symphony/bdk/gen/agent_model/v4_room_member_promoted_to_owner.py +1 -1
  224. symphony/bdk/gen/agent_model/v4_room_properties.py +1 -1
  225. symphony/bdk/gen/agent_model/v4_room_reactivated.py +1 -1
  226. symphony/bdk/gen/agent_model/v4_room_updated.py +1 -1
  227. symphony/bdk/gen/agent_model/v4_shared_post.py +1 -1
  228. symphony/bdk/gen/agent_model/v4_stream.py +6 -1
  229. symphony/bdk/gen/agent_model/v4_symphony_elements_action.py +1 -1
  230. symphony/bdk/gen/agent_model/v4_thumbnail_info.py +1 -1
  231. symphony/bdk/gen/agent_model/v4_user.py +1 -1
  232. symphony/bdk/gen/agent_model/v4_user_joined_room.py +1 -1
  233. symphony/bdk/gen/agent_model/v4_user_left_room.py +1 -1
  234. symphony/bdk/gen/agent_model/v4_user_requested_to_join_room.py +1 -1
  235. symphony/bdk/gen/agent_model/v5_datafeed.py +3 -3
  236. symphony/bdk/gen/agent_model/v5_datafeed_create_body.py +1 -1
  237. symphony/bdk/gen/agent_model/v5_event_list.py +1 -1
  238. symphony/bdk/gen/agent_model/v5_events_read_body.py +5 -5
  239. symphony/bdk/gen/pod_api/app_entitlement_api.py +1 -1
  240. symphony/bdk/gen/pod_api/application_api.py +1 -1
  241. symphony/bdk/gen/pod_api/connection_api.py +1 -1
  242. symphony/bdk/gen/pod_api/default_api.py +1 -1
  243. symphony/bdk/gen/pod_api/disclaimer_api.py +1 -1
  244. symphony/bdk/gen/pod_api/info_barriers_api.py +1 -1
  245. symphony/bdk/gen/pod_api/message_api.py +1 -1
  246. symphony/bdk/gen/pod_api/message_suppression_api.py +1 -1
  247. symphony/bdk/gen/pod_api/pod_api.py +1 -1
  248. symphony/bdk/gen/pod_api/presence_api.py +1 -1
  249. symphony/bdk/gen/pod_api/room_membership_api.py +1 -1
  250. symphony/bdk/gen/pod_api/security_api.py +1 -1
  251. symphony/bdk/gen/pod_api/session_api.py +1 -1
  252. symphony/bdk/gen/pod_api/streams_api.py +162 -1
  253. symphony/bdk/gen/pod_api/system_api.py +1 -1
  254. symphony/bdk/gen/pod_api/user_api.py +264 -2
  255. symphony/bdk/gen/pod_api/users_api.py +421 -1
  256. symphony/bdk/gen/pod_model/admin_justified_action.py +1 -1
  257. symphony/bdk/gen/pod_model/admin_justified_user_action.py +1 -1
  258. symphony/bdk/gen/pod_model/app_authentication_key.py +1 -1
  259. symphony/bdk/gen/pod_model/app_authentication_keys.py +1 -1
  260. symphony/bdk/gen/pod_model/app_notification.py +1 -1
  261. symphony/bdk/gen/pod_model/app_properties.py +1 -1
  262. symphony/bdk/gen/pod_model/app_property.py +1 -1
  263. symphony/bdk/gen/pod_model/application_detail.py +1 -1
  264. symphony/bdk/gen/pod_model/application_info.py +1 -1
  265. symphony/bdk/gen/pod_model/assignee_candidate.py +1 -1
  266. symphony/bdk/gen/pod_model/assignee_candidates.py +1 -1
  267. symphony/bdk/gen/pod_model/attachment_preview.py +1 -1
  268. symphony/bdk/gen/pod_model/avatar.py +1 -1
  269. symphony/bdk/gen/pod_model/avatar_list.py +1 -1
  270. symphony/bdk/gen/pod_model/avatar_update.py +1 -1
  271. symphony/bdk/gen/pod_model/bulk_action_result.py +1 -1
  272. symphony/bdk/gen/pod_model/cert_info.py +1 -1
  273. symphony/bdk/gen/pod_model/cert_info_item.py +1 -1
  274. symphony/bdk/gen/pod_model/company_cert.py +1 -1
  275. symphony/bdk/gen/pod_model/company_cert_attributes.py +1 -1
  276. symphony/bdk/gen/pod_model/company_cert_detail.py +1 -1
  277. symphony/bdk/gen/pod_model/company_cert_info.py +1 -1
  278. symphony/bdk/gen/pod_model/company_cert_info_list.py +1 -1
  279. symphony/bdk/gen/pod_model/company_cert_status.py +1 -1
  280. symphony/bdk/gen/pod_model/company_cert_type.py +1 -1
  281. symphony/bdk/gen/pod_model/company_cert_type_list.py +1 -1
  282. symphony/bdk/gen/pod_model/conversation_specific_stream_attributes.py +1 -1
  283. symphony/bdk/gen/pod_model/delegate_action.py +1 -1
  284. symphony/bdk/gen/pod_model/disclaimer.py +1 -1
  285. symphony/bdk/gen/pod_model/disclaimer_list.py +1 -1
  286. symphony/bdk/gen/pod_model/download_receipt_count.py +1 -1
  287. symphony/bdk/gen/pod_model/error.py +1 -1
  288. symphony/bdk/gen/pod_model/faceted_match_count.py +1 -1
  289. symphony/bdk/gen/pod_model/feature.py +1 -1
  290. symphony/bdk/gen/pod_model/feature_list.py +1 -1
  291. symphony/bdk/gen/pod_model/file_extension.py +6 -1
  292. symphony/bdk/gen/pod_model/file_extensions_response.py +1 -1
  293. symphony/bdk/gen/pod_model/followers_list.py +1 -1
  294. symphony/bdk/gen/pod_model/followers_list_response.py +1 -1
  295. symphony/bdk/gen/pod_model/following_list_response.py +1 -1
  296. symphony/bdk/gen/pod_model/group.py +1 -1
  297. symphony/bdk/gen/pod_model/group_item.py +1 -1
  298. symphony/bdk/gen/pod_model/group_list.py +1 -1
  299. symphony/bdk/gen/pod_model/group_role_scope.py +1 -1
  300. symphony/bdk/gen/pod_model/im_system_info.py +1 -1
  301. symphony/bdk/gen/pod_model/immutable_room_attributes.py +1 -1
  302. symphony/bdk/gen/pod_model/integer_list.py +1 -1
  303. symphony/bdk/gen/pod_model/languages.py +1 -1
  304. symphony/bdk/gen/pod_model/member_info.py +1 -1
  305. symphony/bdk/gen/pod_model/membership_data.py +1 -1
  306. symphony/bdk/gen/pod_model/membership_list.py +1 -1
  307. symphony/bdk/gen/pod_model/message_detail.py +1 -1
  308. symphony/bdk/gen/pod_model/message_details.py +1 -1
  309. symphony/bdk/gen/pod_model/message_download_receipt_count.py +1 -1
  310. symphony/bdk/gen/pod_model/message_ids.py +1 -1
  311. symphony/bdk/gen/pod_model/message_metadata_response.py +1 -1
  312. symphony/bdk/gen/pod_model/message_metadata_response_parent.py +1 -1
  313. symphony/bdk/gen/pod_model/message_receipt_detail.py +1 -1
  314. symphony/bdk/gen/pod_model/message_receipt_detail_response.py +1 -1
  315. symphony/bdk/gen/pod_model/message_status.py +1 -1
  316. symphony/bdk/gen/pod_model/message_status_user.py +1 -1
  317. symphony/bdk/gen/pod_model/message_stream.py +1 -1
  318. symphony/bdk/gen/pod_model/message_suppression_response.py +1 -1
  319. symphony/bdk/gen/pod_model/message_user.py +1 -1
  320. symphony/bdk/gen/pod_model/name_value_pair.py +1 -1
  321. symphony/bdk/gen/pod_model/pagination.py +1 -1
  322. symphony/bdk/gen/pod_model/pagination_cursors.py +1 -1
  323. symphony/bdk/gen/pod_model/password.py +1 -1
  324. symphony/bdk/gen/pod_model/password_reset.py +1 -1
  325. symphony/bdk/gen/pod_model/pod_app_entitlement.py +1 -1
  326. symphony/bdk/gen/pod_model/pod_app_entitlement_list.py +1 -1
  327. symphony/bdk/gen/pod_model/pod_certificate.py +1 -1
  328. symphony/bdk/gen/pod_model/policy.py +1 -1
  329. symphony/bdk/gen/pod_model/policy_list.py +1 -1
  330. symphony/bdk/gen/pod_model/product.py +1 -1
  331. symphony/bdk/gen/pod_model/product_list.py +1 -1
  332. symphony/bdk/gen/pod_model/protocol.py +1 -1
  333. symphony/bdk/gen/pod_model/role.py +1 -1
  334. symphony/bdk/gen/pod_model/role_detail.py +1 -1
  335. symphony/bdk/gen/pod_model/role_detail_list.py +1 -1
  336. symphony/bdk/gen/pod_model/role_list.py +1 -1
  337. symphony/bdk/gen/pod_model/room_attributes.py +1 -1
  338. symphony/bdk/gen/pod_model/room_detail.py +1 -1
  339. symphony/bdk/gen/pod_model/room_search_criteria.py +1 -1
  340. symphony/bdk/gen/pod_model/room_specific_stream_attributes.py +1 -1
  341. symphony/bdk/gen/pod_model/room_system_info.py +1 -1
  342. symphony/bdk/gen/pod_model/room_tag.py +1 -1
  343. symphony/bdk/gen/pod_model/service_account_manifest.py +264 -0
  344. symphony/bdk/gen/pod_model/stream.py +1 -1
  345. symphony/bdk/gen/pod_model/stream_attachment_item.py +1 -1
  346. symphony/bdk/gen/pod_model/stream_attachment_response.py +1 -1
  347. symphony/bdk/gen/pod_model/stream_attributes.py +1 -1
  348. symphony/bdk/gen/pod_model/stream_filter.py +1 -1
  349. symphony/bdk/gen/pod_model/stream_list.py +1 -1
  350. symphony/bdk/gen/pod_model/stream_type.py +1 -1
  351. symphony/bdk/gen/pod_model/string_id.py +1 -1
  352. symphony/bdk/gen/pod_model/string_list.py +1 -1
  353. symphony/bdk/gen/pod_model/success_response.py +1 -1
  354. symphony/bdk/gen/pod_model/user_app_entitlement.py +1 -1
  355. symphony/bdk/gen/pod_model/user_app_entitlement_list.py +1 -1
  356. symphony/bdk/gen/pod_model/user_app_entitlement_patch.py +1 -1
  357. symphony/bdk/gen/pod_model/user_app_entitlement_patch_enum.py +1 -1
  358. symphony/bdk/gen/pod_model/user_app_entitlements_patch_list.py +1 -1
  359. symphony/bdk/gen/pod_model/user_attributes.py +1 -1
  360. symphony/bdk/gen/pod_model/user_compp.py +1 -1
  361. symphony/bdk/gen/pod_model/user_connection.py +1 -1
  362. symphony/bdk/gen/pod_model/user_connection_list.py +1 -1
  363. symphony/bdk/gen/pod_model/user_connection_request.py +1 -1
  364. symphony/bdk/gen/pod_model/user_data.py +1 -1
  365. symphony/bdk/gen/pod_model/user_detail.py +1 -1
  366. symphony/bdk/gen/pod_model/user_detail_list.py +1 -1
  367. symphony/bdk/gen/pod_model/user_error.py +1 -1
  368. symphony/bdk/gen/pod_model/user_filter.py +1 -1
  369. symphony/bdk/gen/pod_model/user_group_assignee.py +1 -1
  370. symphony/bdk/gen/pod_model/user_group_assignee_response.py +1 -1
  371. symphony/bdk/gen/pod_model/user_group_assignee_update.py +1 -1
  372. symphony/bdk/gen/pod_model/user_group_assignment_response.py +1 -1
  373. symphony/bdk/gen/pod_model/user_group_create.py +1 -1
  374. symphony/bdk/gen/pod_model/user_group_data.py +1 -1
  375. symphony/bdk/gen/pod_model/user_group_membership_data.py +1 -1
  376. symphony/bdk/gen/pod_model/user_group_membership_request.py +1 -1
  377. symphony/bdk/gen/pod_model/user_group_membership_response.py +1 -1
  378. symphony/bdk/gen/pod_model/user_group_membership_response_data.py +1 -1
  379. symphony/bdk/gen/pod_model/user_group_membership_update.py +1 -1
  380. symphony/bdk/gen/pod_model/user_group_response.py +1 -1
  381. symphony/bdk/gen/pod_model/user_group_response_list.py +1 -1
  382. symphony/bdk/gen/pod_model/user_group_update.py +1 -1
  383. symphony/bdk/gen/pod_model/user_id.py +1 -1
  384. symphony/bdk/gen/pod_model/user_id_list.py +1 -1
  385. symphony/bdk/gen/pod_model/user_info.py +1 -1
  386. symphony/bdk/gen/pod_model/user_name.py +1 -1
  387. symphony/bdk/gen/pod_model/user_name_list.py +1 -1
  388. symphony/bdk/gen/pod_model/user_search_filter.py +1 -1
  389. symphony/bdk/gen/pod_model/user_search_query.py +1 -1
  390. symphony/bdk/gen/pod_model/user_search_results.py +1 -1
  391. symphony/bdk/gen/pod_model/user_status.py +1 -1
  392. symphony/bdk/gen/pod_model/user_suspension.py +1 -1
  393. symphony/bdk/gen/pod_model/user_system_info.py +1 -1
  394. symphony/bdk/gen/pod_model/user_v2.py +1 -1
  395. symphony/bdk/gen/pod_model/v1_im_attributes.py +1 -1
  396. symphony/bdk/gen/pod_model/v1_im_detail.py +1 -1
  397. symphony/bdk/gen/pod_model/v1_session.py +301 -0
  398. symphony/bdk/gen/pod_model/v1_user_sessions.py +259 -0
  399. symphony/bdk/gen/pod_model/v2_admin_stream_attributes.py +6 -1
  400. symphony/bdk/gen/pod_model/v2_admin_stream_filter.py +1 -1
  401. symphony/bdk/gen/pod_model/v2_admin_stream_info.py +1 -1
  402. symphony/bdk/gen/pod_model/v2_admin_stream_info_list.py +1 -1
  403. symphony/bdk/gen/pod_model/v2_admin_stream_list.py +1 -1
  404. symphony/bdk/gen/pod_model/v2_admin_stream_type.py +1 -1
  405. symphony/bdk/gen/pod_model/v2_conversation_specific_stream_attributes.py +1 -1
  406. symphony/bdk/gen/pod_model/v2_member_info.py +1 -1
  407. symphony/bdk/gen/pod_model/v2_member_info_list.py +1 -1
  408. symphony/bdk/gen/pod_model/v2_member_user_detail.py +1 -1
  409. symphony/bdk/gen/pod_model/v2_membership_list.py +1 -1
  410. symphony/bdk/gen/pod_model/v2_presence.py +1 -1
  411. symphony/bdk/gen/pod_model/v2_presence_all_of.py +1 -1
  412. symphony/bdk/gen/pod_model/v2_presence_list.py +1 -1
  413. symphony/bdk/gen/pod_model/v2_presence_status.py +1 -1
  414. symphony/bdk/gen/pod_model/v2_room_search_criteria.py +1 -1
  415. symphony/bdk/gen/pod_model/v2_room_search_criteria_all_of.py +1 -1
  416. symphony/bdk/gen/pod_model/v2_room_specific_stream_attributes.py +1 -1
  417. symphony/bdk/gen/pod_model/v2_stream_attributes.py +1 -1
  418. symphony/bdk/gen/pod_model/v2_stream_type.py +1 -1
  419. symphony/bdk/gen/pod_model/v2_user_attributes.py +1 -1
  420. symphony/bdk/gen/pod_model/v2_user_create.py +1 -1
  421. symphony/bdk/gen/pod_model/v2_user_detail.py +1 -1
  422. symphony/bdk/gen/pod_model/v2_user_detail_list.py +1 -1
  423. symphony/bdk/gen/pod_model/v2_user_key_request.py +1 -1
  424. symphony/bdk/gen/pod_model/v2_user_list.py +1 -1
  425. symphony/bdk/gen/pod_model/v2_user_presence.py +1 -1
  426. symphony/bdk/gen/pod_model/v2_user_presence_all_of.py +1 -1
  427. symphony/bdk/gen/pod_model/v3_room_attributes.py +6 -1
  428. symphony/bdk/gen/pod_model/v3_room_detail.py +1 -1
  429. symphony/bdk/gen/pod_model/v3_room_search_results.py +1 -1
  430. {symphony_bdk_python-2.10.dev0.dist-info → symphony_bdk_python-2.11.0.dist-info}/METADATA +19 -5
  431. symphony_bdk_python-2.11.0.dist-info/RECORD +546 -0
  432. symphony_bdk_python-2.10.dev0.dist-info/RECORD +0 -538
  433. {symphony_bdk_python-2.10.dev0.dist-info → symphony_bdk_python-2.11.0.dist-info}/LICENSE +0 -0
  434. {symphony_bdk_python-2.10.dev0.dist-info → symphony_bdk_python-2.11.0.dist-info}/NOTICE +0 -0
  435. {symphony_bdk_python-2.10.dev0.dist-info → symphony_bdk_python-2.11.0.dist-info}/WHEEL +0 -0
@@ -1,16 +1,21 @@
1
- from typing import Union, List, Tuple, IO, AsyncGenerator
1
+ from typing import IO, AsyncGenerator, List, Tuple, Union
2
2
 
3
3
  from symphony.bdk.core.auth.auth_session import AuthSession
4
4
  from symphony.bdk.core.config.model.bdk_retry_config import BdkRetryConfig
5
+ from symphony.bdk.core.retry import retry
5
6
  from symphony.bdk.core.service.message.model import Message
6
- from symphony.bdk.core.service.message.multi_attachments_messages_api import MultiAttachmentsMessagesApi
7
+ from symphony.bdk.core.service.message.multi_attachments_messages_api import (
8
+ MultiAttachmentsMessagesApi,
9
+ )
7
10
  from symphony.bdk.core.service.pagination import offset_based_pagination
8
11
  from symphony.bdk.gen.agent_api.attachments_api import AttachmentsApi
9
12
  from symphony.bdk.gen.agent_model.message_search_query import MessageSearchQuery
10
13
  from symphony.bdk.gen.agent_model.v4_import_response import V4ImportResponse
11
14
  from symphony.bdk.gen.agent_model.v4_imported_message import V4ImportedMessage
12
15
  from symphony.bdk.gen.agent_model.v4_message import V4Message
13
- from symphony.bdk.gen.agent_model.v4_message_blast_response import V4MessageBlastResponse
16
+ from symphony.bdk.gen.agent_model.v4_message_blast_response import (
17
+ V4MessageBlastResponse,
18
+ )
14
19
  from symphony.bdk.gen.agent_model.v4_message_import_list import V4MessageImportList
15
20
  from symphony.bdk.gen.pod_api.default_api import DefaultApi
16
21
  from symphony.bdk.gen.pod_api.message_api import MessageApi
@@ -18,32 +23,40 @@ from symphony.bdk.gen.pod_api.message_suppression_api import MessageSuppressionA
18
23
  from symphony.bdk.gen.pod_api.pod_api import PodApi
19
24
  from symphony.bdk.gen.pod_api.streams_api import StreamsApi
20
25
  from symphony.bdk.gen.pod_model.message_metadata_response import MessageMetadataResponse
21
- from symphony.bdk.gen.pod_model.message_receipt_detail_response import MessageReceiptDetailResponse
26
+ from symphony.bdk.gen.pod_model.message_receipt_detail_response import (
27
+ MessageReceiptDetailResponse,
28
+ )
22
29
  from symphony.bdk.gen.pod_model.message_status import MessageStatus
23
- from symphony.bdk.gen.pod_model.message_suppression_response import MessageSuppressionResponse
30
+ from symphony.bdk.gen.pod_model.message_suppression_response import (
31
+ MessageSuppressionResponse,
32
+ )
24
33
  from symphony.bdk.gen.pod_model.stream_attachment_item import StreamAttachmentItem
25
34
 
26
- from symphony.bdk.core.retry import retry
27
-
28
35
 
29
36
  class OboMessageService:
30
37
  """Class exposing OBO enabled endpoints for message management, e.g. send a message."""
31
38
 
32
- def __init__(self, messages_api: MultiAttachmentsMessagesApi, message_suppression_api: MessageSuppressionApi,
33
- auth_session: AuthSession,
34
- retry_config: BdkRetryConfig):
39
+ def __init__(
40
+ self,
41
+ messages_api: MultiAttachmentsMessagesApi,
42
+ message_suppression_api: MessageSuppressionApi,
43
+ pod_api: PodApi,
44
+ auth_session: AuthSession,
45
+ retry_config: BdkRetryConfig,
46
+ ):
35
47
  self._messages_api = messages_api
36
48
  self._message_suppression_api = message_suppression_api
49
+ self._pod_api = pod_api
37
50
  self._auth_session = auth_session
38
51
  self._retry_config = retry_config
39
52
 
40
53
  async def send_message(
41
- self,
42
- stream_id: str,
43
- message: Union[str, Message],
44
- data=None,
45
- version: str = "",
46
- attachment: List[Union[IO, Tuple[IO, IO]]] = None
54
+ self,
55
+ stream_id: str,
56
+ message: Union[str, Message],
57
+ data=None,
58
+ version: str = "",
59
+ attachment: List[Union[IO, Tuple[IO, IO]]] = None,
47
60
  ) -> V4Message:
48
61
  """Send a message to an existing stream.
49
62
  See: `Create Message <https://developers.symphony.com/restapi/reference/create-message-v4>`_
@@ -62,20 +75,29 @@ class OboMessageService:
62
75
 
63
76
  :return: a V4Message object containing the details of the sent message.
64
77
  """
65
- message_object = message if isinstance(message, Message) else Message(content=message, data=data,
66
- version=version, attachments=attachment)
67
- return await self._send_message(stream_id, message_object.content, message_object.data, message_object.version,
68
- message_object.attachments, message_object.previews)
78
+ message_object = (
79
+ message
80
+ if isinstance(message, Message)
81
+ else Message(content=message, data=data, version=version, attachments=attachment)
82
+ )
83
+ return await self._send_message(
84
+ stream_id,
85
+ message_object.content,
86
+ message_object.data,
87
+ message_object.version,
88
+ message_object.attachments,
89
+ message_object.previews,
90
+ )
69
91
 
70
92
  @retry
71
93
  async def _send_message(
72
- self,
73
- stream_id: str,
74
- message: str,
75
- data: str = "",
76
- version: str = "",
77
- attachment: List[IO] = None,
78
- preview: List[IO] = None
94
+ self,
95
+ stream_id: str,
96
+ message: str,
97
+ data: str = "",
98
+ version: str = "",
99
+ attachment: List[IO] = None,
100
+ preview: List[IO] = None,
79
101
  ) -> V4Message:
80
102
  """Send a message to an existing stream.
81
103
  See: `Create Message <https://developers.symphony.com/restapi/reference/create-message-v4>`_
@@ -98,7 +120,7 @@ class OboMessageService:
98
120
  "key_manager_token": await self._auth_session.key_manager_token,
99
121
  "message": message,
100
122
  "data": data,
101
- "version": version
123
+ "version": version,
102
124
  }
103
125
  if attachment is not None:
104
126
  params["attachment"] = attachment if isinstance(attachment, list) else [attachment]
@@ -108,10 +130,7 @@ class OboMessageService:
108
130
  return await self._messages_api.v4_stream_sid_multi_attachment_message_create_post(**params)
109
131
 
110
132
  @retry
111
- async def suppress_message(
112
- self,
113
- message_id: str
114
- ) -> MessageSuppressionResponse:
133
+ async def suppress_message(self, message_id: str) -> MessageSuppressionResponse:
115
134
  """Suppresses a message, preventing its contents from being displayed to users.
116
135
  See: `Suppress Message <https://developers.symphony.com/restapi/reference/suppress-message>`_
117
136
 
@@ -122,9 +141,55 @@ class OboMessageService:
122
141
  """
123
142
  params = {
124
143
  "id": message_id,
125
- "session_token": await self._auth_session.session_token
144
+ "session_token": await self._auth_session.session_token,
126
145
  }
127
- return await self._message_suppression_api.v1_admin_messagesuppression_id_suppress_post(**params)
146
+ return await self._message_suppression_api.v1_admin_messagesuppression_id_suppress_post(
147
+ **params
148
+ )
149
+
150
+ @retry
151
+ async def update_message(
152
+ self,
153
+ stream_id: str,
154
+ message_id: str,
155
+ message: Union[str, Message],
156
+ data=None,
157
+ version: str = "",
158
+ silent=True,
159
+ ) -> V4Message:
160
+ """Update an existing message. The existing message must be a valid social message, that has not been deleted.
161
+ See: `Update Message <https://developers.symphony.com/restapi/reference/update-message-v4>`_
162
+
163
+ :param stream_id: The ID of the stream where the message is being updated.
164
+ :param message_id: The ID of the message that is being updated.
165
+ :param message: a :py:class:`Message` instance or a string containing the MessageML content to be sent.
166
+ If it is a :py:class:`Message` instance, other parameters will be ignored.
167
+ If it is a string, ``<messageML>`` tags can be omitted.
168
+ :param data: an object (e.g. dict) that will be serialized into JSON using ``json.dumps``.
169
+ :param silent: a bool flag that will determine if the updated message is going to be marked as read (when true,
170
+ which is default value) or unread (when false).
171
+ :param version: Optional message version in the format "major.minor".
172
+ If empty, defaults to the latest supported version.
173
+
174
+ :return: a V4Message object containing the details of the updated message.
175
+ """
176
+ message_object = (
177
+ message
178
+ if isinstance(message, Message)
179
+ else Message(content=message, data=data, silent=silent, version=version)
180
+ )
181
+
182
+ params = {
183
+ "sid": stream_id,
184
+ "mid": message_id,
185
+ "session_token": await self._auth_session.session_token,
186
+ "key_manager_token": await self._auth_session.key_manager_token,
187
+ "message": message_object.content,
188
+ "data": message_object.data,
189
+ "version": message_object.version,
190
+ "silent": str(message_object.silent),
191
+ }
192
+ return await self._messages_api.v4_stream_sid_message_mid_update_post(**params)
128
193
 
129
194
  @retry
130
195
  async def get_attachment_types(self) -> List[str]:
@@ -134,19 +199,17 @@ class OboMessageService:
134
199
  :return: a list of String containing all allowed file extensions for attachments.
135
200
 
136
201
  """
137
- params = {
138
- "session_token": await self._auth_session.session_token
139
- }
202
+ params = {"session_token": await self._auth_session.session_token}
140
203
  type_list = await self._pod_api.v1_files_allowed_types_get(**params)
141
204
  return type_list.value
142
-
205
+
143
206
  async def blast_message(
144
- self,
145
- stream_ids: List[str],
146
- message: Union[str, Message],
147
- data=None,
148
- version: str = "",
149
- attachment: List[Union[IO, Tuple[IO, IO]]] = None
207
+ self,
208
+ stream_ids: List[str],
209
+ message: Union[str, Message],
210
+ data=None,
211
+ version: str = "",
212
+ attachment: List[Union[IO, Tuple[IO, IO]]] = None,
150
213
  ) -> V4MessageBlastResponse:
151
214
  """Send a message to multiple existing streams.
152
215
  See: `Blast Message <https://developers.symphony.com/restapi/reference/blast-message>`_
@@ -164,20 +227,29 @@ class OboMessageService:
164
227
  The limit is set to 30Mb total size; also, it is recommended not to exceed 25 files.
165
228
  :return:
166
229
  """
167
- message_object = message if isinstance(message, Message) else Message(content=message, data=data,
168
- version=version, attachments=attachment)
169
- return await self._blast_message(stream_ids, message_object.content, message_object.data,
170
- message_object.version, message_object.attachments, message_object.previews)
171
-
230
+ message_object = (
231
+ message
232
+ if isinstance(message, Message)
233
+ else Message(content=message, data=data, version=version, attachments=attachment)
234
+ )
235
+ return await self._blast_message(
236
+ stream_ids,
237
+ message_object.content,
238
+ message_object.data,
239
+ message_object.version,
240
+ message_object.attachments,
241
+ message_object.previews,
242
+ )
243
+
172
244
  @retry
173
245
  async def _blast_message(
174
- self,
175
- stream_ids: [str],
176
- message: str,
177
- data: str = "",
178
- version: str = "",
179
- attachment: List[IO] = None,
180
- preview: List[IO] = None
246
+ self,
247
+ stream_ids: List[str],
248
+ message: str,
249
+ data: str = "",
250
+ version: str = "",
251
+ attachment: List[IO] = None,
252
+ preview: List[IO] = None,
181
253
  ) -> V4MessageBlastResponse:
182
254
  """Send a message to multiple existing streams.
183
255
  See: `Blast Message <https://developers.symphony.com/restapi/reference/blast-message>`_
@@ -200,7 +272,7 @@ class OboMessageService:
200
272
  "key_manager_token": await self._auth_session.key_manager_token,
201
273
  "message": message,
202
274
  "data": data,
203
- "version": version
275
+ "version": version,
204
276
  }
205
277
  if attachment is not None:
206
278
  params["attachment"] = attachment if isinstance(attachment, list) else [attachment]
@@ -211,33 +283,30 @@ class OboMessageService:
211
283
 
212
284
 
213
285
  class MessageService(OboMessageService):
214
- """Service class for managing messages.
215
- """
216
-
217
- def __init__(self, messages_api: MultiAttachmentsMessagesApi,
218
- message_api: MessageApi,
219
- message_suppression_api: MessageSuppressionApi,
220
- streams_api: StreamsApi,
221
- pod_api: PodApi,
222
- attachment_api: AttachmentsApi,
223
- default_api: DefaultApi,
224
- auth_session: AuthSession,
225
- retry_config: BdkRetryConfig):
226
- super().__init__(messages_api, message_suppression_api, auth_session, retry_config)
286
+ """Service class for managing messages."""
287
+
288
+ def __init__(
289
+ self,
290
+ messages_api: MultiAttachmentsMessagesApi,
291
+ message_api: MessageApi,
292
+ message_suppression_api: MessageSuppressionApi,
293
+ streams_api: StreamsApi,
294
+ pod_api: PodApi,
295
+ attachment_api: AttachmentsApi,
296
+ default_api: DefaultApi,
297
+ auth_session: AuthSession,
298
+ retry_config: BdkRetryConfig,
299
+ ):
300
+ super().__init__(messages_api, message_suppression_api, pod_api, auth_session, retry_config)
227
301
  self._message_api = message_api
228
302
  self._message_suppression_api = message_suppression_api
229
303
  self._streams_api = streams_api
230
- self._pod_api = pod_api
231
304
  self._attachment_api = attachment_api
232
305
  self._default_api = default_api
233
306
 
234
307
  @retry
235
308
  async def list_messages(
236
- self,
237
- stream_id: str,
238
- since: int = 0,
239
- skip: int = 0,
240
- limit: int = 50
309
+ self, stream_id: str, since: int = 0, skip: int = 0, limit: int = 50
241
310
  ) -> [V4Message]:
242
311
  """Get messages from an existing stream. Additionally returns any attachments associated with the message.
243
312
  See: `Messages <https://developers.symphony.com/restapi/reference/messages-v4>`_
@@ -256,16 +325,13 @@ class MessageService(OboMessageService):
256
325
  "session_token": await self._auth_session.session_token,
257
326
  "key_manager_token": await self._auth_session.key_manager_token,
258
327
  "skip": skip,
259
- "limit": limit
328
+ "limit": limit,
260
329
  }
261
330
  message_list = await self._messages_api.v4_stream_sid_message_get(**params)
262
331
  return message_list.value
263
332
 
264
333
  @retry
265
- async def import_messages(
266
- self,
267
- messages: List[V4ImportedMessage]
268
- ) -> [V4ImportResponse]:
334
+ async def import_messages(self, messages: List[V4ImportedMessage]) -> [V4ImportResponse]:
269
335
  """Imports a list of messages to Symphony.
270
336
  See: `Import Message <https://developers.symphony.com/restapi/reference/import-message-v4>`_
271
337
 
@@ -277,17 +343,12 @@ class MessageService(OboMessageService):
277
343
  params = {
278
344
  "message_list": V4MessageImportList(value=messages),
279
345
  "session_token": await self._auth_session.session_token,
280
- "key_manager_token": await self._auth_session.key_manager_token
346
+ "key_manager_token": await self._auth_session.key_manager_token,
281
347
  }
282
348
  import_response_list = await self._messages_api.v4_message_import_post(**params)
283
349
  return import_response_list.value
284
350
 
285
- async def get_attachment(
286
- self,
287
- stream_id: str,
288
- message_id: str,
289
- attachment_id: str
290
- ) -> str:
351
+ async def get_attachment(self, stream_id: str, message_id: str, attachment_id: str) -> str:
291
352
  """Downloads the attachment body by the stream ID, message ID and attachment ID.
292
353
  See: `Attachment <https://developers.symphony.com/restapi/reference/attachment>`_
293
354
 
@@ -303,14 +364,11 @@ class MessageService(OboMessageService):
303
364
  "file_id": attachment_id,
304
365
  "message_id": message_id,
305
366
  "session_token": await self._auth_session.session_token,
306
- "key_manager_token": await self._auth_session.key_manager_token
367
+ "key_manager_token": await self._auth_session.key_manager_token,
307
368
  }
308
369
  return await self._attachment_api.v1_stream_sid_attachment_get(**params)
309
370
 
310
- async def get_message_status(
311
- self,
312
- message_id: str
313
- ) -> MessageStatus:
371
+ async def get_message_status(self, message_id: str) -> MessageStatus:
314
372
  """Get the status of a particular message, i.e the list of users who the message was sent to,
315
373
  delivered to and the list of users who read the message.
316
374
  See: `Message Status <https://developers.symphony.com/restapi/reference/message-status>`_
@@ -322,15 +380,12 @@ class MessageService(OboMessageService):
322
380
  """
323
381
  params = {
324
382
  "mid": message_id,
325
- "session_token": await self._auth_session.session_token
383
+ "session_token": await self._auth_session.session_token,
326
384
  }
327
385
  return await self._message_api.v1_message_mid_status_get(**params)
328
386
 
329
387
  @retry
330
- async def get_message(
331
- self,
332
- message_id: str
333
- ) -> V4Message:
388
+ async def get_message(self, message_id: str) -> V4Message:
334
389
  """Retrieves the details of a message given its message ID.
335
390
  See: `Get Message <https://developers.symphony.com/restapi/reference/get-message-v1>`_
336
391
 
@@ -342,18 +397,18 @@ class MessageService(OboMessageService):
342
397
  params = {
343
398
  "id": message_id,
344
399
  "session_token": await self._auth_session.session_token,
345
- "key_manager_token": await self._auth_session.key_manager_token
400
+ "key_manager_token": await self._auth_session.key_manager_token,
346
401
  }
347
402
  return await self._messages_api.v1_message_id_get(**params)
348
403
 
349
404
  @retry
350
405
  async def list_attachments(
351
- self,
352
- stream_id: str,
353
- since: int = None,
354
- to: int = None,
355
- limit: int = 50,
356
- sort_dir: str = "ASC"
406
+ self,
407
+ stream_id: str,
408
+ since: int = None,
409
+ to: int = None,
410
+ limit: int = 50,
411
+ sort_dir: str = "ASC",
357
412
  ) -> List[StreamAttachmentItem]:
358
413
  """List attachments in a particular stream.
359
414
  See: `List Attachments <https://developers.symphony.com/restapi/reference/list-attachments>`_
@@ -372,7 +427,7 @@ class MessageService(OboMessageService):
372
427
  "sid": stream_id,
373
428
  "session_token": await self._auth_session.session_token,
374
429
  "limit": limit,
375
- "sort_dir": sort_dir
430
+ "sort_dir": sort_dir,
376
431
  }
377
432
  if since is not None:
378
433
  params["since"] = since
@@ -382,10 +437,7 @@ class MessageService(OboMessageService):
382
437
  return attachment_list.value
383
438
 
384
439
  @retry
385
- async def list_message_receipts(
386
- self,
387
- message_id: str
388
- ) -> MessageReceiptDetailResponse:
440
+ async def list_message_receipts(self, message_id: str) -> MessageReceiptDetailResponse:
389
441
  """Fetches receipts details from a specific message.
390
442
  See: `List Message Receipts <https://developers.symphony.com/restapi/reference/list-message-receipts>`_
391
443
 
@@ -396,15 +448,12 @@ class MessageService(OboMessageService):
396
448
  """
397
449
  params = {
398
450
  "message_id": message_id,
399
- "session_token": await self._auth_session.session_token
451
+ "session_token": await self._auth_session.session_token,
400
452
  }
401
453
  return await self._default_api.v1_admin_messages_message_id_receipts_get(**params)
402
454
 
403
455
  @retry
404
- async def get_message_relationships(
405
- self,
406
- message_id: str
407
- ) -> MessageMetadataResponse:
456
+ async def get_message_relationships(self, message_id: str) -> MessageMetadataResponse:
408
457
  """Gets the message metadata relationship.
409
458
  This API allows users to track the relationship between a message and all the forwards and replies of that
410
459
  message.
@@ -418,13 +467,20 @@ class MessageService(OboMessageService):
418
467
  params = {
419
468
  "message_id": message_id,
420
469
  "session_token": await self._auth_session.session_token,
421
- "user_agent": ""
470
+ "user_agent": "",
422
471
  }
423
- return await self._default_api.v1_admin_messages_message_id_metadata_relationships_get(**params)
472
+ return await self._default_api.v1_admin_messages_message_id_metadata_relationships_get(
473
+ **params
474
+ )
424
475
 
425
476
  @retry
426
- async def search_messages(self, query: MessageSearchQuery, sort_dir: str = "desc", skip: int = 0,
427
- limit: int = 50) -> List[V4Message]:
477
+ async def search_messages(
478
+ self,
479
+ query: MessageSearchQuery,
480
+ sort_dir: str = "desc",
481
+ skip: int = 0,
482
+ limit: int = 50,
483
+ ) -> List[V4Message]:
428
484
  """Searches for messages in the context of a specified user, given an argument-based query and pagination
429
485
  attributes (skip and limit parameters).
430
486
  See: `Message Search (using POST) <https://developers.symphony.com/restapi/reference/message-search-post>`_
@@ -442,13 +498,18 @@ class MessageService(OboMessageService):
442
498
  "query": query,
443
499
  "sort_dir": sort_dir,
444
500
  "skip": skip,
445
- "limit": limit
501
+ "limit": limit,
446
502
  }
447
503
  message_list = await self._messages_api.v1_message_search_post(**params)
448
504
  return message_list.value # endpoint returns empty list when no values found
449
505
 
450
- async def search_all_messages(self, query: MessageSearchQuery, sort_dir: str = "desc", chunk_size: int = 50,
451
- max_number: int = None) -> AsyncGenerator[V4Message, None]:
506
+ async def search_all_messages(
507
+ self,
508
+ query: MessageSearchQuery,
509
+ sort_dir: str = "desc",
510
+ chunk_size: int = 50,
511
+ max_number: int = None,
512
+ ) -> AsyncGenerator[V4Message, None]:
452
513
  """Searches for messages in the context of a specified user, given an argument-based query.
453
514
  See: `Message Search (using POST) <https://developers.symphony.com/restapi/reference/message-search-post>`_
454
515
 
@@ -464,48 +525,22 @@ class MessageService(OboMessageService):
464
525
 
465
526
  return offset_based_pagination(search_messages_one_page, chunk_size, max_number)
466
527
 
467
- @retry
468
- async def update_message(self, stream_id: str, message_id: str, message: Union[str, Message], data=None,
469
- version: str = "", silent=True) -> V4Message:
470
- """Update an existing message. The existing message must be a valid social message, that has not been deleted.
471
- See: `Update Message <https://developers.symphony.com/restapi/reference/update-message-v4>`_
472
-
473
- :param stream_id: The ID of the stream where the message is being updated.
474
- :param message_id: The ID of the message that is being updated.
475
- :param message: a :py:class:`Message` instance or a string containing the MessageML content to be sent.
476
- If it is a :py:class:`Message` instance, other parameters will be ignored.
477
- If it is a string, ``<messageML>`` tags can be omitted.
478
- :param data: an object (e.g. dict) that will be serialized into JSON using ``json.dumps``.
479
- :param silent: a bool flag that will determine if the updated message is going to be marked as read (when true,
480
- which is default value) or unread (when false).
481
- :param version: Optional message version in the format "major.minor".
482
- If empty, defaults to the latest supported version.
483
-
484
- :return: a V4Message object containing the details of the updated message.
485
- """
486
- message_object = message if isinstance(message, Message) else Message(content=message, data=data, silent=silent,
487
- version=version)
488
-
489
- params = {
490
- "sid": stream_id,
491
- "mid": message_id,
492
- "session_token": await self._auth_session.session_token,
493
- "key_manager_token": await self._auth_session.key_manager_token,
494
- "message": message_object.content,
495
- "data": message_object.data,
496
- "version": message_object.version,
497
- "silent": str(message_object.silent)
498
- }
499
- return await self._messages_api.v4_stream_sid_message_mid_update_post(**params)
500
-
501
528
  @staticmethod
502
529
  def _validate_message_search_query(query: MessageSearchQuery):
503
530
  # Check streamType value among accepted ones if specified
504
- if query.stream_type is not None and query.stream_type not in ["CHAT", "IM", "MIM", "ROOM", "POST"]:
505
- raise ValueError(f"Wrong stream type {query.stream_type}. "
506
- f"Accepted values are: CHAT (1-1 instant messages and multi-party instant messages), "
507
- f"IM (1-1 instant message), MIM (multi-party instant message), "
508
- f"ROOM or POST (user profile wall posts)")
531
+ if query.stream_type is not None and query.stream_type not in [
532
+ "CHAT",
533
+ "IM",
534
+ "MIM",
535
+ "ROOM",
536
+ "POST",
537
+ ]:
538
+ raise ValueError(
539
+ f"Wrong stream type {query.stream_type}. "
540
+ f"Accepted values are: CHAT (1-1 instant messages and multi-party instant messages), "
541
+ f"IM (1-1 instant message), MIM (multi-party instant message), "
542
+ f"ROOM or POST (user profile wall posts)"
543
+ )
509
544
 
510
545
  # Text queries require streamId to be provided
511
546
  if query.text is not None and query.stream_id is None:
@@ -1,10 +1,10 @@
1
- """This module handles pre-processing for an outgoing message in order to have a valid messageML format.
2
- """
1
+ """This module handles pre-processing for an outgoing message in order to have a valid messageML format."""
2
+
3
3
  import re
4
4
 
5
5
 
6
6
  def escape_special_chars(raw_text: str) -> str:
7
- """ Replace all special characters placed within the messageML that must be HTML-escaped
7
+ """Replace all special characters placed within the messageML that must be HTML-escaped
8
8
  to have a valid MessageML format.
9
9
 
10
10
  :param raw_text: text to be parsed
@@ -14,7 +14,7 @@ def escape_special_chars(raw_text: str) -> str:
14
14
  parsed_text = ""
15
15
  matches = re.finditer(_pattern(), raw_text)
16
16
  for match in matches:
17
- parsed_text += raw_text[current_parsed_index:match.start()] + _replacement(match.group(0))
17
+ parsed_text += raw_text[current_parsed_index : match.start()] + _replacement(match.group(0))
18
18
  current_parsed_index = match.end()
19
19
  return parsed_text + raw_text[current_parsed_index:]
20
20
 
@@ -32,7 +32,7 @@ _special_chars_dict = {
32
32
  "<": "&lt;",
33
33
  ">": "&gt;",
34
34
  "'": "&apos;",
35
- "\"": "&quot;",
35
+ '"': "&quot;",
36
36
  "#": "&#35;",
37
37
  "\\$": "&#36;",
38
38
  "%": "&#37;",
@@ -47,5 +47,5 @@ _special_chars_dict = {
47
47
  "\\]": "&#93;",
48
48
  "`": "&#96;",
49
49
  "\\{": "&#123;",
50
- "\\}": "&#125;"
50
+ "\\}": "&#125;",
51
51
  }
@@ -1,5 +1,5 @@
1
1
  import json
2
- from typing import List, Tuple, Union, IO
2
+ from typing import IO, List, Tuple, Union
3
3
 
4
4
  from symphony.bdk.core.service.exception import MessageCreationError
5
5
 
@@ -14,8 +14,14 @@ class Message:
14
14
  `Create Message <https://developers.symphony.com/restapi/reference/create-message-v4>`_.
15
15
  """
16
16
 
17
- def __init__(self, content: str, data=None, silent=True,
18
- attachments: List[Union[IO, Tuple[IO, IO]]] = None, version: str = ""):
17
+ def __init__(
18
+ self,
19
+ content: str,
20
+ data=None,
21
+ silent=True,
22
+ attachments: List[Union[IO, Tuple[IO, IO]]] = None,
23
+ version: str = "",
24
+ ):
19
25
  """Builds a message.
20
26
 
21
27
  :param content: the MessageML content to be sent. This is mandatory
@@ -89,7 +95,9 @@ class Message:
89
95
  def _get_content(content):
90
96
  if content is None:
91
97
  raise MessageCreationError("Message content is mandatory")
92
- if not content.startswith(MESSAGE_ML_START_TAG) and not content.endswith(MESSAGE_ML_END_TAG):
98
+ if not content.startswith(MESSAGE_ML_START_TAG) and not content.endswith(
99
+ MESSAGE_ML_END_TAG
100
+ ):
93
101
  return MESSAGE_ML_START_TAG + content + MESSAGE_ML_END_TAG
94
102
  return content
95
103
 
@@ -109,6 +117,8 @@ class Message:
109
117
  attachments.append(item)
110
118
 
111
119
  if previews and len(previews) != len(attachments):
112
- raise MessageCreationError("Message should contain either no preview or as many previews as attachments")
120
+ raise MessageCreationError(
121
+ "Message should contain either no preview or as many previews as attachments"
122
+ )
113
123
 
114
124
  return attachments, previews