symphony_bdk_python 2.10.dev0__py3-none-any.whl → 2.11.0b0__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/auth/auth_session.py +20 -1
- symphony/bdk/core/auth/bot_authenticator.py +11 -0
- symphony/bdk/core/auth/jwt_helper.py +10 -0
- symphony/bdk/core/config/model/bdk_config.py +1 -0
- symphony/bdk/core/service/stream/stream_service.py +40 -3
- symphony/bdk/core/service/user/user_service.py +43 -1
- symphony/bdk/core/service/version/__init__.py +0 -0
- symphony/bdk/core/service/version/agent_version_service.py +67 -0
- symphony/bdk/core/service_factory.py +11 -1
- symphony/bdk/core/symphony_bdk.py +3 -1
- 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.0b0.dist-info}/METADATA +3 -3
- symphony_bdk_python-2.11.0b0.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.0b0.dist-info}/LICENSE +0 -0
- {symphony_bdk_python-2.10.dev0.dist-info → symphony_bdk_python-2.11.0b0.dist-info}/NOTICE +0 -0
- {symphony_bdk_python-2.10.dev0.dist-info → symphony_bdk_python-2.11.0b0.dist-info}/WHEEL +0 -0
|
@@ -5,10 +5,13 @@ from datetime import datetime, timezone
|
|
|
5
5
|
import logging
|
|
6
6
|
|
|
7
7
|
from symphony.bdk.core.auth.exception import AuthInitializationError
|
|
8
|
+
from symphony.bdk.core.auth.jwt_helper import extract_token_claims
|
|
9
|
+
|
|
8
10
|
|
|
9
11
|
logger = logging.getLogger(__name__)
|
|
10
12
|
|
|
11
13
|
EXPIRATION_SAFETY_BUFFER_SECONDS = 5
|
|
14
|
+
SKD_FLAG_NAME = "canUseSimplifiedKeyDelivery"
|
|
12
15
|
|
|
13
16
|
|
|
14
17
|
class AuthSession:
|
|
@@ -33,7 +36,10 @@ class AuthSession:
|
|
|
33
36
|
"""
|
|
34
37
|
logger.debug("Authenticate")
|
|
35
38
|
self._session_token = await self._authenticator.retrieve_session_token()
|
|
36
|
-
|
|
39
|
+
if await self.skd_enabled:
|
|
40
|
+
self._key_manager_token = ""
|
|
41
|
+
return
|
|
42
|
+
self.key_manager_token = await self._authenticator.retrieve_key_manager_token()
|
|
37
43
|
|
|
38
44
|
@property
|
|
39
45
|
async def session_token(self):
|
|
@@ -71,6 +77,10 @@ class AuthSession:
|
|
|
71
77
|
|
|
72
78
|
:return: the key manager token
|
|
73
79
|
"""
|
|
80
|
+
|
|
81
|
+
if await self.skd_enabled:
|
|
82
|
+
return ""
|
|
83
|
+
|
|
74
84
|
if self._key_manager_token is None:
|
|
75
85
|
self._key_manager_token = await self._authenticator.retrieve_key_manager_token()
|
|
76
86
|
return self._key_manager_token
|
|
@@ -91,6 +101,15 @@ class AuthSession:
|
|
|
91
101
|
"""
|
|
92
102
|
self._key_manager_token = value
|
|
93
103
|
|
|
104
|
+
@property
|
|
105
|
+
async def skd_enabled(self):
|
|
106
|
+
|
|
107
|
+
token_data = extract_token_claims(await self.session_token)
|
|
108
|
+
if not token_data.get(SKD_FLAG_NAME, False):
|
|
109
|
+
return False
|
|
110
|
+
return await self._authenticator.agent_version_service.is_skd_supported()
|
|
111
|
+
|
|
112
|
+
|
|
94
113
|
|
|
95
114
|
class OboAuthSession(AuthSession):
|
|
96
115
|
"""RSA OBO Authentication session handle to get the OBO session token from.
|
|
@@ -8,6 +8,7 @@ from symphony.bdk.core.config.model.bdk_bot_config import BdkBotConfig
|
|
|
8
8
|
from symphony.bdk.core.config.model.bdk_retry_config import BdkRetryConfig
|
|
9
9
|
from symphony.bdk.core.retry import retry
|
|
10
10
|
from symphony.bdk.core.retry.strategy import authentication_retry
|
|
11
|
+
from symphony.bdk.core.service.version.agent_version_service import AgentVersionService
|
|
11
12
|
from symphony.bdk.gen.api_client import ApiClient
|
|
12
13
|
from symphony.bdk.gen.auth_api.certificate_authentication_api import CertificateAuthenticationApi
|
|
13
14
|
from symphony.bdk.gen.login_api.authentication_api import AuthenticationApi
|
|
@@ -24,6 +25,7 @@ class BotAuthenticator(ABC):
|
|
|
24
25
|
self._session_auth_client = session_auth_client
|
|
25
26
|
self._key_manager_auth_client = key_manager_auth_client
|
|
26
27
|
self._retry_config = retry_config
|
|
28
|
+
self._agent_version_service = None
|
|
27
29
|
|
|
28
30
|
async def retrieve_session_token(self) -> str:
|
|
29
31
|
"""Authenticates and retrieves a new session token.
|
|
@@ -59,6 +61,15 @@ class BotAuthenticator(ABC):
|
|
|
59
61
|
:return: the token as a string
|
|
60
62
|
"""
|
|
61
63
|
|
|
64
|
+
@property
|
|
65
|
+
def agent_version_service(self) -> Optional[AgentVersionService]:
|
|
66
|
+
return self._agent_version_service
|
|
67
|
+
|
|
68
|
+
@agent_version_service.setter
|
|
69
|
+
def agent_version_service(self, agent_version_service: AgentVersionService):
|
|
70
|
+
self._agent_version_service = agent_version_service
|
|
71
|
+
|
|
72
|
+
|
|
62
73
|
|
|
63
74
|
class BotAuthenticatorRsa(BotAuthenticator):
|
|
64
75
|
"""Bot authenticator RSA implementation.
|
|
@@ -83,3 +83,13 @@ def _parse_public_key_from_x509_cert(certificate: str) -> str:
|
|
|
83
83
|
return public_key.public_bytes(Encoding.PEM, PublicFormat.SubjectPublicKeyInfo).decode()
|
|
84
84
|
except ValueError as exc:
|
|
85
85
|
raise AuthInitializationError("Unable to parse the certificate. Check certificate format.") from exc
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def extract_token_claims(session_token):
|
|
89
|
+
try:
|
|
90
|
+
return jwt.decode(session_token,
|
|
91
|
+
algorithms=[JWT_ENCRYPTION_ALGORITHM],
|
|
92
|
+
options={"verify_signature": False}
|
|
93
|
+
)
|
|
94
|
+
except DecodeError:
|
|
95
|
+
return {}
|
|
@@ -30,6 +30,7 @@ class BdkConfig(BdkServerConfig):
|
|
|
30
30
|
self.datafeed = BdkDatafeedConfig(config.get("datafeed"))
|
|
31
31
|
self.datahose = BdkDatahoseConfig(config.get("datahose"))
|
|
32
32
|
self.retry = BdkRetryConfig(config.get("retry"))
|
|
33
|
+
self.manifest = config.get("manifest")
|
|
33
34
|
|
|
34
35
|
def is_bot_configured(self) -> bool:
|
|
35
36
|
"""
|
|
@@ -136,31 +136,35 @@ class OboStreamService:
|
|
|
136
136
|
|
|
137
137
|
@retry
|
|
138
138
|
async def search_rooms(self, query: V2RoomSearchCriteria, skip: int = 0,
|
|
139
|
-
limit: int = 50) -> V3RoomSearchResults:
|
|
139
|
+
limit: int = 50, include_non_discoverable=False) -> V3RoomSearchResults:
|
|
140
140
|
"""Search for rooms according to the specified criteria.
|
|
141
141
|
Wraps the `Search Rooms V3 <https://developers.symphony.com/restapi/reference/search-rooms-v3>`_ endpoint.
|
|
142
142
|
|
|
143
143
|
:param query: the search criteria.
|
|
144
144
|
:param skip: number of rooms to skip, defaults to 0.
|
|
145
145
|
:param limit: number of maximum rooms to return. Must be a positive integer that does not exceed 100.
|
|
146
|
+
:param include_non_discoverable: set to `True` to include rooms not publicly searchable, false by default.
|
|
146
147
|
:return: the rooms matching search criteria.
|
|
147
148
|
"""
|
|
148
149
|
return await self._streams_api.v3_room_search_post(query=query, skip=skip, limit=limit,
|
|
150
|
+
include_non_discoverable=include_non_discoverable,
|
|
149
151
|
session_token=await self._auth_session.session_token)
|
|
150
152
|
|
|
151
153
|
async def search_all_rooms(self, query: V2RoomSearchCriteria, chunk_size: int = 50,
|
|
152
|
-
max_number: int = None
|
|
154
|
+
max_number: int = None, include_non_discoverable : bool = False)\
|
|
155
|
+
-> AsyncGenerator[V3RoomDetail, None]:
|
|
153
156
|
"""Search for rooms according to the specified criteria.
|
|
154
157
|
Wraps the `Search Rooms V3 <https://developers.symphony.com/restapi/reference/search-rooms-v3>`_ endpoint.
|
|
155
158
|
|
|
156
159
|
:param query: the search criteria.
|
|
157
160
|
:param chunk_size: the maximum number of elements to retrieve in one underlying HTTP call.
|
|
158
161
|
:param max_number: the total maximum number of elements to retrieve.
|
|
162
|
+
:param include_non_discoverable: set to `True` to include rooms not publicly searchable, false by default.
|
|
159
163
|
:return: an asynchronous generator of the rooms matching the search criteria.
|
|
160
164
|
"""
|
|
161
165
|
|
|
162
166
|
async def search_rooms_one_page(skip, limit):
|
|
163
|
-
result = await self.search_rooms(query, skip, limit)
|
|
167
|
+
result = await self.search_rooms(query, skip, limit, include_non_discoverable)
|
|
164
168
|
return result.rooms if result.rooms else None
|
|
165
169
|
|
|
166
170
|
return offset_based_pagination(search_rooms_one_page, chunk_size, max_number)
|
|
@@ -346,6 +350,39 @@ class StreamService(OboStreamService):
|
|
|
346
350
|
|
|
347
351
|
return offset_based_pagination(list_streams_admin_one_page, chunk_size, max_number)
|
|
348
352
|
|
|
353
|
+
@retry
|
|
354
|
+
async def list_user_streams_admin(self, uid: int, stream_filter: StreamFilter = None, skip: int = 0,
|
|
355
|
+
limit: int = 50) -> StreamList:
|
|
356
|
+
"""Retrieve a list of all streams of which a user is a member.
|
|
357
|
+
Wraps the `User Streams <https://developers.symphony.com/restapi/v20.16/reference#user-streams>`_ endpoint.
|
|
358
|
+
|
|
359
|
+
:param uid: the ID of the user.
|
|
360
|
+
:param stream_filter: the filtering criteria for the streams.
|
|
361
|
+
:param skip: the number of streams to skip.
|
|
362
|
+
:param limit: the maximum number of streams to retrieve. Must be less or equal than 1000.
|
|
363
|
+
:return: the list of streams for the specified user.
|
|
364
|
+
"""
|
|
365
|
+
return await self._streams_api.v1_admin_user_uid_streams_list_post(
|
|
366
|
+
uid=uid, filter=stream_filter, skip=skip, limit=limit, session_token=await self._auth_session.session_token
|
|
367
|
+
)
|
|
368
|
+
|
|
369
|
+
async def list_all_user_streams_admin(self, uid: int, stream_filter: StreamFilter = None, chunk_size: int = 50,
|
|
370
|
+
max_number: int = None) -> AsyncGenerator[StreamAttributes, None]:
|
|
371
|
+
"""Retrieves all streams of which a user is a member, handling pagination automatically.
|
|
372
|
+
Wraps the `User Streams <https://developers.symphony.com/restapi/v20.16/reference#user-streams>`_ endpoint.
|
|
373
|
+
|
|
374
|
+
:param uid: the ID of the user.
|
|
375
|
+
:param stream_filter: the filtering criteria for the streams.
|
|
376
|
+
:param chunk_size: the maximum number of streams to retrieve in one underlying HTTP call.
|
|
377
|
+
:param max_number: the total maximum number of streams to retrieve.
|
|
378
|
+
:return: an asynchronous generator of the streams.
|
|
379
|
+
"""
|
|
380
|
+
async def list_streams_one_page(skip, limit):
|
|
381
|
+
result = await self.list_user_streams_admin(uid, stream_filter, skip, limit)
|
|
382
|
+
return result.value if result else None
|
|
383
|
+
|
|
384
|
+
return offset_based_pagination(list_streams_one_page, chunk_size, max_number)
|
|
385
|
+
|
|
349
386
|
@retry
|
|
350
387
|
async def list_stream_members(self, stream_id: str, skip: int = 0, limit: int = 100) -> V2MembershipList:
|
|
351
388
|
"""List the current members of an existing stream. The stream can be of type IM, MIM, or ROOM.
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import base64
|
|
2
|
+
import json
|
|
3
|
+
from pathlib import Path
|
|
2
4
|
from typing import Union, AsyncGenerator
|
|
3
5
|
|
|
4
6
|
from symphony.bdk.core.auth.auth_session import AuthSession
|
|
@@ -21,6 +23,7 @@ from symphony.bdk.gen.pod_model.followers_list import FollowersList
|
|
|
21
23
|
from symphony.bdk.gen.pod_model.followers_list_response import FollowersListResponse
|
|
22
24
|
from symphony.bdk.gen.pod_model.following_list_response import FollowingListResponse
|
|
23
25
|
from symphony.bdk.gen.pod_model.role_detail import RoleDetail
|
|
26
|
+
from symphony.bdk.gen.pod_model.service_account_manifest import ServiceAccountManifest
|
|
24
27
|
from symphony.bdk.gen.pod_model.string_id import StringId
|
|
25
28
|
from symphony.bdk.gen.pod_model.user_filter import UserFilter
|
|
26
29
|
from symphony.bdk.gen.pod_model.user_id_list import UserIdList
|
|
@@ -260,10 +263,12 @@ class UserService(OboUserService):
|
|
|
260
263
|
audit_trail_api: AuditTrailApi,
|
|
261
264
|
system_api: SystemApi,
|
|
262
265
|
auth_session: AuthSession,
|
|
263
|
-
retry_config: BdkRetryConfig
|
|
266
|
+
retry_config: BdkRetryConfig,
|
|
267
|
+
manifest: str):
|
|
264
268
|
super().__init__(user_api, users_api, auth_session, retry_config)
|
|
265
269
|
self._audit_trail_api = audit_trail_api
|
|
266
270
|
self._system_api = system_api
|
|
271
|
+
self._manifest = manifest
|
|
267
272
|
|
|
268
273
|
@retry
|
|
269
274
|
async def get_user_detail(
|
|
@@ -898,3 +903,40 @@ class UserService(OboUserService):
|
|
|
898
903
|
}
|
|
899
904
|
|
|
900
905
|
await self._user_api.v1_admin_user_user_id_suspension_update_put(**params)
|
|
906
|
+
|
|
907
|
+
@retry
|
|
908
|
+
async def update_manifest_from_json(self, manifest_data: str) -> None:
|
|
909
|
+
"""
|
|
910
|
+
Updates the user manifest from a JSON string.
|
|
911
|
+
|
|
912
|
+
:param manifest_data: A JSON string.
|
|
913
|
+
:raises json.JSONDecodeError: If the string is not valid JSON.
|
|
914
|
+
"""
|
|
915
|
+
await self._user_api.v1_user_manifest_own_post(
|
|
916
|
+
session_token=await self._auth_session.session_token,
|
|
917
|
+
manifest=ServiceAccountManifest(manifest_data)
|
|
918
|
+
)
|
|
919
|
+
|
|
920
|
+
async def update_manifest_from_file(self) -> None:
|
|
921
|
+
"""
|
|
922
|
+
Updates the user manifest using the file mentioned in config.yaml under 'manifest'.
|
|
923
|
+
|
|
924
|
+
:raises FileNotFoundError: If the file does not exist.
|
|
925
|
+
:raises json.JSONDecodeError: If the file content is not valid JSON.
|
|
926
|
+
:raises IOError: If the file can't be read.
|
|
927
|
+
"""
|
|
928
|
+
file_path = Path(self._manifest)
|
|
929
|
+
|
|
930
|
+
with file_path.open('r', encoding='utf-8') as f:
|
|
931
|
+
content = json.load(f)
|
|
932
|
+
manifest_text = json.dumps(content)
|
|
933
|
+
|
|
934
|
+
await self._user_api.v1_user_manifest_own_post(
|
|
935
|
+
session_token=await self._auth_session.session_token,
|
|
936
|
+
manifest=ServiceAccountManifest(manifest_text)
|
|
937
|
+
)
|
|
938
|
+
|
|
939
|
+
@retry
|
|
940
|
+
async def get_manifest(self) -> ServiceAccountManifest:
|
|
941
|
+
"""Retrieves own user manifest"""
|
|
942
|
+
return await self._user_api.v1_user_manifest_own_get(session_token=await self._auth_session.session_token)
|
|
File without changes
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import re
|
|
2
|
+
from datetime import datetime, timezone
|
|
3
|
+
|
|
4
|
+
from symphony.bdk.core.auth.auth_session import AuthSession
|
|
5
|
+
from symphony.bdk.core.auth.jwt_helper import generate_expiration_time
|
|
6
|
+
from symphony.bdk.core.config.model.bdk_retry_config import BdkRetryConfig
|
|
7
|
+
from symphony.bdk.core.retry import retry
|
|
8
|
+
from symphony.bdk.gen.agent_api.signals_api import SignalsApi
|
|
9
|
+
from symphony.bdk.gen.exceptions import ApiException
|
|
10
|
+
|
|
11
|
+
MIN_MAJOR_VERSION = 24
|
|
12
|
+
MIN_MINOR_VERSION = 12
|
|
13
|
+
VERSION_REGEXP = r"Agent-(\d+)\.(\d+)\..*"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class AgentVersionService:
|
|
17
|
+
"""Service class has one purpose only. It checks if version of agents supports simplified key delivery mechanism
|
|
18
|
+
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
def __init__(self, signals_api: SignalsApi, retry_config: BdkRetryConfig):
|
|
22
|
+
self._signals_api = signals_api
|
|
23
|
+
self._retry_config = retry_config
|
|
24
|
+
self._is_skd_supported = None
|
|
25
|
+
self._expire_at = -1
|
|
26
|
+
|
|
27
|
+
async def is_skd_supported(self) -> bool:
|
|
28
|
+
""" AgentVersionService stores cached version flag.
|
|
29
|
+
Caching interval is the same as in to session token caching.
|
|
30
|
+
Once cache is expired it calls agent info api to update version.
|
|
31
|
+
|
|
32
|
+
:return: boolean flag if skd supported for agent
|
|
33
|
+
"""
|
|
34
|
+
if (
|
|
35
|
+
self._is_skd_supported is not None
|
|
36
|
+
and self._expire_at
|
|
37
|
+
> datetime.now(timezone.utc).timestamp()
|
|
38
|
+
):
|
|
39
|
+
return self._is_skd_supported
|
|
40
|
+
self._expire_at = generate_expiration_time()
|
|
41
|
+
self._is_skd_supported = await self._get_agent_skd_support()
|
|
42
|
+
return self._is_skd_supported
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@retry
|
|
46
|
+
async def _get_agent_skd_support(self) -> bool:
|
|
47
|
+
try:
|
|
48
|
+
agent_info = await self._signals_api.v1_info_get()
|
|
49
|
+
if not agent_info or not agent_info.version:
|
|
50
|
+
return False
|
|
51
|
+
except ApiException:
|
|
52
|
+
return False
|
|
53
|
+
agent_major_version, agent_minor_version = self._parse_version(agent_info.version)
|
|
54
|
+
if not agent_major_version:
|
|
55
|
+
return False
|
|
56
|
+
if agent_major_version == MIN_MAJOR_VERSION:
|
|
57
|
+
return agent_minor_version >= MIN_MINOR_VERSION
|
|
58
|
+
return agent_major_version > MIN_MAJOR_VERSION
|
|
59
|
+
|
|
60
|
+
@staticmethod
|
|
61
|
+
def _parse_version(version_string):
|
|
62
|
+
if not version_string:
|
|
63
|
+
return None, None
|
|
64
|
+
match = re.match(VERSION_REGEXP, version_string)
|
|
65
|
+
if match:
|
|
66
|
+
return int(match.group(1)), int(match.group(2))
|
|
67
|
+
return None, None
|
|
@@ -18,6 +18,7 @@ from symphony.bdk.core.service.session.session_service import SessionService
|
|
|
18
18
|
from symphony.bdk.core.service.signal.signal_service import SignalService, OboSignalService
|
|
19
19
|
from symphony.bdk.core.service.stream.stream_service import StreamService, OboStreamService
|
|
20
20
|
from symphony.bdk.core.service.user.user_service import UserService, OboUserService
|
|
21
|
+
from symphony.bdk.core.service.version.agent_version_service import AgentVersionService
|
|
21
22
|
from symphony.bdk.gen.agent_api.attachments_api import AttachmentsApi
|
|
22
23
|
from symphony.bdk.gen.agent_api.audit_trail_api import AuditTrailApi
|
|
23
24
|
from symphony.bdk.gen.agent_api.datafeed_api import DatafeedApi
|
|
@@ -74,7 +75,8 @@ class ServiceFactory:
|
|
|
74
75
|
AuditTrailApi(self._agent_client),
|
|
75
76
|
PodSystemApi(self._pod_client),
|
|
76
77
|
self._auth_session,
|
|
77
|
-
self._config.retry
|
|
78
|
+
self._config.retry,
|
|
79
|
+
self._config.manifest
|
|
78
80
|
)
|
|
79
81
|
|
|
80
82
|
def get_message_service(self) -> MessageService:
|
|
@@ -202,6 +204,14 @@ class ServiceFactory:
|
|
|
202
204
|
self._config.retry
|
|
203
205
|
)
|
|
204
206
|
|
|
207
|
+
def get_agent_version_service(self) -> AgentVersionService:
|
|
208
|
+
"""Returns a fully initialized AgentVersionService
|
|
209
|
+
|
|
210
|
+
:return: a new AgentVersionService instance
|
|
211
|
+
"""
|
|
212
|
+
return AgentVersionService(SignalsApi(self._agent_client),
|
|
213
|
+
self._config.retry)
|
|
214
|
+
|
|
205
215
|
|
|
206
216
|
class OboServiceFactory:
|
|
207
217
|
"""Factory responsible for creating BDK service instances for OBO-enabled endpoints only:
|
|
@@ -105,7 +105,8 @@ class SymphonyBdk:
|
|
|
105
105
|
"You can however use services in OBO mode if app authentication is configured.")
|
|
106
106
|
|
|
107
107
|
def _initialize_bot_services(self):
|
|
108
|
-
|
|
108
|
+
bot_authenticator = self._authenticator_factory.get_bot_authenticator()
|
|
109
|
+
self._bot_session = AuthSession(bot_authenticator)
|
|
109
110
|
self._service_factory = ServiceFactory(self._api_client_factory, self._bot_session, self._config)
|
|
110
111
|
self._user_service = self._service_factory.get_user_service()
|
|
111
112
|
self._message_service = self._service_factory.get_message_service()
|
|
@@ -123,6 +124,7 @@ class SymphonyBdk:
|
|
|
123
124
|
self._datafeed_loop.subscribe(self._activity_registry)
|
|
124
125
|
# initialises extension service and register decorated extensions
|
|
125
126
|
self._extension_service = ExtensionService(self._api_client_factory, self._bot_session, self._config)
|
|
127
|
+
bot_authenticator.agent_version_service = self._service_factory.get_agent_version_service()
|
|
126
128
|
|
|
127
129
|
@bot_service
|
|
128
130
|
def bot_session(self) -> AuthSession:
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
This document refers to Symphony API calls to send and receive messages and content. They need the on-premise Agent installed to perform decryption/encryption of content. - sessionToken and keyManagerToken can be obtained by calling the authenticationAPI on the symphony back end and the key manager respectively. Refer to the methods described in authenticatorAPI.yaml. - Actions are defined to be atomic, ie will succeed in their entirety or fail and have changed nothing. - If it returns a 40X status then it will have sent no message to any stream even if a request to some subset of the requested streams would have succeeded. - If this contract cannot be met for any reason then this is an error and the response code will be 50X. - MessageML is a markup language for messages. See reference here: https://rest-api.symphony.com/docs/messagemlv2 - **Real Time Events**: The following events are returned when reading from a real time messages and events stream (\"datafeed\"). These events will be returned for datafeeds created with the v5 endpoints. To know more about the endpoints, refer to Create Messages/Events Stream and Read Messages/Events Stream. Unless otherwise specified, all events were added in 1.46. # noqa: E501
|
|
5
5
|
|
|
6
|
-
The version of the OpenAPI document:
|
|
6
|
+
The version of the OpenAPI document: 24.12.1
|
|
7
7
|
Generated by: https://openapi-generator.tech
|
|
8
8
|
"""
|
|
9
9
|
|
|
@@ -49,13 +49,12 @@ class AttachmentsApi(object):
|
|
|
49
49
|
'all': [
|
|
50
50
|
'sid',
|
|
51
51
|
'session_token',
|
|
52
|
-
'key_manager_token',
|
|
53
52
|
'file',
|
|
53
|
+
'key_manager_token',
|
|
54
54
|
],
|
|
55
55
|
'required': [
|
|
56
56
|
'sid',
|
|
57
57
|
'session_token',
|
|
58
|
-
'key_manager_token',
|
|
59
58
|
'file',
|
|
60
59
|
],
|
|
61
60
|
'nullable': [
|
|
@@ -75,22 +74,22 @@ class AttachmentsApi(object):
|
|
|
75
74
|
(str,),
|
|
76
75
|
'session_token':
|
|
77
76
|
(str,),
|
|
78
|
-
'key_manager_token':
|
|
79
|
-
(str,),
|
|
80
77
|
'file':
|
|
81
78
|
(file_type,),
|
|
79
|
+
'key_manager_token':
|
|
80
|
+
(str,),
|
|
82
81
|
},
|
|
83
82
|
'attribute_map': {
|
|
84
83
|
'sid': 'sid',
|
|
85
84
|
'session_token': 'sessionToken',
|
|
86
|
-
'key_manager_token': 'keyManagerToken',
|
|
87
85
|
'file': 'file',
|
|
86
|
+
'key_manager_token': 'keyManagerToken',
|
|
88
87
|
},
|
|
89
88
|
'location_map': {
|
|
90
89
|
'sid': 'path',
|
|
91
90
|
'session_token': 'header',
|
|
92
|
-
'key_manager_token': 'header',
|
|
93
91
|
'file': 'form',
|
|
92
|
+
'key_manager_token': 'header',
|
|
94
93
|
},
|
|
95
94
|
'collection_format_map': {
|
|
96
95
|
}
|
|
@@ -127,7 +126,6 @@ class AttachmentsApi(object):
|
|
|
127
126
|
'file_id',
|
|
128
127
|
'message_id',
|
|
129
128
|
'session_token',
|
|
130
|
-
'key_manager_token',
|
|
131
129
|
],
|
|
132
130
|
'nullable': [
|
|
133
131
|
],
|
|
@@ -251,7 +249,6 @@ class AttachmentsApi(object):
|
|
|
251
249
|
self,
|
|
252
250
|
sid,
|
|
253
251
|
session_token,
|
|
254
|
-
key_manager_token,
|
|
255
252
|
file,
|
|
256
253
|
**kwargs
|
|
257
254
|
):
|
|
@@ -261,16 +258,16 @@ class AttachmentsApi(object):
|
|
|
261
258
|
This method makes a synchronous HTTP request by default. To make an
|
|
262
259
|
asynchronous HTTP request, please pass async_req=True
|
|
263
260
|
|
|
264
|
-
>>> thread = agent_api.v1_stream_sid_attachment_create_post(sid, session_token,
|
|
261
|
+
>>> thread = agent_api.v1_stream_sid_attachment_create_post(sid, session_token, file, async_req=True)
|
|
265
262
|
>>> result = thread.get()
|
|
266
263
|
|
|
267
264
|
Args:
|
|
268
265
|
sid (str): Stream ID
|
|
269
266
|
session_token (str): Session authentication token.
|
|
270
|
-
key_manager_token (str): Key Manager authentication token.
|
|
271
267
|
file (file_type): The attachment body.
|
|
272
268
|
|
|
273
269
|
Keyword Args:
|
|
270
|
+
key_manager_token (str): Key Manager authentication token.. [optional]
|
|
274
271
|
_return_http_data_only (bool): response data without head status
|
|
275
272
|
code and headers. Default is True.
|
|
276
273
|
_preload_content (bool): if False, the urllib3.HTTPResponse object
|
|
@@ -331,8 +328,6 @@ class AttachmentsApi(object):
|
|
|
331
328
|
sid
|
|
332
329
|
kwargs['session_token'] = \
|
|
333
330
|
session_token
|
|
334
|
-
kwargs['key_manager_token'] = \
|
|
335
|
-
key_manager_token
|
|
336
331
|
kwargs['file'] = \
|
|
337
332
|
file
|
|
338
333
|
return self.v1_stream_sid_attachment_create_post_endpoint.call_with_http_info(**kwargs)
|
|
@@ -343,7 +338,6 @@ class AttachmentsApi(object):
|
|
|
343
338
|
file_id,
|
|
344
339
|
message_id,
|
|
345
340
|
session_token,
|
|
346
|
-
key_manager_token,
|
|
347
341
|
**kwargs
|
|
348
342
|
):
|
|
349
343
|
"""Download an attachment. # noqa: E501
|
|
@@ -352,7 +346,7 @@ class AttachmentsApi(object):
|
|
|
352
346
|
This method makes a synchronous HTTP request by default. To make an
|
|
353
347
|
asynchronous HTTP request, please pass async_req=True
|
|
354
348
|
|
|
355
|
-
>>> thread = agent_api.v1_stream_sid_attachment_get(sid, file_id, message_id, session_token,
|
|
349
|
+
>>> thread = agent_api.v1_stream_sid_attachment_get(sid, file_id, message_id, session_token, async_req=True)
|
|
356
350
|
>>> result = thread.get()
|
|
357
351
|
|
|
358
352
|
Args:
|
|
@@ -360,9 +354,9 @@ class AttachmentsApi(object):
|
|
|
360
354
|
file_id (str): The attachment ID (Base64-encoded)
|
|
361
355
|
message_id (str): The ID of the message containing the attachment
|
|
362
356
|
session_token (str): Session authentication token.
|
|
363
|
-
key_manager_token (str): Key Manager authentication token.
|
|
364
357
|
|
|
365
358
|
Keyword Args:
|
|
359
|
+
key_manager_token (str): Key Manager authentication token.. [optional]
|
|
366
360
|
_return_http_data_only (bool): response data without head status
|
|
367
361
|
code and headers. Default is True.
|
|
368
362
|
_preload_content (bool): if False, the urllib3.HTTPResponse object
|
|
@@ -427,8 +421,6 @@ class AttachmentsApi(object):
|
|
|
427
421
|
message_id
|
|
428
422
|
kwargs['session_token'] = \
|
|
429
423
|
session_token
|
|
430
|
-
kwargs['key_manager_token'] = \
|
|
431
|
-
key_manager_token
|
|
432
424
|
return self.v1_stream_sid_attachment_get_endpoint.call_with_http_info(**kwargs)
|
|
433
425
|
|
|
434
426
|
def v3_stream_sid_attachment_create_post(
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
This document refers to Symphony API calls to send and receive messages and content. They need the on-premise Agent installed to perform decryption/encryption of content. - sessionToken and keyManagerToken can be obtained by calling the authenticationAPI on the symphony back end and the key manager respectively. Refer to the methods described in authenticatorAPI.yaml. - Actions are defined to be atomic, ie will succeed in their entirety or fail and have changed nothing. - If it returns a 40X status then it will have sent no message to any stream even if a request to some subset of the requested streams would have succeeded. - If this contract cannot be met for any reason then this is an error and the response code will be 50X. - MessageML is a markup language for messages. See reference here: https://rest-api.symphony.com/docs/messagemlv2 - **Real Time Events**: The following events are returned when reading from a real time messages and events stream (\"datafeed\"). These events will be returned for datafeeds created with the v5 endpoints. To know more about the endpoints, refer to Create Messages/Events Stream and Read Messages/Events Stream. Unless otherwise specified, all events were added in 1.46. # noqa: E501
|
|
5
5
|
|
|
6
|
-
The version of the OpenAPI document:
|
|
6
|
+
The version of the OpenAPI document: 24.12.1
|
|
7
7
|
Generated by: https://openapi-generator.tech
|
|
8
8
|
"""
|
|
9
9
|
|
|
@@ -48,8 +48,8 @@ class AuditTrailApi(object):
|
|
|
48
48
|
params_map={
|
|
49
49
|
'all': [
|
|
50
50
|
'session_token',
|
|
51
|
-
'key_manager_token',
|
|
52
51
|
'start_timestamp',
|
|
52
|
+
'key_manager_token',
|
|
53
53
|
'end_timestamp',
|
|
54
54
|
'before',
|
|
55
55
|
'after',
|
|
@@ -59,7 +59,6 @@ class AuditTrailApi(object):
|
|
|
59
59
|
],
|
|
60
60
|
'required': [
|
|
61
61
|
'session_token',
|
|
62
|
-
'key_manager_token',
|
|
63
62
|
'start_timestamp',
|
|
64
63
|
],
|
|
65
64
|
'nullable': [
|
|
@@ -77,10 +76,10 @@ class AuditTrailApi(object):
|
|
|
77
76
|
'openapi_types': {
|
|
78
77
|
'session_token':
|
|
79
78
|
(str,),
|
|
80
|
-
'key_manager_token':
|
|
81
|
-
(str,),
|
|
82
79
|
'start_timestamp':
|
|
83
80
|
(int,),
|
|
81
|
+
'key_manager_token':
|
|
82
|
+
(str,),
|
|
84
83
|
'end_timestamp':
|
|
85
84
|
(int,),
|
|
86
85
|
'before':
|
|
@@ -96,8 +95,8 @@ class AuditTrailApi(object):
|
|
|
96
95
|
},
|
|
97
96
|
'attribute_map': {
|
|
98
97
|
'session_token': 'sessionToken',
|
|
99
|
-
'key_manager_token': 'keyManagerToken',
|
|
100
98
|
'start_timestamp': 'startTimestamp',
|
|
99
|
+
'key_manager_token': 'keyManagerToken',
|
|
101
100
|
'end_timestamp': 'endTimestamp',
|
|
102
101
|
'before': 'before',
|
|
103
102
|
'after': 'after',
|
|
@@ -107,8 +106,8 @@ class AuditTrailApi(object):
|
|
|
107
106
|
},
|
|
108
107
|
'location_map': {
|
|
109
108
|
'session_token': 'header',
|
|
110
|
-
'key_manager_token': 'header',
|
|
111
109
|
'start_timestamp': 'query',
|
|
110
|
+
'key_manager_token': 'header',
|
|
112
111
|
'end_timestamp': 'query',
|
|
113
112
|
'before': 'query',
|
|
114
113
|
'after': 'query',
|
|
@@ -131,7 +130,6 @@ class AuditTrailApi(object):
|
|
|
131
130
|
def v1_audittrail_privilegeduser_get(
|
|
132
131
|
self,
|
|
133
132
|
session_token,
|
|
134
|
-
key_manager_token,
|
|
135
133
|
start_timestamp,
|
|
136
134
|
**kwargs
|
|
137
135
|
):
|
|
@@ -141,15 +139,15 @@ class AuditTrailApi(object):
|
|
|
141
139
|
This method makes a synchronous HTTP request by default. To make an
|
|
142
140
|
asynchronous HTTP request, please pass async_req=True
|
|
143
141
|
|
|
144
|
-
>>> thread = agent_api.v1_audittrail_privilegeduser_get(session_token,
|
|
142
|
+
>>> thread = agent_api.v1_audittrail_privilegeduser_get(session_token, start_timestamp, async_req=True)
|
|
145
143
|
>>> result = thread.get()
|
|
146
144
|
|
|
147
145
|
Args:
|
|
148
146
|
session_token (str): Session authentication token.
|
|
149
|
-
key_manager_token (str): Key Manager authentication token.
|
|
150
147
|
start_timestamp (int): Start timestamp in unix timestamp in millseconds.
|
|
151
148
|
|
|
152
149
|
Keyword Args:
|
|
150
|
+
key_manager_token (str): Key Manager authentication token.. [optional]
|
|
153
151
|
end_timestamp (int): End timestamp in unix timestamp in millseconds. If not specified, it assumes to be current time.. [optional]
|
|
154
152
|
before (str): Return results from an opaque “before” cursor value as presented via a response cursor.. [optional]
|
|
155
153
|
after (str): Return results from an opaque “after” cursor value as presented via a response cursor.. [optional]
|
|
@@ -214,8 +212,6 @@ class AuditTrailApi(object):
|
|
|
214
212
|
kwargs['_host_index'] = kwargs.get('_host_index')
|
|
215
213
|
kwargs['session_token'] = \
|
|
216
214
|
session_token
|
|
217
|
-
kwargs['key_manager_token'] = \
|
|
218
|
-
key_manager_token
|
|
219
215
|
kwargs['start_timestamp'] = \
|
|
220
216
|
start_timestamp
|
|
221
217
|
return self.v1_audittrail_privilegeduser_get_endpoint.call_with_http_info(**kwargs)
|