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
@@ -10,19 +10,18 @@ DF_V2 = "v2"
10
10
 
11
11
 
12
12
  def log_dfv1_deprecation(version):
13
- """Logs a warning message when datafeed v1 is used in the bot configuration
14
- """
13
+ """Logs a warning message when datafeed v1 is used in the bot configuration"""
15
14
  if version is not None and version.lower() == DF_V1:
16
15
  logging.warning(
17
16
  "The datafeed 1 service will be fully replaced by the datafeed 2 service in the future. "
18
17
  "Please consider migrating over to datafeed 2. For more information on the timeline as well as on "
19
18
  "the benefits of datafeed 2, please reach out to your Technical Account Manager or to our developer "
20
- "documentation https://docs.developers.symphony.com/building-bots-on-symphony/datafeed)")
19
+ "documentation https://docs.developers.symphony.com/building-bots-on-symphony/datafeed)"
20
+ )
21
21
 
22
22
 
23
23
  class BdkDatafeedConfig:
24
- """Class holding datafeed specific configuration.
25
- """
24
+ """Class holding datafeed specific configuration."""
26
25
 
27
26
  def __init__(self, config):
28
27
  """
@@ -33,7 +32,9 @@ class BdkDatafeedConfig:
33
32
  self.id_file_path = ""
34
33
  self.retry = BdkRetryConfig(dict(maxAttempts=BdkRetryConfig.INFINITE_MAX_ATTEMPTS))
35
34
  if config is not None:
36
- self.id_file_path = Path(config.get(DF_ID_FILE_PATH)) if DF_ID_FILE_PATH in config else ""
35
+ self.id_file_path = (
36
+ Path(config.get(DF_ID_FILE_PATH)) if DF_ID_FILE_PATH in config else ""
37
+ )
37
38
  log_dfv1_deprecation(config.get(VERSION))
38
39
  self.version = config.get(VERSION)
39
40
  if "retry" in config:
@@ -6,8 +6,7 @@ RETRY = "retry"
6
6
 
7
7
 
8
8
  class BdkDatahoseConfig:
9
- """Class holding datahose specific configuration.
10
- """
9
+ """Class holding datahose specific configuration."""
11
10
 
12
11
  def __init__(self, config):
13
12
  """
@@ -4,6 +4,7 @@ from datetime import timedelta
4
4
 
5
5
  class BdkRetryConfig:
6
6
  """Class containing the retry configuration"""
7
+
7
8
  INFINITE_MAX_ATTEMPTS = -1
8
9
  DEFAULT_MAX_ATTEMPTS = 10
9
10
  DEFAULT_INITIAL_INTERVAL = 500
@@ -17,9 +18,12 @@ class BdkRetryConfig:
17
18
  self.max_attempts = config.get("maxAttempts", self.DEFAULT_MAX_ATTEMPTS)
18
19
  if self.max_attempts < 0:
19
20
  self.max_attempts = sys.maxsize
20
- self.initial_interval = timedelta(milliseconds=config.get("initialIntervalMillis",
21
- self.DEFAULT_INITIAL_INTERVAL))
21
+ self.initial_interval = timedelta(
22
+ milliseconds=config.get("initialIntervalMillis", self.DEFAULT_INITIAL_INTERVAL)
23
+ )
22
24
  self.multiplier = config.get("multiplier", self.DEFAULT_MULTIPLIER)
23
25
  if self.multiplier < 1:
24
26
  self.multiplier = self.DEFAULT_MULTIPLIER
25
- self.max_interval = timedelta(milliseconds=config.get("maxIntervalMillis", self.DEFAULT_MAX_INTERVAL))
27
+ self.max_interval = timedelta(
28
+ milliseconds=config.get("maxIntervalMillis", self.DEFAULT_MAX_INTERVAL)
29
+ )
@@ -1,6 +1,6 @@
1
1
  class BdkRsaKeyConfig:
2
- """Class containing the bot's RSA Key configuration
3
- """
2
+ """Class containing the bot's RSA Key configuration"""
3
+
4
4
  def __init__(self, path=None, content=""):
5
5
  self._path = path
6
6
  self._content = content
