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,16 +1,21 @@
|
|
|
1
|
-
from typing import
|
|
1
|
+
from typing import IO, AsyncGenerator, List, Tuple, Union
|
|
2
2
|
|
|
3
3
|
from symphony.bdk.core.auth.auth_session import AuthSession
|
|
4
4
|
from symphony.bdk.core.config.model.bdk_retry_config import BdkRetryConfig
|
|
5
|
+
from symphony.bdk.core.retry import retry
|
|
5
6
|
from symphony.bdk.core.service.message.model import Message
|
|
6
|
-
from symphony.bdk.core.service.message.multi_attachments_messages_api import
|
|
7
|
+
from symphony.bdk.core.service.message.multi_attachments_messages_api import (
|
|
8
|
+
MultiAttachmentsMessagesApi,
|
|
9
|
+
)
|
|
7
10
|
from symphony.bdk.core.service.pagination import offset_based_pagination
|
|
8
11
|
from symphony.bdk.gen.agent_api.attachments_api import AttachmentsApi
|
|
9
12
|
from symphony.bdk.gen.agent_model.message_search_query import MessageSearchQuery
|
|
10
13
|
from symphony.bdk.gen.agent_model.v4_import_response import V4ImportResponse
|
|
11
14
|
from symphony.bdk.gen.agent_model.v4_imported_message import V4ImportedMessage
|
|
12
15
|
from symphony.bdk.gen.agent_model.v4_message import V4Message
|
|
13
|
-
from symphony.bdk.gen.agent_model.v4_message_blast_response import
|
|
16
|
+
from symphony.bdk.gen.agent_model.v4_message_blast_response import (
|
|
17
|
+
V4MessageBlastResponse,
|
|
18
|
+
)
|
|
14
19
|
from symphony.bdk.gen.agent_model.v4_message_import_list import V4MessageImportList
|
|
15
20
|
from symphony.bdk.gen.pod_api.default_api import DefaultApi
|
|
16
21
|
from symphony.bdk.gen.pod_api.message_api import MessageApi
|
|
@@ -18,32 +23,40 @@ from symphony.bdk.gen.pod_api.message_suppression_api import MessageSuppressionA
|
|
|
18
23
|
from symphony.bdk.gen.pod_api.pod_api import PodApi
|
|
19
24
|
from symphony.bdk.gen.pod_api.streams_api import StreamsApi
|
|
20
25
|
from symphony.bdk.gen.pod_model.message_metadata_response import MessageMetadataResponse
|
|
21
|
-
from symphony.bdk.gen.pod_model.message_receipt_detail_response import
|
|
26
|
+
from symphony.bdk.gen.pod_model.message_receipt_detail_response import (
|
|
27
|
+
MessageReceiptDetailResponse,
|
|
28
|
+
)
|
|
22
29
|
from symphony.bdk.gen.pod_model.message_status import MessageStatus
|
|
23
|
-
from symphony.bdk.gen.pod_model.message_suppression_response import
|
|
30
|
+
from symphony.bdk.gen.pod_model.message_suppression_response import (
|
|
31
|
+
MessageSuppressionResponse,
|
|
32
|
+
)
|
|
24
33
|
from symphony.bdk.gen.pod_model.stream_attachment_item import StreamAttachmentItem
|
|
25
34
|
|
|
26
|
-
from symphony.bdk.core.retry import retry
|
|
27
|
-
|
|
28
35
|
|
|
29
36
|
class OboMessageService:
|
|
30
37
|
"""Class exposing OBO enabled endpoints for message management, e.g. send a message."""
|
|
31
38
|
|
|
32
|
-
def __init__(
|
|
33
|
-
|
|
34
|
-
|
|
39
|
+
def __init__(
|
|
40
|
+
self,
|
|
41
|
+
messages_api: MultiAttachmentsMessagesApi,
|
|
42
|
+
message_suppression_api: MessageSuppressionApi,
|
|
43
|
+
pod_api: PodApi,
|
|
44
|
+
auth_session: AuthSession,
|
|
45
|
+
retry_config: BdkRetryConfig,
|
|
46
|
+
):
|
|
35
47
|
self._messages_api = messages_api
|
|
36
48
|
self._message_suppression_api = message_suppression_api
|
|
49
|
+
self._pod_api = pod_api
|
|
37
50
|
self._auth_session = auth_session
|
|
38
51
|
self._retry_config = retry_config
|
|
39
52
|
|
|
40
53
|
async def send_message(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
54
|
+
self,
|
|
55
|
+
stream_id: str,
|
|
56
|
+
message: Union[str, Message],
|
|
57
|
+
data=None,
|
|
58
|
+
version: str = "",
|
|
59
|
+
attachment: List[Union[IO, Tuple[IO, IO]]] = None,
|
|
47
60
|
) -> V4Message:
|
|
48
61
|
"""Send a message to an existing stream.
|
|
49
62
|
See: `Create Message <https://developers.symphony.com/restapi/reference/create-message-v4>`_
|
|
@@ -62,20 +75,29 @@ class OboMessageService:
|
|
|
62
75
|
|
|
63
76
|
:return: a V4Message object containing the details of the sent message.
|
|
64
77
|
"""
|
|
65
|
-
message_object =
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
78
|
+
message_object = (
|
|
79
|
+
message
|
|
80
|
+
if isinstance(message, Message)
|
|
81
|
+
else Message(content=message, data=data, version=version, attachments=attachment)
|
|
82
|
+
)
|
|
83
|
+
return await self._send_message(
|
|
84
|
+
stream_id,
|
|
85
|
+
message_object.content,
|
|
86
|
+
message_object.data,
|
|
87
|
+
message_object.version,
|
|
88
|
+
message_object.attachments,
|
|
89
|
+
message_object.previews,
|
|
90
|
+
)
|
|
69
91
|
|
|
70
92
|
@retry
|
|
71
93
|
async def _send_message(
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
94
|
+
self,
|
|
95
|
+
stream_id: str,
|
|
96
|
+
message: str,
|
|
97
|
+
data: str = "",
|
|
98
|
+
version: str = "",
|
|
99
|
+
attachment: List[IO] = None,
|
|
100
|
+
preview: List[IO] = None,
|
|
79
101
|
) -> V4Message:
|
|
80
102
|
"""Send a message to an existing stream.
|
|
81
103
|
See: `Create Message <https://developers.symphony.com/restapi/reference/create-message-v4>`_
|
|
@@ -98,7 +120,7 @@ class OboMessageService:
|
|
|
98
120
|
"key_manager_token": await self._auth_session.key_manager_token,
|
|
99
121
|
"message": message,
|
|
100
122
|
"data": data,
|
|
101
|
-
"version": version
|
|
123
|
+
"version": version,
|
|
102
124
|
}
|
|
103
125
|
if attachment is not None:
|
|
104
126
|
params["attachment"] = attachment if isinstance(attachment, list) else [attachment]
|
|
@@ -108,10 +130,7 @@ class OboMessageService:
|
|
|
108
130
|
return await self._messages_api.v4_stream_sid_multi_attachment_message_create_post(**params)
|
|
109
131
|
|
|
110
132
|
@retry
|
|
111
|
-
async def suppress_message(
|
|
112
|
-
self,
|
|
113
|
-
message_id: str
|
|
114
|
-
) -> MessageSuppressionResponse:
|
|
133
|
+
async def suppress_message(self, message_id: str) -> MessageSuppressionResponse:
|
|
115
134
|
"""Suppresses a message, preventing its contents from being displayed to users.
|
|
116
135
|
See: `Suppress Message <https://developers.symphony.com/restapi/reference/suppress-message>`_
|
|
117
136
|
|
|
@@ -122,9 +141,55 @@ class OboMessageService:
|
|
|
122
141
|
"""
|
|
123
142
|
params = {
|
|
124
143
|
"id": message_id,
|
|
125
|
-
"session_token": await self._auth_session.session_token
|
|
144
|
+
"session_token": await self._auth_session.session_token,
|
|
126
145
|
}
|
|
127
|
-
return await self._message_suppression_api.v1_admin_messagesuppression_id_suppress_post(
|
|
146
|
+
return await self._message_suppression_api.v1_admin_messagesuppression_id_suppress_post(
|
|
147
|
+
**params
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
@retry
|
|
151
|
+
async def update_message(
|
|
152
|
+
self,
|
|
153
|
+
stream_id: str,
|
|
154
|
+
message_id: str,
|
|
155
|
+
message: Union[str, Message],
|
|
156
|
+
data=None,
|
|
157
|
+
version: str = "",
|
|
158
|
+
silent=True,
|
|
159
|
+
) -> V4Message:
|
|
160
|
+
"""Update an existing message. The existing message must be a valid social message, that has not been deleted.
|
|
161
|
+
See: `Update Message <https://developers.symphony.com/restapi/reference/update-message-v4>`_
|
|
162
|
+
|
|
163
|
+
:param stream_id: The ID of the stream where the message is being updated.
|
|
164
|
+
:param message_id: The ID of the message that is being updated.
|
|
165
|
+
:param message: a :py:class:`Message` instance or a string containing the MessageML content to be sent.
|
|
166
|
+
If it is a :py:class:`Message` instance, other parameters will be ignored.
|
|
167
|
+
If it is a string, ``<messageML>`` tags can be omitted.
|
|
168
|
+
:param data: an object (e.g. dict) that will be serialized into JSON using ``json.dumps``.
|
|
169
|
+
:param silent: a bool flag that will determine if the updated message is going to be marked as read (when true,
|
|
170
|
+
which is default value) or unread (when false).
|
|
171
|
+
:param version: Optional message version in the format "major.minor".
|
|
172
|
+
If empty, defaults to the latest supported version.
|
|
173
|
+
|
|
174
|
+
:return: a V4Message object containing the details of the updated message.
|
|
175
|
+
"""
|
|
176
|
+
message_object = (
|
|
177
|
+
message
|
|
178
|
+
if isinstance(message, Message)
|
|
179
|
+
else Message(content=message, data=data, silent=silent, version=version)
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
params = {
|
|
183
|
+
"sid": stream_id,
|
|
184
|
+
"mid": message_id,
|
|
185
|
+
"session_token": await self._auth_session.session_token,
|
|
186
|
+
"key_manager_token": await self._auth_session.key_manager_token,
|
|
187
|
+
"message": message_object.content,
|
|
188
|
+
"data": message_object.data,
|
|
189
|
+
"version": message_object.version,
|
|
190
|
+
"silent": str(message_object.silent),
|
|
191
|
+
}
|
|
192
|
+
return await self._messages_api.v4_stream_sid_message_mid_update_post(**params)
|
|
128
193
|
|
|
129
194
|
@retry
|
|
130
195
|
async def get_attachment_types(self) -> List[str]:
|
|
@@ -134,19 +199,17 @@ class OboMessageService:
|
|
|
134
199
|
:return: a list of String containing all allowed file extensions for attachments.
|
|
135
200
|
|
|
136
201
|
"""
|
|
137
|
-
params = {
|
|
138
|
-
"session_token": await self._auth_session.session_token
|
|
139
|
-
}
|
|
202
|
+
params = {"session_token": await self._auth_session.session_token}
|
|
140
203
|
type_list = await self._pod_api.v1_files_allowed_types_get(**params)
|
|
141
204
|
return type_list.value
|
|
142
|
-
|
|
205
|
+
|
|
143
206
|
async def blast_message(
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
207
|
+
self,
|
|
208
|
+
stream_ids: List[str],
|
|
209
|
+
message: Union[str, Message],
|
|
210
|
+
data=None,
|
|
211
|
+
version: str = "",
|
|
212
|
+
attachment: List[Union[IO, Tuple[IO, IO]]] = None,
|
|
150
213
|
) -> V4MessageBlastResponse:
|
|
151
214
|
"""Send a message to multiple existing streams.
|
|
152
215
|
See: `Blast Message <https://developers.symphony.com/restapi/reference/blast-message>`_
|
|
@@ -164,20 +227,29 @@ class OboMessageService:
|
|
|
164
227
|
The limit is set to 30Mb total size; also, it is recommended not to exceed 25 files.
|
|
165
228
|
:return:
|
|
166
229
|
"""
|
|
167
|
-
message_object =
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
230
|
+
message_object = (
|
|
231
|
+
message
|
|
232
|
+
if isinstance(message, Message)
|
|
233
|
+
else Message(content=message, data=data, version=version, attachments=attachment)
|
|
234
|
+
)
|
|
235
|
+
return await self._blast_message(
|
|
236
|
+
stream_ids,
|
|
237
|
+
message_object.content,
|
|
238
|
+
message_object.data,
|
|
239
|
+
message_object.version,
|
|
240
|
+
message_object.attachments,
|
|
241
|
+
message_object.previews,
|
|
242
|
+
)
|
|
243
|
+
|
|
172
244
|
@retry
|
|
173
245
|
async def _blast_message(
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
246
|
+
self,
|
|
247
|
+
stream_ids: List[str],
|
|
248
|
+
message: str,
|
|
249
|
+
data: str = "",
|
|
250
|
+
version: str = "",
|
|
251
|
+
attachment: List[IO] = None,
|
|
252
|
+
preview: List[IO] = None,
|
|
181
253
|
) -> V4MessageBlastResponse:
|
|
182
254
|
"""Send a message to multiple existing streams.
|
|
183
255
|
See: `Blast Message <https://developers.symphony.com/restapi/reference/blast-message>`_
|
|
@@ -200,7 +272,7 @@ class OboMessageService:
|
|
|
200
272
|
"key_manager_token": await self._auth_session.key_manager_token,
|
|
201
273
|
"message": message,
|
|
202
274
|
"data": data,
|
|
203
|
-
"version": version
|
|
275
|
+
"version": version,
|
|
204
276
|
}
|
|
205
277
|
if attachment is not None:
|
|
206
278
|
params["attachment"] = attachment if isinstance(attachment, list) else [attachment]
|
|
@@ -211,33 +283,30 @@ class OboMessageService:
|
|
|
211
283
|
|
|
212
284
|
|
|
213
285
|
class MessageService(OboMessageService):
|
|
214
|
-
"""Service class for managing messages.
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
286
|
+
"""Service class for managing messages."""
|
|
287
|
+
|
|
288
|
+
def __init__(
|
|
289
|
+
self,
|
|
290
|
+
messages_api: MultiAttachmentsMessagesApi,
|
|
291
|
+
message_api: MessageApi,
|
|
292
|
+
message_suppression_api: MessageSuppressionApi,
|
|
293
|
+
streams_api: StreamsApi,
|
|
294
|
+
pod_api: PodApi,
|
|
295
|
+
attachment_api: AttachmentsApi,
|
|
296
|
+
default_api: DefaultApi,
|
|
297
|
+
auth_session: AuthSession,
|
|
298
|
+
retry_config: BdkRetryConfig,
|
|
299
|
+
):
|
|
300
|
+
super().__init__(messages_api, message_suppression_api, pod_api, auth_session, retry_config)
|
|
227
301
|
self._message_api = message_api
|
|
228
302
|
self._message_suppression_api = message_suppression_api
|
|
229
303
|
self._streams_api = streams_api
|
|
230
|
-
self._pod_api = pod_api
|
|
231
304
|
self._attachment_api = attachment_api
|
|
232
305
|
self._default_api = default_api
|
|
233
306
|
|
|
234
307
|
@retry
|
|
235
308
|
async def list_messages(
|
|
236
|
-
|
|
237
|
-
stream_id: str,
|
|
238
|
-
since: int = 0,
|
|
239
|
-
skip: int = 0,
|
|
240
|
-
limit: int = 50
|
|
309
|
+
self, stream_id: str, since: int = 0, skip: int = 0, limit: int = 50
|
|
241
310
|
) -> [V4Message]:
|
|
242
311
|
"""Get messages from an existing stream. Additionally returns any attachments associated with the message.
|
|
243
312
|
See: `Messages <https://developers.symphony.com/restapi/reference/messages-v4>`_
|
|
@@ -256,16 +325,13 @@ class MessageService(OboMessageService):
|
|
|
256
325
|
"session_token": await self._auth_session.session_token,
|
|
257
326
|
"key_manager_token": await self._auth_session.key_manager_token,
|
|
258
327
|
"skip": skip,
|
|
259
|
-
"limit": limit
|
|
328
|
+
"limit": limit,
|
|
260
329
|
}
|
|
261
330
|
message_list = await self._messages_api.v4_stream_sid_message_get(**params)
|
|
262
331
|
return message_list.value
|
|
263
332
|
|
|
264
333
|
@retry
|
|
265
|
-
async def import_messages(
|
|
266
|
-
self,
|
|
267
|
-
messages: List[V4ImportedMessage]
|
|
268
|
-
) -> [V4ImportResponse]:
|
|
334
|
+
async def import_messages(self, messages: List[V4ImportedMessage]) -> [V4ImportResponse]:
|
|
269
335
|
"""Imports a list of messages to Symphony.
|
|
270
336
|
See: `Import Message <https://developers.symphony.com/restapi/reference/import-message-v4>`_
|
|
271
337
|
|
|
@@ -277,17 +343,12 @@ class MessageService(OboMessageService):
|
|
|
277
343
|
params = {
|
|
278
344
|
"message_list": V4MessageImportList(value=messages),
|
|
279
345
|
"session_token": await self._auth_session.session_token,
|
|
280
|
-
"key_manager_token": await self._auth_session.key_manager_token
|
|
346
|
+
"key_manager_token": await self._auth_session.key_manager_token,
|
|
281
347
|
}
|
|
282
348
|
import_response_list = await self._messages_api.v4_message_import_post(**params)
|
|
283
349
|
return import_response_list.value
|
|
284
350
|
|
|
285
|
-
async def get_attachment(
|
|
286
|
-
self,
|
|
287
|
-
stream_id: str,
|
|
288
|
-
message_id: str,
|
|
289
|
-
attachment_id: str
|
|
290
|
-
) -> str:
|
|
351
|
+
async def get_attachment(self, stream_id: str, message_id: str, attachment_id: str) -> str:
|
|
291
352
|
"""Downloads the attachment body by the stream ID, message ID and attachment ID.
|
|
292
353
|
See: `Attachment <https://developers.symphony.com/restapi/reference/attachment>`_
|
|
293
354
|
|
|
@@ -303,14 +364,11 @@ class MessageService(OboMessageService):
|
|
|
303
364
|
"file_id": attachment_id,
|
|
304
365
|
"message_id": message_id,
|
|
305
366
|
"session_token": await self._auth_session.session_token,
|
|
306
|
-
"key_manager_token": await self._auth_session.key_manager_token
|
|
367
|
+
"key_manager_token": await self._auth_session.key_manager_token,
|
|
307
368
|
}
|
|
308
369
|
return await self._attachment_api.v1_stream_sid_attachment_get(**params)
|
|
309
370
|
|
|
310
|
-
async def get_message_status(
|
|
311
|
-
self,
|
|
312
|
-
message_id: str
|
|
313
|
-
) -> MessageStatus:
|
|
371
|
+
async def get_message_status(self, message_id: str) -> MessageStatus:
|
|
314
372
|
"""Get the status of a particular message, i.e the list of users who the message was sent to,
|
|
315
373
|
delivered to and the list of users who read the message.
|
|
316
374
|
See: `Message Status <https://developers.symphony.com/restapi/reference/message-status>`_
|
|
@@ -322,15 +380,12 @@ class MessageService(OboMessageService):
|
|
|
322
380
|
"""
|
|
323
381
|
params = {
|
|
324
382
|
"mid": message_id,
|
|
325
|
-
"session_token": await self._auth_session.session_token
|
|
383
|
+
"session_token": await self._auth_session.session_token,
|
|
326
384
|
}
|
|
327
385
|
return await self._message_api.v1_message_mid_status_get(**params)
|
|
328
386
|
|
|
329
387
|
@retry
|
|
330
|
-
async def get_message(
|
|
331
|
-
self,
|
|
332
|
-
message_id: str
|
|
333
|
-
) -> V4Message:
|
|
388
|
+
async def get_message(self, message_id: str) -> V4Message:
|
|
334
389
|
"""Retrieves the details of a message given its message ID.
|
|
335
390
|
See: `Get Message <https://developers.symphony.com/restapi/reference/get-message-v1>`_
|
|
336
391
|
|
|
@@ -342,18 +397,18 @@ class MessageService(OboMessageService):
|
|
|
342
397
|
params = {
|
|
343
398
|
"id": message_id,
|
|
344
399
|
"session_token": await self._auth_session.session_token,
|
|
345
|
-
"key_manager_token": await self._auth_session.key_manager_token
|
|
400
|
+
"key_manager_token": await self._auth_session.key_manager_token,
|
|
346
401
|
}
|
|
347
402
|
return await self._messages_api.v1_message_id_get(**params)
|
|
348
403
|
|
|
349
404
|
@retry
|
|
350
405
|
async def list_attachments(
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
406
|
+
self,
|
|
407
|
+
stream_id: str,
|
|
408
|
+
since: int = None,
|
|
409
|
+
to: int = None,
|
|
410
|
+
limit: int = 50,
|
|
411
|
+
sort_dir: str = "ASC",
|
|
357
412
|
) -> List[StreamAttachmentItem]:
|
|
358
413
|
"""List attachments in a particular stream.
|
|
359
414
|
See: `List Attachments <https://developers.symphony.com/restapi/reference/list-attachments>`_
|
|
@@ -372,7 +427,7 @@ class MessageService(OboMessageService):
|
|
|
372
427
|
"sid": stream_id,
|
|
373
428
|
"session_token": await self._auth_session.session_token,
|
|
374
429
|
"limit": limit,
|
|
375
|
-
"sort_dir": sort_dir
|
|
430
|
+
"sort_dir": sort_dir,
|
|
376
431
|
}
|
|
377
432
|
if since is not None:
|
|
378
433
|
params["since"] = since
|
|
@@ -382,10 +437,7 @@ class MessageService(OboMessageService):
|
|
|
382
437
|
return attachment_list.value
|
|
383
438
|
|
|
384
439
|
@retry
|
|
385
|
-
async def list_message_receipts(
|
|
386
|
-
self,
|
|
387
|
-
message_id: str
|
|
388
|
-
) -> MessageReceiptDetailResponse:
|
|
440
|
+
async def list_message_receipts(self, message_id: str) -> MessageReceiptDetailResponse:
|
|
389
441
|
"""Fetches receipts details from a specific message.
|
|
390
442
|
See: `List Message Receipts <https://developers.symphony.com/restapi/reference/list-message-receipts>`_
|
|
391
443
|
|
|
@@ -396,15 +448,12 @@ class MessageService(OboMessageService):
|
|
|
396
448
|
"""
|
|
397
449
|
params = {
|
|
398
450
|
"message_id": message_id,
|
|
399
|
-
"session_token": await self._auth_session.session_token
|
|
451
|
+
"session_token": await self._auth_session.session_token,
|
|
400
452
|
}
|
|
401
453
|
return await self._default_api.v1_admin_messages_message_id_receipts_get(**params)
|
|
402
454
|
|
|
403
455
|
@retry
|
|
404
|
-
async def get_message_relationships(
|
|
405
|
-
self,
|
|
406
|
-
message_id: str
|
|
407
|
-
) -> MessageMetadataResponse:
|
|
456
|
+
async def get_message_relationships(self, message_id: str) -> MessageMetadataResponse:
|
|
408
457
|
"""Gets the message metadata relationship.
|
|
409
458
|
This API allows users to track the relationship between a message and all the forwards and replies of that
|
|
410
459
|
message.
|
|
@@ -418,13 +467,20 @@ class MessageService(OboMessageService):
|
|
|
418
467
|
params = {
|
|
419
468
|
"message_id": message_id,
|
|
420
469
|
"session_token": await self._auth_session.session_token,
|
|
421
|
-
"user_agent": ""
|
|
470
|
+
"user_agent": "",
|
|
422
471
|
}
|
|
423
|
-
return await self._default_api.v1_admin_messages_message_id_metadata_relationships_get(
|
|
472
|
+
return await self._default_api.v1_admin_messages_message_id_metadata_relationships_get(
|
|
473
|
+
**params
|
|
474
|
+
)
|
|
424
475
|
|
|
425
476
|
@retry
|
|
426
|
-
async def search_messages(
|
|
427
|
-
|
|
477
|
+
async def search_messages(
|
|
478
|
+
self,
|
|
479
|
+
query: MessageSearchQuery,
|
|
480
|
+
sort_dir: str = "desc",
|
|
481
|
+
skip: int = 0,
|
|
482
|
+
limit: int = 50,
|
|
483
|
+
) -> List[V4Message]:
|
|
428
484
|
"""Searches for messages in the context of a specified user, given an argument-based query and pagination
|
|
429
485
|
attributes (skip and limit parameters).
|
|
430
486
|
See: `Message Search (using POST) <https://developers.symphony.com/restapi/reference/message-search-post>`_
|
|
@@ -442,13 +498,18 @@ class MessageService(OboMessageService):
|
|
|
442
498
|
"query": query,
|
|
443
499
|
"sort_dir": sort_dir,
|
|
444
500
|
"skip": skip,
|
|
445
|
-
"limit": limit
|
|
501
|
+
"limit": limit,
|
|
446
502
|
}
|
|
447
503
|
message_list = await self._messages_api.v1_message_search_post(**params)
|
|
448
504
|
return message_list.value # endpoint returns empty list when no values found
|
|
449
505
|
|
|
450
|
-
async def search_all_messages(
|
|
451
|
-
|
|
506
|
+
async def search_all_messages(
|
|
507
|
+
self,
|
|
508
|
+
query: MessageSearchQuery,
|
|
509
|
+
sort_dir: str = "desc",
|
|
510
|
+
chunk_size: int = 50,
|
|
511
|
+
max_number: int = None,
|
|
512
|
+
) -> AsyncGenerator[V4Message, None]:
|
|
452
513
|
"""Searches for messages in the context of a specified user, given an argument-based query.
|
|
453
514
|
See: `Message Search (using POST) <https://developers.symphony.com/restapi/reference/message-search-post>`_
|
|
454
515
|
|
|
@@ -464,48 +525,22 @@ class MessageService(OboMessageService):
|
|
|
464
525
|
|
|
465
526
|
return offset_based_pagination(search_messages_one_page, chunk_size, max_number)
|
|
466
527
|
|
|
467
|
-
@retry
|
|
468
|
-
async def update_message(self, stream_id: str, message_id: str, message: Union[str, Message], data=None,
|
|
469
|
-
version: str = "", silent=True) -> V4Message:
|
|
470
|
-
"""Update an existing message. The existing message must be a valid social message, that has not been deleted.
|
|
471
|
-
See: `Update Message <https://developers.symphony.com/restapi/reference/update-message-v4>`_
|
|
472
|
-
|
|
473
|
-
:param stream_id: The ID of the stream where the message is being updated.
|
|
474
|
-
:param message_id: The ID of the message that is being updated.
|
|
475
|
-
:param message: a :py:class:`Message` instance or a string containing the MessageML content to be sent.
|
|
476
|
-
If it is a :py:class:`Message` instance, other parameters will be ignored.
|
|
477
|
-
If it is a string, ``<messageML>`` tags can be omitted.
|
|
478
|
-
:param data: an object (e.g. dict) that will be serialized into JSON using ``json.dumps``.
|
|
479
|
-
:param silent: a bool flag that will determine if the updated message is going to be marked as read (when true,
|
|
480
|
-
which is default value) or unread (when false).
|
|
481
|
-
:param version: Optional message version in the format "major.minor".
|
|
482
|
-
If empty, defaults to the latest supported version.
|
|
483
|
-
|
|
484
|
-
:return: a V4Message object containing the details of the updated message.
|
|
485
|
-
"""
|
|
486
|
-
message_object = message if isinstance(message, Message) else Message(content=message, data=data, silent=silent,
|
|
487
|
-
version=version)
|
|
488
|
-
|
|
489
|
-
params = {
|
|
490
|
-
"sid": stream_id,
|
|
491
|
-
"mid": message_id,
|
|
492
|
-
"session_token": await self._auth_session.session_token,
|
|
493
|
-
"key_manager_token": await self._auth_session.key_manager_token,
|
|
494
|
-
"message": message_object.content,
|
|
495
|
-
"data": message_object.data,
|
|
496
|
-
"version": message_object.version,
|
|
497
|
-
"silent": str(message_object.silent)
|
|
498
|
-
}
|
|
499
|
-
return await self._messages_api.v4_stream_sid_message_mid_update_post(**params)
|
|
500
|
-
|
|
501
528
|
@staticmethod
|
|
502
529
|
def _validate_message_search_query(query: MessageSearchQuery):
|
|
503
530
|
# Check streamType value among accepted ones if specified
|
|
504
|
-
if query.stream_type is not None and query.stream_type not in [
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
531
|
+
if query.stream_type is not None and query.stream_type not in [
|
|
532
|
+
"CHAT",
|
|
533
|
+
"IM",
|
|
534
|
+
"MIM",
|
|
535
|
+
"ROOM",
|
|
536
|
+
"POST",
|
|
537
|
+
]:
|
|
538
|
+
raise ValueError(
|
|
539
|
+
f"Wrong stream type {query.stream_type}. "
|
|
540
|
+
f"Accepted values are: CHAT (1-1 instant messages and multi-party instant messages), "
|
|
541
|
+
f"IM (1-1 instant message), MIM (multi-party instant message), "
|
|
542
|
+
f"ROOM or POST (user profile wall posts)"
|
|
543
|
+
)
|
|
509
544
|
|
|
510
545
|
# Text queries require streamId to be provided
|
|
511
546
|
if query.text is not None and query.stream_id is None:
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
"""This module handles pre-processing for an outgoing message in order to have a valid messageML format.
|
|
2
|
-
|
|
1
|
+
"""This module handles pre-processing for an outgoing message in order to have a valid messageML format."""
|
|
2
|
+
|
|
3
3
|
import re
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
def escape_special_chars(raw_text: str) -> str:
|
|
7
|
-
"""
|
|
7
|
+
"""Replace all special characters placed within the messageML that must be HTML-escaped
|
|
8
8
|
to have a valid MessageML format.
|
|
9
9
|
|
|
10
10
|
:param raw_text: text to be parsed
|
|
@@ -14,7 +14,7 @@ def escape_special_chars(raw_text: str) -> str:
|
|
|
14
14
|
parsed_text = ""
|
|
15
15
|
matches = re.finditer(_pattern(), raw_text)
|
|
16
16
|
for match in matches:
|
|
17
|
-
parsed_text += raw_text[current_parsed_index:match.start()] + _replacement(match.group(0))
|
|
17
|
+
parsed_text += raw_text[current_parsed_index : match.start()] + _replacement(match.group(0))
|
|
18
18
|
current_parsed_index = match.end()
|
|
19
19
|
return parsed_text + raw_text[current_parsed_index:]
|
|
20
20
|
|
|
@@ -32,7 +32,7 @@ _special_chars_dict = {
|
|
|
32
32
|
"<": "<",
|
|
33
33
|
">": ">",
|
|
34
34
|
"'": "'",
|
|
35
|
-
"
|
|
35
|
+
'"': """,
|
|
36
36
|
"#": "#",
|
|
37
37
|
"\\$": "$",
|
|
38
38
|
"%": "%",
|
|
@@ -47,5 +47,5 @@ _special_chars_dict = {
|
|
|
47
47
|
"\\]": "]",
|
|
48
48
|
"`": "`",
|
|
49
49
|
"\\{": "{",
|
|
50
|
-
"\\}": "}"
|
|
50
|
+
"\\}": "}",
|
|
51
51
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import json
|
|
2
|
-
from typing import List, Tuple, Union
|
|
2
|
+
from typing import IO, List, Tuple, Union
|
|
3
3
|
|
|
4
4
|
from symphony.bdk.core.service.exception import MessageCreationError
|
|
5
5
|
|
|
@@ -14,8 +14,14 @@ class Message:
|
|
|
14
14
|
`Create Message <https://developers.symphony.com/restapi/reference/create-message-v4>`_.
|
|
15
15
|
"""
|
|
16
16
|
|
|
17
|
-
def __init__(
|
|
18
|
-
|
|
17
|
+
def __init__(
|
|
18
|
+
self,
|
|
19
|
+
content: str,
|
|
20
|
+
data=None,
|
|
21
|
+
silent=True,
|
|
22
|
+
attachments: List[Union[IO, Tuple[IO, IO]]] = None,
|
|
23
|
+
version: str = "",
|
|
24
|
+
):
|
|
19
25
|
"""Builds a message.
|
|
20
26
|
|
|
21
27
|
:param content: the MessageML content to be sent. This is mandatory
|
|
@@ -89,7 +95,9 @@ class Message:
|
|
|
89
95
|
def _get_content(content):
|
|
90
96
|
if content is None:
|
|
91
97
|
raise MessageCreationError("Message content is mandatory")
|
|
92
|
-
if not content.startswith(MESSAGE_ML_START_TAG) and not content.endswith(
|
|
98
|
+
if not content.startswith(MESSAGE_ML_START_TAG) and not content.endswith(
|
|
99
|
+
MESSAGE_ML_END_TAG
|
|
100
|
+
):
|
|
93
101
|
return MESSAGE_ML_START_TAG + content + MESSAGE_ML_END_TAG
|
|
94
102
|
return content
|
|
95
103
|
|
|
@@ -109,6 +117,8 @@ class Message:
|
|
|
109
117
|
attachments.append(item)
|
|
110
118
|
|
|
111
119
|
if previews and len(previews) != len(attachments):
|
|
112
|
-
raise MessageCreationError(
|
|
120
|
+
raise MessageCreationError(
|
|
121
|
+
"Message should contain either no preview or as many previews as attachments"
|
|
122
|
+
)
|
|
113
123
|
|
|
114
124
|
return attachments, previews
|