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,9 +1,12 @@
|
|
|
1
1
|
import base64
|
|
2
|
-
|
|
2
|
+
import json
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from typing import AsyncGenerator, Union
|
|
3
5
|
|
|
4
6
|
from symphony.bdk.core.auth.auth_session import AuthSession
|
|
5
7
|
from symphony.bdk.core.config.model.bdk_retry_config import BdkRetryConfig
|
|
6
|
-
from symphony.bdk.core.
|
|
8
|
+
from symphony.bdk.core.retry import retry
|
|
9
|
+
from symphony.bdk.core.service.pagination import cursor_based_pagination, offset_based_pagination
|
|
7
10
|
from symphony.bdk.core.service.user.model.delegate_action_enum import DelegateActionEnum
|
|
8
11
|
from symphony.bdk.core.service.user.model.role_id import RoleId
|
|
9
12
|
from symphony.bdk.gen.agent_api.audit_trail_api import AuditTrailApi
|
|
@@ -21,20 +24,19 @@ from symphony.bdk.gen.pod_model.followers_list import FollowersList
|
|
|
21
24
|
from symphony.bdk.gen.pod_model.followers_list_response import FollowersListResponse
|
|
22
25
|
from symphony.bdk.gen.pod_model.following_list_response import FollowingListResponse
|
|
23
26
|
from symphony.bdk.gen.pod_model.role_detail import RoleDetail
|
|
27
|
+
from symphony.bdk.gen.pod_model.service_account_manifest import ServiceAccountManifest
|
|
24
28
|
from symphony.bdk.gen.pod_model.string_id import StringId
|
|
25
29
|
from symphony.bdk.gen.pod_model.user_filter import UserFilter
|
|
26
30
|
from symphony.bdk.gen.pod_model.user_id_list import UserIdList
|
|
27
31
|
from symphony.bdk.gen.pod_model.user_search_query import UserSearchQuery
|
|
28
32
|
from symphony.bdk.gen.pod_model.user_search_results import UserSearchResults
|
|
29
33
|
from symphony.bdk.gen.pod_model.user_status import UserStatus
|
|
34
|
+
from symphony.bdk.gen.pod_model.user_suspension import UserSuspension
|
|
30
35
|
from symphony.bdk.gen.pod_model.user_v2 import UserV2
|
|
31
36
|
from symphony.bdk.gen.pod_model.v2_user_attributes import V2UserAttributes
|
|
32
37
|
from symphony.bdk.gen.pod_model.v2_user_create import V2UserCreate
|
|
33
38
|
from symphony.bdk.gen.pod_model.v2_user_detail import V2UserDetail
|
|
34
39
|
from symphony.bdk.gen.pod_model.v2_user_list import V2UserList
|
|
35
|
-
from symphony.bdk.gen.pod_model.user_suspension import UserSuspension
|
|
36
|
-
|
|
37
|
-
from symphony.bdk.core.retry import retry
|
|
38
40
|
|
|
39
41
|
|
|
40
42
|
class OboUserService:
|
|
@@ -47,10 +49,13 @@ class OboUserService:
|
|
|
47
49
|
* follow/unfollow users
|
|
48
50
|
"""
|
|
49
51
|
|
|
50
|
-
def __init__(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
def __init__(
|
|
53
|
+
self,
|
|
54
|
+
user_api: UserApi,
|
|
55
|
+
users_api: UsersApi,
|
|
56
|
+
auth_session: AuthSession,
|
|
57
|
+
retry_config: BdkRetryConfig,
|
|
58
|
+
):
|
|
54
59
|
self._user_api = user_api
|
|
55
60
|
self._users_api = users_api
|
|
56
61
|
self._auth_session = auth_session
|
|
@@ -58,10 +63,7 @@ class OboUserService:
|
|
|
58
63
|
|
|
59
64
|
@retry
|
|
60
65
|
async def list_users_by_ids(
|
|
61
|
-
|
|
62
|
-
user_ids: [int],
|
|
63
|
-
local: bool = False,
|
|
64
|
-
active: bool = None
|
|
66
|
+
self, user_ids: [int], local: bool = False, active: bool = None
|
|
65
67
|
) -> V2UserList:
|
|
66
68
|
"""Search users by user ids.
|
|
67
69
|
See : `Users Lookup v3 <https://developers.symphony.com/restapi/reference/users-lookup-v3>`_
|
|
@@ -76,22 +78,19 @@ class OboUserService:
|
|
|
76
78
|
|
|
77
79
|
:return: Users found by user ids.
|
|
78
80
|
"""
|
|
79
|
-
user_ids_str =
|
|
81
|
+
user_ids_str = ",".join(map(str, user_ids))
|
|
80
82
|
params = {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
83
|
+
"uid": user_ids_str,
|
|
84
|
+
"local": local,
|
|
85
|
+
"session_token": await self._auth_session.session_token,
|
|
84
86
|
}
|
|
85
87
|
if active is not None:
|
|
86
|
-
params[
|
|
88
|
+
params["active"] = active
|
|
87
89
|
return await self._users_api.v3_users_get(**params)
|
|
88
90
|
|
|
89
91
|
@retry
|
|
90
92
|
async def list_users_by_emails(
|
|
91
|
-
|
|
92
|
-
emails: [str],
|
|
93
|
-
local: bool = False,
|
|
94
|
-
active: bool = None
|
|
93
|
+
self, emails: [str], local: bool = False, active: bool = None
|
|
95
94
|
) -> V2UserList:
|
|
96
95
|
"""Search users by emails.
|
|
97
96
|
See : `Users Lookup v3 <https://developers.symphony.com/restapi/reference/users-lookup-v3>`_
|
|
@@ -106,22 +105,18 @@ class OboUserService:
|
|
|
106
105
|
|
|
107
106
|
:return: Users found by emails.
|
|
108
107
|
"""
|
|
109
|
-
emails_str =
|
|
108
|
+
emails_str = ",".join(emails)
|
|
110
109
|
params = {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
110
|
+
"email": emails_str,
|
|
111
|
+
"local": local,
|
|
112
|
+
"session_token": await self._auth_session.session_token,
|
|
114
113
|
}
|
|
115
114
|
if active is not None:
|
|
116
|
-
params[
|
|
115
|
+
params["active"] = active
|
|
117
116
|
return await self._users_api.v3_users_get(**params)
|
|
118
117
|
|
|
119
118
|
@retry
|
|
120
|
-
async def list_users_by_usernames(
|
|
121
|
-
self,
|
|
122
|
-
usernames: [str],
|
|
123
|
-
active: bool = None
|
|
124
|
-
) -> V2UserList:
|
|
119
|
+
async def list_users_by_usernames(self, usernames: [str], active: bool = None) -> V2UserList:
|
|
125
120
|
"""Search users by usernames.
|
|
126
121
|
See : `Users Lookup v3 <https://developers.symphony.com/restapi/reference/users-lookup-v3>`_
|
|
127
122
|
|
|
@@ -132,23 +127,19 @@ class OboUserService:
|
|
|
132
127
|
|
|
133
128
|
:return: Users found by usernames.
|
|
134
129
|
"""
|
|
135
|
-
usernames_str =
|
|
130
|
+
usernames_str = ",".join(usernames)
|
|
136
131
|
params = {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
132
|
+
"username": usernames_str,
|
|
133
|
+
"local": True,
|
|
134
|
+
"session_token": await self._auth_session.session_token,
|
|
140
135
|
}
|
|
141
136
|
if active is not None:
|
|
142
|
-
params[
|
|
137
|
+
params["active"] = active
|
|
143
138
|
return await self._users_api.v3_users_get(**params)
|
|
144
139
|
|
|
145
140
|
@retry
|
|
146
141
|
async def search_users(
|
|
147
|
-
|
|
148
|
-
query: UserSearchQuery,
|
|
149
|
-
local: bool = False,
|
|
150
|
-
skip: int = 0,
|
|
151
|
-
limit: int = 50
|
|
142
|
+
self, query: UserSearchQuery, local: bool = False, skip: int = 0, limit: int = 50
|
|
152
143
|
) -> UserSearchResults:
|
|
153
144
|
"""Search for users by first name, last name, display name, and email; optionally, filter results by company,
|
|
154
145
|
title, location, marketCoverage, responsibility, function, or instrument.
|
|
@@ -165,20 +156,20 @@ class OboUserService:
|
|
|
165
156
|
|
|
166
157
|
"""
|
|
167
158
|
params = {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
159
|
+
"search_request": query,
|
|
160
|
+
"local": local,
|
|
161
|
+
"session_token": await self._auth_session.session_token,
|
|
162
|
+
"skip": skip,
|
|
163
|
+
"limit": limit,
|
|
173
164
|
}
|
|
174
165
|
return await self._users_api.v1_user_search_post(**params)
|
|
175
166
|
|
|
176
167
|
async def search_all_users(
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
168
|
+
self,
|
|
169
|
+
query: UserSearchQuery,
|
|
170
|
+
local: bool = False,
|
|
171
|
+
chunk_size: int = 50,
|
|
172
|
+
max_number: int = None,
|
|
182
173
|
) -> AsyncGenerator[UserV2, None]:
|
|
183
174
|
"""Search for users by first name, last name, display name, and email; optionally, filter results by company,
|
|
184
175
|
title, location, marketCoverage, responsibility, function, or instrument.
|
|
@@ -203,11 +194,7 @@ class OboUserService:
|
|
|
203
194
|
return offset_based_pagination(search_users_one_page, chunk_size, max_number)
|
|
204
195
|
|
|
205
196
|
@retry
|
|
206
|
-
async def follow_user(
|
|
207
|
-
self,
|
|
208
|
-
follower_ids: [int],
|
|
209
|
-
user_id: int
|
|
210
|
-
) -> None:
|
|
197
|
+
async def follow_user(self, follower_ids: [int], user_id: int) -> None:
|
|
211
198
|
"""Make a list of users to start following a specific user.
|
|
212
199
|
See: `Follow User <https://developers.symphony.com/restapi/reference/follow-user>`_
|
|
213
200
|
|
|
@@ -215,18 +202,14 @@ class OboUserService:
|
|
|
215
202
|
:param user_id: The id of the user to be followed.
|
|
216
203
|
"""
|
|
217
204
|
params = {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
205
|
+
"uid": user_id,
|
|
206
|
+
"uid_list": FollowersList(followers=UserIdList(value=follower_ids)),
|
|
207
|
+
"session_token": await self._auth_session.session_token,
|
|
221
208
|
}
|
|
222
209
|
await self._user_api.v1_user_uid_follow_post(**params)
|
|
223
210
|
|
|
224
211
|
@retry
|
|
225
|
-
async def unfollow_user(
|
|
226
|
-
self,
|
|
227
|
-
follower_ids: [int],
|
|
228
|
-
user_id: int
|
|
229
|
-
) -> None:
|
|
212
|
+
async def unfollow_user(self, follower_ids: [int], user_id: int) -> None:
|
|
230
213
|
"""Make a list of users to stop following a specific user.
|
|
231
214
|
See: `Unfollow User <https://developers.symphony.com/restapi/reference/unfollow-user>`_
|
|
232
215
|
|
|
@@ -234,9 +217,9 @@ class OboUserService:
|
|
|
234
217
|
:param user_id: The id of the user to be unfollowed.
|
|
235
218
|
"""
|
|
236
219
|
params = {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
220
|
+
"uid": user_id,
|
|
221
|
+
"uid_list": FollowersList(followers=UserIdList(value=follower_ids)),
|
|
222
|
+
"session_token": await self._auth_session.session_token,
|
|
240
223
|
}
|
|
241
224
|
await self._user_api.v1_user_uid_unfollow_post(**params)
|
|
242
225
|
|
|
@@ -255,39 +238,34 @@ class UserService(OboUserService):
|
|
|
255
238
|
* Get, update status of a user
|
|
256
239
|
"""
|
|
257
240
|
|
|
258
|
-
def __init__(
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
241
|
+
def __init__(
|
|
242
|
+
self,
|
|
243
|
+
user_api: UserApi,
|
|
244
|
+
users_api: UsersApi,
|
|
245
|
+
audit_trail_api: AuditTrailApi,
|
|
246
|
+
system_api: SystemApi,
|
|
247
|
+
auth_session: AuthSession,
|
|
248
|
+
retry_config: BdkRetryConfig,
|
|
249
|
+
manifest: str,
|
|
250
|
+
):
|
|
264
251
|
super().__init__(user_api, users_api, auth_session, retry_config)
|
|
265
252
|
self._audit_trail_api = audit_trail_api
|
|
266
253
|
self._system_api = system_api
|
|
254
|
+
self._manifest = manifest
|
|
267
255
|
|
|
268
256
|
@retry
|
|
269
|
-
async def get_user_detail(
|
|
270
|
-
self,
|
|
271
|
-
user_id: int
|
|
272
|
-
) -> V2UserDetail:
|
|
257
|
+
async def get_user_detail(self, user_id: int) -> V2UserDetail:
|
|
273
258
|
"""Retrieve user details of a particular user.
|
|
274
259
|
See: 'Get User v2 <https://developers.symphony.com/restapi/reference/get-user-v2>'_
|
|
275
260
|
|
|
276
261
|
:param user_id: User Id
|
|
277
262
|
:return: Details of the user.
|
|
278
263
|
"""
|
|
279
|
-
params = {
|
|
280
|
-
'uid': user_id,
|
|
281
|
-
'session_token': await self._auth_session.session_token
|
|
282
|
-
}
|
|
264
|
+
params = {"uid": user_id, "session_token": await self._auth_session.session_token}
|
|
283
265
|
return await self._user_api.v2_admin_user_uid_get(**params)
|
|
284
266
|
|
|
285
267
|
@retry
|
|
286
|
-
async def list_user_details(
|
|
287
|
-
self,
|
|
288
|
-
skip: int = 0,
|
|
289
|
-
limit: int = 50
|
|
290
|
-
) -> [V2UserDetail]:
|
|
268
|
+
async def list_user_details(self, skip: int = 0, limit: int = 50) -> [V2UserDetail]:
|
|
291
269
|
"""Retrieve all users in the company (pod).
|
|
292
270
|
See: 'List Users V2 <https://developers.symphony.com/restapi/reference/list-users-v2>'_
|
|
293
271
|
|
|
@@ -296,17 +274,15 @@ class UserService(OboUserService):
|
|
|
296
274
|
:return: List of details of all users in the company.
|
|
297
275
|
"""
|
|
298
276
|
params = {
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
277
|
+
"session_token": await self._auth_session.session_token,
|
|
278
|
+
"skip": skip,
|
|
279
|
+
"limit": limit,
|
|
302
280
|
}
|
|
303
281
|
user_detail_list = await self._user_api.v2_admin_user_list_get(**params)
|
|
304
282
|
return user_detail_list.value
|
|
305
283
|
|
|
306
284
|
async def list_all_user_details(
|
|
307
|
-
|
|
308
|
-
chunk_size: int = 50,
|
|
309
|
-
max_number: int = None
|
|
285
|
+
self, chunk_size: int = 50, max_number: int = None
|
|
310
286
|
) -> AsyncGenerator[V2UserDetail, None]:
|
|
311
287
|
"""Retrieve all users in the company (pod).
|
|
312
288
|
Same as :func:`~list_user_details` but returns an asynchronous generator which performs the paginated calls with
|
|
@@ -322,10 +298,7 @@ class UserService(OboUserService):
|
|
|
322
298
|
|
|
323
299
|
@retry
|
|
324
300
|
async def list_user_details_by_filter(
|
|
325
|
-
|
|
326
|
-
user_filter: UserFilter,
|
|
327
|
-
skip: int = 0,
|
|
328
|
-
limit: int = 50
|
|
301
|
+
self, user_filter: UserFilter, skip: int = 0, limit: int = 50
|
|
329
302
|
) -> [V2UserDetail]:
|
|
330
303
|
"""Retrieve a list of users in the company (pod) by a filter.
|
|
331
304
|
See: `Find Users V1 <https://developers.symphony.com/restapi/reference/find-users>`_
|
|
@@ -336,19 +309,16 @@ class UserService(OboUserService):
|
|
|
336
309
|
:return: List of retrieved users.
|
|
337
310
|
"""
|
|
338
311
|
params = {
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
312
|
+
"payload": user_filter,
|
|
313
|
+
"session_token": await self._auth_session.session_token,
|
|
314
|
+
"skip": skip,
|
|
315
|
+
"limit": limit,
|
|
343
316
|
}
|
|
344
317
|
user_detail_list = await self._user_api.v1_admin_user_find_post(**params)
|
|
345
318
|
return user_detail_list.value
|
|
346
319
|
|
|
347
320
|
async def list_all_user_details_by_filter(
|
|
348
|
-
|
|
349
|
-
user_filter: UserFilter,
|
|
350
|
-
chunk_size: int = 50,
|
|
351
|
-
max_number: int = None
|
|
321
|
+
self, user_filter: UserFilter, chunk_size: int = 50, max_number: int = None
|
|
352
322
|
) -> AsyncGenerator[V2UserDetail, None]:
|
|
353
323
|
"""Retrieve an asynchronous generator of users in the company (pod) by a filter.
|
|
354
324
|
Same as :func:`~list_user_details_by_filter` but returns an generator which performs the paginated
|
|
@@ -368,11 +338,7 @@ class UserService(OboUserService):
|
|
|
368
338
|
return offset_based_pagination(list_user_details_one_page, chunk_size, max_number)
|
|
369
339
|
|
|
370
340
|
@retry
|
|
371
|
-
async def add_role(
|
|
372
|
-
self,
|
|
373
|
-
user_id: int,
|
|
374
|
-
role_id: RoleId
|
|
375
|
-
) -> None:
|
|
341
|
+
async def add_role(self, user_id: int, role_id: RoleId) -> None:
|
|
376
342
|
"""Add a role to a user.
|
|
377
343
|
See: `Add Role <https://developers.symphony.com/restapi/reference/add-role>`_
|
|
378
344
|
|
|
@@ -380,9 +346,9 @@ class UserService(OboUserService):
|
|
|
380
346
|
:param role_id: role id
|
|
381
347
|
"""
|
|
382
348
|
params = {
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
349
|
+
"uid": user_id,
|
|
350
|
+
"payload": StringId(id=role_id.value),
|
|
351
|
+
"session_token": await self._auth_session.session_token,
|
|
386
352
|
}
|
|
387
353
|
await self._user_api.v1_admin_user_uid_roles_add_post(**params)
|
|
388
354
|
|
|
@@ -393,18 +359,12 @@ class UserService(OboUserService):
|
|
|
393
359
|
|
|
394
360
|
:return: List of all roles details in the pod.
|
|
395
361
|
"""
|
|
396
|
-
params = {
|
|
397
|
-
'session_token': await self._auth_session.session_token
|
|
398
|
-
}
|
|
362
|
+
params = {"session_token": await self._auth_session.session_token}
|
|
399
363
|
role_list = await self._system_api.v1_admin_system_roles_list_get(**params)
|
|
400
364
|
return role_list.value
|
|
401
365
|
|
|
402
366
|
@retry
|
|
403
|
-
async def remove_role(
|
|
404
|
-
self,
|
|
405
|
-
user_id: int,
|
|
406
|
-
role_id: RoleId
|
|
407
|
-
) -> None:
|
|
367
|
+
async def remove_role(self, user_id: int, role_id: RoleId) -> None:
|
|
408
368
|
"""Remove a role from a user.
|
|
409
369
|
See: `Remove Role <https://developers.symphony.com/restapi/reference/remove-role>`_
|
|
410
370
|
|
|
@@ -412,36 +372,26 @@ class UserService(OboUserService):
|
|
|
412
372
|
:param role_id: role id
|
|
413
373
|
"""
|
|
414
374
|
params = {
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
375
|
+
"uid": user_id,
|
|
376
|
+
"payload": StringId(id=role_id.value),
|
|
377
|
+
"session_token": await self._auth_session.session_token,
|
|
418
378
|
}
|
|
419
379
|
await self._user_api.v1_admin_user_uid_roles_remove_post(**params)
|
|
420
380
|
|
|
421
381
|
@retry
|
|
422
|
-
async def get_avatar(
|
|
423
|
-
self,
|
|
424
|
-
user_id: int
|
|
425
|
-
) -> [Avatar]:
|
|
382
|
+
async def get_avatar(self, user_id: int) -> [Avatar]:
|
|
426
383
|
"""Get the url of avatar of a user.
|
|
427
384
|
See: `User Avatar <https://developers.symphony.com/restapi/reference/user-avatar>`_
|
|
428
385
|
|
|
429
386
|
:param user_id: User id
|
|
430
387
|
:return: List of avatar urls of the user
|
|
431
388
|
"""
|
|
432
|
-
params = {
|
|
433
|
-
'uid': user_id,
|
|
434
|
-
'session_token': await self._auth_session.session_token
|
|
435
|
-
}
|
|
389
|
+
params = {"uid": user_id, "session_token": await self._auth_session.session_token}
|
|
436
390
|
avatar_list = await self._user_api.v1_admin_user_uid_avatar_get(**params)
|
|
437
391
|
return avatar_list.value
|
|
438
392
|
|
|
439
393
|
@retry
|
|
440
|
-
async def update_avatar(
|
|
441
|
-
self,
|
|
442
|
-
user_id: int,
|
|
443
|
-
image: Union[str, bytes]
|
|
444
|
-
) -> None:
|
|
394
|
+
async def update_avatar(self, user_id: int, image: Union[str, bytes]) -> None:
|
|
445
395
|
"""Update avatar of a user.
|
|
446
396
|
See: `Update User Avatar <https://developers.symphony.com/restapi/reference/update-user-avatar>`_
|
|
447
397
|
|
|
@@ -452,51 +402,35 @@ class UserService(OboUserService):
|
|
|
452
402
|
if isinstance(image, bytes):
|
|
453
403
|
image = str(base64.standard_b64encode(image))
|
|
454
404
|
params = {
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
405
|
+
"uid": user_id,
|
|
406
|
+
"payload": AvatarUpdate(image=image),
|
|
407
|
+
"session_token": await self._auth_session.session_token,
|
|
458
408
|
}
|
|
459
409
|
await self._user_api.v1_admin_user_uid_avatar_update_post(**params)
|
|
460
410
|
|
|
461
411
|
@retry
|
|
462
|
-
async def get_disclaimer(
|
|
463
|
-
self,
|
|
464
|
-
user_id: int
|
|
465
|
-
) -> Disclaimer:
|
|
412
|
+
async def get_disclaimer(self, user_id: int) -> Disclaimer:
|
|
466
413
|
"""Get disclaimer assigned to a user.
|
|
467
414
|
See: `User Disclaimer <https://developers.symphony.com/restapi/reference/user-disclaimer>`_
|
|
468
415
|
|
|
469
416
|
:param user_id: user id
|
|
470
417
|
:return: Disclaimer assigned to the user.
|
|
471
418
|
"""
|
|
472
|
-
params = {
|
|
473
|
-
'uid': user_id,
|
|
474
|
-
'session_token': await self._auth_session.session_token
|
|
475
|
-
}
|
|
419
|
+
params = {"uid": user_id, "session_token": await self._auth_session.session_token}
|
|
476
420
|
return await self._user_api.v1_admin_user_uid_disclaimer_get(**params)
|
|
477
421
|
|
|
478
422
|
@retry
|
|
479
|
-
async def remove_disclaimer(
|
|
480
|
-
self,
|
|
481
|
-
user_id: int
|
|
482
|
-
) -> None:
|
|
423
|
+
async def remove_disclaimer(self, user_id: int) -> None:
|
|
483
424
|
"""Unassign disclaimer from a user.
|
|
484
425
|
See: `Unassign User Disclaimer <https://developers.symphony.com/restapi/reference/unassign-user-disclaimer>`_
|
|
485
426
|
|
|
486
427
|
:param user_id: user id
|
|
487
428
|
"""
|
|
488
|
-
params = {
|
|
489
|
-
'uid': user_id,
|
|
490
|
-
'session_token': await self._auth_session.session_token
|
|
491
|
-
}
|
|
429
|
+
params = {"uid": user_id, "session_token": await self._auth_session.session_token}
|
|
492
430
|
await self._user_api.v1_admin_user_uid_disclaimer_delete(**params)
|
|
493
431
|
|
|
494
432
|
@retry
|
|
495
|
-
async def add_disclaimer(
|
|
496
|
-
self,
|
|
497
|
-
user_id: int,
|
|
498
|
-
disclaimer_id: str
|
|
499
|
-
) -> None:
|
|
433
|
+
async def add_disclaimer(self, user_id: int, disclaimer_id: str) -> None:
|
|
500
434
|
"""Assign disclaimer to a user.
|
|
501
435
|
See: `Update User Disclaimer <https://developers.symphony.com/restapi/reference/update-disclaimer>`_
|
|
502
436
|
|
|
@@ -504,36 +438,27 @@ class UserService(OboUserService):
|
|
|
504
438
|
:param disclaimer_id: Disclaimer to be assigned
|
|
505
439
|
"""
|
|
506
440
|
params = {
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
441
|
+
"uid": user_id,
|
|
442
|
+
"payload": StringId(id=disclaimer_id),
|
|
443
|
+
"session_token": await self._auth_session.session_token,
|
|
510
444
|
}
|
|
511
445
|
await self._user_api.v1_admin_user_uid_disclaimer_update_post(**params)
|
|
512
446
|
|
|
513
447
|
@retry
|
|
514
|
-
async def get_delegates(
|
|
515
|
-
self,
|
|
516
|
-
user_id: int
|
|
517
|
-
) -> [int]:
|
|
448
|
+
async def get_delegates(self, user_id: int) -> [int]:
|
|
518
449
|
"""Get delegates assigned to a user.
|
|
519
450
|
See: `User Delegates <https://developers.symphony.com/restapi/reference/delegates>`_
|
|
520
451
|
|
|
521
452
|
:param user_id: User id.
|
|
522
453
|
:return: List of delegates assigned to a user.
|
|
523
454
|
"""
|
|
524
|
-
params = {
|
|
525
|
-
'uid': user_id,
|
|
526
|
-
'session_token': await self._auth_session.session_token
|
|
527
|
-
}
|
|
455
|
+
params = {"uid": user_id, "session_token": await self._auth_session.session_token}
|
|
528
456
|
delegates_list = await self._user_api.v1_admin_user_uid_delegates_get(**params)
|
|
529
457
|
return delegates_list.value
|
|
530
458
|
|
|
531
459
|
@retry
|
|
532
460
|
async def update_delegates(
|
|
533
|
-
|
|
534
|
-
user_id: int,
|
|
535
|
-
delegate_user_id: int,
|
|
536
|
-
action: DelegateActionEnum
|
|
461
|
+
self, user_id: int, delegate_user_id: int, action: DelegateActionEnum
|
|
537
462
|
) -> None:
|
|
538
463
|
"""Update delegates assigned to a user.
|
|
539
464
|
See: `Update User Delegates <https://developers.symphony.com/restapi/reference/update-delegates>`_
|
|
@@ -543,36 +468,26 @@ class UserService(OboUserService):
|
|
|
543
468
|
:param action: Action to be performed
|
|
544
469
|
"""
|
|
545
470
|
params = {
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
471
|
+
"uid": user_id,
|
|
472
|
+
"payload": DelegateAction(user_id=delegate_user_id, action=action.value),
|
|
473
|
+
"session_token": await self._auth_session.session_token,
|
|
549
474
|
}
|
|
550
475
|
await self._user_api.v1_admin_user_uid_delegates_update_post(**params)
|
|
551
476
|
|
|
552
477
|
@retry
|
|
553
|
-
async def get_feature_entitlements(
|
|
554
|
-
self,
|
|
555
|
-
user_id: int
|
|
556
|
-
) -> [Feature]:
|
|
478
|
+
async def get_feature_entitlements(self, user_id: int) -> [Feature]:
|
|
557
479
|
"""Get feature entitlements of a user.
|
|
558
480
|
See: `User Features <https://developers.symphony.com/restapi/reference/features>`_
|
|
559
481
|
|
|
560
482
|
:param user_id: User id.
|
|
561
483
|
:return: List of feature entitlements of the user.
|
|
562
484
|
"""
|
|
563
|
-
params = {
|
|
564
|
-
'uid': user_id,
|
|
565
|
-
'session_token': await self._auth_session.session_token
|
|
566
|
-
}
|
|
485
|
+
params = {"uid": user_id, "session_token": await self._auth_session.session_token}
|
|
567
486
|
feature_list = await self._user_api.v1_admin_user_uid_features_get(**params)
|
|
568
487
|
return feature_list.value
|
|
569
488
|
|
|
570
489
|
@retry
|
|
571
|
-
async def update_feature_entitlements(
|
|
572
|
-
self,
|
|
573
|
-
user_id: int,
|
|
574
|
-
features: [Feature]
|
|
575
|
-
) -> None:
|
|
490
|
+
async def update_feature_entitlements(self, user_id: int, features: [Feature]) -> None:
|
|
576
491
|
"""Update feature entitlements of a user.
|
|
577
492
|
See: `Update User Features <https://developers.symphony.com/restapi/reference/update-features>`_
|
|
578
493
|
|
|
@@ -580,35 +495,25 @@ class UserService(OboUserService):
|
|
|
580
495
|
:param features: List of feature entitlements to be updated
|
|
581
496
|
"""
|
|
582
497
|
params = {
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
498
|
+
"uid": user_id,
|
|
499
|
+
"payload": FeatureList(value=features),
|
|
500
|
+
"session_token": await self._auth_session.session_token,
|
|
586
501
|
}
|
|
587
502
|
await self._user_api.v1_admin_user_uid_features_update_post(**params)
|
|
588
503
|
|
|
589
504
|
@retry
|
|
590
|
-
async def get_status(
|
|
591
|
-
self,
|
|
592
|
-
user_id: int
|
|
593
|
-
) -> UserStatus:
|
|
505
|
+
async def get_status(self, user_id: int) -> UserStatus:
|
|
594
506
|
"""Get status of a user.
|
|
595
507
|
See: `User Status <https://developers.symphony.com/restapi/reference/user-status>`_
|
|
596
508
|
|
|
597
509
|
:param user_id: User id.
|
|
598
510
|
:return: Status of the user.
|
|
599
511
|
"""
|
|
600
|
-
params = {
|
|
601
|
-
'uid': user_id,
|
|
602
|
-
'session_token': await self._auth_session.session_token
|
|
603
|
-
}
|
|
512
|
+
params = {"uid": user_id, "session_token": await self._auth_session.session_token}
|
|
604
513
|
return await self._user_api.v1_admin_user_uid_status_get(**params)
|
|
605
514
|
|
|
606
515
|
@retry
|
|
607
|
-
async def update_status(
|
|
608
|
-
self,
|
|
609
|
-
user_id: int,
|
|
610
|
-
user_status: UserStatus
|
|
611
|
-
) -> None:
|
|
516
|
+
async def update_status(self, user_id: int, user_status: UserStatus) -> None:
|
|
612
517
|
"""Update the status of a user.
|
|
613
518
|
See: `Update User Status <https://developers.symphony.com/restapi/reference/update-user-status>`_
|
|
614
519
|
|
|
@@ -616,19 +521,15 @@ class UserService(OboUserService):
|
|
|
616
521
|
:param user_status: Status to be updated to the user.
|
|
617
522
|
"""
|
|
618
523
|
params = {
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
524
|
+
"uid": user_id,
|
|
525
|
+
"payload": user_status,
|
|
526
|
+
"session_token": await self._auth_session.session_token,
|
|
622
527
|
}
|
|
623
528
|
await self._user_api.v1_admin_user_uid_status_update_post(**params)
|
|
624
529
|
|
|
625
530
|
@retry
|
|
626
531
|
async def list_user_followers(
|
|
627
|
-
|
|
628
|
-
user_id: int,
|
|
629
|
-
limit: int = 100,
|
|
630
|
-
before: str = None,
|
|
631
|
-
after: str = None
|
|
532
|
+
self, user_id: int, limit: int = 100, before: str = None, after: str = None
|
|
632
533
|
) -> FollowersListResponse:
|
|
633
534
|
"""Returns the list of followers of a specific user.
|
|
634
535
|
See: `List User Followers <https://developers.symphony.com/restapi/reference/list-user-followers>`_
|
|
@@ -640,21 +541,18 @@ class UserService(OboUserService):
|
|
|
640
541
|
:return: List of followers of a specific user.
|
|
641
542
|
"""
|
|
642
543
|
params = {
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
544
|
+
"uid": user_id,
|
|
545
|
+
"limit": limit,
|
|
546
|
+
"session_token": await self._auth_session.session_token,
|
|
646
547
|
}
|
|
647
548
|
if before is not None:
|
|
648
|
-
params[
|
|
549
|
+
params["before"] = before
|
|
649
550
|
if after is not None:
|
|
650
|
-
params[
|
|
551
|
+
params["after"] = after
|
|
651
552
|
return await self._user_api.v1_user_uid_followers_get(**params)
|
|
652
553
|
|
|
653
554
|
async def list_all_user_followers(
|
|
654
|
-
|
|
655
|
-
user_id: int,
|
|
656
|
-
chunk_size: int = 100,
|
|
657
|
-
max_number: int = None
|
|
555
|
+
self, user_id: int, chunk_size: int = 100, max_number: int = None
|
|
658
556
|
) -> AsyncGenerator[int, None]:
|
|
659
557
|
"""Returns an asynchronous generator of the IDs of users who are followers of a specific user.
|
|
660
558
|
See: `List User Followers <https://developers.symphony.com/restapi/reference/list-user-followers>`_
|
|
@@ -668,17 +566,13 @@ class UserService(OboUserService):
|
|
|
668
566
|
|
|
669
567
|
async def user_followers_one_page(limit, after=None):
|
|
670
568
|
result = await self.list_user_followers(user_id, limit, after=after)
|
|
671
|
-
return result.followers, getattr(result.pagination.cursors,
|
|
569
|
+
return result.followers, getattr(result.pagination.cursors, "after", None)
|
|
672
570
|
|
|
673
571
|
return cursor_based_pagination(user_followers_one_page, chunk_size, max_number)
|
|
674
572
|
|
|
675
573
|
@retry
|
|
676
574
|
async def list_users_following(
|
|
677
|
-
|
|
678
|
-
user_id: int,
|
|
679
|
-
limit: int = 100,
|
|
680
|
-
before: str = None,
|
|
681
|
-
after: str = None
|
|
575
|
+
self, user_id: int, limit: int = 100, before: str = None, after: str = None
|
|
682
576
|
) -> FollowingListResponse:
|
|
683
577
|
"""Returns the list of users followed by a specific user.
|
|
684
578
|
See: `List Users Followed <https://developers.symphony.com/restapi/reference/list-users-followed>`_
|
|
@@ -690,21 +584,18 @@ class UserService(OboUserService):
|
|
|
690
584
|
:return: The list of users followed by a specific user.
|
|
691
585
|
"""
|
|
692
586
|
params = {
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
587
|
+
"uid": user_id,
|
|
588
|
+
"limit": limit,
|
|
589
|
+
"session_token": await self._auth_session.session_token,
|
|
696
590
|
}
|
|
697
591
|
if before is not None:
|
|
698
|
-
params[
|
|
592
|
+
params["before"] = before
|
|
699
593
|
if after is not None:
|
|
700
|
-
params[
|
|
594
|
+
params["after"] = after
|
|
701
595
|
return await self._user_api.v1_user_uid_following_get(**params)
|
|
702
596
|
|
|
703
597
|
async def list_all_users_following(
|
|
704
|
-
|
|
705
|
-
user_id: int,
|
|
706
|
-
chunk_size: int = 100,
|
|
707
|
-
max_number: int = None
|
|
598
|
+
self, user_id: int, chunk_size: int = 100, max_number: int = None
|
|
708
599
|
) -> AsyncGenerator[int, None]:
|
|
709
600
|
"""Returns n asynchronous generator of the IDs of users followed by a given user.
|
|
710
601
|
See: `List Users Followed <https://developers.symphony.com/restapi/reference/list-users-followed>`_
|
|
@@ -718,33 +609,23 @@ class UserService(OboUserService):
|
|
|
718
609
|
|
|
719
610
|
async def user_following_one_page(limit, after=None):
|
|
720
611
|
result = await self.list_users_following(user_id, limit, after=after)
|
|
721
|
-
return result.following, getattr(result.pagination.cursors,
|
|
612
|
+
return result.following, getattr(result.pagination.cursors, "after", None)
|
|
722
613
|
|
|
723
614
|
return cursor_based_pagination(user_following_one_page, chunk_size, max_number)
|
|
724
615
|
|
|
725
616
|
@retry
|
|
726
|
-
async def create(
|
|
727
|
-
self,
|
|
728
|
-
payload: V2UserCreate
|
|
729
|
-
) -> V2UserDetail:
|
|
617
|
+
async def create(self, payload: V2UserCreate) -> V2UserDetail:
|
|
730
618
|
"""Create a new user.
|
|
731
619
|
See: `Create User v2 <https://developers.symphony.com/restapi/reference/create-user-v2>`_
|
|
732
620
|
|
|
733
621
|
:param payload: User's details to create.
|
|
734
622
|
:return: Created user details.
|
|
735
623
|
"""
|
|
736
|
-
params = {
|
|
737
|
-
'payload': payload,
|
|
738
|
-
'session_token': await self._auth_session.session_token
|
|
739
|
-
}
|
|
624
|
+
params = {"payload": payload, "session_token": await self._auth_session.session_token}
|
|
740
625
|
return await self._user_api.v2_admin_user_create_post(**params)
|
|
741
626
|
|
|
742
627
|
@retry
|
|
743
|
-
async def update(
|
|
744
|
-
self,
|
|
745
|
-
user_id: int,
|
|
746
|
-
payload: V2UserAttributes
|
|
747
|
-
) -> V2UserDetail:
|
|
628
|
+
async def update(self, user_id: int, payload: V2UserAttributes) -> V2UserDetail:
|
|
748
629
|
"""Updates an existing user.
|
|
749
630
|
See: `Update User v2 <https://developers.symphony.com/restapi/reference/update-user-v2>`_
|
|
750
631
|
|
|
@@ -753,22 +634,22 @@ class UserService(OboUserService):
|
|
|
753
634
|
:return: User with the updated user details.
|
|
754
635
|
"""
|
|
755
636
|
params = {
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
637
|
+
"uid": user_id,
|
|
638
|
+
"payload": payload,
|
|
639
|
+
"session_token": await self._auth_session.session_token,
|
|
759
640
|
}
|
|
760
641
|
return await self._user_api.v2_admin_user_uid_update_post(**params)
|
|
761
642
|
|
|
762
643
|
@retry
|
|
763
644
|
async def list_audit_trail(
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
645
|
+
self,
|
|
646
|
+
start_timestamp: int,
|
|
647
|
+
end_timestamp: int = None,
|
|
648
|
+
initiator_id: int = None,
|
|
649
|
+
role: RoleId = None,
|
|
650
|
+
limit: int = 50,
|
|
651
|
+
before: int = None,
|
|
652
|
+
after: int = None,
|
|
772
653
|
) -> V1AuditTrailInitiatorList:
|
|
773
654
|
"""Returns audit trail of actions performed by a privileged user in a given period of time.
|
|
774
655
|
See: `List Audit Trail v1 <https://developers.symphony.com/restapi/reference/list-audit-trail-v1>`_
|
|
@@ -783,31 +664,31 @@ class UserService(OboUserService):
|
|
|
783
664
|
:return: List of audit trail initiator.
|
|
784
665
|
"""
|
|
785
666
|
params = {
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
667
|
+
"start_timestamp": start_timestamp,
|
|
668
|
+
"limit": limit,
|
|
669
|
+
"session_token": await self._auth_session.session_token,
|
|
670
|
+
"key_manager_token": await self._auth_session.key_manager_token,
|
|
790
671
|
}
|
|
791
672
|
if end_timestamp is not None:
|
|
792
|
-
params[
|
|
673
|
+
params["end_timestamp"] = end_timestamp
|
|
793
674
|
if initiator_id is not None:
|
|
794
|
-
params[
|
|
675
|
+
params["initiator_id"] = initiator_id
|
|
795
676
|
if role is not None:
|
|
796
|
-
params[
|
|
677
|
+
params["role"] = role.value
|
|
797
678
|
if before is not None:
|
|
798
|
-
params[
|
|
679
|
+
params["before"] = before
|
|
799
680
|
if after is not None:
|
|
800
|
-
params[
|
|
681
|
+
params["after"] = after
|
|
801
682
|
return await self._audit_trail_api.v1_audittrail_privilegeduser_get(**params)
|
|
802
683
|
|
|
803
684
|
async def list_all_audit_trail(
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
685
|
+
self,
|
|
686
|
+
start_timestamp: int,
|
|
687
|
+
end_timestamp: int = None,
|
|
688
|
+
initiator_id: int = None,
|
|
689
|
+
role: RoleId = None,
|
|
690
|
+
chunk_size: int = 100,
|
|
691
|
+
max_number: int = None,
|
|
811
692
|
) -> AsyncGenerator[V1AuditTrailInitiatorList, None]:
|
|
812
693
|
"""Returns an asynchronous generation of audit trail of actions performed by a privileged user in a given period
|
|
813
694
|
of time.
|
|
@@ -824,22 +705,20 @@ class UserService(OboUserService):
|
|
|
824
705
|
"""
|
|
825
706
|
|
|
826
707
|
async def audit_trail_one_page(limit, after=None):
|
|
827
|
-
result = await self.list_audit_trail(
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
708
|
+
result = await self.list_audit_trail(
|
|
709
|
+
start_timestamp=start_timestamp,
|
|
710
|
+
end_timestamp=end_timestamp,
|
|
711
|
+
initiator_id=initiator_id,
|
|
712
|
+
role=role,
|
|
713
|
+
limit=limit,
|
|
714
|
+
after=after,
|
|
715
|
+
)
|
|
716
|
+
return result.items, getattr(result.pagination.cursors, "after", None)
|
|
834
717
|
|
|
835
718
|
return cursor_based_pagination(audit_trail_one_page, chunk_size, max_number)
|
|
836
719
|
|
|
837
720
|
@retry
|
|
838
|
-
async def suspend_user(
|
|
839
|
-
self,
|
|
840
|
-
user_id: int,
|
|
841
|
-
user_suspension: UserSuspension
|
|
842
|
-
) -> None:
|
|
721
|
+
async def suspend_user(self, user_id: int, user_suspension: UserSuspension) -> None:
|
|
843
722
|
"""Suspends or re-activates (unsuspend) a user account.
|
|
844
723
|
See: `Suspend User Account v1 <https://developers.symphony.com/restapi/v20.10/reference/suspend-user-v1>`_
|
|
845
724
|
|
|
@@ -847,20 +726,15 @@ class UserService(OboUserService):
|
|
|
847
726
|
:param user_suspension: User suspension payload.
|
|
848
727
|
"""
|
|
849
728
|
params = {
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
729
|
+
"user_id": user_id,
|
|
730
|
+
"payload": user_suspension,
|
|
731
|
+
"session_token": await self._auth_session.session_token,
|
|
853
732
|
}
|
|
854
733
|
|
|
855
734
|
await self._user_api.v1_admin_user_user_id_suspension_update_put(**params)
|
|
856
735
|
|
|
857
736
|
@retry
|
|
858
|
-
async def suspend(
|
|
859
|
-
self,
|
|
860
|
-
user_id: int,
|
|
861
|
-
reason: str = None,
|
|
862
|
-
until: int = None
|
|
863
|
-
) -> None:
|
|
737
|
+
async def suspend(self, user_id: int, reason: str = None, until: int = None) -> None:
|
|
864
738
|
"""Suspends a user account.
|
|
865
739
|
Calling this endpoint requires a service account with the User Provisioning role.
|
|
866
740
|
See: `Suspend User Account v1 <https://developers.symphony.com/restapi/v20.10/reference/suspend-user-v1>`_
|
|
@@ -870,20 +744,19 @@ class UserService(OboUserService):
|
|
|
870
744
|
:param until: Time till when the user should be suspended in millis
|
|
871
745
|
"""
|
|
872
746
|
|
|
873
|
-
user_suspension = UserSuspension(
|
|
747
|
+
user_suspension = UserSuspension(
|
|
748
|
+
suspended=True, suspended_until=until, suspension_reason=reason
|
|
749
|
+
)
|
|
874
750
|
params = {
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
751
|
+
"user_id": user_id,
|
|
752
|
+
"payload": user_suspension,
|
|
753
|
+
"session_token": await self._auth_session.session_token,
|
|
878
754
|
}
|
|
879
755
|
|
|
880
756
|
await self._user_api.v1_admin_user_user_id_suspension_update_put(**params)
|
|
881
757
|
|
|
882
758
|
@retry
|
|
883
|
-
async def unsuspend(
|
|
884
|
-
self,
|
|
885
|
-
user_id: int
|
|
886
|
-
) -> None:
|
|
759
|
+
async def unsuspend(self, user_id: int) -> None:
|
|
887
760
|
"""Unsuspend (Re-activates) a user account.
|
|
888
761
|
Calling this endpoint requires a service account with the User Provisioning role.
|
|
889
762
|
See: `Suspend User Account v1 <https://developers.symphony.com/restapi/v20.10/reference/suspend-user-v1>`_
|
|
@@ -892,9 +765,48 @@ class UserService(OboUserService):
|
|
|
892
765
|
"""
|
|
893
766
|
|
|
894
767
|
params = {
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
768
|
+
"user_id": user_id,
|
|
769
|
+
"payload": UserSuspension(suspended=False),
|
|
770
|
+
"session_token": await self._auth_session.session_token,
|
|
898
771
|
}
|
|
899
772
|
|
|
900
773
|
await self._user_api.v1_admin_user_user_id_suspension_update_put(**params)
|
|
774
|
+
|
|
775
|
+
@retry
|
|
776
|
+
async def update_manifest_from_json(self, manifest_data: str) -> None:
|
|
777
|
+
"""
|
|
778
|
+
Updates the user manifest from a JSON string.
|
|
779
|
+
|
|
780
|
+
:param manifest_data: A JSON string.
|
|
781
|
+
:raises json.JSONDecodeError: If the string is not valid JSON.
|
|
782
|
+
"""
|
|
783
|
+
await self._user_api.v1_user_manifest_own_post(
|
|
784
|
+
session_token=await self._auth_session.session_token,
|
|
785
|
+
manifest=ServiceAccountManifest(manifest_data),
|
|
786
|
+
)
|
|
787
|
+
|
|
788
|
+
async def update_manifest_from_file(self) -> None:
|
|
789
|
+
"""
|
|
790
|
+
Updates the user manifest using the file mentioned in config.yaml under 'manifest'.
|
|
791
|
+
|
|
792
|
+
:raises FileNotFoundError: If the file does not exist.
|
|
793
|
+
:raises json.JSONDecodeError: If the file content is not valid JSON.
|
|
794
|
+
:raises IOError: If the file can't be read.
|
|
795
|
+
"""
|
|
796
|
+
file_path = Path(self._manifest)
|
|
797
|
+
|
|
798
|
+
with file_path.open("r", encoding="utf-8") as f:
|
|
799
|
+
content = json.load(f)
|
|
800
|
+
manifest_text = json.dumps(content)
|
|
801
|
+
|
|
802
|
+
await self._user_api.v1_user_manifest_own_post(
|
|
803
|
+
session_token=await self._auth_session.session_token,
|
|
804
|
+
manifest=ServiceAccountManifest(manifest_text),
|
|
805
|
+
)
|
|
806
|
+
|
|
807
|
+
@retry
|
|
808
|
+
async def get_manifest(self) -> ServiceAccountManifest:
|
|
809
|
+
"""Retrieves own user manifest"""
|
|
810
|
+
return await self._user_api.v1_user_manifest_own_get(
|
|
811
|
+
session_token=await self._auth_session.session_token
|
|
812
|
+
)
|