@@ -33,7 +33,7 @@ class BdkRsaKeyConfig:
33
33
  self._content = None
34
34
 
35
35
  def is_configured(self) -> bool:
36
- """"Check if the RSA authentication is configured or not
36
+ """ "Check if the RSA authentication is configured or not
37
37
 
38
38
  :return: true if the RSA authentication is configured
39
39
  """
@@ -53,8 +53,7 @@ class BdkRsaKeyConfig:
53
53
 
54
54
  :return: private key content as string.
55
55
  """
56
- return self._load_key_from_path() \
57
- if self._path is not None else self._content
56
+ return self._load_key_from_path() if self._path is not None else self._content
58
57
 
59
58
  def _load_key_from_path(self):
60
59
  with open(self._path, "r") as file:
@@ -1,9 +1,12 @@
1
1
  class BdkServerConfig:
2
2
  """Base class for server and client configurations"""
3
+
3
4
  DEFAULT_SCHEME: str = "https"
4
5
  DEFAULT_HTTPS_PORT: int = 443
5
6
 
6
- def __init__(self, scheme=None, port=None, context="", host=None, proxy=None, default_headers=None):
7
+ def __init__(
8
+ self, scheme=None, port=None, context="", host=None, proxy=None, default_headers=None
9
+ ):
7
10
  self.scheme = scheme if scheme is not None else self.DEFAULT_SCHEME
8
11
  self.port = port if port is not None else self.DEFAULT_HTTPS_PORT
9
12
  self.context = context
@@ -17,7 +20,9 @@ class BdkServerConfig:
17
20
  :return: scheme://host:port + formatted_context
18
21
  :rtype: str
19
22
  """
20
- return f"{self.scheme}://{self.host}{self.get_port_as_string()}{self.get_formatted_context()}"
23
+ return (
24
+ f"{self.scheme}://{self.host}{self.get_port_as_string()}{self.get_formatted_context()}"
25
+ )
21
26
 
22
27
  def get_formatted_context(self) -> str:
23
28
  """Formats the context field
@@ -1,5 +1,5 @@
1
- """Module for managing extensions.
2
- """
1
+ """Module for managing extensions."""
2
+
3
3
  import logging
4
4
  from abc import ABC, abstractmethod
5
5
  from typing import Union
@@ -12,8 +12,8 @@ logger = logging.getLogger(__name__)
12
12
 
13
13
 
14
14
  class BdkConfigAware(ABC):
15
- """Interface that extensions need to implement to have the config injected
16
- """
15
+ """Interface that extensions need to implement to have the config injected"""
16
+
17
17
  @abstractmethod
18
18
  def set_config(self, bdk_config: BdkConfig):
19
19
  """Method that is called by the :class:`ExtensionService` to inject the BDK configuration.
@@ -24,8 +24,8 @@ class BdkConfigAware(ABC):
24
24
 
25
25
 
26
26
  class BdkAuthenticationAware(ABC):
27
- """Interface that extensions need to implement to have the bot session injected
28
- """
27
+ """Interface that extensions need to implement to have the bot session injected"""
28
+
29
29
  @abstractmethod
30
30
  def set_bot_session(self, auth_session: AuthSession):
31
31
  """Method that is called by the :class:`ExtensionService` to inject the BDK auth session.
@@ -36,8 +36,8 @@ class BdkAuthenticationAware(ABC):
36
36
 
37
37
 
38
38
  class BdkApiClientFactoryAware(ABC):
39
- """Interface that extensions need to implement to have the api client factory injected
40
- """
39
+ """Interface that extensions need to implement to have the api client factory injected"""
40
+
41
41
  @abstractmethod
42
42
  def set_api_client_factory(self, api_client_factory: ApiClientFactory):
43
43
  """Method that is called by the :class:`ExtensionService` to inject the BDK api client factory.
@@ -48,8 +48,8 @@ class BdkApiClientFactoryAware(ABC):
48
48
 
49
49
 
50
50
  class BdkExtensionServiceProvider(ABC):
51
- """Interface that extensions need to implement to expose a service
52
- """
51
+ """Interface that extensions need to implement to expose a service"""
52
+
53
53
  @abstractmethod
54
54
  def get_service(self):
55
55
  """Method that is called by the :func:`~ExtensionService.service`
