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.
- symphony/bdk/core/__init__.py +1 -0
- symphony/bdk/core/activity/__init__.py +1 -2
- symphony/bdk/core/activity/api.py +4 -4
- symphony/bdk/core/activity/command.py +17 -9
- symphony/bdk/core/activity/exception.py +2 -4
- symphony/bdk/core/activity/help_command.py +3 -2
- symphony/bdk/core/activity/parsing/arguments.py +1 -1
- symphony/bdk/core/activity/parsing/command_token.py +5 -4
- symphony/bdk/core/activity/parsing/input_tokenizer.py +13 -5
- symphony/bdk/core/activity/parsing/match_result.py +5 -3
- symphony/bdk/core/activity/parsing/message_entities.py +7 -6
- symphony/bdk/core/activity/parsing/slash_command_pattern.py +22 -7
- symphony/bdk/core/activity/registry.py +17 -7
- symphony/bdk/core/auth/__init__.py +1 -2
- symphony/bdk/core/auth/auth_session.py +33 -14
- symphony/bdk/core/auth/authenticator_factory.py +41 -21
- symphony/bdk/core/auth/bot_authenticator.py +33 -21
- symphony/bdk/core/auth/exception.py +3 -6
- symphony/bdk/core/auth/ext_app_authenticator.py +40 -30
- symphony/bdk/core/auth/jwt_helper.py +36 -15
- symphony/bdk/core/auth/obo_authenticator.py +27 -18
- symphony/bdk/core/auth/tokens_repository.py +5 -6
- symphony/bdk/core/client/__init__.py +2 -2
- symphony/bdk/core/client/api_client_factory.py +40 -22
- symphony/bdk/core/client/trace_id.py +3 -4
- symphony/bdk/core/config/__init__.py +1 -2
- symphony/bdk/core/config/exception.py +2 -4
- symphony/bdk/core/config/loader.py +2 -2
- symphony/bdk/core/config/model/bdk_app_config.py +5 -3
- symphony/bdk/core/config/model/bdk_authentication_config.py +13 -7
- symphony/bdk/core/config/model/bdk_bot_config.py +6 -3
- symphony/bdk/core/config/model/bdk_client_config.py +1 -1
- symphony/bdk/core/config/model/bdk_config.py +12 -7
- symphony/bdk/core/config/model/bdk_datafeed_config.py +7 -6
- symphony/bdk/core/config/model/bdk_datahose_config.py +1 -2
- symphony/bdk/core/config/model/bdk_retry_config.py +7 -3
- symphony/bdk/core/config/model/bdk_rsa_key_config.py +4 -5
- symphony/bdk/core/config/model/bdk_server_config.py +7 -2
- symphony/bdk/core/extension.py +15 -13
- symphony/bdk/core/retry/__init__.py +13 -9
- symphony/bdk/core/retry/_asyncio.py +10 -7
- symphony/bdk/core/retry/strategy.py +5 -2
- symphony/bdk/core/service/__init__.py +1 -2
- symphony/bdk/core/service/application/application_service.py +51 -41
- symphony/bdk/core/service/connection/connection_service.py +14 -23
- symphony/bdk/core/service/connection/model/connection_status.py +1 -0
- symphony/bdk/core/service/datafeed/abstract_ackId_event_loop.py +24 -14
- symphony/bdk/core/service/datafeed/abstract_datafeed_loop.py +16 -7
- symphony/bdk/core/service/datafeed/abstract_datahose_loop.py +2 -2
- symphony/bdk/core/service/datafeed/datafeed_loop_v1.py +18 -10
- symphony/bdk/core/service/datafeed/datafeed_loop_v2.py +31 -21
- symphony/bdk/core/service/datafeed/datahose_loop.py +22 -11
- symphony/bdk/core/service/datafeed/on_disk_datafeed_id_repository.py +10 -4
- symphony/bdk/core/service/datafeed/real_time_event_listener.py +32 -18
- symphony/bdk/core/service/exception.py +3 -6
- symphony/bdk/core/service/health/health_service.py +5 -4
- symphony/bdk/core/service/message/message_parser.py +10 -8
- symphony/bdk/core/service/message/message_service.py +196 -161
- symphony/bdk/core/service/message/messageml_util.py +6 -6
- symphony/bdk/core/service/message/model.py +15 -5
- symphony/bdk/core/service/message/multi_attachments_messages_api.py +134 -219
- symphony/bdk/core/service/obo_services.py +5 -4
- symphony/bdk/core/service/pagination.py +9 -6
- symphony/bdk/core/service/presence/presence_service.py +40 -28
- symphony/bdk/core/service/session/session_service.py +7 -13
- symphony/bdk/core/service/signal/signal_service.py +66 -33
- symphony/bdk/core/service/stream/stream_service.py +186 -69
- symphony/bdk/core/service/stream/stream_util.py +1 -0
- symphony/bdk/core/service/user/model/delegate_action_enum.py +1 -0
- symphony/bdk/core/service/user/model/role_id.py +1 -0
- symphony/bdk/core/service/user/user_service.py +225 -313
- symphony/bdk/core/service/user/user_util.py +4 -6
- symphony/bdk/core/service/version/__init__.py +0 -0
- symphony/bdk/core/service/version/agent_version_service.py +62 -0
- symphony/bdk/core/service_factory.py +50 -53
- symphony/bdk/core/symphony_bdk.py +34 -18
- symphony/bdk/ext/group.py +52 -37
- symphony/bdk/gen/agent_api/attachments_api.py +10 -18
- symphony/bdk/gen/agent_api/audit_trail_api.py +8 -12
- symphony/bdk/gen/agent_api/datafeed_api.py +34 -219
- symphony/bdk/gen/agent_api/datahose_api.py +184 -0
- symphony/bdk/gen/agent_api/dlp_policies_and_dictionary_management_api.py +130 -214
- symphony/bdk/gen/agent_api/messages_api.py +99 -119
- symphony/bdk/gen/agent_api/share_api.py +7 -11
- symphony/bdk/gen/agent_api/signals_api.py +1 -1
- symphony/bdk/gen/agent_api/system_api.py +1 -1
- symphony/bdk/gen/agent_api/util_api.py +13 -21
- symphony/bdk/gen/agent_api/violations_api.py +45 -73
- symphony/bdk/gen/agent_model/ack_id.py +1 -1
- symphony/bdk/gen/agent_model/agent_info.py +1 -1
- symphony/bdk/gen/agent_model/attachment_info.py +1 -1
- symphony/bdk/gen/agent_model/base_message.py +1 -1
- symphony/bdk/gen/agent_model/base_signal.py +1 -1
- symphony/bdk/gen/agent_model/channel_subscriber.py +1 -1
- symphony/bdk/gen/agent_model/channel_subscriber_response.py +1 -1
- symphony/bdk/gen/agent_model/channel_subscription_error.py +1 -1
- symphony/bdk/gen/agent_model/channel_subscription_response.py +1 -1
- symphony/bdk/gen/agent_model/connection_request_message.py +1 -1
- symphony/bdk/gen/agent_model/connection_request_message_all_of.py +1 -1
- symphony/bdk/gen/agent_model/datafeed.py +1 -1
- symphony/bdk/gen/agent_model/error.py +1 -1
- symphony/bdk/gen/agent_model/import_response.py +1 -1
- symphony/bdk/gen/agent_model/import_response_list.py +1 -1
- symphony/bdk/gen/agent_model/imported_message.py +1 -1
- symphony/bdk/gen/agent_model/ingestion_error.py +266 -0
- symphony/bdk/gen/agent_model/message.py +1 -1
- symphony/bdk/gen/agent_model/message_all_of.py +1 -1
- symphony/bdk/gen/agent_model/message_import_list.py +1 -1
- symphony/bdk/gen/agent_model/message_list.py +1 -1
- symphony/bdk/gen/agent_model/message_search_query.py +1 -1
- symphony/bdk/gen/agent_model/message_submission.py +1 -1
- symphony/bdk/gen/agent_model/pagination.py +1 -1
- symphony/bdk/gen/agent_model/pagination_cursors.py +1 -1
- symphony/bdk/gen/agent_model/room_created_message.py +1 -1
- symphony/bdk/gen/agent_model/room_created_message_all_of.py +1 -1
- symphony/bdk/gen/agent_model/room_deactivated_message.py +1 -1
- symphony/bdk/gen/agent_model/room_deactivated_message_all_of.py +1 -1
- symphony/bdk/gen/agent_model/room_member_demoted_from_owner_message.py +1 -1
- symphony/bdk/gen/agent_model/room_member_demoted_from_owner_message_all_of.py +1 -1
- symphony/bdk/gen/agent_model/room_member_promoted_to_owner_message.py +1 -1
- symphony/bdk/gen/agent_model/room_member_promoted_to_owner_message_all_of.py +1 -1
- symphony/bdk/gen/agent_model/room_reactivated_message.py +1 -1
- symphony/bdk/gen/agent_model/room_reactivated_message_all_of.py +1 -1
- symphony/bdk/gen/agent_model/room_tag.py +1 -1
- symphony/bdk/gen/agent_model/room_updated_message.py +1 -1
- symphony/bdk/gen/agent_model/room_updated_message_all_of.py +1 -1
- symphony/bdk/gen/agent_model/share_article.py +1 -1
- symphony/bdk/gen/agent_model/share_content.py +1 -1
- symphony/bdk/gen/agent_model/signal.py +1 -1
- symphony/bdk/gen/agent_model/signal_all_of.py +1 -6
- symphony/bdk/gen/agent_model/signal_list.py +1 -1
- symphony/bdk/gen/agent_model/simple_message.py +1 -1
- symphony/bdk/gen/agent_model/success_response.py +1 -1
- symphony/bdk/gen/agent_model/user_joined_room_message.py +1 -1
- symphony/bdk/gen/agent_model/user_joined_room_message_all_of.py +1 -1
- symphony/bdk/gen/agent_model/user_left_room_message.py +1 -1
- symphony/bdk/gen/agent_model/user_left_room_message_all_of.py +1 -1
- symphony/bdk/gen/agent_model/v1_audit_trail_initiator_list.py +1 -1
- symphony/bdk/gen/agent_model/v1_audit_trail_initiator_response.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_content_type.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_dictionary.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_dictionary_content.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_dictionary_metadata.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_dictionary_metadata_collection_response.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_dictionary_metadata_create_request.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_dictionary_metadata_response.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_dictionary_metadata_update_request.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_dictionary_ref.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_matched_policy.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_matched_policy_list.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_outcome.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_policies_collection_response.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_policy.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_policy_request.py +9 -8
- symphony/bdk/gen/agent_model/v1_dlp_policy_response.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_signal.py +6 -1
- symphony/bdk/gen/agent_model/v1_dlp_stream.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_violation.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_violation_message.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_violation_message_response.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_violation_signal.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_violation_signal_response.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_violation_stream.py +1 -1
- symphony/bdk/gen/agent_model/v1_dlp_violation_stream_response.py +1 -1
- symphony/bdk/gen/agent_model/v1_health_check_response.py +1 -1
- symphony/bdk/gen/agent_model/v2_base_message.py +1 -1
- symphony/bdk/gen/agent_model/v2_error.py +1 -1
- symphony/bdk/gen/agent_model/v2_health_check_response.py +1 -1
- symphony/bdk/gen/agent_model/v2_import_response.py +1 -1
- symphony/bdk/gen/agent_model/v2_import_response_list.py +1 -1
- symphony/bdk/gen/agent_model/v2_imported_message.py +1 -1
- symphony/bdk/gen/agent_model/v2_message.py +1 -1
- symphony/bdk/gen/agent_model/v2_message_all_of.py +1 -1
- symphony/bdk/gen/agent_model/v2_message_import_list.py +1 -1
- symphony/bdk/gen/agent_model/v2_message_list.py +1 -1
- symphony/bdk/gen/agent_model/v2_message_submission.py +1 -1
- symphony/bdk/gen/agent_model/v3_dlp_dictionary_meta.py +1 -1
- symphony/bdk/gen/agent_model/v3_dlp_file_classifier_config.py +1 -1
- symphony/bdk/gen/agent_model/v3_dlp_file_extension_config.py +1 -1
- symphony/bdk/gen/agent_model/v3_dlp_file_password_config.py +1 -1
- symphony/bdk/gen/agent_model/v3_dlp_file_size_config.py +1 -1
- symphony/bdk/gen/agent_model/v3_dlp_policies_collection_response.py +1 -1
- symphony/bdk/gen/agent_model/v3_dlp_policy.py +1 -1
- symphony/bdk/gen/agent_model/v3_dlp_policy_applies_to.py +1 -1
- symphony/bdk/gen/agent_model/v3_dlp_policy_request.py +1 -1
- symphony/bdk/gen/agent_model/v3_dlp_policy_response.py +1 -1
- symphony/bdk/gen/agent_model/v3_dlp_rule.py +1 -1
- symphony/bdk/gen/agent_model/v3_dlp_text_match_config.py +1 -1
- symphony/bdk/gen/agent_model/v3_dlp_violation.py +1 -1
- symphony/bdk/gen/agent_model/v3_dlp_violation_message.py +1 -1
- symphony/bdk/gen/agent_model/v3_dlp_violation_message_response.py +1 -1
- symphony/bdk/gen/agent_model/v3_dlp_violation_signal.py +1 -1
- symphony/bdk/gen/agent_model/v3_dlp_violation_signal_response.py +1 -1
- symphony/bdk/gen/agent_model/v3_dlp_violation_stream.py +1 -1
- symphony/bdk/gen/agent_model/v3_dlp_violation_stream_response.py +1 -1
- symphony/bdk/gen/agent_model/v3_health.py +1 -1
- symphony/bdk/gen/agent_model/v3_health_auth_type.py +1 -1
- symphony/bdk/gen/agent_model/v3_health_component.py +1 -1
- symphony/bdk/gen/agent_model/v3_health_status.py +1 -1
- symphony/bdk/gen/agent_model/v4_attachment_info.py +1 -1
- symphony/bdk/gen/agent_model/v4_connection_accepted.py +1 -1
- symphony/bdk/gen/agent_model/v4_connection_requested.py +1 -1
- symphony/bdk/gen/agent_model/v4_event.py +3 -3
- symphony/bdk/gen/agent_model/v4_event_list.py +1 -1
- symphony/bdk/gen/agent_model/v4_generic_system_event.py +279 -0
- symphony/bdk/gen/agent_model/v4_import_response.py +1 -1
- symphony/bdk/gen/agent_model/v4_import_response_list.py +1 -1
- symphony/bdk/gen/agent_model/v4_imported_message.py +1 -1
- symphony/bdk/gen/agent_model/v4_imported_message_attachment.py +1 -1
- symphony/bdk/gen/agent_model/v4_initiator.py +1 -1
- symphony/bdk/gen/agent_model/v4_instant_message_created.py +1 -1
- symphony/bdk/gen/agent_model/v4_key_value_pair.py +1 -1
- symphony/bdk/gen/agent_model/v4_message.py +1 -1
- symphony/bdk/gen/agent_model/v4_message_blast_response.py +1 -1
- symphony/bdk/gen/agent_model/v4_message_import_list.py +1 -1
- symphony/bdk/gen/agent_model/v4_message_list.py +1 -1
- symphony/bdk/gen/agent_model/v4_message_sent.py +1 -1
- symphony/bdk/gen/agent_model/v4_message_suppressed.py +1 -1
- symphony/bdk/gen/agent_model/v4_payload.py +8 -1
- symphony/bdk/gen/agent_model/v4_room_created.py +1 -1
- symphony/bdk/gen/agent_model/v4_room_deactivated.py +1 -1
- symphony/bdk/gen/agent_model/v4_room_member_demoted_from_owner.py +1 -1
- symphony/bdk/gen/agent_model/v4_room_member_promoted_to_owner.py +1 -1
- symphony/bdk/gen/agent_model/v4_room_properties.py +1 -1
- symphony/bdk/gen/agent_model/v4_room_reactivated.py +1 -1
- symphony/bdk/gen/agent_model/v4_room_updated.py +1 -1
- symphony/bdk/gen/agent_model/v4_shared_post.py +1 -1
- symphony/bdk/gen/agent_model/v4_stream.py +6 -1
- symphony/bdk/gen/agent_model/v4_symphony_elements_action.py +1 -1
- symphony/bdk/gen/agent_model/v4_thumbnail_info.py +1 -1
- symphony/bdk/gen/agent_model/v4_user.py +1 -1
- symphony/bdk/gen/agent_model/v4_user_joined_room.py +1 -1
- symphony/bdk/gen/agent_model/v4_user_left_room.py +1 -1
- symphony/bdk/gen/agent_model/v4_user_requested_to_join_room.py +1 -1
- symphony/bdk/gen/agent_model/v5_datafeed.py +3 -3
- symphony/bdk/gen/agent_model/v5_datafeed_create_body.py +1 -1
- symphony/bdk/gen/agent_model/v5_event_list.py +1 -1
- symphony/bdk/gen/agent_model/v5_events_read_body.py +5 -5
- symphony/bdk/gen/pod_api/app_entitlement_api.py +1 -1
- symphony/bdk/gen/pod_api/application_api.py +1 -1
- symphony/bdk/gen/pod_api/connection_api.py +1 -1
- symphony/bdk/gen/pod_api/default_api.py +1 -1
- symphony/bdk/gen/pod_api/disclaimer_api.py +1 -1
- symphony/bdk/gen/pod_api/info_barriers_api.py +1 -1
- symphony/bdk/gen/pod_api/message_api.py +1 -1
- symphony/bdk/gen/pod_api/message_suppression_api.py +1 -1
- symphony/bdk/gen/pod_api/pod_api.py +1 -1
- symphony/bdk/gen/pod_api/presence_api.py +1 -1
- symphony/bdk/gen/pod_api/room_membership_api.py +1 -1
- symphony/bdk/gen/pod_api/security_api.py +1 -1
- symphony/bdk/gen/pod_api/session_api.py +1 -1
- symphony/bdk/gen/pod_api/streams_api.py +162 -1
- symphony/bdk/gen/pod_api/system_api.py +1 -1
- symphony/bdk/gen/pod_api/user_api.py +264 -2
- symphony/bdk/gen/pod_api/users_api.py +421 -1
- symphony/bdk/gen/pod_model/admin_justified_action.py +1 -1
- symphony/bdk/gen/pod_model/admin_justified_user_action.py +1 -1
- symphony/bdk/gen/pod_model/app_authentication_key.py +1 -1
- symphony/bdk/gen/pod_model/app_authentication_keys.py +1 -1
- symphony/bdk/gen/pod_model/app_notification.py +1 -1
- symphony/bdk/gen/pod_model/app_properties.py +1 -1
- symphony/bdk/gen/pod_model/app_property.py +1 -1
- symphony/bdk/gen/pod_model/application_detail.py +1 -1
- symphony/bdk/gen/pod_model/application_info.py +1 -1
- symphony/bdk/gen/pod_model/assignee_candidate.py +1 -1
- symphony/bdk/gen/pod_model/assignee_candidates.py +1 -1
- symphony/bdk/gen/pod_model/attachment_preview.py +1 -1
- symphony/bdk/gen/pod_model/avatar.py +1 -1
- symphony/bdk/gen/pod_model/avatar_list.py +1 -1
- symphony/bdk/gen/pod_model/avatar_update.py +1 -1
- symphony/bdk/gen/pod_model/bulk_action_result.py +1 -1
- symphony/bdk/gen/pod_model/cert_info.py +1 -1
- symphony/bdk/gen/pod_model/cert_info_item.py +1 -1
- symphony/bdk/gen/pod_model/company_cert.py +1 -1
- symphony/bdk/gen/pod_model/company_cert_attributes.py +1 -1
- symphony/bdk/gen/pod_model/company_cert_detail.py +1 -1
- symphony/bdk/gen/pod_model/company_cert_info.py +1 -1
- symphony/bdk/gen/pod_model/company_cert_info_list.py +1 -1
- symphony/bdk/gen/pod_model/company_cert_status.py +1 -1
- symphony/bdk/gen/pod_model/company_cert_type.py +1 -1
- symphony/bdk/gen/pod_model/company_cert_type_list.py +1 -1
- symphony/bdk/gen/pod_model/conversation_specific_stream_attributes.py +1 -1
- symphony/bdk/gen/pod_model/delegate_action.py +1 -1
- symphony/bdk/gen/pod_model/disclaimer.py +1 -1
- symphony/bdk/gen/pod_model/disclaimer_list.py +1 -1
- symphony/bdk/gen/pod_model/download_receipt_count.py +1 -1
- symphony/bdk/gen/pod_model/error.py +1 -1
- symphony/bdk/gen/pod_model/faceted_match_count.py +1 -1
- symphony/bdk/gen/pod_model/feature.py +1 -1
- symphony/bdk/gen/pod_model/feature_list.py +1 -1
- symphony/bdk/gen/pod_model/file_extension.py +6 -1
- symphony/bdk/gen/pod_model/file_extensions_response.py +1 -1
- symphony/bdk/gen/pod_model/followers_list.py +1 -1
- symphony/bdk/gen/pod_model/followers_list_response.py +1 -1
- symphony/bdk/gen/pod_model/following_list_response.py +1 -1
- symphony/bdk/gen/pod_model/group.py +1 -1
- symphony/bdk/gen/pod_model/group_item.py +1 -1
- symphony/bdk/gen/pod_model/group_list.py +1 -1
- symphony/bdk/gen/pod_model/group_role_scope.py +1 -1
- symphony/bdk/gen/pod_model/im_system_info.py +1 -1
- symphony/bdk/gen/pod_model/immutable_room_attributes.py +1 -1
- symphony/bdk/gen/pod_model/integer_list.py +1 -1
- symphony/bdk/gen/pod_model/languages.py +1 -1
- symphony/bdk/gen/pod_model/member_info.py +1 -1
- symphony/bdk/gen/pod_model/membership_data.py +1 -1
- symphony/bdk/gen/pod_model/membership_list.py +1 -1
- symphony/bdk/gen/pod_model/message_detail.py +1 -1
- symphony/bdk/gen/pod_model/message_details.py +1 -1
- symphony/bdk/gen/pod_model/message_download_receipt_count.py +1 -1
- symphony/bdk/gen/pod_model/message_ids.py +1 -1
- symphony/bdk/gen/pod_model/message_metadata_response.py +1 -1
- symphony/bdk/gen/pod_model/message_metadata_response_parent.py +1 -1
- symphony/bdk/gen/pod_model/message_receipt_detail.py +1 -1
- symphony/bdk/gen/pod_model/message_receipt_detail_response.py +1 -1
- symphony/bdk/gen/pod_model/message_status.py +1 -1
- symphony/bdk/gen/pod_model/message_status_user.py +1 -1
- symphony/bdk/gen/pod_model/message_stream.py +1 -1
- symphony/bdk/gen/pod_model/message_suppression_response.py +1 -1
- symphony/bdk/gen/pod_model/message_user.py +1 -1
- symphony/bdk/gen/pod_model/name_value_pair.py +1 -1
- symphony/bdk/gen/pod_model/pagination.py +1 -1
- symphony/bdk/gen/pod_model/pagination_cursors.py +1 -1
- symphony/bdk/gen/pod_model/password.py +1 -1
- symphony/bdk/gen/pod_model/password_reset.py +1 -1
- symphony/bdk/gen/pod_model/pod_app_entitlement.py +1 -1
- symphony/bdk/gen/pod_model/pod_app_entitlement_list.py +1 -1
- symphony/bdk/gen/pod_model/pod_certificate.py +1 -1
- symphony/bdk/gen/pod_model/policy.py +1 -1
- symphony/bdk/gen/pod_model/policy_list.py +1 -1
- symphony/bdk/gen/pod_model/product.py +1 -1
- symphony/bdk/gen/pod_model/product_list.py +1 -1
- symphony/bdk/gen/pod_model/protocol.py +1 -1
- symphony/bdk/gen/pod_model/role.py +1 -1
- symphony/bdk/gen/pod_model/role_detail.py +1 -1
- symphony/bdk/gen/pod_model/role_detail_list.py +1 -1
- symphony/bdk/gen/pod_model/role_list.py +1 -1
- symphony/bdk/gen/pod_model/room_attributes.py +1 -1
- symphony/bdk/gen/pod_model/room_detail.py +1 -1
- symphony/bdk/gen/pod_model/room_search_criteria.py +1 -1
- symphony/bdk/gen/pod_model/room_specific_stream_attributes.py +1 -1
- symphony/bdk/gen/pod_model/room_system_info.py +1 -1
- symphony/bdk/gen/pod_model/room_tag.py +1 -1
- symphony/bdk/gen/pod_model/service_account_manifest.py +264 -0
- symphony/bdk/gen/pod_model/stream.py +1 -1
- symphony/bdk/gen/pod_model/stream_attachment_item.py +1 -1
- symphony/bdk/gen/pod_model/stream_attachment_response.py +1 -1
- symphony/bdk/gen/pod_model/stream_attributes.py +1 -1
- symphony/bdk/gen/pod_model/stream_filter.py +1 -1
- symphony/bdk/gen/pod_model/stream_list.py +1 -1
- symphony/bdk/gen/pod_model/stream_type.py +1 -1
- symphony/bdk/gen/pod_model/string_id.py +1 -1
- symphony/bdk/gen/pod_model/string_list.py +1 -1
- symphony/bdk/gen/pod_model/success_response.py +1 -1
- symphony/bdk/gen/pod_model/user_app_entitlement.py +1 -1
- symphony/bdk/gen/pod_model/user_app_entitlement_list.py +1 -1
- symphony/bdk/gen/pod_model/user_app_entitlement_patch.py +1 -1
- symphony/bdk/gen/pod_model/user_app_entitlement_patch_enum.py +1 -1
- symphony/bdk/gen/pod_model/user_app_entitlements_patch_list.py +1 -1
- symphony/bdk/gen/pod_model/user_attributes.py +1 -1
- symphony/bdk/gen/pod_model/user_compp.py +1 -1
- symphony/bdk/gen/pod_model/user_connection.py +1 -1
- symphony/bdk/gen/pod_model/user_connection_list.py +1 -1
- symphony/bdk/gen/pod_model/user_connection_request.py +1 -1
- symphony/bdk/gen/pod_model/user_data.py +1 -1
- symphony/bdk/gen/pod_model/user_detail.py +1 -1
- symphony/bdk/gen/pod_model/user_detail_list.py +1 -1
- symphony/bdk/gen/pod_model/user_error.py +1 -1
- symphony/bdk/gen/pod_model/user_filter.py +1 -1
- symphony/bdk/gen/pod_model/user_group_assignee.py +1 -1
- symphony/bdk/gen/pod_model/user_group_assignee_response.py +1 -1
- symphony/bdk/gen/pod_model/user_group_assignee_update.py +1 -1
- symphony/bdk/gen/pod_model/user_group_assignment_response.py +1 -1
- symphony/bdk/gen/pod_model/user_group_create.py +1 -1
- symphony/bdk/gen/pod_model/user_group_data.py +1 -1
- symphony/bdk/gen/pod_model/user_group_membership_data.py +1 -1
- symphony/bdk/gen/pod_model/user_group_membership_request.py +1 -1
- symphony/bdk/gen/pod_model/user_group_membership_response.py +1 -1
- symphony/bdk/gen/pod_model/user_group_membership_response_data.py +1 -1
- symphony/bdk/gen/pod_model/user_group_membership_update.py +1 -1
- symphony/bdk/gen/pod_model/user_group_response.py +1 -1
- symphony/bdk/gen/pod_model/user_group_response_list.py +1 -1
- symphony/bdk/gen/pod_model/user_group_update.py +1 -1
- symphony/bdk/gen/pod_model/user_id.py +1 -1
- symphony/bdk/gen/pod_model/user_id_list.py +1 -1
- symphony/bdk/gen/pod_model/user_info.py +1 -1
- symphony/bdk/gen/pod_model/user_name.py +1 -1
- symphony/bdk/gen/pod_model/user_name_list.py +1 -1
- symphony/bdk/gen/pod_model/user_search_filter.py +1 -1
- symphony/bdk/gen/pod_model/user_search_query.py +1 -1
- symphony/bdk/gen/pod_model/user_search_results.py +1 -1
- symphony/bdk/gen/pod_model/user_status.py +1 -1
- symphony/bdk/gen/pod_model/user_suspension.py +1 -1
- symphony/bdk/gen/pod_model/user_system_info.py +1 -1
- symphony/bdk/gen/pod_model/user_v2.py +1 -1
- symphony/bdk/gen/pod_model/v1_im_attributes.py +1 -1
- symphony/bdk/gen/pod_model/v1_im_detail.py +1 -1
- symphony/bdk/gen/pod_model/v1_session.py +301 -0
- symphony/bdk/gen/pod_model/v1_user_sessions.py +259 -0
- symphony/bdk/gen/pod_model/v2_admin_stream_attributes.py +6 -1
- symphony/bdk/gen/pod_model/v2_admin_stream_filter.py +1 -1
- symphony/bdk/gen/pod_model/v2_admin_stream_info.py +1 -1
- symphony/bdk/gen/pod_model/v2_admin_stream_info_list.py +1 -1
- symphony/bdk/gen/pod_model/v2_admin_stream_list.py +1 -1
- symphony/bdk/gen/pod_model/v2_admin_stream_type.py +1 -1
- symphony/bdk/gen/pod_model/v2_conversation_specific_stream_attributes.py +1 -1
- symphony/bdk/gen/pod_model/v2_member_info.py +1 -1
- symphony/bdk/gen/pod_model/v2_member_info_list.py +1 -1
- symphony/bdk/gen/pod_model/v2_member_user_detail.py +1 -1
- symphony/bdk/gen/pod_model/v2_membership_list.py +1 -1
- symphony/bdk/gen/pod_model/v2_presence.py +1 -1
- symphony/bdk/gen/pod_model/v2_presence_all_of.py +1 -1
- symphony/bdk/gen/pod_model/v2_presence_list.py +1 -1
- symphony/bdk/gen/pod_model/v2_presence_status.py +1 -1
- symphony/bdk/gen/pod_model/v2_room_search_criteria.py +1 -1
- symphony/bdk/gen/pod_model/v2_room_search_criteria_all_of.py +1 -1
- symphony/bdk/gen/pod_model/v2_room_specific_stream_attributes.py +1 -1
- symphony/bdk/gen/pod_model/v2_stream_attributes.py +1 -1
- symphony/bdk/gen/pod_model/v2_stream_type.py +1 -1
- symphony/bdk/gen/pod_model/v2_user_attributes.py +1 -1
- symphony/bdk/gen/pod_model/v2_user_create.py +1 -1
- symphony/bdk/gen/pod_model/v2_user_detail.py +1 -1
- symphony/bdk/gen/pod_model/v2_user_detail_list.py +1 -1
- symphony/bdk/gen/pod_model/v2_user_key_request.py +1 -1
- symphony/bdk/gen/pod_model/v2_user_list.py +1 -1
- symphony/bdk/gen/pod_model/v2_user_presence.py +1 -1
- symphony/bdk/gen/pod_model/v2_user_presence_all_of.py +1 -1
- symphony/bdk/gen/pod_model/v3_room_attributes.py +6 -1
- symphony/bdk/gen/pod_model/v3_room_detail.py +1 -1
- symphony/bdk/gen/pod_model/v3_room_search_results.py +1 -1
- {symphony_bdk_python-2.10.dev0.dist-info → symphony_bdk_python-2.11.0.dist-info}/METADATA +19 -5
- symphony_bdk_python-2.11.0.dist-info/RECORD +546 -0
- symphony_bdk_python-2.10.dev0.dist-info/RECORD +0 -538
- {symphony_bdk_python-2.10.dev0.dist-info → symphony_bdk_python-2.11.0.dist-info}/LICENSE +0 -0
- {symphony_bdk_python-2.10.dev0.dist-info → symphony_bdk_python-2.11.0.dist-info}/NOTICE +0 -0
- {symphony_bdk_python-2.10.dev0.dist-info → symphony_bdk_python-2.11.0.dist-info}/WHEEL +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"""This module gathers all base classes related to the datafeed loop and real time events.
|
|
2
|
-
|
|
1
|
+
"""This module gathers all base classes related to the datafeed loop and real time events."""
|
|
2
|
+
|
|
3
3
|
import asyncio
|
|
4
4
|
import logging
|
|
5
5
|
from abc import ABC, abstractmethod
|
|
@@ -21,8 +21,8 @@ event_listener_context = ContextVar("event_listener_context", default="main-task
|
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
class DatafeedVersion(Enum):
|
|
24
|
-
"""Enum of all possible datafeed versions.
|
|
25
|
-
|
|
24
|
+
"""Enum of all possible datafeed versions."""
|
|
25
|
+
|
|
26
26
|
V1 = "v1"
|
|
27
27
|
V2 = "v2"
|
|
28
28
|
|
|
@@ -36,6 +36,7 @@ class RealTimeEvent(Enum):
|
|
|
36
36
|
First element in enum value corresponds to the listener method who should be called when given event is received.
|
|
37
37
|
Second element in enum value corresponds to the field name of event in the received payload.
|
|
38
38
|
"""
|
|
39
|
+
|
|
39
40
|
MESSAGESENT = ("on_message_sent", "message_sent")
|
|
40
41
|
SHAREDPOST = ("on_shared_post", "shared_post")
|
|
41
42
|
INSTANTMESSAGECREATED = ("on_instant_message_created", "instant_message_created")
|
|
@@ -46,7 +47,10 @@ class RealTimeEvent(Enum):
|
|
|
46
47
|
USERREQUESTEDTOJOINROOM = ("on_user_requested_to_join_room", "user_requested_to_join_room")
|
|
47
48
|
USERJOINEDROOM = ("on_user_joined_room", "user_joined_room")
|
|
48
49
|
USERLEFTROOM = ("on_user_left_room", "user_left_room")
|
|
49
|
-
ROOMMEMBERPROMOTEDTOOWNER = (
|
|
50
|
+
ROOMMEMBERPROMOTEDTOOWNER = (
|
|
51
|
+
"on_room_member_promoted_to_owner",
|
|
52
|
+
"room_member_promoted_to_owner",
|
|
53
|
+
)
|
|
50
54
|
ROOMMEMBERDEMOTEDFROMOWNER = ("on_room_demoted_from_owner", "room_member_demoted_from_owner")
|
|
51
55
|
CONNECTIONREQUESTED = ("on_connection_requested", "connection_requested")
|
|
52
56
|
CONNECTIONACCEPTED = ("on_connection_accepted", "connection_accepted")
|
|
@@ -66,8 +70,13 @@ class AbstractDatafeedLoop(ABC):
|
|
|
66
70
|
event by the subscribed listeners.
|
|
67
71
|
"""
|
|
68
72
|
|
|
69
|
-
def __init__(
|
|
70
|
-
|
|
73
|
+
def __init__(
|
|
74
|
+
self,
|
|
75
|
+
datafeed_api: DatafeedApi,
|
|
76
|
+
session_service: SessionService,
|
|
77
|
+
auth_session: AuthSession,
|
|
78
|
+
config: BdkConfig,
|
|
79
|
+
):
|
|
71
80
|
"""
|
|
72
81
|
|
|
73
82
|
:param datafeed_api: DatafeedApi to request the service
|
|
@@ -9,8 +9,8 @@ logger = logging.getLogger(__name__)
|
|
|
9
9
|
class AbstractDatahoseLoop(ABC):
|
|
10
10
|
"""Base class for implementing the datahose services.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
A datahose service can help a bot to get all the received real-time events that are set
|
|
13
|
+
as filters in the configuration.
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
16
|
@abstractmethod
|
|
@@ -4,7 +4,9 @@ from symphony.bdk.core.retry import retry
|
|
|
4
4
|
from symphony.bdk.core.retry.strategy import read_datafeed_retry
|
|
5
5
|
from symphony.bdk.core.service.datafeed.abstract_datafeed_loop import AbstractDatafeedLoop
|
|
6
6
|
from symphony.bdk.core.service.datafeed.exception import EventError
|
|
7
|
-
from symphony.bdk.core.service.datafeed.on_disk_datafeed_id_repository import
|
|
7
|
+
from symphony.bdk.core.service.datafeed.on_disk_datafeed_id_repository import (
|
|
8
|
+
OnDiskDatafeedIdRepository,
|
|
9
|
+
)
|
|
8
10
|
|
|
9
11
|
logger = logging.getLogger(__name__)
|
|
10
12
|
|
|
@@ -32,7 +34,9 @@ class DatafeedLoopV1(AbstractDatafeedLoop):
|
|
|
32
34
|
|
|
33
35
|
def __init__(self, datafeed_api, session_service, auth_session, config, repository=None):
|
|
34
36
|
super().__init__(datafeed_api, session_service, auth_session, config)
|
|
35
|
-
self._datafeed_repository =
|
|
37
|
+
self._datafeed_repository = (
|
|
38
|
+
OnDiskDatafeedIdRepository(config) if repository is None else repository
|
|
39
|
+
)
|
|
36
40
|
self._datafeed_id = None
|
|
37
41
|
|
|
38
42
|
async def start(self):
|
|
@@ -57,8 +61,9 @@ class DatafeedLoopV1(AbstractDatafeedLoop):
|
|
|
57
61
|
async def recreate_datafeed(self):
|
|
58
62
|
session_token = await self._auth_session.session_token
|
|
59
63
|
key_manager_token = await self._auth_session.key_manager_token
|
|
60
|
-
response = await self._datafeed_api.v4_datafeed_create_post(
|
|
61
|
-
|
|
64
|
+
response = await self._datafeed_api.v4_datafeed_create_post(
|
|
65
|
+
session_token=session_token, key_manager_token=key_manager_token
|
|
66
|
+
)
|
|
62
67
|
datafeed_id = response.id
|
|
63
68
|
self._datafeed_repository.write(datafeed_id)
|
|
64
69
|
self._datafeed_id = datafeed_id
|
|
@@ -73,17 +78,20 @@ class DatafeedLoopV1(AbstractDatafeedLoop):
|
|
|
73
78
|
async def _read_datafeed(self):
|
|
74
79
|
session_token = await self._auth_session.session_token
|
|
75
80
|
key_manager_token = await self._auth_session.key_manager_token
|
|
76
|
-
events = await self._datafeed_api.v4_datafeed_id_read_get(
|
|
77
|
-
|
|
78
|
-
|
|
81
|
+
events = await self._datafeed_api.v4_datafeed_id_read_get(
|
|
82
|
+
id=self._datafeed_id, session_token=session_token, key_manager_token=key_manager_token
|
|
83
|
+
)
|
|
79
84
|
return events.value if events is not None and events.value else []
|
|
80
85
|
|
|
81
86
|
async def _log_listener_exception(self, task):
|
|
82
87
|
exception = task.exception()
|
|
83
88
|
if exception:
|
|
84
89
|
if isinstance(exception, EventError):
|
|
85
|
-
logger.warning(
|
|
86
|
-
|
|
87
|
-
|
|
90
|
+
logger.warning(
|
|
91
|
+
"EventError occurred inside %s. "
|
|
92
|
+
"EventError is not supported for DFv1, events will not get re-queued",
|
|
93
|
+
task.get_name(),
|
|
94
|
+
exc_info=exception,
|
|
95
|
+
)
|
|
88
96
|
else:
|
|
89
97
|
logging.debug("Exception occurred inside %s", task.get_name(), exc_info=exception)
|
|
@@ -23,24 +23,29 @@ logger = logging.getLogger(__name__)
|
|
|
23
23
|
class DatafeedLoopV2(AbstractAckIdEventLoop):
|
|
24
24
|
"""A class for implementing the datafeed v2 loop service.
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
This service will be started by calling :func:`~DatafeedLoopV2.start`.
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
On the very first run, the BDK bot will try to retrieve the list of datafeed to which it is listening.
|
|
29
|
+
Since each bot should only listen to just one datafeed, the first datafeed in the list will be used by
|
|
30
|
+
the bot to be listened to. If the retrieved list is empty, the BDK bot will create a new datafeed to listen.
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
The BDK bot will listen to this datafeed to get all the received real-time events.
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
If this datafeed becomes stale or faulty, the BDK bot will create the new one for listening.
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
This service will be stopped by calling :func:`~DatafeedLoopV1.stop`
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
If the datafeed service is stopped during a read datafeed call, it has to wait until the last read finish to be
|
|
39
|
+
really stopped
|
|
40
|
+
"""
|
|
41
41
|
|
|
42
|
-
def __init__(
|
|
43
|
-
|
|
42
|
+
def __init__(
|
|
43
|
+
self,
|
|
44
|
+
datafeed_api: DatafeedApi,
|
|
45
|
+
session_service: SessionService,
|
|
46
|
+
auth_session: AuthSession,
|
|
47
|
+
config: BdkConfig,
|
|
48
|
+
):
|
|
44
49
|
super().__init__(datafeed_api, session_service, auth_session, config)
|
|
45
50
|
self._datafeed_id = None
|
|
46
51
|
|
|
@@ -69,7 +74,7 @@ class DatafeedLoopV2(AbstractAckIdEventLoop):
|
|
|
69
74
|
"session_token": await self._auth_session.session_token,
|
|
70
75
|
"key_manager_token": await self._auth_session.key_manager_token,
|
|
71
76
|
"datafeed_id": self._datafeed_id,
|
|
72
|
-
"ack_id": AckId(ack_id=self._ack_id)
|
|
77
|
+
"ack_id": AckId(ack_id=self._ack_id),
|
|
73
78
|
}
|
|
74
79
|
return await self._datafeed_api.read_datafeed(**params)
|
|
75
80
|
|
|
@@ -84,8 +89,9 @@ class DatafeedLoopV2(AbstractAckIdEventLoop):
|
|
|
84
89
|
async def _retrieve_datafeed(self) -> Optional[V5Datafeed]:
|
|
85
90
|
session_token = await self._auth_session.session_token
|
|
86
91
|
key_manager_token = await self._auth_session.key_manager_token
|
|
87
|
-
datafeeds = await self._datafeed_api.list_datafeed(
|
|
88
|
-
|
|
92
|
+
datafeeds = await self._datafeed_api.list_datafeed(
|
|
93
|
+
session_token=session_token, key_manager_token=key_manager_token
|
|
94
|
+
)
|
|
89
95
|
|
|
90
96
|
datafeeds = list(filter(lambda df: DATAFEED_V2_ID_PATTERN.match(df.id), datafeeds))
|
|
91
97
|
if datafeeds:
|
|
@@ -97,14 +103,18 @@ class DatafeedLoopV2(AbstractAckIdEventLoop):
|
|
|
97
103
|
session_token = await self._auth_session.session_token
|
|
98
104
|
key_manager_token = await self._auth_session.key_manager_token
|
|
99
105
|
|
|
100
|
-
return await self._datafeed_api.create_datafeed(
|
|
101
|
-
|
|
102
|
-
|
|
106
|
+
return await self._datafeed_api.create_datafeed(
|
|
107
|
+
session_token=session_token,
|
|
108
|
+
key_manager_token=key_manager_token,
|
|
109
|
+
body=V5DatafeedCreateBody(),
|
|
110
|
+
)
|
|
103
111
|
|
|
104
112
|
@retry
|
|
105
113
|
async def _delete_datafeed(self) -> None:
|
|
106
114
|
session_token = await self._auth_session.session_token
|
|
107
115
|
key_manager_token = await self._auth_session.key_manager_token
|
|
108
|
-
await self._datafeed_api.delete_datafeed(
|
|
109
|
-
|
|
110
|
-
|
|
116
|
+
await self._datafeed_api.delete_datafeed(
|
|
117
|
+
datafeed_id=self._datafeed_id,
|
|
118
|
+
session_token=session_token,
|
|
119
|
+
key_manager_token=key_manager_token,
|
|
120
|
+
)
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
|
|
3
|
+
from symphony.bdk.core.auth.auth_session import AuthSession
|
|
4
|
+
from symphony.bdk.core.config.model.bdk_config import BdkConfig
|
|
3
5
|
from symphony.bdk.core.retry import retry
|
|
4
6
|
from symphony.bdk.core.retry.strategy import read_datahose_retry
|
|
5
7
|
from symphony.bdk.core.service.datafeed.abstract_ackId_event_loop import AbstractAckIdEventLoop
|
|
6
8
|
from symphony.bdk.core.service.datafeed.abstract_datahose_loop import AbstractDatahoseLoop
|
|
7
|
-
from symphony.bdk.core.auth.auth_session import AuthSession
|
|
8
|
-
from symphony.bdk.core.config.model.bdk_config import BdkConfig
|
|
9
9
|
from symphony.bdk.core.service.session.session_service import SessionService
|
|
10
10
|
from symphony.bdk.gen.agent_api.datafeed_api import DatafeedApi
|
|
11
11
|
from symphony.bdk.gen.agent_model.v5_events_read_body import V5EventsReadBody
|
|
@@ -20,21 +20,30 @@ logger = logging.getLogger(__name__)
|
|
|
20
20
|
class DatahoseLoop(AbstractAckIdEventLoop, AbstractDatahoseLoop):
|
|
21
21
|
"""A class for implementing the datahose loop service.
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
This service will be started by calling :func:`~DatahoseLoop.start`.
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
The BDK bot will listen to this datahose to get all the received real-time events that are set
|
|
26
|
+
as event_types in the configuration.
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
This service will be stopped by calling :func:`~DatahoseLoop.stop`
|
|
29
29
|
"""
|
|
30
30
|
|
|
31
|
-
def __init__(
|
|
32
|
-
|
|
31
|
+
def __init__(
|
|
32
|
+
self,
|
|
33
|
+
datafeed_api: DatafeedApi,
|
|
34
|
+
session_service: SessionService,
|
|
35
|
+
auth_session: AuthSession,
|
|
36
|
+
config: BdkConfig,
|
|
37
|
+
):
|
|
33
38
|
super().__init__(datafeed_api, session_service, auth_session, config)
|
|
34
39
|
if config.datahose is not None:
|
|
35
|
-
not_truncated_tag =
|
|
36
|
-
|
|
40
|
+
not_truncated_tag = (
|
|
41
|
+
config.datahose.tag
|
|
42
|
+
if config.datahose.tag is not None
|
|
43
|
+
else TYPE + "-" + config.bot.username
|
|
44
|
+
if config.bot.username is not None
|
|
37
45
|
else TYPE
|
|
46
|
+
)
|
|
38
47
|
self._tag = not_truncated_tag[:DATAHOSE_TAG_MAX_LENGTH]
|
|
39
48
|
self._retry = config.datahose.retry
|
|
40
49
|
self._event_types = config.datahose.event_types
|
|
@@ -56,7 +65,9 @@ class DatahoseLoop(AbstractAckIdEventLoop, AbstractDatahoseLoop):
|
|
|
56
65
|
params = {
|
|
57
66
|
"session_token": await self._auth_session.session_token,
|
|
58
67
|
"key_manager_token": await self._auth_session.key_manager_token,
|
|
59
|
-
"body": V5EventsReadBody(
|
|
68
|
+
"body": V5EventsReadBody(
|
|
69
|
+
type=TYPE, tag=self._tag, event_types=self._event_types, ack_id=self._ack_id
|
|
70
|
+
),
|
|
60
71
|
}
|
|
61
72
|
|
|
62
73
|
return await self._datafeed_api.read_events(**params)
|
|
@@ -2,6 +2,7 @@ import logging
|
|
|
2
2
|
import os
|
|
3
3
|
from abc import ABC, abstractmethod
|
|
4
4
|
from pathlib import Path
|
|
5
|
+
|
|
5
6
|
from symphony.bdk.core.config.model.bdk_config import BdkConfig
|
|
6
7
|
|
|
7
8
|
logger = logging.getLogger(__name__)
|
|
@@ -30,6 +31,7 @@ class DatafeedIdRepository(ABC):
|
|
|
30
31
|
|
|
31
32
|
class OnDiskDatafeedIdRepository(DatafeedIdRepository):
|
|
32
33
|
"""Implementation of DatafeedIdRepository interface for persisting a datafeed id on disk."""
|
|
34
|
+
|
|
33
35
|
DATAFEED_ID_FILE = "datafeed.id"
|
|
34
36
|
|
|
35
37
|
def __init__(self, config: BdkConfig):
|
|
@@ -42,8 +44,10 @@ class OnDiskDatafeedIdRepository(DatafeedIdRepository):
|
|
|
42
44
|
def read(self) -> str:
|
|
43
45
|
logger.debug("Retrieving datafeed id from file %s", self.datafeed_id_file_path.absolute())
|
|
44
46
|
if not os.path.exists(self.datafeed_id_file_path):
|
|
45
|
-
logger.debug(
|
|
46
|
-
|
|
47
|
+
logger.debug(
|
|
48
|
+
"Could not retrieve datafeed id from file %s: file not found",
|
|
49
|
+
self.datafeed_id_file_path.absolute(),
|
|
50
|
+
)
|
|
47
51
|
return None
|
|
48
52
|
|
|
49
53
|
return self._read_in_file()
|
|
@@ -56,8 +60,10 @@ class OnDiskDatafeedIdRepository(DatafeedIdRepository):
|
|
|
56
60
|
def _read_in_line(self, line):
|
|
57
61
|
index = line.find("@")
|
|
58
62
|
if index == -1:
|
|
59
|
-
logger.debug(
|
|
60
|
-
|
|
63
|
+
logger.debug(
|
|
64
|
+
"Could not retrieve datafeed id from file %s: file without datafeed id information",
|
|
65
|
+
self.datafeed_id_file_path.absolute(),
|
|
66
|
+
)
|
|
61
67
|
return None
|
|
62
68
|
datafeed_id = line[0:index]
|
|
63
69
|
logger.debug("Retrieved datafeed id: %s", datafeed_id)
|
|
@@ -1,21 +1,25 @@
|
|
|
1
|
+
from symphony.bdk.gen.agent_model.v4_connection_accepted import V4ConnectionAccepted
|
|
2
|
+
from symphony.bdk.gen.agent_model.v4_connection_requested import V4ConnectionRequested
|
|
1
3
|
from symphony.bdk.gen.agent_model.v4_event import V4Event
|
|
2
|
-
from symphony.bdk.gen.agent_model.v4_message_sent import V4MessageSent
|
|
3
4
|
from symphony.bdk.gen.agent_model.v4_initiator import V4Initiator
|
|
4
|
-
from symphony.bdk.gen.agent_model.v4_shared_post import V4SharedPost
|
|
5
5
|
from symphony.bdk.gen.agent_model.v4_instant_message_created import V4InstantMessageCreated
|
|
6
|
+
from symphony.bdk.gen.agent_model.v4_message_sent import V4MessageSent
|
|
7
|
+
from symphony.bdk.gen.agent_model.v4_message_suppressed import V4MessageSuppressed
|
|
6
8
|
from symphony.bdk.gen.agent_model.v4_room_created import V4RoomCreated
|
|
7
|
-
from symphony.bdk.gen.agent_model.v4_room_updated import V4RoomUpdated
|
|
8
9
|
from symphony.bdk.gen.agent_model.v4_room_deactivated import V4RoomDeactivated
|
|
10
|
+
from symphony.bdk.gen.agent_model.v4_room_member_demoted_from_owner import (
|
|
11
|
+
V4RoomMemberDemotedFromOwner,
|
|
12
|
+
)
|
|
13
|
+
from symphony.bdk.gen.agent_model.v4_room_member_promoted_to_owner import (
|
|
14
|
+
V4RoomMemberPromotedToOwner,
|
|
15
|
+
)
|
|
9
16
|
from symphony.bdk.gen.agent_model.v4_room_reactivated import V4RoomReactivated
|
|
10
|
-
from symphony.bdk.gen.agent_model.
|
|
17
|
+
from symphony.bdk.gen.agent_model.v4_room_updated import V4RoomUpdated
|
|
18
|
+
from symphony.bdk.gen.agent_model.v4_shared_post import V4SharedPost
|
|
19
|
+
from symphony.bdk.gen.agent_model.v4_symphony_elements_action import V4SymphonyElementsAction
|
|
11
20
|
from symphony.bdk.gen.agent_model.v4_user_joined_room import V4UserJoinedRoom
|
|
12
21
|
from symphony.bdk.gen.agent_model.v4_user_left_room import V4UserLeftRoom
|
|
13
|
-
from symphony.bdk.gen.agent_model.
|
|
14
|
-
from symphony.bdk.gen.agent_model.v4_room_member_demoted_from_owner import V4RoomMemberDemotedFromOwner
|
|
15
|
-
from symphony.bdk.gen.agent_model.v4_connection_requested import V4ConnectionRequested
|
|
16
|
-
from symphony.bdk.gen.agent_model.v4_connection_accepted import V4ConnectionAccepted
|
|
17
|
-
from symphony.bdk.gen.agent_model.v4_message_suppressed import V4MessageSuppressed
|
|
18
|
-
from symphony.bdk.gen.agent_model.v4_symphony_elements_action import V4SymphonyElementsAction
|
|
22
|
+
from symphony.bdk.gen.agent_model.v4_user_requested_to_join_room import V4UserRequestedToJoinRoom
|
|
19
23
|
from symphony.bdk.gen.pod_model.user_v2 import UserV2
|
|
20
24
|
|
|
21
25
|
|
|
@@ -42,21 +46,23 @@ class RealTimeEventListener:
|
|
|
42
46
|
return False
|
|
43
47
|
|
|
44
48
|
async def on_message_sent(self, initiator: V4Initiator, event: V4MessageSent):
|
|
45
|
-
"""
|
|
49
|
+
"""Called when a MESSAGESENT event is received.
|
|
46
50
|
|
|
47
51
|
:param initiator: Event initiator.
|
|
48
52
|
:param event: Message sent payload.
|
|
49
53
|
"""
|
|
50
54
|
|
|
51
55
|
async def on_shared_post(self, initiator: V4Initiator, event: V4SharedPost):
|
|
52
|
-
"""
|
|
56
|
+
"""Called when an INSTANTMESSAGECREATED event is received.
|
|
53
57
|
|
|
54
58
|
:param initiator: Event initiator.
|
|
55
59
|
:param event: Shared post payload.
|
|
56
60
|
"""
|
|
57
61
|
|
|
58
|
-
async def on_instant_message_created(
|
|
59
|
-
|
|
62
|
+
async def on_instant_message_created(
|
|
63
|
+
self, initiator: V4Initiator, event: V4InstantMessageCreated
|
|
64
|
+
):
|
|
65
|
+
"""Called when a ROOMCREATED event is received.
|
|
60
66
|
|
|
61
67
|
:param initiator: Event initiator.
|
|
62
68
|
:param event: Instant Message Created payload.
|
|
@@ -90,7 +96,9 @@ class RealTimeEventListener:
|
|
|
90
96
|
:param event: Room Reactivated payload.
|
|
91
97
|
"""
|
|
92
98
|
|
|
93
|
-
async def on_user_requested_to_join_room(
|
|
99
|
+
async def on_user_requested_to_join_room(
|
|
100
|
+
self, initiator: V4Initiator, event: V4UserRequestedToJoinRoom
|
|
101
|
+
):
|
|
94
102
|
"""
|
|
95
103
|
|
|
96
104
|
:param initiator: Event initiator.
|
|
@@ -111,14 +119,18 @@ class RealTimeEventListener:
|
|
|
111
119
|
:param event: User Left Room payload.
|
|
112
120
|
"""
|
|
113
121
|
|
|
114
|
-
async def on_room_member_promoted_to_owner(
|
|
122
|
+
async def on_room_member_promoted_to_owner(
|
|
123
|
+
self, initiator: V4Initiator, event: V4RoomMemberPromotedToOwner
|
|
124
|
+
):
|
|
115
125
|
"""
|
|
116
126
|
|
|
117
127
|
:param initiator: Event initiator.
|
|
118
128
|
:param event: Room Member Promoted To Owner payload.
|
|
119
129
|
"""
|
|
120
130
|
|
|
121
|
-
async def on_room_demoted_from_owner(
|
|
131
|
+
async def on_room_demoted_from_owner(
|
|
132
|
+
self, initiator: V4Initiator, event: V4RoomMemberDemotedFromOwner
|
|
133
|
+
):
|
|
122
134
|
"""
|
|
123
135
|
|
|
124
136
|
:param initiator: Event initiator.
|
|
@@ -146,7 +158,9 @@ class RealTimeEventListener:
|
|
|
146
158
|
:param event: Message Suppressed payload.
|
|
147
159
|
"""
|
|
148
160
|
|
|
149
|
-
async def on_symphony_elements_action(
|
|
161
|
+
async def on_symphony_elements_action(
|
|
162
|
+
self, initiator: V4Initiator, event: V4SymphonyElementsAction
|
|
163
|
+
):
|
|
150
164
|
"""
|
|
151
165
|
|
|
152
166
|
:param initiator: Event initiator.
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
"""Module containing all service related exception.
|
|
2
|
-
"""
|
|
1
|
+
"""Module containing all service related exception."""
|
|
3
2
|
|
|
4
3
|
|
|
5
4
|
class MessageParserError(Exception):
|
|
6
|
-
"""Raised when the message is not found in the correct format
|
|
7
|
-
"""
|
|
5
|
+
"""Raised when the message is not found in the correct format"""
|
|
8
6
|
|
|
9
7
|
|
|
10
8
|
class MessageCreationError(Exception):
|
|
11
|
-
"""Raised when a :py:class:`~symphony.bdk.core.service.message.model.Message` failed to be created
|
|
12
|
-
"""
|
|
9
|
+
"""Raised when a :py:class:`~symphony.bdk.core.service.message.model.Message` failed to be created"""
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
from symphony.bdk.core.config.model.bdk_retry_config import BdkRetryConfig
|
|
2
|
-
from symphony.bdk.gen.agent_api.system_api import SystemApi
|
|
3
2
|
from symphony.bdk.gen.agent_api.signals_api import SignalsApi
|
|
3
|
+
from symphony.bdk.gen.agent_api.system_api import SystemApi
|
|
4
4
|
from symphony.bdk.gen.agent_model.agent_info import AgentInfo
|
|
5
|
-
|
|
6
5
|
from symphony.bdk.gen.agent_model.v3_health import V3Health
|
|
7
6
|
|
|
8
7
|
|
|
9
8
|
class HealthService:
|
|
10
9
|
"""Service class for checking health of the Agent server."""
|
|
11
10
|
|
|
12
|
-
def __init__(
|
|
11
|
+
def __init__(
|
|
12
|
+
self, system_api: SystemApi, signals_api: SignalsApi, retry_config: BdkRetryConfig
|
|
13
|
+
):
|
|
13
14
|
self._system_api = system_api
|
|
14
15
|
self._signals_api = signals_api
|
|
15
16
|
self._retry_config = retry_config
|
|
16
17
|
|
|
17
18
|
async def health_check(self) -> V3Health:
|
|
18
|
-
"""
|
|
19
|
+
"""Returns the connectivity status of your Agent server.
|
|
19
20
|
Wraps the `Health Check v3 <https://developers.symphony.com/restapi/reference/health-check-v3>`_ endpoint.
|
|
20
21
|
If your Agent server is started and running properly, the status value will be UP.
|
|
21
22
|
Available on Agent 2.57.0 and above.
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
extracting entities like Mentions, Hashtags, Cashtags, Emojis and extracting text content from presentationML
|
|
3
3
|
contained in the message.
|
|
4
4
|
"""
|
|
5
|
-
import json
|
|
6
|
-
import html
|
|
7
5
|
|
|
6
|
+
import html
|
|
7
|
+
import json
|
|
8
8
|
from enum import Enum
|
|
9
9
|
from json import JSONDecodeError
|
|
10
10
|
from typing import Dict
|
|
11
11
|
|
|
12
|
-
from defusedxml.ElementTree import fromstring, tostring
|
|
12
|
+
from defusedxml.ElementTree import ParseError, fromstring, tostring
|
|
13
13
|
|
|
14
14
|
from symphony.bdk.core.service.exception import MessageParserError
|
|
15
15
|
from symphony.bdk.gen.agent_model.v4_message import V4Message
|
|
@@ -25,11 +25,13 @@ def get_text_content_from_message(message: V4Message) -> str:
|
|
|
25
25
|
escaped_text_content = tostring(fromstring(message.message), method="text").decode().strip()
|
|
26
26
|
return html.unescape(escaped_text_content)
|
|
27
27
|
except ParseError as exc:
|
|
28
|
-
raise MessageParserError(
|
|
28
|
+
raise MessageParserError(
|
|
29
|
+
"Unable to parse the PresentationML, it is not in the correct format."
|
|
30
|
+
) from exc
|
|
29
31
|
|
|
30
32
|
|
|
31
33
|
def get_mentions(message: V4Message) -> [int]:
|
|
32
|
-
"""
|
|
34
|
+
"""Parse data inside an incoming message and returns a list containing the user ids corresponding
|
|
33
35
|
to the users mentioned
|
|
34
36
|
|
|
35
37
|
:param message: incoming V4 message to be parsed
|
|
@@ -40,7 +42,7 @@ def get_mentions(message: V4Message) -> [int]:
|
|
|
40
42
|
|
|
41
43
|
|
|
42
44
|
def get_hashtags(message: V4Message) -> [str]:
|
|
43
|
-
"""
|
|
45
|
+
"""Parse data inside an incoming message and returns a list containing the text of the hashtags found
|
|
44
46
|
|
|
45
47
|
:param message: message incoming V4 message to be parsed
|
|
46
48
|
:return: list of hashtags contained in the message
|
|
@@ -49,7 +51,7 @@ def get_hashtags(message: V4Message) -> [str]:
|
|
|
49
51
|
|
|
50
52
|
|
|
51
53
|
def get_cashtags(message: V4Message) -> [str]:
|
|
52
|
-
"""
|
|
54
|
+
"""Parse data inside an incoming message and returns a list containing the text of the cashtags found
|
|
53
55
|
|
|
54
56
|
:param message: message incoming V4 message to be parsed
|
|
55
57
|
:return: list of cashtags contained in the message
|
|
@@ -58,7 +60,7 @@ def get_cashtags(message: V4Message) -> [str]:
|
|
|
58
60
|
|
|
59
61
|
|
|
60
62
|
def get_emojis(message: V4Message) -> Dict[str, str]:
|
|
61
|
-
"""
|
|
63
|
+
"""Parse data inside an incoming message and returns a map containing the list of emojis found.
|
|
62
64
|
Key of the map are the annotation used to identify the emoji and the values are the their unicode.
|
|
63
65
|
|
|
64
66
|
:param message: message incoming V4 message to be parsed
|