@@ -59,8 +59,8 @@ class BdkExtensionServiceProvider(ABC):
59
59
 
60
60
 
61
61
  class ExtensionService:
62
- """Service class for managing extensions
63
- """
62
+ """Service class for managing extensions"""
63
+
64
64
  def __init__(self, api_client_factory, bot_session, config):
65
65
  self._api_client_factory = api_client_factory
66
66
  self._bot_session = bot_session
@@ -102,7 +102,9 @@ class ExtensionService:
102
102
  try:
103
103
  return extension.get_service()
104
104
  except AttributeError:
105
- raise ValueError(f"Extension {str(extension_type)} does not implement the get_service method")
105
+ raise ValueError(
106
+ f"Extension {str(extension_type)} does not implement the get_service method"
107
+ )
106
108
 
107
109
  def _inject_api_client_factory(self, extension):
108
110
  try:
@@ -1,8 +1,8 @@
1
1
  import logging
2
- from typing import Callable
3
2
  from functools import wraps
3
+ from typing import Callable
4
4
 
5
- from tenacity import stop_after_attempt, wait_exponential, before_sleep_log
5
+ from tenacity import before_sleep_log, stop_after_attempt, wait_exponential
6
6
 
7
7
  from symphony.bdk.core.config.model.bdk_retry_config import BdkRetryConfig
8
8
  from symphony.bdk.core.retry.strategy import refresh_session_if_unauthorized
@@ -31,17 +31,21 @@ def retry(*dargs, **dkw):
31
31
  arguments for the AsyncRetrying object.
32
32
  """
33
33
  default_kwargs = {}
34
- retry_config: BdkRetryConfig = getattr(self, '_retry_config')
34
+ retry_config: BdkRetryConfig = getattr(self, "_retry_config")
35
35
  logger = logging.getLogger(self.__module__)
36
36
  _before_sleep = before_sleep_log(logger, logging.INFO)
37
37
  default_kwargs.update(dict(before_sleep=_before_sleep))
38
38
  if retry_config is not None:
39
- config_kwargs = dict(retry=retry_function,
40
- wait=wait_exponential(multiplier=retry_config.multiplier,
41
- min=retry_config.initial_interval.total_seconds(),
42
- max=retry_config.max_interval.total_seconds()),
43
- stop=stop_after_attempt(retry_config.max_attempts),
44
- reraise=True)
39
+ config_kwargs = dict(
40
+ retry=retry_function,
41
+ wait=wait_exponential(
42
+ multiplier=retry_config.multiplier,
43
+ min=retry_config.initial_interval.total_seconds(),
44
+ max=retry_config.max_interval.total_seconds(),
45
+ ),
46
+ stop=stop_after_attempt(retry_config.max_attempts),
47
+ reraise=True,
48
+ )
45
49
  default_kwargs.update(config_kwargs)
46
50
  # update default arguments by the ones passed as parameters
47
51
  default_kwargs.update(**dkw)
@@ -7,14 +7,16 @@ except ImportError:
7
7
 
8
8
  import sys
9
9
 
10
-
11
10
  import six
12
-
13
- from tenacity import AttemptManager, RetryAction, TryAgain
14
- from tenacity import BaseRetrying
15
- from tenacity import DoAttempt
16
- from tenacity import DoSleep
17
- from tenacity import RetryCallState
11
+ from tenacity import (
12
+ AttemptManager,
13
+ BaseRetrying,
14
+ DoAttempt,
15
+ DoSleep,
16
+ RetryAction,
17
+ RetryCallState,
18
+ TryAgain,
19
+ )
18
20
 
19
21
 
20
22
  class AsyncRetrying(BaseRetrying):
@@ -23,6 +25,7 @@ class AsyncRetrying(BaseRetrying):
23
25
 
24
26
  There is an open PR for this change on the tenacity repository: https://github.com/jd/tenacity/pull/289
25
27
  """
28
+
26
29
  def __init__(self, sleep=asyncio.sleep, **kwargs):
27
30
  super().__init__(**kwargs)
28
31
  self.sleep = sleep
@@ -1,5 +1,6 @@
1
- from aiohttp import ClientConnectionError
2
1
  from asyncio import TimeoutError
2
+
3
+ from aiohttp import ClientConnectionError
3
4
  from tenacity import RetryCallState
4
5
 
5
6
  from symphony.bdk.core.auth.exception import AuthUnauthorizedError
@@ -111,7 +112,9 @@ async def read_datafeed_retry(retry_state: RetryCallState):
111
112
  exception = retry_state.outcome.exception()
112
113
  if is_network_or_minor_error_or_client(exception):
113
114
  if is_client_error(exception):
114
- datafeed_service = retry_state.args[0] # datafeed_service is an AbstractDataFeedLoop instance
115
+ datafeed_service = retry_state.args[
116
+ 0
117
+ ] # datafeed_service is an AbstractDataFeedLoop instance
115
118
  await datafeed_service.recreate_datafeed()
116
119
  elif is_unauthorized(exception):
117
120
  service_auth_session = retry_state.args[0]._auth_session
@@ -1,2 +1 @@
1
- """Package containing modules and packages related to services (message, stream, user, etc.)
2
- """
1
+ """Package containing modules and packages related to services (message, stream, user, etc.)"""
@@ -26,8 +26,13 @@ class ApplicationService:
26
26
  * Update user applications
27
27
  """
28
28
 
29
- def __init__(self, application_api: ApplicationApi, app_entitlement_api: AppEntitlementApi,
30
- auth_session: AuthSession, retry_config: BdkRetryConfig):
29
+ def __init__(
30
+ self,
31
+ application_api: ApplicationApi,
32
+ app_entitlement_api: AppEntitlementApi,
33
+ auth_session: AuthSession,
34
+ retry_config: BdkRetryConfig,
35
+ ):
31
36
  self._application_api = application_api
32
37
  self._app_entitlement_api = app_entitlement_api
33
38
  self._auth_session = auth_session
@@ -50,13 +55,15 @@ class ApplicationService:
50
55
 
51
56
  """
52
57
  params = {
53
- 'application_detail': application_detail,
54
- 'session_token': await self._auth_session.session_token
58
+ "application_detail": application_detail,
59
+ "session_token": await self._auth_session.session_token,
55
60
  }
56
61
  return await self._application_api.v1_admin_app_create_post(**params)
57
62
 
58
63
  @retry
59
- async def update_application(self, app_id: str, application_detail: ApplicationDetail) -> ApplicationDetail:
64
+ async def update_application(
65
+ self, app_id: str, application_detail: ApplicationDetail
66
+ ) -> ApplicationDetail:
60
67
  """
61
68
  Update an existing application.
62
69
 
@@ -73,9 +80,9 @@ class ApplicationService:
73
80
 
74
81
  """
75
82
  params = {
76
- 'id': app_id,
77
- 'application_detail': application_detail,
78
- 'session_token': await self._auth_session.session_token
83
+ "id": app_id,
84
+ "application_detail": application_detail,
85
+ "session_token": await self._auth_session.session_token,
79
86
  }
80
87
  return await self._application_api.v1_admin_app_id_update_post(**params)
81
88
 
@@ -89,10 +96,7 @@ class ApplicationService:
89
96
  :param app_id: Id of the application needs to be deleted.
90
97
 
91
98
  """
92
- params = {
93
- 'id': app_id,
94
- 'session_token': await self._auth_session.session_token
95
- }
99
+ params = {"id": app_id, "session_token": await self._auth_session.session_token}
96
100
  await self._application_api.v1_admin_app_id_delete_post(**params)
97
101
 
98
102
  @retry
@@ -107,10 +111,7 @@ class ApplicationService:
107
111
  :return: The detail of the lookup application.
108
112
 
109
113
  """
110
- params = {
111
- 'id': app_id,
112
- 'session_token': await self._auth_session.session_token
113
- }
114
+ params = {"id": app_id, "session_token": await self._auth_session.session_token}
114
115
  return await self._application_api.v1_admin_app_id_get_get(**params)
115
116
 
116
117
  @retry
@@ -123,14 +124,16 @@ class ApplicationService:
123
124
  :return: The list of application entitlements.
124
125
 
125
126
  """
126
- params = {
127
- 'session_token': await self._auth_session.session_token
128
- }
129
- pod_app_entitlement_list = await self._app_entitlement_api.v1_admin_app_entitlement_list_get(**params)
127
+ params = {"session_token": await self._auth_session.session_token}
128
+ pod_app_entitlement_list = (
129
+ await self._app_entitlement_api.v1_admin_app_entitlement_list_get(**params)
130
+ )
130
131
  return pod_app_entitlement_list.value
131
132
 
132
133
  @retry
133
- async def update_application_entitlements(self, entitlements: [PodAppEntitlement]) -> [PodAppEntitlement]:
134
+ async def update_application_entitlements(
135
+ self, entitlements: [PodAppEntitlement]
136
+ ) -> [PodAppEntitlement]:
134
137
  """
135
138
  Update the list of application entitlements for the company.
136
139
 
@@ -142,10 +145,12 @@ class ApplicationService:
142
145
 
143
146
  """
144
147
  params = {
145
- 'payload': PodAppEntitlementList(value=entitlements),
146
- 'session_token': await self._auth_session.session_token
148
+ "payload": PodAppEntitlementList(value=entitlements),
149
+ "session_token": await self._auth_session.session_token,
147
150
  }
148
- pod_app_entitlement_list = await self._app_entitlement_api.v1_admin_app_entitlement_list_post(**params)
151
+ pod_app_entitlement_list = (
152
+ await self._app_entitlement_api.v1_admin_app_entitlement_list_post(**params)
153
+ )
149
154
  return pod_app_entitlement_list.value
150
155
 
151
156
  @retry
@@ -160,15 +165,16 @@ class ApplicationService:
160
165
  :return: The list of Symphony application entitlements for this user.
161
166
 
162
167
  """
163
- params = {
164
- 'uid': user_id,
165
- 'session_token': await self._auth_session.session_token
166
- }
167
- user_app_entitlement_list = await self._app_entitlement_api.v1_admin_user_uid_app_entitlement_list_get(**params)
168
+ params = {"uid": user_id, "session_token": await self._auth_session.session_token}
169
+ user_app_entitlement_list = (
170
+ await self._app_entitlement_api.v1_admin_user_uid_app_entitlement_list_get(**params)
171
+ )
168
172
  return user_app_entitlement_list.value
169
173
 
170
174
  @retry
171
- async def update_user_applications(self, user_id: int, user_app_entitlements: [UserAppEntitlement]):
175
+ async def update_user_applications(
176
+ self, user_id: int, user_app_entitlements: [UserAppEntitlement]
177
+ ):
172
178
  """
173
179
  Update the application entitlements for a particular user.
174
180
 
@@ -181,16 +187,19 @@ class ApplicationService:
181
187
 
182
188
  """
183
189
  params = {
184
- 'uid': user_id,
185
- 'payload': UserAppEntitlementList(value=user_app_entitlements),
186
- 'session_token': await self._auth_session.session_token
190
+ "uid": user_id,
191
+ "payload": UserAppEntitlementList(value=user_app_entitlements),
192
+ "session_token": await self._auth_session.session_token,
187
193
  }
188
- user_app_entitlement_list \
189
- = await self._app_entitlement_api.v1_admin_user_uid_app_entitlement_list_post(**params)
194
+ user_app_entitlement_list = (
195
+ await self._app_entitlement_api.v1_admin_user_uid_app_entitlement_list_post(**params)
196
+ )
190
197
  return user_app_entitlement_list.value
191
198
 
192
199
  @retry
193
- async def patch_user_applications(self, user_id: int, user_app_entitlements: [UserAppEntitlementPatch]):
200
+ async def patch_user_applications(
201
+ self, user_id: int, user_app_entitlements: [UserAppEntitlementPatch]
202
+ ):
194
203
  """
195
204
  Updates particular app entitlements for a particular user. Supports partial update.
196
205
 
@@ -203,10 +212,11 @@ class ApplicationService:
203
212
 
204
213
  """
205
214
  params = {
206
- 'uid': user_id,
207
- 'payload': UserAppEntitlementsPatchList(value=user_app_entitlements),
208
- 'session_token': await self._auth_session.session_token
215
+ "uid": user_id,
216
+ "payload": UserAppEntitlementsPatchList(value=user_app_entitlements),
217
+ "session_token": await self._auth_session.session_token,
209
218
  }
210
- user_app_entitlements_list \
211
- = await self._app_entitlement_api.v1_admin_user_uid_app_entitlement_list_patch(**params)
219
+ user_app_entitlements_list = (
220
+ await self._app_entitlement_api.v1_admin_user_uid_app_entitlement_list_patch(**params)
221
+ )
212
222
  return user_app_entitlements_list.value
@@ -19,7 +19,9 @@ class OboConnectionService:
19
19
  * Remove a connection with a user
20
20
  """
21
21
 
22
- def __init__(self, connection_api: ConnectionApi, auth_session: AuthSession, retry_config: BdkRetryConfig):
22
+ def __init__(
23
+ self, connection_api: ConnectionApi, auth_session: AuthSession, retry_config: BdkRetryConfig
24
+ ):
23
25
  self._connection_api = connection_api
24
26
  self._auth_session = auth_session
25
27
  self._retry_config = retry_config
@@ -35,17 +37,12 @@ class OboConnectionService:
35
37
  :return: Connection status with the specified user.
36
38
 
37
39
  """
38
- params = {
39
- 'user_id': str(user_id),
40
- 'session_token': await self._auth_session.session_token
41
- }
40
+ params = {"user_id": str(user_id), "session_token": await self._auth_session.session_token}
42
41
  return await self._connection_api.v1_connection_user_user_id_info_get(**params)
43
42
 
44
43
  @retry
45
44
  async def list_connections(
46
- self,
47
- status: ConnectionStatus = ConnectionStatus.ALL,
48
- user_ids: [int] = None
45
+ self, status: ConnectionStatus = ConnectionStatus.ALL, user_ids: [int] = None
49
46
  ) -> [UserConnection]:
50
47
  """
51
48
  List all connection statuses of the requesting user with external or specified users.
@@ -62,12 +59,9 @@ class OboConnectionService:
62
59
  :return: List of connection statuses with the specified users and status.
63
60
 
64
61
  """
65
- params = {
66
- 'status': status.value,
67
- 'session_token': await self._auth_session.session_token
68
- }
62
+ params = {"status": status.value, "session_token": await self._auth_session.session_token}
69
63
  if user_ids is not None:
70
- params['user_ids'] = ','.join(map(str, user_ids))
64
+ params["user_ids"] = ",".join(map(str, user_ids))
71
65
 
72
66
  user_connection_list = await self._connection_api.v1_connection_list_get(**params)
73
67
  return user_connection_list.value
@@ -85,8 +79,8 @@ class OboConnectionService:
85
79
  """
86
80
  user_connection_request = UserConnectionRequest(user_id=user_id)
87
81
  params = {
88
- 'connection_request': user_connection_request,
89
- 'session_token': await self._auth_session.session_token
82
+ "connection_request": user_connection_request,
83
+ "session_token": await self._auth_session.session_token,
90
84
  }
91
85
  return await self._connection_api.v1_connection_create_post(**params)
92
86
 
@@ -103,8 +97,8 @@ class OboConnectionService:
103
97
  """
104
98
  user_connection_request = UserConnectionRequest(user_id=user_id)
105
99
  params = {
106
- 'connection_request': user_connection_request,
107
- 'session_token': await self._auth_session.session_token
100
+ "connection_request": user_connection_request,
101
+ "session_token": await self._auth_session.session_token,
108
102
  }
109
103
  return await self._connection_api.v1_connection_accept_post(**params)
110
104
 
@@ -121,8 +115,8 @@ class OboConnectionService:
121
115
  """
122
116
  user_connection_request = UserConnectionRequest(user_id=user_id)
123
117
  params = {
124
- 'connection_request': user_connection_request,
125
- 'session_token': await self._auth_session.session_token
118
+ "connection_request": user_connection_request,
119
+ "session_token": await self._auth_session.session_token,
126
120
  }
127
121
  return await self._connection_api.v1_connection_reject_post(**params)
128
122
 
@@ -135,10 +129,7 @@ class OboConnectionService:
135
129
  :param user_id: The id of the user with whom we want to remove the connection.
136
130
 
137
131
  """
138
- params = {
139
- 'uid': user_id,
140
- 'session_token': await self._auth_session.session_token
141
- }
132
+ params = {"uid": user_id, "session_token": await self._auth_session.session_token}
142
133
  await self._connection_api.v1_connection_user_uid_remove_post(**params)
143
134
 
144
135
 
@@ -5,6 +5,7 @@ class ConnectionStatus(enum.Enum):
5
5
  """The list of all possible values for the request listing connection status.
6
6
  See: `List Connections <https://developers.symphony.com/restapi/reference/list-connections>`_
7
7
  """
8
+
8
9
  ALL = "ALL"
9
10
  PENDING_INCOMING = "PENDING_INCOMING"
10
11
  PENDING_OUTGOING = "PENDING_OUTGOING"
@@ -1,6 +1,6 @@
1
1
  import logging
2
2
  import time
3
- from abc import abstractmethod, ABC
3
+ from abc import ABC, abstractmethod
4
4
 
5
5
  from symphony.bdk.core.auth.auth_session import AuthSession
6
6
  from symphony.bdk.core.config.model.bdk_config import BdkConfig
@@ -15,11 +15,15 @@ logger = logging.getLogger(__name__)
15
15
 
16
16
 
17
17
  class AbstractAckIdEventLoop(AbstractDatafeedLoop, ABC):
18
- """Base class for implementing datafeed types that relies on an ackId.
19
- """
18
+ """Base class for implementing datafeed types that relies on an ackId."""
20
19
 
21
- def __init__(self, datafeed_api: DatafeedApi, session_service: SessionService, auth_session: AuthSession,
22
- config: BdkConfig):
20
+ def __init__(
21
+ self,
22
+ datafeed_api: DatafeedApi,
23
+ session_service: SessionService,
24
+ auth_session: AuthSession,
25
+ config: BdkConfig,
26
+ ):
23
27
  """
24
28
 
25
29
  :param datafeed_api: DatafeedApi to request the service
@@ -45,10 +49,12 @@ class AbstractAckIdEventLoop(AbstractDatafeedLoop, ABC):
45
49
  elapsed = time.time() - start
46
50
 
47
51
  if elapsed > EVENT_PROCESSING_MAX_DURATION_SECONDS:
48
- logging.warning("Events processing took longer than %s seconds, "
49
- "this might lead to events being re-queued in datafeed and re-dispatched. "
50
- "You might want to consider processing the event in a separated asyncio task if needed.",
51
- EVENT_PROCESSING_MAX_DURATION_SECONDS)
52
+ logging.warning(
53
+ "Events processing took longer than %s seconds, "
54
+ "this might lead to events being re-queued in datafeed and re-dispatched. "
55
+ "You might want to consider processing the event in a separated asyncio task if needed.",
56
+ EVENT_PROCESSING_MAX_DURATION_SECONDS,
57
+ )
52
58
 
53
59
  return await self._are_tasks_successful(done_tasks)
54
60
 
@@ -58,13 +64,17 @@ class AbstractAckIdEventLoop(AbstractDatafeedLoop, ABC):
58
64
  exception = task.exception()
59
65
  if exception:
60
66
  if isinstance(exception, EventError):
61
- logger.warning("Failed to process events inside %s, "
62
- "will not update ack id, events will be re-queued",
63
- task.get_name(),
64
- exc_info=exception)
67
+ logger.warning(
68
+ "Failed to process events inside %s, "
69
+ "will not update ack id, events will be re-queued",
70
+ task.get_name(),
71
+ exc_info=exception,
72
+ )
65
73
  success = False
66
74
  else:
67
- logging.debug("Exception occurred inside %s", task.get_name(), exc_info=exception)
75
+ logging.debug(
76
+ "Exception occurred inside %s", task.get_name(), exc_info=exception
77
+ )
68
78
  return success
69
79
 
70
80
  @abstractmethod