Office365-REST-Python-Client 3.2.0__py3-none-any.whl → 3.3.1__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.
- office365/admin/admin.py +54 -3
- office365/admin/baseline_parameter.py +3 -3
- office365/admin/baseline_parameter_type.py +14 -0
- office365/admin/baseline_resource.py +1 -2
- office365/admin/browser_shared_cookie.py +92 -0
- office365/admin/browser_site.py +92 -0
- office365/admin/browser_site_list.py +92 -0
- office365/admin/configuration_management.py +92 -0
- office365/admin/edge/edge.py +27 -0
- office365/admin/exchange/admin.py +38 -0
- office365/admin/exchange/exchange_message_trace.py +16 -0
- office365/admin/exchange/exchange_message_trace_detail.py +7 -0
- office365/admin/exchange/exchange_message_trace_status.py +2 -0
- office365/admin/internet_explorer_mode.py +30 -0
- office365/admin/message_tracing_root.py +30 -0
- office365/admin/microsoft365/apps.py +28 -0
- office365/admin/microsoft365/m365_apps_installation_options.py +35 -0
- office365/admin/people/insights_settings.py +24 -0
- office365/admin/people/profile_property_setting.py +31 -0
- office365/admin/people/profile_source.py +46 -0
- office365/admin/people/pronouns_settings.py +18 -0
- office365/admin/people/settings.py +63 -1
- office365/admin/report_settings.py +15 -0
- office365/admin/sharepoint/idle_session_signout.py +0 -3
- office365/admin/sharepoint/settings.py +106 -0
- office365/admin/sharepoint/sharepoint.py +2 -0
- office365/backuprestore/artifact_query.py +0 -3
- office365/backuprestore/backup_count_statistics.py +22 -0
- office365/backuprestore/backup_policy_report.py +16 -0
- office365/backuprestore/backup_report.py +9 -0
- office365/backuprestore/browse_session_base.py +106 -0
- office365/backuprestore/email_notifications_setting.py +32 -0
- office365/backuprestore/onedrive_for_business_browse_session.py +18 -0
- office365/backuprestore/onedrive_for_business_restore_session.py +72 -0
- office365/backuprestore/protection_unit_base.py +99 -0
- office365/backuprestore/restorepoints/collection.py +66 -0
- office365/backuprestore/restorepoints/search_response.py +1 -2
- office365/backuprestore/restorepoints/search_result.py +6 -2
- office365/backuprestore/restoresessions/artifact_count.py +0 -3
- office365/backuprestore/restoresessions/browse_query_response_item.py +0 -3
- office365/backuprestore/restoresessions/browser_shared_cookie_history.py +1 -2
- office365/backuprestore/root.py +388 -2
- office365/backuprestore/serviceapps/service_app.py +82 -0
- office365/backuprestore/sharepoint_browse_session.py +18 -0
- office365/backuprestore/sharepoint_protection_policy.py +64 -0
- office365/backuprestore/sharepoint_restore_session.py +70 -0
- office365/backuprestore/time_period.py +1 -2
- office365/booking/appointment.py +212 -0
- office365/booking/assigned_place_mode.py +0 -3
- office365/booking/availability.py +1 -2
- office365/booking/availabilityitem.py +1 -2
- office365/booking/availabilitywindow.py +0 -2
- office365/booking/building.py +39 -0
- office365/booking/building_map.py +45 -0
- office365/booking/business/business.py +97 -3
- office365/booking/business/collection.py +22 -0
- office365/booking/business/import_building_map_setting.py +0 -3
- office365/booking/chedulingpolicy.py +1 -2
- office365/booking/currency.py +15 -0
- office365/booking/custom_question.py +42 -0
- office365/booking/customer.py +52 -0
- office365/booking/customers/information.py +1 -2
- office365/booking/customers/informationbase.py +0 -3
- office365/booking/drop_in_place_mode.py +0 -3
- office365/booking/mailbox_details.py +0 -3
- office365/booking/pagesettings.py +0 -3
- office365/booking/phone.py +0 -3
- office365/booking/place_mode.py +0 -3
- office365/booking/place_service_plan_info.py +0 -3
- office365/booking/questionanswer.py +0 -3
- office365/booking/questionassignment.py +0 -3
- office365/booking/reminder.py +0 -2
- office365/booking/reservable_place_mode.py +0 -3
- office365/booking/service.py +157 -0
- office365/booking/solutions/root.py +25 -4
- office365/booking/staff/availability_item.py +1 -2
- office365/booking/staff/member.py +80 -0
- office365/booking/unavailable_place_mode.py +0 -3
- office365/booking/work_hours.py +1 -2
- office365/booking/work_time_slot.py +0 -3
- office365/capabilities.py +144 -0
- office365/common/add_large_gallery_view_operation.py +8 -0
- office365/common/agent_identity.py +50 -0
- office365/common/agent_identity_blueprint.py +44 -0
- office365/common/agent_identity_blueprint_principal.py +37 -0
- office365/common/agent_user.py +7 -0
- office365/common/akamai_web_application_firewall_provider.py +36 -0
- office365/common/anonymous_calendar_sharing_free_busy_detail.py +7 -0
- office365/common/anonymous_calendar_sharing_free_busy_reviewer.py +7 -0
- office365/common/anonymous_calendar_sharing_free_busy_simple.py +7 -0
- office365/common/anonymous_guest_conversation_member.py +18 -0
- office365/common/apple_device_features_configuration_base.py +7 -0
- office365/common/apple_managed_identity_provider.py +36 -0
- office365/common/arkose_fraud_protection_provider.py +36 -0
- office365/common/attribute_set.py +24 -0
- office365/common/azure_communication_services_user_conversation_member.py +18 -0
- office365/common/b2b_registration_metrics_base.py +31 -0
- office365/common/b2b_sign_in_activity_metrics_base.py +43 -0
- office365/common/base_map_feature.py +7 -0
- office365/common/complex_extension_value.py +7 -0
- office365/common/configuration_baseline.py +39 -0
- office365/common/configuration_drift.py +65 -0
- office365/common/configuration_monitor.py +103 -0
- office365/common/configuration_monitoring_result.py +58 -0
- office365/common/configuration_snapshot_job.py +76 -0
- office365/common/contract.py +37 -0
- office365/common/cross_tenant_access_policy_configuration_default.py +125 -0
- office365/common/cross_tenant_access_policy_configuration_partner.py +158 -0
- office365/common/cross_tenant_calendar_availability_basic.py +7 -0
- office365/common/cross_tenant_calendar_availability_limited_details.py +7 -0
- office365/common/cross_tenant_calendar_sharing_free_busy_detail.py +7 -0
- office365/common/cross_tenant_calendar_sharing_free_busy_reviewer.py +7 -0
- office365/common/cross_tenant_calendar_sharing_free_busy_simple.py +7 -0
- office365/common/cross_tenant_identity_sync_policy_partner.py +32 -0
- office365/common/cross_tenant_mail_tips_all.py +7 -0
- office365/common/cross_tenant_mail_tips_limited.py +7 -0
- office365/common/cross_tenant_migration.py +7 -0
- office365/common/cross_tenant_open_profile_card.py +7 -0
- office365/common/cross_tenant_places_desk_booking.py +7 -0
- office365/common/cross_tenant_places_room_booking.py +7 -0
- office365/common/custom_authentication_extension.py +19 -0
- office365/common/custom_data_provided_resource.py +19 -0
- office365/common/custom_data_provided_resource_access_review_upload_session.py +7 -0
- office365/common/data_source_configuration.py +18 -0
- office365/common/delta_participants.py +34 -0
- office365/common/desk.py +47 -0
- office365/common/dictionaries.py +7 -0
- office365/common/directory_object_partner_reference.py +37 -0
- office365/common/distribution_list.py +64 -0
- office365/common/distribution_list_member.py +43 -0
- office365/common/domain_dns_mx_record.py +24 -0
- office365/common/domain_dns_srv_record.py +48 -0
- office365/common/domain_dns_txt_record.py +18 -0
- office365/common/domain_dns_unavailable_record.py +18 -0
- office365/common/drive_protection_unit.py +30 -0
- office365/common/drive_protection_units_bulk_addition_job.py +23 -0
- office365/common/drive_restore_artifact.py +30 -0
- office365/common/drive_restore_artifacts_bulk_addition_request.py +23 -0
- office365/common/edition_upgrade_configuration.py +38 -0
- office365/common/email_authentication_method_configuration.py +41 -0
- office365/common/emergency_call_event.py +31 -0
- office365/common/end_user_settings.py +29 -0
- office365/common/endpoint.py +42 -0
- office365/common/engagement_async_operation.py +26 -0
- office365/common/engagement_conversation_discussion_message.py +7 -0
- office365/common/engagement_conversation_question_message.py +18 -0
- office365/common/engagement_conversation_system_message.py +7 -0
- office365/common/engagement_role.py +36 -0
- office365/common/engagement_role_member.py +37 -0
- office365/common/enrollment_troubleshooting_event.py +62 -0
- office365/common/enterprise_code_signing_certificate.py +62 -0
- office365/common/error_detail.py +13 -0
- office365/common/event_message_request.py +51 -0
- office365/common/event_message_response.py +24 -0
- office365/common/exchange_protection_policy.py +64 -0
- office365/common/exchange_restore_session.py +72 -0
- office365/common/exchange_settings.py +18 -0
- office365/common/external_authentication_method.py +24 -0
- office365/common/external_authentication_method_configuration.py +53 -0
- office365/common/external_domain_name.py +7 -0
- office365/common/external_users_self_service_sign_up_events_flow.py +54 -0
- office365/common/fido2_authentication_method_configuration.py +73 -0
- office365/common/fido2_combination_configuration.py +17 -0
- office365/common/fixture_map.py +18 -0
- office365/common/floor.py +18 -0
- office365/common/footprint_map.py +7 -0
- office365/common/granular_drive_restore_artifact.py +18 -0
- office365/common/granular_mailbox_restore_artifact.py +24 -0
- office365/common/granular_restore_artifact_base.py +68 -0
- office365/common/granular_site_restore_artifact.py +18 -0
- office365/common/human_security_fraud_protection_provider.py +24 -0
- office365/common/identity_built_in_user_flow_attribute.py +7 -0
- office365/common/identity_custom_user_flow_attribute.py +7 -0
- office365/common/image_info.py +14 -0
- office365/common/imported_windows_autopilot_device_identity_upload.py +52 -0
- office365/common/intune_brand.py +28 -0
- office365/common/ip_named_location.py +26 -0
- office365/common/ipv4_range.py +12 -0
- office365/common/ipv6_range.py +12 -0
- office365/common/key_value.py +12 -0
- office365/common/learning_assignment.py +46 -0
- office365/common/level_map.py +57 -0
- office365/common/mail_folder_operation.py +27 -0
- office365/common/mail_folder_operation_status.py +15 -0
- office365/common/mailbox.py +28 -0
- office365/common/mailbox_folder.py +115 -0
- office365/common/mailbox_item.py +66 -0
- office365/common/mailbox_protection_rule.py +18 -0
- office365/common/mailbox_protection_unit.py +30 -0
- office365/common/mailbox_protection_units_bulk_addition_job.py +23 -0
- office365/common/mailbox_restore_artifact.py +30 -0
- office365/common/mailbox_restore_artifacts_bulk_addition_request.py +23 -0
- office365/common/managed_android_lob_app.py +37 -0
- office365/common/managed_android_store_app.py +31 -0
- office365/common/managed_app_status_raw.py +17 -0
- office365/common/managed_ios_lob_app.py +51 -0
- office365/common/managed_ios_store_app.py +38 -0
- office365/common/managed_mobile_lob_app.py +50 -0
- office365/common/meeting_engagement.py +16 -0
- office365/common/meeting_engagement_type.py +15 -0
- office365/common/member.py +15 -0
- office365/common/mention.py +63 -0
- office365/common/mentions_preview.py +11 -0
- office365/common/microsoft_account_user_conversation_member.py +18 -0
- office365/common/microsoft_authenticator_authentication_method_configuration.py +51 -0
- office365/common/microsoft_authenticator_authentication_method_target.py +19 -0
- office365/common/microsoft_store_for_business_app.py +43 -0
- office365/common/mime_content.py +12 -0
- office365/common/mute_participant_operation.py +8 -0
- office365/common/oidc_identity_provider.py +57 -0
- office365/common/on_attribute_collection_listener.py +17 -0
- office365/common/on_attribute_collection_start_custom_extension.py +7 -0
- office365/common/on_attribute_collection_start_listener.py +17 -0
- office365/common/on_attribute_collection_submit_custom_extension.py +7 -0
- office365/common/on_attribute_collection_submit_listener.py +17 -0
- office365/common/on_authentication_method_load_start_listener.py +19 -0
- office365/common/on_email_otp_send_listener.py +17 -0
- office365/common/on_fraud_protection_load_start_listener.py +19 -0
- office365/common/on_interactive_auth_flow_start_listener.py +17 -0
- office365/common/on_otp_send_custom_extension.py +7 -0
- office365/common/on_password_submit_custom_extension.py +7 -0
- office365/common/on_password_submit_listener.py +17 -0
- office365/common/on_token_issuance_start_listener.py +17 -0
- office365/common/on_user_create_start_listener.py +17 -0
- office365/common/on_verified_id_claim_validation_listener.py +17 -0
- office365/common/operation.py +33 -0
- office365/common/os_version_count.py +15 -0
- office365/common/participant_joining_notification.py +24 -0
- office365/common/participant_left_notification.py +30 -0
- office365/common/passkey_authentication_method_target.py +17 -0
- office365/common/passkey_profile.py +39 -0
- office365/common/phone_user_conversation_member.py +18 -0
- office365/common/play_prompt_operation.py +8 -0
- office365/common/privacy.py +34 -0
- office365/common/prompt.py +7 -0
- office365/common/protection_units_bulk_job_base.py +58 -0
- office365/common/provision_response.py +12 -0
- office365/common/proxied_domain.py +12 -0
- office365/common/qr_code.py +44 -0
- office365/common/qr_code_pin_authentication_method.py +45 -0
- office365/common/qr_code_pin_authentication_method_configuration.py +46 -0
- office365/common/qr_pin.py +37 -0
- office365/common/reading_assignment_submission.py +141 -0
- office365/common/reading_coach_passage.py +69 -0
- office365/common/record_operation.py +25 -0
- office365/common/reflect_check_in_response.py +75 -0
- office365/common/related_tenants_refresh_request.py +18 -0
- office365/common/reports_root.py +84 -0
- office365/common/request.py +50 -0
- office365/common/reseller_delegated_admin_relationship.py +24 -0
- office365/common/restore_artifact_base.py +60 -0
- office365/common/restore_artifacts_bulk_request_base.py +93 -0
- office365/common/restore_point.py +46 -0
- office365/common/restore_session_base.py +96 -0
- office365/common/role_assignment.py +45 -0
- office365/common/role_definition.py +56 -0
- office365/common/saml_or_ws_fed_external_domain_federation.py +30 -0
- office365/common/section.py +7 -0
- office365/common/section_map.py +18 -0
- office365/common/send_dtmf_tones_operation.py +18 -0
- office365/common/service_announcement_attachment.py +43 -0
- office365/common/setting_source.py +14 -0
- office365/common/shared_pc_configuration.py +87 -0
- office365/common/sharepoint_embedded_configuration.py +11 -0
- office365/common/single_value_extended_property.py +18 -0
- office365/common/site_protection_rule.py +18 -0
- office365/common/site_protection_unit.py +30 -0
- office365/common/site_protection_units_bulk_addition_job.py +23 -0
- office365/common/site_restore_artifact.py +30 -0
- office365/common/site_restore_artifacts_bulk_addition_request.py +23 -0
- office365/common/skype_for_business_user_conversation_member.py +24 -0
- office365/common/skype_user_conversation_member.py +18 -0
- office365/common/software_oath_authentication_method.py +18 -0
- office365/common/software_oath_authentication_method_configuration.py +34 -0
- office365/common/speaker_assignment_submission.py +128 -0
- office365/common/storage_quota_breakdown.py +30 -0
- office365/common/string_dictionary.py +7 -0
- office365/common/structured_data_entry.py +15 -0
- office365/common/structured_data_entry_typed_value.py +16 -0
- office365/common/structured_data_entry_value_type.py +21 -0
- office365/common/subscribe_to_tone_operation.py +8 -0
- office365/common/task_file_attachment.py +11 -0
- office365/common/teamwork_hosted_content.py +24 -0
- office365/common/telecom_provider_settings.py +16 -0
- office365/common/temporary_access_pass_authentication_method_configuration.py +64 -0
- office365/common/unit_map.py +18 -0
- office365/common/user_configuration.py +33 -0
- office365/common/verifiable_credential_authentication_method_target.py +17 -0
- office365/common/verifiable_credentials_authentication_method_configuration.py +36 -0
- office365/common/voice_authentication_method_configuration.py +47 -0
- office365/common/web_app.py +24 -0
- office365/common/what_if_analysis_result.py +25 -0
- office365/communications/aad_user_conversation_member_result.py +11 -0
- office365/communications/aad_user_notification_recipient.py +11 -0
- office365/communications/accept_join_response.py +7 -0
- office365/communications/adhoc_call.py +3 -0
- office365/communications/app_hosted_media_config.py +11 -0
- office365/communications/application_identity.py +12 -0
- office365/communications/application_instance_identity.py +12 -0
- office365/communications/attendance_interval.py +15 -0
- office365/communications/audio_conferencing.py +19 -0
- office365/communications/azure_communication_services_user_identity.py +11 -0
- office365/communications/broadcast_meeting_caption_settings.py +16 -0
- office365/communications/call_participant_info.py +14 -0
- office365/communications/callrecords/administrative_unit_info.py +11 -0
- office365/communications/callrecords/call_record.py +27 -19
- office365/communications/callrecords/client_user_agent.py +16 -0
- office365/communications/callrecords/collection.py +14 -0
- office365/communications/callrecords/device_info.py +31 -0
- office365/communications/callrecords/direct_routing_log_row.py +47 -2
- office365/communications/callrecords/endpoint.py +8 -2
- office365/communications/callrecords/failure_info.py +13 -0
- office365/communications/callrecords/feedback_token_set.py +7 -0
- office365/communications/callrecords/media.py +22 -0
- office365/communications/callrecords/media_stream.py +63 -0
- office365/communications/callrecords/network_info.py +52 -0
- office365/communications/callrecords/organizer.py +7 -0
- office365/communications/callrecords/participant.py +7 -0
- office365/communications/callrecords/participant_base.py +18 -0
- office365/communications/callrecords/participant_endpoint.py +22 -0
- office365/communications/callrecords/pstn_call_log_row.py +38 -0
- office365/communications/callrecords/segment.py +35 -0
- office365/communications/callrecords/service_endpoint.py +7 -0
- office365/communications/callrecords/service_user_agent.py +12 -0
- office365/communications/callrecords/session.py +14 -0
- office365/communications/callrecords/trace_route_hop.py +18 -0
- office365/communications/callrecords/user_agent.py +12 -0
- office365/communications/callrecords/user_feedback.py +17 -0
- office365/communications/callrecords/user_identity.py +11 -0
- office365/communications/callrecords/wifi_band.py +15 -0
- office365/communications/callrecords/wifi_radio_type.py +18 -0
- office365/communications/calls/ai_insight.py +59 -0
- office365/communications/calls/ai_insight_view_point.py +1 -2
- office365/communications/calls/audio_routing_group.py +30 -0
- office365/communications/calls/call.py +104 -8
- office365/communications/calls/collection.py +2 -0
- office365/communications/calls/content_sharing_session.py +7 -0
- office365/communications/calls/ended_event_message_detail.py +7 -2
- office365/communications/calls/event.py +42 -0
- office365/communications/calls/incoming_context.py +14 -2
- office365/communications/calls/invitation_participant_info.py +5 -2
- office365/communications/calls/media_state.py +12 -0
- office365/communications/calls/options.py +8 -3
- office365/communications/calls/participant.py +54 -1
- office365/communications/calls/participant_info.py +17 -2
- office365/communications/calls/recording_event_message_detail.py +1 -2
- office365/communications/calls/route.py +13 -2
- office365/communications/calls/started_event_message_detail.py +1 -2
- office365/communications/calls/transcript.py +10 -0
- office365/communications/calls/transcript_event_message_detail.py +1 -2
- office365/communications/calls/transcription_info.py +15 -0
- office365/communications/chat_members_notification_recipient.py +11 -0
- office365/communications/chat_renamed_event_message_detail.py +16 -0
- office365/communications/chat_restrictions.py +11 -0
- office365/communications/cloud_communications.py +89 -5
- office365/communications/comms_notification.py +12 -0
- office365/communications/comms_notifications.py +17 -0
- office365/communications/conversation_member_role_updated_event_message_detail.py +18 -0
- office365/communications/emergency_caller_info.py +18 -0
- office365/communications/encrypted_identity.py +7 -0
- office365/communications/engagement_identity_set.py +15 -0
- office365/communications/guest_identity.py +11 -0
- office365/communications/incoming_call_options.py +7 -0
- office365/communications/invite_new_bot_response.py +11 -0
- office365/communications/join_meeting_id_settings.py +13 -0
- office365/communications/max_work_location_details.py +15 -0
- office365/communications/media_config.py +7 -0
- office365/communications/media_info.py +12 -0
- office365/communications/media_prompt.py +14 -0
- office365/communications/meetings/join_meeting_id_info.py +10 -0
- office365/communications/onlinemeetings/attendance_record.py +67 -0
- office365/communications/onlinemeetings/attendee_notification_info.py +0 -3
- office365/communications/onlinemeetings/base.py +102 -5
- office365/communications/onlinemeetings/broadcast_settings.py +6 -2
- office365/communications/onlinemeetings/chatmode.py +8 -9
- office365/communications/onlinemeetings/collection.py +43 -4
- office365/communications/onlinemeetings/engagement_conversation.py +15 -1
- office365/communications/onlinemeetings/lobby_bypass_settings.py +0 -3
- office365/communications/onlinemeetings/meeting_attendance_report.py +64 -0
- office365/communications/onlinemeetings/online_meeting.py +20 -9
- office365/communications/onlinemeetings/online_meeting_info.py +7 -2
- office365/communications/onlinemeetings/participant_info.py +1 -2
- office365/communications/onlinemeetings/participants.py +1 -2
- office365/communications/onlinemeetings/recordings/call.py +10 -1
- office365/communications/onlinemeetings/restricted.py +16 -3
- office365/communications/onlinemeetings/sensitivity_label_assignment.py +11 -0
- office365/communications/onlinemeetings/watermark_protection_values.py +0 -3
- office365/communications/operations/comms.py +22 -3
- office365/communications/operations/invite_participants.py +3 -1
- office365/communications/organizer_meeting_info.py +14 -0
- office365/communications/out_of_office_settings.py +12 -0
- office365/communications/outgoing_call_options.py +7 -0
- office365/communications/participant_joining_response.py +7 -0
- office365/communications/phone_identity.py +7 -0
- office365/communications/presences/presence.py +25 -0
- office365/communications/presences/status_message.py +5 -2
- office365/communications/quotas.py +136 -6
- office365/communications/recording_info.py +16 -0
- office365/communications/reject_join_response.py +12 -0
- office365/communications/removed_state.py +11 -0
- office365/communications/result_info.py +0 -3
- office365/communications/service_hosted_media_config.py +15 -0
- office365/communications/teleconference_device_audio_quality.py +7 -0
- office365/communications/teleconference_device_media_quality.py +36 -0
- office365/communications/teleconference_device_screen_sharing_quality.py +7 -0
- office365/communications/teleconference_device_video_quality.py +14 -0
- office365/communications/teleconferencedevicequality.py +32 -2
- office365/communications/token_meeting_info.py +11 -0
- office365/communications/tone_info.py +13 -0
- office365/communications/user_identity.py +11 -0
- office365/communications/user_work_location.py +15 -0
- office365/communications/virtualevents/communications_identity_set.py +1 -2
- office365/communications/virtualevents/external_information.py +12 -0
- office365/communications/virtualevents/external_registration_information.py +12 -0
- office365/communications/virtualevents/presenter.py +29 -0
- office365/communications/virtualevents/presenter_details.py +20 -0
- office365/communications/virtualevents/presenter_info.py +16 -0
- office365/communications/virtualevents/registration.py +106 -0
- office365/communications/virtualevents/registration_configuration.py +58 -0
- office365/communications/virtualevents/registration_custom_question.py +26 -0
- office365/communications/virtualevents/registration_predefined_question.py +19 -0
- office365/communications/virtualevents/registration_question_answer.py +18 -0
- office365/communications/virtualevents/registration_question_base.py +24 -0
- office365/communications/virtualevents/root.py +25 -0
- office365/communications/virtualevents/session.py +34 -0
- office365/communications/virtualevents/settings.py +6 -3
- office365/communications/virtualevents/townhall.py +85 -0
- office365/communications/virtualevents/townhall_registration_configuration.py +7 -0
- office365/communications/virtualevents/virtual_event.py +69 -2
- office365/communications/virtualevents/webinar.py +66 -0
- office365/communications/virtualevents/webinar_registration_configuration.py +7 -0
- office365/copilot/action_item.py +0 -3
- office365/copilot/action_result_part.py +4 -2
- office365/copilot/admin_catalog.py +30 -0
- office365/copilot/admin_limited_mode.py +24 -0
- office365/copilot/admin_setting.py +26 -0
- office365/copilot/ai_agent_info.py +0 -3
- office365/copilot/ai_interaction.py +107 -0
- office365/copilot/ai_interaction_attachment.py +0 -3
- office365/copilot/ai_interaction_context.py +0 -3
- office365/copilot/ai_interaction_entity.py +0 -3
- office365/copilot/ai_interaction_history.py +9 -0
- office365/copilot/ai_interaction_link.py +0 -3
- office365/copilot/ai_interaction_mention.py +1 -2
- office365/copilot/ai_interaction_mentioned_identity_set.py +1 -2
- office365/copilot/ai_interaction_plugin.py +0 -3
- office365/copilot/ai_online_meeting.py +28 -0
- office365/copilot/ai_user.py +42 -0
- office365/copilot/copilot_package_request_status.py +14 -0
- office365/copilot/copilot_package_request_type.py +15 -0
- office365/copilot/package.py +157 -0
- office365/copilot/package_access_entity.py +3 -3
- office365/copilot/package_detail.py +102 -0
- office365/copilot/package_element.py +1 -2
- office365/copilot/package_element_detail.py +1 -2
- office365/copilot/package_request_info.py +24 -0
- office365/copilot/package_request_metadata.py +17 -0
- office365/copilot/package_request_principal.py +13 -0
- office365/copilot/package_request_principal_type.py +15 -0
- office365/copilot/report_root.py +9 -0
- office365/copilot/retrieval_data_source.py +2 -0
- office365/copilot/root.py +3 -0
- office365/count_collection.py +2 -2
- office365/delta_collection.py +37 -1
- office365/directory/administrative_unit.py +63 -2
- office365/directory/allowed_value.py +18 -0
- office365/directory/application_permission_type.py +13 -0
- office365/directory/application_resource_permission.py +15 -0
- office365/directory/applications/all_allowed_scopes.py +0 -3
- office365/directory/applications/api.py +1 -2
- office365/directory/applications/app_identity.py +0 -3
- office365/directory/applications/application.py +261 -19
- office365/directory/applications/application_risk_factors.py +1 -2
- office365/directory/applications/application_risk_score.py +0 -3
- office365/directory/applications/applications_required_resource_access.py +20 -0
- office365/directory/applications/collection.py +45 -2
- office365/directory/applications/custom_security_attribute_exemption.py +2 -5
- office365/directory/applications/custom_security_attribute_string_value_exemption.py +0 -3
- office365/directory/applications/enumerated_scopes.py +1 -2
- office365/directory/applications/identifier_uri_restriction.py +1 -2
- office365/directory/applications/inheritable_scopes.py +0 -3
- office365/directory/applications/instance_resource_access.py +18 -0
- office365/directory/applications/key_credential_configuration.py +1 -2
- office365/directory/applications/location.py +0 -3
- office365/directory/applications/no_scopes.py +0 -3
- office365/directory/applications/optional_claims.py +4 -2
- office365/directory/applications/parentalcontrolsettings.py +0 -3
- office365/directory/applications/password_credential_configuration.py +1 -2
- office365/directory/applications/public_client.py +1 -2
- office365/directory/applications/requestsignatureverification.py +0 -3
- office365/directory/applications/required_resource_access.py +1 -2
- office365/directory/applications/resource_access.py +0 -3
- office365/directory/applications/resource_permission.py +12 -0
- office365/directory/applications/riskfactors/certificate_info.py +0 -3
- office365/directory/applications/riskfactors/general_info.py +1 -2
- office365/directory/applications/riskfactors/legal_info.py +1 -2
- office365/directory/applications/riskfactors/legal_info_gdpr.py +0 -3
- office365/directory/applications/riskfactors/security_info.py +1 -2
- office365/directory/applications/roles/assignment.py +9 -0
- office365/directory/applications/roles/collection.py +3 -1
- office365/directory/applications/roles/role.py +1 -2
- office365/directory/applications/security_compliance.py +0 -3
- office365/directory/applications/spa.py +1 -2
- office365/directory/applications/template.py +18 -0
- office365/directory/applications/verifiedpublisher.py +0 -2
- office365/directory/applications/web.py +1 -2
- office365/directory/approval_settings.py +21 -0
- office365/directory/attribute_rule_members.py +0 -3
- office365/directory/audit/activity_initiator.py +1 -2
- office365/directory/audit/directory.py +9 -0
- office365/directory/audit/initiator.py +0 -3
- office365/directory/audit/log_root.py +4 -1
- office365/directory/audit/logs/recordtype.py +36 -0
- office365/directory/audit/provisioning/errorinfo.py +0 -3
- office365/directory/audit/provisioning/object_summary.py +30 -3
- office365/directory/audit/provisioning/provisionedidentity.py +1 -2
- office365/directory/audit/provisioning/statusinfo.py +1 -2
- office365/directory/audit/provisioning/step.py +1 -2
- office365/directory/audit/provisioning/system.py +1 -2
- office365/directory/audit/signins/activity.py +2 -4
- office365/directory/audit/signins/authentication_app_device_details.py +0 -3
- office365/directory/audit/signins/governance_insight.py +2 -0
- office365/directory/audit/signins/location.py +1 -2
- office365/directory/audit/signins/membership_outlier_insight.py +8 -0
- office365/directory/audit/signins/signin.py +29 -2
- office365/directory/audit/signins/status.py +0 -3
- office365/directory/audit/signins/user_sign_in_insight.py +2 -0
- office365/directory/audit/target_resource.py +1 -2
- office365/directory/authentication/attributecollection/external_users_self_service_sign_up.py +1 -2
- office365/directory/authentication/attributecollection/handler.py +0 -3
- office365/directory/authentication/attributecollection/input_configuration.py +1 -2
- office365/directory/authentication/attributecollection/method_load_start_handler.py +0 -3
- office365/directory/authentication/attributecollection/option_configuration.py +0 -3
- office365/directory/authentication/attributecollection/page.py +1 -2
- office365/directory/authentication/attributecollection/page_view_configuration.py +1 -2
- office365/directory/authentication/attributecollection/start_custom_extension_handler.py +9 -2
- office365/directory/authentication/attributecollection/start_handler.py +0 -3
- office365/directory/authentication/attributecollection/submit_custom_extension_handler.py +9 -2
- office365/directory/authentication/attributecollection/submit_handler.py +0 -3
- office365/directory/authentication/authentication.py +156 -9
- office365/directory/authentication/azure_ad_token_authentication.py +0 -3
- office365/directory/authentication/behaviors.py +2 -3
- office365/directory/authentication/client_certificate.py +1 -2
- office365/directory/authentication/conditions/application.py +16 -0
- office365/directory/authentication/conditions/conditions.py +1 -2
- office365/directory/authentication/conditions/event_listener.py +28 -0
- office365/directory/authentication/configuration/base.py +1 -2
- office365/directory/authentication/configuration/validation.py +1 -2
- office365/directory/authentication/error_correction_level.py +2 -0
- office365/directory/authentication/fido2keyrestrictions.py +0 -3
- office365/directory/authentication/fraud_protection_configuration.py +0 -3
- office365/directory/authentication/fraud_protection_provider.py +18 -0
- office365/directory/authentication/fraud_protection_provider_configuration.py +8 -2
- office365/directory/authentication/include_target.py +0 -3
- office365/directory/authentication/methods/configuration.py +3 -0
- office365/directory/authentication/methods/details.py +16 -0
- office365/directory/authentication/methods/email.py +2 -0
- office365/directory/authentication/methods/excludetarget.py +0 -3
- office365/directory/authentication/methods/featureconfiguration.py +1 -2
- office365/directory/authentication/methods/featuretarget.py +0 -3
- office365/directory/authentication/methods/fido.py +38 -0
- office365/directory/authentication/methods/method.py +18 -0
- office365/directory/authentication/methods/microsoft_authenticator.py +39 -0
- office365/directory/authentication/methods/microsoftauthenticatorfeaturesettings.py +1 -2
- office365/directory/authentication/methods/mode_detail.py +3 -0
- office365/directory/authentication/methods/password.py +1 -0
- office365/directory/authentication/methods/phone.py +32 -1
- office365/directory/authentication/methods/registrationcampaign.py +1 -2
- office365/directory/authentication/methods/registrationcampaignincludetarget.py +0 -3
- office365/directory/authentication/methods/registrationenforcement.py +1 -2
- office365/directory/authentication/methods/resource_account_key_authentication_method.py +30 -0
- office365/directory/authentication/methods/root.py +10 -1
- office365/directory/authentication/methods/sms.py +17 -0
- office365/directory/authentication/methods/target.py +3 -0
- office365/directory/authentication/oidc_address_inbound_claims.py +0 -3
- office365/directory/authentication/oidc_client_authentication.py +0 -3
- office365/directory/authentication/oidc_client_secret_authentication.py +0 -3
- office365/directory/authentication/oidc_inbound_claim_mapping_override.py +1 -2
- office365/directory/authentication/oidc_private_jwt_key_client_authentication.py +0 -3
- office365/directory/authentication/open_id_connect_setting.py +0 -3
- office365/directory/authentication/password_reset_response.py +4 -3
- office365/directory/authentication/platform_credential_authentication_method.py +44 -0
- office365/directory/authentication/qr_code_image_details.py +5 -3
- office365/directory/authentication/signing_certificate_update_status.py +1 -2
- office365/directory/authentication/strength/root.py +4 -0
- office365/directory/authentication/strength/usage.py +1 -2
- office365/directory/authentication/temporary_access_pass_authentication_method.py +49 -0
- office365/directory/authentication/webauthn_authentication_extensions_client_inputs.py +0 -3
- office365/directory/authentication/webauthn_authentication_extensions_client_outputs.py +0 -3
- office365/directory/authentication/webauthn_authenticator_attestation_response.py +0 -3
- office365/directory/authentication/webauthn_authenticator_selection_criteria.py +0 -3
- office365/directory/authentication/webauthn_credential_creation_options.py +1 -2
- office365/directory/authentication/webauthn_public_key_credential.py +1 -2
- office365/directory/authentication/webauthn_public_key_credential_creation_options.py +1 -2
- office365/directory/authentication/webauthn_public_key_credential_descriptor.py +1 -2
- office365/directory/authentication/webauthn_public_key_credential_parameters.py +0 -3
- office365/directory/authentication/webauthn_public_key_credential_rp_entity.py +0 -3
- office365/directory/authentication/webauthn_public_key_credential_user_entity.py +0 -3
- office365/directory/authentication/windows_hello_for_business_authentication_method.py +37 -0
- office365/directory/b2b_registration_metrics.py +45 -0
- office365/directory/b2b_registration_metrics_initial.py +19 -0
- office365/directory/b2b_registration_metrics_recent.py +19 -0
- office365/directory/b2b_sign_in_activity_metrics.py +45 -0
- office365/directory/b2b_sign_in_activity_metrics_initial.py +19 -0
- office365/directory/b2b_sign_in_activity_metrics_recent.py +19 -0
- office365/directory/certificates/auth_configuration.py +2 -0
- office365/directory/certificates/auth_pki.py +56 -0
- office365/directory/certificates/authority.py +0 -3
- office365/directory/certificates/authority_detail.py +80 -0
- office365/directory/certificates/certification.py +0 -2
- office365/directory/certificates/pkcs12_certificate.py +0 -3
- office365/directory/certificates/pkcs12_information.py +0 -3
- office365/directory/certificates/public_key_infrastructure_root.py +2 -0
- office365/directory/certificates/self_signed.py +0 -2
- office365/directory/certificates/x509/authentication_method_configuration.py +77 -0
- office365/directory/certificates/x509/authenticationmodeconfiguration.py +1 -2
- office365/directory/certificates/x509/authority_scope.py +1 -2
- office365/directory/certificates/x509/combination_configuration.py +23 -0
- office365/directory/certificates/x509/crlvalidationconfiguration.py +0 -3
- office365/directory/certificates/x509/issuer_hints_configuration.py +0 -3
- office365/directory/certificates/x509/rule.py +0 -3
- office365/directory/certificates/x509/userbinding.py +0 -3
- office365/directory/claim_binding.py +14 -0
- office365/directory/claim_binding_source.py +12 -0
- office365/directory/claim_validation.py +12 -0
- office365/directory/connected_organization_members.py +0 -3
- office365/directory/connection_info.py +0 -3
- office365/directory/credential.py +105 -0
- office365/directory/cross_cloud_azure_active_directory_tenant.py +13 -0
- office365/directory/cross_tenant_migration_cancel_response.py +12 -0
- office365/directory/cross_tenant_migration_job.py +121 -0
- office365/directory/cross_tenant_migration_job_status.py +29 -0
- office365/directory/cross_tenant_migration_job_type.py +13 -0
- office365/directory/cross_tenant_migration_service_status.py +24 -0
- office365/directory/cross_tenant_migration_service_status_details.py +19 -0
- office365/directory/cross_tenant_migration_task.py +36 -0
- office365/directory/custom_security_attribute_definition.py +75 -0
- office365/directory/datapolicy/operation.py +9 -1
- office365/directory/delegated_administration_role_assignment.py +23 -0
- office365/directory/delegated_administration_role_assignment_snapshot.py +19 -0
- office365/directory/delegatedadmin/access_assignment.py +46 -0
- office365/directory/delegatedadmin/access_container.py +15 -0
- office365/directory/delegatedadmin/access_details.py +15 -0
- office365/directory/delegatedadmin/customer.py +48 -0
- office365/directory/delegatedadmin/relationship.py +134 -0
- office365/directory/delegatedadmin/relationship_customer_participant.py +12 -0
- office365/directory/delegatedadmin/relationship_operation.py +48 -0
- office365/directory/delegatedadmin/relationship_request.py +39 -0
- office365/directory/delegatedadmin/service_management_detail.py +24 -0
- office365/directory/delegatedadmin/service_provider_constraints.py +32 -0
- office365/directory/device_local_credential_info.py +20 -2
- office365/directory/directory.py +97 -4
- office365/directory/domains/collection.py +57 -0
- office365/directory/domains/dns_cname_record.py +15 -0
- office365/directory/domains/dns_record.py +53 -0
- office365/directory/domains/domain.py +119 -4
- office365/directory/domains/internal_domain_federation.py +70 -0
- office365/directory/drifted_property.py +16 -0
- office365/directory/entity_type_and_ids.py +16 -0
- office365/directory/exchange_online_cross_tenant_migration_settings.py +12 -0
- office365/directory/extensions/custom/callbackconfiguration.py +0 -2
- office365/directory/extensions/custom/calloutrequest.py +1 -2
- office365/directory/extensions/custom/calloutresponse.py +1 -2
- office365/directory/extensions/custom/clientconfiguration.py +0 -3
- office365/directory/extensions/custom/http_request_endpoint.py +0 -3
- office365/directory/extensions/extended_property.py +3 -0
- office365/directory/extensions/extension_property.py +7 -0
- office365/directory/extensions/open_type.py +2 -0
- office365/directory/extensions/schema.py +5 -0
- office365/directory/extensions/schema_property.py +0 -3
- office365/directory/external_domain_federation.py +13 -0
- office365/directory/external_sponsors.py +7 -0
- office365/directory/external_token_based_sap_iag_connection_info.py +16 -0
- office365/directory/governance_invitation.py +49 -0
- office365/directory/governance_relationship.py +64 -0
- office365/directory/governance_request.py +82 -0
- office365/directory/groups/assigned_label.py +0 -3
- office365/directory/groups/collection.py +20 -3
- office365/directory/groups/group.py +128 -16
- office365/directory/groups/group_members.py +0 -3
- office365/directory/groups/lifecycle_policy.py +7 -0
- office365/directory/groups/on_premises_sync_behavior.py +2 -0
- office365/directory/groups/profile.py +1 -2
- office365/directory/groups/setting.py +13 -0
- office365/directory/groups/setting_template.py +29 -0
- office365/directory/groups/setting_template_value.py +0 -3
- office365/directory/identities/api_connector.py +24 -0
- office365/directory/identities/application_context.py +1 -2
- office365/directory/identities/application_enforced_restrictions_session_control.py +0 -3
- office365/directory/identities/assignment_order.py +1 -2
- office365/directory/identities/auth_context.py +0 -3
- office365/directory/identities/authentication_events_flow.py +31 -0
- office365/directory/identities/authentication_flow.py +0 -3
- office365/directory/identities/b2x_identity_user_flow.py +91 -0
- office365/directory/identities/conditional_access_root.py +39 -3
- office365/directory/identities/conditional_access_session_control.py +0 -3
- office365/directory/identities/conditional_access_template.py +38 -0
- office365/directory/identities/container.py +96 -14
- office365/directory/identities/country_named_location.py +4 -0
- office365/directory/identities/ip_range.py +0 -3
- office365/directory/identities/named_location.py +34 -0
- office365/directory/identities/object_identity.py +0 -3
- office365/directory/identities/on_fraud_protection_load_start_external_users_auth_handler.py +1 -2
- office365/directory/identities/on_interactive_auth_flow_start_external_users_self_service_sign_up.py +0 -3
- office365/directory/identities/on_interactive_auth_flow_start_handler.py +0 -3
- office365/directory/identities/on_otp_send_custom_extension_handler.py +7 -2
- office365/directory/identities/on_otp_send_handler.py +0 -3
- office365/directory/identities/on_password_migration_custom_extension_handler.py +9 -2
- office365/directory/identities/on_password_submit_handler.py +0 -3
- office365/directory/identities/on_token_issuance_start_custom_extension.py +21 -0
- office365/directory/identities/on_token_issuance_start_custom_extension_handler.py +9 -2
- office365/directory/identities/on_token_issuance_start_handler.py +0 -3
- office365/directory/identities/on_token_issuance_start_return_claim.py +0 -3
- office365/directory/identities/on_user_create_start_external_users_self_service_sign_up.py +0 -3
- office365/directory/identities/on_user_create_start_handler.py +0 -3
- office365/directory/identities/on_verified_id_claim_validation_custom_extension.py +7 -0
- office365/directory/identities/on_verified_id_claim_validation_custom_extension_handler.py +9 -2
- office365/directory/identities/on_verified_id_claim_validation_handler.py +0 -3
- office365/directory/identities/provider.py +21 -0
- office365/directory/identities/provider_collection.py +2 -0
- office365/directory/identities/providers/base.py +2 -0
- office365/directory/identities/providers/base_collection.py +2 -0
- office365/directory/identities/providers/builtin_identity.py +2 -0
- office365/directory/identities/providers/on_authentication_method_load_start_external_users_self_service_sign_up.py +0 -3
- office365/directory/identities/providers/on_fraud_protection_load_start_handler.py +0 -3
- office365/directory/identities/providers/saml_or_wsfed.py +33 -0
- office365/directory/identities/providers/social_identity.py +4 -0
- office365/directory/identities/riskPrevention/akamai_attack_group_action_model.py +0 -3
- office365/directory/identities/riskPrevention/akamai_custom_rule_model.py +0 -3
- office365/directory/identities/riskPrevention/akamai_rapid_rules_model.py +0 -3
- office365/directory/identities/riskPrevention/akamai_verified_details_model.py +1 -2
- office365/directory/identities/riskPrevention/container.py +74 -0
- office365/directory/identities/riskPrevention/web_application_firewall_dns_configuration.py +0 -3
- office365/directory/identities/riskPrevention/web_application_firewall_verification_result.py +1 -2
- office365/directory/identities/riskPrevention/web_application_firewall_verified_details.py +1 -2
- office365/directory/identities/sign_in_context.py +0 -3
- office365/directory/identities/userflows/attribute.py +35 -0
- office365/directory/identities/userflows/b2x/user_flow.py +3 -12
- office365/directory/identities/userflows/language_configuration.py +15 -2
- office365/directory/identities/userflows/user_attribute_assignment.py +62 -0
- office365/directory/identities/userflows/user_attribute_values_item.py +0 -3
- office365/directory/identities/userflows/user_flow.py +21 -1
- office365/directory/identities/userflows/user_flow_api_connector_configuration.py +0 -3
- office365/directory/identities/verified_id_root.py +30 -0
- office365/directory/identities/web_application_firewall_provider.py +18 -0
- office365/directory/identities/web_application_firewall_verification_model.py +63 -0
- office365/directory/identity_set.py +18 -0
- office365/directory/identitygovernance/access_package_suggestion.py +42 -0
- office365/directory/identitygovernance/accessreview/context_data.py +7 -0
- office365/directory/identitygovernance/accessreview/context_data_base.py +12 -0
- office365/directory/identitygovernance/accessreview/custom_data_provided_resource_upload_session_request.py +4 -2
- office365/directory/identitygovernance/accessreview/custom_data_provided_resource_upload_stats.py +0 -3
- office365/directory/identitygovernance/accessreview/disable_and_delete_user_apply_action.py +0 -3
- office365/directory/identitygovernance/accessreview/error.py +0 -3
- office365/directory/identitygovernance/accessreview/history/definition.py +28 -3
- office365/directory/identitygovernance/accessreview/history_instance.py +8 -0
- office365/directory/identitygovernance/accessreview/history_schedule_settings.py +1 -2
- office365/directory/identitygovernance/accessreview/inactive_users_query_scope.py +0 -2
- office365/directory/identitygovernance/accessreview/instance.py +41 -2
- office365/directory/identitygovernance/accessreview/instance_decision_item.py +59 -2
- office365/directory/identitygovernance/accessreview/instance_decision_item_access_package_assignment_policy_resource.py +0 -3
- office365/directory/identitygovernance/accessreview/instance_decision_item_access_package_resource.py +0 -3
- office365/directory/identitygovernance/accessreview/instance_decision_item_apply_result.py +16 -0
- office365/directory/identitygovernance/accessreview/instance_decision_item_azure_role_resource.py +1 -2
- office365/directory/identitygovernance/accessreview/instance_decision_item_custom_data_provided_resource.py +13 -0
- office365/directory/identitygovernance/accessreview/instance_decision_item_permission.py +14 -0
- office365/directory/identitygovernance/accessreview/instance_decision_item_resource.py +2 -3
- office365/directory/identitygovernance/accessreview/instance_decision_item_service_principal_resource.py +0 -3
- office365/directory/identitygovernance/accessreview/notification_recipient_item.py +1 -2
- office365/directory/identitygovernance/accessreview/notification_recipient_query_scope.py +0 -3
- office365/directory/identitygovernance/accessreview/principal_resource_memberships_scope.py +1 -2
- office365/directory/identitygovernance/accessreview/principal_scope.py +5 -3
- office365/directory/identitygovernance/accessreview/principal_scope_type.py +15 -0
- office365/directory/identitygovernance/accessreview/query_scope.py +0 -3
- office365/directory/identitygovernance/accessreview/recommendation_insight_setting.py +0 -3
- office365/directory/identitygovernance/accessreview/remove_access_apply_action.py +0 -3
- office365/directory/identitygovernance/accessreview/resource_scope.py +5 -3
- office365/directory/identitygovernance/accessreview/resource_scope_type.py +16 -0
- office365/directory/identitygovernance/accessreview/reviewer.py +4 -0
- office365/directory/identitygovernance/accessreview/reviewer_scope.py +5 -3
- office365/directory/identitygovernance/accessreview/reviewer_scope_type.py +18 -0
- office365/directory/identitygovernance/accessreview/schedule_definition.py +57 -2
- office365/directory/identitygovernance/accessreview/set.py +37 -2
- office365/directory/identitygovernance/accessreview/stage.py +25 -0
- office365/directory/identitygovernance/accessreview/stage_settings.py +1 -2
- office365/directory/identitygovernance/accessreview/target_owners.py +1 -2
- office365/directory/identitygovernance/activate_group_scope.py +0 -3
- office365/directory/identitygovernance/activate_processing_result_scope.py +0 -3
- office365/directory/identitygovernance/activate_run_scope.py +0 -3
- office365/directory/identitygovernance/activate_user_scope.py +0 -3
- office365/directory/identitygovernance/activities_container.py +32 -0
- office365/directory/identitygovernance/appconsent/approval_route.py +2 -0
- office365/directory/identitygovernance/appconsent/approval_stage.py +8 -0
- office365/directory/identitygovernance/appconsent/request.py +3 -1
- office365/directory/identitygovernance/appconsent/request_collection.py +2 -0
- office365/directory/identitygovernance/apply_decision_context_data.py +7 -0
- office365/directory/identitygovernance/attribute_set_entry.py +0 -3
- office365/directory/identitygovernance/awaited_workflow_processing_result.py +7 -3
- office365/directory/identitygovernance/cancel_runs_scope.py +0 -3
- office365/directory/identitygovernance/cancel_scope.py +0 -3
- office365/directory/identitygovernance/content_activity.py +31 -0
- office365/directory/identitygovernance/content_base.py +0 -3
- office365/directory/identitygovernance/count_based_quarantine_condition.py +0 -3
- office365/directory/identitygovernance/custom_callout_extension_type.py +15 -0
- office365/directory/identitygovernance/custom_extension_resource_type.py +16 -0
- office365/directory/identitygovernance/custom_task_extension.py +16 -1
- office365/directory/identitygovernance/custom_task_extension_callout_data.py +13 -3
- office365/directory/identitygovernance/custom_task_extension_reply_mode.py +14 -0
- office365/directory/identitygovernance/custom_task_extension_response_data.py +2 -3
- office365/directory/identitygovernance/data.py +7 -0
- office365/directory/identitygovernance/data_security_and_governance.py +25 -0
- office365/directory/identitygovernance/deleted_item_container.py +19 -0
- office365/directory/identitygovernance/directory_object_workflow_subject.py +0 -3
- office365/directory/identitygovernance/emailsettings.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/answer.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/answer_choice.py +1 -2
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/answer_string.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/approval_stage.py +1 -2
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/assignment.py +33 -2
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/assignment_approval_settings.py +1 -2
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/assignment_policy.py +102 -3
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/assignment_policy_scope.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/assignment_request.py +55 -3
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/assignment_request_callback_data.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/assignment_request_parameters.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/assignment_request_requirements.py +1 -2
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/assignment_request_workflow_extension.py +6 -0
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/assignment_requestor_settings.py +1 -2
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/assignment_review_settings.py +1 -2
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/assignment_workflow_extension.py +6 -0
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/automatic_request_settings.py +0 -2
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/catalog.py +87 -2
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/custom_data_provided_resource_file.py +31 -0
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/custom_data_provided_resource_upload_session.py +78 -0
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/custom_extension_callout_instance.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/dynamic_approval_stage.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/expiration_pattern.py +1 -2
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/localized_text.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/multiple_choice_question.py +14 -0
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/notification_settings.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/package.py +98 -1
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/question.py +17 -0
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/request_approval_stage_callback_configuration.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/resource.py +61 -1
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/resource_attribute.py +1 -2
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/resource_attribute_destination.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/resource_attribute_question.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/resource_attribute_source.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/resource_environment.py +19 -1
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/resource_request.py +6 -0
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/resource_role.py +16 -1
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/resource_role_scope.py +36 -0
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/resource_scope.py +7 -0
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/subject.py +36 -1
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/suggestion_reason.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/suggestion_related_people_based.py +1 -2
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/suggestion_self_assignment_history_based.py +1 -2
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/text_input_question.py +3 -0
- office365/directory/identitygovernance/entitlementmanagement/accesspackage/user_directory_attribute_store.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/assignment_request_approval_stage_callback_data.py +1 -2
- office365/directory/identitygovernance/entitlementmanagement/available_access_package.py +46 -0
- office365/directory/identitygovernance/entitlementmanagement/azure_active_directory_tenant.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/connected_organization.py +16 -0
- office365/directory/identitygovernance/entitlementmanagement/control_configuration.py +43 -0
- office365/directory/identitygovernance/entitlementmanagement/custom_extension_behavior_on_error.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/custom_extension_overwrite_configuration.py +1 -2
- office365/directory/identitygovernance/entitlementmanagement/domain_identity_source.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/entitlement_management.py +264 -1
- office365/directory/identitygovernance/entitlementmanagement/external_origin_resource_connector.py +63 -0
- office365/directory/identitygovernance/entitlementmanagement/fallback_to_microsoft_provider_on_error.py +0 -3
- office365/directory/identitygovernance/entitlementmanagement/identity_source.py +5 -4
- office365/directory/identitygovernance/entitlementmanagement/management_settings.py +3 -0
- office365/directory/identitygovernance/entitlementmanagement/schedule.py +1 -2
- office365/directory/identitygovernance/entitlementmanagement/social_identity_source.py +0 -3
- office365/directory/identitygovernance/governance.py +47 -5
- office365/directory/identitygovernance/guest_sponsor_trigger.py +0 -3
- office365/directory/identitygovernance/insights.py +3 -1
- office365/directory/identitygovernance/lifecycle_management_settings.py +10 -0
- office365/directory/identitygovernance/lifecycle_workflows_container.py +43 -2
- office365/directory/identitygovernance/lifecycletaskcategory.py +4 -0
- office365/directory/identitygovernance/lifecycleworkflows/category.py +4 -0
- office365/directory/identitygovernance/parameter.py +1 -2
- office365/directory/identitygovernance/percentage_based_quarantine_condition.py +0 -3
- office365/directory/identitygovernance/preview_failed_task.py +0 -3
- office365/directory/identitygovernance/privilegedaccess/approval.py +2 -0
- office365/directory/identitygovernance/privilegedaccess/group.py +30 -0
- office365/directory/identitygovernance/privilegedaccess/group_assignment_schedule.py +9 -0
- office365/directory/identitygovernance/privilegedaccess/group_assignment_schedule_request.py +9 -0
- office365/directory/identitygovernance/privilegedaccess/group_eligibility_schedule.py +7 -0
- office365/directory/identitygovernance/privilegedaccess/group_eligibility_schedule_instance.py +8 -0
- office365/directory/identitygovernance/privilegedaccess/group_eligibility_schedule_request.py +8 -0
- office365/directory/identitygovernance/privilegedaccess/group_resource.py +7 -0
- office365/directory/identitygovernance/privilegedaccess/role_management_custom_callout_extension.py +39 -0
- office365/directory/identitygovernance/privilegedaccess/root.py +30 -1
- office365/directory/identitygovernance/privilegedaccess/schedule/group_assignment_instance.py +10 -0
- office365/directory/identitygovernance/privilegedaccess/schedule/instance.py +3 -0
- office365/directory/identitygovernance/privilegedaccess/schedule/schedule.py +14 -0
- office365/directory/identitygovernance/privilegedaccess/schedule_request.py +21 -1
- office365/directory/identitygovernance/process_content_metadata_base.py +6 -2
- office365/directory/identitygovernance/provisioning_attribute_mapping.py +0 -3
- office365/directory/identitygovernance/provisioning_object_workflow_subject.py +1 -2
- office365/directory/identitygovernance/quarantine_condition.py +0 -3
- office365/directory/identitygovernance/quarantine_configuration.py +1 -2
- office365/directory/identitygovernance/quarantine_details.py +1 -2
- office365/directory/identitygovernance/resource_access_detail.py +0 -3
- office365/directory/identitygovernance/rulebasedsubjectset.py +0 -3
- office365/directory/identitygovernance/run.py +54 -5
- office365/directory/identitygovernance/runsummary.py +0 -3
- office365/directory/identitygovernance/subject_processing_result.py +117 -0
- office365/directory/identitygovernance/subject_summary.py +0 -3
- office365/directory/identitygovernance/subject_type.py +13 -0
- office365/directory/identitygovernance/task.py +10 -0
- office365/directory/identitygovernance/task_definition.py +7 -0
- office365/directory/identitygovernance/task_processing_result.py +21 -1
- office365/directory/identitygovernance/task_report.py +13 -0
- office365/directory/identitygovernance/taskreportsummary.py +0 -3
- office365/directory/identitygovernance/termsofuse/agreement.py +26 -3
- office365/directory/identitygovernance/termsofuse/agreement_acceptance.py +14 -0
- office365/directory/identitygovernance/termsofuse/agreement_file.py +6 -2
- office365/directory/identitygovernance/termsofuse/agreement_file_data.py +0 -3
- office365/directory/identitygovernance/termsofuse/agreement_file_localization.py +6 -2
- office365/directory/identitygovernance/termsofuse/agreement_file_properties.py +14 -0
- office365/directory/identitygovernance/termsofuse/agreement_file_version.py +4 -2
- office365/directory/identitygovernance/termsofuse/container.py +3 -0
- office365/directory/identitygovernance/termsofuse/terms_expiration.py +1 -2
- office365/directory/identitygovernance/text_content.py +0 -3
- office365/directory/identitygovernance/timebasedattributetrigger.py +0 -3
- office365/directory/identitygovernance/toptasksinsightssummary.py +0 -3
- office365/directory/identitygovernance/topworkflowsinsightssummary.py +0 -3
- office365/directory/identitygovernance/triggerandscopebasedconditions.py +4 -2
- office365/directory/identitygovernance/user_data_security_and_governance.py +37 -0
- office365/directory/identitygovernance/user_inactivity_trigger.py +0 -3
- office365/directory/identitygovernance/user_processing_result.py +13 -0
- office365/directory/identitygovernance/user_protection_scope_container.py +9 -0
- office365/directory/identitygovernance/userconsent/request.py +3 -0
- office365/directory/identitygovernance/userconsent/request_collection.py +2 -0
- office365/directory/identitygovernance/usersprocessingsummary.py +0 -3
- office365/directory/identitygovernance/usersummary.py +0 -3
- office365/directory/identitygovernance/workflow/attributechangetrigger.py +1 -2
- office365/directory/identitygovernance/workflow/base.py +28 -2
- office365/directory/identitygovernance/workflow/custom_callout_extension.py +6 -0
- office365/directory/identitygovernance/workflow/custom_extension_stage_setting.py +3 -0
- office365/directory/identitygovernance/workflow/customtaskextensioncallbackdata.py +0 -3
- office365/directory/identitygovernance/workflow/executiontype.py +4 -0
- office365/directory/identitygovernance/workflow/insightsbycategory.py +0 -3
- office365/directory/identitygovernance/workflow/insightssummary.py +0 -3
- office365/directory/identitygovernance/workflow/membershipchangetrigger.py +0 -3
- office365/directory/identitygovernance/workflow/setting.py +16 -0
- office365/directory/identitygovernance/workflow/subject.py +7 -0
- office365/directory/identitygovernance/workflow/template.py +6 -0
- office365/directory/identitygovernance/workflow/triggerattribute.py +0 -3
- office365/directory/identitygovernance/workflow/version.py +26 -0
- office365/directory/identitygovernance/workflow/workflow.py +141 -0
- office365/directory/inheritable_permission.py +26 -0
- office365/directory/insights/identity.py +12 -0
- office365/directory/insights/office_graph.py +4 -0
- office365/directory/insights/resource_reference.py +4 -3
- office365/directory/insights/shared.py +25 -1
- office365/directory/insights/sharing_detail.py +5 -2
- office365/directory/insights/trending.py +21 -1
- office365/directory/insights/usage_details.py +4 -2
- office365/directory/insights/used.py +15 -1
- office365/directory/internal/sponsors.py +7 -0
- office365/directory/invitations/collection.py +5 -0
- office365/directory/invitations/invitation.py +13 -1
- office365/directory/invitations/message_info.py +1 -2
- office365/directory/key_credential.py +8 -25
- office365/directory/licenses/assigned_license.py +1 -2
- office365/directory/licenses/assigned_plan.py +0 -2
- office365/directory/licenses/assignment_state.py +1 -2
- office365/directory/licenses/collection.py +30 -0
- office365/directory/licenses/details.py +2 -0
- office365/directory/licenses/processing_state.py +0 -3
- office365/directory/licenses/service_plan_info.py +0 -3
- office365/directory/licenses/subscribed_sku.py +4 -0
- office365/directory/licenses/units_detail.py +0 -3
- office365/directory/migrations_root.py +30 -0
- office365/directory/modified_property.py +13 -0
- office365/directory/multi_tenant_application_metrics.py +45 -0
- office365/directory/multi_tenant_application_metrics_base.py +31 -0
- office365/directory/multi_tenant_application_metrics_initial.py +19 -0
- office365/directory/multi_tenant_application_metrics_recent.py +19 -0
- office365/directory/multi_tenant_applications_to_provision.py +22 -0
- office365/directory/multi_tenant_applications_to_provision_snapshot.py +22 -0
- office365/directory/multi_tenant_organization_identity_sync_policy_template.py +24 -0
- office365/directory/multi_tenant_organization_join_request_record.py +41 -0
- office365/directory/multi_tenant_organization_member.py +67 -0
- office365/directory/multi_tenant_organization_partner_configuration_template.py +56 -0
- office365/directory/o_auth_consent_app_detail.py +14 -0
- office365/directory/objects/addin.py +1 -2
- office365/directory/objects/collection.py +39 -0
- office365/directory/objects/informationalurl.py +0 -3
- office365/directory/objects/object.py +39 -0
- office365/directory/objects/onpremisesprovisioningerror.py +0 -2
- office365/directory/objects/service_provisioning_xml_error.py +0 -3
- office365/directory/objects/serviceprovisioningerror.py +0 -2
- office365/directory/on_premises_directory_synchronization.py +28 -0
- office365/directory/password_credential.py +9 -25
- office365/directory/permissions/checker.py +23 -13
- office365/directory/permissions/comment_action.py +1 -2
- office365/directory/permissions/create_action.py +0 -3
- office365/directory/permissions/delete_action.py +0 -3
- office365/directory/permissions/grants/condition_set.py +31 -0
- office365/directory/permissions/grants/oauth2.py +6 -0
- office365/directory/permissions/grants/resource_specific.py +6 -0
- office365/directory/permissions/grants/resourcespecificpermission.py +0 -2
- office365/directory/permissions/guard.py +36 -13
- office365/directory/permissions/identity.py +4 -3
- office365/directory/permissions/identity_set.py +7 -25
- office365/directory/permissions/scope.py +0 -3
- office365/directory/permissions/scoped_role_membership.py +4 -0
- office365/directory/policies/activity_based_timeout_policy.py +7 -0
- office365/directory/policies/admin_consent_request.py +49 -0
- office365/directory/policies/all_devices_assignment_target.py +0 -3
- office365/directory/policies/all_domains.py +0 -3
- office365/directory/policies/all_licensed_users_assignment_target.py +0 -3
- office365/directory/policies/app_management.py +11 -1
- office365/directory/policies/app_management_application_configuration.py +1 -2
- office365/directory/policies/app_management_configuration.py +1 -2
- office365/directory/policies/app_management_policy_actor_exemptions.py +1 -2
- office365/directory/policies/app_management_service_principal_configuration.py +0 -3
- office365/directory/policies/applied_conditional_access.py +1 -2
- office365/directory/policies/authentication_combination_configuration.py +2 -0
- office365/directory/policies/authentication_context_class_reference.py +4 -0
- office365/directory/policies/authentication_flows.py +23 -0
- office365/directory/policies/authentication_methods.py +9 -0
- office365/directory/policies/authentication_strength.py +14 -0
- office365/directory/policies/authorization.py +21 -0
- office365/directory/policies/azure_ad_registration_policy.py +1 -2
- office365/directory/policies/base.py +3 -0
- office365/directory/policies/ca_policies_deletable_root.py +3 -0
- office365/directory/policies/cloud_app_security_session_control.py +0 -3
- office365/directory/policies/conditionalaccess/all_external_tenants.py +0 -3
- office365/directory/policies/conditionalaccess/applications.py +1 -2
- office365/directory/policies/conditionalaccess/authentication_flows.py +0 -3
- office365/directory/policies/conditionalaccess/client_applications.py +1 -2
- office365/directory/policies/conditionalaccess/condition_set.py +1 -2
- office365/directory/policies/conditionalaccess/conditional_access.py +78 -0
- office365/directory/policies/conditionalaccess/device_and_app_management_assignment_target.py +0 -3
- office365/directory/policies/conditionalaccess/device_info.py +1 -2
- office365/directory/policies/conditionalaccess/devices.py +1 -2
- office365/directory/policies/conditionalaccess/enumerated_external_tenants.py +1 -2
- office365/directory/policies/conditionalaccess/external_tenants.py +0 -3
- office365/directory/policies/conditionalaccess/filter.py +0 -3
- office365/directory/policies/conditionalaccess/grant_controls.py +1 -2
- office365/directory/policies/conditionalaccess/guests_or_external_users.py +1 -2
- office365/directory/policies/conditionalaccess/locations.py +1 -2
- office365/directory/policies/conditionalaccess/persistent_browser_session_control.py +0 -3
- office365/directory/policies/conditionalaccess/platforms.py +1 -2
- office365/directory/policies/conditionalaccess/policy_deletable_item.py +2 -0
- office365/directory/policies/conditionalaccess/policy_detail.py +1 -2
- office365/directory/policies/conditionalaccess/secure_sign_in_session_control.py +0 -3
- office365/directory/policies/conditionalaccess/service_principal_sign_in.py +0 -3
- office365/directory/policies/conditionalaccess/session_controls.py +1 -2
- office365/directory/policies/conditionalaccess/sign_in_conditions.py +1 -2
- office365/directory/policies/conditionalaccess/sign_in_frequency_session_control.py +0 -3
- office365/directory/policies/conditionalaccess/sign_in_identity.py +0 -3
- office365/directory/policies/conditionalaccess/user_action_context.py +0 -3
- office365/directory/policies/conditionalaccess/user_sign_in.py +0 -3
- office365/directory/policies/conditionalaccess/users.py +1 -2
- office365/directory/policies/crosstenant/access.py +47 -0
- office365/directory/policies/crosstenant/app_service_connect_setting.py +1 -2
- office365/directory/policies/crosstenant/b2_b_setting.py +1 -2
- office365/directory/policies/crosstenant/inbound_trust.py +0 -3
- office365/directory/policies/crosstenant/m365_collaboration_inbound_setting.py +1 -2
- office365/directory/policies/crosstenant/m365_collaboration_outbound_setting.py +1 -2
- office365/directory/policies/crosstenant/target.py +0 -3
- office365/directory/policies/crosstenant/target_configuration.py +1 -2
- office365/directory/policies/crosstenant/tenant_restrictions.py +1 -2
- office365/directory/policies/crosstenant/user_sync_inbound.py +0 -3
- office365/directory/policies/custom_app_management_application_configuration.py +1 -2
- office365/directory/policies/custom_app_management_configuration.py +1 -2
- office365/directory/policies/default_invitation_redemption_identity_provider_configuration.py +0 -3
- office365/directory/policies/device_registration.py +55 -0
- office365/directory/policies/devices_filter.py +0 -3
- office365/directory/policies/dlpaction.py +4 -0
- office365/directory/policies/enumerated_domains.py +1 -2
- office365/directory/policies/face_check_configuration.py +0 -3
- office365/directory/policies/feature_rollout.py +40 -1
- office365/directory/policies/federated_token_validation_policy.py +17 -0
- office365/directory/policies/group_scope.py +0 -3
- office365/directory/policies/identifier_uri_configuration.py +1 -2
- office365/directory/policies/inbound_outbound_policy_configuration.py +0 -3
- office365/directory/policies/invitation_redemption_identity_provider_configuration.py +1 -2
- office365/directory/policies/ownerless_group_policy.py +57 -0
- office365/directory/policies/permission_grant.py +3 -0
- office365/directory/policies/protected_application_metadata.py +2 -3
- office365/directory/policies/protection_policy_artifact_count.py +0 -3
- office365/directory/policies/restrict_access_action.py +0 -3
- office365/directory/policies/restrict_access_action_base.py +1 -4
- office365/directory/policies/retention_setting.py +0 -2
- office365/directory/policies/root.py +164 -7
- office365/directory/policies/scope_base.py +0 -3
- office365/directory/policies/security_defaults.py +2 -0
- office365/directory/policies/self_service_sign_up_authentication_flow_configuration.py +0 -3
- office365/directory/policies/sts.py +3 -1
- office365/directory/policies/template.py +48 -0
- office365/directory/policies/tenant_app_management.py +31 -0
- office365/directory/policies/tenant_scope.py +0 -3
- office365/directory/policies/unifiedrolemanagement/policy.py +84 -1
- office365/directory/policies/unifiedrolemanagement/unified_role_assignment_schedule_request.py +154 -0
- office365/directory/policies/update_allowed_combinations_result.py +1 -2
- office365/directory/policies/user_scope.py +0 -3
- office365/directory/policies/validating_domains.py +0 -3
- office365/directory/policies/verified_id_profile_configuration.py +13 -2
- office365/directory/policies/verified_id_usage_configuration.py +5 -3
- office365/directory/profile_card_annotation.py +18 -0
- office365/directory/profile_photo.py +3 -0
- office365/directory/profile_source_localization.py +13 -0
- office365/directory/protection/bitlocker.py +34 -0
- office365/directory/protection/bitlocker_recovery_key.py +38 -0
- office365/directory/protection/information.py +26 -0
- office365/directory/protection/policy/base.py +85 -0
- office365/directory/protection/policy/one_drive_for_business.py +46 -0
- office365/directory/protection/risk_detection.py +20 -0
- office365/directory/protection/riskyusers/activity.py +1 -2
- office365/directory/protection/riskyusers/collection.py +3 -0
- office365/directory/protection/riskyusers/history_item.py +2 -0
- office365/directory/protection/riskyusers/risk_service_principal_activity.py +1 -2
- office365/directory/protection/riskyusers/risky_service_principal.py +11 -0
- office365/directory/protection/riskyusers/risky_service_principal_history_item.py +9 -0
- office365/directory/protection/riskyusers/risky_user.py +6 -0
- office365/directory/protection/riskyusers/service_principal_risk_detection.py +21 -0
- office365/directory/protection/root.py +46 -2
- office365/directory/protection/rules/base.py +77 -0
- office365/directory/protection/rules/drive.py +15 -0
- office365/directory/protection/threatassessment/requests/email_file.py +23 -0
- office365/directory/protection/threatassessment/requests/file.py +12 -0
- office365/directory/protection/threatassessment/requests/mail.py +30 -0
- office365/directory/protection/threatassessment/requests/request.py +45 -1
- office365/directory/protection/threatassessment/requests/threat_assessment_result.py +32 -0
- office365/directory/protection/threatassessment/requests/url.py +8 -0
- office365/directory/quotas.py +39 -2
- office365/directory/recovery/change_object_base.py +31 -0
- office365/directory/recovery/job.py +30 -0
- office365/directory/recovery/job_base.py +57 -0
- office365/directory/recovery/job_entity_name_and_ids_filter.py +17 -0
- office365/directory/recovery/job_entity_names_filter.py +17 -0
- office365/directory/recovery/job_filtering_criteria_base.py +7 -0
- office365/directory/recovery/preview_job.py +9 -0
- office365/directory/recovery/recovery.py +40 -0
- office365/directory/related_tenant.py +96 -0
- office365/directory/related_tenants_refresh_status.py +15 -0
- office365/directory/relationship_creation_type.py +13 -0
- office365/directory/relationship_policy.py +28 -0
- office365/directory/relationship_status.py +14 -0
- office365/directory/remote_tenant_group.py +43 -0
- office365/directory/request_schedule.py +20 -0
- office365/directory/request_status.py +14 -0
- office365/directory/requestor_manager.py +0 -3
- office365/directory/resource_visualization.py +18 -0
- office365/directory/role_template.py +12 -0
- office365/directory/role_type.py +15 -0
- office365/directory/rolemanagement/app_scope.py +21 -0
- office365/directory/rolemanagement/application.py +145 -3
- office365/directory/rolemanagement/management.py +2 -1
- office365/directory/rolemanagement/resource_action.py +5 -2
- office365/directory/rolemanagement/roles/collection.py +34 -4
- office365/directory/rolemanagement/roles/management_deleted_item_container.py +30 -0
- office365/directory/rolemanagement/roles/permission.py +5 -2
- office365/directory/rolemanagement/roles/role.py +16 -1
- office365/directory/rolemanagement/templates/template.py +3 -0
- office365/directory/rolemanagement/unifiedrole/assignment.py +43 -3
- office365/directory/rolemanagement/unifiedrole/definition.py +38 -1
- office365/directory/rolemanagement/unifiedrole/notification_recipients.py +1 -2
- office365/directory/rolemanagement/unifiedrole/permission.py +1 -2
- office365/directory/service_provider_constraints.py +7 -0
- office365/directory/service_storage_quota_breakdown.py +7 -0
- office365/directory/serviceprincipals/approved_client_app.py +18 -0
- office365/directory/serviceprincipals/collection.py +48 -4
- office365/directory/serviceprincipals/delegated_permission_classification.py +4 -0
- office365/directory/serviceprincipals/federated_identity_credential.py +6 -0
- office365/directory/serviceprincipals/identity.py +11 -0
- office365/directory/serviceprincipals/lockconfiguration.py +0 -3
- office365/directory/serviceprincipals/remote_desktop_security_configuration.py +43 -1
- office365/directory/serviceprincipals/samlsinglesignonsettings.py +0 -3
- office365/directory/serviceprincipals/service_principal.py +472 -67
- office365/directory/serviceprincipals/target_device_group.py +18 -0
- office365/directory/single_service_principal.py +0 -3
- office365/directory/single_user.py +0 -3
- office365/directory/snapshot.py +55 -0
- office365/directory/status.py +15 -0
- office365/directory/subscriptions/company.py +84 -0
- office365/directory/synchronization/attribute_mapping.py +2 -3
- office365/directory/synchronization/attribute_mapping_function_schema.py +3 -1
- office365/directory/synchronization/directory_definition.py +8 -1
- office365/directory/synchronization/filter_operator_schema.py +4 -0
- office365/directory/synchronization/job.py +19 -1
- office365/directory/synchronization/job_application_parameters.py +1 -2
- office365/directory/synchronization/job_subject.py +5 -4
- office365/directory/synchronization/linked_objects.py +7 -10
- office365/directory/synchronization/metadata_entry.py +0 -3
- office365/directory/synchronization/on_premises_accidental_deletion_prevention.py +0 -3
- office365/directory/synchronization/on_premises_directory_synchronization_configuration.py +1 -2
- office365/directory/synchronization/on_premises_directory_synchronization_feature.py +0 -3
- office365/directory/synchronization/progress.py +0 -3
- office365/directory/synchronization/quarantine.py +1 -2
- office365/directory/synchronization/rule.py +5 -6
- office365/directory/synchronization/schedule.py +1 -2
- office365/directory/synchronization/schema.py +20 -1
- office365/directory/synchronization/secret_key_string_value_pair.py +0 -3
- office365/directory/synchronization/status.py +2 -3
- office365/directory/synchronization/synchronization.py +16 -0
- office365/directory/synchronization/template.py +19 -0
- office365/directory/target_agent_identity_sponsors_or_owners.py +0 -3
- office365/directory/target_application_owners.py +0 -3
- office365/directory/target_manager.py +0 -3
- office365/directory/target_user_sponsors.py +0 -3
- office365/directory/tenant_governance.py +105 -0
- office365/directory/tenant_governance_policy_template.py +70 -0
- office365/directory/tenant_governance_setting.py +24 -0
- office365/directory/tenantinformation/information.py +0 -3
- office365/directory/tenantinformation/multi_organization.py +73 -0
- office365/directory/tenantinformation/relationship.py +53 -1
- office365/directory/ticket_info.py +12 -0
- office365/directory/unified_approval_stage.py +24 -0
- office365/directory/unified_rbac_resource_action.py +48 -0
- office365/directory/unified_rbac_resource_namespace.py +40 -0
- office365/directory/unified_role.py +11 -0
- office365/directory/unified_role_assignment_schedule.py +50 -0
- office365/directory/unified_role_assignment_schedule_instance.py +68 -0
- office365/directory/unified_role_eligibility_schedule.py +25 -0
- office365/directory/unified_role_eligibility_schedule_instance.py +37 -0
- office365/directory/unified_role_eligibility_schedule_request.py +141 -0
- office365/directory/unified_role_management_policy_approval_rule.py +17 -0
- office365/directory/unified_role_management_policy_assignment.py +54 -0
- office365/directory/unified_role_management_policy_authentication_context_rule.py +24 -0
- office365/directory/unified_role_management_policy_custom_extension_rule.py +37 -0
- office365/directory/unified_role_management_policy_enablement_rule.py +17 -0
- office365/directory/unified_role_management_policy_expiration_rule.py +25 -0
- office365/directory/unified_role_management_policy_notification_rule.py +43 -0
- office365/directory/unified_role_management_policy_rule.py +17 -0
- office365/directory/unified_role_management_policy_rule_target.py +30 -0
- office365/directory/unified_role_schedule_base.py +109 -0
- office365/directory/unified_role_schedule_instance_base.py +84 -0
- office365/directory/unified_root.py +70 -0
- office365/directory/unified_storage_quota.py +70 -0
- office365/directory/users/activities/activity.py +31 -2
- office365/directory/users/activities/collection.py +2 -0
- office365/directory/users/activities/history_item.py +48 -1
- office365/directory/users/authorizationinfo.py +1 -2
- office365/directory/users/collection.py +18 -1
- office365/directory/users/employeeorgdata.py +0 -3
- office365/directory/users/identity.py +4 -3
- office365/directory/users/inference_classification.py +25 -0
- office365/directory/users/inference_classification_override.py +24 -0
- office365/directory/users/insights_settings.py +2 -0
- office365/directory/users/item_insights.py +7 -0
- office365/directory/users/note.py +109 -0
- office365/directory/users/onpremisesextensionattributes.py +0 -3
- office365/directory/users/password_profile.py +0 -3
- office365/directory/users/profile.py +1 -2
- office365/directory/users/provisioned_plan.py +13 -0
- office365/directory/users/settings.py +58 -3
- office365/directory/users/storage.py +17 -0
- office365/directory/users/user.py +321 -24
- office365/directory/users/windows_setting.py +53 -0
- office365/directory/users/windows_setting_instance.py +37 -0
- office365/directory/users/work_hours_and_locations_setting.py +51 -0
- office365/directory/users/work_plan_occurrence.py +51 -0
- office365/directory/users/work_plan_recurrence.py +45 -0
- office365/directory/verified_id_profile.py +75 -0
- office365/directory/visual_info.py +19 -0
- office365/education/challenging_word.py +12 -0
- office365/education/related_contact.py +0 -3
- office365/education/root.py +4 -0
- office365/education/rubric_criterion.py +7 -0
- office365/education/rubric_level.py +12 -0
- office365/education/rubric_quality.py +20 -0
- office365/education/rubric_quality_feedback_model.py +11 -0
- office365/education/rubric_quality_selected_column_model.py +12 -0
- office365/entity.py +79 -4
- office365/entity_collection.py +33 -2
- office365/exchange/README.md +170 -0
- office365/exchange/__init__.py +6 -0
- office365/exchange/client.py +163 -0
- office365/exchange/cmdlets.py +68 -0
- office365/exchange/environments.py +30 -0
- office365/exchange/query.py +49 -0
- office365/exchange/request.py +134 -0
- office365/externalconnectors/acl.py +18 -0
- office365/externalconnectors/activity_settings.py +17 -0
- office365/externalconnectors/connection_operation.py +14 -2
- office365/externalconnectors/connector_type.py +12 -0
- office365/externalconnectors/content_category.py +18 -4
- office365/externalconnectors/display_template.py +19 -0
- office365/externalconnectors/external_activity.py +18 -1
- office365/externalconnectors/external_activity_result.py +8 -0
- office365/externalconnectors/external_group.py +19 -1
- office365/externalconnectors/external_item_content.py +16 -0
- office365/externalconnectors/external_item_information_protection_label.py +11 -0
- office365/externalconnectors/identity.py +19 -0
- office365/externalconnectors/item_id_resolver.py +15 -0
- office365/externalconnectors/principal.py +17 -0
- office365/externalconnectors/properties.py +7 -0
- office365/externalconnectors/property.py +27 -0
- office365/externalconnectors/property_rule.py +21 -0
- office365/externalconnectors/schema.py +2 -0
- office365/externalconnectors/url_match_info.py +15 -0
- office365/externalconnectors/url_to_item_resolver_base.py +11 -0
- office365/graph_client.py +208 -62
- office365/graph_request.py +56 -4
- office365/intune/audit/actor.py +25 -0
- office365/intune/audit/event.py +62 -2
- office365/intune/audit/event_collection.py +25 -0
- office365/intune/audit/property.py +12 -0
- office365/intune/audit/resource.py +15 -2
- office365/intune/browser/browser_site_history.py +1 -2
- office365/intune/devices/alternative_security_id.py +0 -3
- office365/intune/devices/and_app_management_role_assignment.py +17 -0
- office365/intune/devices/and_app_management_role_definition.py +7 -0
- office365/intune/devices/category.py +21 -0
- office365/intune/devices/cloud_pc.py +15 -0
- office365/intune/devices/cloud_pc_launch_detail.py +0 -3
- office365/intune/devices/cloud_pc_windows_setting.py +0 -3
- office365/intune/devices/collection.py +6 -0
- office365/intune/devices/compliance/android_compliance_policy.py +142 -0
- office365/intune/devices/compliance/android_work_profile_compliance_policy.py +142 -0
- office365/intune/devices/compliance/compliance.py +7 -0
- office365/intune/devices/compliance/information.py +18 -0
- office365/intune/devices/compliance/ios_compliance_policy.py +100 -0
- office365/intune/devices/compliance/mac_os_compliance_policy.py +118 -0
- office365/intune/devices/compliance/management_partner.py +79 -0
- office365/intune/devices/compliance/management_partner_assignment.py +16 -0
- office365/intune/devices/compliance/policy.py +180 -0
- office365/intune/devices/compliance/policy_state.py +52 -0
- office365/intune/devices/compliance/setting_state_device_summary.py +66 -0
- office365/intune/devices/compliance/windows10_compliance_policy.py +127 -0
- office365/intune/devices/compliance/windows10_mobile_compliance_policy.py +109 -0
- office365/intune/devices/compliance/windows81_compliance_policy.py +79 -0
- office365/intune/devices/compliance/windows_phone81_compliance_policy.py +79 -0
- office365/intune/devices/compliance_action_item.py +38 -0
- office365/intune/devices/compliance_device_overview.py +55 -0
- office365/intune/devices/compliance_device_status.py +56 -0
- office365/intune/devices/compliance_policy_assignment.py +19 -0
- office365/intune/devices/compliance_policy_device_state_summary.py +66 -0
- office365/intune/devices/compliance_policy_setting_state_summary.py +97 -0
- office365/intune/devices/compliance_scheduled_action_for_rule.py +42 -0
- office365/intune/devices/compliance_setting_state.py +80 -0
- office365/intune/devices/compliance_user_overview.py +55 -0
- office365/intune/devices/compliance_user_status.py +44 -0
- office365/intune/devices/configuration_assignment.py +19 -0
- office365/intune/devices/configuration_device_overview.py +55 -0
- office365/intune/devices/configuration_device_state_summary.py +54 -0
- office365/intune/devices/configuration_device_status.py +56 -0
- office365/intune/devices/configuration_state.py +54 -0
- office365/intune/devices/configuration_user_overview.py +55 -0
- office365/intune/devices/configuration_user_status.py +44 -0
- office365/intune/devices/configurations/android/android_lob_app.py +11 -0
- office365/intune/devices/configurations/android/android_store_app.py +10 -0
- office365/intune/devices/configurations/android/custom_configuration.py +18 -0
- office365/intune/devices/configurations/android/general_device_configuration.py +305 -0
- office365/intune/devices/configurations/android/minimum_operating_system.py +26 -0
- office365/intune/devices/configurations/android/mobile_app_identifier.py +11 -0
- office365/intune/devices/configurations/android/work_profile_custom_configuration.py +18 -0
- office365/intune/devices/configurations/android/work_profile_general_device_configuration.py +231 -0
- office365/intune/devices/configurations/configuration.py +148 -0
- office365/intune/devices/configurations/edge_search_engine.py +14 -0
- office365/intune/devices/configurations/edge_search_engine_base.py +7 -0
- office365/intune/devices/configurations/edge_search_engine_custom.py +11 -0
- office365/intune/devices/configurations/ios/certificate_profile.py +7 -0
- office365/intune/devices/configurations/ios/custom_configuration.py +30 -0
- office365/intune/devices/configurations/ios/features_configuration.py +48 -0
- office365/intune/devices/configurations/ios/general/device_configuration.py +815 -0
- office365/intune/devices/configurations/ios/home_screen_app.py +11 -0
- office365/intune/devices/configurations/ios/home_screen_folder.py +19 -0
- office365/intune/devices/configurations/ios/home_screen_folder_page.py +18 -0
- office365/intune/devices/configurations/ios/home_screen_item.py +11 -0
- office365/intune/devices/configurations/ios/home_screen_page.py +20 -0
- office365/intune/devices/configurations/ios/minimum_operating_system.py +18 -0
- office365/intune/devices/configurations/ios/network_usage_rule.py +17 -0
- office365/intune/devices/configurations/ios/notification_settings.py +22 -0
- office365/intune/devices/configurations/ios/update_configuration.py +39 -0
- office365/intune/devices/configurations/macos/mac_os_custom_configuration.py +30 -0
- office365/intune/devices/configurations/macos/mac_os_device_features_configuration.py +7 -0
- office365/intune/devices/configurations/macos/mac_os_general_device_configuration.py +89 -0
- office365/intune/devices/configurations/macos/mac_os_minimum_operating_system.py +22 -0
- office365/intune/devices/configurations/media_content_rating_australia.py +18 -0
- office365/intune/devices/configurations/media_content_rating_canada.py +18 -0
- office365/intune/devices/configurations/media_content_rating_france.py +18 -0
- office365/intune/devices/configurations/media_content_rating_germany.py +18 -0
- office365/intune/devices/configurations/media_content_rating_ireland.py +18 -0
- office365/intune/devices/configurations/media_content_rating_japan.py +18 -0
- office365/intune/devices/configurations/media_content_rating_new_zealand.py +18 -0
- office365/intune/devices/configurations/media_content_rating_united_kingdom.py +18 -0
- office365/intune/devices/configurations/media_content_rating_united_states.py +18 -0
- office365/intune/devices/configurations/oma_setting.py +13 -0
- office365/intune/devices/configurations/oma_setting_base64.py +12 -0
- office365/intune/devices/configurations/oma_setting_boolean.py +11 -0
- office365/intune/devices/configurations/oma_setting_date_time.py +13 -0
- office365/intune/devices/configurations/oma_setting_floating_point.py +11 -0
- office365/intune/devices/configurations/oma_setting_integer.py +11 -0
- office365/intune/devices/configurations/oma_setting_string.py +11 -0
- office365/intune/devices/configurations/oma_setting_string_xml.py +12 -0
- office365/intune/devices/configurations/rgb_color.py +13 -0
- office365/intune/devices/configurations/windows/bit_locker_removable_drive_policy.py +16 -0
- office365/intune/devices/configurations/windows/defender_advanced_threat_protection_configuration.py +24 -0
- office365/intune/devices/configurations/windows/firewall_network_profile.py +25 -0
- office365/intune/devices/configurations/windows/minimum_operating_system.py +13 -0
- office365/intune/devices/configurations/windows/out_of_box_experience_setting.py +22 -0
- office365/intune/devices/configurations/windows/phone81_custom_configuration.py +18 -0
- office365/intune/devices/configurations/windows/phone81_general_configuration.py +190 -0
- office365/intune/devices/configurations/windows/shared_pc_account_manager_policy.py +17 -0
- office365/intune/devices/configurations/windows/update_active_hours_install.py +14 -0
- office365/intune/devices/configurations/windows/update_for_business_configuration.py +246 -0
- office365/intune/devices/configurations/windows/update_install_schedule_type.py +7 -0
- office365/intune/devices/configurations/windows/update_scheduled_install.py +17 -0
- office365/intune/devices/configurations/windows/windows10_custom_configuration.py +18 -0
- office365/intune/devices/configurations/windows/windows10_endpoint_protection_configuration.py +260 -0
- office365/intune/devices/configurations/windows/windows10_enrollment_completion_page_configuration.py +18 -0
- office365/intune/devices/configurations/windows/windows10_enterprise_modern_app_management_configuration.py +18 -0
- office365/intune/devices/configurations/windows/windows10_general_configuration.py +1251 -0
- office365/intune/devices/configurations/windows/windows10_network_proxy_server.py +16 -0
- office365/intune/devices/configurations/windows/windows10_secure_assessment_configuration.py +42 -0
- office365/intune/devices/configurations/windows/windows10_team_general_configuration.py +137 -0
- office365/intune/devices/configurations/windows/windows81_general_configuration.py +214 -0
- office365/intune/devices/data.py +8 -0
- office365/intune/devices/detail.py +0 -3
- office365/intune/devices/device.py +170 -5
- office365/intune/devices/device_metadata.py +1 -2
- office365/intune/devices/enrollment/configuration.py +56 -1
- office365/intune/devices/enrollment/configuration_assignment.py +16 -0
- office365/intune/devices/enrollment/limit_configuration.py +15 -0
- office365/intune/devices/enrollment_platform_restrictions_configuration.py +41 -0
- office365/intune/devices/enrollment_windows_hello_for_business_configuration.py +86 -0
- office365/intune/devices/enumerated_device_registration_membership.py +1 -2
- office365/intune/devices/install_state.py +62 -0
- office365/intune/devices/local_credential.py +0 -2
- office365/intune/devices/log_collection_response.py +63 -0
- office365/intune/devices/management/action_result.py +17 -0
- office365/intune/devices/management/all_device_registration_membership.py +0 -3
- office365/intune/devices/management/android_managed_app_registration.py +7 -0
- office365/intune/devices/management/app_management.py +176 -4
- office365/intune/devices/management/apple_push_notification_certificate.py +61 -0
- office365/intune/devices/management/compliance_policy_setting_state.py +27 -0
- office365/intune/devices/management/configuration_manager_client_enabled_features.py +16 -0
- office365/intune/devices/management/configuration_manager_collection_assignment_target.py +11 -0
- office365/intune/devices/management/configuration_setting_state.py +27 -0
- office365/intune/devices/management/defender_detected_malware_actions.py +15 -0
- office365/intune/devices/management/delete_user_from_shared_apple_device_action_result.py +11 -0
- office365/intune/devices/management/detected_app.py +67 -0
- office365/intune/devices/management/device_protection_overview.py +0 -3
- office365/intune/devices/management/enrollment_platform_restriction.py +14 -0
- office365/intune/devices/management/exchange_access_state_summary.py +15 -0
- office365/intune/devices/management/geo_location.py +20 -0
- office365/intune/devices/management/group_peer_outlier_recommendation_insight_settings.py +7 -0
- office365/intune/devices/management/health_attestation_state.py +44 -0
- office365/intune/devices/management/imported_windows_autopilot_device_identity.py +57 -0
- office365/intune/devices/management/imported_windows_autopilot_device_identity_state.py +19 -0
- office365/intune/devices/management/insight_value_double.py +11 -0
- office365/intune/devices/management/insight_value_int.py +11 -0
- office365/intune/devices/management/integer_range.py +12 -0
- office365/intune/devices/management/ios_managed_app_registration.py +7 -0
- office365/intune/devices/management/ios_update_device_status.py +81 -0
- office365/intune/devices/management/localized_notification_message.py +43 -0
- office365/intune/devices/management/locate_device_action_result.py +14 -0
- office365/intune/devices/management/m365_capability_base.py +33 -0
- office365/intune/devices/management/m365_capability_inbound_access.py +17 -0
- office365/intune/devices/management/m365_capability_resource_scope.py +13 -0
- office365/intune/devices/management/m365_capability_resource_scopes.py +22 -0
- office365/intune/devices/management/m365_resource_type.py +14 -0
- office365/intune/devices/management/managed/app/app.py +3 -0
- office365/intune/devices/management/managed/app/configuration.py +2 -0
- office365/intune/devices/management/managed/app/diagnostic_status.py +12 -0
- office365/intune/devices/management/managed/app/operation.py +37 -0
- office365/intune/devices/management/managed/app/protections/android.py +42 -1
- office365/intune/devices/management/managed/app/protections/default.py +47 -2
- office365/intune/devices/management/managed/app/protections/ios.py +42 -2
- office365/intune/devices/management/managed/app/protections/protection.py +28 -0
- office365/intune/devices/management/managed/app/protections/targeted.py +25 -1
- office365/intune/devices/management/managed/app/protections/targeted_managed_app_policy_assignment.py +19 -0
- office365/intune/devices/management/managed/app/protections/windows.py +206 -1
- office365/intune/devices/management/managed/app/registration.py +43 -2
- office365/intune/devices/management/managed/app/status.py +3 -0
- office365/intune/devices/management/managed/app_policy_deployment_summary.py +50 -0
- office365/intune/devices/management/managed/collection.py +26 -0
- office365/intune/devices/management/managed/device_mobile_app_configuration.py +150 -0
- office365/intune/devices/management/managed/device_mobile_app_configuration_assignment.py +19 -0
- office365/intune/devices/management/managed/device_mobile_app_configuration_device_status.py +56 -0
- office365/intune/devices/management/managed/device_mobile_app_configuration_device_summary.py +55 -0
- office365/intune/devices/management/managed/device_mobile_app_configuration_user_status.py +44 -0
- office365/intune/devices/management/managed/device_mobile_app_configuration_user_summary.py +55 -0
- office365/intune/devices/management/managed/device_overview.py +44 -0
- office365/intune/devices/management/managed/ebook/e_book_assignment.py +26 -0
- office365/intune/devices/management/managed/ebook/ebook.py +84 -1
- office365/intune/devices/management/managed/ebook/install_summary.py +48 -0
- office365/intune/devices/management/managed/ebook/user_install_state_summary.py +54 -0
- office365/intune/devices/management/managed/managed.py +172 -11
- office365/intune/devices/management/managed/mobile_app.py +25 -0
- office365/intune/devices/management/management.py +1035 -12
- office365/intune/devices/management/mdm_windows_information_protection_policy.py +7 -0
- office365/intune/devices/management/mobile_threat_defense_connector.py +104 -0
- office365/intune/devices/management/mobileapps/app_configuration_setting_item.py +14 -0
- office365/intune/devices/management/mobileapps/app_list_item.py +14 -0
- office365/intune/devices/management/mobileapps/app_log_collection_download_details.py +16 -0
- office365/intune/devices/management/mobileapps/app_log_collection_request.py +39 -0
- office365/intune/devices/management/mobileapps/apps_installation_options_for_mac.py +12 -0
- office365/intune/devices/management/mobileapps/apps_installation_options_for_windows.py +14 -0
- office365/intune/devices/management/mobileapps/assignment.py +18 -0
- office365/intune/devices/management/mobileapps/category.py +3 -0
- office365/intune/devices/management/mobileapps/content.py +27 -1
- office365/intune/devices/management/mobileapps/content_file.py +11 -0
- office365/intune/devices/management/mobileapps/file_encryption_info.py +0 -3
- office365/intune/devices/management/mobileapps/ios/ios_device_type.py +0 -3
- office365/intune/devices/management/mobileapps/ios/ios_mobile_app_configuration.py +12 -0
- office365/intune/devices/management/mobileapps/ios/iosi_pad_os_web_clip.py +24 -0
- office365/intune/devices/management/mobileapps/ios/lob_app.py +51 -0
- office365/intune/devices/management/mobileapps/ios/lob_app_assignment_settings.py +13 -0
- office365/intune/devices/management/mobileapps/ios/lob_app_provisioning_configuration_assignment.py +19 -0
- office365/intune/devices/management/mobileapps/ios/mobile_app_identifier.py +11 -0
- office365/intune/devices/management/mobileapps/ios/store_app.py +38 -0
- office365/intune/devices/management/mobileapps/ios/store_app_assignment_settings.py +13 -0
- office365/intune/devices/management/mobileapps/ios/vpp_app.py +76 -0
- office365/intune/devices/management/mobileapps/ios/vpp_app_assignment_settings.py +12 -0
- office365/intune/devices/management/mobileapps/ios/vpp_e_book.py +62 -0
- office365/intune/devices/management/mobileapps/ios/vpp_e_book_assignment.py +7 -0
- office365/intune/devices/management/mobileapps/macos/mac_os_dmg_app.py +45 -0
- office365/intune/devices/management/mobileapps/macos/mac_os_included_app.py +12 -0
- office365/intune/devices/management/mobileapps/macos/mac_os_lob_app.py +70 -0
- office365/intune/devices/management/mobileapps/macos/mac_os_lob_app_assignment_settings.py +11 -0
- office365/intune/devices/management/mobileapps/macos/mac_os_lob_child_app.py +13 -0
- office365/intune/devices/management/mobileapps/macos/mac_os_microsoft_defender_app.py +7 -0
- office365/intune/devices/management/mobileapps/macos/mac_os_microsoft_edge_app.py +17 -0
- office365/intune/devices/management/mobileapps/macos/mac_os_office_suite_app.py +7 -0
- office365/intune/devices/management/mobileapps/managed/app_policy_deployment_summary_per_app.py +17 -0
- office365/intune/devices/management/mobileapps/microsoft_store_for_business_app_assignment_settings.py +11 -0
- office365/intune/devices/management/mobileapps/mobile_app.py +45 -2
- office365/intune/devices/management/mobileapps/mobile_app_assignment_settings.py +7 -0
- office365/intune/devices/management/mobileapps/mobile_app_identifier.py +7 -0
- office365/intune/devices/management/mobileapps/mobile_app_install_time_settings.py +15 -0
- office365/intune/devices/management/mobileapps/mobile_app_troubleshooting_event.py +30 -0
- office365/intune/devices/management/mobileapps/mobile_lob_app.py +25 -1
- office365/intune/devices/management/mobileapps/relationship.py +9 -0
- office365/intune/devices/management/mobileapps/vpp_licensing_type.py +12 -0
- office365/intune/devices/management/mobileapps/win32/lob_app.py +102 -0
- office365/intune/devices/management/mobileapps/win32/lob_app_assignment_settings.py +34 -0
- office365/intune/devices/management/mobileapps/win32/lob_app_auto_update_settings.py +16 -0
- office365/intune/devices/management/mobileapps/win32/lob_app_file_system_rule.py +22 -0
- office365/intune/devices/management/mobileapps/win32/lob_app_install_experience.py +18 -0
- office365/intune/devices/management/mobileapps/win32/lob_app_msi_information.py +20 -0
- office365/intune/devices/management/mobileapps/win32/lob_app_power_shell_script_rule.py +29 -0
- office365/intune/devices/management/mobileapps/win32/lob_app_product_code_rule.py +16 -0
- office365/intune/devices/management/mobileapps/win32/lob_app_registry_rule.py +22 -0
- office365/intune/devices/management/mobileapps/win32/lob_app_restart_settings.py +13 -0
- office365/intune/devices/management/mobileapps/win32/lob_app_return_code.py +15 -0
- office365/intune/devices/management/mobileapps/win32/lob_app_rule.py +14 -0
- office365/intune/devices/management/mobileapps/windows/app_x.py +56 -0
- office365/intune/devices/management/mobileapps/windows/app_x_app_assignment_settings.py +11 -0
- office365/intune/devices/management/mobileapps/windows/microsoft_edge_app.py +25 -0
- office365/intune/devices/management/mobileapps/windows/mobile_msi.py +36 -0
- office365/intune/devices/management/mobileapps/windows/universal_app_x.py +85 -0
- office365/intune/devices/management/mobileapps/windows/universal_app_x_app_assignment_settings.py +11 -0
- office365/intune/devices/management/mobileapps/windows/universal_app_x_contained_app.py +18 -0
- office365/intune/devices/management/mobileapps/windows/web_app.py +18 -0
- office365/intune/devices/management/notification_message_template.py +69 -0
- office365/intune/devices/management/obliteration_behavior.py +15 -0
- office365/intune/devices/management/on_premises_conditional_access_settings.py +37 -0
- office365/intune/devices/management/operating_system_summary.py +22 -0
- office365/intune/devices/management/partner_assignment.py +16 -0
- office365/intune/devices/management/remote_lock_action_result.py +11 -0
- office365/intune/devices/management/remoteassistance/partner.py +38 -0
- office365/intune/devices/management/reports/reports.py +29 -0
- office365/intune/devices/management/reset_passcode_action_result.py +12 -0
- office365/intune/devices/management/resource_operation.py +30 -0
- office365/intune/devices/management/rotate_bit_locker_keys_device_action_result.py +11 -0
- office365/intune/devices/management/settings.py +0 -3
- office365/intune/devices/management/software_update_status_summary.py +102 -0
- office365/intune/devices/management/system_browser_enabled_on.py +16 -0
- office365/intune/devices/management/targeted_managed_app_configuration.py +74 -0
- office365/intune/devices/management/terms_and_conditions.py +98 -0
- office365/intune/devices/management/terms_and_conditions_acceptance_status.py +56 -0
- office365/intune/devices/management/terms_and_conditions_assignment.py +19 -0
- office365/intune/devices/management/update_windows_device_account_action_parameter.py +21 -0
- office365/intune/devices/management/user_experience_analytics_settings.py +0 -3
- office365/intune/devices/management/user_last_sign_in_recommendation_insight_setting.py +20 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_app_health_app_performance_by_app_version_details.py +60 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_app_health_app_performance_by_app_version_device_id.py +61 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_app_health_app_performance_by_os_version.py +66 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_app_health_application_performance.py +66 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_app_health_device_model_performance.py +49 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_app_health_device_performance.py +80 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_app_health_device_performance_details.py +55 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_app_health_os_version_performance.py +42 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_autopilot_devices_summary.py +13 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_baseline.py +132 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_category.py +46 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_cloud_identity_devices_summary.py +11 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_cloud_management_devices_summary.py +13 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_device_performance.py +134 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_device_scores.py +67 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_device_startup_history.py +112 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_device_startup_process.py +42 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_device_startup_process_performance.py +48 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_insight.py +25 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_insight_value.py +7 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_metric.py +24 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_metric_history.py +31 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_model_scores.py +67 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_overview.py +22 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_score_history.py +19 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_windows10_devices_summary.py +11 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_work_from_anywhere_device.py +220 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_work_from_anywhere_devices_summary.py +46 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_work_from_anywhere_hardware_readiness_metric.py +78 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_work_from_anywhere_metric.py +36 -0
- office365/intune/devices/management/userexperienceanalytics/user_experience_analytics_work_from_anywhere_model_performance.py +67 -0
- office365/intune/devices/management/virtualendpoint/cloudpcs/auditactor.py +1 -2
- office365/intune/devices/management/virtualendpoint/cloudpcs/auditproperty.py +0 -3
- office365/intune/devices/management/virtualendpoint/cloudpcs/auditresource.py +1 -2
- office365/intune/devices/management/virtualendpoint/cloudpcs/domainjoinconfiguration.py +0 -3
- office365/intune/devices/management/virtualendpoint/cloudpcs/exclusion_group_assignment_target.py +0 -3
- office365/intune/devices/management/virtualendpoint/cloudpcs/group_assignment_target.py +0 -3
- office365/intune/devices/management/virtualendpoint/cloudpcs/managementgroupassignmenttarget.py +0 -3
- office365/intune/devices/management/virtualendpoint/cloudpcs/onpremisesconnectionhealthcheck.py +0 -2
- office365/intune/devices/management/virtualendpoint/cloudpcs/onpremisesconnectionstatusdetail.py +1 -2
- office365/intune/devices/management/virtualendpoint/cloudpcs/provisioningpolicyautopatch.py +0 -3
- office365/intune/devices/management/virtualendpoint/cloudpcs/restorepointsetting.py +0 -3
- office365/intune/devices/management/virtualendpoint/cloudpcs/sourcedeviceimage.py +0 -3
- office365/intune/devices/management/virtualendpoint/cloudpcs/userrolescopetaginfo.py +0 -3
- office365/intune/devices/management/virtualendpoint/provisioningpolicies/microsoft_managed_desktop.py +0 -3
- office365/intune/devices/management/virtualendpoint/virtual_endpoint.py +147 -0
- office365/intune/devices/management/vpptokens/vpp_token.py +12 -0
- office365/intune/devices/management/windows_autopilot_deployment_profile.py +110 -0
- office365/intune/devices/management/windows_autopilot_deployment_profile_assignment.py +7 -0
- office365/intune/devices/management/windows_autopilot_device_identity.py +110 -0
- office365/intune/devices/management/windows_defender_scan_action_result.py +11 -0
- office365/intune/devices/management/windows_device_account.py +11 -0
- office365/intune/devices/management/windows_device_ad_account.py +12 -0
- office365/intune/devices/management/windows_device_azure_ad_account.py +11 -0
- office365/intune/devices/management/windows_information_protection_app.py +15 -0
- office365/intune/devices/management/windows_information_protection_app_learning_summary.py +31 -0
- office365/intune/devices/management/windows_information_protection_app_locker_file.py +36 -0
- office365/intune/devices/management/windows_information_protection_data_recovery_certificate.py +16 -0
- office365/intune/devices/management/windows_information_protection_desktop_app.py +13 -0
- office365/intune/devices/management/windows_information_protection_ip_range_collection.py +16 -0
- office365/intune/devices/management/windows_information_protection_network_learning_summary.py +24 -0
- office365/intune/devices/management/windows_information_protection_pin_character_requirements.py +13 -0
- office365/intune/devices/management/windows_information_protection_policy.py +87 -0
- office365/intune/devices/management/windows_information_protection_proxied_domain_collection.py +18 -0
- office365/intune/devices/management/windows_information_protection_resource_collection.py +15 -0
- office365/intune/devices/management/windows_information_protection_store_app.py +7 -0
- office365/intune/devices/management/windows_malware_overview.py +34 -2
- office365/intune/devices/management/windows_protection_state.py +163 -0
- office365/intune/devices/management/windowsmalware/malware_state_for_windows_device.py +51 -0
- office365/intune/devices/management/windowsmalware/windows_device_malware_state.py +78 -0
- office365/intune/devices/management/windowsmalware/windows_malware_category_count.py +20 -0
- office365/intune/devices/management/windowsmalware/windows_malware_execution_state_count.py +18 -0
- office365/intune/devices/management/windowsmalware/windows_malware_information.py +67 -0
- office365/intune/devices/management/windowsmalware/windows_malware_name_count.py +16 -0
- office365/intune/devices/management/windowsmalware/windows_malware_severity_count.py +19 -0
- office365/intune/devices/management/windowsmalware/windows_malware_state_count.py +20 -0
- office365/intune/devices/management_cached_report_configuration.py +7 -0
- office365/intune/devices/management_exchange_connector.py +69 -0
- office365/intune/devices/management_export_job.py +72 -0
- office365/intune/devices/management_partner.py +74 -0
- office365/intune/devices/management_troubleshooting_event.py +25 -0
- office365/intune/devices/no_device_registration_membership.py +0 -3
- office365/intune/devices/operating_system_specifications.py +0 -3
- office365/intune/devices/registration_membership.py +0 -3
- office365/intune/organizations/branding.py +31 -0
- office365/intune/organizations/branding_properties.py +199 -0
- office365/intune/organizations/contact.py +132 -3
- office365/intune/organizations/content_customization.py +9 -2
- office365/intune/organizations/login_page_layout_configuration.py +0 -3
- office365/intune/organizations/login_page_text_visibility_settings.py +0 -3
- office365/intune/organizations/organization.py +136 -2
- office365/intune/organizations/organizational_branding_localization.py +7 -0
- office365/intune/organizations/physical_office_address.py +0 -3
- office365/intune/organizations/privacy_profile.py +0 -3
- office365/intune/policies/azure_ad_join_policy.py +1 -2
- office365/intune/policies/local_admin_password_settings.py +0 -3
- office365/intune/policies/local_admin_settings.py +1 -2
- office365/intune/policies/managed_app.py +6 -0
- office365/intune/print/air_print_settings.py +14 -0
- office365/intune/print/archived_print_job.py +25 -0
- office365/intune/print/certificate_signing_request.py +12 -0
- office365/intune/print/connectors/connector.py +47 -0
- office365/intune/print/document.py +43 -0
- office365/intune/print/document_upload_properties.py +13 -0
- office365/intune/print/job.py +97 -0
- office365/intune/print/job_configuration.py +45 -0
- office365/intune/print/job_status.py +21 -0
- office365/intune/print/margin.py +14 -0
- office365/intune/print/operation.py +27 -0
- office365/intune/print/operation_status.py +15 -0
- office365/intune/print/print.py +71 -0
- office365/intune/print/printers/base.py +72 -2
- office365/intune/print/printers/capabilities.py +81 -0
- office365/intune/print/printers/create_operation.py +31 -0
- office365/intune/print/printers/defaults.py +39 -0
- office365/intune/print/printers/discovery_settings.py +14 -0
- office365/intune/print/printers/location.py +30 -0
- office365/intune/print/printers/printer.py +78 -0
- office365/intune/print/printers/share_viewpoint.py +13 -0
- office365/intune/print/printers/status.py +22 -0
- office365/intune/print/services/endpoint.py +21 -0
- office365/intune/print/settings.py +15 -0
- office365/intune/print/shares/share.py +65 -0
- office365/intune/print/task.py +50 -0
- office365/intune/print/task_definition.py +40 -0
- office365/intune/print/task_status.py +13 -0
- office365/intune/print/task_trigger.py +33 -0
- office365/intune/print/user_print.py +7 -2
- office365/intune/servicecommunications/announcement.py +3 -1
- office365/intune/servicecommunications/announcement_base.py +42 -0
- office365/intune/servicecommunications/health/health.py +42 -0
- office365/intune/servicecommunications/issues/issue.py +50 -0
- office365/intune/servicecommunications/messages/update.py +97 -0
- office365/intune/servicecommunications/service_health_issue_post.py +18 -0
- office365/intune/servicecommunications/service_update_message_viewpoint.py +13 -0
- office365/limits.py +24 -4
- office365/migration/__init__.py +59 -4
- office365/migration/adapters/__init__.py +62 -6
- office365/migration/adapters/bundle.py +308 -0
- office365/migration/adapters/filesystem.py +5 -14
- office365/migration/assessment/report.py +0 -1
- office365/migration/base.py +138 -10
- office365/migration/checkpoint.py +17 -16
- office365/migration/clients.py +87 -0
- office365/migration/delta.py +205 -0
- office365/migration/fidelity.py +344 -0
- office365/migration/identity.py +320 -0
- office365/migration/job.py +206 -13
- office365/migration/logging.py +373 -0
- office365/migration/manifest.py +8 -3
- office365/migration/map.py +84 -0
- office365/migration/offline.py +26 -0
- office365/migration/outlook/__init__.py +74 -3
- office365/migration/outlook/adapters.py +380 -0
- office365/migration/outlook/assessor.py +22 -6
- office365/migration/outlook/calendar_adapters.py +347 -0
- office365/migration/outlook/calendar_codec.py +207 -0
- office365/migration/outlook/calendar_models.py +241 -0
- office365/migration/outlook/calendar_profile.py +109 -0
- office365/migration/outlook/contacts_adapters.py +331 -0
- office365/migration/outlook/contacts_models.py +277 -0
- office365/migration/outlook/eml_import.py +219 -0
- office365/migration/outlook/fidelity.py +175 -0
- office365/migration/outlook/models.py +219 -0
- office365/migration/outlook/records.py +298 -0
- office365/migration/outlook/restore.py +29 -0
- office365/migration/package/builder.py +103 -16
- office365/migration/package/manifest_xml.py +19 -4
- office365/migration/package/staging.py +49 -0
- office365/migration/report.py +33 -5
- office365/migration/runner.py +185 -28
- office365/migration/server_job.py +259 -15
- office365/migration/session.py +335 -18
- office365/migration/settings.py +78 -4
- office365/migration/sharepoint/__init__.py +146 -0
- office365/migration/sharepoint/adapters.py +2697 -157
- office365/migration/sharepoint/assessor.py +25 -15
- office365/migration/sharepoint/branding.py +261 -0
- office365/migration/sharepoint/handoff.py +253 -0
- office365/migration/sharepoint/navigation.py +165 -0
- office365/migration/sharepoint/package_target.py +310 -9
- office365/migration/sharepoint/pages.py +753 -0
- office365/migration/sharepoint/resolvers.py +750 -30
- office365/migration/sharepoint/scanners/browser_file_handling.py +7 -5
- office365/migration/sharepoint/scanners/checked_out_files.py +5 -3
- office365/migration/sharepoint/scanners/fields.py +2 -2
- office365/migration/sharepoint/scanners/file_versions.py +3 -3
- office365/migration/sharepoint/scanners/files.py +4 -2
- office365/migration/sharepoint/scanners/large_excel_files.py +4 -3
- office365/migration/sharepoint/scanners/long_onedrive_urls.py +1 -1
- office365/migration/sharepoint/scanners/lookup.py +2 -4
- office365/migration/sharepoint/scanners/paths.py +2 -2
- office365/migration/sharepoint/scanners/permissions.py +1 -1
- office365/migration/sharepoint/scanners/smat.py +1 -1
- office365/migration/sharepoint/scanners/thicket_folders.py +3 -3
- office365/migration/sharepoint/security.py +506 -0
- office365/migration/sharepoint/site_scope.py +222 -0
- office365/migration/sharepoint/site_settings.py +196 -0
- office365/migration/sharepoint/site_verify.py +202 -0
- office365/migration/sharepoint/structure.py +1481 -0
- office365/migration/sharepoint/verify.py +186 -0
- office365/migration/teams/__init__.py +1 -14
- office365/migration/teams/adapters.py +70 -24
- office365/migration/throttling.py +215 -0
- office365/migration/validators.py +250 -15
- office365/onedrive/analytics/item_action_stat.py +0 -3
- office365/onedrive/analytics/item_activity.py +4 -1
- office365/onedrive/analytics/item_activity_stat.py +8 -0
- office365/onedrive/analytics/item_analytics.py +3 -3
- office365/onedrive/base_item.py +12 -1
- office365/onedrive/columns/boolean.py +0 -3
- office365/onedrive/columns/calculated.py +0 -3
- office365/onedrive/columns/choice.py +1 -2
- office365/onedrive/columns/column_link.py +2 -0
- office365/onedrive/columns/content_approval_status.py +0 -3
- office365/onedrive/columns/currency.py +0 -3
- office365/onedrive/columns/datetime.py +0 -3
- office365/onedrive/columns/default_value.py +0 -3
- office365/onedrive/columns/definition.py +37 -2
- office365/onedrive/columns/definition_collection.py +1 -1
- office365/onedrive/columns/display_name_localization.py +0 -3
- office365/onedrive/columns/geolocation.py +0 -3
- office365/onedrive/columns/hyperlink_or_picture.py +0 -3
- office365/onedrive/columns/lookup.py +0 -3
- office365/onedrive/columns/number.py +0 -3
- office365/onedrive/columns/person_or_group.py +0 -3
- office365/onedrive/columns/term.py +0 -3
- office365/onedrive/columns/text.py +0 -3
- office365/onedrive/columns/thumbnail.py +0 -3
- office365/onedrive/columns/validation.py +1 -2
- office365/onedrive/contenttypes/collection.py +1 -1
- office365/onedrive/contenttypes/content_type.py +40 -4
- office365/onedrive/contenttypes/info.py +0 -3
- office365/onedrive/contenttypes/order.py +0 -3
- office365/onedrive/deleted.py +11 -0
- office365/onedrive/documentsets/content.py +0 -3
- office365/onedrive/documentsets/document_set.py +1 -2
- office365/onedrive/documentsets/version.py +4 -0
- office365/onedrive/documentsets/version_item.py +0 -3
- office365/onedrive/driveitems/album.py +0 -3
- office365/onedrive/driveitems/audio.py +0 -3
- office365/onedrive/driveitems/bundle.py +0 -3
- office365/onedrive/driveitems/collection.py +30 -0
- office365/onedrive/driveitems/copy_result.py +121 -0
- office365/onedrive/driveitems/driveItem.py +410 -48
- office365/onedrive/driveitems/geo_coordinates.py +0 -3
- office365/onedrive/driveitems/image.py +0 -3
- office365/onedrive/driveitems/item_preview_info.py +0 -3
- office365/onedrive/driveitems/malware.py +0 -3
- office365/onedrive/driveitems/package.py +0 -3
- office365/onedrive/driveitems/photo.py +1 -2
- office365/onedrive/driveitems/publication_facet.py +1 -2
- office365/onedrive/driveitems/remote_item.py +1 -2
- office365/onedrive/driveitems/retention_label.py +3 -0
- office365/onedrive/driveitems/retention_label_settings.py +1 -4
- office365/onedrive/driveitems/source.py +0 -3
- office365/onedrive/driveitems/special_folder.py +0 -3
- office365/onedrive/driveitems/system_facet.py +0 -3
- office365/onedrive/driveitems/thumbnail.py +0 -3
- office365/onedrive/driveitems/thumbnail_set.py +5 -0
- office365/onedrive/driveitems/uploadable_properties.py +7 -12
- office365/onedrive/driveitems/video.py +0 -3
- office365/onedrive/drives/collection.py +1 -1
- office365/onedrive/drives/drive.py +57 -10
- office365/onedrive/drives/quota.py +1 -2
- office365/onedrive/drives/recipient.py +0 -3
- office365/onedrive/edit_action.py +0 -3
- office365/onedrive/files/file.py +1 -2
- office365/onedrive/files/hashes.py +0 -3
- office365/onedrive/files/system_info.py +0 -3
- office365/onedrive/filestorage/access_action.py +0 -3
- office365/onedrive/filestorage/containers/collection.py +13 -4
- office365/onedrive/filestorage/containers/container.py +152 -2
- office365/onedrive/filestorage/containers/custom_property_dictionary.py +0 -3
- office365/onedrive/filestorage/containers/custom_property_value.py +2 -3
- office365/onedrive/filestorage/containers/settings.py +0 -3
- office365/onedrive/filestorage/containers/viewpoint.py +0 -3
- office365/onedrive/filestorage/containertypes/app_permission_grant.py +5 -0
- office365/onedrive/filestorage/containertypes/collection.py +1 -1
- office365/onedrive/filestorage/containertypes/registration.py +10 -0
- office365/onedrive/filestorage/containertypes/registration_settings.py +2 -3
- office365/onedrive/filestorage/containertypes/settings.py +2 -2
- office365/onedrive/filestorage/containertypes/settings_override.py +2 -0
- office365/onedrive/filestorage/containertypes/type.py +13 -4
- office365/onedrive/filestorage/file_storage.py +5 -0
- office365/onedrive/folders/folder.py +0 -3
- office365/onedrive/folders/view.py +0 -3
- office365/onedrive/incomplete_data.py +0 -2
- office365/onedrive/internal/paths/children.py +7 -1
- office365/onedrive/listitems/collection.py +35 -5
- office365/onedrive/listitems/item_reference.py +1 -2
- office365/onedrive/listitems/list_item.py +18 -3
- office365/onedrive/lists/collection.py +1 -1
- office365/onedrive/lists/info.py +0 -3
- office365/onedrive/lists/list.py +37 -2
- office365/onedrive/media_source.py +0 -3
- office365/onedrive/mention_action.py +1 -2
- office365/onedrive/meta_data_key_string_pair.py +0 -3
- office365/onedrive/meta_data_key_value_pair.py +0 -3
- office365/onedrive/move_action.py +0 -3
- office365/onedrive/operations/long_running.py +31 -1
- office365/onedrive/operations/pending.py +1 -2
- office365/onedrive/operations/pending_content_update.py +0 -3
- office365/onedrive/operations/public_error_detail.py +0 -3
- office365/onedrive/operations/public_inner_error.py +7 -17
- office365/onedrive/operations/rich_long_running.py +27 -0
- office365/onedrive/permissions/collection.py +5 -0
- office365/onedrive/permissions/permission.py +24 -0
- office365/onedrive/permissions/sharepoint_identity.py +0 -2
- office365/onedrive/permissions/sharepoint_identity_set.py +1 -2
- office365/onedrive/permissions/sharing_invitation.py +1 -2
- office365/onedrive/permissions/sharing_link.py +1 -2
- office365/onedrive/quotas.py +116 -0
- office365/onedrive/reactions_facet.py +0 -3
- office365/onedrive/recyclebin/item.py +3 -0
- office365/onedrive/recyclebin/recyclebin.py +3 -0
- office365/onedrive/recyclebin/settings.py +0 -3
- office365/onedrive/rename_action.py +0 -3
- office365/onedrive/restore_action.py +0 -3
- office365/onedrive/root.py +0 -3
- office365/onedrive/sensitivitylabels/assignment.py +0 -3
- office365/onedrive/sensitivitylabels/extract_result.py +1 -2
- office365/onedrive/server_processed_content.py +1 -2
- office365/onedrive/share_action.py +1 -2
- office365/onedrive/sharepoint/group.py +5 -0
- office365/onedrive/sharepoint/group_identity.py +0 -3
- office365/onedrive/sharepoint/group_member.py +2 -0
- office365/onedrive/sharepoint/ids.py +0 -3
- office365/onedrive/sharepoint/migration/container_info.py +0 -3
- office365/onedrive/sharepoint/migration/event.py +4 -0
- office365/onedrive/sharepoint/migration/finish_manifest_file_upload_event.py +2 -0
- office365/onedrive/sharepoint/migration/jobs/cancelled_event.py +3 -0
- office365/onedrive/sharepoint/migration/jobs/error_event.py +25 -0
- office365/onedrive/sharepoint/migration/jobs/postponed_event.py +5 -0
- office365/onedrive/sharepoint/migration/jobs/progress_event.py +18 -0
- office365/onedrive/sharepoint/migration/jobs/start_event.py +3 -0
- office365/onedrive/sharepoint/migration/migration_job.py +3 -0
- office365/onedrive/shares/drive_item.py +11 -5
- office365/onedrive/shares/shared.py +1 -2
- office365/onedrive/sitepages/base.py +2 -0
- office365/onedrive/sitepages/canvas_layout.py +2 -2
- office365/onedrive/sitepages/collection.py +34 -4
- office365/onedrive/sitepages/sections/horizontal.py +4 -0
- office365/onedrive/sitepages/sections/horizontal_column.py +3 -1
- office365/onedrive/sitepages/sections/vertical.py +3 -1
- office365/onedrive/sitepages/site_page.py +17 -5
- office365/onedrive/sitepages/title_area.py +1 -2
- office365/onedrive/sitepages/webparts/data.py +1 -2
- office365/onedrive/sitepages/webparts/position.py +0 -3
- office365/onedrive/sitepages/webparts/standard.py +4 -0
- office365/onedrive/sitepages/webparts/text.py +2 -0
- office365/onedrive/sitepages/webparts/web_part.py +4 -0
- office365/onedrive/sites/archival_details.py +0 -3
- office365/onedrive/sites/collection.py +1 -2
- office365/onedrive/sites/site.py +176 -5
- office365/onedrive/sites/sites_with_root.py +34 -2
- office365/onedrive/sites/website.py +0 -3
- office365/onedrive/storage/settings.py +15 -0
- office365/onedrive/storage/storage.py +3 -0
- office365/onedrive/storage_plan_information.py +0 -3
- office365/onedrive/termstore/groups/collection.py +24 -4
- office365/onedrive/termstore/groups/group.py +29 -3
- office365/onedrive/termstore/relation.py +11 -2
- office365/onedrive/termstore/sets/collection.py +28 -13
- office365/onedrive/termstore/sets/name.py +5 -2
- office365/onedrive/termstore/sets/set.py +22 -4
- office365/onedrive/termstore/store.py +30 -3
- office365/onedrive/termstore/store_manager.py +42 -10
- office365/onedrive/termstore/terms/collection.py +1 -1
- office365/onedrive/termstore/terms/description.py +4 -3
- office365/onedrive/termstore/terms/label.py +4 -3
- office365/onedrive/termstore/terms/term.py +16 -3
- office365/onedrive/version_action.py +0 -3
- office365/onedrive/versions/base_item.py +1 -0
- office365/onedrive/versions/drive_item.py +4 -1
- office365/onedrive/versions/list_item.py +7 -0
- office365/onedrive/wellknown_list_name.py +11 -0
- office365/onedrive/workbooks/applications/application.py +4 -0
- office365/onedrive/workbooks/charts/area_format.py +30 -0
- office365/onedrive/workbooks/charts/axes.py +3 -3
- office365/onedrive/workbooks/charts/axis.py +80 -0
- office365/onedrive/workbooks/charts/axis_format.py +35 -0
- office365/onedrive/workbooks/charts/axis_title.py +42 -0
- office365/onedrive/workbooks/charts/axis_title_format.py +24 -0
- office365/onedrive/workbooks/charts/chart.py +61 -3
- office365/onedrive/workbooks/charts/data_label_format.py +33 -0
- office365/onedrive/workbooks/charts/data_labels.py +64 -1
- office365/onedrive/workbooks/charts/fill.py +6 -0
- office365/onedrive/workbooks/charts/font.py +45 -0
- office365/onedrive/workbooks/charts/gridlines.py +36 -0
- office365/onedrive/workbooks/charts/gridlines_format.py +26 -0
- office365/onedrive/workbooks/charts/legend/format.py +30 -0
- office365/onedrive/workbooks/charts/legend/legend.py +29 -1
- office365/onedrive/workbooks/charts/line_format.py +18 -0
- office365/onedrive/workbooks/charts/point.py +32 -0
- office365/onedrive/workbooks/charts/point_format.py +24 -0
- office365/onedrive/workbooks/charts/series/format.py +32 -0
- office365/onedrive/workbooks/charts/series/series.py +17 -0
- office365/onedrive/workbooks/charts/title.py +28 -0
- office365/onedrive/workbooks/charts/title_format.py +30 -0
- office365/onedrive/workbooks/comments/comment.py +4 -0
- office365/onedrive/workbooks/comments/reply.py +21 -0
- office365/onedrive/workbooks/filter.py +9 -0
- office365/onedrive/workbooks/filter_criteria.py +1 -2
- office365/onedrive/workbooks/filter_datetime.py +0 -3
- office365/onedrive/workbooks/functions/functions.py +12 -0
- office365/onedrive/workbooks/functions/result.py +18 -1
- office365/onedrive/workbooks/icon.py +0 -3
- office365/onedrive/workbooks/names/collection.py +2 -0
- office365/onedrive/workbooks/names/named_item.py +32 -0
- office365/onedrive/workbooks/operations/error.py +0 -3
- office365/onedrive/workbooks/operations/workbook.py +7 -2
- office365/onedrive/workbooks/quotas.py +35 -0
- office365/onedrive/workbooks/ranges/border.py +5 -0
- office365/onedrive/workbooks/ranges/fill.py +8 -0
- office365/onedrive/workbooks/ranges/font.py +7 -0
- office365/onedrive/workbooks/ranges/format.py +16 -0
- office365/onedrive/workbooks/ranges/format_protection.py +21 -0
- office365/onedrive/workbooks/ranges/range.py +73 -0
- office365/onedrive/workbooks/ranges/reference.py +0 -3
- office365/onedrive/workbooks/ranges/sort.py +6 -0
- office365/onedrive/workbooks/ranges/view.py +63 -0
- office365/onedrive/workbooks/session_info.py +0 -3
- office365/onedrive/workbooks/sort_field.py +1 -2
- office365/onedrive/workbooks/tables/collection.py +2 -0
- office365/onedrive/workbooks/tables/columns/collection.py +2 -0
- office365/onedrive/workbooks/tables/columns/column.py +28 -1
- office365/onedrive/workbooks/tables/pivot_table.py +7 -1
- office365/onedrive/workbooks/tables/pivot_table_collection.py +2 -0
- office365/onedrive/workbooks/tables/rows/collection.py +3 -0
- office365/onedrive/workbooks/tables/rows/row.py +9 -0
- office365/onedrive/workbooks/tables/sort.py +28 -1
- office365/onedrive/workbooks/tables/table.py +37 -0
- office365/onedrive/workbooks/workbook.py +20 -12
- office365/onedrive/workbooks/worksheets/collection.py +2 -2
- office365/onedrive/workbooks/worksheets/protection.py +17 -0
- office365/onedrive/workbooks/worksheets/protection_options.py +0 -3
- office365/onedrive/workbooks/worksheets/worksheet.py +28 -5
- office365/onenote/diagnostic.py +0 -3
- office365/onenote/entity_base_model.py +18 -0
- office365/onenote/entity_hierarchy_model.py +1 -0
- office365/onenote/notebook_links.py +1 -2
- office365/onenote/notebooks/collection.py +39 -1
- office365/onenote/notebooks/notebook.py +47 -5
- office365/onenote/notebooks/recent.py +1 -2
- office365/onenote/notebooks/recent_links.py +1 -2
- office365/onenote/onenote.py +9 -4
- office365/onenote/onenote_page_preview.py +1 -2
- office365/onenote/onenote_patch_content_command.py +0 -3
- office365/onenote/operations/onenote.py +29 -1
- office365/onenote/operations/onenote_operation_error.py +0 -3
- office365/onenote/pages/collection.py +37 -21
- office365/onenote/pages/external_link.py +0 -3
- office365/onenote/pages/links.py +1 -2
- office365/onenote/pages/page.py +43 -3
- office365/onenote/pages/preview_links.py +1 -2
- office365/onenote/quotas.py +71 -0
- office365/onenote/resources/resource.py +15 -1
- office365/onenote/sectiongroups/section_group.py +26 -7
- office365/onenote/sections/collection.py +47 -0
- office365/onenote/sections/links.py +1 -2
- office365/onenote/sections/section.py +16 -8
- office365/outlook/attachment_info.py +11 -0
- office365/outlook/calendar/attendees/attendee.py +8 -4
- office365/outlook/calendar/attendees/availability.py +1 -2
- office365/outlook/calendar/attendees/base.py +4 -3
- office365/outlook/calendar/calendar.py +42 -6
- office365/outlook/calendar/check_in_claim.py +33 -0
- office365/outlook/calendar/dateTimeTimeZone.py +69 -12
- office365/outlook/calendar/email_address.py +6 -4
- office365/outlook/calendar/events/collection.py +1 -1
- office365/outlook/calendar/events/event.py +87 -14
- office365/outlook/calendar/events/mention_event.py +1 -2
- office365/outlook/calendar/events/reminder.py +1 -2
- office365/outlook/calendar/group.py +5 -0
- office365/outlook/calendar/location_constraint.py +1 -2
- office365/outlook/calendar/meetingtimes/suggestion.py +1 -2
- office365/outlook/calendar/meetingtimes/suggestions_result.py +1 -2
- office365/outlook/calendar/meetingtimes/time_constraint.py +1 -2
- office365/outlook/calendar/meetingtimes/time_slot.py +1 -2
- office365/outlook/calendar/permissions/collection.py +1 -1
- office365/outlook/calendar/permissions/permission.py +3 -0
- office365/outlook/calendar/place.py +80 -2
- office365/outlook/calendar/place_collection.py +34 -0
- office365/outlook/calendar/response_status.py +1 -2
- office365/outlook/calendar/rooms/list.py +4 -0
- office365/outlook/calendar/rooms/room.py +65 -0
- office365/outlook/calendar/rooms/workspace.py +40 -0
- office365/outlook/calendar/schedule/free_busy_error.py +0 -3
- office365/outlook/calendar/schedule/information.py +1 -2
- office365/outlook/calendar/schedule/item.py +1 -2
- office365/outlook/calendar/schedule/open_shift_item.py +0 -3
- office365/outlook/calendar/sharing/message_action.py +0 -3
- office365/outlook/calendar/sharing_message.py +33 -0
- office365/outlook/calendar/timezones/base.py +0 -3
- office365/outlook/calendar/timezones/custom.py +1 -2
- office365/outlook/calendar/timezones/daylight_time_zone_offset.py +0 -3
- office365/outlook/calendar/working_hours.py +1 -2
- office365/outlook/categories/category.py +3 -0
- office365/outlook/contacts/collection.py +1 -1
- office365/outlook/contacts/contact.py +40 -10
- office365/outlook/contacts/folders/collection.py +23 -3
- office365/outlook/contacts/folders/folder.py +11 -6
- office365/outlook/convert_id_result.py +1 -2
- office365/outlook/geo_coordinates.py +0 -3
- office365/outlook/item.py +11 -4
- office365/outlook/locale_info.py +0 -3
- office365/outlook/mail/attachments/attachment.py +16 -1
- office365/outlook/mail/attachments/attachment_item.py +0 -2
- office365/outlook/mail/attachments/collection.py +14 -5
- office365/outlook/mail/attachments/file.py +19 -3
- office365/outlook/mail/attachments/item.py +2 -0
- office365/outlook/mail/attachments/type.py +7 -2
- office365/outlook/mail/automaticreplies/mailtips.py +1 -2
- office365/outlook/mail/automaticreplies/setting.py +1 -2
- office365/outlook/mail/conversation.py +5 -0
- office365/outlook/mail/conversation_thread.py +6 -1
- office365/outlook/mail/email_details.py +0 -3
- office365/outlook/mail/export_item_response.py +2 -3
- office365/outlook/mail/folders/collection.py +39 -1
- office365/outlook/mail/folders/folder.py +57 -8
- office365/outlook/mail/folders/search.py +5 -0
- office365/outlook/mail/item_body.py +5 -4
- office365/outlook/mail/location.py +17 -9
- office365/outlook/mail/mailbox_item_import_session.py +1 -2
- office365/outlook/mail/mailbox_settings.py +1 -2
- office365/outlook/mail/messages/collection.py +43 -2
- office365/outlook/mail/messages/event_message.py +70 -0
- office365/outlook/mail/messages/followup_flag.py +1 -2
- office365/outlook/mail/messages/internet_header.py +0 -3
- office365/outlook/mail/messages/message.py +108 -24
- office365/outlook/mail/messages/pinned_event_message_detail.py +1 -2
- office365/outlook/mail/messages/rules/actions.py +1 -2
- office365/outlook/mail/messages/rules/collection.py +1 -1
- office365/outlook/mail/messages/rules/predicates.py +1 -2
- office365/outlook/mail/messages/rules/rule.py +1 -0
- office365/outlook/mail/messages/rules/size_range.py +0 -3
- office365/outlook/mail/messages/unpinned_event_message_detail.py +1 -2
- office365/outlook/mail/patterned_recurrence.py +1 -2
- office365/outlook/mail/physical_address.py +0 -3
- office365/outlook/mail/post.py +124 -1
- office365/outlook/mail/recipient.py +5 -3
- office365/outlook/mail/recurrence_pattern.py +1 -2
- office365/outlook/mail/recurrence_range.py +0 -2
- office365/outlook/mail/tips/error.py +0 -3
- office365/outlook/mail/tips/tips.py +1 -2
- office365/outlook/people/person_type.py +2 -3
- office365/outlook/people/profile_card_property.py +29 -0
- office365/outlook/person.py +40 -0
- office365/outlook/quotas.py +83 -0
- office365/outlook/resource_link.py +0 -3
- office365/outlook/scored_email_address.py +0 -3
- office365/outlook/timezones/information.py +0 -3
- office365/outlook/timezones/standard_time_zone_offset.py +0 -2
- office365/outlook/user.py +7 -1
- office365/partners/billing/azure_aggregated_usage.py +26 -0
- office365/partners/billing/azure_usage.py +3 -0
- office365/partners/billing/billed_aggregated_usage.py +9 -0
- office365/partners/billing/billed_reconciliation.py +3 -1
- office365/partners/billing/billed_usage.py +3 -1
- office365/partners/billing/billing.py +21 -1
- office365/partners/billing/blob.py +12 -0
- office365/partners/billing/export_success_operation.py +4 -1
- office365/partners/billing/failed_operation.py +10 -1
- office365/partners/billing/manifest.py +18 -0
- office365/partners/billing/metrics.py +37 -0
- office365/partners/billing/metrics_base.py +62 -0
- office365/partners/billing/metrics_initial.py +19 -0
- office365/partners/billing/metrics_recent.py +19 -0
- office365/partners/billing/operation.py +31 -1
- office365/partners/billing/reconciliation.py +43 -0
- office365/partners/billing/running_operation.py +2 -1
- office365/partners/billing/unbilled_reconciliation.py +3 -1
- office365/partners/billing/unbilled_usage.py +3 -1
- office365/partners/partners.py +2 -0
- office365/partners/partnertenanttype.py +8 -12
- office365/permissions/__init__.py +63 -0
- office365/permissions/catalog.py +96 -0
- office365/permissions/declaration.py +286 -0
- office365/permissions/index.py +209 -0
- office365/permissions/requirement.py +205 -0
- office365/permissions/resource.py +39 -0
- office365/permissions/roles.py +45 -0
- office365/permissions/snapshots/__init__.py +6 -0
- office365/permissions/snapshots/graph.py +1824 -0
- office365/permissions/snapshots/sharepoint.py +85 -0
- office365/permissions/token.py +103 -0
- office365/planner/applied_categories.py +7 -0
- office365/planner/assigned_to_task_board_task_format.py +25 -0
- office365/planner/assignment.py +21 -0
- office365/planner/assignments.py +45 -1
- office365/planner/bucket_task_board_task_format.py +18 -0
- office365/planner/buckets/bucket.py +26 -8
- office365/planner/buckets/collection.py +61 -15
- office365/planner/category_descriptions.py +56 -0
- office365/planner/entity.py +52 -0
- office365/planner/external_reference.py +19 -0
- office365/planner/group.py +2 -0
- office365/planner/internal/paths/collections.py +27 -0
- office365/planner/order_hints_by_assignee.py +7 -0
- office365/planner/planner.py +6 -2
- office365/planner/plans/collection.py +6 -0
- office365/planner/plans/container.py +4 -3
- office365/planner/plans/details.py +6 -2
- office365/planner/plans/plan.py +44 -26
- office365/planner/progress_task_board_task_format.py +18 -0
- office365/planner/tasks/check_list_item.py +21 -2
- office365/planner/tasks/check_list_items.py +46 -9
- office365/planner/tasks/collection.py +72 -32
- office365/planner/tasks/task.py +194 -24
- office365/planner/tasks/task_details.py +57 -5
- office365/planner/user.py +11 -6
- office365/reports/internal/queries/create_report_query.py +8 -24
- office365/reports/partners.py +11 -0
- office365/reports/print_usage.py +12 -0
- office365/reports/print_usage_by_printer.py +3 -0
- office365/reports/print_usage_by_user.py +2 -0
- office365/reports/quotas.py +58 -0
- office365/reports/relying_party_detailed_summary.py +12 -0
- office365/reports/report.py +4 -3
- office365/reports/report_export.py +197 -0
- office365/reports/report_result.py +61 -0
- office365/reports/root.py +109 -47
- office365/reports/security/root.py +13 -7
- office365/reports/userregistration/feature_count.py +0 -3
- office365/reports/userregistration/feature_summary.py +1 -2
- office365/reports/userregistration/method_count.py +0 -3
- office365/reports/userregistration/method_summary.py +1 -2
- office365/runtime/auth/authentication_context.py +107 -19
- office365/runtime/auth/certificate.py +105 -0
- office365/runtime/auth/entra/authentication_context.py +148 -9
- office365/runtime/client_object.py +295 -57
- office365/runtime/client_object_collection.py +363 -19
- office365/runtime/client_request.py +328 -27
- office365/runtime/client_request_exception.py +64 -2
- office365/runtime/client_result.py +98 -5
- office365/runtime/client_runtime_context.py +692 -50
- office365/runtime/client_value.py +112 -30
- office365/runtime/client_value_collection.py +72 -39
- office365/runtime/compare_check.py +81 -0
- office365/runtime/converters/coercion.py +131 -0
- office365/runtime/converters/csv_reader.py +58 -4
- office365/runtime/converters/csv_writer.py +5 -5
- office365/runtime/converters/keyvalue.py +4 -0
- office365/runtime/converters/records.py +34 -2
- office365/runtime/converters/scalars.py +286 -32
- office365/runtime/converters/upsert.py +3 -3
- office365/runtime/converters/value.py +172 -34
- office365/runtime/csom/request.py +1 -1
- office365/runtime/display.py +238 -0
- office365/runtime/exceptions.py +65 -4
- office365/runtime/http/prefer.py +151 -2
- office365/runtime/http/request_options.py +10 -3
- office365/runtime/http/throttling.py +151 -21
- office365/runtime/imports.py +160 -34
- office365/runtime/limits.py +166 -45
- office365/runtime/lro.py +486 -0
- office365/runtime/odata/batch_util.py +60 -11
- office365/runtime/odata/comparable.py +149 -0
- office365/runtime/odata/dialect.py +134 -0
- office365/runtime/odata/edm.py +120 -0
- office365/runtime/odata/json_format.py +259 -43
- office365/runtime/odata/literals.py +49 -0
- office365/runtime/odata/query_options.py +22 -8
- office365/runtime/odata/request.py +35 -102
- office365/runtime/odata/v3/batch_request.py +176 -28
- office365/runtime/odata/v3/json_light_format.py +10 -51
- office365/runtime/odata/v4/batch_request.py +148 -17
- office365/runtime/odata/v4/json_format.py +9 -43
- office365/runtime/odata/v4/upload_session.py +1 -2
- office365/runtime/odata/v4/upload_session_request.py +19 -1
- office365/runtime/operation.py +727 -0
- office365/runtime/operations.py +3 -2
- office365/runtime/paths/alternate_key.py +44 -0
- office365/runtime/paths/appid.py +8 -8
- office365/runtime/paths/builder.py +18 -7
- office365/runtime/paths/resource_path.py +5 -0
- office365/runtime/persistence.py +71 -0
- office365/runtime/pollable.py +386 -0
- office365/runtime/progress.py +52 -0
- office365/runtime/queries/batch.py +13 -5
- office365/runtime/queries/client_query.py +50 -6
- office365/runtime/queries/create_entity.py +7 -2
- office365/runtime/queries/deferred.py +7 -0
- office365/runtime/queries/get_or_create.py +19 -3
- office365/runtime/queries/read_entity.py +48 -4
- office365/runtime/queries/upsert_entity.py +103 -0
- office365/runtime/query_capabilities.py +333 -0
- office365/runtime/record_collection.py +231 -25
- office365/runtime/respond_async.py +138 -0
- office365/runtime/retry.py +164 -22
- office365/runtime/schema.py +395 -0
- office365/runtime/serialization.py +55 -0
- office365/runtime/transfer.py +51 -0
- office365/runtime/transport/base.py +175 -4
- office365/runtime/transport/httpx_transport.py +272 -0
- office365/runtime/transport/offload.py +156 -0
- office365/runtime/transport/requests_transport.py +166 -18
- office365/runtime/transport/throttled_transport.py +29 -6
- office365/runtime/types/binary_content.py +0 -3
- office365/runtime/types/collections.py +0 -3
- office365/runtime/types/duration.py +21 -9
- office365/runtime/types/error.py +12 -0
- office365/runtime/types/ipv4_cidr_range.py +0 -3
- office365/runtime/types/ipv6_cidr_range.py +0 -3
- office365/runtime/types/json.py +0 -3
- office365/runtime/types/key_value_pair.py +0 -3
- office365/runtime/types/odata_property.py +307 -15
- office365/runtime/types/public_error.py +1 -2
- office365/runtime/types/public_inner_error.py +1 -2
- office365/runtime/types/setting_value.py +0 -3
- office365/runtime/verification.py +41 -9
- office365/search/acronyms/acronym.py +18 -0
- office365/search/aggregation.py +1 -2
- office365/search/aggregation_option.py +12 -2
- office365/search/alteration_options.py +0 -3
- office365/search/alteration_response.py +17 -0
- office365/search/altered_query_token.py +13 -0
- office365/search/answers/answer.py +15 -0
- office365/search/answers/keyword.py +16 -0
- office365/search/answers/variant.py +16 -0
- office365/search/bookmarks/bookmark.py +26 -0
- office365/search/bucket.py +4 -3
- office365/search/bucket_aggregation_definition.py +22 -0
- office365/search/bucket_aggregation_range.py +12 -0
- office365/search/collapse_property.py +15 -0
- office365/search/connection_item.py +11 -0
- office365/search/entity.py +10 -6
- office365/search/entity_type.py +1 -1
- office365/search/external/configuration.py +1 -2
- office365/search/external/connection.py +101 -2
- office365/search/external/external.py +2 -0
- office365/search/external/item.py +30 -0
- office365/search/external/item_configuration.py +17 -0
- office365/search/external/search_settings.py +11 -2
- office365/search/hits/container.py +5 -2
- office365/search/hits/hit.py +10 -3
- office365/search/identity.py +13 -0
- office365/search/identity_set.py +8 -2
- office365/search/qnas/qna.py +24 -0
- office365/search/query.py +4 -3
- office365/search/recommended_action.py +13 -0
- office365/search/request.py +21 -5
- office365/search/response.py +11 -2
- office365/search/result_template.py +15 -0
- office365/search/result_template_dictionary.py +7 -0
- office365/search/result_template_option.py +11 -0
- office365/search/retrieval_extract.py +12 -0
- office365/search/retrieval_hit.py +26 -0
- office365/search/retrieval_response.py +17 -0
- office365/search/search_alteration.py +20 -0
- office365/search/search_alteration_options.py +12 -0
- office365/search/search_resource_metadata_dictionary.py +7 -0
- office365/search/search_result.py +11 -0
- office365/search/sharepoint_onedrive_options.py +7 -3
- office365/search/sort_property.py +4 -3
- office365/security/a365_ai_guardrail.py +7 -0
- office365/security/a365_ai_inference_call.py +7 -0
- office365/security/a365_ai_invoke_agent.py +7 -0
- office365/security/a365_ai_run_summary.py +7 -0
- office365/security/a365_span_outputs.py +7 -0
- office365/security/account.py +23 -0
- office365/security/account_entity_mapping.py +17 -0
- office365/security/account_object_id_action.py +11 -0
- office365/security/account_sid_action.py +11 -0
- office365/security/account_target_content.py +14 -0
- office365/security/activity_metadata.py +12 -0
- office365/security/address_book_account_target_content.py +14 -0
- office365/security/aed_audit_record.py +7 -0
- office365/security/agent_admin_activity_record.py +7 -0
- office365/security/agent_setting_admin_activity.py +7 -0
- office365/security/ai_agent_evidence.py +16 -0
- office365/security/ai_guardrail.py +7 -0
- office365/security/aip_discover.py +7 -0
- office365/security/aip_file_deleted.py +7 -0
- office365/security/aip_heart_beat.py +7 -0
- office365/security/aip_protection_action_log_request.py +7 -0
- office365/security/aip_scanner_discover_event.py +7 -0
- office365/security/aip_sensitivity_label_action_log_request.py +7 -0
- office365/security/air_admin_action_investigation_data.py +7 -0
- office365/security/air_investigation_data.py +7 -0
- office365/security/alerts/active_directory_domain_evidence.py +17 -0
- office365/security/alerts/alert.py +451 -0
- office365/security/alerts/azure_resource_evidence.py +13 -0
- office365/security/alerts/blob_container_evidence.py +16 -0
- office365/security/alerts/blob_evidence.py +20 -0
- office365/security/alerts/collection.py +49 -0
- office365/security/alerts/comment.py +18 -0
- office365/security/alerts/custom_details.py +7 -0
- office365/security/alerts/detection.py +13 -0
- office365/security/alerts/evidence.py +27 -0
- office365/security/alerts/file_security_state.py +22 -0
- office365/security/alerts/history_state.py +29 -0
- office365/security/alerts/malware_evidence.py +22 -0
- office365/security/alerts/process_evidence.py +27 -0
- office365/security/alerts/sas_token_evidence.py +25 -0
- office365/security/alerts/template.py +24 -0
- office365/security/alerts/trigger.py +13 -0
- office365/security/amazon_resource_entity_mapping.py +11 -0
- office365/security/amazon_resource_evidence.py +14 -0
- office365/security/analyzed_message_evidence.py +33 -0
- office365/security/article.py +79 -0
- office365/security/assigned_training_info.py +13 -0
- office365/security/attacksimulations/automation.py +91 -0
- office365/security/attacksimulations/automation_run.py +40 -0
- office365/security/attacksimulations/event.py +21 -0
- office365/security/attacksimulations/landing_page.py +101 -0
- office365/security/attacksimulations/landing_page_detail.py +30 -0
- office365/security/attacksimulations/login_page.py +76 -0
- office365/security/attacksimulations/operations/operation.py +33 -0
- office365/security/attacksimulations/payload.py +157 -0
- office365/security/attacksimulations/repeat_offender.py +20 -0
- office365/security/attacksimulations/reports/overview.py +29 -0
- office365/security/attacksimulations/reports/report.py +28 -0
- office365/security/attacksimulations/root.py +130 -0
- office365/security/attacksimulations/simulation.py +199 -0
- office365/security/attacksimulations/training_user_coverage.py +21 -0
- office365/security/attacksimulations/user.py +17 -0
- office365/security/attacksimulations/user_coverage.py +25 -0
- office365/security/attacksimulations/users/details.py +47 -0
- office365/security/attribute_definition.py +36 -0
- office365/security/attribute_definition_metadata_entry.py +13 -0
- office365/security/attribute_mapping.py +11 -0
- office365/security/attribute_mapping_parameter_schema.py +15 -0
- office365/security/attribute_mapping_source.py +23 -0
- office365/security/audit/a365_ai_execute_tool.py +7 -0
- office365/security/audit/aad_risk_detection_audit_record.py +7 -0
- office365/security/audit/ai_app_interaction_audit_record.py +7 -0
- office365/security/audit/ai_execute_tool_audit_record.py +7 -0
- office365/security/audit/ai_interactions_change_notification_audit_record.py +7 -0
- office365/security/audit/ai_interactions_export_audit_record.py +7 -0
- office365/security/audit/ai_interactions_subscription_audit_record.py +7 -0
- office365/security/audit/ai_invoke_agent_audit_record.py +7 -0
- office365/security/audit/ai_span_outputs_audit_record.py +7 -0
- office365/security/audit/air_manual_investigation_data.py +7 -0
- office365/security/audit/alert_submission_audit_record.py +7 -0
- office365/security/audit/alert_submission_result_detail_audit_record.py +7 -0
- office365/security/audit/attack_sim_admin_audit_record.py +7 -0
- office365/security/audit/attack_sim_audit_record.py +7 -0
- office365/security/audit/audit_config_audit_record.py +7 -0
- office365/security/audit/audit_data.py +14 -0
- office365/security/audit/audit_record_type_dictionary.py +7 -0
- office365/security/audit/audit_search_audit_record.py +7 -0
- office365/security/audit/azfw_application_rule_aggregation_event_record.py +7 -0
- office365/security/audit/azfw_dns_query_event_record.py +7 -0
- office365/security/audit/azfw_network_rule_event_record.py +7 -0
- office365/security/audit/azure_active_directory_account_logon_audit_record.py +7 -0
- office365/security/audit/azure_active_directory_audit_record.py +7 -0
- office365/security/audit/azure_active_directory_sts_logon_audit_record.py +7 -0
- office365/security/audit/azure_ai_search_audit_record.py +7 -0
- office365/security/audit/campaign_audit_record.py +7 -0
- office365/security/audit/ccrai_policy_violation_record.py +7 -0
- office365/security/audit/cdp_classifier_health_record.py +7 -0
- office365/security/audit/cdp_cold_crawl_status_record.py +7 -0
- office365/security/audit/cdp_consumption_resource_record.py +7 -0
- office365/security/audit/cdp_content_explorer_aggregate_record.py +7 -0
- office365/security/audit/cdp_dlp_sensitive_endpoint_audit_record.py +7 -0
- office365/security/audit/cdp_log_record.py +7 -0
- office365/security/audit/cdp_ocr_billing_record.py +7 -0
- office365/security/audit/cdp_resource_scope_change_event_record.py +7 -0
- office365/security/audit/cdpdlmai_interaction_insights_record.py +7 -0
- office365/security/audit/cloud_update_device_config_audit_record.py +7 -0
- office365/security/audit/cloud_update_profile_config_audit_record.py +7 -0
- office365/security/audit/cloud_update_tenant_config_audit_record.py +7 -0
- office365/security/audit/compliance_connector_audit_record.py +7 -0
- office365/security/audit/compliance_dlm_exchange_audit_record.py +7 -0
- office365/security/audit/compliance_dlm_share_point_audit_record.py +7 -0
- office365/security/audit/compliance_dlp_applications_audit_record.py +7 -0
- office365/security/audit/compliance_dlp_applications_classification_audit_record.py +7 -0
- office365/security/audit/compliance_dlp_endpoint_audit_record.py +7 -0
- office365/security/audit/compliance_dlp_endpoint_discovery_audit_record.py +7 -0
- office365/security/audit/compliance_dlp_enforcement_audit_record.py +7 -0
- office365/security/audit/compliance_dlp_exchange_audit_record.py +7 -0
- office365/security/audit/compliance_dlp_exchange_classification_audit_record.py +7 -0
- office365/security/audit/compliance_dlp_exchange_classification_cdp_record.py +7 -0
- office365/security/audit/compliance_dlp_exchange_discovery_audit_record.py +7 -0
- office365/security/audit/compliance_dlp_share_point_audit_record.py +7 -0
- office365/security/audit/compliance_dlp_share_point_classification_audit_record.py +7 -0
- office365/security/audit/compliance_dlp_share_point_classification_cdp_record.py +7 -0
- office365/security/audit/compliance_dlp_share_point_classification_extended_audit_record.py +7 -0
- office365/security/audit/compliance_exchange_ocr_audit_record.py +7 -0
- office365/security/audit/compliance_manager_action_record.py +7 -0
- office365/security/audit/compliance_policy_grading_share_point_audit_record.py +7 -0
- office365/security/audit/compliance_settings_change_audit_record.py +7 -0
- office365/security/audit/compliance_sit_grading_share_point_audit_record.py +7 -0
- office365/security/audit/compliance_supervision_exchange_audit_record.py +7 -0
- office365/security/audit/connected_ai_app_interaction_audit_record.py +7 -0
- office365/security/audit/consumption_resource_audit_record.py +7 -0
- office365/security/audit/content_store_metadata_record.py +7 -0
- office365/security/audit/copilot_agent_management_audit_record.py +7 -0
- office365/security/audit/copilot_for_security_logging_audit_record.py +7 -0
- office365/security/audit/copilot_for_security_trigger_audit_record.py +7 -0
- office365/security/audit/copilot_interaction_audit_record.py +7 -0
- office365/security/audit/copilot_plugin_setting_audit_record.py +7 -0
- office365/security/audit/copilot_prompt_book_setting_audit_record.py +7 -0
- office365/security/audit/copilot_session_sharing_audit_record.py +7 -0
- office365/security/audit/copilot_setting_audit_record.py +7 -0
- office365/security/audit/copilot_workspace_setting_audit_record.py +7 -0
- office365/security/audit/core_reporting_settings_audit_record.py +7 -0
- office365/security/audit/core_root.py +31 -0
- office365/security/audit/critical_asset_management_classification_record.py +7 -0
- office365/security/audit/crm_entity_operation_audit_record.py +7 -0
- office365/security/audit/cross_tenant_access_policy_audit_record.py +7 -0
- office365/security/audit/device_discovery_settings_authenticated_scans_record.py +7 -0
- office365/security/audit/device_discovery_settings_exclusion_record.py +7 -0
- office365/security/audit/device_discovery_settings_record.py +7 -0
- office365/security/audit/discovery_audit_record.py +7 -0
- office365/security/audit/dlp_endpoint_audit_record.py +7 -0
- office365/security/audit/dlp_import_result_audit_record.py +7 -0
- office365/security/audit/dragon_copilot_access_record.py +7 -0
- office365/security/audit/dragon_copilot_admin_record.py +7 -0
- office365/security/audit/dragon_copilot_clinical_data_record.py +7 -0
- office365/security/audit/dragon_copilot_session_record.py +7 -0
- office365/security/audit/dynamics365_business_central_audit_record.py +7 -0
- office365/security/audit/ehr_connector_audit_base_record.py +7 -0
- office365/security/audit/eop_submission_feed_entity_audit_record.py +7 -0
- office365/security/audit/exchange_admin_audit_record.py +7 -0
- office365/security/audit/exchange_aggregated_mailbox_audit_record.py +7 -0
- office365/security/audit/exchange_aggregated_operation_record.py +7 -0
- office365/security/audit/exchange_mailbox_audit_group_record.py +7 -0
- office365/security/audit/exchange_mailbox_audit_record.py +7 -0
- office365/security/audit/hosted_rpa_audit_record.py +7 -0
- office365/security/audit/hr_signal_audit_record.py +7 -0
- office365/security/audit/hygiene_event_record.py +7 -0
- office365/security/audit/information_barrier_policy_application_audit_record.py +7 -0
- office365/security/audit/information_worker_protection_audit_record.py +7 -0
- office365/security/audit/insider_risk_scoped_user_insights_record.py +7 -0
- office365/security/audit/insider_risk_scoped_users_record.py +7 -0
- office365/security/audit/log_query.py +126 -0
- office365/security/audit/log_record.py +89 -0
- office365/security/audit/microsoft_stream_audit_record.py +7 -0
- office365/security/audit/microsoft_teams_admin_audit_record.py +7 -0
- office365/security/audit/microsoft_teams_analytics_audit_record.py +7 -0
- office365/security/audit/microsoft_teams_audit_record.py +7 -0
- office365/security/audit/microsoft_teams_device_audit_record.py +7 -0
- office365/security/audit/microsoft_teams_retention_label_action_audit_record.py +7 -0
- office365/security/audit/microsoft_teams_sensitivity_label_action_audit_record.py +7 -0
- office365/security/audit/microsoft_teams_shifts_audit_record.py +7 -0
- office365/security/audit/microsoft_teams_user_concern_audit_record.py +7 -0
- office365/security/audit/multi_tenant_organization_join_request_transition_details.py +17 -0
- office365/security/audit/multi_tenant_organization_member_transition_details.py +19 -0
- office365/security/audit/whois_record.py +24 -0
- office365/security/auto_auditing_configuration.py +18 -0
- office365/security/automated_action.py +7 -0
- office365/security/automated_action_set.py +64 -0
- office365/security/autonomous_system.py +14 -0
- office365/security/average_comparative_score.py +12 -0
- office365/security/azure_resource_entity_mapping.py +11 -0
- office365/security/base_end_user_notification.py +18 -0
- office365/security/cases/case.py +51 -0
- office365/security/cases/ediscovery.py +145 -0
- office365/security/cases/operation.py +63 -0
- office365/security/cases/root.py +24 -0
- office365/security/category_template.py +32 -0
- office365/security/certification_control.py +12 -0
- office365/security/citation_template.py +24 -0
- office365/security/cloud_app_security_state.py +13 -0
- office365/security/cloud_application_entity_mapping.py +12 -0
- office365/security/cloud_application_evidence.py +19 -0
- office365/security/cloud_clipboard_item.py +41 -0
- office365/security/cloud_clipboard_item_payload.py +12 -0
- office365/security/cloud_clipboard_root.py +30 -0
- office365/security/cloud_flare_rule_model.py +13 -0
- office365/security/cloud_flare_ruleset_model.py +13 -0
- office365/security/cloud_flare_verified_details_model.py +24 -0
- office365/security/cloud_flare_web_application_firewall_provider.py +24 -0
- office365/security/cloud_logon_request_evidence.py +11 -0
- office365/security/cloud_logon_session_evidence.py +23 -0
- office365/security/cloud_pc_audit_event.py +87 -0
- office365/security/cloud_pc_device_image.py +88 -0
- office365/security/cloud_pc_gallery_image.py +74 -0
- office365/security/cloud_pc_on_premises_connection.py +136 -0
- office365/security/cloud_pc_provisioning_policy.py +148 -0
- office365/security/cloud_pc_provisioning_policy_assignment.py +37 -0
- office365/security/cloud_pc_report.py +9 -0
- office365/security/cloud_pc_service_plan.py +36 -0
- office365/security/cloud_pc_user_setting.py +72 -0
- office365/security/cloud_pc_user_setting_assignment.py +28 -0
- office365/security/cloud_security_connector.py +7 -0
- office365/security/cloud_security_enablement.py +7 -0
- office365/security/cloud_security_management.py +7 -0
- office365/security/cloud_video_interop_info.py +13 -0
- office365/security/coachmark_location.py +15 -0
- office365/security/coachmark_location_type.py +17 -0
- office365/security/collaboration/analyzed_email.py +258 -0
- office365/security/collaboration/analyzed_email_attachment.py +24 -0
- office365/security/collaboration/analyzed_email_authentication_detail.py +14 -0
- office365/security/collaboration/analyzed_email_delivery_detail.py +18 -0
- office365/security/collaboration/analyzed_email_dlp_rule_info.py +12 -0
- office365/security/collaboration/analyzed_email_exchange_transport_rule_info.py +12 -0
- office365/security/collaboration/analyzed_email_recipient_detail.py +15 -0
- office365/security/collaboration/analyzed_email_sender_detail.py +22 -0
- office365/security/collaboration/analyzed_email_url.py +20 -0
- office365/security/collaboration/collaboration_root.py +24 -0
- office365/security/compliance_endpoint_evaluation_incomplete.py +7 -0
- office365/security/compliance_evaluation_incomplete.py +7 -0
- office365/security/compromise_indicator.py +14 -0
- office365/security/container_evidence.py +27 -0
- office365/security/container_filter.py +14 -0
- office365/security/container_image_evidence.py +16 -0
- office365/security/container_registry_evidence.py +11 -0
- office365/security/control_score.py +14 -0
- office365/security/cortana_briefing_audit_record.py +7 -0
- office365/security/csc_content_metadata.py +7 -0
- office365/security/custom_training_setting.py +23 -0
- office365/security/customer_key_service_encryption_audit_record.py +7 -0
- office365/security/cvss_summary.py +15 -0
- office365/security/data_center_security_cmdlet_audit_record.py +7 -0
- office365/security/data_governance_audit_record.py +7 -0
- office365/security/data_insights_rest_api_audit_record.py +7 -0
- office365/security/data_lake_export_operation_audit_record.py +7 -0
- office365/security/data_set.py +38 -0
- office365/security/data_share_operation_audit_record.py +7 -0
- office365/security/data_source_container.py +51 -0
- office365/security/datasecurity/application_mode.py +14 -0
- office365/security/datasecurity/classifcation_error_base.py +17 -0
- office365/security/datasecurity/classification_error.py +19 -0
- office365/security/datasecurity/classification_inner_error.py +17 -0
- office365/security/datasecurity/compute_rights_and_inheritance_result.py +23 -0
- office365/security/datasecurity/current_label.py +13 -0
- office365/security/datasecurity/custom_metadata_dictionary.py +7 -0
- office365/security/datasecurity/dlp_action_info.py +12 -0
- office365/security/datasecurity/governance.py +43 -0
- office365/security/datasecurity/integrated_application_metadata.py +12 -0
- office365/security/datasecurity/investigation_audit_record.py +7 -0
- office365/security/datasecurity/label_content_right.py +47 -0
- office365/security/datasecurity/policy_binding.py +16 -0
- office365/security/datasecurity/policy_location.py +11 -0
- office365/security/datasecurity/policy_location_application.py +7 -0
- office365/security/datasecurity/policy_location_domain.py +7 -0
- office365/security/datasecurity/policy_location_url.py +7 -0
- office365/security/datasecurity/policy_scope_base.py +25 -0
- office365/security/datasecurity/policy_tenant_scope.py +14 -0
- office365/security/datasecurity/policy_tip_action.py +13 -0
- office365/security/datasecurity/policy_user_scope.py +7 -0
- office365/security/datasecurity/process_content_batch_request.py +16 -0
- office365/security/datasecurity/process_content_request.py +32 -0
- office365/security/datasecurity/process_content_response.py +23 -0
- office365/security/datasecurity/process_content_responses.py +15 -0
- office365/security/datasecurity/process_conversation_metadata.py +26 -0
- office365/security/datasecurity/process_file_metadata.py +15 -0
- office365/security/datasecurity/protected_content.py +13 -0
- office365/security/datasecurity/sensitivity_label.py +135 -0
- office365/security/datasecurity/tenant_protection_scope_container.py +9 -0
- office365/security/datasecurity/usage_rights_included.py +31 -0
- office365/security/default_audit_data.py +7 -0
- office365/security/defender_automation_rule.py +7 -0
- office365/security/defender_case_management_audit_record.py +7 -0
- office365/security/defender_generated_playbook.py +7 -0
- office365/security/defender_integration.py +7 -0
- office365/security/defender_preview_features_record.py +7 -0
- office365/security/defender_security_for_ai_configuration_audit_record.py +7 -0
- office365/security/deploy_feature_activity_record.py +7 -0
- office365/security/deployment_access_key_type.py +11 -0
- office365/security/detection_action.py +18 -0
- office365/security/detection_rule.py +77 -0
- office365/security/detection_rule_status.py +14 -0
- office365/security/detonation_behaviour_details.py +22 -0
- office365/security/detonation_chain.py +17 -0
- office365/security/detonation_details.py +33 -0
- office365/security/detonation_observables.py +16 -0
- office365/security/device_action.py +11 -0
- office365/security/device_evidence.py +49 -0
- office365/security/dictionary.py +7 -0
- office365/security/dlp_sensitive_information_type_rule_package_cmdlet_record.py +7 -0
- office365/security/dns_entity_mapping.py +13 -0
- office365/security/dns_evidence.py +18 -0
- office365/security/dspm_admin_activity.py +7 -0
- office365/security/dynamic_column_value.py +7 -0
- office365/security/ecs_content_metadata.py +7 -0
- office365/security/ediscovery/case_member.py +31 -0
- office365/security/ediscovery/custodian.py +83 -0
- office365/security/ediscovery/ediscovery_case_settings.py +45 -0
- office365/security/ediscovery/ediscovery_estimate_operation.py +72 -0
- office365/security/ediscovery/ediscovery_export_operation.py +68 -0
- office365/security/ediscovery/ediscovery_index_operation.py +8 -0
- office365/security/ediscovery/ediscovery_review_tag.py +38 -0
- office365/security/ediscovery/noncustodial_data_source.py +40 -0
- office365/security/ediscovery/operations/add_to_review_set.py +70 -0
- office365/security/ediscovery/operations/hold.py +8 -0
- office365/security/ediscovery/operations/hold_policy_sync.py +19 -0
- office365/security/ediscovery/operations/purge_data.py +19 -0
- office365/security/ediscovery/operations/search_export.py +93 -0
- office365/security/ediscovery/operations/tag.py +8 -0
- office365/security/ediscovery/review_set.py +24 -0
- office365/security/ediscovery/review_set_query.py +9 -0
- office365/security/ediscovery/search.py +88 -0
- office365/security/email_action.py +12 -0
- office365/security/email_payload_detail.py +14 -0
- office365/security/email_sender.py +13 -0
- office365/security/end_user_notification.py +100 -0
- office365/security/end_user_notification_detail.py +49 -0
- office365/security/end_user_notification_setting.py +24 -0
- office365/security/entity_mapping.py +7 -0
- office365/security/entity_mapping_configuration.py +77 -0
- office365/security/evaluation_outcome.py +13 -0
- office365/security/event_propagation_result.py +15 -0
- office365/security/event_query.py +14 -0
- office365/security/export_file_metadata.py +13 -0
- office365/security/expression_input_object.py +19 -0
- office365/security/fabric_audit_record.py +7 -0
- office365/security/fabric_policy_record.py +7 -0
- office365/security/file_action.py +16 -0
- office365/security/file_details.py +20 -0
- office365/security/file_entity_mapping.py +13 -0
- office365/security/file_evidence.py +17 -0
- office365/security/file_hash.py +18 -0
- office365/security/file_hash_evidence.py +13 -0
- office365/security/file_plan_applied_category.py +14 -0
- office365/security/file_plan_authority.py +7 -0
- office365/security/file_plan_citation.py +12 -0
- office365/security/file_plan_department.py +7 -0
- office365/security/file_plan_descriptor_base.py +11 -0
- office365/security/file_plan_descriptor_template.py +32 -0
- office365/security/file_plan_reference.py +7 -0
- office365/security/file_plan_subcategory.py +7 -0
- office365/security/filter.py +21 -0
- office365/security/filter_clause.py +16 -0
- office365/security/filter_group.py +16 -0
- office365/security/filter_operand.py +14 -0
- office365/security/filtering_teams_message_file_info.py +7 -0
- office365/security/formatted_content.py +13 -0
- office365/security/geo_location.py +15 -0
- office365/security/git_hub_organization_evidence.py +16 -0
- office365/security/git_hub_repo_evidence.py +15 -0
- office365/security/git_hub_user_evidence.py +15 -0
- office365/security/google_cloud_resource_entity_mapping.py +11 -0
- office365/security/google_cloud_resource_evidence.py +18 -0
- office365/security/group_entity_mapping.py +13 -0
- office365/security/group_filter.py +14 -0
- office365/security/health_issue.py +95 -0
- office365/security/healthcare_signal_record.py +7 -0
- office365/security/host_entity_mapping.py +15 -0
- office365/security/host_security_state.py +19 -0
- office365/security/host_ssl_certificate_port.py +15 -0
- office365/security/hunting_query_results.py +23 -0
- office365/security/hyperlink.py +12 -0
- office365/security/identity_accounts.py +50 -0
- office365/security/identity_provider.py +14 -0
- office365/security/incidents/incident.py +159 -0
- office365/security/include_all_account_target_content.py +7 -0
- office365/security/indicator.py +25 -0
- office365/security/integrated_apps_app_admin_activity_audit_record.py +7 -0
- office365/security/integrated_apps_app_settings_admin_activity_audit_record.py +7 -0
- office365/security/intelligence_profile_country_or_region_of_origin.py +12 -0
- office365/security/intelligence_profile_indicator.py +24 -0
- office365/security/investigation_security_state.py +12 -0
- office365/security/invoke_action_result.py +22 -0
- office365/security/io_t_device_evidence.py +45 -0
- office365/security/ip_address.py +37 -0
- office365/security/ip_entity_mapping.py +12 -0
- office365/security/ip_evidence.py +18 -0
- office365/security/irm_activity_audit_trail_record.py +7 -0
- office365/security/irm_user_defined_detection_record.py +7 -0
- office365/security/isolate_device_action.py +12 -0
- office365/security/isolation_type.py +13 -0
- office365/security/kaizala_audit_record.py +7 -0
- office365/security/kubernetes_cluster_evidence.py +19 -0
- office365/security/kubernetes_controller_evidence.py +18 -0
- office365/security/kubernetes_namespace_evidence.py +17 -0
- office365/security/kubernetes_pod_evidence.py +37 -0
- office365/security/kubernetes_secret_evidence.py +16 -0
- office365/security/kubernetes_service_account_evidence.py +15 -0
- office365/security/kubernetes_service_evidence.py +28 -0
- office365/security/kubernetes_service_port.py +17 -0
- office365/security/labels/analytics_aggregate_audit_record.py +7 -0
- office365/security/labels/content_explorer_audit_record.py +7 -0
- office365/security/labels/retention/collection.py +81 -0
- office365/security/labels/retention/disposition_review_stage.py +32 -0
- office365/security/labels/retention/duration_in_days.py +13 -0
- office365/security/labels/retention/fileplan_descriptor.py +97 -0
- office365/security/labels/retention/label.py +163 -0
- office365/security/labels/root.py +87 -0
- office365/security/large_content_metadata_audit_record.py +7 -0
- office365/security/logged_on_user.py +12 -0
- office365/security/m365_compliance_connector_audit_record.py +7 -0
- office365/security/m365_search_sections_record.py +7 -0
- office365/security/m365daad_audit_record.py +7 -0
- office365/security/m365odsp_asset_metadata_record.py +7 -0
- office365/security/mail_cluster_entity_mapping.py +12 -0
- office365/security/mail_cluster_evidence.py +19 -0
- office365/security/mail_message_entity_mapping.py +14 -0
- office365/security/mail_submission_data.py +7 -0
- office365/security/mailbox_configuration_evidence.py +22 -0
- office365/security/mailbox_entity_mapping.py +11 -0
- office365/security/mailbox_evidence.py +17 -0
- office365/security/malware_state.py +15 -0
- office365/security/managed_services_audit_record.py +7 -0
- office365/security/managed_tenants_audit_record.py +7 -0
- office365/security/mapg_alerts_audit_record.py +7 -0
- office365/security/mapg_onboard_audit_record.py +7 -0
- office365/security/mapg_policy_audit_record.py +7 -0
- office365/security/mapg_remediation_audit_record.py +7 -0
- office365/security/mcas_alerts_audit_record.py +7 -0
- office365/security/mcs_raw_email_content_metadata.py +7 -0
- office365/security/mda_audit_record.py +7 -0
- office365/security/mda_data_security_signal_record.py +7 -0
- office365/security/mdash_audit_record.py +7 -0
- office365/security/mdatp_audit_record.py +7 -0
- office365/security/mdc_events_record.py +7 -0
- office365/security/mdi_audit_record.py +7 -0
- office365/security/merge_response.py +11 -0
- office365/security/mes_raw_email_content_metadata.py +7 -0
- office365/security/mesh_worlds_audit_record.py +7 -0
- office365/security/message_security_state.py +21 -0
- office365/security/microsoft365_backup_backup_item_audit_record.py +7 -0
- office365/security/microsoft365_backup_backup_policy_audit_record.py +7 -0
- office365/security/microsoft365_backup_granular_browse_task_audit_record.py +7 -0
- office365/security/microsoft365_backup_restore_item_audit_record.py +7 -0
- office365/security/microsoft365_backup_restore_task_audit_record.py +7 -0
- office365/security/microsoft365_copilot_scheduled_prompt_audit_record.py +7 -0
- office365/security/microsoft_custom_training_setting.py +25 -0
- office365/security/microsoft_defender_experts_xdr_audit_record.py +7 -0
- office365/security/microsoft_flow_audit_record.py +7 -0
- office365/security/microsoft_forms_audit_record.py +7 -0
- office365/security/microsoft_graph_data_connect_consent.py +7 -0
- office365/security/microsoft_graph_data_connect_operation.py +7 -0
- office365/security/microsoft_managed_training_setting.py +17 -0
- office365/security/microsoft_purview_data_catalog_operation_record.py +7 -0
- office365/security/microsoft_purview_data_map_operation_record.py +7 -0
- office365/security/microsoft_purview_metadata_policy_operation_record.py +7 -0
- office365/security/microsoft_purview_policy_operation_record.py +7 -0
- office365/security/microsoft_purview_privacy_audit_event.py +7 -0
- office365/security/microsoft_purview_unified_catalog_operation_record.py +7 -0
- office365/security/microsoft_security_for_ai_configuration.py +7 -0
- office365/security/microsoft_security_for_ai_real_time_protection.py +7 -0
- office365/security/microsoft_teams_move_messages.py +7 -0
- office365/security/microsoft_training_assignment_mapping.py +25 -0
- office365/security/mip_auto_label_exchange_item_audit_record.py +7 -0
- office365/security/mip_auto_label_progress_feedback_audit_record.py +7 -0
- office365/security/mip_auto_label_share_point_item_audit_record.py +7 -0
- office365/security/mip_auto_label_share_point_policy_location_audit_record.py +7 -0
- office365/security/mip_auto_label_simulation_share_point_completion_record.py +7 -0
- office365/security/mip_auto_label_simulation_share_point_progress_record.py +7 -0
- office365/security/mip_auto_label_simulation_statistics_record.py +7 -0
- office365/security/mip_exact_data_match_audit_record.py +7 -0
- office365/security/mip_label_analytics_audit_record.py +7 -0
- office365/security/mip_label_audit_record.py +7 -0
- office365/security/mitre_tactic.py +18 -0
- office365/security/mitre_technique.py +15 -0
- office365/security/monitor_mode.py +12 -0
- office365/security/monitor_run_status.py +14 -0
- office365/security/monitor_status.py +13 -0
- office365/security/mos_agent_info_record.py +7 -0
- office365/security/mos_agent_info_record_v2.py +7 -0
- office365/security/ms365d_custom_detection_audit_record.py +7 -0
- office365/security/ms365d_incident_audit_record.py +7 -0
- office365/security/ms365d_suppression_rule_audit_record.py +7 -0
- office365/security/msde_custom_collection_audit_record.py +7 -0
- office365/security/msde_general_settings_audit_record.py +7 -0
- office365/security/msde_indicators_settings_audit_record.py +7 -0
- office365/security/msde_response_actions_audit_record.py +7 -0
- office365/security/msde_roles_settings_audit_record.py +7 -0
- office365/security/msp_vector_search_content_metadata_audit_record.py +7 -0
- office365/security/mstic_nation_state_notification_record.py +7 -0
- office365/security/mtp_content_metadata.py +7 -0
- office365/security/multi_stage_disposition_audit_record.py +7 -0
- office365/security/my_analytics_settings_audit_record.py +7 -0
- office365/security/network_adapter.py +24 -0
- office365/security/network_connection.py +37 -0
- office365/security/network_connection_evidence.py +20 -0
- office365/security/nic_evidence.py +17 -0
- office365/security/no_training_notification_setting.py +14 -0
- office365/security/no_training_setting.py +7 -0
- office365/security/noisy_alert_policy_audit_record.py +7 -0
- office365/security/o_auth_application_entity_mapping.py +11 -0
- office365/security/oauth_application_evidence.py +14 -0
- office365/security/object_definition.py +24 -0
- office365/security/object_definition_metadata_entry.py +13 -0
- office365/security/object_mapping.py +32 -0
- office365/security/object_mapping_metadata_entry.py +13 -0
- office365/security/ocr_settings.py +15 -0
- office365/security/office_native_audit_record.py +7 -0
- office365/security/ome_portal_audit_record.py +7 -0
- office365/security/on_demand_exchange_classification.py +7 -0
- office365/security/on_demand_share_point_classification_audit_record.py +7 -0
- office365/security/on_premises_file_share_scanner_dlp_audit_record.py +7 -0
- office365/security/on_premises_share_point_scanner_dlp_audit_record.py +7 -0
- office365/security/one_drive_audit_record.py +7 -0
- office365/security/organizational_data_in_m365_audit_record.py +7 -0
- office365/security/organizational_scope.py +14 -0
- office365/security/outlook_copilot_automation_audit_record.py +7 -0
- office365/security/owa_get_access_token_for_resource_audit_record.py +7 -0
- office365/security/p4_ai_risk_score_record.py +7 -0
- office365/security/p4ai_assessment_category_record.py +7 -0
- office365/security/p4ai_assessment_fabric_scanner_record.py +7 -0
- office365/security/p4ai_assessment_location_result_record.py +7 -0
- office365/security/p4ai_assessment_record.py +7 -0
- office365/security/p4ai_dag_site_permissions_record.py +7 -0
- office365/security/parse_expression_response.py +21 -0
- office365/security/passive_dns_record.py +54 -0
- office365/security/payload_coachmark.py +20 -0
- office365/security/payload_detail.py +19 -0
- office365/security/people_admin_settings_audit_record.py +7 -0
- office365/security/people_skills_admin.py +7 -0
- office365/security/people_skills_user.py +7 -0
- office365/security/physical_badging_signal_audit_record.py +7 -0
- office365/security/places_directory_audit_record.py +7 -0
- office365/security/planner_chat_message_audit_record.py +7 -0
- office365/security/planner_chat_message_list_audit_record.py +7 -0
- office365/security/planner_copy_plan_audit_record.py +7 -0
- office365/security/planner_custom_field_definition.py +7 -0
- office365/security/planner_custom_field_definition_list.py +7 -0
- office365/security/planner_dependency.py +7 -0
- office365/security/planner_dependency_list.py +7 -0
- office365/security/planner_goal_audit_record.py +7 -0
- office365/security/planner_goal_list_audit_record.py +7 -0
- office365/security/planner_plan_audit_record.py +7 -0
- office365/security/planner_plan_list_audit_record.py +7 -0
- office365/security/planner_plan_sensitivity_label_audit_record.py +7 -0
- office365/security/planner_roster_audit_record.py +7 -0
- office365/security/planner_roster_sensitivity_label_audit_record.py +7 -0
- office365/security/planner_task_audit_record.py +7 -0
- office365/security/planner_task_list_audit_record.py +7 -0
- office365/security/planner_tenant_settings_audit_record.py +7 -0
- office365/security/policy_config_change_audit_record.py +7 -0
- office365/security/positive_reinforcement_notification.py +14 -0
- office365/security/power_apps_audit_app_record.py +7 -0
- office365/security/power_apps_audit_plan_record.py +7 -0
- office365/security/power_apps_audit_resource_record.py +7 -0
- office365/security/power_bi_audit_record.py +7 -0
- office365/security/power_bi_dlp_audit_record.py +7 -0
- office365/security/power_pages_site_audit_record.py +7 -0
- office365/security/power_platform_admin_dlp_audit_record.py +7 -0
- office365/security/power_platform_admin_environment_audit_record.py +7 -0
- office365/security/power_platform_administrator_activity_record.py +7 -0
- office365/security/power_platform_lockbox_resource_access_request_audit_record.py +7 -0
- office365/security/power_platform_lockbox_resource_command_audit_record.py +7 -0
- office365/security/power_platform_service_activity_audit_record.py +7 -0
- office365/security/power_platform_tenant_isolation_record.py +7 -0
- office365/security/priva_privacy_assessment_operation_record.py +7 -0
- office365/security/priva_privacy_consent_operation_record.py +7 -0
- office365/security/privacy_data_match_audit_record.py +7 -0
- office365/security/privacy_data_minimization_record.py +7 -0
- office365/security/privacy_digest_email_record.py +7 -0
- office365/security/privacy_open_access_audit_record.py +7 -0
- office365/security/privacy_portal_audit_record.py +7 -0
- office365/security/privacy_remediation_action_record.py +7 -0
- office365/security/privacy_remediation_record.py +7 -0
- office365/security/process.py +27 -0
- office365/security/process_entity_mapping.py +12 -0
- office365/security/processing_error.py +12 -0
- office365/security/project_audit_record.py +7 -0
- office365/security/project_for_the_web_assigned_to_me_settings_audit_record.py +7 -0
- office365/security/project_for_the_web_project_audit_record.py +7 -0
- office365/security/project_for_the_web_project_settings_audit_record.py +7 -0
- office365/security/project_for_the_web_roadmap_audit_record.py +7 -0
- office365/security/project_for_the_web_roadmap_item_audit_record.py +7 -0
- office365/security/project_for_the_web_roadmap_settings_audit_record.py +7 -0
- office365/security/project_for_the_web_task_audit_record.py +7 -0
- office365/security/public_error_response.py +14 -0
- office365/security/public_folder_audit_record.py +7 -0
- office365/security/purview_insider_risk_alerts_record.py +7 -0
- office365/security/purview_insider_risk_cases_record.py +7 -0
- office365/security/purview_mc_recommendation_record.py +7 -0
- office365/security/purview_posture_agent_audit_record.py +7 -0
- office365/security/quarantine_audit_record.py +7 -0
- office365/security/query_condition.py +11 -0
- office365/security/quotas.py +141 -0
- office365/security/recipient_type.py +15 -0
- office365/security/records_management_audit_record.py +7 -0
- office365/security/redundancy_detection_settings.py +14 -0
- office365/security/referenced_object.py +12 -0
- office365/security/registry_key_evidence.py +12 -0
- office365/security/registry_key_state.py +23 -0
- office365/security/registry_value_entity_mapping.py +12 -0
- office365/security/registry_value_evidence.py +16 -0
- office365/security/report_file_metadata.py +13 -0
- office365/security/report_submission.py +7 -0
- office365/security/report_submission_result_detail.py +7 -0
- office365/security/resource_access_event.py +17 -0
- office365/security/restricted_mode_audit_record.py +7 -0
- office365/security/retention_duration_forever.py +7 -0
- office365/security/retention_event.py +97 -0
- office365/security/retention_event_status.py +17 -0
- office365/security/retention_policy_audit_record.py +7 -0
- office365/security/rti_operations_agent_audit_record.py +7 -0
- office365/security/rule_schedule.py +16 -0
- office365/security/rules_root.py +30 -0
- office365/security/sbp_configuration_event_record.py +7 -0
- office365/security/sbp_usage_event_record.py +7 -0
- office365/security/score_evidence.py +7 -0
- office365/security/score_platform_generic_audit_record.py +7 -0
- office365/security/scorecontrol/profile.py +139 -0
- office365/security/script_run_audit_record.py +7 -0
- office365/security/search/audit_record.py +7 -0
- office365/security/search/data_source.py +39 -0
- office365/security/search.py +56 -0
- office365/security/securescores/control_state_update.py +17 -0
- office365/security/securescores/secure_score.py +80 -0
- office365/security/security.py +234 -0
- office365/security/security_compliance_alert_record.py +7 -0
- office365/security/security_compliance_center_eop_cmdlet_audit_record.py +7 -0
- office365/security/security_compliance_insights_audit_record.py +7 -0
- office365/security/security_compliance_rbac_audit_record.py +7 -0
- office365/security/security_compliance_user_change_audit_record.py +7 -0
- office365/security/security_copilot_identity_management_audit_record.py +7 -0
- office365/security/security_development_lifecycle_ai_log_audit_record.py +7 -0
- office365/security/security_group_evidence.py +18 -0
- office365/security/security_resource.py +15 -0
- office365/security/security_vendor_information.py +14 -0
- office365/security/sensitive_info_remediation_agent_data_record.py +7 -0
- office365/security/sensitivity_label_action_audit_record.py +7 -0
- office365/security/sensitivity_label_info.py +15 -0
- office365/security/sensitivity_label_policy_match_audit_record.py +7 -0
- office365/security/sensitivity_labeled_file_action_audit_record.py +7 -0
- office365/security/sensor.py +92 -0
- office365/security/sensor_candidate.py +37 -0
- office365/security/sensor_candidate_activation_configuration.py +17 -0
- office365/security/sensor_deployment_package.py +12 -0
- office365/security/sensor_settings.py +19 -0
- office365/security/sentinel_ai_tool_audit_record.py +7 -0
- office365/security/sentinel_graph_audit_record.py +7 -0
- office365/security/sentinel_job_audit_record.py +7 -0
- office365/security/sentinel_kql_on_lake_audit_record.py +7 -0
- office365/security/sentinel_lake_data_onboarding_audit_record.py +7 -0
- office365/security/sentinel_lake_encryption_audit_record.py +7 -0
- office365/security/sentinel_lake_onboarding_audit_record.py +7 -0
- office365/security/sentinel_notebook_on_lake_audit_record.py +7 -0
- office365/security/sentinel_package_audit_record.py +7 -0
- office365/security/service_principal_evidence.py +18 -0
- office365/security/settings_container.py +21 -0
- office365/security/share_point_app_permission_operation_audit_record.py +7 -0
- office365/security/share_point_audit_record.py +7 -0
- office365/security/share_point_comment_operation_audit_record.py +7 -0
- office365/security/share_point_content_security_policy_audit_record.py +7 -0
- office365/security/share_point_content_type_operation_audit_record.py +7 -0
- office365/security/share_point_e_signature_audit_record.py +7 -0
- office365/security/share_point_field_operation_audit_record.py +7 -0
- office365/security/share_point_file_operation_audit_record.py +7 -0
- office365/security/share_point_list_item_operation_audit_record.py +7 -0
- office365/security/share_point_list_operation_audit_record.py +7 -0
- office365/security/share_point_sharing_operation_audit_record.py +7 -0
- office365/security/sharepoint_file_archive_policy.py +7 -0
- office365/security/simulation_event.py +12 -0
- office365/security/simulation_events_content.py +18 -0
- office365/security/simulation_notification.py +14 -0
- office365/security/single_property_schema.py +12 -0
- office365/security/site_source.py +18 -0
- office365/security/skype_for_business_cmdlets_audit_record.py +7 -0
- office365/security/skype_for_business_pstn_usage_audit_record.py +7 -0
- office365/security/skype_for_business_users_blocked_audit_record.py +7 -0
- office365/security/sonar_detonation_content_metadata.py +7 -0
- office365/security/sonar_detonation_entity_audit_record.py +7 -0
- office365/security/sonar_file_detonation_entity_audit_record.py +7 -0
- office365/security/sonar_submission_entity_audit_record.py +7 -0
- office365/security/sonar_url_detonation_entity_audit_record.py +7 -0
- office365/security/spark_core_custom_live_pool_record.py +7 -0
- office365/security/ssl_certificate.py +81 -0
- office365/security/ssl_certificate_entity.py +23 -0
- office365/security/stop_and_quarantine_file_action.py +12 -0
- office365/security/stream.py +11 -0
- office365/security/string_key_attribute_mapping_source_value_pair.py +17 -0
- office365/security/string_key_long_value_pair.py +12 -0
- office365/security/string_key_object_value_pair.py +11 -0
- office365/security/string_key_string_value_pair.py +12 -0
- office365/security/string_value_dictionary.py +7 -0
- office365/security/subdomain.py +29 -0
- office365/security/subjectrightsrequests/all_mailbox_location.py +7 -0
- office365/security/subjectrightsrequests/all_site_location.py +7 -0
- office365/security/subjectrightsrequests/authored_note.py +33 -0
- office365/security/subjectrightsrequests/data_subject.py +14 -0
- office365/security/subjectrightsrequests/detail.py +25 -0
- office365/security/subjectrightsrequests/enumerated_mailbox_location.py +14 -0
- office365/security/subjectrightsrequests/enumerated_site_location.py +14 -0
- office365/security/subjectrightsrequests/history.py +21 -0
- office365/security/subjectrightsrequests/mailbox_location.py +7 -0
- office365/security/subjectrightsrequests/request.py +228 -0
- office365/security/subjectrightsrequests/site_location.py +7 -0
- office365/security/subjectrightsrequests/stage_detail.py +18 -0
- office365/security/submission_entity_audit_record.py +7 -0
- office365/security/submission_mail_evidence.py +22 -0
- office365/security/supervisory_review_day_x_insights_audit_record.py +7 -0
- office365/security/synthetic_media_detection_event.py +7 -0
- office365/security/synthetic_probe_audit_record.py +7 -0
- office365/security/tag.py +38 -0
- office365/security/team_copilot_interaction_audit_record.py +7 -0
- office365/security/teams_easy_approvals_audit_record.py +7 -0
- office365/security/teams_eval_data_hub_admin_operation_audit_record.py +7 -0
- office365/security/teams_eval_data_hub_data_access_audit_record.py +7 -0
- office365/security/teams_eval_data_hub_permission_change_audit_record.py +7 -0
- office365/security/teams_healthcare_audit_record.py +7 -0
- office365/security/teams_message_evidence.py +51 -0
- office365/security/teams_updates_audit_record.py +7 -0
- office365/security/tenant_allow_block_list_audit_record.py +7 -0
- office365/security/threat_detection_detail.py +13 -0
- office365/security/threat_finder_audit_record.py +7 -0
- office365/security/threatintelligence/articles/__init__.py +0 -0
- office365/security/threatintelligence/articles/collection.py +24 -0
- office365/security/threatintelligence/atp_content_data.py +7 -0
- office365/security/threatintelligence/export_audit_record.py +7 -0
- office365/security/threatintelligence/host.py +154 -0
- office365/security/threatintelligence/host_component.py +53 -0
- office365/security/threatintelligence/host_cookie.py +47 -0
- office365/security/threatintelligence/host_logon_session_evidence.py +20 -0
- office365/security/threatintelligence/host_pair.py +47 -0
- office365/security/threatintelligence/host_port.py +92 -0
- office365/security/threatintelligence/host_port_banner.py +18 -0
- office365/security/threatintelligence/host_port_component.py +18 -0
- office365/security/threatintelligence/host_reputation.py +33 -0
- office365/security/threatintelligence/host_reputation_rule.py +18 -0
- office365/security/threatintelligence/host_ssl_certificate.py +52 -0
- office365/security/threatintelligence/host_tracker.py +47 -0
- office365/security/threatintelligence/hostname.py +24 -0
- office365/security/threatintelligence/hosts/__init__.py +0 -0
- office365/security/threatintelligence/mail_data.py +7 -0
- office365/security/threatintelligence/object_audit_record.py +7 -0
- office365/security/threatintelligence/profile.py +107 -0
- office365/security/threatintelligence/threat_intelligence.py +211 -0
- office365/security/threatintelligence/url_click_data.py +7 -0
- office365/security/threatintelligence/whoisrecords/__init__.py +0 -0
- office365/security/timeline_event.py +24 -0
- office365/security/todo_audit_record.py +7 -0
- office365/security/topic_modeling_settings.py +14 -0
- office365/security/trainable_classifier_audit_record.py +7 -0
- office365/security/training.py +118 -0
- office365/security/training_language_detail.py +68 -0
- office365/security/training_notification_setting.py +20 -0
- office365/security/training_reminder_notification.py +14 -0
- office365/security/training_setting.py +14 -0
- office365/security/triggers/__init__.py +0 -0
- office365/security/triggers/root.py +32 -0
- office365/security/triggertypes/__init__.py +0 -0
- office365/security/triggertypes/collection.py +17 -0
- office365/security/triggertypes/event_type.py +54 -0
- office365/security/triggertypes/root.py +26 -0
- office365/security/uam_operation_audit_record.py +7 -0
- office365/security/unclassified_artifact.py +24 -0
- office365/security/unified_group_audit_record.py +7 -0
- office365/security/unified_group_source.py +25 -0
- office365/security/unified_simulation_matched_item_audit_record.py +7 -0
- office365/security/unified_simulation_summary_audit_record.py +7 -0
- office365/security/universal_print_management_audit_record.py +7 -0
- office365/security/universal_print_print_job_audit_record.py +7 -0
- office365/security/universal_print_secure_scan.py +7 -0
- office365/security/urbac_assignment_audit_record.py +7 -0
- office365/security/urbac_enable_state_audit_record.py +7 -0
- office365/security/urbac_role_audit_record.py +7 -0
- office365/security/uri_click_security_state.py +18 -0
- office365/security/url_entity_mapping.py +11 -0
- office365/security/url_evidence.py +11 -0
- office365/security/user.py +24 -0
- office365/security/user_account.py +26 -0
- office365/security/user_evidence.py +16 -0
- office365/security/user_security_state.py +31 -0
- office365/security/user_simulation_event_info.py +19 -0
- office365/security/user_source.py +31 -0
- office365/security/user_training_audit_record.py +7 -0
- office365/security/user_training_content_event_info.py +17 -0
- office365/security/user_training_event_info.py +21 -0
- office365/security/user_training_status_info.py +17 -0
- office365/security/usx_workspace_onboarding_audit_record.py +7 -0
- office365/security/vfam_create_policy_audit_record.py +7 -0
- office365/security/vfam_delete_policy_audit_record.py +7 -0
- office365/security/vfam_update_policy_audit_record.py +7 -0
- office365/security/viva_amplify_audit_record.py +7 -0
- office365/security/viva_engage_events_audit_record.py +7 -0
- office365/security/viva_engage_network_association_audit_record.py +7 -0
- office365/security/viva_engage_segment_audit_record.py +7 -0
- office365/security/viva_glint_advanced_configuration_audit_record.py +7 -0
- office365/security/viva_glint_agentic_campaign_audit_record.py +7 -0
- office365/security/viva_glint_client_configuration.py +7 -0
- office365/security/viva_glint_data_retention.py +7 -0
- office365/security/viva_glint_feedback_program_audit_record.py +7 -0
- office365/security/viva_glint_organizational_data_audit_record.py +7 -0
- office365/security/viva_glint_pulse_program_audit_record.py +7 -0
- office365/security/viva_glint_pulse_program_respondent_rate_audit_record.py +7 -0
- office365/security/viva_glint_question_audit_record.py +7 -0
- office365/security/viva_glint_role_audit_record.py +7 -0
- office365/security/viva_glint_rubicon_audit_record.py +7 -0
- office365/security/viva_glint_support_access_audit_record.py +7 -0
- office365/security/viva_glint_system_audit_record.py +7 -0
- office365/security/viva_glint_user_audit_record.py +7 -0
- office365/security/viva_glint_user_group_audit_record.py +7 -0
- office365/security/viva_glint_viva_insights_integration.py +7 -0
- office365/security/viva_goals_audit_record.py +7 -0
- office365/security/viva_learning_admin_audit_record.py +7 -0
- office365/security/viva_learning_audit_record.py +7 -0
- office365/security/viva_pulse_admin_audit_record.py +7 -0
- office365/security/viva_pulse_organizer_audit_record.py +7 -0
- office365/security/viva_pulse_report_audit_record.py +7 -0
- office365/security/viva_pulse_response_audit_record.py +7 -0
- office365/security/vm_metadata.py +16 -0
- office365/security/vulnerability.py +132 -0
- office365/security/vulnerability_component.py +18 -0
- office365/security/vulnerability_state.py +13 -0
- office365/security/wdatp_alerts_audit_record.py +7 -0
- office365/security/web_content_filtering_audit_record.py +7 -0
- office365/security/whois_base_record.py +126 -0
- office365/security/whois_contact.py +19 -0
- office365/security/whois_nameserver.py +19 -0
- office365/security/windows365_customer_lockbox_audit_record.py +7 -0
- office365/security/work_iq_admin_activity.py +7 -0
- office365/security/workplace_analytics_audit_record.py +7 -0
- office365/security/yammer_audit_record.py +7 -0
- office365/security/yammer_user_hiding_audit_record.py +7 -0
- office365/sharepoint/activities/action_facet.py +1 -2
- office365/sharepoint/activities/capabilities.py +0 -2
- office365/sharepoint/activities/client_request.py +1 -2
- office365/sharepoint/activities/client_response.py +0 -2
- office365/sharepoint/activities/clientidentity.py +0 -2
- office365/sharepoint/activities/entity.py +23 -6
- office365/sharepoint/activities/facets/activity_time.py +0 -2
- office365/sharepoint/activities/facets/add_to_onedrive.py +0 -3
- office365/sharepoint/activities/facets/checkin.py +0 -3
- office365/sharepoint/activities/facets/checkout.py +0 -3
- office365/sharepoint/activities/facets/coalesced.py +0 -3
- office365/sharepoint/activities/facets/comment.py +1 -2
- office365/sharepoint/activities/facets/create.py +0 -3
- office365/sharepoint/activities/facets/delete.py +0 -2
- office365/sharepoint/activities/facets/discard_checkout.py +0 -3
- office365/sharepoint/activities/facets/edit.py +0 -3
- office365/sharepoint/activities/facets/get_comment.py +1 -2
- office365/sharepoint/activities/facets/get_mention.py +1 -2
- office365/sharepoint/activities/facets/in_doc.py +0 -3
- office365/sharepoint/activities/facets/mention.py +1 -2
- office365/sharepoint/activities/facets/move.py +1 -2
- office365/sharepoint/activities/facets/point_in_time_restore.py +0 -2
- office365/sharepoint/activities/facets/rename.py +0 -2
- office365/sharepoint/activities/facets/resource.py +1 -2
- office365/sharepoint/activities/facets/revision_set.py +1 -2
- office365/sharepoint/activities/facets/sharing.py +1 -2
- office365/sharepoint/activities/facets/task_completed.py +1 -2
- office365/sharepoint/activities/facets/taskcreated.py +1 -2
- office365/sharepoint/activities/facets/taskreopened.py +1 -2
- office365/sharepoint/activities/facets/version.py +0 -2
- office365/sharepoint/activities/identity.py +1 -2
- office365/sharepoint/activities/identity_item.py +0 -3
- office365/sharepoint/activities/logger.py +5 -0
- office365/sharepoint/activities/officefileuservalueresponse.py +0 -2
- office365/sharepoint/activities/revision_info.py +0 -2
- office365/sharepoint/activities/taskreassignedfacet.py +1 -2
- office365/sharepoint/activities/tracked_item_service.py +2 -0
- office365/sharepoint/activities/tracked_item_updates_request.py +0 -2
- office365/sharepoint/administration/analytics/usage_service.py +3 -0
- office365/sharepoint/administration/archiving/file_size_metric.py +6 -0
- office365/sharepoint/administration/custom_fonts_resource.py +0 -2
- office365/sharepoint/administration/filerequestbrandingassetconfig.py +1 -2
- office365/sharepoint/administration/filerequestbrandingcdninfo.py +0 -2
- office365/sharepoint/administration/filerequestbrandingprofile.py +0 -2
- office365/sharepoint/administration/orgassets/library.py +1 -2
- office365/sharepoint/administration/orgassets/library_collection.py +1 -2
- office365/sharepoint/administration/orgassets/org_assets.py +1 -2
- office365/sharepoint/administration/sitemove/service.py +257 -1
- office365/sharepoint/administration/sitemove/systemsitelockexpres.py +9 -2
- office365/sharepoint/administration/spfarm.py +8 -0
- office365/sharepoint/administration/spwebapplication.py +23 -1
- office365/sharepoint/administration/unlicensedodblicenseenforcementwarningcontext.py +0 -2
- office365/sharepoint/administration/unlicensedodbtenantmetrics.py +0 -2
- office365/sharepoint/administration/usageentry.py +0 -2
- office365/sharepoint/administration/web_application.py +3 -0
- office365/sharepoint/administration/web_service.py +3 -0
- office365/sharepoint/agreements/approveitemapprovalrequestpayload.py +0 -2
- office365/sharepoint/agreements/attestationpolicyresourcestorage.py +0 -3
- office365/sharepoint/agreements/attributedto.py +1 -2
- office365/sharepoint/agreements/attributerequestdto.py +0 -2
- office365/sharepoint/agreements/cancelitemapprovalrequestpayload.py +0 -2
- office365/sharepoint/agreements/countryresponse.py +0 -3
- office365/sharepoint/agreements/createitemapprovalrequestpayload.py +0 -2
- office365/sharepoint/agreements/datapair.py +0 -3
- office365/sharepoint/agreements/document.py +1 -2
- office365/sharepoint/agreements/documentsinfo.py +1 -2
- office365/sharepoint/agreements/esignstatusupdatedpayload.py +0 -2
- office365/sharepoint/agreements/fieldcreationparameters.py +0 -2
- office365/sharepoint/agreements/importdata.py +0 -3
- office365/sharepoint/agreements/location.py +0 -2
- office365/sharepoint/agreements/locationdata.py +0 -3
- office365/sharepoint/agreements/metadata.py +1 -2
- office365/sharepoint/agreements/permissionsdata.py +0 -3
- office365/sharepoint/agreements/rejectitemapprovalrequestpayload.py +0 -2
- office365/sharepoint/agreements/reportbasedata.py +1 -2
- office365/sharepoint/agreements/reportfilter.py +0 -3
- office365/sharepoint/agreements/searchparameters.py +0 -3
- office365/sharepoint/agreements/site.py +1 -2
- office365/sharepoint/agreements/ssolutionenabledsitesresponse.py +1 -2
- office365/sharepoint/agreements/summarydata.py +1 -2
- office365/sharepoint/agreements/templatecreationparameters.py +0 -2
- office365/sharepoint/agreements/updateesignconfigpayload.py +1 -2
- office365/sharepoint/agreements/updatemetadatapayload.py +0 -3
- office365/sharepoint/agreements/updatestatepayload.py +0 -3
- office365/sharepoint/alerts/alert.py +34 -0
- office365/sharepoint/alerts/collection.py +4 -0
- office365/sharepoint/alerts/creation_information.py +0 -2
- office365/sharepoint/analytics/usage_entry.py +3 -0
- office365/sharepoint/appprincipal/credential.py +3 -0
- office365/sharepoint/appprincipal/identity_provider.py +2 -0
- office365/sharepoint/approvals/accessrequestresponse.py +0 -2
- office365/sharepoint/approvals/additionalaccessstatusresponse.py +0 -3
- office365/sharepoint/approvals/agreementworkflowresponse.py +0 -3
- office365/sharepoint/approvals/approvals.py +273 -1
- office365/sharepoint/approvals/createrequestparameters.py +0 -2
- office365/sharepoint/approvals/createtemplateresponse.py +0 -2
- office365/sharepoint/approvals/mediaserviceupdateparameters.py +1 -2
- office365/sharepoint/approvals/properties.py +0 -2
- office365/sharepoint/approvals/reviewconfigurationpayload.py +1 -2
- office365/sharepoint/approvals/reviewconfigurationresponse.py +1 -2
- office365/sharepoint/approvals/reviewdeletionconfigurationresponse.py +0 -2
- office365/sharepoint/approvals/reviewworkflowresponsedto.py +0 -2
- office365/sharepoint/approvals/spagreementresults.py +1 -2
- office365/sharepoint/approvals/updatereviewrequestdto.py +0 -2
- office365/sharepoint/approvals/updateuploadedagreementmetadatapayload.py +0 -3
- office365/sharepoint/approvals/user.py +0 -2
- office365/sharepoint/apps/access_requests.py +72 -0
- office365/sharepoint/apps/app.py +4 -0
- office365/sharepoint/apps/app_collection.py +3 -0
- office365/sharepoint/apps/appinstanceerrordetails.py +8 -0
- office365/sharepoint/apps/appsitecontextutility.py +25 -1
- office365/sharepoint/apps/apptileproperties.py +65 -1
- office365/sharepoint/apps/catalog.py +21 -1
- office365/sharepoint/apps/context_site.py +3 -0
- office365/sharepoint/apps/instance.py +113 -1
- office365/sharepoint/apps/launcher.py +2 -0
- office365/sharepoint/apps/license.py +0 -2
- office365/sharepoint/apps/license_collection.py +1 -2
- office365/sharepoint/apps/license_manager.py +2 -0
- office365/sharepoint/apps/management/principal_info.py +19 -0
- office365/sharepoint/apps/properties.py +0 -2
- office365/sharepoint/attachments/attachment.py +11 -1
- office365/sharepoint/attachments/collection.py +23 -3
- office365/sharepoint/attachments/creation_information.py +0 -2
- office365/sharepoint/audit/audit.py +7 -0
- office365/sharepoint/authentication/acs_service_principal_info.py +0 -2
- office365/sharepoint/authentication/auth_file_detonation_request_response.py +27 -0
- office365/sharepoint/authpolicy/events/collection.py +3 -0
- office365/sharepoint/authpolicy/events/event.py +24 -0
- office365/sharepoint/authpolicy/events/role_assignment_resource_payload.py +0 -2
- office365/sharepoint/authpolicy/spjitdlppolicydata.py +0 -2
- office365/sharepoint/authpolicy/tenant/compliancereport.py +10 -0
- office365/sharepoint/authpolicy/tenant/compliancereportentitydata.py +16 -0
- office365/sharepoint/automations/automations.py +707 -1
- office365/sharepoint/brandcenter/brand_center.py +305 -0
- office365/sharepoint/brandcenter/configuration.py +1 -2
- office365/sharepoint/brandcenter/orgassetslibraryconfigparam.py +0 -2
- office365/sharepoint/brandcenter/tenantthemes.py +1 -2
- office365/sharepoint/brandcenter/theme_data.py +0 -2
- office365/sharepoint/businessdata/app_bdc_catalog.py +8 -0
- office365/sharepoint/businessdata/entityfield.py +5 -0
- office365/sharepoint/businessdata/entityfieldvaluedictionary.py +6 -0
- office365/sharepoint/businessdata/entityidentifier.py +7 -0
- office365/sharepoint/businessdata/entityidentity.py +2 -0
- office365/sharepoint/businessdata/entityinstance.py +5 -0
- office365/sharepoint/businessdata/entityview.py +7 -0
- office365/sharepoint/businessdata/externalsubscriptionstore.py +2 -0
- office365/sharepoint/businessdata/filter.py +7 -0
- office365/sharepoint/businessdata/infrastructure/securestore/connection_settings.py +42 -0
- office365/sharepoint/businessdata/lobsysteminstance.py +2 -0
- office365/sharepoint/businessdata/methodexecutionresult.py +2 -0
- office365/sharepoint/businessdata/notificationcallback.py +4 -0
- office365/sharepoint/businessdata/runtime/subscription.py +18 -0
- office365/sharepoint/businessdata/typedescriptor.py +12 -0
- office365/sharepoint/campaigns/campaigns.py +2 -0
- office365/sharepoint/campaigns/communicationentity.py +1 -2
- office365/sharepoint/campaigns/entity.py +1 -2
- office365/sharepoint/campaigns/summary.py +1 -2
- office365/sharepoint/campaigns/userinfo.py +1 -2
- office365/sharepoint/changes/alert.py +11 -0
- office365/sharepoint/changes/app_consent_principal.py +11 -0
- office365/sharepoint/changes/change.py +10 -0
- office365/sharepoint/changes/collection.py +2 -2
- office365/sharepoint/changes/content_type.py +11 -0
- office365/sharepoint/changes/field.py +11 -0
- office365/sharepoint/changes/file.py +3 -0
- office365/sharepoint/changes/folder.py +11 -0
- office365/sharepoint/changes/group.py +2 -0
- office365/sharepoint/changes/item.py +79 -7
- office365/sharepoint/changes/list.py +33 -0
- office365/sharepoint/changes/log_item_query.py +0 -2
- office365/sharepoint/changes/query.py +0 -2
- office365/sharepoint/changes/token.py +0 -2
- office365/sharepoint/changes/user.py +3 -0
- office365/sharepoint/changes/view.py +4 -0
- office365/sharepoint/changes/web.py +2 -0
- office365/sharepoint/client_context.py +303 -20
- office365/sharepoint/clientsidecomponent/actionshowcard.py +1 -2
- office365/sharepoint/clientsidecomponent/actionsubmit.py +0 -3
- office365/sharepoint/clientsidecomponent/adaptivecard.py +1 -2
- office365/sharepoint/clientsidecomponent/adaptivecardcolumn.py +0 -3
- office365/sharepoint/clientsidecomponent/agreementssolutionfilecontext.py +1 -2
- office365/sharepoint/clientsidecomponent/card_element.py +0 -2
- office365/sharepoint/clientsidecomponent/columnset.py +1 -2
- office365/sharepoint/clientsidecomponent/component_context_info.py +2 -0
- office365/sharepoint/clientsidecomponent/elementupdate.py +1 -2
- office365/sharepoint/clientsidecomponent/hostedapps/add_response.py +23 -0
- office365/sharepoint/clientsidecomponent/hostedapps/app.py +3 -0
- office365/sharepoint/clientsidecomponent/hostedapps/manager.py +2 -0
- office365/sharepoint/clientsidecomponent/identifier.py +0 -3
- office365/sharepoint/clientsidecomponent/padding.py +0 -3
- office365/sharepoint/clientsidecomponent/query_result.py +1 -2
- office365/sharepoint/clientsidecomponent/spfx3rdpartycustomprincipalinfo.py +4 -0
- office365/sharepoint/clientsidecomponent/spteamsappcomponent.py +0 -3
- office365/sharepoint/clientsidecomponent/storage_entity.py +5 -1
- office365/sharepoint/clientsidecomponent/updatecard.py +1 -2
- office365/sharepoint/clientsidecomponent/updatecardelement.py +0 -3
- office365/sharepoint/comments/client/identity.py +0 -2
- office365/sharepoint/comments/collection.py +3 -1
- office365/sharepoint/comments/comment.py +41 -2
- office365/sharepoint/comments/contentanchor.py +0 -2
- office365/sharepoint/comments/information.py +1 -2
- office365/sharepoint/compliance/classification/publishconfig.py +1 -2
- office365/sharepoint/compliance/classification/result.py +1 -2
- office365/sharepoint/compliance/dlp_classification_result.py +0 -2
- office365/sharepoint/compliance/pending_review_items_statistics.py +0 -2
- office365/sharepoint/compliance/preservedcloudattachment.py +0 -2
- office365/sharepoint/compliance/retentionlabelconfig.py +0 -2
- office365/sharepoint/compliance/sensitivitylabels/collection.py +35 -1
- office365/sharepoint/compliance/sensitivitylabels/config.py +0 -2
- office365/sharepoint/compliance/sensitivitylabels/info.py +0 -3
- office365/sharepoint/compliance/store_proxy.py +29 -0
- office365/sharepoint/compliance/tags/info.py +0 -2
- office365/sharepoint/compliance/tags/tag.py +0 -2
- office365/sharepoint/containers/active/collection.py +1 -2
- office365/sharepoint/containers/active/properties.py +2 -2
- office365/sharepoint/content_solution.py +20 -0
- office365/sharepoint/contentcenter/cdsmetadata.py +4 -0
- office365/sharepoint/contentcenter/defaultcontentcentersiteinfo.py +5 -0
- office365/sharepoint/contentcenter/machinelearning/dependentmodel.py +0 -2
- office365/sharepoint/contentcenter/machinelearning/enabled.py +46 -0
- office365/sharepoint/contentcenter/machinelearning/extractorpublishconfig.py +0 -2
- office365/sharepoint/contentcenter/machinelearning/hub.py +84 -9
- office365/sharepoint/contentcenter/machinelearning/modeldependencies.py +1 -2
- office365/sharepoint/contentcenter/machinelearning/modelpublishconfig.py +1 -2
- office365/sharepoint/contentcenter/machinelearning/models/columndef.py +0 -2
- office365/sharepoint/contentcenter/machinelearning/models/entity_data.py +147 -0
- office365/sharepoint/contentcenter/machinelearning/models/model.py +63 -2
- office365/sharepoint/contentcenter/machinelearning/publicationentitydata.py +0 -2
- office365/sharepoint/contentcenter/machinelearning/publicationresult.py +1 -2
- office365/sharepoint/contentcenter/machinelearning/publications/publication.py +42 -0
- office365/sharepoint/contentcenter/machinelearning/publicationsentitydata.py +8 -0
- office365/sharepoint/contentcenter/machinelearning/samples/entity_data.py +17 -0
- office365/sharepoint/contentcenter/machinelearning/samples/meta.py +0 -2
- office365/sharepoint/contentcenter/machinelearning/samples/sample.py +32 -0
- office365/sharepoint/contentcenter/machinelearning/workitementitydata.py +20 -0
- office365/sharepoint/contentcenter/machinelearning/workitems/item.py +28 -0
- office365/sharepoint/contentcenter/sp_machine_learning_column_autofill_prompt_suggestion_data.py +24 -0
- office365/sharepoint/contentcenter/sp_machine_learning_column_autofill_prompt_suggestion_result.py +15 -0
- office365/sharepoint/contentcenter/sp_machine_learning_list_autofill_single_data.py +14 -0
- office365/sharepoint/contentcenter/sp_machine_learning_list_autofill_single_result.py +12 -0
- office365/sharepoint/contentcenter/sp_machine_learning_publications_result.py +34 -0
- office365/sharepoint/contentcenter/syntex_models_landing_info.py +29 -0
- office365/sharepoint/contentcenter/template_api.py +205 -0
- office365/sharepoint/contentsolution/create_template_using_stream_request.py +4 -0
- office365/sharepoint/contentsolution/template_api.py +10 -0
- office365/sharepoint/contenttypes/builtin_content_type_id.py +23 -0
- office365/sharepoint/contenttypes/collection.py +58 -17
- office365/sharepoint/contenttypes/content_type.py +162 -8
- office365/sharepoint/contenttypes/content_type_id.py +4 -2
- office365/sharepoint/contenttypes/creation_information.py +0 -2
- office365/sharepoint/contenttypes/entity_data.py +0 -2
- office365/sharepoint/contenttypes/fieldlinks/collection.py +4 -2
- office365/sharepoint/contenttypes/fieldlinks/field_link.py +29 -2
- office365/sharepoint/convergence/addnoliveblobsinodcservicestateapi.py +2 -0
- office365/sharepoint/convergence/consumer_permissions.py +3 -0
- office365/sharepoint/convergence/migration_complete_state_api.py +4 -0
- office365/sharepoint/convergence/odcmetadatacleanedupapi.py +2 -0
- office365/sharepoint/copilot/files/collection.py +2 -0
- office365/sharepoint/copilot/files/collection_query_result.py +1 -2
- office365/sharepoint/copilot/files/metadata.py +1 -2
- office365/sharepoint/copilot/files/user_relationship.py +0 -2
- office365/sharepoint/copilot/transitivesharing/statusinformation.py +1 -2
- office365/sharepoint/copilot/transitivesharing/statusitem.py +0 -2
- office365/sharepoint/copilot/useridentity.py +0 -2
- office365/sharepoint/customactions/element.py +1 -2
- office365/sharepoint/customactions/element_collection.py +1 -2
- office365/sharepoint/deployment/shortcutinformation.py +0 -2
- office365/sharepoint/directory/conditional_access_policy.py +14 -0
- office365/sharepoint/directory/extendedattributedata.py +0 -3
- office365/sharepoint/directory/group_and_user_status.py +12 -0
- office365/sharepoint/directory/groups/group.py +159 -6
- office365/sharepoint/directory/groups/namevalidationresult.py +1 -2
- office365/sharepoint/directory/groups/namevalidationresulterrorparams.py +0 -2
- office365/sharepoint/directory/helper.py +9 -0
- office365/sharepoint/directory/link.py +24 -0
- office365/sharepoint/directory/linktarget.py +0 -3
- office365/sharepoint/directory/members_info.py +18 -0
- office365/sharepoint/directory/membership_result.py +3 -1
- office365/sharepoint/directory/multi_conditional_access_policy.py +12 -0
- office365/sharepoint/directory/my_groups_result.py +17 -0
- office365/sharepoint/directory/named_location_policy.py +29 -0
- office365/sharepoint/directory/propertycollectiondata.py +0 -3
- office365/sharepoint/directory/propertydata.py +0 -3
- office365/sharepoint/directory/provider/alternate_id_data.py +0 -2
- office365/sharepoint/directory/provider/link_change.py +1 -2
- office365/sharepoint/directory/provider/notification.py +3 -0
- office365/sharepoint/directory/provider/object_changes.py +1 -2
- office365/sharepoint/directory/provider/object_data.py +1 -2
- office365/sharepoint/directory/provider/property_change.py +1 -2
- office365/sharepoint/directory/provider/provider.py +152 -0
- office365/sharepoint/directory/provider/session_data.py +0 -2
- office365/sharepoint/directory/relationdata.py +0 -3
- office365/sharepoint/directory/relationsetdata.py +0 -3
- office365/sharepoint/directory/resourcedata.py +0 -3
- office365/sharepoint/directory/schemadata.py +0 -3
- office365/sharepoint/directory/session.py +76 -0
- office365/sharepoint/directory/statedata.py +0 -3
- office365/sharepoint/directory/tenant.py +33 -0
- office365/sharepoint/directory/users/creationinformation.py +0 -3
- office365/sharepoint/directory/users/information.py +0 -2
- office365/sharepoint/directory/users/user.py +409 -1
- office365/sharepoint/document_location.py +12 -0
- office365/sharepoint/documentmanagement/document_id.py +5 -0
- office365/sharepoint/documentmanagement/document_set.py +6 -0
- office365/sharepoint/documents/caaefieldelement.py +0 -3
- office365/sharepoint/documents/caaesnippetelement.py +0 -3
- office365/sharepoint/documents/cafieldvalue.py +0 -3
- office365/sharepoint/documents/coauthconfiguration.py +1 -2
- office365/sharepoint/documents/columntypeinfo.py +0 -3
- office365/sharepoint/documents/contentassemblyfileinfo.py +0 -3
- office365/sharepoint/documents/contentassemblyformanswer.py +0 -3
- office365/sharepoint/documents/contentassemblymoderntemplatecolumnsmappinginfo.py +1 -2
- office365/sharepoint/documents/contentcontrolinfo.py +1 -2
- office365/sharepoint/documents/countbydate.py +0 -2
- office365/sharepoint/documents/createagreementfolderinfo.py +0 -3
- office365/sharepoint/documents/createhvcsitemapprovalrequestparameters.py +0 -3
- office365/sharepoint/documents/createreviewrequestdto.py +0 -2
- office365/sharepoint/documents/customizedformspage.py +0 -2
- office365/sharepoint/documents/customizedformspagecollection.py +1 -2
- office365/sharepoint/documents/destinationlibraryinfo.py +0 -2
- office365/sharepoint/documents/documentgenerationinfo.py +1 -2
- office365/sharepoint/documents/effectivebasepermissions.py +0 -2
- office365/sharepoint/documents/encryptionoption.py +0 -3
- office365/sharepoint/documents/fieldvalueswithurl.py +1 -2
- office365/sharepoint/documents/fontoption.py +0 -3
- office365/sharepoint/documents/getnextagreementworkflowrequest.py +0 -3
- office365/sharepoint/documents/getreviewconfigrequestdto.py +0 -2
- office365/sharepoint/documents/gridinitinfotype.py +0 -3
- office365/sharepoint/documents/ingestiontaskkey.py +0 -3
- office365/sharepoint/documents/itemorderupdatevalue.py +0 -3
- office365/sharepoint/documents/librarydetails.py +0 -2
- office365/sharepoint/documents/location.py +0 -2
- office365/sharepoint/documents/lockfiledata.py +1 -2
- office365/sharepoint/documents/placeholder.py +0 -3
- office365/sharepoint/documents/placeholderv2.py +0 -2
- office365/sharepoint/documents/publishmoderntemplatepayload.py +2 -2
- office365/sharepoint/documents/publishsnippetpayload.py +1 -2
- office365/sharepoint/documents/publishtemplatev2payload.py +1 -2
- office365/sharepoint/documents/smarttemplatecontenttype.py +0 -3
- office365/sharepoint/documents/snippet.py +1 -2
- office365/sharepoint/documents/templatemetadata.py +1 -2
- office365/sharepoint/documents/updatetemplateinfo.py +1 -2
- office365/sharepoint/documents/updatetemplateinfov2.py +1 -2
- office365/sharepoint/documents/uploaddocumentinfo.py +0 -3
- office365/sharepoint/dynamiccontent/updateservice.py +219 -1
- office365/sharepoint/edgeworth_settings_apis.py +7 -0
- office365/sharepoint/engage_distribution_info.py +15 -0
- office365/sharepoint/entity.py +107 -5
- office365/sharepoint/entity_collection.py +86 -1
- office365/sharepoint/esign/digitallegacy.py +388 -1
- office365/sharepoint/esign/models/addaudittrailentry.py +0 -2
- office365/sharepoint/esign/models/cancelagreement.py +0 -2
- office365/sharepoint/esign/models/completeagreement.py +0 -2
- office365/sharepoint/esign/models/completeagreementv4.py +0 -2
- office365/sharepoint/esign/models/createagreement.py +0 -2
- office365/sharepoint/esign/models/createagreementv2.py +0 -2
- office365/sharepoint/esign/models/declineagreement.py +0 -2
- office365/sharepoint/esign/models/initializeagreement.py +0 -2
- office365/sharepoint/esign/models/initializewriteback.py +0 -2
- office365/sharepoint/esign/models/signagreement.py +0 -2
- office365/sharepoint/esign/models/updateaudittrailentry.py +0 -2
- office365/sharepoint/esign/models/updatewritebackfile.py +0 -2
- office365/sharepoint/esign/models/writebacklocation.py +0 -2
- office365/sharepoint/eventreceivers/creation_information.py +0 -2
- office365/sharepoint/eventreceivers/definition.py +35 -0
- office365/sharepoint/eventreceivers/definition_collection.py +2 -0
- office365/sharepoint/exceptions.py +12 -2
- office365/sharepoint/features/collection.py +13 -6
- office365/sharepoint/features/definitions/collection.py +2 -0
- office365/sharepoint/features/definitions/definition.py +8 -0
- office365/sharepoint/features/feature.py +3 -0
- office365/sharepoint/fields/calculated.py +29 -0
- office365/sharepoint/fields/choice.py +11 -0
- office365/sharepoint/fields/collection.py +66 -7
- office365/sharepoint/fields/computed.py +2 -0
- office365/sharepoint/fields/creation_information.py +0 -2
- office365/sharepoint/fields/currency.py +2 -0
- office365/sharepoint/fields/date_time.py +6 -0
- office365/sharepoint/fields/field.py +355 -37
- office365/sharepoint/fields/fieldcalculatederrorvalue.py +0 -3
- office365/sharepoint/fields/fieldratingscalequestionanswer.py +0 -3
- office365/sharepoint/fields/geolocation_value.py +0 -3
- office365/sharepoint/fields/image_value.py +1 -2
- office365/sharepoint/fields/lookup.py +34 -0
- office365/sharepoint/fields/lookup_value.py +0 -2
- office365/sharepoint/fields/multi_choice.py +12 -0
- office365/sharepoint/fields/multi_choice_value.py +0 -3
- office365/sharepoint/fields/multi_line_text.py +21 -0
- office365/sharepoint/fields/multi_lookup_value.py +0 -3
- office365/sharepoint/fields/multi_user_value.py +0 -3
- office365/sharepoint/fields/number.py +36 -0
- office365/sharepoint/fields/rating_scale.py +35 -0
- office365/sharepoint/fields/related_field.py +5 -1
- office365/sharepoint/fields/schema.py +141 -0
- office365/sharepoint/fields/text.py +2 -0
- office365/sharepoint/fields/type.py +14 -0
- office365/sharepoint/fields/url.py +2 -0
- office365/sharepoint/fields/url_value.py +0 -3
- office365/sharepoint/fields/user.py +18 -0
- office365/sharepoint/fields/user_value.py +0 -2
- office365/sharepoint/fields/xmlSchemaFieldCreationInformation.py +0 -3
- office365/sharepoint/files/checked_out_file.py +21 -1
- office365/sharepoint/files/checked_out_file_collection.py +2 -0
- office365/sharepoint/files/collection.py +275 -38
- office365/sharepoint/files/collectionaddparameters.py +0 -3
- office365/sharepoint/files/creation_information.py +1 -4
- office365/sharepoint/files/deleteparameters.py +0 -3
- office365/sharepoint/files/download_operation.py +475 -0
- office365/sharepoint/files/file.py +767 -33
- office365/sharepoint/files/file_url_virus_status_update.py +15 -0
- office365/sharepoint/files/publish/status.py +51 -0
- office365/sharepoint/files/recent_file_collection.py +45 -0
- office365/sharepoint/files/systemitem.py +9 -0
- office365/sharepoint/files/versionbatchdeleteparameters.py +1 -2
- office365/sharepoint/files/versions/collection.py +8 -1
- office365/sharepoint/files/versions/event.py +17 -0
- office365/sharepoint/files/versions/policyselectionparameters.py +1 -2
- office365/sharepoint/files/versions/version.py +40 -4
- office365/sharepoint/flows/connector_result.py +3 -0
- office365/sharepoint/flows/permissions.py +2 -0
- office365/sharepoint/flows/synchronization_result.py +16 -1
- office365/sharepoint/folders/collection.py +3 -0
- office365/sharepoint/folders/coloring.py +33 -0
- office365/sharepoint/folders/coloring_information.py +0 -3
- office365/sharepoint/folders/delete_parameters.py +0 -3
- office365/sharepoint/folders/folder.py +221 -14
- office365/sharepoint/folders/foldercollectionaddparameters.py +0 -3
- office365/sharepoint/folders/temporaryfolderfileinfo.py +0 -3
- office365/sharepoint/fontpackages/creation_parameters.py +0 -2
- office365/sharepoint/fontpackages/font_package.py +81 -0
- office365/sharepoint/fontpackages/oob_settings.py +50 -0
- office365/sharepoint/forms/apprenderinfo.py +0 -2
- office365/sharepoint/forms/customization.py +2 -0
- office365/sharepoint/forms/form.py +13 -0
- office365/sharepoint/glutamate_controller.py +46 -0
- office365/sharepoint/gtp/asyncexecuteresponse.py +1 -2
- office365/sharepoint/gtp/asyncsubmitresponse.py +0 -2
- office365/sharepoint/gtp/base_request_options.py +0 -2
- office365/sharepoint/gtp/base_response.py +0 -2
- office365/sharepoint/gtp/chat/response.py +1 -2
- office365/sharepoint/gtp/chat/responsechoice.py +1 -2
- office365/sharepoint/gtp/embeddings/requestoptions.py +0 -2
- office365/sharepoint/gtp/embeddings/response.py +1 -2
- office365/sharepoint/gtp/embeddings/responsedata.py +1 -2
- office365/sharepoint/gtp/message_entry.py +1 -2
- office365/sharepoint/gtp/requestoptions.py +0 -2
- office365/sharepoint/gtp/response.py +1 -2
- office365/sharepoint/gtp/responsechoice.py +0 -2
- office365/sharepoint/gtp/responseusage.py +1 -2
- office365/sharepoint/htmlpages/html_page.py +8 -0
- office365/sharepoint/htmlpages/html_page_service.py +2 -0
- office365/sharepoint/identity/defaultdocumentlibrary.py +0 -2
- office365/sharepoint/identity/rubysite.py +1 -2
- office365/sharepoint/ir/migration.py +2 -0
- office365/sharepoint/item_reference.py +15 -0
- office365/sharepoint/largeoperation/operation.py +31 -1
- office365/sharepoint/likes/liked_by_information.py +2 -1
- office365/sharepoint/likes/user_entity.py +14 -0
- office365/sharepoint/list_creation_information.py +16 -0
- office365/sharepoint/listhome/favorite_lists.py +136 -0
- office365/sharepoint/listhome/favoritelistssubstrate.py +111 -1
- office365/sharepoint/listhome/item.py +0 -2
- office365/sharepoint/listhome/item2.py +29 -0
- office365/sharepoint/listhome/itemcollection.py +105 -1
- office365/sharepoint/listhome/nucleus.py +17 -1
- office365/sharepoint/listhome/pinneditems.py +133 -1
- office365/sharepoint/listitems/caml/query.py +2 -4
- office365/sharepoint/listitems/collection.py +26 -8
- office365/sharepoint/listitems/collection_position.py +0 -3
- office365/sharepoint/listitems/compliance_info.py +0 -3
- office365/sharepoint/listitems/creation_information.py +0 -3
- office365/sharepoint/listitems/creation_information_using_path.py +0 -2
- office365/sharepoint/listitems/delete_parameters.py +0 -3
- office365/sharepoint/listitems/favoriteitemcollection.py +22 -1
- office365/sharepoint/listitems/form_update_value.py +2 -4
- office365/sharepoint/listitems/listdata_validation_exception_value.py +1 -2
- office365/sharepoint/listitems/listitem.py +1086 -57
- office365/sharepoint/listitems/moderation_status.py +15 -0
- office365/sharepoint/listitems/relateditem.py +0 -3
- office365/sharepoint/listitems/relateditemmanager.py +238 -1
- office365/sharepoint/listitems/update_parameters.py +0 -3
- office365/sharepoint/listitems/updateresults.py +1 -2
- office365/sharepoint/listitems/upsert.py +2 -0
- office365/sharepoint/listitems/user_info_item.py +115 -4
- office365/sharepoint/listitems/versions/change.py +0 -3
- office365/sharepoint/listitems/versions/collection.py +2 -0
- office365/sharepoint/listitems/versions/collection_position.py +0 -3
- office365/sharepoint/listitems/versions/get_parameters.py +1 -2
- office365/sharepoint/listitems/versions/version.py +19 -2
- office365/sharepoint/lists/apihubconnector.py +20 -1
- office365/sharepoint/lists/base_type.py +13 -0
- office365/sharepoint/lists/batch_convert_asset_result.py +16 -0
- office365/sharepoint/lists/batch_convert_classic_wiki_page_input.py +12 -0
- office365/sharepoint/lists/batch_convert_item_result.py +19 -0
- office365/sharepoint/lists/bloom_filter.py +43 -1
- office365/sharepoint/lists/collection.py +6 -0
- office365/sharepoint/lists/collection_position.py +0 -2
- office365/sharepoint/lists/creatable_item_info.py +0 -2
- office365/sharepoint/lists/creatable_item_info_col.py +1 -2
- office365/sharepoint/lists/creatables_info.py +3 -0
- office365/sharepoint/lists/creation_information.py +0 -2
- office365/sharepoint/lists/currency.py +2 -0
- office365/sharepoint/lists/currency_information.py +0 -2
- office365/sharepoint/lists/currency_information_collection.py +1 -2
- office365/sharepoint/lists/data_parameters.py +0 -2
- office365/sharepoint/lists/data_source.py +0 -2
- office365/sharepoint/lists/data_validation_failure.py +0 -2
- office365/sharepoint/lists/document_library_information.py +0 -2
- office365/sharepoint/lists/extended_share_point_permission_settings.py +3 -0
- office365/sharepoint/lists/get_parameters.py +1 -2
- office365/sharepoint/lists/list.py +1506 -65
- office365/sharepoint/lists/list_forms_api.py +111 -1
- office365/sharepoint/lists/listform.py +0 -2
- office365/sharepoint/lists/playlist.py +36 -1
- office365/sharepoint/lists/recentlist.py +29 -0
- office365/sharepoint/lists/recentlistcollection.py +80 -1
- office365/sharepoint/lists/recentlistproxy.py +33 -1
- office365/sharepoint/lists/recommendationcollection.py +75 -1
- office365/sharepoint/lists/render_data_parameters.py +0 -2
- office365/sharepoint/lists/render_override_parameters.py +0 -2
- office365/sharepoint/lists/renderlistcontextmenudataparameters.py +0 -3
- office365/sharepoint/lists/rules/action.py +1 -2
- office365/sharepoint/lists/rules/definition.py +1 -2
- office365/sharepoint/lists/rules/definitiongroup.py +1 -2
- office365/sharepoint/lists/rules/properties.py +0 -2
- office365/sharepoint/lists/rules/reviewinfo.py +0 -2
- office365/sharepoint/lists/rules/rule.py +1 -2
- office365/sharepoint/lists/rules/userinfo.py +0 -3
- office365/sharepoint/lists/rules/validationentryresponse.py +1 -2
- office365/sharepoint/lists/smart_wiki_library_utility.py +109 -0
- office365/sharepoint/lists/smart_wiki_metadata_update_parameters.py +17 -0
- office365/sharepoint/lists/templates/template.py +73 -0
- office365/sharepoint/lists/templates/type.py +3 -0
- office365/sharepoint/lists/templatization_metadata.py +1 -2
- office365/sharepoint/lists/version_policy_manager.py +17 -0
- office365/sharepoint/logger/activityextraproperties.py +0 -2
- office365/sharepoint/logger/activityrequest.py +0 -2
- office365/sharepoint/logger/alternateurl.py +3 -0
- office365/sharepoint/logger/export.py +5 -0
- office365/sharepoint/logger/fileinfo.py +7 -0
- office365/sharepoint/marketplace/app_metadata.py +32 -0
- office365/sharepoint/marketplace/appstatequeryjobdefinition.py +3 -0
- office365/sharepoint/marketplace/corporatecuratedgallery/addins/instance_info.py +0 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/addins/permission_failed_info.py +0 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/addins/permission_info.py +1 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/addins/permission_request.py +1 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/addins/permission_response.py +1 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/addins/principals_response.py +1 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/app_request_information.py +0 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/app_response_information.py +0 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/app_upgrade_availability.py +0 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/available_addins_response.py +1 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/carddesigns/card_design.py +0 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/carddesigns/card_designs.py +3 -0
- office365/sharepoint/marketplace/corporatecuratedgallery/carddesigns/features.py +0 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/spaddinprincipalinfo.py +0 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/spappaddanddeployresponseinfomation.py +0 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/sperrorwithserverrelativeurl.py +0 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/spfailtotriggeruninstalladdinjobresponse.py +0 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/spsitecollectionscopedpermissioninfo.py +0 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/spstoreappcreatebyidinformation.py +0 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/sptriggereduninstalladdinjobresponse.py +0 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/spuninstalladdinerrordetail.py +0 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/spuninstalladdinjobdetail.py +1 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/spuninstalladdinrequest.py +1 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/spuninstalladdinresponse.py +1 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/storeappcreationinformation.py +0 -2
- office365/sharepoint/marketplace/corporatecuratedgallery/teams_package_download.py +3 -0
- office365/sharepoint/marketplace/corporatecuratedgallery/tenantscopedpermissioninfo.py +0 -2
- office365/sharepoint/marketplace/sitecollection/appcatalog/accessor.py +1 -1
- office365/sharepoint/marketplace/sitecollection/appcatalog/allowed_item.py +4 -0
- office365/sharepoint/marketplace/tenant/appcatalog/accessor.py +17 -3
- office365/sharepoint/microfeed/attachment_store.py +6 -0
- office365/sharepoint/microfeed/data.py +11 -0
- office365/sharepoint/microfeed/datalink.py +0 -2
- office365/sharepoint/microfeed/datalinkcollection.py +1 -2
- office365/sharepoint/microfeed/dataquery.py +1 -2
- office365/sharepoint/microfeed/entity.py +0 -2
- office365/sharepoint/microfeed/link.py +1 -2
- office365/sharepoint/microfeed/linkaction.py +0 -2
- office365/sharepoint/microfeed/manager.py +23 -0
- office365/sharepoint/microfeed/microblogentitycollection.py +1 -2
- office365/sharepoint/microfeed/microfeedstore.py +7 -0
- office365/sharepoint/microfeed/posts/collection.py +1 -2
- office365/sharepoint/microfeed/posts/definition.py +0 -2
- office365/sharepoint/microfeed/posts/definitionnamecollection.py +1 -2
- office365/sharepoint/microfeed/posts/definitionnames.py +0 -3
- office365/sharepoint/microfeed/posts/options.py +1 -2
- office365/sharepoint/microfeed/posts/post.py +1 -2
- office365/sharepoint/microfeed/retrievaloptions.py +1 -2
- office365/sharepoint/microfeed/userpostcollection.py +1 -2
- office365/sharepoint/microservice/manager.py +6 -0
- office365/sharepoint/microservice/pacinfo.py +0 -2
- office365/sharepoint/microservice/workitemproperties.py +0 -2
- office365/sharepoint/migrationcenter/agentgroup.py +6 -0
- office365/sharepoint/migrationcenter/agentgroupentity.py +28 -1
- office365/sharepoint/migrationcenter/batchdeletionresult.py +1 -2
- office365/sharepoint/migrationcenter/batchupdatepayload.py +1 -2
- office365/sharepoint/migrationcenter/batchupdateresult.py +1 -2
- office365/sharepoint/migrationcenter/common/results/batch_creation.py +0 -3
- office365/sharepoint/migrationcenter/common/task.py +47 -1
- office365/sharepoint/migrationcenter/common/task_definition.py +0 -2
- office365/sharepoint/migrationcenter/common/task_entity_data.py +277 -0
- office365/sharepoint/migrationcenter/common/teams/channel_resource.py +15 -0
- office365/sharepoint/migrationcenter/common/teams/team_resource.py +14 -0
- office365/sharepoint/migrationcenter/common/url_parser.py +45 -1
- office365/sharepoint/migrationcenter/credentialentitydata.py +13 -0
- office365/sharepoint/migrationcenter/deploy_status.py +3 -0
- office365/sharepoint/migrationcenter/device.py +28 -0
- office365/sharepoint/migrationcenter/deviceentitydata.py +23 -0
- office365/sharepoint/migrationcenter/folderinformation.py +0 -2
- office365/sharepoint/migrationcenter/listinformation.py +1 -2
- office365/sharepoint/migrationcenter/mmtasksettings.py +0 -2
- office365/sharepoint/migrationcenter/perfrecommendation.py +3 -0
- office365/sharepoint/migrationcenter/service/credential.py +25 -0
- office365/sharepoint/migrationcenter/service/performance/dashboard_data.py +1 -2
- office365/sharepoint/migrationcenter/service/performance/data.py +4 -0
- office365/sharepoint/migrationcenter/service/performance/entity_data.py +15 -0
- office365/sharepoint/migrationcenter/service/performance/throughput_data.py +0 -2
- office365/sharepoint/migrationcenter/service/properties.py +5 -0
- office365/sharepoint/migrationcenter/service/property.py +0 -2
- office365/sharepoint/migrationcenter/service/services.py +86 -0
- office365/sharepoint/migrationcenter/service/storage.py +17 -0
- office365/sharepoint/migrationcenter/spflight.py +3 -0
- office365/sharepoint/migrationcenter/storagesettings.py +0 -2
- office365/sharepoint/migrationcenter/taskschedulerinformation.py +0 -2
- office365/sharepoint/migrationcenter/tasksettings.py +0 -2
- office365/sharepoint/migrationcenter/taskupdateresult.py +0 -2
- office365/sharepoint/migrationcenter/urlparseresult.py +26 -0
- office365/sharepoint/mount/appviewcreationinfo.py +0 -2
- office365/sharepoint/mount/folder_info.py +41 -0
- office365/sharepoint/mount/getsourceitemmetadataforodcmountpointrequest.py +1 -2
- office365/sharepoint/mount/mountpointinfo.py +3 -0
- office365/sharepoint/mount/notifychangetomountpointsrequest.py +1 -2
- office365/sharepoint/mount/onedriveitemcollection.py +28 -1
- office365/sharepoint/mount/placesentity.py +3 -0
- office365/sharepoint/mount/placesinformation.py +27 -1
- office365/sharepoint/mount/placesuserentity.py +0 -2
- office365/sharepoint/mount/point.py +2 -0
- office365/sharepoint/mount/requests/get_remote_item_Info.py +1 -2
- office365/sharepoint/mount/service.py +2 -0
- office365/sharepoint/multigeo/service/administratorentitydata.py +0 -2
- office365/sharepoint/multigeo/service/allowed_data_location.py +7 -0
- office365/sharepoint/multigeo/service/alloweddatalocationentitydata.py +5 -0
- office365/sharepoint/multigeo/service/compatibledb.py +4 -0
- office365/sharepoint/multigeo/service/contentdbschemaversion.py +2 -0
- office365/sharepoint/multigeo/service/copyparameters.py +0 -2
- office365/sharepoint/multigeo/service/cross_geo_user_placement_job.py +7 -0
- office365/sharepoint/multigeo/service/crossfarmgroupmovejob.py +5 -0
- office365/sharepoint/multigeo/service/crossfarmsitemovejob.py +5 -0
- office365/sharepoint/multigeo/service/crossfarmsitemovejobentitydata.py +3 -0
- office365/sharepoint/multigeo/service/crossfarmusermovejob.py +5 -0
- office365/sharepoint/multigeo/service/crossfarmusermovejobentitydata.py +3 -0
- office365/sharepoint/multigeo/service/crossgeosyncuserproperty.py +0 -2
- office365/sharepoint/multigeo/service/crossgeotenantbyok.py +2 -0
- office365/sharepoint/multigeo/service/crossgeotenantcompatibility.py +7 -0
- office365/sharepoint/multigeo/service/crossgeotenantproperty.py +2 -0
- office365/sharepoint/multigeo/service/crossgeotenantpropertyentitydata.py +5 -0
- office365/sharepoint/multigeo/service/crossgeouserplacementjobentitydata.py +5 -0
- office365/sharepoint/multigeo/service/dblevelworkitem.py +2 -0
- office365/sharepoint/multigeo/service/dblevelworkitementitydata.py +8 -0
- office365/sharepoint/multigeo/service/dbschemacompatibilitycheck.py +2 -0
- office365/sharepoint/multigeo/service/df_deprecation_job.py +21 -0
- office365/sharepoint/multigeo/service/dfdeprecationjob.py +3 -0
- office365/sharepoint/multigeo/service/dfdeprecationsiteentitydata.py +4 -0
- office365/sharepoint/multigeo/service/geo_tenant_instance_information.py +7 -0
- office365/sharepoint/multigeo/service/geoadministrator.py +6 -0
- office365/sharepoint/multigeo/service/geoexperience.py +7 -0
- office365/sharepoint/multigeo/service/geolocationdata.py +5 -0
- office365/sharepoint/multigeo/service/geomovetenantcompatibilitycheck.py +5 -0
- office365/sharepoint/multigeo/service/geomovetenantpropertycompatibilitycheck.py +0 -2
- office365/sharepoint/multigeo/service/geotenantinstanceinformationentitydata.py +12 -0
- office365/sharepoint/multigeo/service/globaladmincheck.py +2 -0
- office365/sharepoint/multigeo/service/groupmovejob.py +8 -0
- office365/sharepoint/multigeo/service/groupmovejobentitydata.py +2 -0
- office365/sharepoint/multigeo/service/hasmnalicense.py +2 -0
- office365/sharepoint/multigeo/service/job_entity_data.py +24 -0
- office365/sharepoint/multigeo/service/microfeedpostdefinitionmanager.py +97 -0
- office365/sharepoint/multigeo/service/microfeedpostoptioncollection.py +2 -0
- office365/sharepoint/multigeo/service/mnagroupmovevalidationresult.py +2 -0
- office365/sharepoint/multigeo/service/move_job_entity_data.py +133 -0
- office365/sharepoint/multigeo/service/move_job_report.py +3 -0
- office365/sharepoint/multigeo/service/move_site_ro_state.py +21 -0
- office365/sharepoint/multigeo/service/movejob.py +5 -0
- office365/sharepoint/multigeo/service/movesiterostate.py +3 -0
- office365/sharepoint/multigeo/service/movesiterostateentity.py +3 -0
- office365/sharepoint/multigeo/service/multigeoservicesbeta.py +84 -13
- office365/sharepoint/multigeo/service/orgrelationgroupmanagedpath.py +2 -0
- office365/sharepoint/multigeo/service/orgrelationnotification.py +2 -0
- office365/sharepoint/multigeo/service/orgrelationverification.py +3 -0
- office365/sharepoint/multigeo/service/partner_company_id_lookup.py +3 -0
- office365/sharepoint/multigeo/service/resolveuserupnbyuserobjectid.py +2 -0
- office365/sharepoint/multigeo/service/restoreworkflowcount.py +2 -0
- office365/sharepoint/multigeo/service/sbsitemovejob.py +40 -0
- office365/sharepoint/multigeo/service/services.py +5 -2
- office365/sharepoint/multigeo/service/site_move_job_entity_data.py +90 -0
- office365/sharepoint/multigeo/service/siteattargetentitydata.py +4 -0
- office365/sharepoint/multigeo/service/sitemovejob.py +8 -0
- office365/sharepoint/multigeo/service/spmultigeoproxy.py +3 -0
- office365/sharepoint/multigeo/service/storage_quota.py +59 -0
- office365/sharepoint/multigeo/service/storagequotaentitydata.py +7 -0
- office365/sharepoint/multigeo/service/supportedgeolocationsfortenant.py +2 -0
- office365/sharepoint/multigeo/service/taxonomyreplicationparameters.py +5 -0
- office365/sharepoint/multigeo/service/tenant_information.py +48 -0
- office365/sharepoint/multigeo/service/unified_group.py +42 -0
- office365/sharepoint/multigeo/service/user_personal_site_location.py +36 -0
- office365/sharepoint/multigeo/service/usermnaodmovevalidationresult.py +2 -0
- office365/sharepoint/multigeo/service/usermovejob.py +19 -0
- office365/sharepoint/multigeo/service/usermovejobentitydata.py +4 -0
- office365/sharepoint/multigeo/service/userpersonalsiteid.py +4 -0
- office365/sharepoint/multigeo/service/xtenantmovecompatibilitycheck.py +4 -0
- office365/sharepoint/navigation/configured_metadata_item.py +0 -3
- office365/sharepoint/navigation/configured_metadata_item_col.py +1 -2
- office365/sharepoint/navigation/home_site_navigation_settings.py +10 -1
- office365/sharepoint/navigation/menu/node.py +1 -2
- office365/sharepoint/navigation/menu/state.py +1 -2
- office365/sharepoint/navigation/metadata_settings.py +2 -0
- office365/sharepoint/navigation/navigation.py +41 -2
- office365/sharepoint/navigation/nodes/collection.py +19 -4
- office365/sharepoint/navigation/nodes/creationinformation.py +2 -3
- office365/sharepoint/navigation/nodes/node.py +37 -5
- office365/sharepoint/navigation/quickaccessitemcollection.py +40 -1
- office365/sharepoint/navigation/service.py +9 -1
- office365/sharepoint/navigation/servicerest.py +13 -0
- office365/sharepoint/news/itemreference.py +0 -2
- office365/sharepoint/news/ngspdatacollection.py +26 -1
- office365/sharepoint/news/serializabletype.py +0 -2
- office365/sharepoint/ngsp_ai_settings.py +35 -0
- office365/sharepoint/oauth/accesstokenoptionalclaim.py +2 -0
- office365/sharepoint/oauth/authentication.py +2 -0
- office365/sharepoint/oauth/native_client.py +2 -0
- office365/sharepoint/oauth/token.py +2 -0
- office365/sharepoint/oauth/token_response.py +64 -0
- office365/sharepoint/onboarding/customerkeyinfo.py +1 -2
- office365/sharepoint/onboarding/customerkeystatusinfo.py +0 -3
- office365/sharepoint/onboarding/customerkeyvaultinfo.py +0 -2
- office365/sharepoint/onboarding/job_entity_data.py +17 -0
- office365/sharepoint/onboarding/onboardingservicesbeta.py +4 -0
- office365/sharepoint/onboarding/prioritysiterename/job.py +4 -0
- office365/sharepoint/onboarding/prioritysiterename/jobentitydata.py +2 -0
- office365/sharepoint/onboarding/siterename/job.py +8 -0
- office365/sharepoint/onboarding/siterename/jobentitydata.py +6 -0
- office365/sharepoint/onboarding/siterename/jobsfortenantrename.py +3 -0
- office365/sharepoint/onboarding/tenantrename/job.py +23 -0
- office365/sharepoint/onboarding/tenantrename/jobentitydata.py +26 -0
- office365/sharepoint/orgnewssite/api.py +2 -0
- office365/sharepoint/orgnewssite/info.py +0 -2
- office365/sharepoint/packaging/app_details.py +6 -0
- office365/sharepoint/packaging/appiconinfo.py +3 -0
- office365/sharepoint/pageinstrumentation/pageimpressionclient.py +0 -2
- office365/sharepoint/pages/textblock.py +0 -2
- office365/sharepoint/pages/wiki_page_creation_information.py +0 -2
- office365/sharepoint/permissions/__init__.py +91 -0
- office365/sharepoint/permissions/base_permissions.py +22 -6
- office365/sharepoint/permissions/irm/effective_settings.py +96 -0
- office365/sharepoint/permissions/irm/file_settings.py +65 -0
- office365/sharepoint/permissions/irm/settings.py +34 -0
- office365/sharepoint/permissions/roles/assignments/assignment.py +3 -1
- office365/sharepoint/permissions/roles/assignments/collection.py +3 -0
- office365/sharepoint/permissions/roles/definitions/collection.py +4 -0
- office365/sharepoint/permissions/roles/definitions/creation_information.py +1 -2
- office365/sharepoint/permissions/roles/definitions/definition.py +24 -0
- office365/sharepoint/permissions/securable_object.py +68 -3
- office365/sharepoint/photos/migration.py +2 -0
- office365/sharepoint/policy/dlp_policy_tip.py +8 -0
- office365/sharepoint/policy/evaluation_info.py +5 -0
- office365/sharepoint/policy/license_utilities.py +3 -0
- office365/sharepoint/portal/channels/info.py +0 -2
- office365/sharepoint/portal/channels/info_collection.py +1 -2
- office365/sharepoint/portal/collaborationmailboxresponse.py +0 -2
- office365/sharepoint/portal/ensureteamforgroupexresponse.py +0 -2
- office365/sharepoint/portal/groups/creation_context.py +1 -2
- office365/sharepoint/portal/groups/creation_information.py +1 -2
- office365/sharepoint/portal/groups/creation_params.py +1 -2
- office365/sharepoint/portal/groups/moveoperation.py +0 -2
- office365/sharepoint/portal/groups/service.py +4 -0
- office365/sharepoint/portal/groups/site_info.py +0 -2
- office365/sharepoint/portal/groups/site_manager.py +110 -4
- office365/sharepoint/portal/groups/siteconversioninfo.py +1 -2
- office365/sharepoint/portal/home/datacache.py +1 -2
- office365/sharepoint/portal/home/datacachecollection.py +1 -2
- office365/sharepoint/portal/home/datacachecontext.py +0 -2
- office365/sharepoint/portal/home/datacacheentry.py +1 -2
- office365/sharepoint/portal/home/page_context.py +5 -2
- office365/sharepoint/portal/home/service_context.py +54 -0
- office365/sharepoint/portal/home/service_context_builder.py +2 -0
- office365/sharepoint/portal/hub_sites_utility.py +2 -0
- office365/sharepoint/portal/linkedsites/contract.py +0 -2
- office365/sharepoint/portal/linkedsites/list_contract.py +1 -2
- office365/sharepoint/portal/linkedsites/manager.py +4 -0
- office365/sharepoint/portal/m365tabitem.py +0 -2
- office365/sharepoint/portal/mysite_recommendations.py +3 -0
- office365/sharepoint/portal/organization_news.py +40 -2
- office365/sharepoint/portal/orglabels/context.py +0 -2
- office365/sharepoint/portal/orglabels/context_list.py +1 -2
- office365/sharepoint/portal/orgnews/sitereference.py +0 -2
- office365/sharepoint/portal/parentgroup.py +0 -2
- office365/sharepoint/portal/pintoteamparams.py +1 -2
- office365/sharepoint/portal/pintoteamresponse.py +1 -2
- office365/sharepoint/portal/project/myrecscacheblob.py +1 -2
- office365/sharepoint/portal/project/myrecsqueryinfo.py +1 -2
- office365/sharepoint/portal/rating_settings.py +2 -0
- office365/sharepoint/portal/sites/creation_request.py +1 -2
- office365/sharepoint/portal/sites/creation_response.py +0 -2
- office365/sharepoint/portal/sites/icon_manager.py +3 -0
- office365/sharepoint/portal/sites/manager.py +21 -0
- office365/sharepoint/portal/teams/recent_and_joined_response.py +1 -2
- office365/sharepoint/portal/theme_manager.py +32 -0
- office365/sharepoint/portal/userprofiles/documentsshared/with_group.py +2 -0
- office365/sharepoint/portal/userprofiles/documentsshared/with_me.py +2 -0
- office365/sharepoint/portal/userprofiles/sharedwithme/document.py +328 -2
- office365/sharepoint/portal/userprofiles/sharedwithme/document_user.py +0 -2
- office365/sharepoint/portal/userprofiles/sharedwithme/item_collection.py +155 -0
- office365/sharepoint/portal/userprofiles/sharedwithme/items.py +2 -0
- office365/sharepoint/portal/userprofiles/sharedwithme/view_item_removal_result.py +0 -2
- office365/sharepoint/portal/webcontrols/recentdocument.py +15 -0
- office365/sharepoint/portal/webcontrols/resourcemanifestinformation.py +3 -0
- office365/sharepoint/principal/groups/collection.py +4 -0
- office365/sharepoint/principal/groups/creation_information.py +0 -2
- office365/sharepoint/principal/groups/group.py +32 -2
- office365/sharepoint/principal/principal.py +12 -5
- office365/sharepoint/principal/users/collection.py +4 -0
- office365/sharepoint/principal/users/id_info.py +4 -4
- office365/sharepoint/principal/users/user.py +24 -314
- office365/sharepoint/publishing/acronyminformation.py +0 -2
- office365/sharepoint/publishing/allowancecheckresult.py +4 -0
- office365/sharepoint/publishing/amplify/amplifiedchannels.py +0 -2
- office365/sharepoint/publishing/amplify/clientamplifyanywhereresults.py +2 -3
- office365/sharepoint/publishing/amplify/clientamplifyendpointinfo.py +1 -2
- office365/sharepoint/publishing/amplify/clientamplifyextraproperty.py +0 -2
- office365/sharepoint/publishing/amplify/clientamplifyresults.py +1 -2
- office365/sharepoint/publishing/amplify/history.py +1 -2
- office365/sharepoint/publishing/amplify/historyresult.py +2 -3
- office365/sharepoint/publishing/amplify/requestendpoint.py +0 -2
- office365/sharepoint/publishing/amplify/requestparams.py +1 -2
- office365/sharepoint/publishing/amplify/result.py +2 -3
- office365/sharepoint/publishing/announcements/author.py +0 -2
- office365/sharepoint/publishing/announcements/controller.py +3 -0
- office365/sharepoint/publishing/announcements/data.py +3 -4
- office365/sharepoint/publishing/approval/request.py +23 -0
- office365/sharepoint/publishing/approval/requestcreationinfo.py +1 -2
- office365/sharepoint/publishing/approval/requestresponse.py +0 -2
- office365/sharepoint/publishing/approval/requestsyncresponse.py +3 -0
- office365/sharepoint/publishing/authoringschemafeatureversion.py +0 -2
- office365/sharepoint/publishing/booleancustomproperty.py +2 -0
- office365/sharepoint/publishing/boostfieldsdata.py +0 -2
- office365/sharepoint/publishing/calltoaction.py +0 -2
- office365/sharepoint/publishing/campaign/association.py +0 -2
- office365/sharepoint/publishing/campaign/campaign.py +23 -0
- office365/sharepoint/publishing/campaign/loadmaildraftparam.py +0 -2
- office365/sharepoint/publishing/campaign/metadata.py +0 -2
- office365/sharepoint/publishing/campaign/resetendpointparam.py +1 -2
- office365/sharepoint/publishing/campaign/savemaildraftparam.py +0 -2
- office365/sharepoint/publishing/cancreatepageresponse.py +5 -0
- office365/sharepoint/publishing/channelannouncement.py +4 -5
- office365/sharepoint/publishing/content_distribution_controller.py +3 -0
- office365/sharepoint/publishing/copytoparams.py +1 -2
- office365/sharepoint/publishing/customproperties/base.py +23 -0
- office365/sharepoint/publishing/customproperties/bigint.py +11 -0
- office365/sharepoint/publishing/datetimecustomproperty.py +0 -2
- office365/sharepoint/publishing/datetimetypecustomproperty.py +2 -0
- office365/sharepoint/publishing/diagnostics/controller.py +3 -0
- office365/sharepoint/publishing/diagnostics/page_details.py +0 -2
- office365/sharepoint/publishing/diagnostics/page_diagnostics.py +0 -2
- office365/sharepoint/publishing/diagnostics/page_result.py +3 -4
- office365/sharepoint/publishing/dynamiccontentsignalspayload.py +1 -2
- office365/sharepoint/publishing/dynamicfaqsingalsdata.py +0 -2
- office365/sharepoint/publishing/emailpublishingstatus.py +1 -2
- office365/sharepoint/publishing/embed_data_v1.py +26 -0
- office365/sharepoint/publishing/embed_service.py +2 -0
- office365/sharepoint/publishing/error.py +1 -2
- office365/sharepoint/publishing/faqsignalactionpayload.py +0 -2
- office365/sharepoint/publishing/faqsignaldata.py +1 -2
- office365/sharepoint/publishing/feedvideopage.py +31 -0
- office365/sharepoint/publishing/file_picker_options.py +1 -2
- office365/sharepoint/publishing/gettyimage.py +0 -2
- office365/sharepoint/publishing/highlights_info.py +17 -0
- office365/sharepoint/publishing/icon.py +0 -2
- office365/sharepoint/publishing/itemviewsanalyticsdata.py +1 -2
- office365/sharepoint/publishing/missingsharepointdestinationwebidrepairitem.py +0 -2
- office365/sharepoint/publishing/multivaluestringcustomproperty.py +2 -0
- office365/sharepoint/publishing/navigation/structural_navigation_cache_wrapper.py +5 -0
- office365/sharepoint/publishing/numbercustomproperty.py +2 -0
- office365/sharepoint/publishing/pagecopywithassets/response.py +87 -0
- office365/sharepoint/publishing/pagedeepcopywarning.py +0 -2
- office365/sharepoint/publishing/pagemoveparams.py +0 -2
- office365/sharepoint/publishing/pages/_3d/__init__.py +0 -0
- office365/sharepoint/publishing/pages/_3d/page.py +346 -0
- office365/sharepoint/publishing/pages/boostproperties.py +0 -2
- office365/sharepoint/publishing/pages/campaign/maildraftdata.py +0 -2
- office365/sharepoint/publishing/pages/campaign/publication.py +159 -16
- office365/sharepoint/publishing/pages/canvas.py +81 -0
- office365/sharepoint/publishing/pages/coauth_state.py +1 -2
- office365/sharepoint/publishing/pages/collaborator.py +0 -2
- office365/sharepoint/publishing/pages/collection.py +46 -5
- office365/sharepoint/publishing/pages/dependency_metadata.py +1 -2
- office365/sharepoint/publishing/pages/fields.py +39 -0
- office365/sharepoint/publishing/pages/fields_data.py +2 -3
- office365/sharepoint/publishing/pages/metadata.py +156 -5
- office365/sharepoint/publishing/pages/move_response.py +69 -0
- office365/sharepoint/publishing/pages/page.py +142 -11
- office365/sharepoint/publishing/pages/reposts/collection.py +2 -0
- office365/sharepoint/publishing/pages/reposts/metadata.py +36 -0
- office365/sharepoint/publishing/pages/reposts/repost.py +32 -0
- office365/sharepoint/publishing/pages/schedulepublicationresponse.py +0 -2
- office365/sharepoint/publishing/pages/sendtestemailresponse.py +0 -2
- office365/sharepoint/publishing/pages/sendtestteamsmessageresponse.py +0 -2
- office365/sharepoint/publishing/pages/service.py +23 -2
- office365/sharepoint/publishing/pages/sharepagebyemaildata.py +1 -2
- office365/sharepoint/publishing/pages/sharepagepreviewbyemailfieldsdata.py +0 -2
- office365/sharepoint/publishing/pages/topics/topic.py +31 -2
- office365/sharepoint/publishing/pages/version_info.py +0 -2
- office365/sharepoint/publishing/pages/versioninfocollection.py +0 -2
- office365/sharepoint/publishing/person/core.py +0 -2
- office365/sharepoint/publishing/person/customproperty.py +0 -2
- office365/sharepoint/publishing/person/identity.py +0 -2
- office365/sharepoint/publishing/person/magazinedata.py +0 -2
- office365/sharepoint/publishing/person/magazineuserprofile.py +4 -5
- office365/sharepoint/publishing/person/magazineuserprofiledirectsdata.py +1 -2
- office365/sharepoint/publishing/personmagazine/taxonomicproperties.py +1 -2
- office365/sharepoint/publishing/personmagazine/userprofiledata.py +2 -3
- office365/sharepoint/publishing/persontypecustomproperty.py +2 -0
- office365/sharepoint/publishing/point/docprops.py +14 -0
- office365/sharepoint/publishing/point/magazineprops.py +10 -0
- office365/sharepoint/publishing/point/post.py +14 -0
- office365/sharepoint/publishing/point/postservicemanager.py +10 -0
- office365/sharepoint/publishing/point/site_status.py +30 -0
- office365/sharepoint/publishing/point/tenantmanager.py +2 -0
- office365/sharepoint/publishing/point/user.py +22 -0
- office365/sharepoint/publishing/portalhealth/details.py +0 -3
- office365/sharepoint/publishing/portalhealth/status.py +0 -2
- office365/sharepoint/publishing/portalhealth/statusdetails.py +0 -2
- office365/sharepoint/publishing/portallaunch/wave.py +1 -2
- office365/sharepoint/publishing/portallaunch/wavegroup.py +0 -2
- office365/sharepoint/publishing/portallaunchwavesetup.py +1 -2
- office365/sharepoint/publishing/portallaunchwavesmanager.py +4 -0
- office365/sharepoint/publishing/portalnavigationcachewrapper.py +4 -0
- office365/sharepoint/publishing/primary_city_time.py +4 -0
- office365/sharepoint/publishing/profilecoreproperties.py +0 -2
- office365/sharepoint/publishing/profiledata.py +2 -3
- office365/sharepoint/publishing/profiledatetime.py +0 -2
- office365/sharepoint/publishing/profiledirectsdata.py +1 -2
- office365/sharepoint/publishing/profilefullproperties.py +4 -5
- office365/sharepoint/publishing/profilepropertyvieweditpolicy.py +0 -2
- office365/sharepoint/publishing/profilevieweditpolicies.py +25 -26
- office365/sharepoint/publishing/propertyvalue.py +1 -2
- office365/sharepoint/publishing/publicationmetadata.py +3 -4
- office365/sharepoint/publishing/publishpublicationresponse.py +0 -2
- office365/sharepoint/publishing/publishsiteinformation.py +0 -2
- office365/sharepoint/publishing/removedstatus.py +4 -0
- office365/sharepoint/publishing/rich_sharing.py +4 -0
- office365/sharepoint/publishing/ruleerrordetails.py +2 -3
- office365/sharepoint/publishing/ruleresult.py +2 -3
- office365/sharepoint/publishing/search.py +10 -0
- office365/sharepoint/publishing/sharepointids.py +0 -2
- office365/sharepoint/publishing/sharepointpublishingstatus.py +1 -2
- office365/sharepoint/publishing/sitepageauthoringmetadata.py +0 -2
- office365/sharepoint/publishing/sitepagstreamdata.py +2 -3
- office365/sharepoint/publishing/sites/communication/creation_request.py +0 -3
- office365/sharepoint/publishing/sites/communication/creation_response.py +0 -2
- office365/sharepoint/publishing/sites/communication/site.py +6 -0
- office365/sharepoint/publishing/sitesharingemailcontext.py +0 -2
- office365/sharepoint/publishing/spotlightchannel.py +26 -1
- office365/sharepoint/publishing/spotlightvideo.py +24 -1
- office365/sharepoint/publishing/spstatusresponse.py +2 -3
- office365/sharepoint/publishing/startcoauthmetadata.py +1 -2
- office365/sharepoint/publishing/statusresponse.py +3 -6
- office365/sharepoint/publishing/stringcustomproperty.py +2 -0
- office365/sharepoint/publishing/structuralnavigationcachestate.py +0 -2
- office365/sharepoint/publishing/submitinfo.py +0 -2
- office365/sharepoint/publishing/subtitlefile.py +4 -0
- office365/sharepoint/publishing/textvaluewithlanguage.py +0 -2
- office365/sharepoint/publishing/timeframestatistics.py +0 -2
- office365/sharepoint/publishing/tooldetails.py +0 -2
- office365/sharepoint/publishing/topicpagemetadata.py +3 -0
- office365/sharepoint/publishing/user_info.py +8 -2
- office365/sharepoint/publishing/validations/errorcodesforemail.py +1 -2
- office365/sharepoint/publishing/validations/errorcodesforsharepointsite.py +1 -2
- office365/sharepoint/publishing/validations/errorcodesforteams.py +1 -2
- office365/sharepoint/publishing/validations/prepublishvalidationserrorcodesforvivaengage.py +2 -3
- office365/sharepoint/publishing/validations/response.py +1 -2
- office365/sharepoint/publishing/video/channel.py +29 -0
- office365/sharepoint/publishing/video/item.py +48 -2
- office365/sharepoint/publishing/video/service_discoverer.py +11 -0
- office365/sharepoint/publishing/video/service_manager.py +80 -2
- office365/sharepoint/publishing/video/view_data.py +0 -2
- office365/sharepoint/publishing/videopermissiongroup.py +5 -0
- office365/sharepoint/publishing/videoplaybackmetadata.py +5 -0
- office365/sharepoint/publishing/videothumbnail.py +4 -0
- office365/sharepoint/publishing/viewprogressanalyticsdata.py +0 -2
- office365/sharepoint/publishing/webpartdetailswrapper.py +0 -2
- office365/sharepoint/pushnotifications/subscriber.py +15 -0
- office365/sharepoint/quotamanagement/consumer/consumer_quota_info_api.py +3 -0
- office365/sharepoint/quotamanagement/consumer/non_quota_backfill_api.py +3 -0
- office365/sharepoint/quotamanagement/consumer/nonquotamigrationapi.py +3 -0
- office365/sharepoint/quotamanagement/consumer/quotamigrationapi.py +3 -0
- office365/sharepoint/recyclebin/item.py +38 -3
- office365/sharepoint/recyclebin/item_collection.py +8 -1
- office365/sharepoint/recyclebin/query_information.py +0 -2
- office365/sharepoint/reputationmodel/reputation.py +3 -0
- office365/sharepoint/request.py +73 -16
- office365/sharepoint/request_context.py +48 -2
- office365/sharepoint/request_user_context.py +3 -0
- office365/sharepoint/role_definition_creation_information.py +13 -0
- office365/sharepoint/search/administration/document_crawl_log.py +6 -0
- office365/sharepoint/search/administration/providers/crawl_versions_info.py +10 -0
- office365/sharepoint/search/administration/providers/recycle_bin_info.py +5 -0
- office365/sharepoint/search/administration/providers/site_content_processing_info.py +5 -0
- office365/sharepoint/search/administration/providers/site_me_ta_info.py +3 -0
- office365/sharepoint/search/analytics/action.py +1 -2
- office365/sharepoint/search/analytics/actor.py +1 -2
- office365/sharepoint/search/analytics/analyticsitem.py +1 -2
- office365/sharepoint/search/analytics/signal.py +1 -2
- office365/sharepoint/search/analytics/signal_store.py +3 -0
- office365/sharepoint/search/context_condition.py +0 -3
- office365/sharepoint/search/custom_result.py +1 -2
- office365/sharepoint/search/endpoints.py +1 -2
- office365/sharepoint/search/object_owner_result.py +0 -3
- office365/sharepoint/search/promoted_result_query_rule.py +1 -2
- office365/sharepoint/search/promoted_results_operations_result.py +1 -2
- office365/sharepoint/search/promotedresults.py +0 -2
- office365/sharepoint/search/query/auto_completion.py +1 -2
- office365/sharepoint/search/query/auto_completion_match.py +0 -3
- office365/sharepoint/search/query/auto_completion_results.py +1 -2
- office365/sharepoint/search/query/condition.py +1 -2
- office365/sharepoint/search/query/configuration.py +1 -2
- office365/sharepoint/search/query/context.py +1 -2
- office365/sharepoint/search/query/customsuggestions.py +1 -2
- office365/sharepoint/search/query/expanded_parameters.py +1 -2
- office365/sharepoint/search/query/personal_result_suggestion.py +0 -3
- office365/sharepoint/search/query/popular_tenant_query.py +0 -3
- office365/sharepoint/search/query/property.py +1 -2
- office365/sharepoint/search/query/property_value.py +0 -3
- office365/sharepoint/search/query/reordering_rule.py +0 -3
- office365/sharepoint/search/query/routing_info.py +1 -2
- office365/sharepoint/search/query/sort/collection.py +5 -0
- office365/sharepoint/search/query/sort/sort.py +0 -3
- office365/sharepoint/search/query/suggestion_results.py +1 -2
- office365/sharepoint/search/query/suggestionquery.py +0 -3
- office365/sharepoint/search/query/suggestionrange.py +0 -3
- office365/sharepoint/search/query/tenant_custom_query_suggestions.py +1 -2
- office365/sharepoint/search/query_result.py +1 -2
- office365/sharepoint/search/ranking_labeling.py +5 -0
- office365/sharepoint/search/refinement_results.py +1 -2
- office365/sharepoint/search/refiner/entry.py +0 -3
- office365/sharepoint/search/refiner/refiner.py +1 -2
- office365/sharepoint/search/relevant_results.py +12 -6
- office365/sharepoint/search/reordering_rule_collection.py +5 -0
- office365/sharepoint/search/reports/abandoned_queries.py +1 -2
- office365/sharepoint/search/reports/abandonedqueries/item.py +1 -2
- office365/sharepoint/search/reports/abandonedqueriesdata.py +0 -3
- office365/sharepoint/search/reports/base.py +0 -3
- office365/sharepoint/search/reports/noresultdata.py +0 -3
- office365/sharepoint/search/reports/noresultitem.py +1 -2
- office365/sharepoint/search/reports/noresultqueries.py +1 -2
- office365/sharepoint/search/reports/numberofqueries.py +1 -2
- office365/sharepoint/search/reports/numberofqueriesdata.py +0 -3
- office365/sharepoint/search/reports/numberofqueriesitem.py +1 -2
- office365/sharepoint/search/reports/queryrules.py +1 -2
- office365/sharepoint/search/reports/queryrulesdata.py +0 -3
- office365/sharepoint/search/reports/queryrulesitem.py +1 -2
- office365/sharepoint/search/reports/top_queries.py +1 -2
- office365/sharepoint/search/reports/topqueries/data.py +0 -3
- office365/sharepoint/search/reports/topqueries/item.py +1 -2
- office365/sharepoint/search/request.py +1 -2
- office365/sharepoint/search/result.py +11 -6
- office365/sharepoint/search/scs_endpoint.py +0 -3
- office365/sharepoint/search/searchresultitemcollection.py +90 -1
- office365/sharepoint/search/semantic/crawlerenqueueitem.py +0 -2
- office365/sharepoint/search/semantic/enqueueproxy.py +73 -1
- office365/sharepoint/search/semantic/itemcollection.py +38 -1
- office365/sharepoint/search/service.py +24 -0
- office365/sharepoint/search/setting.py +12 -0
- office365/sharepoint/search/simple_data_row.py +11 -4
- office365/sharepoint/search/simple_data_table.py +1 -2
- office365/sharepoint/search/special_term_result.py +0 -3
- office365/sharepoint/search/special_term_results.py +1 -2
- office365/sharepoint/search/xssearchpolicy.py +0 -3
- office365/sharepoint/securestore/target_application.py +19 -0
- office365/sharepoint/securestore/target_application_field.py +21 -0
- office365/sharepoint/server_settings.py +4 -0
- office365/sharepoint/sharing/abilities.py +1 -2
- office365/sharepoint/sharing/ability_status.py +0 -3
- office365/sharepoint/sharing/access_request_settings.py +0 -3
- office365/sharepoint/sharing/address_bar_link_settings.py +0 -3
- office365/sharepoint/sharing/audience.py +0 -2
- office365/sharepoint/sharing/cexternalsharingthrottling.py +0 -2
- office365/sharepoint/sharing/direct_abilities.py +1 -2
- office365/sharepoint/sharing/document_manager.py +4 -0
- office365/sharepoint/sharing/domain_restriction_settings.py +0 -3
- office365/sharepoint/sharing/emaildata.py +0 -3
- office365/sharepoint/sharing/entitypermission.py +0 -3
- office365/sharepoint/sharing/entityresult.py +1 -2
- office365/sharepoint/sharing/entityresultdescription.py +0 -3
- office365/sharepoint/sharing/entityresultsettingpolicyreason.py +0 -3
- office365/sharepoint/sharing/ephemerallinkrequest.py +1 -2
- office365/sharepoint/sharing/information.py +341 -6
- office365/sharepoint/sharing/information_request.py +0 -3
- office365/sharepoint/sharing/inherited_from.py +1 -2
- office365/sharepoint/sharing/internal/canonymouslinkuselimit.py +0 -2
- office365/sharepoint/sharing/internal/cexternalsharingenforcement.py +0 -2
- office365/sharepoint/sharing/internal/sharing_restrictions.py +19 -1
- office365/sharepoint/sharing/invitation/creation_result.py +0 -3
- office365/sharepoint/sharing/invitation/link.py +1 -2
- office365/sharepoint/sharing/itemsharingsettings.py +0 -3
- office365/sharepoint/sharing/link_abilities.py +1 -2
- office365/sharepoint/sharing/link_info.py +1 -2
- office365/sharepoint/sharing/linkexpirationabilitystatus.py +0 -3
- office365/sharepoint/sharing/linkparameters.py +0 -3
- office365/sharepoint/sharing/linkpasswordabilitystatus.py +0 -3
- office365/sharepoint/sharing/links/access_request.py +0 -3
- office365/sharepoint/sharing/links/data.py +0 -3
- office365/sharepoint/sharing/links/default_template.py +1 -2
- office365/sharepoint/sharing/links/default_templates_collection.py +1 -2
- office365/sharepoint/sharing/links/info.py +1 -2
- office365/sharepoint/sharing/links/partial_success_response.py +1 -2
- office365/sharepoint/sharing/links/share_request.py +1 -2
- office365/sharepoint/sharing/links/share_response.py +1 -2
- office365/sharepoint/sharing/links/share_settings.py +1 -2
- office365/sharepoint/sharing/linktemplate.py +0 -3
- office365/sharepoint/sharing/mainaccessinformation.py +1 -2
- office365/sharepoint/sharing/mainlinkabilities.py +1 -2
- office365/sharepoint/sharing/mainlinkaudienceabilities.py +1 -2
- office365/sharepoint/sharing/mainlinkinfo.py +1 -2
- office365/sharepoint/sharing/mainlinkroleabilities.py +1 -2
- office365/sharepoint/sharing/object_sharing_information.py +58 -0
- office365/sharepoint/sharing/object_sharing_information_user.py +84 -0
- office365/sharepoint/sharing/object_sharing_settings.py +186 -4
- office365/sharepoint/sharing/oversharedwebinfo.py +1 -2
- office365/sharepoint/sharing/permission_collection.py +1 -2
- office365/sharepoint/sharing/permission_information.py +29 -0
- office365/sharepoint/sharing/personal_web.py +2 -0
- office365/sharepoint/sharing/picker_settings.py +35 -3
- office365/sharepoint/sharing/principal.py +1 -2
- office365/sharepoint/sharing/principal_info.py +24 -0
- office365/sharepoint/sharing/recipient.py +0 -3
- office365/sharepoint/sharing/recipient_limits.py +1 -2
- office365/sharepoint/sharing/recipientlimitsinfo.py +0 -3
- office365/sharepoint/sharing/reports/site_capabilities.py +1 -2
- office365/sharepoint/sharing/restorefacet.py +0 -3
- office365/sharepoint/sharing/restoreversionfacet.py +0 -3
- office365/sharepoint/sharing/result.py +13 -0
- office365/sharepoint/sharing/sensitivitylabelinformation.py +0 -3
- office365/sharepoint/sharing/settingsabilities.py +1 -2
- office365/sharepoint/sharing/shared_document_info.py +200 -1
- office365/sharepoint/sharing/shared_with_user.py +0 -3
- office365/sharepoint/sharing/sharedwithusercollection.py +1 -2
- office365/sharepoint/sharing/sharepoint_sharing_settings.py +102 -1
- office365/sharepoint/sharing/site_sharing_report_helper.py +4 -0
- office365/sharepoint/sharing/site_sharing_report_status.py +1 -2
- office365/sharepoint/sharing/sitesharingreportjobdata.py +0 -3
- office365/sharepoint/sharing/uniqueaccessgroupinfo.py +0 -2
- office365/sharepoint/sharing/uniqueaccessgroupswrapper.py +1 -2
- office365/sharepoint/sharing/user_directory_info.py +0 -3
- office365/sharepoint/sharing/user_role_assignment.py +0 -3
- office365/sharepoint/sharing/user_sharing_result.py +1 -2
- office365/sharepoint/sharing/utility.py +3 -0
- office365/sharepoint/sharing/workitemauthcryptoprovider.py +0 -3
- office365/sharepoint/sitedesigns/actionopenurl.py +0 -2
- office365/sharepoint/sitedesigns/actionset.py +1 -2
- office365/sharepoint/sitedesigns/adaptivecardaction.py +0 -2
- office365/sharepoint/sitedesigns/autoinvokeaction.py +1 -2
- office365/sharepoint/sitedesigns/autoinvokeoptions.py +0 -2
- office365/sharepoint/sitedesigns/choice.py +0 -2
- office365/sharepoint/sitedesigns/creation_info.py +1 -2
- office365/sharepoint/sitedesigns/design_package_menu_contents.py +19 -0
- office365/sharepoint/sitedesigns/header.py +0 -2
- office365/sharepoint/sitedesigns/heroimage.py +0 -2
- office365/sharepoint/sitedesigns/image.py +0 -2
- office365/sharepoint/sitedesigns/messagecard.py +1 -2
- office365/sharepoint/sitedesigns/messagecardactionbutton.py +1 -2
- office365/sharepoint/sitedesigns/messagecardinput.py +1 -2
- office365/sharepoint/sitedesigns/potentialaction.py +1 -2
- office365/sharepoint/sitedesigns/principal.py +23 -0
- office365/sharepoint/sitedesigns/run.py +53 -0
- office365/sharepoint/sitedesigns/section.py +1 -2
- office365/sharepoint/sitedesigns/sectiondesignideasapi.py +3 -0
- office365/sharepoint/sitedesigns/sectionmodel.py +1 -2
- office365/sharepoint/sitedesigns/spsitescriptstatusandschema.py +1 -2
- office365/sharepoint/sitedesigns/task.py +0 -2
- office365/sharepoint/sitedesigns/userfirstrun.py +58 -0
- office365/sharepoint/sitedesigns/webpartmodel.py +0 -2
- office365/sharepoint/sitedesigns/zonemodel.py +1 -2
- office365/sharepoint/sites/asyncreadjobinfo.py +0 -2
- office365/sharepoint/sites/asyncreadoptions.py +0 -2
- office365/sharepoint/sites/autolabellingworkinformation.py +0 -2
- office365/sharepoint/sites/azure_container_Info.py +0 -3
- office365/sharepoint/sites/copy_job_progress.py +2 -3
- office365/sharepoint/sites/copy_migration_iInfo.py +11 -3
- office365/sharepoint/sites/enqueuejobinformation.py +0 -3
- office365/sharepoint/sites/followedsitesparams.py +0 -2
- office365/sharepoint/sites/health/result.py +0 -2
- office365/sharepoint/sites/health/summary.py +6 -1
- office365/sharepoint/sites/home/details.py +1 -2
- office365/sharepoint/sites/home/navconfiguration.py +0 -3
- office365/sharepoint/sites/home/reference.py +1 -2
- office365/sharepoint/sites/home/sharepointhomeservicemanager.py +2 -0
- office365/sharepoint/sites/home/site.py +299 -0
- office365/sharepoint/sites/home/siteconfigurationparam.py +1 -2
- office365/sharepoint/sites/home/spreference.py +0 -3
- office365/sharepoint/sites/html_field_security_setting.py +1 -2
- office365/sharepoint/sites/language.py +0 -2
- office365/sharepoint/sites/language_collection.py +22 -0
- office365/sharepoint/sites/manager/missinglink.py +1 -2
- office365/sharepoint/sites/manager/missinglinkreferrer.py +0 -2
- office365/sharepoint/sites/manager/missinglinksresult.py +1 -2
- office365/sharepoint/sites/manager/retirablepagemetadata.py +0 -2
- office365/sharepoint/sites/manager/retirablepagesqueryresult.py +1 -2
- office365/sharepoint/sites/manager/service.py +19 -0
- office365/sharepoint/sites/manager/sitemanagersignals.py +1 -2
- office365/sharepoint/sites/manager/smaretirepageminimumagefeedbacksignal.py +0 -2
- office365/sharepoint/sites/manager/smaretirepagesignal.py +1 -2
- office365/sharepoint/sites/manager/suggestionitem.py +0 -2
- office365/sharepoint/sites/manager/topsitefile.py +0 -2
- office365/sharepoint/sites/manager/topsitefilesresult.py +1 -2
- office365/sharepoint/sites/migration/copyoptions.py +1 -2
- office365/sharepoint/sites/migration/job_status.py +18 -0
- office365/sharepoint/sites/migration/jobprogress.py +1 -2
- office365/sharepoint/sites/migration/moveandsharefileinfo.py +1 -2
- office365/sharepoint/sites/ngsprequestparams.py +1 -2
- office365/sharepoint/sites/ownedbymeparams.py +0 -2
- office365/sharepoint/sites/provisionedmigrationcontainersinfo.py +0 -3
- office365/sharepoint/sites/provisionedmigrationqueueinfo.py +0 -3
- office365/sharepoint/sites/recentfilesparams.py +0 -2
- office365/sharepoint/sites/restrictaccesscontrolupdate.py +1 -2
- office365/sharepoint/sites/restrictcontentorgwidepolicyupdate.py +0 -3
- office365/sharepoint/sites/site.py +218 -11
- office365/sharepoint/sites/siteprovisioninginfoprovider.py +3 -0
- office365/sharepoint/sites/team_site_data.py +54 -0
- office365/sharepoint/sites/template.py +0 -2
- office365/sharepoint/sites/themes.py +1 -2
- office365/sharepoint/sites/upgrade_info.py +0 -2
- office365/sharepoint/sites/usage_info.py +0 -2
- office365/sharepoint/sites/version_policy_manager.py +42 -1
- office365/sharepoint/sitescripts/action_result.py +0 -2
- office365/sharepoint/sitescripts/action_status.py +0 -2
- office365/sharepoint/sitescripts/creation_info.py +0 -2
- office365/sharepoint/sitescripts/metadata.py +0 -2
- office365/sharepoint/sitescripts/scriptsafedomainentitydata.py +0 -2
- office365/sharepoint/sitescripts/serialization_info.py +0 -2
- office365/sharepoint/sitescripts/serialization_result.py +0 -3
- office365/sharepoint/sitescripts/utility.py +19 -0
- office365/sharepoint/smartcache/item.py +127 -0
- office365/sharepoint/social/actor.py +0 -2
- office365/sharepoint/social/actor_info.py +0 -2
- office365/sharepoint/social/announcement_manager.py +2 -0
- office365/sharepoint/social/attachment.py +1 -2
- office365/sharepoint/social/attachment_action.py +0 -2
- office365/sharepoint/social/data_overlay.py +1 -2
- office365/sharepoint/social/dataitem.py +0 -2
- office365/sharepoint/social/exceptiondetails.py +0 -2
- office365/sharepoint/social/feed/feed.py +1 -2
- office365/sharepoint/social/feed/manager.py +229 -1
- office365/sharepoint/social/feed/rest.py +3 -1
- office365/sharepoint/social/feedoptions.py +0 -2
- office365/sharepoint/social/following/manager.py +94 -1
- office365/sharepoint/social/following/rest_manager.py +201 -0
- office365/sharepoint/social/link.py +0 -2
- office365/sharepoint/social/microfeed/thread.py +1 -2
- office365/sharepoint/social/microfeed/thread_collection.py +1 -2
- office365/sharepoint/social/microfeed/user_posts.py +0 -2
- office365/sharepoint/social/posts/actor_info.py +1 -2
- office365/sharepoint/social/posts/creation_data.py +1 -2
- office365/sharepoint/social/posts/definition_data.py +1 -2
- office365/sharepoint/social/posts/definition_data_item.py +0 -2
- office365/sharepoint/social/posts/post.py +1 -2
- office365/sharepoint/social/posts/reference.py +1 -2
- office365/sharepoint/social/rest_actor.py +31 -0
- office365/sharepoint/social/rest_thread.py +46 -1
- office365/sharepoint/social/restpostcreationdata.py +1 -2
- office365/sharepoint/social/switch.py +2 -0
- office365/sharepoint/social/thread.py +1 -2
- office365/sharepoint/sp_playlist_subscriber.py +14 -0
- office365/sharepoint/storagemetrics/storage_metrics.py +8 -0
- office365/sharepoint/taxonomy/contenttypeinfo.py +0 -3
- office365/sharepoint/taxonomy/contenttypesyndicationresult.py +1 -2
- office365/sharepoint/taxonomy/create_xml_parameters.py +5 -8
- office365/sharepoint/taxonomy/field.py +66 -19
- office365/sharepoint/taxonomy/field_value.py +3 -4
- office365/sharepoint/taxonomy/field_value_col.py +21 -2
- office365/sharepoint/taxonomy/groups/collection.py +19 -2
- office365/sharepoint/taxonomy/groups/group.py +1 -1
- office365/sharepoint/taxonomy/metadata.py +0 -3
- office365/sharepoint/taxonomy/service.py +3 -3
- office365/sharepoint/taxonomy/sets/info.py +0 -3
- office365/sharepoint/taxonomy/sets/name.py +0 -3
- office365/sharepoint/taxonomy/stores/store.py +13 -1
- office365/sharepoint/taxonomy/terms/label.py +0 -3
- office365/sharepoint/teams/channel.py +3 -0
- office365/sharepoint/teams/channel_manager.py +290 -0
- office365/sharepoint/teams/publishingstatus.py +1 -2
- office365/sharepoint/teams/site_owner_response.py +0 -2
- office365/sharepoint/teams/statusresponse.py +1 -2
- office365/sharepoint/tenant/administration/app_service_principal_public.py +51 -0
- office365/sharepoint/tenant/administration/audit/data.py +5 -3
- office365/sharepoint/tenant/administration/audit/datacollectionresponse.py +0 -2
- office365/sharepoint/tenant/administration/audit/search_request_status.py +0 -2
- office365/sharepoint/tenant/administration/audit/unified_record.py +1 -2
- office365/sharepoint/tenant/administration/collaboration/collaborativeonedriveuser.py +0 -3
- office365/sharepoint/tenant/administration/collaboration/collaborativeuser.py +0 -3
- office365/sharepoint/tenant/administration/collaboration/insights_data.py +1 -2
- office365/sharepoint/tenant/administration/collaboration/insights_overview.py +0 -2
- office365/sharepoint/tenant/administration/columnsinfo.py +0 -3
- office365/sharepoint/tenant/administration/commentsonsitepagesdisabled.py +0 -3
- office365/sharepoint/tenant/administration/consumer_quota_info_api.py +7 -0
- office365/sharepoint/tenant/administration/container/applicationproperties.py +0 -2
- office365/sharepoint/tenant/administration/container/collection.py +1 -2
- office365/sharepoint/tenant/administration/container/filterorder.py +2 -3
- office365/sharepoint/tenant/administration/container/properties.py +2 -3
- office365/sharepoint/tenant/administration/container/searchparameters.py +0 -3
- office365/sharepoint/tenant/administration/container/sortorder.py +0 -3
- office365/sharepoint/tenant/administration/container/type/billingproperties.py +0 -2
- office365/sharepoint/tenant/administration/container/type/configurationproperties.py +2 -3
- office365/sharepoint/tenant/administration/container/type/properties.py +1 -2
- office365/sharepoint/tenant/administration/container/type/status.py +0 -2
- office365/sharepoint/tenant/administration/contentmanagementassessmentoperationresult.py +0 -3
- office365/sharepoint/tenant/administration/contentmanagementassessmentpolicyreportdetails.py +0 -3
- office365/sharepoint/tenant/administration/contentmanagementassessmentresults.py +1 -2
- office365/sharepoint/tenant/administration/copilot/adaptive_card_config.py +1 -2
- office365/sharepoint/tenant/administration/copilot/agentinsights/client.py +3 -0
- office365/sharepoint/tenant/administration/copilot/agentinsights/report_metadata.py +0 -2
- office365/sharepoint/tenant/administration/copilot/agentinsightscopilotagentsonsitesdetails.py +0 -3
- office365/sharepoint/tenant/administration/copilot/agentinsightssitedistribution.py +0 -3
- office365/sharepoint/tenant/administration/copilot/agentinsightstopsitesdetails.py +0 -3
- office365/sharepoint/tenant/administration/copilot/base_raw_data_sources.py +1 -2
- office365/sharepoint/tenant/administration/copilot/promousage.py +1 -2
- office365/sharepoint/tenant/administration/copilot/reportmetadata.py +1 -2
- office365/sharepoint/tenant/administration/copilot/reportrow.py +2 -3
- office365/sharepoint/tenant/administration/copilot/transpilerpayload.py +1 -2
- office365/sharepoint/tenant/administration/copilot/transpilerresponse.py +1 -2
- office365/sharepoint/tenant/administration/copilot/transpilerstatement.py +1 -2
- office365/sharepoint/tenant/administration/customformurl.py +0 -3
- office365/sharepoint/tenant/administration/datagovernance/insight_client.py +18 -0
- office365/sharepoint/tenant/administration/datagovernance/insight_metadata.py +0 -2
- office365/sharepoint/tenant/administration/dataset_metadata_info.py +1 -0
- office365/sharepoint/tenant/administration/dataset_metadata_request_info.py +2 -0
- office365/sharepoint/tenant/administration/dataset_metadata_response.py +10 -1
- office365/sharepoint/tenant/administration/ddiadapter.py +8 -0
- office365/sharepoint/tenant/administration/deletedsiteproperties.py +9 -0
- office365/sharepoint/tenant/administration/endpoints.py +12 -0
- office365/sharepoint/tenant/administration/errorfacet.py +0 -3
- office365/sharepoint/tenant/administration/esignaturethirdpartyprovidersinfo.py +0 -3
- office365/sharepoint/tenant/administration/eventdata.py +0 -3
- office365/sharepoint/tenant/administration/filesensitivitylabelinfo.py +5 -0
- office365/sharepoint/tenant/administration/groups/group.py +141 -0
- office365/sharepoint/tenant/administration/groups/info.py +0 -3
- office365/sharepoint/tenant/administration/groupsitesactivitydetail.py +0 -2
- office365/sharepoint/tenant/administration/hubsites/collection.py +4 -0
- office365/sharepoint/tenant/administration/hubsites/creation_information.py +0 -3
- office365/sharepoint/tenant/administration/hubsites/hub_site.py +82 -0
- office365/sharepoint/tenant/administration/hubsites/permission.py +0 -3
- office365/sharepoint/tenant/administration/hubsites/properties.py +67 -1
- office365/sharepoint/tenant/administration/ibsegmentinfo.py +0 -3
- office365/sharepoint/tenant/administration/inactivesitepolicyresourcestorage.py +1 -2
- office365/sharepoint/tenant/administration/includeataglanceinshareemails.py +0 -3
- office365/sharepoint/tenant/administration/insights/queueitem.py +0 -2
- office365/sharepoint/tenant/administration/insights/reportmetadata.py +0 -2
- office365/sharepoint/tenant/administration/insights/summary_response.py +0 -3
- office365/sharepoint/tenant/administration/internal/aad/collection.py +3 -0
- office365/sharepoint/tenant/administration/internal/aad/permission_grant.py +47 -0
- office365/sharepoint/tenant/administration/internal/appservice/permission_grant.py +9 -0
- office365/sharepoint/tenant/administration/internal/appservice/permission_request.py +26 -0
- office365/sharepoint/tenant/administration/internal/appservice/principal.py +104 -2
- office365/sharepoint/tenant/administration/jobs/spo_operation.py +6 -1
- office365/sharepoint/tenant/administration/licensed_onedrives_summary_metrics.py +13 -0
- office365/sharepoint/tenant/administration/listitemcolumnvalue.py +0 -3
- office365/sharepoint/tenant/administration/mailfromaddress.py +0 -3
- office365/sharepoint/tenant/administration/malware/file.py +44 -0
- office365/sharepoint/tenant/administration/mobilenotificationisenabledforsharepoint.py +0 -3
- office365/sharepoint/tenant/administration/modified_property.py +0 -3
- office365/sharepoint/tenant/administration/monthlyusage.py +0 -3
- office365/sharepoint/tenant/administration/newsitemanagedpath.py +0 -3
- office365/sharepoint/tenant/administration/newsubsiteinmodernoffforall.py +0 -3
- office365/sharepoint/tenant/administration/newsubsiteinmodernoffformoderntemplates.py +0 -3
- office365/sharepoint/tenant/administration/newteamsitemanagedpath.py +0 -3
- office365/sharepoint/tenant/administration/odb_license_enforcement_service.py +3 -0
- office365/sharepoint/tenant/administration/onedrives_count_and_size.py +12 -0
- office365/sharepoint/tenant/administration/onedrives_summary_metrics.py +22 -0
- office365/sharepoint/tenant/administration/onedrives_summary_metrics_by_unlicensed_reason.py +24 -0
- office365/sharepoint/tenant/administration/owner_not_in_entra_onedrives_summary_metrics.py +21 -0
- office365/sharepoint/tenant/administration/ownershippolicyresourcestorage.py +1 -2
- office365/sharepoint/tenant/administration/pageresponse.py +1 -2
- office365/sharepoint/tenant/administration/parentsiteurl.py +0 -3
- office365/sharepoint/tenant/administration/policies/app_billing_properties.py +0 -2
- office365/sharepoint/tenant/administration/policies/cdnpolicy.py +3 -0
- office365/sharepoint/tenant/administration/policies/content_security_configuration.py +64 -0
- office365/sharepoint/tenant/administration/policies/create_request.py +0 -2
- office365/sharepoint/tenant/administration/policies/definition.py +0 -2
- office365/sharepoint/tenant/administration/policies/file_version_types.py +0 -2
- office365/sharepoint/tenant/administration/policies/fileversionsettings.py +1 -2
- office365/sharepoint/tenant/administration/policies/list_parameters.py +0 -2
- office365/sharepoint/tenant/administration/policies/report.py +0 -2
- office365/sharepoint/tenant/administration/policies/resource_storage.py +1 -2
- office365/sharepoint/tenant/administration/policyoption.py +0 -3
- office365/sharepoint/tenant/administration/powerapps/environment.py +0 -3
- office365/sharepoint/tenant/administration/powerapps/environment_context.py +1 -2
- office365/sharepoint/tenant/administration/ransomware/activitiesoverview.py +0 -2
- office365/sharepoint/tenant/administration/ransomware/activity.py +0 -2
- office365/sharepoint/tenant/administration/ransomware/event.py +0 -2
- office365/sharepoint/tenant/administration/ransomware/eventsoverview.py +0 -3
- office365/sharepoint/tenant/administration/ransomware/properties.py +0 -2
- office365/sharepoint/tenant/administration/recent_action.py +0 -2
- office365/sharepoint/tenant/administration/recentactionpayload.py +0 -2
- office365/sharepoint/tenant/administration/reports/recent_admin_action.py +0 -2
- office365/sharepoint/tenant/administration/reports/recent_admin_action_payload.py +0 -2
- office365/sharepoint/tenant/administration/reports/sitepermissionsdetails.py +0 -3
- office365/sharepoint/tenant/administration/requiresecondarycontact.py +0 -3
- office365/sharepoint/tenant/administration/secondary_administrators_fields_data.py +0 -3
- office365/sharepoint/tenant/administration/secondary_administrators_info.py +0 -3
- office365/sharepoint/tenant/administration/serviceprioritizationappregistration.py +0 -3
- office365/sharepoint/tenant/administration/settings/dataproperty.py +0 -3
- office365/sharepoint/tenant/administration/settings/default_time_zone_id.py +0 -3
- office365/sharepoint/tenant/administration/settings/service.py +192 -7
- office365/sharepoint/tenant/administration/sharepointembeddedclientlogproperties.py +0 -3
- office365/sharepoint/tenant/administration/shownextgenerationsyncclientonteamsite.py +0 -3
- office365/sharepoint/tenant/administration/showselfservicesitecreation.py +0 -3
- office365/sharepoint/tenant/administration/site_user_group_info.py +1 -2
- office365/sharepoint/tenant/administration/siteadministratorsfieldsdata.py +2 -3
- office365/sharepoint/tenant/administration/sitecohortssummary.py +0 -3
- office365/sharepoint/tenant/administration/sitecreationnewux.py +0 -3
- office365/sharepoint/tenant/administration/siteinfo_for_site_picker.py +0 -3
- office365/sharepoint/tenant/administration/siteownerdata.py +0 -3
- office365/sharepoint/tenant/administration/sitepage.py +0 -2
- office365/sharepoint/tenant/administration/sitepagesenabled.py +0 -3
- office365/sharepoint/tenant/administration/sites/administrators_info.py +0 -3
- office365/sharepoint/tenant/administration/sites/collection_management_service.py +4 -0
- office365/sharepoint/tenant/administration/sites/creation_data.py +0 -3
- office365/sharepoint/tenant/administration/sites/creation_default_storage_quota.py +0 -3
- office365/sharepoint/tenant/administration/sites/creation_properties.py +0 -3
- office365/sharepoint/tenant/administration/sites/creation_source.py +1 -2
- office365/sharepoint/tenant/administration/sites/properties.py +170 -7
- office365/sharepoint/tenant/administration/sites/properties_collection.py +7 -0
- office365/sharepoint/tenant/administration/sites/properties_enumerable_filter.py +0 -3
- office365/sharepoint/tenant/administration/sites/state_properties.py +0 -3
- office365/sharepoint/tenant/administration/siteusergroupsdata.py +1 -2
- office365/sharepoint/tenant/administration/smtp_server.py +0 -3
- office365/sharepoint/tenant/administration/spcontenteventscustomemailproperty.py +2 -3
- office365/sharepoint/tenant/administration/spdatagovernanceinsightexportedreport.py +0 -3
- office365/sharepoint/tenant/administration/spdatagovernanceinsightresponse.py +10 -8
- office365/sharepoint/tenant/administration/spdatagovernancesarrestapiclient.py +4 -0
- office365/sharepoint/tenant/administration/spdatagovernancesarstartsitereviewresponse.py +1 -2
- office365/sharepoint/tenant/administration/spdatagovernancesitereviewsresponse.py +0 -2
- office365/sharepoint/tenant/administration/spdeletedcontainerproperties.py +0 -2
- office365/sharepoint/tenant/administration/spdeletedcontainertypeproperties.py +0 -2
- office365/sharepoint/tenant/administration/splistmodernuxoff.py +0 -3
- office365/sharepoint/tenant/administration/spocontainerqueryparams.py +1 -2
- office365/sharepoint/tenant/administration/spocontentsecuritypolicyentry.py +0 -2
- office365/sharepoint/tenant/administration/spofileversionexpirationreportjobprogress.py +0 -3
- office365/sharepoint/tenant/administration/spofileversionfiletypepolicysettings.py +2 -3
- office365/sharepoint/tenant/administration/spom365agentinsightsm365agentsonsitesdetails.py +4 -3
- office365/sharepoint/tenant/administration/spom365agentinsightsreportmetadata.py +0 -2
- office365/sharepoint/tenant/administration/spom365agentinsightssitedistributiondetails.py +0 -3
- office365/sharepoint/tenant/administration/sporestrictedcontentdiscoverabilitysitedetails.py +0 -2
- office365/sharepoint/tenant/administration/sposerviceprioritizationappregistrations.py +1 -2
- office365/sharepoint/tenant/administration/sposerviceprioritizationbillingpayload.py +0 -3
- office365/sharepoint/tenant/administration/sposerviceprioritizationpolicyfromtenantstore.py +0 -2
- office365/sharepoint/tenant/administration/spositecreationsource.py +0 -3
- office365/sharepoint/tenant/administration/spositepropertiesenumerablefilter.py +0 -2
- office365/sharepoint/tenant/administration/spsitepagecopyjobprogress.py +0 -2
- office365/sharepoint/tenant/administration/storage_usage_metrics_snapshot.py +8 -0
- office365/sharepoint/tenant/administration/syntex/applicationproperties.py +20 -5
- office365/sharepoint/tenant/administration/syntex/billing_context.py +0 -2
- office365/sharepoint/tenant/administration/syntex/checkmanagementallowedresponse.py +0 -3
- office365/sharepoint/tenant/administration/syntex/featurescopesettingsvalues.py +0 -3
- office365/sharepoint/tenant/administration/syntex/getmodifiedlistresponse.py +2 -3
- office365/sharepoint/tenant/administration/syntex/power_apps.py +1 -2
- office365/sharepoint/tenant/administration/syntex/premiumfeaturesettings.py +1 -2
- office365/sharepoint/tenant/administration/teamssitesactivitydetail.py +0 -2
- office365/sharepoint/tenant/administration/tenant.py +6753 -36
- office365/sharepoint/tenant/administration/tenant_data_loss_prevention_quarantine_settings.py +3 -0
- office365/sharepoint/tenant/administration/theme_properties.py +29 -0
- office365/sharepoint/tenant/administration/transpilerresponse.py +1 -2
- office365/sharepoint/tenant/administration/types.py +0 -6
- office365/sharepoint/tenant/administration/unlicensed_onedrives_summary_metrics.py +19 -0
- office365/sharepoint/tenant/administration/updategroupsitepropertiesparameters.py +0 -3
- office365/sharepoint/tenant/administration/webs/templates/collection.py +3 -1
- office365/sharepoint/tenant/administration/webs/templates/template.py +0 -3
- office365/sharepoint/tenant/apps/information.py +1 -2
- office365/sharepoint/tenant/apps/instance.py +24 -0
- office365/sharepoint/tenant/apps/user_experience_state.py +30 -0
- office365/sharepoint/tenant/cdn_api.py +4 -0
- office365/sharepoint/tenant/cdn_url.py +0 -2
- office365/sharepoint/tenant/insights/reports/manager.py +4 -0
- office365/sharepoint/tenant/insights/reports/metadata.py +14 -0
- office365/sharepoint/tenant/insights/reports/onedrive.py +2 -0
- office365/sharepoint/tenant/insights/reports/report.py +28 -0
- office365/sharepoint/tenant/insights/reports/sharepoint.py +2 -0
- office365/sharepoint/tenant/management/externalusers/external_user.py +10 -0
- office365/sharepoint/tenant/management/externalusers/results/get.py +4 -0
- office365/sharepoint/tenant/management/externalusers/results/remove.py +16 -0
- office365/sharepoint/tenant/management/externalusers/results/session_revocation.py +11 -0
- office365/sharepoint/tenant/management/importprofilepropertiesjobinfo.py +7 -0
- office365/sharepoint/tenant/management/office365_tenant.py +354 -8
- office365/sharepoint/tenant/settings.py +7 -0
- office365/sharepoint/tenantadministration/catalog_management_collection.py +9 -0
- office365/sharepoint/tenantadministration/catalog_management_custom_properties_collection.py +18 -0
- office365/sharepoint/tenantadministration/catalog_management_restricted_content_discovery_collection.py +6 -0
- office365/sharepoint/tenantadministration/container_auto_quota_enabled.py +12 -0
- office365/sharepoint/tenantadministration/sp_data_governance_insight_rest_api_client.py +493 -0
- office365/sharepoint/tenantadministration/sp_data_governance_sar_rest_api_client.py +92 -0
- office365/sharepoint/tenantadministration/spo_copilot_agent_insights_rest_api_client.py +178 -0
- office365/sharepoint/tenantadministration/spo_file_archive_policy_info.py +2 -0
- office365/sharepoint/tenantadministration/spo_file_archive_policy_report_info.py +1 -0
- office365/sharepoint/tenantadministration/spo_restricted_app_access_control_site_policy.py +19 -0
- office365/sharepoint/tenantadministration/spo_restricted_app_access_control_tenant_policy.py +16 -0
- office365/sharepoint/tenantadministration/spo_restricted_content_discoverability_client.py +96 -0
- office365/sharepoint/tenantadministration/spom365_agent_insights_rest_api_client.py +174 -0
- office365/sharepoint/tenantadministration/spom365_agent_insights_top20_agents_details.py +8 -0
- office365/sharepoint/tenantmanagement/group_creation_params.py +37 -0
- office365/sharepoint/thresholds.py +8 -4
- office365/sharepoint/token.py +7 -0
- office365/sharepoint/translation/item_info.py +0 -3
- office365/sharepoint/translation/jobs/info.py +0 -2
- office365/sharepoint/translation/jobs/job.py +9 -0
- office365/sharepoint/translation/jobs/status.py +11 -0
- office365/sharepoint/translation/notifications/recipient.py +0 -2
- office365/sharepoint/translation/notifications/recipient_col.py +1 -2
- office365/sharepoint/translation/notifications/recipient_set_request.py +1 -2
- office365/sharepoint/translation/notifications/recipient_users.py +8 -1
- office365/sharepoint/translation/requested_translation.py +1 -2
- office365/sharepoint/translation/resource_entry.py +0 -3
- office365/sharepoint/translation/status.py +1 -2
- office365/sharepoint/translation/status_collection.py +8 -2
- office365/sharepoint/translation/status_creation_request.py +1 -2
- office365/sharepoint/translation/status_set_request.py +1 -2
- office365/sharepoint/translation/sync_translator.py +5 -0
- office365/sharepoint/translation/user_resource.py +4 -0
- office365/sharepoint/translation/variations_timer_job.py +2 -0
- office365/sharepoint/types/resource_path.py +0 -2
- office365/sharepoint/ui/applicationpages/peoplepicker/entity_information.py +3 -0
- office365/sharepoint/ui/applicationpages/peoplepicker/entity_information_request.py +0 -2
- office365/sharepoint/ui/applicationpages/peoplepicker/query_parameters.py +1 -2
- office365/sharepoint/ui/applicationpages/peoplepicker/query_settings.py +0 -2
- office365/sharepoint/ui/applicationpages/peoplepicker/web_service_interface.py +6 -0
- office365/sharepoint/user_ai_tokens.py +59 -0
- office365/sharepoint/user_photos.py +36 -0
- office365/sharepoint/usercustomactions/action.py +130 -1
- office365/sharepoint/usercustomactions/collection.py +3 -0
- office365/sharepoint/userprofiles/cross_geo_sync.py +3 -0
- office365/sharepoint/userprofiles/cross_geo_sync_user_data_batch.py +1 -2
- office365/sharepoint/userprofiles/follow_result.py +1 -2
- office365/sharepoint/userprofiles/followed_content.py +181 -0
- office365/sharepoint/userprofiles/followed_item.py +0 -2
- office365/sharepoint/userprofiles/followeditemdata.py +2 -0
- office365/sharepoint/userprofiles/hash_tag.py +0 -2
- office365/sharepoint/userprofiles/hash_tag_col.py +3 -1
- office365/sharepoint/userprofiles/hashtag.py +1 -2
- office365/sharepoint/userprofiles/my_site_links.py +31 -0
- office365/sharepoint/userprofiles/mysite/dismiss_status_text.py +2 -0
- office365/sharepoint/userprofiles/people_manager.py +110 -0
- office365/sharepoint/userprofiles/peoplecollection.py +43 -1
- office365/sharepoint/userprofiles/person_properties.py +39 -4
- office365/sharepoint/userprofiles/personal_cache.py +262 -1
- office365/sharepoint/userprofiles/personal_cache_item.py +0 -2
- office365/sharepoint/userprofiles/personallistsproxy.py +35 -1
- office365/sharepoint/userprofiles/profile_image_store.py +2 -0
- office365/sharepoint/userprofiles/profile_loader.py +22 -0
- office365/sharepoint/userprofiles/promoted_sites.py +4 -0
- office365/sharepoint/userprofiles/properties_for_user.py +13 -1
- office365/sharepoint/userprofiles/user_profile.py +74 -0
- office365/sharepoint/utilities/autofillcolumninfo.py +0 -2
- office365/sharepoint/utilities/email_properties.py +0 -2
- office365/sharepoint/utilities/file_handler_wopi_properties.py +29 -0
- office365/sharepoint/utilities/jsontheme.py +0 -2
- office365/sharepoint/utilities/llmcolumninfo.py +0 -2
- office365/sharepoint/utilities/move_copy_options.py +0 -3
- office365/sharepoint/utilities/move_copy_util.py +57 -4
- office365/sharepoint/utilities/newsitem.py +0 -2
- office365/sharepoint/utilities/newsitemmetadata.py +0 -2
- office365/sharepoint/utilities/principal_info.py +1 -2
- office365/sharepoint/utilities/shortcuttargetinfo.py +5 -0
- office365/sharepoint/utilities/spotlightresult.py +3 -0
- office365/sharepoint/utilities/themingoptions.py +1 -2
- office365/sharepoint/utilities/upload_status.py +13 -0
- office365/sharepoint/utilities/utility.py +25 -7
- office365/sharepoint/utilities/webappexturlpair.py +0 -2
- office365/sharepoint/utilities/webappurlsbyaction.py +1 -2
- office365/sharepoint/utilities/wopi_host.py +3 -0
- office365/sharepoint/utilities/wopi_properties.py +7 -0
- office365/sharepoint/utilities/wopi_web_app_properties.py +1 -2
- office365/sharepoint/views/collection.py +137 -14
- office365/sharepoint/views/create_information.py +0 -2
- office365/sharepoint/views/field_collection.py +11 -0
- office365/sharepoint/views/view.py +153 -3
- office365/sharepoint/views/visualization/field.py +0 -2
- office365/sharepoint/views/visualization/style_set.py +1 -2
- office365/sharepoint/views/visualization/visualization.py +1 -2
- office365/sharepoint/viva/announcementaction.py +0 -2
- office365/sharepoint/viva/announcementstate.py +1 -2
- office365/sharepoint/viva/app_configuration.py +24 -1
- office365/sharepoint/viva/appsitecontext.py +0 -3
- office365/sharepoint/viva/configurationdata.py +1 -2
- office365/sharepoint/viva/connections/configurationanddata.py +1 -2
- office365/sharepoint/viva/connections/license.py +0 -3
- office365/sharepoint/viva/connections/page.py +3 -0
- office365/sharepoint/viva/connections/url_configuration.py +0 -2
- office365/sharepoint/viva/dashboard/carddetails.py +0 -2
- office365/sharepoint/viva/dashboard/configuration.py +1 -2
- office365/sharepoint/viva/dashboard/content.py +1 -2
- office365/sharepoint/viva/dashboard/item.py +1 -2
- office365/sharepoint/viva/dashboard/iteminfo.py +0 -2
- office365/sharepoint/viva/dashboard/personalizationdata.py +1 -2
- office365/sharepoint/viva/destinationv2.py +0 -2
- office365/sharepoint/viva/employee_engagement.py +167 -3
- office365/sharepoint/viva/employee_experience_controller.py +102 -1
- office365/sharepoint/viva/engagepublishingstatus.py +1 -2
- office365/sharepoint/viva/home.py +3 -0
- office365/sharepoint/viva/home_title_region.py +0 -2
- office365/sharepoint/viva/knowledgehub.py +40 -1
- office365/sharepoint/viva/knowledgehubsitereference.py +0 -2
- office365/sharepoint/viva/learningmanager.py +2 -0
- office365/sharepoint/viva/newssite.py +1 -2
- office365/sharepoint/viva/pivotitem.py +1 -2
- office365/sharepoint/viva/resource_get_endpoint.py +11 -0
- office365/sharepoint/viva/resource_link.py +1 -2
- office365/sharepoint/viva/resourcevisualization.py +0 -3
- office365/sharepoint/viva/site_manager.py +3 -0
- office365/sharepoint/viva/site_request_info.py +0 -2
- office365/sharepoint/viva/spotlightconfiguration.py +1 -2
- office365/sharepoint/viva/spotlightnews.py +0 -2
- office365/sharepoint/viva/syntexcontext.py +4 -0
- office365/sharepoint/viva/syntexcustommodeldeploymentmodelinfo.py +0 -3
- office365/sharepoint/viva/syntexcustommodeldeploymentproperties.py +1 -2
- office365/sharepoint/viva/syntexcustommodelsetting.py +1 -2
- office365/sharepoint/viva/targetedsitedetails.py +1 -2
- office365/sharepoint/viva/vcconfiguration.py +1 -2
- office365/sharepoint/viva/visualizationappinfo.py +0 -2
- office365/sharepoint/viva/visualizationappsynchronizationresult.py +22 -1
- office365/sharepoint/viva/vivaresources.py +6 -0
- office365/sharepoint/webhooks/subscription.py +12 -1
- office365/sharepoint/webhooks/subscription_collection.py +3 -0
- office365/sharepoint/webhooks/subscription_information.py +5 -5
- office365/sharepoint/webparts/client/webpart.py +20 -0
- office365/sharepoint/webparts/definitions/definition.py +9 -1
- office365/sharepoint/webparts/limited_manager.py +8 -1
- office365/sharepoint/webparts/tile_data.py +0 -2
- office365/sharepoint/webparts/webpart.py +20 -0
- office365/sharepoint/webs/apptile.py +34 -0
- office365/sharepoint/webs/collection.py +3 -2
- office365/sharepoint/webs/context_web_information.py +1 -2
- office365/sharepoint/webs/creation_information.py +0 -2
- office365/sharepoint/webs/dataleakage_prevention_status_info.py +29 -0
- office365/sharepoint/webs/info_creation_information.py +0 -2
- office365/sharepoint/webs/information.py +19 -0
- office365/sharepoint/webs/modernize_homepage_result.py +10 -0
- office365/sharepoint/webs/multilingual_settings.py +25 -1
- office365/sharepoint/webs/outofboxsitetemplatesettings.py +0 -2
- office365/sharepoint/webs/regional_settings.py +58 -3
- office365/sharepoint/webs/remote_web.py +27 -0
- office365/sharepoint/webs/spimageitem.py +0 -2
- office365/sharepoint/webs/subweb_query.py +0 -3
- office365/sharepoint/webs/teamappinfo.py +1 -2
- office365/sharepoint/webs/templates/template.py +18 -0
- office365/sharepoint/webs/theme_info.py +20 -0
- office365/sharepoint/webs/time_zone.py +23 -0
- office365/sharepoint/webs/time_zone_information.py +0 -2
- office365/sharepoint/webs/web.py +1463 -49
- office365/sharepoint/workflow/associations/association.py +25 -0
- office365/sharepoint/workflow/associations/creationinformation.py +0 -2
- office365/sharepoint/workflow/configurationresponse.py +1 -2
- office365/sharepoint/workflow/configureduserinfo.py +0 -3
- office365/sharepoint/workflow/definition.py +14 -0
- office365/sharepoint/workflow/deployment_service.py +13 -0
- office365/sharepoint/workflow/deviationanalysisrule.py +1 -2
- office365/sharepoint/workflow/exceptiondetails.py +0 -3
- office365/sharepoint/workflow/instances/instance.py +49 -0
- office365/sharepoint/workflow/instances/service.py +5 -0
- office365/sharepoint/workflow/interopservice.py +7 -0
- office365/sharepoint/workflow/labelaccesscontroldata.py +1 -2
- office365/sharepoint/workflow/messagingservice.py +2 -0
- office365/sharepoint/workflow/servicesmanager.py +10 -0
- office365/sharepoint/workflow/sp_workflow_task.py +650 -0
- office365/sharepoint/workflow/subscriptions/service.py +8 -0
- office365/sharepoint/workflow/subscriptions/subscription.py +14 -0
- office365/sharepoint/workflow/template.py +18 -0
- office365/sharepoint/yammer/wactoken.py +0 -2
- office365/subscriptions/change_notification.py +18 -2
- office365/subscriptions/change_notification_collection.py +5 -2
- office365/subscriptions/change_notification_encrypted_content.py +0 -3
- office365/subscriptions/changetype.py +4 -0
- office365/subscriptions/collection.py +18 -6
- office365/subscriptions/encrypted_content.py +0 -3
- office365/subscriptions/quotas.py +129 -0
- office365/subscriptions/subscription.py +81 -1
- office365/teams/admin_root.py +39 -0
- office365/teams/administration/assigned_telephone_number.py +2 -3
- office365/teams/administration/effective_policy_assignment.py +2 -3
- office365/teams/administration/number_assignment.py +69 -0
- office365/teams/administration/policy_user_assignment.py +4 -0
- office365/teams/administration/telephone_number_long_running_operation.py +21 -2
- office365/teams/administration/telephone_number_management_root.py +23 -1
- office365/teams/administration/user_configuration.py +23 -2
- office365/teams/app_settings.py +24 -0
- office365/teams/apps/app.py +15 -1
- office365/teams/apps/authorization.py +1 -2
- office365/teams/apps/catalog.py +1 -1
- office365/teams/apps/definition.py +40 -0
- office365/teams/apps/installation.py +15 -2
- office365/teams/apps/installed_event_message_detail.py +1 -2
- office365/teams/apps/permission_set.py +1 -2
- office365/teams/apps/removed_event_message_detail.py +1 -2
- office365/teams/apps/upgraded_event_message_detail.py +1 -2
- office365/teams/apps/user_scope_installation.py +2 -0
- office365/teams/archived_event_message_detail.py +1 -2
- office365/teams/assignment_type.py +13 -0
- office365/teams/channels/added_event_message_detail.py +1 -2
- office365/teams/channels/channel.py +94 -3
- office365/teams/channels/collection.py +72 -2
- office365/teams/channels/deleted_event_message_detail.py +1 -2
- office365/teams/channels/description_updated_event_message_detail.py +1 -2
- office365/teams/channels/iIdentity.py +0 -3
- office365/teams/channels/layout_type.py +13 -0
- office365/teams/channels/members_notification_recipient.py +0 -3
- office365/teams/channels/provision_email_result.py +0 -3
- office365/teams/channels/renamed_event_message_detail.py +1 -2
- office365/teams/channels/set_as_favorite_by_default_event_message_detail.py +1 -2
- office365/teams/channels/shared_team_info.py +9 -0
- office365/teams/channels/summary.py +0 -3
- office365/teams/channels/unset_as_favorite_by_default_event_message_detail.py +1 -2
- office365/teams/chats/chat.py +59 -4
- office365/teams/chats/collection.py +20 -3
- office365/teams/chats/deleted.py +6 -0
- office365/teams/chats/messages/attachment.py +0 -3
- office365/teams/chats/messages/body.py +2 -4
- office365/teams/chats/messages/collection.py +6 -0
- office365/teams/chats/messages/from_identity_set.py +0 -3
- office365/teams/chats/messages/history_item.py +1 -2
- office365/teams/chats/messages/hosted_content.py +8 -0
- office365/teams/chats/messages/info.py +37 -0
- office365/teams/chats/messages/mention.py +1 -2
- office365/teams/chats/messages/mentioned_identity_set.py +1 -2
- office365/teams/chats/messages/message.py +49 -0
- office365/teams/chats/messages/policy_violation.py +1 -2
- office365/teams/chats/messages/policy_violation_policy_tip.py +1 -2
- office365/teams/chats/messages/reaction.py +1 -2
- office365/teams/chats/messages/reaction_identity_set.py +0 -3
- office365/teams/chats/pinned_chat_message_info.py +24 -0
- office365/teams/chats/targeted_chat_message.py +17 -0
- office365/teams/class_settings.py +0 -3
- office365/teams/collection.py +100 -19
- office365/teams/community_privacy.py +13 -0
- office365/teams/created_event_message_detail.py +1 -2
- office365/teams/deleted.py +2 -0
- office365/teams/description_updated_event_message_detail.py +1 -2
- office365/teams/fun_settings.py +0 -3
- office365/teams/guest_settings.py +0 -3
- office365/teams/info.py +15 -0
- office365/teams/joining_disabled_event_message_detail.py +1 -2
- office365/teams/joining_enabled_event_message_detail.py +1 -2
- office365/teams/licensing_details.py +0 -3
- office365/teams/members/aad_user_conversation.py +23 -2
- office365/teams/members/conversation.py +21 -0
- office365/teams/members/conversation_collection.py +25 -7
- office365/teams/members/members_added_event_message_detail.py +1 -2
- office365/teams/members/members_deleted_event_message_detail.py +1 -2
- office365/teams/members/members_joined_event_message_detail.py +1 -2
- office365/teams/members/members_left_event_message_detail.py +1 -2
- office365/teams/members/open_complex_dictionary_type.py +0 -3
- office365/teams/members/settings.py +0 -3
- office365/teams/members_notification_recipient.py +0 -3
- office365/teams/messaging_settings.py +0 -3
- office365/teams/migration_mode.py +13 -0
- office365/teams/operations/async_operation.py +119 -49
- office365/teams/operations/asyncoperationtype.py +10 -15
- office365/teams/policy_assignment.py +25 -0
- office365/teams/policy_identifier_detail.py +3 -0
- office365/teams/quotas.py +110 -0
- office365/teams/renamed_event_message_detail.py +1 -2
- office365/teams/schedule/change_request.py +58 -0
- office365/teams/schedule/change_tracked_entity.py +7 -0
- office365/teams/schedule/day_note.py +32 -0
- office365/teams/schedule/entity.py +1 -2
- office365/teams/schedule/groups/group.py +21 -0
- office365/teams/schedule/open_shift.py +37 -0
- office365/teams/schedule/schedule.py +181 -3
- office365/teams/schedule/shifts/availability.py +1 -2
- office365/teams/schedule/shifts/item.py +1 -2
- office365/teams/schedule/shifts/offer/request.py +5 -2
- office365/teams/schedule/shifts/open/change_request.py +15 -0
- office365/teams/schedule/shifts/preferences.py +2 -0
- office365/teams/schedule/shifts/shift.py +26 -0
- office365/teams/schedule/swap_shifts_change_request.py +18 -0
- office365/teams/schedule/time_card.py +67 -0
- office365/teams/schedule/time_card_break.py +1 -2
- office365/teams/schedule/time_card_entry.py +1 -2
- office365/teams/schedule/time_card_event.py +1 -2
- office365/teams/schedule/time_clock_settings.py +1 -2
- office365/teams/schedule/time_off.py +37 -0
- office365/teams/schedule/time_off_details.py +0 -3
- office365/teams/schedule/time_off_item.py +0 -3
- office365/teams/schedule/time_off_reason.py +34 -0
- office365/teams/schedule/time_off_request.py +31 -0
- office365/teams/summary.py +0 -3
- office365/teams/tabs/configuration.py +0 -3
- office365/teams/tabs/tab.py +22 -1
- office365/teams/tabs/updated_event_message_detail.py +1 -2
- office365/teams/team.py +68 -17
- office365/teams/teamwork/activity_topic.py +0 -3
- office365/teams/teamwork/application_identity.py +0 -3
- office365/teams/teamwork/conversation_identity.py +0 -3
- office365/teams/teamwork/meeting_note.py +1 -2
- office365/teams/teamwork/meeting_note_subpoint.py +0 -3
- office365/teams/teamwork/meeting_policy_updated_event_message_detail.py +1 -2
- office365/teams/teamwork/online_meeting_info.py +1 -2
- office365/teams/teamwork/shiftmanagement/user_solution_root.py +24 -0
- office365/teams/teamwork/shiftmanagement/working_time_schedule.py +9 -0
- office365/teams/teamwork/tags/member.py +20 -0
- office365/teams/teamwork/tags/tag.py +2 -0
- office365/teams/teamwork/user.py +10 -2
- office365/teams/telephone_number_long_running_operation_details.py +16 -0
- office365/teams/unarchived_event_message_detail.py +1 -2
- office365/teams/viva/community.py +47 -1
- office365/teams/viva/employee_experience.py +39 -2
- office365/teams/viva/employee_experience_user.py +22 -0
- office365/teams/viva/engagement/conversation.py +38 -1
- office365/teams/viva/engagement/conversation_message.py +115 -0
- office365/teams/viva/engagement/conversation_message_reaction.py +33 -0
- office365/teams/viva/learning/content.py +127 -0
- office365/teams/viva/learning/courses/activity.py +53 -0
- office365/teams/viva/learning/courses/self_initiated.py +16 -0
- office365/teams/viva/learning/provider.py +69 -1
- office365/teams/work.py +50 -1
- office365/teams/workforce_integration.py +57 -0
- office365/teams/workforce_integration_encryption.py +15 -0
- office365/todo/attachments/base.py +16 -0
- office365/todo/attachments/collection.py +1 -1
- office365/todo/attachments/info.py +0 -2
- office365/todo/attachments/session.py +19 -5
- office365/todo/attachments/task_file.py +2 -5
- office365/todo/attachments/type.py +7 -10
- office365/todo/checklist_item.py +1 -0
- office365/todo/linked_resource.py +11 -0
- office365/todo/tasks/collection.py +54 -0
- office365/todo/tasks/lists/collection.py +6 -0
- office365/todo/tasks/lists/list.py +27 -2
- office365/todo/tasks/task.py +32 -10
- office365/todo/todo.py +2 -0
- office365_rest_python_client-3.3.1.dist-info/METADATA +635 -0
- office365_rest_python_client-3.3.1.dist-info/RECORD +6959 -0
- office365/directory/identitygovernance/workflow.py +0 -106
- office365/directory/identitygovernance/workflow_setting.py +0 -15
- office365/directory/identitygovernance/workflow_subject.py +0 -10
- office365/directory/identitygovernance/workflow_version.py +0 -16
- office365/directory/permissions/require_permission.py +0 -75
- office365/directory/permissions/resource_name.py +0 -33
- office365/directory/security/a365_ai_inference_call.py +0 -10
- office365/directory/security/a365_ai_invoke_agent.py +0 -10
- office365/directory/security/a365_ai_run_summary.py +0 -10
- office365/directory/security/a365_span_outputs.py +0 -10
- office365/directory/security/account.py +0 -14
- office365/directory/security/aed_audit_record.py +0 -10
- office365/directory/security/agent_admin_activity_record.py +0 -10
- office365/directory/security/agent_setting_admin_activity.py +0 -10
- office365/directory/security/ai_agent_evidence.py +0 -16
- office365/directory/security/aip_discover.py +0 -10
- office365/directory/security/aip_file_deleted.py +0 -10
- office365/directory/security/aip_heart_beat.py +0 -10
- office365/directory/security/aip_protection_action_log_request.py +0 -10
- office365/directory/security/aip_scanner_discover_event.py +0 -10
- office365/directory/security/aip_sensitivity_label_action_log_request.py +0 -10
- office365/directory/security/air_admin_action_investigation_data.py +0 -10
- office365/directory/security/air_investigation_data.py +0 -10
- office365/directory/security/alerts/active_directory_domain_evidence.py +0 -18
- office365/directory/security/alerts/alert.py +0 -205
- office365/directory/security/alerts/azure_resource_evidence.py +0 -16
- office365/directory/security/alerts/blob_container_evidence.py +0 -17
- office365/directory/security/alerts/blob_evidence.py +0 -21
- office365/directory/security/alerts/collection.py +0 -49
- office365/directory/security/alerts/comment.py +0 -19
- office365/directory/security/alerts/evidence.py +0 -28
- office365/directory/security/alerts/file_security_state.py +0 -5
- office365/directory/security/alerts/history_state.py +0 -16
- office365/directory/security/alerts/malware_evidence.py +0 -22
- office365/directory/security/alerts/process_evidence.py +0 -27
- office365/directory/security/alerts/sas_token_evidence.py +0 -26
- office365/directory/security/amazon_resource_evidence.py +0 -17
- office365/directory/security/analyzed_message_evidence.py +0 -34
- office365/directory/security/article.py +0 -56
- office365/directory/security/attacksimulations/automation.py +0 -30
- office365/directory/security/attacksimulations/automation_run.py +0 -12
- office365/directory/security/attacksimulations/event.py +0 -5
- office365/directory/security/attacksimulations/landing_page.py +0 -5
- office365/directory/security/attacksimulations/operations/operation.py +0 -5
- office365/directory/security/attacksimulations/repeat_offender.py +0 -17
- office365/directory/security/attacksimulations/reports/overview.py +0 -5
- office365/directory/security/attacksimulations/reports/report.py +0 -25
- office365/directory/security/attacksimulations/root.py +0 -67
- office365/directory/security/attacksimulations/simulation.py +0 -23
- office365/directory/security/attacksimulations/user.py +0 -16
- office365/directory/security/attacksimulations/user_coverage.py +0 -10
- office365/directory/security/attacksimulations/users/details.py +0 -20
- office365/directory/security/attribute_definition.py +0 -37
- office365/directory/security/attribute_definition_metadata_entry.py +0 -16
- office365/directory/security/attribute_mapping.py +0 -23
- office365/directory/security/attribute_mapping_parameter_schema.py +0 -18
- office365/directory/security/attribute_mapping_source.py +0 -24
- office365/directory/security/audit/a365_ai_execute_tool.py +0 -10
- office365/directory/security/audit/aad_risk_detection_audit_record.py +0 -10
- office365/directory/security/audit/ai_app_interaction_audit_record.py +0 -10
- office365/directory/security/audit/ai_execute_tool_audit_record.py +0 -10
- office365/directory/security/audit/ai_interactions_change_notification_audit_record.py +0 -10
- office365/directory/security/audit/ai_interactions_export_audit_record.py +0 -10
- office365/directory/security/audit/ai_interactions_subscription_audit_record.py +0 -10
- office365/directory/security/audit/ai_invoke_agent_audit_record.py +0 -10
- office365/directory/security/audit/ai_span_outputs_audit_record.py +0 -10
- office365/directory/security/audit/air_manual_investigation_data.py +0 -10
- office365/directory/security/audit/alert_submission_audit_record.py +0 -10
- office365/directory/security/audit/alert_submission_result_detail_audit_record.py +0 -10
- office365/directory/security/audit/attack_sim_admin_audit_record.py +0 -10
- office365/directory/security/audit/attack_sim_audit_record.py +0 -10
- office365/directory/security/audit/audit_config_audit_record.py +0 -10
- office365/directory/security/audit/audit_data.py +0 -15
- office365/directory/security/audit/audit_record_type_dictionary.py +0 -10
- office365/directory/security/audit/audit_search_audit_record.py +0 -10
- office365/directory/security/audit/azfw_application_rule_aggregation_event_record.py +0 -10
- office365/directory/security/audit/azfw_dns_query_event_record.py +0 -10
- office365/directory/security/audit/azfw_network_rule_event_record.py +0 -10
- office365/directory/security/audit/azure_active_directory_account_logon_audit_record.py +0 -10
- office365/directory/security/audit/azure_active_directory_audit_record.py +0 -10
- office365/directory/security/audit/azure_active_directory_sts_logon_audit_record.py +0 -10
- office365/directory/security/audit/azure_ai_search_audit_record.py +0 -10
- office365/directory/security/audit/campaign_audit_record.py +0 -10
- office365/directory/security/audit/ccrai_policy_violation_record.py +0 -10
- office365/directory/security/audit/cdp_classifier_health_record.py +0 -10
- office365/directory/security/audit/cdp_cold_crawl_status_record.py +0 -10
- office365/directory/security/audit/cdp_consumption_resource_record.py +0 -10
- office365/directory/security/audit/cdp_content_explorer_aggregate_record.py +0 -10
- office365/directory/security/audit/cdp_dlp_sensitive_endpoint_audit_record.py +0 -10
- office365/directory/security/audit/cdp_log_record.py +0 -10
- office365/directory/security/audit/cdp_ocr_billing_record.py +0 -10
- office365/directory/security/audit/cdp_resource_scope_change_event_record.py +0 -10
- office365/directory/security/audit/cdpdlmai_interaction_insights_record.py +0 -10
- office365/directory/security/audit/cloud_update_device_config_audit_record.py +0 -10
- office365/directory/security/audit/cloud_update_profile_config_audit_record.py +0 -10
- office365/directory/security/audit/cloud_update_tenant_config_audit_record.py +0 -10
- office365/directory/security/audit/compliance_connector_audit_record.py +0 -10
- office365/directory/security/audit/compliance_dlm_exchange_audit_record.py +0 -10
- office365/directory/security/audit/compliance_dlm_share_point_audit_record.py +0 -10
- office365/directory/security/audit/compliance_dlp_applications_audit_record.py +0 -10
- office365/directory/security/audit/compliance_dlp_applications_classification_audit_record.py +0 -10
- office365/directory/security/audit/compliance_dlp_endpoint_audit_record.py +0 -10
- office365/directory/security/audit/compliance_dlp_endpoint_discovery_audit_record.py +0 -10
- office365/directory/security/audit/compliance_dlp_enforcement_audit_record.py +0 -10
- office365/directory/security/audit/compliance_dlp_exchange_audit_record.py +0 -10
- office365/directory/security/audit/compliance_dlp_exchange_classification_audit_record.py +0 -10
- office365/directory/security/audit/compliance_dlp_exchange_classification_cdp_record.py +0 -10
- office365/directory/security/audit/compliance_dlp_exchange_discovery_audit_record.py +0 -10
- office365/directory/security/audit/compliance_dlp_share_point_audit_record.py +0 -10
- office365/directory/security/audit/compliance_dlp_share_point_classification_audit_record.py +0 -10
- office365/directory/security/audit/compliance_dlp_share_point_classification_cdp_record.py +0 -10
- office365/directory/security/audit/compliance_dlp_share_point_classification_extended_audit_record.py +0 -10
- office365/directory/security/audit/compliance_exchange_ocr_audit_record.py +0 -10
- office365/directory/security/audit/compliance_manager_action_record.py +0 -10
- office365/directory/security/audit/compliance_policy_grading_share_point_audit_record.py +0 -10
- office365/directory/security/audit/compliance_settings_change_audit_record.py +0 -10
- office365/directory/security/audit/compliance_sit_grading_share_point_audit_record.py +0 -10
- office365/directory/security/audit/compliance_supervision_exchange_audit_record.py +0 -10
- office365/directory/security/audit/connected_ai_app_interaction_audit_record.py +0 -10
- office365/directory/security/audit/consumption_resource_audit_record.py +0 -10
- office365/directory/security/audit/content_store_metadata_record.py +0 -10
- office365/directory/security/audit/copilot_agent_management_audit_record.py +0 -10
- office365/directory/security/audit/copilot_for_security_logging_audit_record.py +0 -10
- office365/directory/security/audit/copilot_for_security_trigger_audit_record.py +0 -10
- office365/directory/security/audit/copilot_interaction_audit_record.py +0 -10
- office365/directory/security/audit/copilot_plugin_setting_audit_record.py +0 -10
- office365/directory/security/audit/copilot_prompt_book_setting_audit_record.py +0 -10
- office365/directory/security/audit/copilot_session_sharing_audit_record.py +0 -10
- office365/directory/security/audit/copilot_setting_audit_record.py +0 -10
- office365/directory/security/audit/copilot_workspace_setting_audit_record.py +0 -10
- office365/directory/security/audit/core_reporting_settings_audit_record.py +0 -10
- office365/directory/security/audit/critical_asset_management_classification_record.py +0 -10
- office365/directory/security/audit/crm_entity_operation_audit_record.py +0 -10
- office365/directory/security/audit/cross_tenant_access_policy_audit_record.py +0 -10
- office365/directory/security/audit/device_discovery_settings_authenticated_scans_record.py +0 -10
- office365/directory/security/audit/device_discovery_settings_exclusion_record.py +0 -10
- office365/directory/security/audit/device_discovery_settings_record.py +0 -10
- office365/directory/security/audit/discovery_audit_record.py +0 -10
- office365/directory/security/audit/dlp_endpoint_audit_record.py +0 -10
- office365/directory/security/audit/dlp_import_result_audit_record.py +0 -10
- office365/directory/security/audit/dragon_copilot_access_record.py +0 -10
- office365/directory/security/audit/dragon_copilot_admin_record.py +0 -10
- office365/directory/security/audit/dragon_copilot_clinical_data_record.py +0 -10
- office365/directory/security/audit/dragon_copilot_session_record.py +0 -10
- office365/directory/security/audit/dynamics365_business_central_audit_record.py +0 -10
- office365/directory/security/audit/ehr_connector_audit_base_record.py +0 -10
- office365/directory/security/audit/eop_submission_feed_entity_audit_record.py +0 -10
- office365/directory/security/audit/exchange_admin_audit_record.py +0 -10
- office365/directory/security/audit/exchange_aggregated_mailbox_audit_record.py +0 -10
- office365/directory/security/audit/exchange_aggregated_operation_record.py +0 -10
- office365/directory/security/audit/exchange_mailbox_audit_group_record.py +0 -10
- office365/directory/security/audit/exchange_mailbox_audit_record.py +0 -10
- office365/directory/security/audit/hosted_rpa_audit_record.py +0 -10
- office365/directory/security/audit/hr_signal_audit_record.py +0 -10
- office365/directory/security/audit/hygiene_event_record.py +0 -10
- office365/directory/security/audit/information_barrier_policy_application_audit_record.py +0 -10
- office365/directory/security/audit/information_worker_protection_audit_record.py +0 -10
- office365/directory/security/audit/insider_risk_scoped_user_insights_record.py +0 -10
- office365/directory/security/audit/insider_risk_scoped_users_record.py +0 -10
- office365/directory/security/audit/microsoft_stream_audit_record.py +0 -10
- office365/directory/security/audit/microsoft_teams_admin_audit_record.py +0 -10
- office365/directory/security/audit/microsoft_teams_analytics_audit_record.py +0 -10
- office365/directory/security/audit/microsoft_teams_audit_record.py +0 -10
- office365/directory/security/audit/microsoft_teams_device_audit_record.py +0 -10
- office365/directory/security/audit/microsoft_teams_retention_label_action_audit_record.py +0 -10
- office365/directory/security/audit/microsoft_teams_sensitivity_label_action_audit_record.py +0 -10
- office365/directory/security/audit/microsoft_teams_shifts_audit_record.py +0 -10
- office365/directory/security/audit/microsoft_teams_user_concern_audit_record.py +0 -10
- office365/directory/security/audit/multi_tenant_organization_join_request_transition_details.py +0 -20
- office365/directory/security/audit/multi_tenant_organization_member_transition_details.py +0 -22
- office365/directory/security/audit/whois_record.py +0 -22
- office365/directory/security/auto_auditing_configuration.py +0 -16
- office365/directory/security/autonomous_system.py +0 -17
- office365/directory/security/cases/case.py +0 -48
- office365/directory/security/cases/ediscovery.py +0 -99
- office365/directory/security/cases/operation.py +0 -10
- office365/directory/security/cases/root.py +0 -21
- office365/directory/security/category_template.py +0 -9
- office365/directory/security/citation_template.py +0 -21
- office365/directory/security/cloud_application_evidence.py +0 -20
- office365/directory/security/cloud_logon_request_evidence.py +0 -14
- office365/directory/security/cloud_logon_session_evidence.py +0 -24
- office365/directory/security/collaboration/analyzed_email.py +0 -133
- office365/directory/security/collaboration/analyzed_email_attachment.py +0 -22
- office365/directory/security/collaboration/analyzed_email_authentication_detail.py +0 -17
- office365/directory/security/collaboration/analyzed_email_delivery_detail.py +0 -15
- office365/directory/security/collaboration/analyzed_email_dlp_rule_info.py +0 -15
- office365/directory/security/collaboration/analyzed_email_exchange_transport_rule_info.py +0 -15
- office365/directory/security/collaboration/analyzed_email_recipient_detail.py +0 -16
- office365/directory/security/collaboration/analyzed_email_sender_detail.py +0 -23
- office365/directory/security/collaboration/analyzed_email_url.py +0 -18
- office365/directory/security/collaboration/collaboration_root.py +0 -22
- office365/directory/security/compromise_indicator.py +0 -14
- office365/directory/security/container_evidence.py +0 -23
- office365/directory/security/container_filter.py +0 -15
- office365/directory/security/container_image_evidence.py +0 -17
- office365/directory/security/container_registry_evidence.py +0 -14
- office365/directory/security/cortana_briefing_audit_record.py +0 -10
- office365/directory/security/customer_key_service_encryption_audit_record.py +0 -10
- office365/directory/security/cvss_summary.py +0 -15
- office365/directory/security/data_center_security_cmdlet_audit_record.py +0 -10
- office365/directory/security/data_governance_audit_record.py +0 -10
- office365/directory/security/data_insights_rest_api_audit_record.py +0 -10
- office365/directory/security/data_lake_export_operation_audit_record.py +0 -10
- office365/directory/security/data_security_investigation_audit_record.py +0 -10
- office365/directory/security/data_set.py +0 -33
- office365/directory/security/data_share_operation_audit_record.py +0 -10
- office365/directory/security/data_source_container.py +0 -44
- office365/directory/security/datasecurity/classifcation_error_base.py +0 -18
- office365/directory/security/datasecurity/classification_error.py +0 -12
- office365/directory/security/datasecurity/classification_inner_error.py +0 -18
- office365/directory/security/datasecurity/compute_rights_and_inheritance_result.py +0 -17
- office365/directory/security/datasecurity/custom_metadata_dictionary.py +0 -10
- office365/directory/security/datasecurity/dlp_action_info.py +0 -15
- office365/directory/security/datasecurity/governance.py +0 -17
- office365/directory/security/datasecurity/integrated_application_metadata.py +0 -15
- office365/directory/security/datasecurity/policy_binding.py +0 -17
- office365/directory/security/datasecurity/policy_location.py +0 -14
- office365/directory/security/datasecurity/policy_location_application.py +0 -10
- office365/directory/security/datasecurity/policy_location_domain.py +0 -10
- office365/directory/security/datasecurity/policy_location_url.py +0 -10
- office365/directory/security/datasecurity/policy_scope_base.py +0 -26
- office365/directory/security/datasecurity/policy_tenant_scope.py +0 -15
- office365/directory/security/datasecurity/policy_tip_action.py +0 -16
- office365/directory/security/datasecurity/policy_user_scope.py +0 -10
- office365/directory/security/datasecurity/process_content_batch_request.py +0 -17
- office365/directory/security/datasecurity/process_content_request.py +0 -24
- office365/directory/security/datasecurity/process_content_response.py +0 -24
- office365/directory/security/datasecurity/process_content_responses.py +0 -16
- office365/directory/security/datasecurity/process_conversation_metadata.py +0 -27
- office365/directory/security/datasecurity/process_file_metadata.py +0 -16
- office365/directory/security/datasecurity/protected_content.py +0 -16
- office365/directory/security/datasecurity/sensitivity_label.py +0 -31
- office365/directory/security/default_audit_data.py +0 -10
- office365/directory/security/defender_case_management_audit_record.py +0 -10
- office365/directory/security/defender_preview_features_record.py +0 -10
- office365/directory/security/defender_security_for_ai_configuration_audit_record.py +0 -10
- office365/directory/security/deploy_feature_activity_record.py +0 -10
- office365/directory/security/deployment_access_key_type.py +0 -14
- office365/directory/security/detonation_behaviour_details.py +0 -23
- office365/directory/security/detonation_chain.py +0 -18
- office365/directory/security/detonation_details.py +0 -34
- office365/directory/security/detonation_observables.py +0 -17
- office365/directory/security/device_evidence.py +0 -47
- office365/directory/security/dictionary.py +0 -10
- office365/directory/security/dlp_sensitive_information_type_rule_package_cmdlet_record.py +0 -10
- office365/directory/security/dns_evidence.py +0 -19
- office365/directory/security/dynamic_column_value.py +0 -10
- office365/directory/security/ediscovery/case_member.py +0 -21
- office365/directory/security/ediscovery/custodian.py +0 -22
- office365/directory/security/ediscovery/ediscovery_case_settings.py +0 -21
- office365/directory/security/ediscovery/ediscovery_estimate_operation.py +0 -54
- office365/directory/security/ediscovery/ediscovery_export_operation.py +0 -50
- office365/directory/security/ediscovery/ediscovery_index_operation.py +0 -7
- office365/directory/security/ediscovery/ediscovery_review_tag.py +0 -34
- office365/directory/security/ediscovery/noncustodial_data_source.py +0 -18
- office365/directory/security/ediscovery/operations/add_to_review_set.py +0 -52
- office365/directory/security/ediscovery/operations/hold.py +0 -7
- office365/directory/security/ediscovery/operations/hold_policy_sync.py +0 -9
- office365/directory/security/ediscovery/operations/purge_data.py +0 -9
- office365/directory/security/ediscovery/operations/search_export.py +0 -62
- office365/directory/security/ediscovery/operations/tag.py +0 -7
- office365/directory/security/ediscovery/review_set.py +0 -22
- office365/directory/security/ediscovery/review_set_query.py +0 -7
- office365/directory/security/ediscovery/search.py +0 -56
- office365/directory/security/email_sender.py +0 -16
- office365/directory/security/event_propagation_result.py +0 -18
- office365/directory/security/event_query.py +0 -14
- office365/directory/security/export_file_metadata.py +0 -16
- office365/directory/security/expression_input_object.py +0 -20
- office365/directory/security/fabric_audit_record.py +0 -10
- office365/directory/security/fabric_policy_record.py +0 -10
- office365/directory/security/file_details.py +0 -23
- office365/directory/security/file_evidence.py +0 -18
- office365/directory/security/file_hash.py +0 -16
- office365/directory/security/file_hash_evidence.py +0 -16
- office365/directory/security/file_plan_applied_category.py +0 -15
- office365/directory/security/file_plan_authority.py +0 -10
- office365/directory/security/file_plan_citation.py +0 -15
- office365/directory/security/file_plan_department.py +0 -10
- office365/directory/security/file_plan_descriptor_base.py +0 -14
- office365/directory/security/file_plan_descriptor_template.py +0 -28
- office365/directory/security/file_plan_reference.py +0 -10
- office365/directory/security/file_plan_subcategory.py +0 -10
- office365/directory/security/filter.py +0 -22
- office365/directory/security/filter_clause.py +0 -17
- office365/directory/security/filter_group.py +0 -17
- office365/directory/security/filter_operand.py +0 -15
- office365/directory/security/formatted_content.py +0 -16
- office365/directory/security/geo_location.py +0 -18
- office365/directory/security/git_hub_organization_evidence.py +0 -19
- office365/directory/security/git_hub_repo_evidence.py +0 -18
- office365/directory/security/git_hub_user_evidence.py +0 -18
- office365/directory/security/google_cloud_resource_evidence.py +0 -21
- office365/directory/security/group_filter.py +0 -15
- office365/directory/security/health_issue.py +0 -81
- office365/directory/security/healthcare_signal_record.py +0 -10
- office365/directory/security/hunting_query_results.py +0 -24
- office365/directory/security/identity_accounts.py +0 -36
- office365/directory/security/incidents/incident.py +0 -59
- office365/directory/security/indicator.py +0 -16
- office365/directory/security/integrated_apps_app_admin_activity_audit_record.py +0 -10
- office365/directory/security/integrated_apps_app_settings_admin_activity_audit_record.py +0 -10
- office365/directory/security/intelligence_profile_indicator.py +0 -21
- office365/directory/security/invoke_action_result.py +0 -15
- office365/directory/security/io_t_device_evidence.py +0 -46
- office365/directory/security/ip_address.py +0 -26
- office365/directory/security/ip_evidence.py +0 -19
- office365/directory/security/irm_activity_audit_trail_record.py +0 -10
- office365/directory/security/irm_user_defined_detection_record.py +0 -10
- office365/directory/security/kaizala_audit_record.py +0 -10
- office365/directory/security/kubernetes_cluster_evidence.py +0 -20
- office365/directory/security/kubernetes_controller_evidence.py +0 -19
- office365/directory/security/kubernetes_namespace_evidence.py +0 -18
- office365/directory/security/kubernetes_pod_evidence.py +0 -35
- office365/directory/security/kubernetes_secret_evidence.py +0 -17
- office365/directory/security/kubernetes_service_account_evidence.py +0 -16
- office365/directory/security/kubernetes_service_evidence.py +0 -29
- office365/directory/security/kubernetes_service_port.py +0 -20
- office365/directory/security/label_analytics_aggregate_audit_record.py +0 -10
- office365/directory/security/label_content_explorer_audit_record.py +0 -10
- office365/directory/security/labels/retention/collection.py +0 -68
- office365/directory/security/labels/retention/disposition_review_stage.py +0 -27
- office365/directory/security/labels/retention/duration_in_days.py +0 -16
- office365/directory/security/labels/retention/fileplan_descriptor.py +0 -52
- office365/directory/security/labels/retention/label.py +0 -158
- office365/directory/security/labels/root.py +0 -83
- office365/directory/security/large_content_metadata_audit_record.py +0 -10
- office365/directory/security/logged_on_user.py +0 -15
- office365/directory/security/m365_compliance_connector_audit_record.py +0 -10
- office365/directory/security/m365_search_sections_record.py +0 -10
- office365/directory/security/m365daad_audit_record.py +0 -10
- office365/directory/security/m365odsp_asset_metadata_record.py +0 -10
- office365/directory/security/mail_cluster_evidence.py +0 -20
- office365/directory/security/mail_submission_data.py +0 -10
- office365/directory/security/mailbox_configuration_evidence.py +0 -19
- office365/directory/security/mailbox_evidence.py +0 -18
- office365/directory/security/managed_services_audit_record.py +0 -10
- office365/directory/security/managed_tenants_audit_record.py +0 -10
- office365/directory/security/mapg_alerts_audit_record.py +0 -10
- office365/directory/security/mapg_onboard_audit_record.py +0 -10
- office365/directory/security/mapg_policy_audit_record.py +0 -10
- office365/directory/security/mapg_remediation_audit_record.py +0 -10
- office365/directory/security/mcas_alerts_audit_record.py +0 -10
- office365/directory/security/mda_audit_record.py +0 -10
- office365/directory/security/mda_data_security_signal_record.py +0 -10
- office365/directory/security/mdash_audit_record.py +0 -10
- office365/directory/security/mdatp_audit_record.py +0 -10
- office365/directory/security/mdc_events_record.py +0 -10
- office365/directory/security/mdi_audit_record.py +0 -10
- office365/directory/security/merge_response.py +0 -14
- office365/directory/security/mesh_worlds_audit_record.py +0 -10
- office365/directory/security/microsoft365_backup_backup_item_audit_record.py +0 -10
- office365/directory/security/microsoft365_backup_backup_policy_audit_record.py +0 -10
- office365/directory/security/microsoft365_backup_granular_browse_task_audit_record.py +0 -10
- office365/directory/security/microsoft365_backup_restore_item_audit_record.py +0 -10
- office365/directory/security/microsoft365_backup_restore_task_audit_record.py +0 -10
- office365/directory/security/microsoft365_copilot_scheduled_prompt_audit_record.py +0 -10
- office365/directory/security/microsoft_defender_experts_xdr_audit_record.py +0 -10
- office365/directory/security/microsoft_flow_audit_record.py +0 -10
- office365/directory/security/microsoft_forms_audit_record.py +0 -10
- office365/directory/security/microsoft_graph_data_connect_consent.py +0 -10
- office365/directory/security/microsoft_graph_data_connect_operation.py +0 -10
- office365/directory/security/microsoft_purview_data_catalog_operation_record.py +0 -10
- office365/directory/security/microsoft_purview_data_map_operation_record.py +0 -10
- office365/directory/security/microsoft_purview_metadata_policy_operation_record.py +0 -10
- office365/directory/security/microsoft_purview_policy_operation_record.py +0 -10
- office365/directory/security/microsoft_purview_privacy_audit_event.py +0 -10
- office365/directory/security/microsoft_purview_unified_catalog_operation_record.py +0 -10
- office365/directory/security/mip_auto_label_exchange_item_audit_record.py +0 -10
- office365/directory/security/mip_auto_label_progress_feedback_audit_record.py +0 -10
- office365/directory/security/mip_auto_label_share_point_item_audit_record.py +0 -10
- office365/directory/security/mip_auto_label_share_point_policy_location_audit_record.py +0 -10
- office365/directory/security/mip_auto_label_simulation_share_point_completion_record.py +0 -10
- office365/directory/security/mip_auto_label_simulation_share_point_progress_record.py +0 -10
- office365/directory/security/mip_auto_label_simulation_statistics_record.py +0 -10
- office365/directory/security/mip_exact_data_match_audit_record.py +0 -10
- office365/directory/security/mip_label_analytics_audit_record.py +0 -10
- office365/directory/security/mip_label_audit_record.py +0 -10
- office365/directory/security/mos_agent_info_record.py +0 -10
- office365/directory/security/mos_agent_info_record_v2.py +0 -10
- office365/directory/security/ms365d_custom_detection_audit_record.py +0 -10
- office365/directory/security/ms365d_incident_audit_record.py +0 -10
- office365/directory/security/ms365d_suppression_rule_audit_record.py +0 -10
- office365/directory/security/msde_custom_collection_audit_record.py +0 -10
- office365/directory/security/msde_general_settings_audit_record.py +0 -10
- office365/directory/security/msde_indicators_settings_audit_record.py +0 -10
- office365/directory/security/msde_response_actions_audit_record.py +0 -10
- office365/directory/security/msde_roles_settings_audit_record.py +0 -10
- office365/directory/security/msp_vector_search_content_metadata_audit_record.py +0 -10
- office365/directory/security/mstic_nation_state_notification_record.py +0 -10
- office365/directory/security/multi_stage_disposition_audit_record.py +0 -10
- office365/directory/security/my_analytics_settings_audit_record.py +0 -10
- office365/directory/security/network_adapter.py +0 -21
- office365/directory/security/network_connection_evidence.py +0 -18
- office365/directory/security/nic_evidence.py +0 -18
- office365/directory/security/noisy_alert_policy_audit_record.py +0 -10
- office365/directory/security/oauth_application_evidence.py +0 -17
- office365/directory/security/object_definition.py +0 -25
- office365/directory/security/object_definition_metadata_entry.py +0 -16
- office365/directory/security/object_mapping.py +0 -26
- office365/directory/security/object_mapping_metadata_entry.py +0 -16
- office365/directory/security/ocr_settings.py +0 -17
- office365/directory/security/office_native_audit_record.py +0 -10
- office365/directory/security/ome_portal_audit_record.py +0 -10
- office365/directory/security/on_demand_share_point_classification_audit_record.py +0 -10
- office365/directory/security/on_premises_file_share_scanner_dlp_audit_record.py +0 -10
- office365/directory/security/on_premises_share_point_scanner_dlp_audit_record.py +0 -10
- office365/directory/security/one_drive_audit_record.py +0 -10
- office365/directory/security/organizational_data_in_m365_audit_record.py +0 -10
- office365/directory/security/outlook_copilot_automation_audit_record.py +0 -10
- office365/directory/security/owa_get_access_token_for_resource_audit_record.py +0 -10
- office365/directory/security/p4_ai_risk_score_record.py +0 -10
- office365/directory/security/p4ai_assessment_category_record.py +0 -10
- office365/directory/security/p4ai_assessment_fabric_scanner_record.py +0 -10
- office365/directory/security/p4ai_assessment_location_result_record.py +0 -10
- office365/directory/security/p4ai_assessment_record.py +0 -10
- office365/directory/security/parse_expression_response.py +0 -19
- office365/directory/security/passive_dns_record.py +0 -47
- office365/directory/security/people_admin_settings_audit_record.py +0 -10
- office365/directory/security/physical_badging_signal_audit_record.py +0 -10
- office365/directory/security/places_directory_audit_record.py +0 -10
- office365/directory/security/planner_chat_message_audit_record.py +0 -10
- office365/directory/security/planner_chat_message_list_audit_record.py +0 -10
- office365/directory/security/planner_copy_plan_audit_record.py +0 -10
- office365/directory/security/planner_goal_audit_record.py +0 -10
- office365/directory/security/planner_goal_list_audit_record.py +0 -10
- office365/directory/security/planner_plan_audit_record.py +0 -10
- office365/directory/security/planner_plan_list_audit_record.py +0 -10
- office365/directory/security/planner_plan_sensitivity_label_audit_record.py +0 -10
- office365/directory/security/planner_roster_audit_record.py +0 -10
- office365/directory/security/planner_roster_sensitivity_label_audit_record.py +0 -10
- office365/directory/security/planner_task_audit_record.py +0 -10
- office365/directory/security/planner_task_list_audit_record.py +0 -10
- office365/directory/security/planner_tenant_settings_audit_record.py +0 -10
- office365/directory/security/policy_config_change_audit_record.py +0 -10
- office365/directory/security/power_apps_audit_app_record.py +0 -10
- office365/directory/security/power_apps_audit_plan_record.py +0 -10
- office365/directory/security/power_apps_audit_resource_record.py +0 -10
- office365/directory/security/power_bi_audit_record.py +0 -10
- office365/directory/security/power_bi_dlp_audit_record.py +0 -10
- office365/directory/security/power_pages_site_audit_record.py +0 -10
- office365/directory/security/power_platform_admin_dlp_audit_record.py +0 -10
- office365/directory/security/power_platform_admin_environment_audit_record.py +0 -10
- office365/directory/security/power_platform_administrator_activity_record.py +0 -10
- office365/directory/security/power_platform_lockbox_resource_access_request_audit_record.py +0 -10
- office365/directory/security/power_platform_lockbox_resource_command_audit_record.py +0 -10
- office365/directory/security/power_platform_service_activity_audit_record.py +0 -10
- office365/directory/security/power_platform_tenant_isolation_record.py +0 -10
- office365/directory/security/priva_privacy_assessment_operation_record.py +0 -10
- office365/directory/security/priva_privacy_consent_operation_record.py +0 -10
- office365/directory/security/privacy_data_match_audit_record.py +0 -10
- office365/directory/security/privacy_data_minimization_record.py +0 -10
- office365/directory/security/privacy_digest_email_record.py +0 -10
- office365/directory/security/privacy_open_access_audit_record.py +0 -10
- office365/directory/security/privacy_portal_audit_record.py +0 -10
- office365/directory/security/privacy_remediation_action_record.py +0 -10
- office365/directory/security/privacy_remediation_record.py +0 -10
- office365/directory/security/processing_error.py +0 -15
- office365/directory/security/project_audit_record.py +0 -10
- office365/directory/security/project_for_the_web_assigned_to_me_settings_audit_record.py +0 -10
- office365/directory/security/project_for_the_web_project_audit_record.py +0 -10
- office365/directory/security/project_for_the_web_project_settings_audit_record.py +0 -10
- office365/directory/security/project_for_the_web_roadmap_audit_record.py +0 -10
- office365/directory/security/project_for_the_web_roadmap_item_audit_record.py +0 -10
- office365/directory/security/project_for_the_web_roadmap_settings_audit_record.py +0 -10
- office365/directory/security/project_for_the_web_task_audit_record.py +0 -10
- office365/directory/security/public_error_response.py +0 -15
- office365/directory/security/public_folder_audit_record.py +0 -10
- office365/directory/security/purview_insider_risk_alerts_record.py +0 -10
- office365/directory/security/purview_insider_risk_cases_record.py +0 -10
- office365/directory/security/purview_mc_recommendation_record.py +0 -10
- office365/directory/security/purview_posture_agent_audit_record.py +0 -10
- office365/directory/security/quarantine_audit_record.py +0 -10
- office365/directory/security/recipient_type.py +0 -13
- office365/directory/security/records_management_audit_record.py +0 -10
- office365/directory/security/redundancy_detection_settings.py +0 -17
- office365/directory/security/referenced_object.py +0 -15
- office365/directory/security/registry_key_evidence.py +0 -15
- office365/directory/security/registry_value_evidence.py +0 -19
- office365/directory/security/report_file_metadata.py +0 -16
- office365/directory/security/report_submission.py +0 -10
- office365/directory/security/report_submission_result_detail.py +0 -10
- office365/directory/security/resource_access_event.py +0 -18
- office365/directory/security/restricted_mode_audit_record.py +0 -10
- office365/directory/security/retention_duration_forever.py +0 -10
- office365/directory/security/retention_event.py +0 -63
- office365/directory/security/retention_event_status.py +0 -15
- office365/directory/security/retention_policy_audit_record.py +0 -10
- office365/directory/security/rti_operations_agent_audit_record.py +0 -10
- office365/directory/security/sbp_configuration_event_record.py +0 -10
- office365/directory/security/sbp_usage_event_record.py +0 -10
- office365/directory/security/score_evidence.py +0 -10
- office365/directory/security/score_platform_generic_audit_record.py +0 -10
- office365/directory/security/scorecontrol/profile.py +0 -23
- office365/directory/security/script_run_audit_record.py +0 -10
- office365/directory/security/search/data_source.py +0 -34
- office365/directory/security/search.py +0 -48
- office365/directory/security/search_audit_record.py +0 -10
- office365/directory/security/security.py +0 -157
- office365/directory/security/security_compliance_alert_record.py +0 -10
- office365/directory/security/security_compliance_center_eop_cmdlet_audit_record.py +0 -10
- office365/directory/security/security_compliance_insights_audit_record.py +0 -10
- office365/directory/security/security_compliance_rbac_audit_record.py +0 -10
- office365/directory/security/security_compliance_user_change_audit_record.py +0 -10
- office365/directory/security/security_copilot_identity_management_audit_record.py +0 -10
- office365/directory/security/security_development_lifecycle_ai_log_audit_record.py +0 -10
- office365/directory/security/security_group_evidence.py +0 -20
- office365/directory/security/sensitive_info_remediation_agent_data_record.py +0 -10
- office365/directory/security/sensitivity_label_action_audit_record.py +0 -10
- office365/directory/security/sensitivity_label_policy_match_audit_record.py +0 -10
- office365/directory/security/sensitivity_labeled_file_action_audit_record.py +0 -10
- office365/directory/security/sensor.py +0 -72
- office365/directory/security/sensor_candidate.py +0 -32
- office365/directory/security/sensor_candidate_activation_configuration.py +0 -9
- office365/directory/security/sensor_deployment_package.py +0 -15
- office365/directory/security/sensor_settings.py +0 -20
- office365/directory/security/sentinel_ai_tool_audit_record.py +0 -10
- office365/directory/security/sentinel_graph_audit_record.py +0 -10
- office365/directory/security/sentinel_job_audit_record.py +0 -10
- office365/directory/security/sentinel_kql_on_lake_audit_record.py +0 -10
- office365/directory/security/sentinel_lake_data_onboarding_audit_record.py +0 -10
- office365/directory/security/sentinel_lake_encryption_audit_record.py +0 -10
- office365/directory/security/sentinel_lake_onboarding_audit_record.py +0 -10
- office365/directory/security/sentinel_notebook_on_lake_audit_record.py +0 -10
- office365/directory/security/sentinel_package_audit_record.py +0 -10
- office365/directory/security/service_principal_evidence.py +0 -18
- office365/directory/security/settings_container.py +0 -19
- office365/directory/security/share_point_app_permission_operation_audit_record.py +0 -10
- office365/directory/security/share_point_audit_record.py +0 -10
- office365/directory/security/share_point_comment_operation_audit_record.py +0 -10
- office365/directory/security/share_point_content_security_policy_audit_record.py +0 -10
- office365/directory/security/share_point_content_type_operation_audit_record.py +0 -10
- office365/directory/security/share_point_e_signature_audit_record.py +0 -10
- office365/directory/security/share_point_field_operation_audit_record.py +0 -10
- office365/directory/security/share_point_file_operation_audit_record.py +0 -10
- office365/directory/security/share_point_list_item_operation_audit_record.py +0 -10
- office365/directory/security/share_point_list_operation_audit_record.py +0 -10
- office365/directory/security/share_point_sharing_operation_audit_record.py +0 -10
- office365/directory/security/single_property_schema.py +0 -15
- office365/directory/security/site_source.py +0 -16
- office365/directory/security/skype_for_business_cmdlets_audit_record.py +0 -10
- office365/directory/security/skype_for_business_pstn_usage_audit_record.py +0 -10
- office365/directory/security/skype_for_business_users_blocked_audit_record.py +0 -10
- office365/directory/security/sonar_detonation_content_metadata.py +0 -10
- office365/directory/security/sonar_detonation_entity_audit_record.py +0 -10
- office365/directory/security/sonar_file_detonation_entity_audit_record.py +0 -10
- office365/directory/security/sonar_submission_entity_audit_record.py +0 -10
- office365/directory/security/sonar_url_detonation_entity_audit_record.py +0 -10
- office365/directory/security/spark_core_custom_live_pool_record.py +0 -10
- office365/directory/security/ssl_certificate.py +0 -59
- office365/directory/security/stream.py +0 -14
- office365/directory/security/string_key_attribute_mapping_source_value_pair.py +0 -16
- office365/directory/security/string_key_long_value_pair.py +0 -15
- office365/directory/security/string_key_object_value_pair.py +0 -14
- office365/directory/security/string_key_string_value_pair.py +0 -15
- office365/directory/security/string_value_dictionary.py +0 -10
- office365/directory/security/subdomain.py +0 -26
- office365/directory/security/subjectrightsrequests/all_mailbox_location.py +0 -10
- office365/directory/security/subjectrightsrequests/all_site_location.py +0 -10
- office365/directory/security/subjectrightsrequests/data_subject.py +0 -17
- office365/directory/security/subjectrightsrequests/detail.py +0 -26
- office365/directory/security/subjectrightsrequests/enumerated_mailbox_location.py +0 -15
- office365/directory/security/subjectrightsrequests/enumerated_site_location.py +0 -15
- office365/directory/security/subjectrightsrequests/history.py +0 -22
- office365/directory/security/subjectrightsrequests/identity.py +0 -21
- office365/directory/security/subjectrightsrequests/mailbox_location.py +0 -10
- office365/directory/security/subjectrightsrequests/request.py +0 -6
- office365/directory/security/subjectrightsrequests/site_location.py +0 -10
- office365/directory/security/subjectrightsrequests/stage_detail.py +0 -19
- office365/directory/security/submission_entity_audit_record.py +0 -10
- office365/directory/security/submission_mail_evidence.py +0 -23
- office365/directory/security/supervisory_review_day_x_insights_audit_record.py +0 -10
- office365/directory/security/synthetic_probe_audit_record.py +0 -10
- office365/directory/security/tag.py +0 -33
- office365/directory/security/team_copilot_interaction_audit_record.py +0 -10
- office365/directory/security/teams_easy_approvals_audit_record.py +0 -10
- office365/directory/security/teams_eval_data_hub_admin_operation_audit_record.py +0 -10
- office365/directory/security/teams_eval_data_hub_data_access_audit_record.py +0 -10
- office365/directory/security/teams_eval_data_hub_permission_change_audit_record.py +0 -10
- office365/directory/security/teams_healthcare_audit_record.py +0 -10
- office365/directory/security/teams_message_evidence.py +0 -42
- office365/directory/security/teams_updates_audit_record.py +0 -10
- office365/directory/security/tenant_allow_block_list_audit_record.py +0 -10
- office365/directory/security/threat_detection_detail.py +0 -16
- office365/directory/security/threat_finder_audit_record.py +0 -10
- office365/directory/security/threat_intelligence_atp_content_data.py +0 -10
- office365/directory/security/threat_intelligence_export_audit_record.py +0 -10
- office365/directory/security/threat_intelligence_mail_data.py +0 -10
- office365/directory/security/threat_intelligence_object_audit_record.py +0 -10
- office365/directory/security/threat_intelligence_url_click_data.py +0 -10
- office365/directory/security/threatintelligence/host.py +0 -138
- office365/directory/security/threatintelligence/host_component.py +0 -46
- office365/directory/security/threatintelligence/host_cookie.py +0 -41
- office365/directory/security/threatintelligence/host_logon_session_evidence.py +0 -21
- office365/directory/security/threatintelligence/host_pair.py +0 -41
- office365/directory/security/threatintelligence/host_port.py +0 -57
- office365/directory/security/threatintelligence/host_port_banner.py +0 -19
- office365/directory/security/threatintelligence/host_port_component.py +0 -19
- office365/directory/security/threatintelligence/host_reputation.py +0 -16
- office365/directory/security/threatintelligence/host_reputation_rule.py +0 -16
- office365/directory/security/threatintelligence/host_ssl_certificate.py +0 -43
- office365/directory/security/threatintelligence/host_tracker.py +0 -41
- office365/directory/security/threatintelligence/hostname.py +0 -21
- office365/directory/security/threatintelligence/profile.py +0 -56
- office365/directory/security/threatintelligence/threat_intelligence.py +0 -193
- office365/directory/security/timeline_event.py +0 -19
- office365/directory/security/todo_audit_record.py +0 -10
- office365/directory/security/topic_modeling_settings.py +0 -17
- office365/directory/security/trainable_classifier_audit_record.py +0 -10
- office365/directory/security/triggers/root.py +0 -9
- office365/directory/security/triggertypes/collection.py +0 -9
- office365/directory/security/triggertypes/event_type.py +0 -47
- office365/directory/security/triggertypes/root.py +0 -24
- office365/directory/security/uam_operation_audit_record.py +0 -10
- office365/directory/security/unclassified_artifact.py +0 -21
- office365/directory/security/unified_group_audit_record.py +0 -10
- office365/directory/security/unified_group_source.py +0 -22
- office365/directory/security/unified_simulation_matched_item_audit_record.py +0 -10
- office365/directory/security/unified_simulation_summary_audit_record.py +0 -10
- office365/directory/security/universal_print_management_audit_record.py +0 -10
- office365/directory/security/universal_print_print_job_audit_record.py +0 -10
- office365/directory/security/urbac_assignment_audit_record.py +0 -10
- office365/directory/security/urbac_enable_state_audit_record.py +0 -10
- office365/directory/security/urbac_role_audit_record.py +0 -10
- office365/directory/security/url_evidence.py +0 -14
- office365/directory/security/user_account.py +0 -27
- office365/directory/security/user_evidence.py +0 -17
- office365/directory/security/user_source.py +0 -27
- office365/directory/security/user_training_audit_record.py +0 -10
- office365/directory/security/usx_workspace_onboarding_audit_record.py +0 -10
- office365/directory/security/vfam_create_policy_audit_record.py +0 -10
- office365/directory/security/vfam_delete_policy_audit_record.py +0 -10
- office365/directory/security/vfam_update_policy_audit_record.py +0 -10
- office365/directory/security/viva_amplify_audit_record.py +0 -10
- office365/directory/security/viva_engage_events_audit_record.py +0 -10
- office365/directory/security/viva_engage_network_association_audit_record.py +0 -10
- office365/directory/security/viva_engage_segment_audit_record.py +0 -10
- office365/directory/security/viva_glint_advanced_configuration_audit_record.py +0 -10
- office365/directory/security/viva_glint_agentic_campaign_audit_record.py +0 -10
- office365/directory/security/viva_glint_feedback_program_audit_record.py +0 -10
- office365/directory/security/viva_glint_organizational_data_audit_record.py +0 -10
- office365/directory/security/viva_glint_pulse_program_audit_record.py +0 -10
- office365/directory/security/viva_glint_pulse_program_respondent_rate_audit_record.py +0 -10
- office365/directory/security/viva_glint_question_audit_record.py +0 -10
- office365/directory/security/viva_glint_role_audit_record.py +0 -10
- office365/directory/security/viva_glint_rubicon_audit_record.py +0 -10
- office365/directory/security/viva_glint_support_access_audit_record.py +0 -10
- office365/directory/security/viva_glint_system_audit_record.py +0 -10
- office365/directory/security/viva_glint_user_audit_record.py +0 -10
- office365/directory/security/viva_glint_user_group_audit_record.py +0 -10
- office365/directory/security/viva_goals_audit_record.py +0 -10
- office365/directory/security/viva_learning_admin_audit_record.py +0 -10
- office365/directory/security/viva_learning_audit_record.py +0 -10
- office365/directory/security/viva_pulse_admin_audit_record.py +0 -10
- office365/directory/security/viva_pulse_organizer_audit_record.py +0 -10
- office365/directory/security/viva_pulse_report_audit_record.py +0 -10
- office365/directory/security/viva_pulse_response_audit_record.py +0 -10
- office365/directory/security/vm_metadata.py +0 -16
- office365/directory/security/vulnerability.py +0 -74
- office365/directory/security/vulnerability_component.py +0 -16
- office365/directory/security/wdatp_alerts_audit_record.py +0 -10
- office365/directory/security/web_content_filtering_audit_record.py +0 -10
- office365/directory/security/whois_base_record.py +0 -59
- office365/directory/security/windows365_customer_lockbox_audit_record.py +0 -10
- office365/directory/security/workplace_analytics_audit_record.py +0 -10
- office365/directory/security/yammer_audit_record.py +0 -10
- office365/directory/security/yammer_user_hiding_audit_record.py +0 -10
- office365/externalconnectors/binary_operator.py +0 -12
- office365/externalconnectors/connection_operation_status.py +0 -15
- office365/externalconnectors/connection_state.py +0 -15
- office365/externalconnectors/external_activity_type.py +0 -15
- office365/externalconnectors/external_item_content_type.py +0 -13
- office365/intune/brand.py +0 -21
- office365/intune/instance_resource_access.py +0 -19
- office365/intune/provisioned_plan.py +0 -27
- office365/intune/resource_permission.py +0 -15
- office365/migration/teams/_extract.py +0 -108
- office365/migration/teams/models.py +0 -73
- office365/onenote/operations/operation.py +0 -35
- office365/partners/billing/billing_period.py +0 -13
- office365/partners/billing/billing_reconciliation.py +0 -26
- office365/runtime/odata/type.py +0 -111
- office365/sharepoint/contentcenter/machinelearning/publications/result.py +0 -9
- office365/sharepoint/customactions/action.py +0 -36
- office365/sharepoint/internal/paths/web.py +0 -24
- office365/sharepoint/publishing/pages/3d/page.py +0 -319
- office365/sharepoint/workflow/task.py +0 -430
- office365_rest_python_client-3.2.0.dist-info/METADATA +0 -605
- office365_rest_python_client-3.2.0.dist-info/RECORD +0 -5743
- /office365/{directory/security → common}/__init__.py +0 -0
- /office365/{directory/security/alerts → intune/devices/configurations/macos}/__init__.py +0 -0
- /office365/{directory/security/attacksimulations → intune/devices/configurations/windows/_10}/__init__.py +0 -0
- /office365/intune/devices/configurations/windows/{10 → _10}/editiontype.py +0 -0
- /office365/intune/{enrollment_state.py → devices/management/enrollment_state.py} +0 -0
- /office365/{directory/security/attacksimulations/operations → intune/devices/management/mobileapps/macos}/__init__.py +0 -0
- /office365/intune/{package_status.py → devices/management/package_status.py} +0 -0
- /office365/intune/{process_integrity_level.py → devices/management/process_integrity_level.py} +0 -0
- /office365/{directory/security/attacksimulations/reports → planner/internal}/__init__.py +0 -0
- /office365/{directory/security/attacksimulations/users → planner/internal/paths}/__init__.py +0 -0
- /office365/runtime/{decorators.py → deprecated.py} +0 -0
- /office365/{directory/security/audit → security}/__init__.py +0 -0
- /office365/{directory/security → security}/action.py +0 -0
- /office365/{directory/security → security}/ai_agent_platform.py +0 -0
- /office365/{directory/security/cases → security/alerts}/__init__.py +0 -0
- /office365/{directory/security → security}/alerts/antispamteamsdirection.py +0 -0
- /office365/{directory/security → security}/alerts/classification.py +0 -0
- /office365/{directory/security → security}/alerts/connection_direction.py +0 -0
- /office365/{directory/security → security}/alerts/connectionstatus.py +0 -0
- /office365/{directory/security → security}/alerts/defenderavstatus.py +0 -0
- /office365/{directory/security → security}/alerts/detectionsource.py +0 -0
- /office365/{directory/security → security}/alerts/detectionstatus.py +0 -0
- /office365/{directory/security → security}/alerts/determination.py +0 -0
- /office365/{directory/security → security}/alerts/emailrole.py +0 -0
- /office365/{directory/security → security}/alerts/evidenceremediationstatus.py +0 -0
- /office365/{directory/security → security}/alerts/evidencerole.py +0 -0
- /office365/{directory/security → security}/alerts/evidenceverdict.py +0 -0
- /office365/{directory/security → security}/alerts/feedback.py +0 -0
- /office365/{directory/security → security}/alerts/googlecloudlocationtype.py +0 -0
- /office365/{directory/security → security}/alerts/iotdeviceimportancetype.py +0 -0
- /office365/{directory/security → security}/alerts/kubernetesplatform.py +0 -0
- /office365/{directory/security → security}/alerts/kubernetesservicetype.py +0 -0
- /office365/{directory/security → security}/alerts/logontype.py +0 -0
- /office365/{directory/security → security}/alerts/registryhive.py +0 -0
- /office365/{directory/security → security}/alerts/registryoperation.py +0 -0
- /office365/{directory/security → security}/alerts/registryvaluetype.py +0 -0
- /office365/{directory/security → security}/alerts/securitynetworkprotocol.py +0 -0
- /office365/{directory/security → security}/alerts/securityresourcetype.py +0 -0
- /office365/{directory/security → security}/alerts/severity.py +0 -0
- /office365/{directory/security → security}/alerts/status.py +0 -0
- /office365/{directory/security → security}/alerts/useraccountsecuritytype.py +0 -0
- /office365/{directory/security → security}/antispam_directionality.py +0 -0
- /office365/{directory/security → security}/artifact.py +0 -0
- /office365/{directory/security/collaboration → security/attacksimulations}/__init__.py +0 -0
- /office365/{directory/security → security}/attacksimulations/account_target_content_type.py +0 -0
- /office365/{directory/security → security}/attacksimulations/clicksource.py +0 -0
- /office365/{directory/security → security}/attacksimulations/endusernotificationpreference.py +0 -0
- /office365/{directory/security → security}/attacksimulations/endusernotificationsettingtype.py +0 -0
- /office365/{directory/security → security}/attacksimulations/endusernotificationtype.py +0 -0
- /office365/{directory/security → security}/attacksimulations/notificationdeliveryfrequency.py +0 -0
- /office365/{directory/security → security}/attacksimulations/notificationdeliverypreference.py +0 -0
- /office365/{directory/security → security}/attacksimulations/oauthappscope.py +0 -0
- /office365/{directory/security/datasecurity → security/attacksimulations/operations}/__init__.py +0 -0
- /office365/{directory/security → security}/attacksimulations/operations/type.py +0 -0
- /office365/{directory/security → security}/attacksimulations/payloadbrand.py +0 -0
- /office365/{directory/security → security}/attacksimulations/payloadcomplexity.py +0 -0
- /office365/{directory/security → security}/attacksimulations/payloaddeliveryplatform.py +0 -0
- /office365/{directory/security → security}/attacksimulations/payloadindustry.py +0 -0
- /office365/{directory/security → security}/attacksimulations/payloadtheme.py +0 -0
- /office365/{directory/security/ediscovery → security/attacksimulations/reports}/__init__.py +0 -0
- /office365/{directory/security → security}/attacksimulations/simulationattacktechnique.py +0 -0
- /office365/{directory/security → security}/attacksimulations/simulationattacktype.py +0 -0
- /office365/{directory/security → security}/attacksimulations/simulationautomationrunstatus.py +0 -0
- /office365/{directory/security → security}/attacksimulations/simulationautomationstatus.py +0 -0
- /office365/{directory/security → security}/attacksimulations/simulationcontentsource.py +0 -0
- /office365/{directory/security → security}/attacksimulations/simulationcontentstatus.py +0 -0
- /office365/{directory/security → security}/attacksimulations/simulationstatus.py +0 -0
- /office365/{directory/security → security}/attacksimulations/targettedusertype.py +0 -0
- /office365/{directory/security → security}/attacksimulations/trainingassignedto.py +0 -0
- /office365/{directory/security → security}/attacksimulations/trainingavailabilitystatus.py +0 -0
- /office365/{directory/security → security}/attacksimulations/trainingcompletionduration.py +0 -0
- /office365/{directory/security → security}/attacksimulations/trainingsettingtype.py +0 -0
- /office365/{directory/security → security}/attacksimulations/trainingstatus.py +0 -0
- /office365/{directory/security → security}/attacksimulations/trainingtype.py +0 -0
- /office365/{directory/security/ediscovery/operations → security/attacksimulations/users}/__init__.py +0 -0
- /office365/{directory/security/healthissues → security/audit}/__init__.py +0 -0
- /office365/{directory/security → security}/audit/audit_log_query_status.py +0 -0
- /office365/{directory/security → security}/audit/whois_domain_status.py +0 -0
- /office365/{directory/security → security}/audit/whois_history_record.py +0 -0
- /office365/{directory/security → security}/authority_template.py +0 -0
- /office365/{directory/security/incidents → security/cases}/__init__.py +0 -0
- /office365/{directory/security → security}/cases/action.py +0 -0
- /office365/{directory/security → security}/cases/additionaldataoptions.py +0 -0
- /office365/{directory/security → security}/cases/additionaloptions.py +0 -0
- /office365/{directory/security → security}/cases/exportcriteria.py +0 -0
- /office365/{directory/security → security}/cases/exportfilestructure.py +0 -0
- /office365/{directory/security → security}/cases/exportformat.py +0 -0
- /office365/{directory/security → security}/cases/exportlocation.py +0 -0
- /office365/{directory/security → security}/cases/exportoptions.py +0 -0
- /office365/{directory/security → security}/cases/itemstoinclude.py +0 -0
- /office365/{directory/security → security}/cases/operationstatus.py +0 -0
- /office365/{directory/security → security}/cases/reviewsetsettings.py +0 -0
- /office365/{directory/security → security}/cases/statisticsoptions.py +0 -0
- /office365/{directory/security → security}/cases/status.py +0 -0
- /office365/{directory/security → security}/cases/type.py +0 -0
- /office365/{directory/security → security}/childselectability.py +0 -0
- /office365/{directory/security → security}/cloudattachmentversion.py +0 -0
- /office365/{directory/security/labels → security/collaboration}/__init__.py +0 -0
- /office365/{directory/security → security}/containerportprotocol.py +0 -0
- /office365/{directory/security → security}/contentformat.py +0 -0
- /office365/{directory/security → security}/contentprocessingerrortype.py +0 -0
- /office365/{directory/security → security}/correlation_reason.py +0 -0
- /office365/{directory/security → security}/custom_security_attribute_comparison_operator.py +0 -0
- /office365/{directory/security/labels/retention → security/datasecurity}/__init__.py +0 -0
- /office365/{directory/security → security}/delivery_action.py +0 -0
- /office365/{directory/security → security}/delivery_location.py +0 -0
- /office365/{directory/security → security}/department_template.py +0 -0
- /office365/{directory/security/scorecontrol → security/ediscovery}/__init__.py +0 -0
- /office365/{directory/security/search → security/ediscovery/operations}/__init__.py +0 -0
- /office365/{directory/security → security}/event_source.py +0 -0
- /office365/{directory/security → security}/file_plan_reference_template.py +0 -0
- /office365/{directory/security → security}/filehashalgorithm.py +0 -0
- /office365/{directory/security/securescores → security/healthissues}/__init__.py +0 -0
- /office365/{directory/security → security}/healthissues/deploymentstatus.py +0 -0
- /office365/{directory/security → security}/healthissues/sensorhealthstatus.py +0 -0
- /office365/{directory/security → security}/healthissues/sensortype.py +0 -0
- /office365/{directory/security → security}/healthissues/severity.py +0 -0
- /office365/{directory/security → security}/healthissues/sourcetype.py +0 -0
- /office365/{directory/security → security}/healthissues/status.py +0 -0
- /office365/{directory/security → security}/healthissues/type.py +0 -0
- /office365/{directory/security → security}/hunting_row_result.py +0 -0
- /office365/{directory/security/subjectrightsrequests → security/incidents}/__init__.py +0 -0
- /office365/{directory/security → security}/incidents/status.py +0 -0
- /office365/{directory/security → security}/indicator_source.py +0 -0
- /office365/{directory/security → security}/intelligence_profile_kind.py +0 -0
- /office365/{directory/security → security}/investigation_state.py +0 -0
- /office365/{directory/security/threatintelligence → security/labels}/__init__.py +0 -0
- /office365/{directory/security/threatintelligence/hosts → security/labels/retention}/__init__.py +0 -0
- /office365/{directory/security → security}/labels/retention/actionafterretentionperiod.py +0 -0
- /office365/{directory/security → security}/labels/retention/behaviorduringretentionperiod.py +0 -0
- /office365/{directory/security → security}/labels/retention/defaultrecordbehavior.py +0 -0
- /office365/{directory/security → security}/labels/retention/duration.py +0 -0
- /office365/{directory/security → security}/labels/retention/trigger.py +0 -0
- /office365/{directory/security → security}/mailbox_configuration_type.py +0 -0
- /office365/{directory/security → security}/onboarding_status.py +0 -0
- /office365/{directory/security → security}/policypivotproperty.py +0 -0
- /office365/{directory/security → security}/protectionscopestate.py +0 -0
- /office365/{directory/security → security}/protocol_type.py +0 -0
- /office365/{directory/security → security}/purgeareas.py +0 -0
- /office365/{directory/security → security}/purgetype.py +0 -0
- /office365/{directory/security → security}/query_type.py +0 -0
- /office365/{directory/security → security}/remediation_action.py +0 -0
- /office365/{directory/security → security}/remediation_severity.py +0 -0
- /office365/{directory/security → security}/restrictionaction.py +0 -0
- /office365/{directory/security → security}/riskscore.py +0 -0
- /office365/{directory/security/threatintelligence/whoisrecords → security/scorecontrol}/__init__.py +0 -0
- /office365/{directory/security/triggers → security/search}/__init__.py +0 -0
- /office365/{directory/security → security}/search/datasourcecontainerstatus.py +0 -0
- /office365/{directory/security → security}/search/datasourceholdstatus.py +0 -0
- /office365/{directory/security → security}/search/datasourcescopes.py +0 -0
- /office365/{directory/security → security}/search/documentversion.py +0 -0
- /office365/{directory/security/triggertypes → security/securescores}/__init__.py +0 -0
- /office365/{directory/security → security}/sensor_candidate_activation_mode.py +0 -0
- /office365/{directory/security → security}/service_principal_type.py +0 -0
- /office365/{directory/security → security}/service_source.py +0 -0
- /office365/{directory/security → security}/subcategory_template.py +0 -0
- /office365/{intune/devices/configurations/windows/10 → security/subjectrightsrequests}/__init__.py +0 -0
- /office365/{directory/security → security}/teams_delivery_location.py +0 -0
- /office365/{directory/security → security}/teams_message_delivery_action.py +0 -0
- /office365/{directory/security → security}/threat_type.py +0 -0
- /office365/{sharepoint/publishing/pages/3d → security/threatintelligence}/__init__.py +0 -0
- /office365/{directory/security → security}/threatintelligence/article_indicator.py +0 -0
- /office365/{directory/security → security}/threatintelligence/host_port_protocol.py +0 -0
- /office365/{directory/security → security}/threatintelligence/host_port_status.py +0 -0
- /office365/{directory/security → security}/threatintelligence/host_reputation_classification.py +0 -0
- /office365/{directory/security → security}/threatintelligence/host_reputation_rule_severity.py +0 -0
- /office365/{directory/security → security}/timeline_event_type.py +0 -0
- /office365/{directory/security → security}/triggers/eventpropagationstatus.py +0 -0
- /office365/{directory/security → security}/triggers/eventstatustype.py +0 -0
- /office365/{directory/security → security}/useractivitytype.py +0 -0
- /office365/{directory/security → security}/useractivitytypes.py +0 -0
- /office365/{directory/security → security}/userscopetype.py +0 -0
- /office365/{directory/security → security}/verdict_category.py +0 -0
- /office365/{directory/security → security}/vm_cloud_provider.py +0 -0
- /office365/{directory/security → security}/vulnerability_severity.py +0 -0
- /office365/sharepoint/publishing/pages/{3d → _3d}/types.py +0 -0
- /office365/{intune/print → todo/tasks}/taskstatus.py +0 -0
- {office365_rest_python_client-3.2.0.dist-info → office365_rest_python_client-3.3.1.dist-info}/WHEEL +0 -0
|
@@ -10,81 +10,726 @@ Lazy imports keep the migration core client-agnostic.
|
|
|
10
10
|
|
|
11
11
|
from __future__ import annotations
|
|
12
12
|
|
|
13
|
-
import hashlib
|
|
14
13
|
import io
|
|
15
|
-
from collections.abc import Callable
|
|
16
|
-
from
|
|
17
|
-
from typing import TYPE_CHECKING, cast
|
|
18
|
-
|
|
19
|
-
from
|
|
20
|
-
|
|
14
|
+
from collections.abc import Callable, Iterable
|
|
15
|
+
from enum import Enum
|
|
16
|
+
from typing import TYPE_CHECKING, Any, cast
|
|
17
|
+
|
|
18
|
+
from typing_extensions import TypeAlias
|
|
19
|
+
|
|
20
|
+
from office365.migration.adapters import MigrationProgress, checksum
|
|
21
|
+
from office365.migration.base import (
|
|
22
|
+
MigrationItem,
|
|
23
|
+
PermissionEntry,
|
|
24
|
+
Principal,
|
|
25
|
+
conflict_to_on_conflict,
|
|
26
|
+
normalize_puid,
|
|
27
|
+
)
|
|
28
|
+
from office365.migration.sharepoint.structure import ListStructure, provision_list_structure
|
|
21
29
|
from office365.migration.sharepoint.transfer import Failure
|
|
22
|
-
from office365.runtime.converters.
|
|
23
|
-
from office365.runtime.converters.scalars import
|
|
30
|
+
from office365.runtime.converters.records import records_from_items
|
|
31
|
+
from office365.runtime.converters.scalars import (
|
|
32
|
+
iso_or_none,
|
|
33
|
+
iso_z,
|
|
34
|
+
normalize_guid,
|
|
35
|
+
parse_datetime,
|
|
36
|
+
parse_int,
|
|
37
|
+
wall_clock_text,
|
|
38
|
+
)
|
|
39
|
+
from office365.runtime.converters.value import values_of
|
|
24
40
|
from office365.runtime.limits import DEFAULT_BATCH_SIZE
|
|
41
|
+
from office365.runtime.odata.comparable import digest
|
|
25
42
|
from office365.runtime.operations import emit_progress
|
|
43
|
+
from office365.runtime.schema import TypeSchema
|
|
44
|
+
from office365.runtime.types.odata_property import AUTHORSHIP, MODERATION, PERMISSIONS
|
|
45
|
+
from office365.sharepoint.exceptions import SPFieldValidationException
|
|
26
46
|
from office365.sharepoint.fields.builtin_field_name import SYSTEM_FIELD_NAMES
|
|
47
|
+
from office365.sharepoint.fields.lookup import FieldLookup
|
|
48
|
+
from office365.sharepoint.listitems.listitem import ListItem
|
|
49
|
+
from office365.sharepoint.listitems.moderation_status import SPModerationStatusType
|
|
50
|
+
from office365.sharepoint.permissions import SiteLevel, site_access
|
|
51
|
+
from office365.sharepoint.permissions.securable_object import SecurableObject
|
|
52
|
+
from office365.sharepoint.principal.type import PrincipalType
|
|
53
|
+
from office365.sharepoint.taxonomy.field import TaxonomyField
|
|
54
|
+
from office365.sharepoint.taxonomy.field_value import TaxonomyFieldValue
|
|
55
|
+
from office365.sharepoint.taxonomy.field_value_col import TaxonomyFieldValueCollection
|
|
27
56
|
|
|
28
57
|
if TYPE_CHECKING:
|
|
58
|
+
from office365.migration.map import ContentTypeMap
|
|
59
|
+
from office365.sharepoint.fields.field import Field
|
|
29
60
|
from office365.sharepoint.files.file import File
|
|
30
61
|
from office365.sharepoint.folders.folder import Folder
|
|
31
62
|
from office365.sharepoint.lists.list import List as SPList
|
|
32
63
|
from office365.sharepoint.permissions.roles.definitions.definition import RoleDefinition
|
|
64
|
+
from office365.sharepoint.principal.users.user import User
|
|
65
|
+
from office365.sharepoint.webs.web import Web
|
|
66
|
+
|
|
67
|
+
_LIST_ITEM = TypeSchema.of(ListItem)
|
|
68
|
+
_SECURABLE = TypeSchema.of(SecurableObject)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def _cloned_context(obj):
|
|
72
|
+
"""A fresh ``ClientContext`` clone for ``obj`` (same auth + transport, own queue)."""
|
|
73
|
+
ctx = obj.context
|
|
74
|
+
return ctx.clone(ctx.base_url)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def _cloned_list(sp_list: "SPList", context=None) -> "SPList":
|
|
78
|
+
"""The same list, addressed by id and loaded on ``context`` (or a clone of it)."""
|
|
79
|
+
list_id = sp_list.id
|
|
80
|
+
if not list_id:
|
|
81
|
+
raise ValueError("cannot rebind a list that was never loaded")
|
|
82
|
+
ctx = context if context is not None else _cloned_context(sp_list)
|
|
83
|
+
return ctx.web.lists.get_by_id(list_id).get().execute_query()
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _cloned_folder(folder: "Folder", context=None) -> "Folder":
|
|
87
|
+
"""The same folder, addressed by server-relative path and loaded on ``context``."""
|
|
88
|
+
server_relative_url = folder.server_relative_url
|
|
89
|
+
if not server_relative_url:
|
|
90
|
+
raise ValueError("cannot rebind a folder that was never loaded")
|
|
91
|
+
ctx = context if context is not None else _cloned_context(folder)
|
|
92
|
+
return ctx.web.get_folder_by_server_relative_path(server_relative_url).get().execute_query()
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
#: The target's typed columns: ``(lookup: name -> referenced list id, user names,
|
|
96
|
+
#: multi-lookup: name -> referenced list id, multi-user names, taxonomy:
|
|
97
|
+
#: name -> (allows many, hidden note field internal name), multi-choice names)``.
|
|
98
|
+
_TypedColumns: TypeAlias = (
|
|
99
|
+
"tuple[dict[str, str], set[str], dict[str, str], set[str], dict[str, tuple[bool, str | None]], set[str]]"
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
#: Always-projected system metadata: the author/editor ids an item is restored from and
|
|
103
|
+
#: the unique-ACL flag. ``*`` omits them, so they are asked for by the role they play.
|
|
104
|
+
_METADATA_SELECT = [*_LIST_ITEM.columns_of_facet(AUTHORSHIP), *_LIST_ITEM.columns_of_facet(PERMISSIONS)]
|
|
105
|
+
|
|
106
|
+
#: Marker column added to a migrated list recording each item's source id. It makes
|
|
107
|
+
#: a re-run idempotent and lets post-run verification pair source and target items.
|
|
108
|
+
DEFAULT_LIST_IDENTITY_FIELD = "MigrationSourceId"
|
|
109
|
+
# Authorship has its own fidelity path (``apply_authorship``); the ``Author``/``Editor``
|
|
110
|
+
# columns are the payload companions of the authorship ids, so they are neither content
|
|
111
|
+
# nor Person values to remap.
|
|
112
|
+
_PERSON_EXCLUDED = frozenset(
|
|
113
|
+
name[: -len("Id")] for name in _LIST_ITEM.columns_of_facet(AUTHORSHIP) if name.endswith("Id")
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
#: Moderation columns of a list item. They only exist on a list whose
|
|
117
|
+
#: ``EnableModeration`` is on, so selecting them unconditionally fails outright.
|
|
118
|
+
#: They are ordinary record content: a list item takes a moderation change in the same
|
|
119
|
+
#: system update as its timestamps (a document refuses it — see ``apply_item_state``),
|
|
120
|
+
#: so captured state rides in that one write and no version is created.
|
|
121
|
+
_MODERATION_FIELDS = _LIST_ITEM.columns_of_facet(MODERATION)
|
|
122
|
+
|
|
123
|
+
#: The moderation column carrying the approval status; its sibling carries the comment.
|
|
124
|
+
_MODERATION_STATUS = _LIST_ITEM.name_of("moderation_status")
|
|
125
|
+
|
|
126
|
+
#: How many paths a per-run warning names before it summarizes the rest.
|
|
127
|
+
_WARNING_SAMPLE = 5
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def _scalar_mapping(value: Any) -> dict | None:
|
|
131
|
+
"""A value object as a plain mapping with scalar members, or ``None``.
|
|
132
|
+
|
|
133
|
+
Only a shallow mapping of scalars is accepted, so a navigation property (a
|
|
134
|
+
``ClientObject``) or a typed payload carrying a nested ``__metadata`` is never
|
|
135
|
+
mistaken for a column value.
|
|
136
|
+
"""
|
|
137
|
+
if not isinstance(value, dict) or not value:
|
|
138
|
+
return None
|
|
139
|
+
if any(item is not None and not isinstance(item, (str, int, float, bool)) for item in value.values()):
|
|
140
|
+
return None
|
|
141
|
+
return dict(value)
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
#: Record columns a faithful copy does not compare: what ``ListItem`` declares
|
|
145
|
+
#: server-assigned or reachable by ``$expand``. What remains is the item's *content*,
|
|
146
|
+
#: which a faithful copy preserves.
|
|
147
|
+
#:
|
|
148
|
+
#: A deny-list, not ``ListItem._schema.content_columns``: a record carries the site columns
|
|
149
|
+
#: the tenant defines, which the CSDL does not declare, and a set built from declared names
|
|
150
|
+
#: would drop exactly the columns a faithful copy exists to carry.
|
|
151
|
+
_CONTENT_EXCLUDED = frozenset(ListItem._schema.readonly) | frozenset(ListItem._schema.navigations)
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def _folder_value_columns(fields: list[Any]) -> set[str]:
|
|
155
|
+
"""The columns a folder's own metadata can live in (writable, non-system).
|
|
156
|
+
|
|
157
|
+
A read of a folder also returns computed and read-only columns (link filenames,
|
|
158
|
+
compliance flags, version labels); writing those is rejected and comparing them
|
|
159
|
+
would only echo the folder's own name back.
|
|
160
|
+
"""
|
|
161
|
+
return {
|
|
162
|
+
field.internal_name
|
|
163
|
+
for field in fields
|
|
164
|
+
if field.internal_name
|
|
165
|
+
# An underscore-prefixed internal name is SharePoint's own storage column; it
|
|
166
|
+
# is not reliably projectable (the same rule the safe fallback projection uses).
|
|
167
|
+
and not field.internal_name.startswith("_")
|
|
168
|
+
and not field.hidden
|
|
169
|
+
and not field.read_only_field
|
|
170
|
+
and not field.field_type_kind.is_server_assigned
|
|
171
|
+
and field.internal_name not in _FOLDER_RECORD_EXCLUDED
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
#: What a folder record never travels to the target with, or never compares by: the
|
|
176
|
+
#: columns the model declares server-assigned or as navigations -- minus the content
|
|
177
|
+
#: type, because a document set's content type is part of what makes the folder what it
|
|
178
|
+
#: is. A library's sort/stream bookkeeping columns are hidden read-only ones the field
|
|
179
|
+
#: scan already skips, and ``FileLeafRef`` is a ``FieldType.File`` column the type
|
|
180
|
+
#: declares server-assigned, so neither needs naming here.
|
|
181
|
+
_FOLDER_RECORD_EXCLUDED = _CONTENT_EXCLUDED - {"ContentTypeId"}
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def _content_checksum(record: dict, extra_excluded: "frozenset[str]" = frozenset()) -> str:
|
|
185
|
+
"""MD5 of an item's content columns in a stable, order-independent form.
|
|
186
|
+
|
|
187
|
+
The list source and target both use this so record content can be reconciled:
|
|
188
|
+
only scalar, multi-value and value-object columns are hashed (navigation
|
|
189
|
+
properties and excluded keys are dropped) and keys are sorted, so the two sides
|
|
190
|
+
agree regardless of property iteration order. A null column is treated as
|
|
191
|
+
absent: the source drops an empty multi-value column while the target reads it
|
|
192
|
+
back as ``None``, and both mean "no value".
|
|
193
|
+
"""
|
|
194
|
+
content = {}
|
|
195
|
+
for key, value in record.items():
|
|
196
|
+
if key in _CONTENT_EXCLUDED or key in extra_excluded or value is None:
|
|
197
|
+
continue
|
|
198
|
+
if isinstance(value, (str, int, float, bool, list, tuple)):
|
|
199
|
+
content[key] = value
|
|
200
|
+
continue
|
|
201
|
+
mapping = _scalar_mapping(value)
|
|
202
|
+
if mapping is not None:
|
|
203
|
+
content[key] = mapping
|
|
204
|
+
return digest(content)
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
def _folder_record_values(record: dict) -> dict:
|
|
208
|
+
"""The column values of a folder item that travel to (or compare with) the target.
|
|
209
|
+
|
|
210
|
+
The projection already narrows the read to the folder's own writable columns; here
|
|
211
|
+
only the identity/system columns are dropped, and an empty value is treated as
|
|
212
|
+
absent on both sides — a source read reports ``""`` where a target read reports
|
|
213
|
+
``None``, and both mean "no value".
|
|
214
|
+
"""
|
|
215
|
+
return {
|
|
216
|
+
key: value for key, value in record.items() if key not in _FOLDER_RECORD_EXCLUDED and value not in (None, "")
|
|
217
|
+
}
|
|
33
218
|
|
|
34
|
-
_TAXONOMY_FIELD_TYPES = {"TaxonomyFieldType", "TaxonomyFieldTypeMulti"}
|
|
35
219
|
|
|
36
|
-
|
|
37
|
-
|
|
220
|
+
def _typed_keys(names: Iterable[str]) -> set[str]:
|
|
221
|
+
"""The companions a Lookup/Person column's value is carried in, for each column."""
|
|
222
|
+
return {key for name in names for key in (ListItem.value_column(name), ListItem.string_value_column(name))}
|
|
38
223
|
|
|
39
224
|
|
|
40
|
-
def
|
|
41
|
-
"""
|
|
225
|
+
def _taxonomy_terms(value: Any) -> list[dict[str, str]]:
|
|
226
|
+
"""A taxonomy cell as portable ``{"TermGuid": ...}`` terms.
|
|
42
227
|
|
|
43
|
-
``
|
|
44
|
-
|
|
228
|
+
Only ``TermGuid`` is carried: a per-site ``WssId`` is meaningless elsewhere and
|
|
229
|
+
``Label`` is not authoritative (a read may return the WssId string, and the
|
|
230
|
+
server resolves a write by term id regardless of the label).
|
|
45
231
|
"""
|
|
46
|
-
|
|
232
|
+
terms: list[dict[str, str]] = []
|
|
233
|
+
for item in values_of(value) or []:
|
|
234
|
+
guid = item.get("TermGuid") if isinstance(item, dict) else getattr(item, "TermGuid", None)
|
|
235
|
+
if guid:
|
|
236
|
+
terms.append({"TermGuid": str(guid)})
|
|
237
|
+
return terms
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
def _is_taxonomy_value(value: Any) -> bool:
|
|
241
|
+
"""Whether a projected value is a taxonomy term (single value or a collection)."""
|
|
242
|
+
return bool(_taxonomy_terms(value))
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
def _taxonomy_guids(value: Any) -> list[str]:
|
|
246
|
+
return [term["TermGuid"] for term in _taxonomy_terms(value)]
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
def _canonicalize_taxonomy_record(record: dict) -> dict:
|
|
250
|
+
"""Replace taxonomy values with a sorted list of term ids for comparison.
|
|
251
|
+
|
|
252
|
+
``Label`` is cosmetic and ``WssId`` is site-local, so neither belongs in the
|
|
253
|
+
content checksum; the term id is the portable identity. Sorting also keeps the
|
|
254
|
+
checksum independent of the order a read happens to return the terms in.
|
|
255
|
+
"""
|
|
256
|
+
if not any(_is_taxonomy_value(value) for value in record.values()):
|
|
257
|
+
return record
|
|
258
|
+
canonical = dict(record)
|
|
259
|
+
for key, value in record.items():
|
|
260
|
+
if _is_taxonomy_value(value):
|
|
261
|
+
canonical[key] = sorted(_taxonomy_guids(value))
|
|
262
|
+
return canonical
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
def _collection_payload(values: list) -> dict:
|
|
266
|
+
"""The JSON shape SharePoint accepts for a multi-value column.
|
|
267
|
+
|
|
268
|
+
Live-probed on both writes and every multi-value kind (Choice, Lookup, User,
|
|
269
|
+
LookupMulti, UserMulti): a bare array is refused on create *and* on MERGE
|
|
270
|
+
(``InvalidClientQueryException``: a ``StartArray`` where a property value was
|
|
271
|
+
read) while ``{"results": [...]}`` is accepted by both.
|
|
272
|
+
"""
|
|
273
|
+
return {"results": values}
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
def _report_rejected_fields(result, warnings: list[str], label: str) -> None:
|
|
277
|
+
"""Warn about ``ValidateUpdateListItem`` fields the server rejected.
|
|
278
|
+
|
|
279
|
+
A rejected field does not raise over HTTP — the response carries a per-field
|
|
280
|
+
``HasException``/``ErrorMessage`` — and worse, SharePoint rolls the whole batch
|
|
281
|
+
back, so a sibling ``Created``/``Modified`` write is discarded too. Surfacing it
|
|
282
|
+
keeps that invisible loss honest (and testable).
|
|
283
|
+
"""
|
|
284
|
+
values = getattr(result, "value", None) or []
|
|
285
|
+
for value in values:
|
|
286
|
+
if getattr(value, "HasException", False):
|
|
287
|
+
warnings.append(f"{label}: {value.FieldName} rejected ({value.ErrorMessage})")
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
def _wire_value(value: Any) -> Any:
|
|
291
|
+
"""A value as the wire spells it: a declared enum is the number it carries."""
|
|
292
|
+
return value.value if isinstance(value, Enum) else value
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
def _web_local_texts(web: "Web", *values: Any) -> list[str | None]:
|
|
296
|
+
"""The wall-clock texts a document's item form parses, one per instant given.
|
|
297
|
+
|
|
298
|
+
A document's ``ValidateUpdateListItem`` ignores ``datesInUTC``, parses the web's
|
|
299
|
+
locale and refuses a trailing ``Z`` (live-verified on a file and on a folder), so an
|
|
300
|
+
instant has to reach it as the web's own wall clock. That conversion runs server-side
|
|
301
|
+
(``TimeZone.UTCToLocalTime``) so DST is right, and one request converts every value.
|
|
302
|
+
A value that is not an instant is passed on as given, so the service rejection names
|
|
303
|
+
what the caller held instead of this layer having dropped it.
|
|
304
|
+
"""
|
|
305
|
+
zone = web.regional_settings.time_zone
|
|
306
|
+
instants = {index: parse_datetime(iso_z(value)) for index, value in enumerate(values) if value}
|
|
307
|
+
converted = {index: zone.utc_to_local_time(instant) for index, instant in instants.items() if instant is not None}
|
|
308
|
+
if converted:
|
|
309
|
+
web.context.execute_query()
|
|
310
|
+
return [
|
|
311
|
+
wall_clock_text(converted[index].value) if index in converted else (str(value) if value else None)
|
|
312
|
+
for index, value in enumerate(values)
|
|
313
|
+
]
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
def _moderation_state(properties: dict) -> dict:
|
|
317
|
+
"""The approval fields a list item carries; a blank comment is not one of them.
|
|
318
|
+
|
|
319
|
+
A hydrated model hands out enum members (``SPModerationStatusType``); the state is a
|
|
320
|
+
payload to write back, so it carries the numbers the column stores.
|
|
321
|
+
"""
|
|
322
|
+
return {name: _wire_value(properties[name]) for name in _MODERATION_FIELDS if properties.get(name) not in (None, "")}
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
#: SiteAssets is the one library that also holds per-site infrastructure — the
|
|
326
|
+
#: site icon and the auto-provisioned OneNote folder.
|
|
327
|
+
_SITE_ASSETS_URL_SUFFIX = "/SiteAssets"
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
def _site_assets_scaffolding(folder) -> tuple[str, ...]:
|
|
331
|
+
"""SiteAssets-only SharePoint-owned entries for this web (empty otherwise).
|
|
332
|
+
|
|
333
|
+
The notebook carries the *web's* title and the site icon is site branding, so both
|
|
334
|
+
differ on the target; each side skips its own.
|
|
335
|
+
"""
|
|
336
|
+
url = (folder.server_relative_url or "").rstrip("/")
|
|
337
|
+
if not url.endswith(_SITE_ASSETS_URL_SUFFIX):
|
|
338
|
+
return ()
|
|
339
|
+
web = folder.context.web
|
|
340
|
+
if not web.properties.get("Title"):
|
|
341
|
+
web.ensure_properties(["Title"]).execute_query()
|
|
342
|
+
title = web.title
|
|
343
|
+
names = ["__siteIcon__.png"]
|
|
344
|
+
if title:
|
|
345
|
+
names.append(f"{title} Notebook")
|
|
346
|
+
return tuple(names)
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
# How far a group's owner chain is followed (a group owned by a group owned by a
|
|
350
|
+
# user is the normal depth for the default site groups).
|
|
351
|
+
_MAX_GROUP_OWNER_DEPTH = 4
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
def _principal_kind(member: Any) -> str | None:
|
|
355
|
+
"""What ``UserGroup.xml`` can express for this role-assignment member: a user by PUID
|
|
356
|
+
(``"user"``) or a site group by title (``"group"``); a distribution or security group
|
|
357
|
+
and an unprojected ``PrincipalType`` are ``None``."""
|
|
358
|
+
ptype = getattr(member, "principal_type", None)
|
|
359
|
+
if ptype == PrincipalType.User:
|
|
360
|
+
return "user"
|
|
361
|
+
if ptype == PrincipalType.SharePointGroup:
|
|
362
|
+
return "group"
|
|
363
|
+
return None
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
#: The flag that says whether a securable object owns its ACL, spelled by its declaration.
|
|
367
|
+
_UNIQUE_PERMISSIONS = _SECURABLE.name_of("has_unique_role_assignments")
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
def _principal_of(user: "User", key: int) -> Principal:
|
|
371
|
+
"""A site user as the plan spells a principal, read from the model's own fields.
|
|
372
|
+
|
|
373
|
+
The PUID is ``UserInfo.UserId.NameId`` — one member of one nested value — so the
|
|
374
|
+
model answers it (`UserIdInfo.name_id`), not a wire name spelled here.
|
|
375
|
+
"""
|
|
376
|
+
return Principal(
|
|
377
|
+
login_name=user.login_name or "",
|
|
378
|
+
system_id=normalize_puid(user.user_id.name_id),
|
|
379
|
+
display_name=user.title,
|
|
380
|
+
email=user.email,
|
|
381
|
+
user_id=key,
|
|
382
|
+
)
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
def _has_unique_role_assignments(securable, *, refresh: bool = False) -> bool:
|
|
386
|
+
"""Whether a securable has unique (broken-inheritance) role assignments.
|
|
387
|
+
|
|
388
|
+
SharePoint REST returns *inherited* role assignments too, so reading them verbatim
|
|
389
|
+
would break inheritance on every item and replicate the parent ACL. Only items with
|
|
390
|
+
unique assignments are read/applied (and compared by the verifier); inherited items
|
|
391
|
+
stay inherited on the target.
|
|
392
|
+
|
|
393
|
+
A plain entity read does not return the flag, so an object loaded *before* its ACL
|
|
394
|
+
changed keeps a stale value. The target side passes ``refresh=True``: this value
|
|
395
|
+
decides whether an ACL is applied or compared at all, so a stale ``False`` would
|
|
396
|
+
break inheritance on an item that is already unique (wiping the assignments it was
|
|
397
|
+
supposed to keep) and a stale ``False`` read back after a write would report a
|
|
398
|
+
permission mismatch for an ACL that did land.
|
|
399
|
+
"""
|
|
400
|
+
unique = getattr(securable, "has_unique_role_assignments", None)
|
|
401
|
+
if unique is not None and not refresh:
|
|
402
|
+
return bool(unique)
|
|
403
|
+
try:
|
|
404
|
+
securable.ensure_properties([_UNIQUE_PERMISSIONS], refresh=refresh).execute_query()
|
|
405
|
+
except Exception: # an unreadable flag is treated as "not unique"
|
|
406
|
+
return False
|
|
407
|
+
return bool(securable.properties.get(_UNIQUE_PERMISSIONS))
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
def _replay_role_assignments(
|
|
411
|
+
securable,
|
|
412
|
+
principals: "_TargetPrincipals",
|
|
413
|
+
permissions: list[PermissionEntry],
|
|
414
|
+
warnings: list[str],
|
|
415
|
+
label: str,
|
|
416
|
+
) -> None:
|
|
417
|
+
"""Replay an item's unique ACLs onto a target item: additive, never destructive.
|
|
418
|
+
|
|
419
|
+
Every principal is resolved on the target first (users via ``EnsureUser``,
|
|
420
|
+
groups by name, default groups by role kind). Inheritance is broken only when
|
|
421
|
+
the target item still inherits *and* at least one assignment resolved: an item
|
|
422
|
+
whose every principal is unresolvable (a cross-tenant account, an app
|
|
423
|
+
principal) would otherwise end up with an **empty** ACL — inheritance broken,
|
|
424
|
+
nobody granted — which is worse than leaving it inheriting, so that case is
|
|
425
|
+
reported and the item is left alone.
|
|
426
|
+
|
|
427
|
+
A re-run therefore adds only what is missing and never removes an assignment
|
|
428
|
+
the source does not grant. The caller executes the queued requests.
|
|
429
|
+
"""
|
|
430
|
+
resolved: list[tuple[Any, Any]] = []
|
|
431
|
+
for entry in permissions:
|
|
432
|
+
principal = principals.principal(entry.principal_name)
|
|
433
|
+
if principal is None:
|
|
434
|
+
continue
|
|
435
|
+
for role_name in entry.roles:
|
|
436
|
+
role = principals.role(role_name)
|
|
437
|
+
if role is None:
|
|
438
|
+
warnings.append(f"permissions {label}: could not resolve role {role_name!r}")
|
|
439
|
+
continue
|
|
440
|
+
resolved.append((principal, role))
|
|
441
|
+
if not resolved:
|
|
442
|
+
warnings.append(
|
|
443
|
+
f"permissions for {label!r} were not restored: no assignment could be resolved on the "
|
|
444
|
+
"target, and breaking inheritance would leave the item with an empty ACL — it still inherits"
|
|
445
|
+
)
|
|
446
|
+
return
|
|
447
|
+
if not _has_unique_role_assignments(securable, refresh=True):
|
|
448
|
+
securable.break_role_inheritance(copy_role_assignments=False, clear_sub_scopes=False)
|
|
449
|
+
for principal, role in resolved:
|
|
450
|
+
securable.add_role_assignment(principal, role)
|
|
451
|
+
|
|
452
|
+
|
|
453
|
+
def _user_login(web, user_id: Any, cache: dict[int, str | None]) -> str | None:
|
|
454
|
+
"""Resolve a target user id to its login name, cached."""
|
|
455
|
+
key = parse_int(user_id)
|
|
456
|
+
if key is None:
|
|
47
457
|
return None
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
458
|
+
if key in cache:
|
|
459
|
+
return cache[key]
|
|
460
|
+
login: str | None = None
|
|
461
|
+
try:
|
|
462
|
+
user = web.site_users.get_by_id(key).get().execute_query()
|
|
463
|
+
login = user.login_name or None
|
|
464
|
+
except Exception: # noqa: BLE001 — an unresolvable id yields no login
|
|
465
|
+
login = None
|
|
466
|
+
cache[key] = login
|
|
467
|
+
return login
|
|
468
|
+
|
|
469
|
+
|
|
470
|
+
class _DefaultGroups:
|
|
471
|
+
"""Maps a web's associated default groups (Owners/Members/Visitors).
|
|
472
|
+
|
|
473
|
+
Default groups are titled after the site (``team Owners``), so a source and
|
|
474
|
+
target in the same tenant rarely share the exact name. These groups are used
|
|
475
|
+
both to resolve a source name onto the target *and* to normalize the name to a
|
|
476
|
+
canonical ``default:<Kind>`` token so the permission diff compares like with
|
|
477
|
+
like (a renamed site still verifies as preserved). Loaded once, lazily.
|
|
478
|
+
"""
|
|
54
479
|
|
|
480
|
+
ATTRS = (
|
|
481
|
+
("Owners", "associated_owner_group"),
|
|
482
|
+
("Members", "associated_member_group"),
|
|
483
|
+
("Visitors", "associated_visitor_group"),
|
|
484
|
+
)
|
|
55
485
|
|
|
56
|
-
def
|
|
57
|
-
|
|
58
|
-
|
|
486
|
+
def __init__(self, web) -> None:
|
|
487
|
+
self._web = web
|
|
488
|
+
self._by_kind: dict[str, Any] | None = None
|
|
489
|
+
self._by_title: dict[str, str] = {}
|
|
59
490
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
491
|
+
def _load(self) -> None:
|
|
492
|
+
if self._by_kind is not None:
|
|
493
|
+
return
|
|
494
|
+
self._by_kind = {}
|
|
495
|
+
for kind, attr in self.ATTRS:
|
|
496
|
+
group = getattr(self._web, attr, None)
|
|
497
|
+
if group is None:
|
|
498
|
+
continue
|
|
499
|
+
try:
|
|
500
|
+
group.get().execute_query()
|
|
501
|
+
except Exception: # noqa: BLE001 — an unreadable group is skipped
|
|
502
|
+
continue
|
|
503
|
+
self._by_kind[kind] = group
|
|
504
|
+
title = getattr(group, "title", None) or getattr(group, "login_name", None)
|
|
505
|
+
if title:
|
|
506
|
+
self._by_title[title] = kind
|
|
507
|
+
|
|
508
|
+
def group(self, kind: str):
|
|
509
|
+
self._load()
|
|
510
|
+
return self._by_kind.get(kind) if self._by_kind else None
|
|
511
|
+
|
|
512
|
+
def normalize(self, name: str) -> str:
|
|
513
|
+
self._load()
|
|
514
|
+
kind = self._by_title.get(name)
|
|
515
|
+
return f"default:{kind}" if kind else name
|
|
516
|
+
|
|
517
|
+
|
|
518
|
+
class _TargetPrincipals:
|
|
519
|
+
"""Resolve source principals and role definitions on a target web (cached).
|
|
520
|
+
|
|
521
|
+
Users are ensured on the site (``EnsureUser``) so their numeric id can be used
|
|
522
|
+
for authorship and role assignments; groups are matched by name, and the
|
|
523
|
+
default SharePoint groups (Owners/Members/Visitors) fall back to the target
|
|
524
|
+
web's associated groups so a renamed site (``team`` -> ``team_out``) still
|
|
525
|
+
maps its role assignments. Anything that cannot be resolved is skipped with a
|
|
526
|
+
warning (same-tenant, best-effort).
|
|
63
527
|
"""
|
|
64
|
-
text = f"{getattr(exc, 'code', '') or ''} {getattr(exc, 'message', '') or ''} {exc}".lower()
|
|
65
|
-
return "spfieldvalidationexception" in text and "term store" in text
|
|
66
528
|
|
|
529
|
+
def __init__(self, web, warnings: list[str]) -> None:
|
|
530
|
+
self._web = web
|
|
531
|
+
self._warnings = warnings
|
|
532
|
+
self._users: dict[str, Any] = {}
|
|
533
|
+
self._roles: "dict[str, RoleDefinition] | None" = None
|
|
534
|
+
self._defaults = _DefaultGroups(web)
|
|
535
|
+
|
|
536
|
+
@staticmethod
|
|
537
|
+
def _strip_claims(name: str) -> str:
|
|
538
|
+
return name.rsplit("|", 1)[-1] if name.startswith("i:0#") else name
|
|
539
|
+
|
|
540
|
+
def normalize(self, name: str) -> str:
|
|
541
|
+
"""Canonical principal name (default groups collapse to ``default:<Kind>``)."""
|
|
542
|
+
return self._defaults.normalize(name)
|
|
543
|
+
|
|
544
|
+
@site_access(SiteLevel.MANAGE)
|
|
545
|
+
def user(self, login: str | None):
|
|
546
|
+
"""Ensure a user login on the target site and return its ``User`` object."""
|
|
547
|
+
if not login:
|
|
548
|
+
return None
|
|
549
|
+
login = self._strip_claims(login)
|
|
550
|
+
if login in self._users:
|
|
551
|
+
return self._users[login]
|
|
552
|
+
obj = None
|
|
553
|
+
try:
|
|
554
|
+
obj = self._web.ensure_user(login).execute_query()
|
|
555
|
+
except Exception as e: # noqa: BLE001 — an unresolvable principal is skipped
|
|
556
|
+
self._warnings.append(f"could not ensure target user {login!r}: {e}")
|
|
557
|
+
self._users[login] = obj
|
|
558
|
+
return obj
|
|
559
|
+
|
|
560
|
+
@site_access(SiteLevel.MANAGE)
|
|
561
|
+
def principal(self, name: str):
|
|
562
|
+
"""Resolve a source principal (user or group) to a target principal object."""
|
|
563
|
+
if not name:
|
|
564
|
+
return None
|
|
565
|
+
login = self._strip_claims(name)
|
|
566
|
+
if login.startswith("default:"):
|
|
567
|
+
return self._defaults.group(login.split(":", 1)[1])
|
|
568
|
+
if "@" in login:
|
|
569
|
+
return self.user(login)
|
|
570
|
+
group = None
|
|
571
|
+
try:
|
|
572
|
+
group = self._web.site_groups.get_by_name(login).get().execute_query()
|
|
573
|
+
except Exception: # noqa: BLE001 — fall back to the default groups below
|
|
574
|
+
group = None
|
|
575
|
+
if group is None:
|
|
576
|
+
kind = login.rsplit(" ", 1)[-1]
|
|
577
|
+
if kind in {"Owners", "Members", "Visitors"}:
|
|
578
|
+
group = self._defaults.group(kind)
|
|
579
|
+
if group is not None:
|
|
580
|
+
return group
|
|
581
|
+
self._warnings.append(f"could not resolve principal {name!r} on the target")
|
|
582
|
+
return None
|
|
67
583
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
584
|
+
@site_access(SiteLevel.MANAGE)
|
|
585
|
+
def role(self, name: str) -> "RoleDefinition | None":
|
|
586
|
+
"""Resolve (and cache) a target role definition by name."""
|
|
587
|
+
if self._roles is None:
|
|
588
|
+
loaded = self._web.role_definitions.get().execute_query()
|
|
589
|
+
self._roles = {rd.name: rd for rd in loaded if rd.name}
|
|
590
|
+
return self._roles.get(name)
|
|
591
|
+
|
|
592
|
+
|
|
593
|
+
def _resolve_group_ownership(
|
|
594
|
+
web: Any,
|
|
595
|
+
title: str,
|
|
596
|
+
resolve: Callable[[Any], "Principal | None"] | None,
|
|
597
|
+
) -> tuple["Principal | None", list[str]]:
|
|
598
|
+
"""A site group's owner chain: a user with a PUID, plus the groups on the way up.
|
|
599
|
+
|
|
600
|
+
``UserGroup.xml`` requires an ``Owner`` on every ``<Group>`` — live-verified: a
|
|
601
|
+
group emitted without one fails the whole ingestion job with ``The required
|
|
602
|
+
attribute 'Owner' is missing`` — and an owner may itself be a group (a team
|
|
603
|
+
site's ``Visitors`` group is owned by its ``Owners`` group, which owns itself;
|
|
604
|
+
both live-verified). The returned titles are **nearest first**; the last one is
|
|
605
|
+
owned by the returned user, or owns itself when the chain closes on itself or
|
|
606
|
+
leaves the tenant (a group created by the migration app is owned by the app,
|
|
607
|
+
which has no PUID).
|
|
608
|
+
"""
|
|
609
|
+
groups: list[str] = []
|
|
610
|
+
seen: set[str] = {title.casefold()}
|
|
611
|
+
current = title
|
|
612
|
+
for _ in range(_MAX_GROUP_OWNER_DEPTH):
|
|
613
|
+
try:
|
|
614
|
+
group = web.site_groups.get_by_name(current).get().execute_query()
|
|
615
|
+
owner = group.owner.get().execute_query()
|
|
616
|
+
except Exception: # noqa: BLE001 - best-effort: a title the site does not have ends the chain
|
|
617
|
+
break
|
|
618
|
+
if _principal_kind(owner) == "user":
|
|
619
|
+
principal = resolve(getattr(owner, "id", None)) if resolve is not None else None
|
|
620
|
+
return principal, groups
|
|
621
|
+
owner_title = getattr(owner, "title", None)
|
|
622
|
+
if not owner_title:
|
|
623
|
+
break
|
|
624
|
+
groups.append(owner_title)
|
|
625
|
+
if owner_title.casefold() in seen:
|
|
626
|
+
break
|
|
627
|
+
seen.add(owner_title.casefold())
|
|
628
|
+
current = owner_title
|
|
629
|
+
return None, groups
|
|
630
|
+
|
|
631
|
+
|
|
632
|
+
def _attach_group_owners(
|
|
633
|
+
entries: list[PermissionEntry],
|
|
634
|
+
web: Any,
|
|
635
|
+
resolve: Callable[[Any], "Principal | None"] | None,
|
|
636
|
+
cache: dict[str, tuple["Principal | None", list[str]]],
|
|
637
|
+
) -> None:
|
|
638
|
+
"""Fill ``PermissionEntry.owner``/``owner_groups`` for group entries (per title)."""
|
|
639
|
+
for entry in entries:
|
|
640
|
+
if entry.principal_type != "group":
|
|
641
|
+
continue
|
|
642
|
+
title = entry.display_name or entry.principal_name
|
|
643
|
+
if title not in cache:
|
|
644
|
+
cache[title] = _resolve_group_ownership(web, title, resolve)
|
|
645
|
+
entry.owner, entry.owner_groups = cache[title]
|
|
646
|
+
|
|
647
|
+
|
|
648
|
+
def _read_role_assignments(
|
|
649
|
+
securable,
|
|
650
|
+
resolve: Callable[[Any], "Principal | None"] | None = None,
|
|
651
|
+
normalize: Callable[[str], str] | None = None,
|
|
652
|
+
) -> list[PermissionEntry]:
|
|
653
|
+
"""Read a securable object's role assignments into ``PermissionEntry``s.
|
|
654
|
+
|
|
655
|
+
One entry per principal (user or group), keyed by login name; the target uses
|
|
656
|
+
the same shape so the permission diff compares like with like. ``normalize``
|
|
657
|
+
(when supplied) canonicalizes a principal name — default groups collapse to
|
|
658
|
+
``default:<Kind>`` so a renamed site still compares as preserved. Role names are
|
|
659
|
+
paired with their decimal ``PermMask`` (``role_masks``), the principal kind is
|
|
660
|
+
recorded in ``principal_type``, and — when ``resolve`` is supplied — a user
|
|
661
|
+
principal is enriched with its PUID/display name/email so the server-side
|
|
662
|
+
package target can emit a faithful ``UserGroup.xml`` entry. A SharePoint group
|
|
663
|
+
keeps its **title** in ``display_name`` (the normalized name would not match on
|
|
664
|
+
the target).
|
|
665
|
+
"""
|
|
666
|
+
assignments = securable.get_role_assignments().execute_query()
|
|
667
|
+
result: list[PermissionEntry] = []
|
|
668
|
+
for assignment in assignments:
|
|
669
|
+
member = assignment.member
|
|
670
|
+
name = member.login_name or member.user_principal_name
|
|
671
|
+
if not name:
|
|
672
|
+
continue
|
|
673
|
+
roles: list[str] = []
|
|
674
|
+
role_masks: dict[str, str] = {}
|
|
675
|
+
for role in assignment.role_definition_bindings:
|
|
676
|
+
if not role.name:
|
|
677
|
+
continue
|
|
678
|
+
roles.append(role.name)
|
|
679
|
+
mask = role.perm_mask
|
|
680
|
+
if mask is not None:
|
|
681
|
+
role_masks[role.name] = mask
|
|
682
|
+
entry = PermissionEntry(
|
|
683
|
+
principal_name=normalize(name) if normalize is not None else name,
|
|
684
|
+
roles=roles,
|
|
685
|
+
role_masks=role_masks,
|
|
686
|
+
principal_type=_principal_kind(member),
|
|
687
|
+
)
|
|
688
|
+
if entry.principal_type == "group":
|
|
689
|
+
entry.display_name = member.title or name
|
|
690
|
+
if resolve is not None and entry.principal_type == "user":
|
|
691
|
+
principal = resolve(getattr(member, "id", None))
|
|
692
|
+
if principal is not None:
|
|
693
|
+
entry.system_id = principal.system_id
|
|
694
|
+
entry.display_name = principal.display_name
|
|
695
|
+
entry.email = principal.email
|
|
696
|
+
result.append(entry)
|
|
697
|
+
return result
|
|
79
698
|
|
|
80
699
|
|
|
81
700
|
class SharePointListSource:
|
|
82
701
|
"""Enumerates a SharePoint list's items into record migration items."""
|
|
83
702
|
|
|
703
|
+
# Marks this source as emitting list-item attachments as extra items (see DataSource).
|
|
704
|
+
supports_attachments = True
|
|
705
|
+
|
|
706
|
+
# Marks this source as annotating Person columns with a portable login name so the
|
|
707
|
+
# target can resolve them (see ``_annotate_person_logins``).
|
|
708
|
+
supports_typed_values = True
|
|
709
|
+
|
|
710
|
+
def rebind(self) -> "SharePointListSource":
|
|
711
|
+
"""This source on its own cloned context, so another thread can drive it.
|
|
712
|
+
|
|
713
|
+
A context owns one pending-query queue: two adapters sharing it interleave
|
|
714
|
+
their deferred queries. Re-addressing the same list (by id) on a ``clone``
|
|
715
|
+
— which shares the authenticated transport — lets a session run several
|
|
716
|
+
list jobs in parallel over one connection pool. Read caches are per-run and
|
|
717
|
+
deliberately not carried over.
|
|
718
|
+
"""
|
|
719
|
+
return SharePointListSource(_cloned_list(self._list), self._select)
|
|
720
|
+
|
|
84
721
|
def __init__(self, source_list: "SPList", select: list[str] | None = None) -> None:
|
|
85
722
|
self._list = source_list
|
|
86
723
|
self._select = select
|
|
87
724
|
self._records: dict[str, dict] = {}
|
|
725
|
+
self._items: dict[str, Any] = {}
|
|
726
|
+
self._attachments: dict[str, Any] = {}
|
|
727
|
+
self._users: dict[int, Principal | None] = {}
|
|
728
|
+
# Group title -> (owner user, owner group chain); a ``<Group>`` needs both.
|
|
729
|
+
self._group_owners: dict[str, tuple[Principal | None, list[str]]] = {}
|
|
730
|
+
self._default_groups: _DefaultGroups | None = None
|
|
731
|
+
self._source_fields_cache: list[Field] | None = None
|
|
732
|
+
self._folder_records_cache: dict[str, dict] | None = None
|
|
88
733
|
self.warnings: list[str] = []
|
|
89
734
|
|
|
90
735
|
def label(self) -> str:
|
|
@@ -93,11 +738,11 @@ class SharePointListSource:
|
|
|
93
738
|
def list_items(self, progress: MigrationProgress = None) -> list[MigrationItem]:
|
|
94
739
|
try:
|
|
95
740
|
loaded = self._load_items(self._select)
|
|
96
|
-
except
|
|
97
|
-
# A full read of a list with an orphaned Managed Metadata column
|
|
98
|
-
#
|
|
99
|
-
#
|
|
100
|
-
if not
|
|
741
|
+
except SPFieldValidationException as e:
|
|
742
|
+
# A full read of a list with an orphaned Managed Metadata column fails
|
|
743
|
+
# server-side; re-enumerate without those columns. An explicit --select
|
|
744
|
+
# is honored as-is.
|
|
745
|
+
if not e.is_missing_term or self._select:
|
|
101
746
|
raise
|
|
102
747
|
self.warnings.append(
|
|
103
748
|
"Full item read failed — a Managed Metadata column references a missing term set; "
|
|
@@ -112,12 +757,29 @@ class SharePointListSource:
|
|
|
112
757
|
loaded = self._load_items(["Id", "Title"])
|
|
113
758
|
return self._project(loaded, progress)
|
|
114
759
|
|
|
115
|
-
def _load_items(self, select: list[str] | None):
|
|
760
|
+
def _load_items(self, select: list[str] | None, folder_only: bool = False):
|
|
116
761
|
items = self._list.items
|
|
117
762
|
# A full read projects ``*`` plus the system metadata so author/editor ids
|
|
118
|
-
# are captured
|
|
119
|
-
|
|
120
|
-
|
|
763
|
+
# and the unique-ACL flag are captured in one query (``*`` omits them);
|
|
764
|
+
# an explicit/safe projection is honored as-is.
|
|
765
|
+
if select is None:
|
|
766
|
+
columns = ["*", *_METADATA_SELECT]
|
|
767
|
+
# A ``*`` projection also omits multi-value Lookup ids (and returns
|
|
768
|
+
# multi-person ids only inconsistently); select each ``<name>Id``
|
|
769
|
+
# explicitly so the values are not silently lost.
|
|
770
|
+
for name in self._multi_columns():
|
|
771
|
+
key = ListItem.value_column(name)
|
|
772
|
+
if key not in columns:
|
|
773
|
+
columns.append(key)
|
|
774
|
+
# Expand attachments so they can be migrated alongside their item.
|
|
775
|
+
query = items.select(columns).expand(["AttachmentFiles"])
|
|
776
|
+
if folder_only:
|
|
777
|
+
query = query.filter("FSObjType eq 1")
|
|
778
|
+
return query.get_all().execute_query()
|
|
779
|
+
query = items.select(select)
|
|
780
|
+
if folder_only:
|
|
781
|
+
query = query.filter("FSObjType eq 1")
|
|
782
|
+
return query.get_all().execute_query()
|
|
121
783
|
|
|
122
784
|
def _safe_select(self) -> list[str]:
|
|
123
785
|
"""Fallback projection: visible, non-system columns minus Managed Metadata.
|
|
@@ -127,7 +789,7 @@ class SharePointListSource:
|
|
|
127
789
|
stays on the list's user columns only.
|
|
128
790
|
"""
|
|
129
791
|
fields = self._list.fields.get().execute_query()
|
|
130
|
-
taxonomy =
|
|
792
|
+
taxonomy = list(dict.fromkeys(f.internal_name for f in fields if f.internal_name and f.is_taxonomy))
|
|
131
793
|
self.warnings.append(f"excluded Managed Metadata column(s): {', '.join(sorted(taxonomy)) or 'none'}")
|
|
132
794
|
columns = ["Id"]
|
|
133
795
|
for field in fields:
|
|
@@ -142,34 +804,450 @@ class SharePointListSource:
|
|
|
142
804
|
return columns
|
|
143
805
|
|
|
144
806
|
def _project(self, loaded, progress: MigrationProgress) -> list[MigrationItem]:
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
# Reuse the shared record projection (raw values, no JSON coercion) so the
|
|
148
|
-
# migration payload matches the data pipeline's.
|
|
149
|
-
records = iter_records(loaded, raw=True)
|
|
807
|
+
records = self._project_records(loaded)
|
|
150
808
|
result: list[MigrationItem] = []
|
|
809
|
+
pending_attachments: list[tuple[str, Any]] = []
|
|
151
810
|
for item, record in zip(loaded, records):
|
|
152
|
-
|
|
811
|
+
item_id = str(item.id)
|
|
812
|
+
self._records[item_id] = record
|
|
813
|
+
self._items[item_id] = item
|
|
814
|
+
author_id = parse_int(record.get("AuthorId"))
|
|
815
|
+
editor_id = parse_int(record.get("EditorId"))
|
|
816
|
+
planned = MigrationItem(
|
|
817
|
+
source_path=f"{self._list.title}/{item_id}",
|
|
818
|
+
dest_path=item_id,
|
|
819
|
+
item_type="record",
|
|
820
|
+
modified=iso_or_none(record.get("Modified")),
|
|
821
|
+
created=iso_or_none(record.get("Created")),
|
|
822
|
+
)
|
|
823
|
+
# Resolve the source author/editor once so an authorship-preserving
|
|
824
|
+
# target can restore them by login name (ids are tenant-local).
|
|
825
|
+
planned.author = self._principal_for(author_id)
|
|
826
|
+
planned.editor = self._principal_for(editor_id)
|
|
827
|
+
result.append(planned)
|
|
828
|
+
for attachment in item.properties.get("AttachmentFiles") or []:
|
|
829
|
+
pending_attachments.append((item_id, attachment))
|
|
830
|
+
emit_progress(progress, done=len(result), stage="planning", items=[item])
|
|
831
|
+
# Attachments come after every record so the target can create all parent
|
|
832
|
+
# items before it resolves and uploads their attachments.
|
|
833
|
+
for item_id, attachment in pending_attachments:
|
|
834
|
+
name = getattr(attachment, "file_name", None)
|
|
835
|
+
if not name:
|
|
836
|
+
self.warnings.append(f"skipped an attachment without a file name on item {item_id}")
|
|
837
|
+
continue
|
|
838
|
+
dest_path = f"{item_id}/{name}"
|
|
839
|
+
self._attachments[dest_path] = attachment
|
|
153
840
|
result.append(
|
|
154
841
|
MigrationItem(
|
|
155
|
-
source_path=f"{self._list.title}/{
|
|
156
|
-
dest_path=
|
|
157
|
-
item_type="
|
|
158
|
-
modified=iso_or_none(record.get("Modified")),
|
|
159
|
-
created=iso_or_none(record.get("Created")),
|
|
160
|
-
author_id=parse_int(record.get("AuthorId")),
|
|
161
|
-
editor_id=parse_int(record.get("EditorId")),
|
|
842
|
+
source_path=f"{self._list.title}/{dest_path}",
|
|
843
|
+
dest_path=dest_path,
|
|
844
|
+
item_type="attachment",
|
|
162
845
|
)
|
|
163
846
|
)
|
|
164
|
-
emit_progress(progress, done=len(result), stage="planning", items=[
|
|
847
|
+
emit_progress(progress, done=len(result), stage="planning", items=[attachment])
|
|
165
848
|
return result
|
|
166
849
|
|
|
167
|
-
def
|
|
850
|
+
def _project_records(self, loaded, report_skipped: bool = True) -> list[dict]:
|
|
851
|
+
# Project every loaded property — not the collection's literal ``select``.
|
|
852
|
+
# Passing ``["*", ...]`` straight through emitted ``{"*": None, ...}``, so
|
|
853
|
+
# migrated records carried no field values at all. ``AttachmentFiles`` is a
|
|
854
|
+
# navigation property (objects, not a scalar column) and is excluded; the
|
|
855
|
+
# target writes attachments separately.
|
|
856
|
+
select = sorted(
|
|
857
|
+
{key for item in loaded for key in item.properties if key != "AttachmentFiles"} - ListItem._schema.readonly
|
|
858
|
+
)
|
|
859
|
+
records = records_from_items(list(loaded), select, set(), raw=True)
|
|
860
|
+
# A REST item create accepts scalar column values only. A full read also
|
|
861
|
+
# returns navigation properties (``ParentList``) and typed values
|
|
862
|
+
# (lookups/persons, e.g. ``PredecessorsId`` / ``AssignedTo``) whose JSON
|
|
863
|
+
# objects carry no ``__metadata.type`` here, so the create batch is
|
|
864
|
+
# rejected with ``InvalidClientQueryException``. Typed-value remapping is
|
|
865
|
+
# not supported yet, so drop them and say so rather than fail the run. The
|
|
866
|
+
# item's own links (``ParentList``, ``FieldValuesAsHtml``) carry no scalar content
|
|
867
|
+
# either, and are dropped silently: they are the navigations the model declares.
|
|
868
|
+
dropped: set[str] = set()
|
|
869
|
+
navigations: set[str] = {name for item in loaded for name in type(item)._schema.navigations}
|
|
870
|
+
multi = self._multi_columns()
|
|
871
|
+
multi_keys = _typed_keys(multi)
|
|
872
|
+
choices = self._multi_choice_columns()
|
|
873
|
+
taxonomy = self._taxonomy_columns()
|
|
874
|
+
value_objects = self._value_object_columns()
|
|
875
|
+
for record in records:
|
|
876
|
+
for key, value in list(record.items()):
|
|
877
|
+
if key in multi_keys:
|
|
878
|
+
continue # handled by ``_normalize_multi_values``
|
|
879
|
+
if key in choices:
|
|
880
|
+
continue # handled by ``_normalize_multi_choice_values``
|
|
881
|
+
if key in taxonomy:
|
|
882
|
+
continue # handled by ``_project_taxonomy_values``
|
|
883
|
+
if key in value_objects and _scalar_mapping(value) is not None:
|
|
884
|
+
record[key] = _scalar_mapping(value)
|
|
885
|
+
continue # a value object (``{"Url", "Description"}``) is writable as-is
|
|
886
|
+
if value is not None and not isinstance(value, (str, int, float, bool)):
|
|
887
|
+
record.pop(key)
|
|
888
|
+
if key not in navigations:
|
|
889
|
+
dropped.add(key)
|
|
890
|
+
if dropped:
|
|
891
|
+
self.warnings.append(
|
|
892
|
+
f"skipped non-scalar column(s) with no typed-value mapping: {', '.join(sorted(dropped))}"
|
|
893
|
+
)
|
|
894
|
+
# Structure provisioning skips hidden columns, so their typed values (and
|
|
895
|
+
# the text companion) have nowhere to land on the target; drop both rather
|
|
896
|
+
# than fail the create on an unknown column.
|
|
897
|
+
skipped = self._skipped_columns()
|
|
898
|
+
if skipped:
|
|
899
|
+
skipped_keys = _typed_keys(skipped)
|
|
900
|
+
for record in records:
|
|
901
|
+
for key in skipped_keys:
|
|
902
|
+
record.pop(key, None)
|
|
903
|
+
if report_skipped:
|
|
904
|
+
self.warnings.append(
|
|
905
|
+
f"skipped hidden typed column(s) not replicated by structure provisioning: "
|
|
906
|
+
f"{', '.join(sorted(skipped))}"
|
|
907
|
+
)
|
|
908
|
+
self._project_taxonomy_values(records)
|
|
909
|
+
self._normalize_multi_values(records)
|
|
910
|
+
self._normalize_multi_choice_values(records)
|
|
911
|
+
self._annotate_person_logins(records)
|
|
912
|
+
return records
|
|
913
|
+
|
|
914
|
+
def folder_records(self) -> dict[str, dict]:
|
|
915
|
+
"""Column values of this list's folders, keyed by their server-relative URL.
|
|
916
|
+
|
|
917
|
+
A document library's folders are list items too: a document set or a managed
|
|
918
|
+
folder carries its own column values, so a target that only created the empty
|
|
919
|
+
folder would silently lose them. The values go through the same projection as
|
|
920
|
+
an item's (typed values normalized, system and navigation columns dropped), so
|
|
921
|
+
the target can write them onto the folder's underlying item. The read is
|
|
922
|
+
narrowed to the folder's writable columns (see :meth:`folder_projection`): a
|
|
923
|
+
``*`` read also returns system and computed columns (compliance flags, link
|
|
924
|
+
filenames, version labels) that an update would reject and that carry no
|
|
925
|
+
portable value.
|
|
926
|
+
"""
|
|
927
|
+
if self._folder_records_cache is None:
|
|
928
|
+
records: dict[str, dict] = {}
|
|
929
|
+
try:
|
|
930
|
+
loaded = self._load_items(self.folder_projection(), folder_only=True)
|
|
931
|
+
except Exception as e: # noqa: BLE001 — folder values are best-effort
|
|
932
|
+
self.warnings.append(f"folder column values could not be read: {e}")
|
|
933
|
+
loaded = []
|
|
934
|
+
# The folder projection already excluded the columns an item record would
|
|
935
|
+
# report as unmigratable, so those messages would describe nothing.
|
|
936
|
+
for record in self._project_records(loaded, report_skipped=False) if loaded else []:
|
|
937
|
+
url = record.get("FileRef")
|
|
938
|
+
if not isinstance(url, str) or not url:
|
|
939
|
+
continue
|
|
940
|
+
values = _folder_record_values(record)
|
|
941
|
+
if values:
|
|
942
|
+
records[url.rstrip("/")] = values
|
|
943
|
+
self._folder_records_cache = records
|
|
944
|
+
return self._folder_records_cache
|
|
945
|
+
|
|
946
|
+
def folder_projection(self) -> list[str]:
|
|
947
|
+
"""The columns that carry a folder's own metadata, plus what typed values need.
|
|
948
|
+
|
|
949
|
+
A folder has no separate create payload: its values are read back as a record,
|
|
950
|
+
written onto the folder's item and compared the same way — so the projection
|
|
951
|
+
must include the companions the typed-value normalization reads (``<name>Id``
|
|
952
|
+
for Lookup/Person values, the hidden note of a Managed Metadata column).
|
|
953
|
+
"""
|
|
954
|
+
writable = _folder_value_columns(self._source_fields())
|
|
955
|
+
# ``FileRef`` keys the record (it is the folder's identity, not a value).
|
|
956
|
+
columns = ["ContentTypeId", "FileRef", *sorted(writable)]
|
|
957
|
+
# Lookup and Person values are carried as item ids / logins under
|
|
958
|
+
# ``<name>Id``; the column itself is carried in the record too.
|
|
959
|
+
single_lookups = {
|
|
960
|
+
field.internal_name
|
|
961
|
+
for field in self._source_fields()
|
|
962
|
+
if field.internal_name and field.is_lookup and not field.is_multi_valued
|
|
963
|
+
}
|
|
964
|
+
for name in sorted((single_lookups | self._user_columns() | set(self._multi_columns())) & writable):
|
|
965
|
+
key = ListItem.value_column(name)
|
|
966
|
+
if key not in columns:
|
|
967
|
+
columns.append(key)
|
|
968
|
+
for note in self._taxonomy_note_columns():
|
|
969
|
+
if note not in columns:
|
|
970
|
+
columns.append(note)
|
|
971
|
+
return columns
|
|
972
|
+
|
|
973
|
+
def _source_fields(self) -> list[Field]:
|
|
974
|
+
"""The source list's field definitions, read once and shared by every scan.
|
|
975
|
+
|
|
976
|
+
The projection is the columns of every typed column class, so the read does not
|
|
977
|
+
depend on whatever ``$select`` a previous caller left on the shared ``fields``
|
|
978
|
+
collection -- ``List.fields`` survives a ``capture_list_structure`` read, which
|
|
979
|
+
selects a narrower set.
|
|
980
|
+
"""
|
|
981
|
+
if self._source_fields_cache is None:
|
|
982
|
+
try:
|
|
983
|
+
self._source_fields_cache = list(self._list.fields.select(Field.scan_columns()).get().execute_query())
|
|
984
|
+
except Exception as e: # noqa: BLE001 — values stay un-remapped, never fatal
|
|
985
|
+
self.warnings.append(f"could not read the list's columns for typed-value remapping: {e}")
|
|
986
|
+
self._source_fields_cache = []
|
|
987
|
+
return self._source_fields_cache
|
|
988
|
+
|
|
989
|
+
def _taxonomy_columns(self) -> dict[str, bool]:
|
|
990
|
+
"""The source's Managed Metadata columns (internal name -> holds many values)."""
|
|
991
|
+
return {
|
|
992
|
+
field.internal_name: field.is_multi_valued
|
|
993
|
+
for field in self._source_fields()
|
|
994
|
+
if field.internal_name and field.is_taxonomy
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
def _taxonomy_note_columns(self) -> set[str]:
|
|
998
|
+
"""The hidden note companions of the source's taxonomy columns.
|
|
999
|
+
|
|
1000
|
+
The note column is what the target's write payload becomes for a multi-value
|
|
1001
|
+
column, and its name is chosen by the service; each taxonomy column names its own
|
|
1002
|
+
note, so it is answered from the column set (no request per value).
|
|
1003
|
+
"""
|
|
1004
|
+
notes: set[str] = set()
|
|
1005
|
+
for field in self._source_fields():
|
|
1006
|
+
if field.is_taxonomy:
|
|
1007
|
+
note_name = cast(TaxonomyField, field).text_field_name
|
|
1008
|
+
if note_name:
|
|
1009
|
+
notes.add(note_name)
|
|
1010
|
+
return notes
|
|
1011
|
+
|
|
1012
|
+
def _project_taxonomy_values(self, records: list[dict]) -> None:
|
|
1013
|
+
"""Project taxonomy columns as bare ``[{"TermGuid": ...}]`` term lists.
|
|
1014
|
+
|
|
1015
|
+
The target recreates the column against the same term set and rebuilds the
|
|
1016
|
+
write payload, so only the portable term id travels. The hidden note
|
|
1017
|
+
companion (if a projection happens to include it) is dropped.
|
|
1018
|
+
"""
|
|
1019
|
+
columns = self._taxonomy_columns()
|
|
1020
|
+
if not columns:
|
|
1021
|
+
return
|
|
1022
|
+
notes = self._taxonomy_note_columns()
|
|
1023
|
+
for record in records:
|
|
1024
|
+
for note in notes:
|
|
1025
|
+
record.pop(note, None)
|
|
1026
|
+
for name in columns:
|
|
1027
|
+
terms = _taxonomy_terms(record.get(name))
|
|
1028
|
+
if terms:
|
|
1029
|
+
record[name] = terms
|
|
1030
|
+
else:
|
|
1031
|
+
record.pop(name, None)
|
|
1032
|
+
|
|
1033
|
+
def _typed_columns(self) -> tuple[set[str], dict[str, str], set[str]]:
|
|
1034
|
+
"""The source's Person and multi-value columns.
|
|
1035
|
+
|
|
1036
|
+
Returns ``(single-value User columns, {multi-value column: field type},
|
|
1037
|
+
hidden typed columns)``. The field type tells a multi-lookup (remapped by
|
|
1038
|
+
item id) from a multi-person (remapped by login). Hidden typed columns are
|
|
1039
|
+
reported separately because structure provisioning does not replicate them.
|
|
1040
|
+
"""
|
|
1041
|
+
users: set[str] = set()
|
|
1042
|
+
multi: dict[str, str] = {}
|
|
1043
|
+
skipped: set[str] = set()
|
|
1044
|
+
for field in self._source_fields():
|
|
1045
|
+
internal_name = field.internal_name
|
|
1046
|
+
if not internal_name or internal_name in _PERSON_EXCLUDED:
|
|
1047
|
+
continue
|
|
1048
|
+
if not (field.is_person or field.is_lookup):
|
|
1049
|
+
continue
|
|
1050
|
+
if field.hidden is True:
|
|
1051
|
+
# Structure replay skips hidden columns, so the target never gets
|
|
1052
|
+
# them; projecting their values would fail the write.
|
|
1053
|
+
skipped.add(internal_name)
|
|
1054
|
+
elif field.is_person:
|
|
1055
|
+
if field.is_multi_valued:
|
|
1056
|
+
multi[internal_name] = "UserMulti"
|
|
1057
|
+
else:
|
|
1058
|
+
users.add(internal_name)
|
|
1059
|
+
elif field.is_multi_valued:
|
|
1060
|
+
multi[internal_name] = "LookupMulti"
|
|
1061
|
+
return users, multi, skipped
|
|
1062
|
+
|
|
1063
|
+
def _user_columns(self) -> set[str]:
|
|
1064
|
+
"""The source's single-value Person columns (internal names)."""
|
|
1065
|
+
return self._typed_columns()[0]
|
|
1066
|
+
|
|
1067
|
+
def _multi_columns(self) -> dict[str, str]:
|
|
1068
|
+
"""The source's multi-value Lookup/Person columns (internal name -> field type)."""
|
|
1069
|
+
return self._typed_columns()[1]
|
|
1070
|
+
|
|
1071
|
+
def _skipped_columns(self) -> set[str]:
|
|
1072
|
+
"""The source's hidden Person/multi-value columns (not replicated on the target)."""
|
|
1073
|
+
return self._typed_columns()[2]
|
|
1074
|
+
|
|
1075
|
+
def _multi_choice_columns(self) -> set[str]:
|
|
1076
|
+
"""The source's multi-choice columns (internal names)."""
|
|
1077
|
+
return {field.internal_name for field in self._source_fields() if field.internal_name and field.is_multi_choice}
|
|
1078
|
+
|
|
1079
|
+
def _value_object_columns(self) -> set[str]:
|
|
1080
|
+
"""The source's columns that hold a REST value object (e.g. a hyperlink)."""
|
|
1081
|
+
return {field.internal_name for field in self._source_fields() if field.internal_name and field.is_value_object}
|
|
1082
|
+
|
|
1083
|
+
def _annotate_person_logins(self, records: list[dict]) -> None:
|
|
1084
|
+
"""Replace each Person column's site-user id with the user's login name.
|
|
1085
|
+
|
|
1086
|
+
A site-user id is only meaningful inside its own site collection, so it is
|
|
1087
|
+
meaningless on the target. The login *is* portable, and the target resolves
|
|
1088
|
+
it back to (a possibly different) target site-user id with ``EnsureUser``.
|
|
1089
|
+
A person the source cannot resolve is dropped and reported rather than
|
|
1090
|
+
copied as a wrong id.
|
|
1091
|
+
"""
|
|
1092
|
+
columns = self._user_columns()
|
|
1093
|
+
if not columns:
|
|
1094
|
+
return
|
|
1095
|
+
for record in records:
|
|
1096
|
+
for name in columns:
|
|
1097
|
+
# ``<name>StringId`` is a read-only text companion holding the user
|
|
1098
|
+
# id; leaving it in the payload makes REST ignore the remapped
|
|
1099
|
+
# ``<name>Id`` and keep the source id.
|
|
1100
|
+
record.pop(ListItem.string_value_column(name), None)
|
|
1101
|
+
key = ListItem.value_column(name)
|
|
1102
|
+
user_id = parse_int(record.get(key))
|
|
1103
|
+
if user_id is None:
|
|
1104
|
+
continue
|
|
1105
|
+
principal = self._principal_for(user_id)
|
|
1106
|
+
login = principal.login_name if principal else None
|
|
1107
|
+
if login:
|
|
1108
|
+
record[key] = login
|
|
1109
|
+
else:
|
|
1110
|
+
record.pop(key, None)
|
|
1111
|
+
self.warnings.append(
|
|
1112
|
+
f"person column '{name}' value {user_id} could not be resolved to a login; left empty"
|
|
1113
|
+
)
|
|
1114
|
+
|
|
1115
|
+
def _normalize_multi_values(self, records: list[dict]) -> None:
|
|
1116
|
+
"""Project each multi-value column's ids as a plain list the target can remap.
|
|
1117
|
+
|
|
1118
|
+
A multi-person column additionally carries the portable login names instead
|
|
1119
|
+
of the site-local ids, matching the single-value Person handling.
|
|
1120
|
+
"""
|
|
1121
|
+
multi = self._multi_columns()
|
|
1122
|
+
if not multi:
|
|
1123
|
+
return
|
|
1124
|
+
for record in records:
|
|
1125
|
+
for name, field_type in multi.items():
|
|
1126
|
+
record.pop(ListItem.string_value_column(name), None)
|
|
1127
|
+
key = ListItem.value_column(name)
|
|
1128
|
+
ids = values_of(record.get(key))
|
|
1129
|
+
parsed: list[int] = []
|
|
1130
|
+
for value in ids or []:
|
|
1131
|
+
user_id = parse_int(value)
|
|
1132
|
+
if user_id is None:
|
|
1133
|
+
parsed = []
|
|
1134
|
+
break
|
|
1135
|
+
parsed.append(user_id)
|
|
1136
|
+
if not parsed:
|
|
1137
|
+
record.pop(key, None)
|
|
1138
|
+
continue
|
|
1139
|
+
if field_type == "UserMulti":
|
|
1140
|
+
logins: list[str] = []
|
|
1141
|
+
for user_id in parsed:
|
|
1142
|
+
principal = self._principal_for(user_id)
|
|
1143
|
+
login = principal.login_name if principal else None
|
|
1144
|
+
if login:
|
|
1145
|
+
logins.append(login)
|
|
1146
|
+
else:
|
|
1147
|
+
self.warnings.append(
|
|
1148
|
+
f"multi-person column '{name}' value {user_id} could not be resolved "
|
|
1149
|
+
"to a login; the value was left out"
|
|
1150
|
+
)
|
|
1151
|
+
if logins:
|
|
1152
|
+
record[key] = logins
|
|
1153
|
+
else:
|
|
1154
|
+
record.pop(key, None)
|
|
1155
|
+
else:
|
|
1156
|
+
record[key] = parsed
|
|
1157
|
+
|
|
1158
|
+
def _normalize_multi_choice_values(self, records: list[dict]) -> None:
|
|
1159
|
+
"""Project each multi-choice column as a plain list of its selected values.
|
|
1160
|
+
|
|
1161
|
+
A live read returns the collection as a positional mapping
|
|
1162
|
+
(``{0: "red", 1: "green"}``); the source records it as a bare list, which is
|
|
1163
|
+
what the checksum compares and what the target wraps for a create. An empty
|
|
1164
|
+
selection is dropped so the column reads back empty rather than as an empty
|
|
1165
|
+
collection.
|
|
1166
|
+
"""
|
|
1167
|
+
names = self._multi_choice_columns()
|
|
1168
|
+
if not names:
|
|
1169
|
+
return
|
|
1170
|
+
for record in records:
|
|
1171
|
+
for name in names:
|
|
1172
|
+
if name not in record:
|
|
1173
|
+
continue
|
|
1174
|
+
values = values_of(record.get(name))
|
|
1175
|
+
if values:
|
|
1176
|
+
record[name] = values
|
|
1177
|
+
else:
|
|
1178
|
+
record.pop(name, None)
|
|
1179
|
+
|
|
1180
|
+
def read(self, item: MigrationItem) -> object:
|
|
1181
|
+
if item.item_type == "attachment":
|
|
1182
|
+
return self._attachment_content(item)
|
|
168
1183
|
return self._records.get(item.dest_path, {})
|
|
169
1184
|
|
|
1185
|
+
def _attachment_content(self, item: MigrationItem) -> bytes:
|
|
1186
|
+
attachment = self._attachments.get(item.dest_path)
|
|
1187
|
+
if attachment is None:
|
|
1188
|
+
raise FileNotFoundError(item.source_path)
|
|
1189
|
+
return cast(bytes, attachment.get_content().execute_query().value)
|
|
1190
|
+
|
|
170
1191
|
def checksum(self, item: MigrationItem) -> str:
|
|
171
|
-
|
|
172
|
-
|
|
1192
|
+
if item.item_type == "attachment":
|
|
1193
|
+
return checksum(self._attachment_content(item))
|
|
1194
|
+
return _content_checksum(_canonicalize_taxonomy_record(self._records.get(item.dest_path, {})))
|
|
1195
|
+
|
|
1196
|
+
def read_metadata(self, item: MigrationItem) -> dict | None:
|
|
1197
|
+
"""Comparable attributes of the source item (for the post-run metadata diff)."""
|
|
1198
|
+
source_item = self._items.get(item.dest_path)
|
|
1199
|
+
if source_item is None:
|
|
1200
|
+
return None
|
|
1201
|
+
return {
|
|
1202
|
+
"created": iso_or_none(source_item.created),
|
|
1203
|
+
"modified": iso_or_none(source_item.modified),
|
|
1204
|
+
}
|
|
1205
|
+
|
|
1206
|
+
def read_authorship(self, item: MigrationItem) -> tuple[str | None, str | None]:
|
|
1207
|
+
"""The source author/editor login names (for the authorship diff)."""
|
|
1208
|
+
return (
|
|
1209
|
+
item.author.login_name if item.author else None,
|
|
1210
|
+
item.editor.login_name if item.editor else None,
|
|
1211
|
+
)
|
|
1212
|
+
|
|
1213
|
+
def _normalize_name(self, name: str) -> str:
|
|
1214
|
+
"""Canonicalize a principal name (default groups -> ``default:<Kind>``)."""
|
|
1215
|
+
context = getattr(self._list, "context", None)
|
|
1216
|
+
web = getattr(context, "web", None) if context is not None else None
|
|
1217
|
+
if web is None:
|
|
1218
|
+
return name
|
|
1219
|
+
if self._default_groups is None:
|
|
1220
|
+
self._default_groups = _DefaultGroups(web)
|
|
1221
|
+
return self._default_groups.normalize(name)
|
|
1222
|
+
|
|
1223
|
+
def read_permissions(self, item: MigrationItem) -> list[PermissionEntry]:
|
|
1224
|
+
"""Read the item's *unique* role assignments (best-effort ACL preservation).
|
|
1225
|
+
|
|
1226
|
+
Inherited items return ``[]`` — REST would otherwise report the parent's
|
|
1227
|
+
ACL, and copying it would break inheritance on every item.
|
|
1228
|
+
"""
|
|
1229
|
+
source_item = self._items.get(item.dest_path)
|
|
1230
|
+
if source_item is None or not _has_unique_role_assignments(source_item):
|
|
1231
|
+
return []
|
|
1232
|
+
entries = _read_role_assignments(source_item, resolve=self._principal_for, normalize=self._normalize_name)
|
|
1233
|
+
_attach_group_owners(entries, self._list.context.web, self._principal_for, self._group_owners)
|
|
1234
|
+
return entries
|
|
1235
|
+
|
|
1236
|
+
def _principal_for(self, user_id: Any) -> "Principal | None":
|
|
1237
|
+
"""Resolve a site-user id to a :class:`Principal` (login + PUID), cached."""
|
|
1238
|
+
key = parse_int(user_id)
|
|
1239
|
+
if key is None:
|
|
1240
|
+
return None
|
|
1241
|
+
if key in self._users:
|
|
1242
|
+
return self._users[key]
|
|
1243
|
+
principal: "Principal | None" = None
|
|
1244
|
+
try:
|
|
1245
|
+
user = self._list.context.web.site_users.get_by_id(cast("str", key)).get().execute_query()
|
|
1246
|
+
principal = _principal_of(user, key)
|
|
1247
|
+
except Exception as e: # noqa: BLE001 — a missing user degrades to no authorship
|
|
1248
|
+
self.warnings.append(f"user {key} could not be resolved: {e}")
|
|
1249
|
+
self._users[key] = principal
|
|
1250
|
+
return principal
|
|
173
1251
|
|
|
174
1252
|
def close(self) -> None:
|
|
175
1253
|
pass
|
|
@@ -180,34 +1258,171 @@ class SharePointListTarget:
|
|
|
180
1258
|
|
|
181
1259
|
Pass ``key`` (one or more natural-key columns) to make the target idempotent:
|
|
182
1260
|
a hash of those columns is stored in ``key_field`` and each payload is created
|
|
183
|
-
or (``on_conflict="
|
|
1261
|
+
or (``on_conflict="update"``) updated, so re-runs never duplicate. Without a
|
|
184
1262
|
key, records are appended and idempotency relies on the checkpoint/manifest.
|
|
1263
|
+
|
|
1264
|
+
``on_conflict`` may be passed explicitly; otherwise it is derived from
|
|
1265
|
+
``MigrationOptions.conflict_resolution`` by :meth:`configure` (the runner calls
|
|
1266
|
+
it before writes): ``OVERWRITE`` → ``"update"``, anything else → ``"skip"``.
|
|
1267
|
+
|
|
1268
|
+
Every migrated item also gets a source-id marker (``identity_field``, default
|
|
1269
|
+
``MigrationSourceId``): the default ``SKIP`` policy then recognizes items already
|
|
1270
|
+
on the target (so re-runs do not duplicate) and :meth:`list_paths` pairs source
|
|
1271
|
+
and target items for verification. Pass ``identity_field=None`` to opt out.
|
|
1272
|
+
List-item attachments are written after their parent records are flushed.
|
|
1273
|
+
|
|
1274
|
+
Pass ``content_type_map`` (a :class:`~office365.migration.map.ContentTypeMap`)
|
|
1275
|
+
when the target list's content types were recreated with fresh identifiers:
|
|
1276
|
+
every record's ``ContentTypeId`` is rewritten to the target id so items land
|
|
1277
|
+
under the recreated content type instead of the wrong (or a missing) one.
|
|
1278
|
+
|
|
1279
|
+
Pass ``structure`` (a :class:`~office365.migration.sharepoint.structure.ListStructure`
|
|
1280
|
+
from :func:`~office365.migration.sharepoint.structure.load_list_structure`) to
|
|
1281
|
+
replay a captured list shape onto this target before the first record is written —
|
|
1282
|
+
what importing an export bundle needs, since the bundle's payload is records and
|
|
1283
|
+
its columns/content types/views travel in the sidecar, not in each item.
|
|
185
1284
|
"""
|
|
186
1285
|
|
|
1286
|
+
# Marks this target as accepting list-item attachments as extra items (see DataTarget).
|
|
1287
|
+
supports_attachments = True
|
|
1288
|
+
|
|
1289
|
+
# Marks this target as remapping Lookup values across migrated lists and Person
|
|
1290
|
+
# values by login (see ``_remap_typed_values``).
|
|
1291
|
+
supports_typed_values = True
|
|
1292
|
+
|
|
1293
|
+
# Marks this target as replaying a list item's approval state (its moderation status
|
|
1294
|
+
# and comment) in the metadata write, which is the only write a list item takes it in.
|
|
1295
|
+
# Check-out and draft-version state are still not carried.
|
|
1296
|
+
supports_item_state = True
|
|
1297
|
+
|
|
1298
|
+
#: The single-item :meth:`write` only queues a create; a chunk must be flushed
|
|
1299
|
+
#: before it is durable. The runner therefore routes this target through the
|
|
1300
|
+
#: chunked path even at ``concurrency == 1``, so checkpoints never record
|
|
1301
|
+
#: ``DONE`` ahead of the actual write.
|
|
1302
|
+
deferred_writes = True
|
|
1303
|
+
|
|
1304
|
+
def rebind(self) -> "SharePointListTarget":
|
|
1305
|
+
"""This target on its own cloned context (see :meth:`SharePointListSource.rebind`)."""
|
|
1306
|
+
return SharePointListTarget(
|
|
1307
|
+
_cloned_list(self._list),
|
|
1308
|
+
key=list(self._key_columns) or None,
|
|
1309
|
+
key_field=self._key_field,
|
|
1310
|
+
on_conflict=self._on_conflict_override,
|
|
1311
|
+
identity_field=self._identity_field,
|
|
1312
|
+
content_type_map=self._content_type_map,
|
|
1313
|
+
structure=self._structure,
|
|
1314
|
+
)
|
|
1315
|
+
|
|
187
1316
|
def __init__(
|
|
188
1317
|
self,
|
|
189
1318
|
target_list: "SPList",
|
|
190
1319
|
key: str | list[str] | None = None,
|
|
191
1320
|
key_field: str = "MigrationKey",
|
|
192
|
-
on_conflict: str =
|
|
1321
|
+
on_conflict: str | None = None,
|
|
1322
|
+
identity_field: str | None = DEFAULT_LIST_IDENTITY_FIELD,
|
|
1323
|
+
content_type_map: "ContentTypeMap | None" = None,
|
|
1324
|
+
structure: "ListStructure | None" = None,
|
|
193
1325
|
) -> None:
|
|
194
1326
|
self._list = target_list
|
|
1327
|
+
self._structure = structure
|
|
1328
|
+
self._structure_applied = False
|
|
195
1329
|
self._key_columns = [key] if isinstance(key, str) else (list(key) if key else [])
|
|
196
1330
|
self._key_field = key_field
|
|
197
|
-
self.
|
|
1331
|
+
self._on_conflict_override = on_conflict
|
|
1332
|
+
self._on_conflict = on_conflict or "skip"
|
|
198
1333
|
self._target = None
|
|
199
1334
|
self._existing: dict = {}
|
|
1335
|
+
self._identity_field = identity_field
|
|
1336
|
+
self._identity_ensured = False
|
|
1337
|
+
self._identity_index: dict | None = None
|
|
1338
|
+
self._identity_index_stale = False
|
|
1339
|
+
self._identity_index_max_id = 0
|
|
1340
|
+
self._attachment_path_cache: set[str] | None = None
|
|
1341
|
+
self._content_type_map = content_type_map
|
|
1342
|
+
self._login_cache: dict[int, str | None] = {}
|
|
1343
|
+
# Author/Editor values already written by ``apply_authorship`` but pending a
|
|
1344
|
+
# shared final write (see ``apply_timestamps``); avoids the ValidateUpdateListItem
|
|
1345
|
+
# call that restores timestamps silently resetting ``Editor`` to the caller.
|
|
1346
|
+
self._pending_authorship: dict[str, dict] = {}
|
|
1347
|
+
# Approval state read from the payload, replayed in the metadata write (a
|
|
1348
|
+
# system update approves the item); same pending-then-pop lifecycle as above.
|
|
1349
|
+
self._pending_approval: dict[str, dict[str, str]] = {}
|
|
1350
|
+
self.warnings: list[str] = []
|
|
1351
|
+
self._principals_cache: _TargetPrincipals | None = None
|
|
1352
|
+
# Lookup and Person columns carry an id that is only meaningful on the
|
|
1353
|
+
# source (list-local item id / site-user id). The target remaps each to its
|
|
1354
|
+
# own value on write and back to the source value on verification.
|
|
1355
|
+
self._columns_cache: _TypedColumns | None = None
|
|
1356
|
+
self._lookup_indexes: dict[str, tuple[dict[int, int], dict[int, int]]] = {}
|
|
1357
|
+
self._unresolved_lookups: set[tuple[str, int]] = set()
|
|
1358
|
+
self._unresolved_users: set[tuple[str, str]] = set()
|
|
1359
|
+
self._user_logins: dict[int, str] | None = None
|
|
1360
|
+
# Verification reads the same written item through four hooks (checksum,
|
|
1361
|
+
# metadata, authorship, permissions). Memoizing the fresh read keeps that
|
|
1362
|
+
# to one request per item; anything that writes to the target clears it.
|
|
1363
|
+
self._fresh_reads: dict[str, "ListItem | None"] = {}
|
|
1364
|
+
|
|
1365
|
+
@property
|
|
1366
|
+
def on_conflict(self) -> str:
|
|
1367
|
+
"""The active record conflict policy (``"skip"`` or ``"update"``)."""
|
|
1368
|
+
return self._on_conflict
|
|
1369
|
+
|
|
1370
|
+
def configure(self, options) -> None:
|
|
1371
|
+
"""Derive ``on_conflict`` from ``MigrationOptions.conflict_resolution``.
|
|
1372
|
+
|
|
1373
|
+
Called by :class:`MigrationRunner` before the run, so a single
|
|
1374
|
+
``conflict_resolution`` drives both file and record targets. An
|
|
1375
|
+
``on_conflict`` passed to the constructor is honored as-is.
|
|
1376
|
+
"""
|
|
1377
|
+
if self._on_conflict_override is None:
|
|
1378
|
+
self._on_conflict = conflict_to_on_conflict(options.conflict_resolution)
|
|
1379
|
+
# A run boundary: verification reads memoized by the previous run are stale.
|
|
1380
|
+
self._fresh_reads.clear()
|
|
1381
|
+
self.apply_structure()
|
|
1382
|
+
|
|
1383
|
+
def apply_structure(self) -> list[str]:
|
|
1384
|
+
"""Replay the captured list structure onto the target list (once, idempotent).
|
|
1385
|
+
|
|
1386
|
+
A bundle carries its list shape in a sidecar, not in each record, so the
|
|
1387
|
+
columns (and views) must exist before the first record lands — otherwise a
|
|
1388
|
+
value whose column is missing is dropped by the server. Idempotent
|
|
1389
|
+
(``on_conflict="skip"``), and a no-op when no snapshot was passed.
|
|
1390
|
+
|
|
1391
|
+
Returns:
|
|
1392
|
+
The warnings from this call (empty when there is no snapshot, or when it
|
|
1393
|
+
has already been applied).
|
|
1394
|
+
"""
|
|
1395
|
+
if self._structure is None or self._structure_applied:
|
|
1396
|
+
return []
|
|
1397
|
+
self._structure_applied = True
|
|
1398
|
+
# Filling the caller's map in place is what lets a bundle's records land
|
|
1399
|
+
# under the recreated content type instead of being coerced to the default.
|
|
1400
|
+
entries = self._content_type_map.entries if self._content_type_map is not None else None
|
|
1401
|
+
warnings = provision_list_structure(self._list, self._structure, content_type_map=entries)
|
|
1402
|
+
self.warnings.extend(warnings)
|
|
1403
|
+
return warnings
|
|
200
1404
|
|
|
201
1405
|
def label(self) -> str:
|
|
202
1406
|
return f"list:{self._list.title}"
|
|
203
1407
|
|
|
204
1408
|
def exists(self, item: MigrationItem) -> bool:
|
|
205
|
-
#
|
|
206
|
-
#
|
|
207
|
-
|
|
1409
|
+
# With the identity marker, both records and attachments are recognized on a
|
|
1410
|
+
# re-run, so the default ``SKIP`` policy is genuinely idempotent. Without it
|
|
1411
|
+
# (``identity_field=None``) nothing is recognized and records append.
|
|
1412
|
+
if not self._identity_field:
|
|
1413
|
+
return False
|
|
1414
|
+
self._ensure_identity()
|
|
1415
|
+
if not self._identity_field:
|
|
1416
|
+
return False
|
|
1417
|
+
if item.item_type == "attachment":
|
|
1418
|
+
return str(item.dest_path) in set(self._attachment_paths())
|
|
1419
|
+
return self._find_by_identity(item.dest_path) is not None
|
|
208
1420
|
|
|
209
1421
|
def write(self, item: MigrationItem, payload: object) -> None:
|
|
210
|
-
|
|
1422
|
+
if item.item_type == "attachment":
|
|
1423
|
+
self._write_attachment(item, payload)
|
|
1424
|
+
return
|
|
1425
|
+
self._queue([self._record_for(item, payload)])
|
|
211
1426
|
|
|
212
1427
|
def write_many(
|
|
213
1428
|
self,
|
|
@@ -219,16 +1434,68 @@ class SharePointListTarget:
|
|
|
219
1434
|
|
|
220
1435
|
Flushing per chunk (instead of only at :meth:`commit`) keeps a large list
|
|
221
1436
|
migration memory-bounded — the queued creates never accumulate for the
|
|
222
|
-
whole run.
|
|
1437
|
+
whole run. Attachments in the chunk are written after its records are
|
|
1438
|
+
flushed, so their parent items already exist.
|
|
223
1439
|
|
|
224
1440
|
Returns:
|
|
225
1441
|
No failures (a batch failure raises; there are no partial successes).
|
|
226
1442
|
"""
|
|
227
|
-
|
|
228
|
-
|
|
1443
|
+
records: list[dict] = []
|
|
1444
|
+
attachments: list[tuple[MigrationItem, object]] = []
|
|
1445
|
+
for item, payload in zip(items, payloads):
|
|
1446
|
+
if item.item_type == "attachment":
|
|
1447
|
+
attachments.append((item, payload))
|
|
1448
|
+
else:
|
|
1449
|
+
records.append(self._record_for(item, payload))
|
|
1450
|
+
if records:
|
|
1451
|
+
self._queue(records)
|
|
1452
|
+
self._flush(len(records), concurrency)
|
|
1453
|
+
for item, payload in attachments:
|
|
1454
|
+
self._write_attachment(item, payload)
|
|
229
1455
|
return []
|
|
230
1456
|
|
|
1457
|
+
def _record_for(self, item: MigrationItem, payload: object) -> dict:
|
|
1458
|
+
"""The payload with the target content-type id and source-id marker applied."""
|
|
1459
|
+
if not isinstance(payload, dict):
|
|
1460
|
+
# Without this the cast fails as ``TypeError: object is not iterable``, which
|
|
1461
|
+
# names neither the item nor the reason: a file's bytes have no record shape.
|
|
1462
|
+
raise ValueError(
|
|
1463
|
+
f"{item.dest_path!r} is a {item.item_type!r} with a {type(payload).__name__} payload: this target "
|
|
1464
|
+
"writes list records, and a file has no record shape — migrate files into a document library"
|
|
1465
|
+
)
|
|
1466
|
+
record = dict(cast(dict, payload))
|
|
1467
|
+
if self._content_type_map:
|
|
1468
|
+
content_type_id = record.get("ContentTypeId")
|
|
1469
|
+
record["ContentTypeId"] = self._content_type_map.resolve(content_type_id)
|
|
1470
|
+
if self._identity_field:
|
|
1471
|
+
record[self._identity_field] = item.dest_path
|
|
1472
|
+
approval = {name: record[name] for name in _MODERATION_FIELDS if record.get(name) is not None}
|
|
1473
|
+
if approval:
|
|
1474
|
+
self._pending_approval[item.dest_path] = approval
|
|
1475
|
+
return record
|
|
1476
|
+
|
|
1477
|
+
def translate_record(self, record: dict) -> dict:
|
|
1478
|
+
"""A source record mapped onto this list without writing it.
|
|
1479
|
+
|
|
1480
|
+
A document library folder is a list item that already exists on the target,
|
|
1481
|
+
so its column values cannot go through the create queue: the record is mapped
|
|
1482
|
+
here (target content-type id, Lookup ids, Person logins, multi-value shapes)
|
|
1483
|
+
and applied with an update instead.
|
|
1484
|
+
"""
|
|
1485
|
+
mapped = dict(record)
|
|
1486
|
+
if self._content_type_map:
|
|
1487
|
+
resolved = self._content_type_map.resolve(mapped.get("ContentTypeId"))
|
|
1488
|
+
if resolved:
|
|
1489
|
+
mapped["ContentTypeId"] = resolved
|
|
1490
|
+
else:
|
|
1491
|
+
mapped.pop("ContentTypeId", None)
|
|
1492
|
+
self._remap_typed_values([mapped])
|
|
1493
|
+
return self._multi_value_payload(mapped)
|
|
1494
|
+
|
|
231
1495
|
def _queue(self, records: list[dict]) -> None:
|
|
1496
|
+
self._ensure_identity()
|
|
1497
|
+
self._remap_typed_values(records)
|
|
1498
|
+
records = [self._multi_value_payload(record) for record in records]
|
|
232
1499
|
if not self._key_columns:
|
|
233
1500
|
for record in records:
|
|
234
1501
|
self._list.items.queue_records([record])
|
|
@@ -252,23 +1519,682 @@ class SharePointListTarget:
|
|
|
252
1519
|
on_conflict=self._on_conflict,
|
|
253
1520
|
)
|
|
254
1521
|
|
|
1522
|
+
def _multi_id_keys(self) -> set[str]:
|
|
1523
|
+
"""The ``...Id`` record keys of the multi-value Lookup/Person columns."""
|
|
1524
|
+
names = (*self._multi_lookup_columns(), *self._multi_user_columns())
|
|
1525
|
+
return {ListItem.value_column(name) for name in names}
|
|
1526
|
+
|
|
1527
|
+
def _multi_value_payload(self, record: dict) -> dict:
|
|
1528
|
+
"""Reshape multi-value columns for the wire (``{"results": [...]}``).
|
|
1529
|
+
|
|
1530
|
+
A bare list is the semantic value the source records and the checksum work
|
|
1531
|
+
with; the wire wants every multi-value cell wrapped, on create and on MERGE
|
|
1532
|
+
alike (see :func:`_collection_payload`). A record without multi-value
|
|
1533
|
+
columns is passed through untouched.
|
|
1534
|
+
"""
|
|
1535
|
+
keys = self._multi_id_keys() | self._multi_choice_columns()
|
|
1536
|
+
if not keys:
|
|
1537
|
+
return record
|
|
1538
|
+
wrapped = dict(record)
|
|
1539
|
+
for key in keys:
|
|
1540
|
+
values = values_of(wrapped.get(key))
|
|
1541
|
+
if values is not None:
|
|
1542
|
+
wrapped[key] = _collection_payload(values)
|
|
1543
|
+
return wrapped
|
|
1544
|
+
|
|
1545
|
+
def _ensure_identity(self) -> None:
|
|
1546
|
+
"""Create the source-id marker column (once), best-effort."""
|
|
1547
|
+
if self._identity_ensured or not self._identity_field:
|
|
1548
|
+
return
|
|
1549
|
+
self._identity_ensured = True
|
|
1550
|
+
name = self._identity_field
|
|
1551
|
+
from office365.sharepoint.fields.creation_information import FieldCreationInformation
|
|
1552
|
+
from office365.sharepoint.fields.type import FieldType
|
|
1553
|
+
|
|
1554
|
+
try:
|
|
1555
|
+
self._list.fields.ensure(FieldCreationInformation(name, FieldType.Text)).execute_query()
|
|
1556
|
+
except Exception as e: # noqa: BLE001 — identity is best-effort; content still migrates
|
|
1557
|
+
self._identity_field = None
|
|
1558
|
+
self.warnings.append(f"could not create the {name!r} identity column: {e}")
|
|
1559
|
+
|
|
1560
|
+
def _columns(self) -> _TypedColumns:
|
|
1561
|
+
"""The target's typed columns.
|
|
1562
|
+
|
|
1563
|
+
Returns ``(lookup: name -> referenced list id, user names, multi-lookup:
|
|
1564
|
+
name -> referenced list id, multi-user names, taxonomy: name -> (allows
|
|
1565
|
+
many, hidden note field internal name), multi-choice names)``.
|
|
1566
|
+
"""
|
|
1567
|
+
if self._columns_cache is None:
|
|
1568
|
+
self._columns_cache = self._load_columns()
|
|
1569
|
+
return self._columns_cache
|
|
1570
|
+
|
|
1571
|
+
def _lookup_columns(self) -> dict[str, str]:
|
|
1572
|
+
return self._columns()[0]
|
|
1573
|
+
|
|
1574
|
+
def _user_columns(self) -> set[str]:
|
|
1575
|
+
return self._columns()[1]
|
|
1576
|
+
|
|
1577
|
+
def _multi_lookup_columns(self) -> dict[str, str]:
|
|
1578
|
+
return self._columns()[2]
|
|
1579
|
+
|
|
1580
|
+
def _multi_user_columns(self) -> set[str]:
|
|
1581
|
+
return self._columns()[3]
|
|
1582
|
+
|
|
1583
|
+
def _taxonomy_columns(self) -> dict[str, tuple[bool, str | None]]:
|
|
1584
|
+
return self._columns()[4]
|
|
1585
|
+
|
|
1586
|
+
def _multi_choice_columns(self) -> set[str]:
|
|
1587
|
+
return self._columns()[5]
|
|
1588
|
+
|
|
1589
|
+
def _load_columns(self) -> _TypedColumns:
|
|
1590
|
+
lookups: dict[str, str] = {}
|
|
1591
|
+
users: set[str] = set()
|
|
1592
|
+
multi_lookups: dict[str, str] = {}
|
|
1593
|
+
multi_users: set[str] = set()
|
|
1594
|
+
taxonomy: dict[str, tuple[bool, str | None]] = {}
|
|
1595
|
+
multi_choices: set[str] = set()
|
|
1596
|
+
try:
|
|
1597
|
+
fields = self._list.fields.select(Field.scan_columns()).get().execute_query()
|
|
1598
|
+
except Exception as e: # noqa: BLE001 — without columns we cannot remap; content still migrates
|
|
1599
|
+
self.warnings.append(f"could not read target columns for typed-value remapping: {e}")
|
|
1600
|
+
return lookups, users, multi_lookups, multi_users, taxonomy, multi_choices
|
|
1601
|
+
for field in fields:
|
|
1602
|
+
internal_name = field.internal_name
|
|
1603
|
+
if not internal_name or internal_name in _PERSON_EXCLUDED:
|
|
1604
|
+
continue
|
|
1605
|
+
if field.is_taxonomy:
|
|
1606
|
+
# The companion note column that carries the write payload has a name
|
|
1607
|
+
# the service chooses; the column itself resolves it from ``TextField``.
|
|
1608
|
+
taxonomy[internal_name] = (field.is_multi_valued, cast(TaxonomyField, field).text_field_name)
|
|
1609
|
+
elif field.is_person or field.is_lookup:
|
|
1610
|
+
multiple = field.is_multi_valued
|
|
1611
|
+
if field.is_person:
|
|
1612
|
+
if multiple:
|
|
1613
|
+
multi_users.add(internal_name)
|
|
1614
|
+
else:
|
|
1615
|
+
users.add(internal_name)
|
|
1616
|
+
else:
|
|
1617
|
+
list_id = normalize_guid(cast(FieldLookup, field).lookup_list)
|
|
1618
|
+
if not list_id:
|
|
1619
|
+
continue
|
|
1620
|
+
if multiple:
|
|
1621
|
+
multi_lookups[internal_name] = list_id
|
|
1622
|
+
else:
|
|
1623
|
+
lookups[internal_name] = list_id
|
|
1624
|
+
elif field.is_multi_choice:
|
|
1625
|
+
multi_choices.add(internal_name)
|
|
1626
|
+
return lookups, users, multi_lookups, multi_users, taxonomy, multi_choices
|
|
1627
|
+
|
|
1628
|
+
def _lookup_index(self, target_list_id: str) -> tuple[dict[int, int], dict[int, int]]:
|
|
1629
|
+
"""``(source id -> target id, target id -> source id)`` for a referenced list."""
|
|
1630
|
+
cached = self._lookup_indexes.get(target_list_id)
|
|
1631
|
+
if cached is not None:
|
|
1632
|
+
return cached
|
|
1633
|
+
forward: dict[int, int] = {}
|
|
1634
|
+
backward: dict[int, int] = {}
|
|
1635
|
+
self._flush_pending()
|
|
1636
|
+
try:
|
|
1637
|
+
referenced = self._list.context.web.lists.get_by_id(target_list_id)
|
|
1638
|
+
items = referenced.items.select(["Id", DEFAULT_LIST_IDENTITY_FIELD]).get_all().execute_query()
|
|
1639
|
+
except Exception as e: # noqa: BLE001 — an unreadable referenced list is reported, not fatal
|
|
1640
|
+
self.warnings.append(f"lookup target list {target_list_id} could not be read: {e}")
|
|
1641
|
+
items = []
|
|
1642
|
+
for referenced_item in items:
|
|
1643
|
+
source_id = parse_int(referenced_item.properties.get(DEFAULT_LIST_IDENTITY_FIELD))
|
|
1644
|
+
target_id = parse_int(referenced_item.id)
|
|
1645
|
+
if source_id is None or target_id is None:
|
|
1646
|
+
continue
|
|
1647
|
+
forward[source_id] = target_id
|
|
1648
|
+
backward[target_id] = source_id
|
|
1649
|
+
self._lookup_indexes[target_list_id] = (forward, backward)
|
|
1650
|
+
return forward, backward
|
|
1651
|
+
|
|
1652
|
+
def _remap_typed_values(self, records: list[dict]) -> None:
|
|
1653
|
+
"""Translate each record's source lookup/person ids into target values.
|
|
1654
|
+
|
|
1655
|
+
A lookup references another migrated list (matched on its items' source-id
|
|
1656
|
+
marker); a person carries the *login name* the source annotated, resolved
|
|
1657
|
+
here with ``EnsureUser``. Either value with no match is dropped and reported
|
|
1658
|
+
once rather than written as a wrong id.
|
|
1659
|
+
"""
|
|
1660
|
+
self._remap_lookups(records)
|
|
1661
|
+
self._remap_users(records)
|
|
1662
|
+
self._remap_multi_lookups(records)
|
|
1663
|
+
self._remap_multi_users(records)
|
|
1664
|
+
self._remap_taxonomies(records)
|
|
1665
|
+
|
|
1666
|
+
def _remap_lookups(self, records: list[dict]) -> None:
|
|
1667
|
+
columns = self._lookup_columns()
|
|
1668
|
+
if not columns:
|
|
1669
|
+
return
|
|
1670
|
+
for record in records:
|
|
1671
|
+
for internal_name, target_list_id in columns.items():
|
|
1672
|
+
key = ListItem.value_column(internal_name)
|
|
1673
|
+
source_id = parse_int(record.get(key))
|
|
1674
|
+
if source_id is None:
|
|
1675
|
+
continue
|
|
1676
|
+
forward, _ = self._lookup_index(target_list_id)
|
|
1677
|
+
target_id = forward.get(source_id)
|
|
1678
|
+
if target_id is None:
|
|
1679
|
+
record.pop(key, None)
|
|
1680
|
+
self._report_unresolved_lookup(internal_name, source_id)
|
|
1681
|
+
continue
|
|
1682
|
+
record[key] = target_id
|
|
1683
|
+
|
|
1684
|
+
def _remap_users(self, records: list[dict]) -> None:
|
|
1685
|
+
columns = self._user_columns()
|
|
1686
|
+
if not columns:
|
|
1687
|
+
return
|
|
1688
|
+
for record in records:
|
|
1689
|
+
for internal_name in columns:
|
|
1690
|
+
key = ListItem.value_column(internal_name)
|
|
1691
|
+
login = record.get(key)
|
|
1692
|
+
if not isinstance(login, str) or not login:
|
|
1693
|
+
continue
|
|
1694
|
+
user = self._principals().user(login)
|
|
1695
|
+
if user is None or getattr(user, "id", None) is None:
|
|
1696
|
+
record.pop(key, None)
|
|
1697
|
+
self._report_unresolved_user(internal_name, login)
|
|
1698
|
+
continue
|
|
1699
|
+
record[key] = user.id
|
|
1700
|
+
|
|
1701
|
+
def _remap_multi_lookups(self, records: list[dict]) -> None:
|
|
1702
|
+
columns = self._multi_lookup_columns()
|
|
1703
|
+
if not columns:
|
|
1704
|
+
return
|
|
1705
|
+
for record in records:
|
|
1706
|
+
for internal_name, target_list_id in columns.items():
|
|
1707
|
+
key = ListItem.value_column(internal_name)
|
|
1708
|
+
source_ids = values_of(record.get(key))
|
|
1709
|
+
if not source_ids:
|
|
1710
|
+
continue
|
|
1711
|
+
forward, _ = self._lookup_index(target_list_id)
|
|
1712
|
+
target_ids: list[int] = []
|
|
1713
|
+
for value in source_ids:
|
|
1714
|
+
source_id = parse_int(value)
|
|
1715
|
+
target_id = forward.get(source_id) if source_id is not None else None
|
|
1716
|
+
if target_id is None:
|
|
1717
|
+
if source_id is not None:
|
|
1718
|
+
self._report_unresolved_lookup(internal_name, source_id)
|
|
1719
|
+
continue
|
|
1720
|
+
target_ids.append(target_id)
|
|
1721
|
+
if target_ids:
|
|
1722
|
+
record[key] = target_ids
|
|
1723
|
+
else:
|
|
1724
|
+
record.pop(key, None)
|
|
1725
|
+
|
|
1726
|
+
def _remap_multi_users(self, records: list[dict]) -> None:
|
|
1727
|
+
columns = self._multi_user_columns()
|
|
1728
|
+
if not columns:
|
|
1729
|
+
return
|
|
1730
|
+
for record in records:
|
|
1731
|
+
for internal_name in columns:
|
|
1732
|
+
key = ListItem.value_column(internal_name)
|
|
1733
|
+
logins = record.get(key)
|
|
1734
|
+
if not isinstance(logins, (list, tuple)) or not logins:
|
|
1735
|
+
continue
|
|
1736
|
+
target_ids: list[int] = []
|
|
1737
|
+
for login in logins:
|
|
1738
|
+
user = self._principals().user(login) if isinstance(login, str) and login else None
|
|
1739
|
+
user_id = getattr(user, "id", None)
|
|
1740
|
+
if user is None or user_id is None:
|
|
1741
|
+
self._report_unresolved_user(internal_name, str(login))
|
|
1742
|
+
continue
|
|
1743
|
+
target_ids.append(user_id)
|
|
1744
|
+
if target_ids:
|
|
1745
|
+
record[key] = target_ids
|
|
1746
|
+
else:
|
|
1747
|
+
record.pop(key, None)
|
|
1748
|
+
|
|
1749
|
+
def _remap_taxonomies(self, records: list[dict]) -> None:
|
|
1750
|
+
"""Write taxonomy terms in the form SharePoint accepts on the target.
|
|
1751
|
+
|
|
1752
|
+
A single-value column takes :class:`TaxonomyFieldValue` itself — the library
|
|
1753
|
+
type, not a dictionary spelled like one — so its declared type name and
|
|
1754
|
+
``WssId = -1`` default are answered by the value. A multi-value column only
|
|
1755
|
+
accepts the hidden note companion's text form ``-1;#Label|guid;#...``
|
|
1756
|
+
(typed-collection JSON is rejected server-side). The term id is authoritative,
|
|
1757
|
+
so the label is left unset. A column with no target counterpart is dropped and
|
|
1758
|
+
reported rather than sent as an unknown property.
|
|
1759
|
+
"""
|
|
1760
|
+
columns = self._taxonomy_columns()
|
|
1761
|
+
unresolved: set[str] = set()
|
|
1762
|
+
for record in records:
|
|
1763
|
+
for internal_name, value in list(record.items()):
|
|
1764
|
+
if not _is_taxonomy_value(value):
|
|
1765
|
+
continue
|
|
1766
|
+
guids = _taxonomy_guids(value)
|
|
1767
|
+
column = columns.get(internal_name)
|
|
1768
|
+
if column is None:
|
|
1769
|
+
record.pop(internal_name, None)
|
|
1770
|
+
unresolved.add(internal_name)
|
|
1771
|
+
continue
|
|
1772
|
+
allow_many, note_name = column
|
|
1773
|
+
if not guids:
|
|
1774
|
+
record.pop(internal_name, None)
|
|
1775
|
+
continue
|
|
1776
|
+
if allow_many and note_name:
|
|
1777
|
+
record.pop(internal_name, None)
|
|
1778
|
+
values = [TaxonomyFieldValue(TermGuid=g) for g in guids]
|
|
1779
|
+
record[note_name] = str(TaxonomyFieldValueCollection(values))
|
|
1780
|
+
elif allow_many:
|
|
1781
|
+
record.pop(internal_name, None)
|
|
1782
|
+
unresolved.add(internal_name)
|
|
1783
|
+
else:
|
|
1784
|
+
record[internal_name] = TaxonomyFieldValue(TermGuid=guids[0])
|
|
1785
|
+
if unresolved:
|
|
1786
|
+
self.warnings.append(
|
|
1787
|
+
f"taxonomy column(s) not available on the target, values left empty: {', '.join(sorted(unresolved))}"
|
|
1788
|
+
)
|
|
1789
|
+
|
|
1790
|
+
def _report_unresolved_user(self, internal_name: str, login: str) -> None:
|
|
1791
|
+
marker = (internal_name, login)
|
|
1792
|
+
if marker in self._unresolved_users:
|
|
1793
|
+
return
|
|
1794
|
+
self._unresolved_users.add(marker)
|
|
1795
|
+
self.warnings.append(
|
|
1796
|
+
f"person column '{internal_name}' login {login!r} could not be resolved on the target; "
|
|
1797
|
+
"the value was left empty"
|
|
1798
|
+
)
|
|
1799
|
+
|
|
1800
|
+
def _target_user_logins(self) -> dict[int, str]:
|
|
1801
|
+
"""The target web's ``{site-user id: login name}`` map (cached)."""
|
|
1802
|
+
if self._user_logins is None:
|
|
1803
|
+
mapping: dict[int, str] = {}
|
|
1804
|
+
try:
|
|
1805
|
+
for site_user in self._list.context.web.site_users.get().execute_query():
|
|
1806
|
+
user_id = parse_int(site_user.id)
|
|
1807
|
+
if user_id is not None and site_user.login_name:
|
|
1808
|
+
mapping[user_id] = site_user.login_name
|
|
1809
|
+
except Exception as e: # noqa: BLE001 — without the map persons are left as ids
|
|
1810
|
+
self.warnings.append(f"could not read target site users for person verification: {e}")
|
|
1811
|
+
self._user_logins = mapping
|
|
1812
|
+
return self._user_logins
|
|
1813
|
+
|
|
1814
|
+
def _report_unresolved_lookup(self, internal_name: str, source_id: int) -> None:
|
|
1815
|
+
marker = (internal_name, source_id)
|
|
1816
|
+
if marker in self._unresolved_lookups:
|
|
1817
|
+
return
|
|
1818
|
+
self._unresolved_lookups.add(marker)
|
|
1819
|
+
self.warnings.append(
|
|
1820
|
+
f"lookup column '{internal_name}' value {source_id} could not be mapped to a target item "
|
|
1821
|
+
"(the referenced list's items were not migrated first); the value was left empty"
|
|
1822
|
+
)
|
|
1823
|
+
|
|
1824
|
+
def _canonicalize_lookups(self, properties: dict) -> None:
|
|
1825
|
+
"""Rewrite target lookup ids back to the source ids (symmetric to the write).
|
|
1826
|
+
|
|
1827
|
+
The source checksum holds the source item id; the target's fresh item holds
|
|
1828
|
+
the target id. Mapping the latter back lets the content spot-check compare
|
|
1829
|
+
the two like for like instead of reporting a false mismatch.
|
|
1830
|
+
"""
|
|
1831
|
+
for internal_name, target_list_id in self._lookup_columns().items():
|
|
1832
|
+
key = ListItem.value_column(internal_name)
|
|
1833
|
+
target_id = parse_int(properties.get(key))
|
|
1834
|
+
if target_id is None:
|
|
1835
|
+
continue
|
|
1836
|
+
_, backward = self._lookup_index(target_list_id)
|
|
1837
|
+
source_id = backward.get(target_id)
|
|
1838
|
+
if source_id is not None:
|
|
1839
|
+
properties[key] = source_id
|
|
1840
|
+
for internal_name, target_list_id in self._multi_lookup_columns().items():
|
|
1841
|
+
key = ListItem.value_column(internal_name)
|
|
1842
|
+
target_ids = values_of(properties.get(key))
|
|
1843
|
+
if not target_ids:
|
|
1844
|
+
continue
|
|
1845
|
+
_, backward = self._lookup_index(target_list_id)
|
|
1846
|
+
mapped: list[Any] = []
|
|
1847
|
+
for value in target_ids:
|
|
1848
|
+
target_id = parse_int(value)
|
|
1849
|
+
mapped.append(backward.get(target_id, value) if target_id is not None else value)
|
|
1850
|
+
properties[key] = mapped
|
|
1851
|
+
|
|
1852
|
+
def _canonicalize_users(self, properties: dict) -> None:
|
|
1853
|
+
"""Rewrite target person ids back to the login names the source recorded."""
|
|
1854
|
+
columns = self._user_columns()
|
|
1855
|
+
logins = self._target_user_logins() if columns or self._multi_user_columns() else {}
|
|
1856
|
+
for internal_name in columns:
|
|
1857
|
+
key = ListItem.value_column(internal_name)
|
|
1858
|
+
user_id = parse_int(properties.get(key))
|
|
1859
|
+
if user_id is None:
|
|
1860
|
+
continue
|
|
1861
|
+
login = logins.get(user_id)
|
|
1862
|
+
if login is not None:
|
|
1863
|
+
properties[key] = login
|
|
1864
|
+
for internal_name in self._multi_user_columns():
|
|
1865
|
+
key = ListItem.value_column(internal_name)
|
|
1866
|
+
user_ids = values_of(properties.get(key))
|
|
1867
|
+
if not user_ids:
|
|
1868
|
+
continue
|
|
1869
|
+
mapped_logins: list[Any] = []
|
|
1870
|
+
for value in user_ids:
|
|
1871
|
+
user_id = parse_int(value)
|
|
1872
|
+
mapped_logins.append(logins.get(user_id, value) if user_id is not None else value)
|
|
1873
|
+
properties[key] = mapped_logins
|
|
1874
|
+
|
|
1875
|
+
def _canonicalize_multi_choices(self, properties: dict) -> None:
|
|
1876
|
+
"""Reduce a read-back multi-choice cell to the bare list the source records.
|
|
1877
|
+
|
|
1878
|
+
A live read returns the selected values as a positional mapping
|
|
1879
|
+
(``{0: "red", 1: "green"}``); the source checksum holds a bare list, so the
|
|
1880
|
+
two are only comparable after the same projection.
|
|
1881
|
+
"""
|
|
1882
|
+
for internal_name in self._multi_choice_columns():
|
|
1883
|
+
if internal_name not in properties:
|
|
1884
|
+
continue
|
|
1885
|
+
values = values_of(properties.get(internal_name))
|
|
1886
|
+
if values:
|
|
1887
|
+
properties[internal_name] = values
|
|
1888
|
+
else:
|
|
1889
|
+
properties.pop(internal_name, None)
|
|
1890
|
+
|
|
1891
|
+
def _write_attachment(self, item: MigrationItem, payload: object) -> None:
|
|
1892
|
+
if not self._identity_field:
|
|
1893
|
+
raise NotImplementedError("attachments need the identity column, which could not be created")
|
|
1894
|
+
parent_id, _, filename = str(item.dest_path).partition("/")
|
|
1895
|
+
if not filename:
|
|
1896
|
+
raise ValueError(f"invalid attachment destination {item.dest_path!r}")
|
|
1897
|
+
self._flush_pending()
|
|
1898
|
+
parent = self._find_by_identity(parent_id)
|
|
1899
|
+
if parent is None:
|
|
1900
|
+
raise ValueError(f"no target item for source id {parent_id!r}; cannot attach {filename!r}")
|
|
1901
|
+
content = payload if isinstance(payload, bytes) else str(payload).encode("utf-8")
|
|
1902
|
+
parent.attachment_files.add({"filename": filename, "content": content}).execute_query()
|
|
1903
|
+
if self._attachment_path_cache is not None:
|
|
1904
|
+
self._attachment_path_cache.add(str(item.dest_path))
|
|
1905
|
+
|
|
1906
|
+
def _flush_pending(self) -> None:
|
|
1907
|
+
if self._list.context.has_pending_request:
|
|
1908
|
+
self._flush(DEFAULT_BATCH_SIZE, 1)
|
|
1909
|
+
|
|
1910
|
+
def _find_by_identity(self, source_id: str):
|
|
1911
|
+
if self._identity_index is None or self._identity_index_stale:
|
|
1912
|
+
self._refresh_identity_index()
|
|
1913
|
+
return self._identity_index.get(str(source_id)) if self._identity_index else None
|
|
1914
|
+
|
|
1915
|
+
def _refresh_identity_index(self) -> None:
|
|
1916
|
+
"""Load, or incrementally extend, the source-id -> target item map.
|
|
1917
|
+
|
|
1918
|
+
After a chunk is flushed only the newly created items are re-read
|
|
1919
|
+
(``Id gt <max>``) instead of re-scanning the whole list, so refreshing the
|
|
1920
|
+
index per chunk stays linear rather than O(n²).
|
|
1921
|
+
"""
|
|
1922
|
+
if not self._identity_field:
|
|
1923
|
+
self._identity_index = {}
|
|
1924
|
+
return
|
|
1925
|
+
if self._identity_index is not None and self._identity_index_max_id > 0:
|
|
1926
|
+
self._index_identity_items(self._query_identity_items(f"Id gt {self._identity_index_max_id}"))
|
|
1927
|
+
return
|
|
1928
|
+
self._identity_index = {}
|
|
1929
|
+
self._identity_index_max_id = 0
|
|
1930
|
+
self._index_identity_items(self._query_identity_items())
|
|
1931
|
+
|
|
1932
|
+
def _query_identity_items(self, filter_expr: str | None = None):
|
|
1933
|
+
# A read query would implicitly flush any queued writes on this context;
|
|
1934
|
+
# flush them explicitly first so the cached index stays consistent.
|
|
1935
|
+
self._flush_pending()
|
|
1936
|
+
columns = ["Id", self._identity_field, "Created", "Modified", *_LIST_ITEM.columns_of_facet(AUTHORSHIP)]
|
|
1937
|
+
query = self._list.items.select(columns)
|
|
1938
|
+
if filter_expr:
|
|
1939
|
+
query = query.filter(filter_expr)
|
|
1940
|
+
return query.get_all().execute_query()
|
|
1941
|
+
|
|
1942
|
+
def _index_identity_items(self, items) -> None:
|
|
1943
|
+
if self._identity_index is None:
|
|
1944
|
+
self._identity_index = {}
|
|
1945
|
+
for target_item in items:
|
|
1946
|
+
value = target_item.properties.get(self._identity_field)
|
|
1947
|
+
if value is None:
|
|
1948
|
+
continue
|
|
1949
|
+
self._identity_index[str(value)] = target_item
|
|
1950
|
+
item_id = parse_int(getattr(target_item, "id", None))
|
|
1951
|
+
if item_id is not None and item_id > self._identity_index_max_id:
|
|
1952
|
+
self._identity_index_max_id = item_id
|
|
1953
|
+
self._identity_index_stale = False
|
|
1954
|
+
|
|
1955
|
+
def _attachment_paths(self) -> list[str]:
|
|
1956
|
+
if not self._identity_field:
|
|
1957
|
+
return []
|
|
1958
|
+
if self._attachment_path_cache is None:
|
|
1959
|
+
self._attachment_path_cache = set(self._query_attachment_paths())
|
|
1960
|
+
return list(self._attachment_path_cache)
|
|
1961
|
+
|
|
1962
|
+
def _query_attachment_paths(self) -> list[str]:
|
|
1963
|
+
if not self._identity_field:
|
|
1964
|
+
return []
|
|
1965
|
+
self._flush_pending()
|
|
1966
|
+
items = (
|
|
1967
|
+
self._list.items.select(["Id", self._identity_field]).expand(["AttachmentFiles"]).get_all().execute_query()
|
|
1968
|
+
)
|
|
1969
|
+
paths: list[str] = []
|
|
1970
|
+
for target_item in items:
|
|
1971
|
+
value = target_item.properties.get(self._identity_field)
|
|
1972
|
+
if value is None:
|
|
1973
|
+
continue
|
|
1974
|
+
for attachment in target_item.properties.get("AttachmentFiles") or []:
|
|
1975
|
+
name = getattr(attachment, "file_name", None)
|
|
1976
|
+
if name:
|
|
1977
|
+
paths.append(f"{value}/{name}")
|
|
1978
|
+
return paths
|
|
1979
|
+
|
|
1980
|
+
@site_access(SiteLevel.READ)
|
|
255
1981
|
def list_paths(self) -> list[str]:
|
|
256
|
-
|
|
1982
|
+
if not self._identity_field:
|
|
1983
|
+
return [str(i.id) for i in self._list.items.get().execute_query()]
|
|
1984
|
+
# An empty source list never queues a write, so the marker column was not
|
|
1985
|
+
# created during migration; ensure it before verification queries it.
|
|
1986
|
+
self._ensure_identity()
|
|
1987
|
+
if not self._identity_field:
|
|
1988
|
+
return [str(i.id) for i in self._list.items.get().execute_query()]
|
|
1989
|
+
if self._identity_index is None or self._identity_index_stale:
|
|
1990
|
+
self._refresh_identity_index()
|
|
1991
|
+
index = self._identity_index or {}
|
|
1992
|
+
return list(index.keys()) + self._attachment_paths()
|
|
257
1993
|
|
|
258
1994
|
def checksum(self, item: MigrationItem) -> str:
|
|
259
|
-
|
|
1995
|
+
if item.item_type == "attachment":
|
|
1996
|
+
return self._attachment_checksum(item)
|
|
1997
|
+
target_item = self._fresh_target_item(item)
|
|
1998
|
+
if target_item is None:
|
|
1999
|
+
return ""
|
|
2000
|
+
return self.content_checksum(dict(target_item.properties))
|
|
2001
|
+
|
|
2002
|
+
def content_checksum(self, properties: dict) -> str:
|
|
2003
|
+
"""The comparable content hash of an item's read-back properties.
|
|
2004
|
+
|
|
2005
|
+
Used for both a written record and a folder's item, so a library folder's
|
|
2006
|
+
column values can be reconciled against the source record that produced them.
|
|
2007
|
+
"""
|
|
2008
|
+
properties = _canonicalize_taxonomy_record(dict(properties))
|
|
2009
|
+
self._canonicalize_lookups(properties)
|
|
2010
|
+
self._canonicalize_users(properties)
|
|
2011
|
+
self._canonicalize_multi_choices(properties)
|
|
2012
|
+
extra = {self._identity_field} if self._identity_field else set()
|
|
2013
|
+
# The hidden taxonomy note companion is not part of the source's portable
|
|
2014
|
+
# content; it is verified through the term ids on the column itself.
|
|
2015
|
+
extra.update(note for _, note in self._taxonomy_columns().values() if note)
|
|
2016
|
+
# The target derives its own ``<name>StringId`` companion; it is not part of
|
|
2017
|
+
# the source's canonical content.
|
|
2018
|
+
extra.update(ListItem.string_value_column(name) for name in self._user_columns())
|
|
2019
|
+
extra.update(ListItem.string_value_column(name) for name in self._multi_user_columns())
|
|
2020
|
+
return _content_checksum(properties, frozenset(extra))
|
|
2021
|
+
|
|
2022
|
+
def _attachment_checksum(self, item: MigrationItem) -> str:
|
|
2023
|
+
parent_id, _, filename = str(item.dest_path).partition("/")
|
|
2024
|
+
parent = self._find_by_identity(parent_id)
|
|
2025
|
+
if parent is None:
|
|
2026
|
+
return ""
|
|
2027
|
+
try:
|
|
2028
|
+
data = parent.attachment_files.get_by_filename(filename).get_content().execute_query().value
|
|
2029
|
+
except Exception: # noqa: BLE001 — a missing/unreadable attachment is unverifiable
|
|
2030
|
+
return ""
|
|
2031
|
+
return checksum(data) if data else ""
|
|
260
2032
|
|
|
261
2033
|
def commit(self, options=None) -> None:
|
|
262
2034
|
"""Flush any remaining queued record writes through an OData batch."""
|
|
263
2035
|
batch_size = getattr(options, "batch_size", None) or DEFAULT_BATCH_SIZE
|
|
264
2036
|
concurrency = getattr(options, "concurrency", None) or 1
|
|
265
2037
|
self._flush(batch_size, concurrency)
|
|
2038
|
+
self._pending_authorship.clear()
|
|
2039
|
+
self._pending_approval.clear()
|
|
266
2040
|
|
|
267
2041
|
def _flush(self, batch_size: int, concurrency: int) -> None:
|
|
268
2042
|
if not self._list.context.has_pending_request:
|
|
269
2043
|
return
|
|
270
2044
|
self._list.context.execute_batch(items_per_batch=batch_size, concurrency=concurrency)
|
|
2045
|
+
self._fresh_reads.clear()
|
|
271
2046
|
self._list.items.clear()
|
|
2047
|
+
# Records were just created/updated, so the cached source-id index needs an
|
|
2048
|
+
# incremental refresh (new items only) before the next lookup.
|
|
2049
|
+
if self._identity_index is not None:
|
|
2050
|
+
self._identity_index_stale = True
|
|
2051
|
+
|
|
2052
|
+
def _principals(self) -> _TargetPrincipals:
|
|
2053
|
+
"""The (lazily built) target principal/role resolver."""
|
|
2054
|
+
if self._principals_cache is None:
|
|
2055
|
+
self._principals_cache = _TargetPrincipals(self._list.context.web, self.warnings)
|
|
2056
|
+
return self._principals_cache
|
|
2057
|
+
|
|
2058
|
+
def _target_item(self, item: MigrationItem):
|
|
2059
|
+
"""The written target item for a record (``None`` for attachments/folders)."""
|
|
2060
|
+
if item.item_type == "attachment":
|
|
2061
|
+
return None
|
|
2062
|
+
return self._find_by_identity(item.dest_path)
|
|
2063
|
+
|
|
2064
|
+
@site_access(SiteLevel.WRITE)
|
|
2065
|
+
def apply_timestamps(self, item: MigrationItem) -> None:
|
|
2066
|
+
"""Best-effort: restore ``Created``/``Modified`` on the written item.
|
|
2067
|
+
|
|
2068
|
+
Authorship and approval state resolved for the same item are folded in, so all of
|
|
2069
|
+
them land atomically in one system update.
|
|
2070
|
+
"""
|
|
2071
|
+
self._restore_fidelity(item, timestamps=True)
|
|
2072
|
+
|
|
2073
|
+
def _restore_fidelity(self, item: MigrationItem, timestamps: bool) -> None:
|
|
2074
|
+
"""One system update carrying every fidelity value this item has.
|
|
2075
|
+
|
|
2076
|
+
``timestamps=False`` is the write :meth:`finalize_fidelity` makes when the item's
|
|
2077
|
+
dates are not preserved: the values are already absent, so what is left is the
|
|
2078
|
+
authorship and approval state, and they still cost one request rather than two.
|
|
2079
|
+
"""
|
|
2080
|
+
target_item = self._target_item(item)
|
|
2081
|
+
if target_item is None:
|
|
2082
|
+
return
|
|
2083
|
+
authorship = self._pending_authorship.pop(item.dest_path, {})
|
|
2084
|
+
approval = self._pending_approval.pop(item.dest_path, {})
|
|
2085
|
+
created = iso_z(item.created) if timestamps else None
|
|
2086
|
+
modified = iso_z(item.modified) if timestamps else None
|
|
2087
|
+
if not (created or modified or authorship or approval):
|
|
2088
|
+
return
|
|
2089
|
+
self._fresh_reads.pop(str(item.dest_path), None)
|
|
2090
|
+
result = target_item.restore_fidelity(
|
|
2091
|
+
created=created,
|
|
2092
|
+
modified=modified,
|
|
2093
|
+
author=authorship.get("Author"),
|
|
2094
|
+
editor=authorship.get("Editor"),
|
|
2095
|
+
approval=approval,
|
|
2096
|
+
new_document_update=True,
|
|
2097
|
+
).execute_query()
|
|
2098
|
+
_report_rejected_fields(result, self.warnings, f"timestamps {item.dest_path}")
|
|
2099
|
+
|
|
2100
|
+
def apply_authorship(self, item: MigrationItem) -> None:
|
|
2101
|
+
"""Best-effort: resolve ``Author``/``Editor`` and cache them for one write.
|
|
2102
|
+
|
|
2103
|
+
A principal is applied only when its login name resolves to a target user
|
|
2104
|
+
(``EnsureUser``); unresolved principals are skipped (same-tenant only).
|
|
2105
|
+
|
|
2106
|
+
Nothing is sent here. ``ValidateUpdateListItem`` is one request per call, so a
|
|
2107
|
+
separate authorship write followed by the timestamps write would cost every
|
|
2108
|
+
preserved item two system updates. The resolved principals are cached and
|
|
2109
|
+
written by :meth:`apply_timestamps`, or by :meth:`finalize_fidelity` when
|
|
2110
|
+
timestamps are not preserved.
|
|
2111
|
+
"""
|
|
2112
|
+
target_item = self._target_item(item)
|
|
2113
|
+
if target_item is None:
|
|
2114
|
+
return
|
|
2115
|
+
author = self._principals().user(item.author.login_name if item.author else None)
|
|
2116
|
+
editor = self._principals().user(item.editor.login_name if item.editor else None)
|
|
2117
|
+
if author is not None and author.is_service_account:
|
|
2118
|
+
author = None
|
|
2119
|
+
if editor is not None and editor.is_service_account:
|
|
2120
|
+
editor = None
|
|
2121
|
+
if author is None and editor is None:
|
|
2122
|
+
return
|
|
2123
|
+
self._pending_authorship[item.dest_path] = {
|
|
2124
|
+
"Author": author,
|
|
2125
|
+
"Editor": editor,
|
|
2126
|
+
}
|
|
2127
|
+
|
|
2128
|
+
@site_access(SiteLevel.WRITE)
|
|
2129
|
+
def finalize_fidelity(self, item: MigrationItem) -> None:
|
|
2130
|
+
"""Write the fidelity values that were only cached for this item.
|
|
2131
|
+
|
|
2132
|
+
The last hook wins the write: with timestamps preserved that is
|
|
2133
|
+
:meth:`apply_timestamps`; without them it is this method, so the item still
|
|
2134
|
+
gets one system update instead of one per property group.
|
|
2135
|
+
"""
|
|
2136
|
+
self._restore_fidelity(item, timestamps=False)
|
|
2137
|
+
|
|
2138
|
+
@site_access(SiteLevel.MANAGE)
|
|
2139
|
+
def apply_permissions(self, item: MigrationItem, permissions: list[PermissionEntry]) -> None:
|
|
2140
|
+
"""Best-effort: replay the source item's unique ACLs onto the target item.
|
|
2141
|
+
|
|
2142
|
+
Same-tenant only — cross-tenant identity mapping is out of scope. See
|
|
2143
|
+
:func:`_replay_role_assignments` for what happens to principals, roles and
|
|
2144
|
+
inheritance that cannot be resolved.
|
|
2145
|
+
"""
|
|
2146
|
+
target_item = self._target_item(item)
|
|
2147
|
+
if target_item is None:
|
|
2148
|
+
return
|
|
2149
|
+
self._fresh_reads.pop(str(item.dest_path), None)
|
|
2150
|
+
_replay_role_assignments(target_item, self._principals(), permissions, self.warnings, item.dest_path)
|
|
2151
|
+
self._list.context.execute_query()
|
|
2152
|
+
|
|
2153
|
+
def _fresh_target_item(self, item: MigrationItem):
|
|
2154
|
+
"""The written target item with freshly-read properties (verification hooks).
|
|
2155
|
+
|
|
2156
|
+
The cached identity-index object predates the fidelity writes
|
|
2157
|
+
(``apply_timestamps``/``apply_authorship``), so re-read it before diffing.
|
|
2158
|
+
The read is memoized per destination path: verification asks for the same
|
|
2159
|
+
item through :meth:`checksum`, :meth:`read_metadata`,
|
|
2160
|
+
:meth:`read_authorship` and :meth:`read_permissions`, and four reads of an
|
|
2161
|
+
unchanged item are three requests too many. Every write clears the memo.
|
|
2162
|
+
"""
|
|
2163
|
+
key = str(item.dest_path)
|
|
2164
|
+
if key in self._fresh_reads:
|
|
2165
|
+
return self._fresh_reads[key]
|
|
2166
|
+
target_item = self._target_item(item)
|
|
2167
|
+
if target_item is not None:
|
|
2168
|
+
target_item.get().execute_query()
|
|
2169
|
+
self._fresh_reads[key] = target_item
|
|
2170
|
+
return target_item
|
|
2171
|
+
|
|
2172
|
+
def read_metadata(self, item: MigrationItem) -> dict | None:
|
|
2173
|
+
"""Comparable attributes of the written item (for the metadata diff)."""
|
|
2174
|
+
target_item = self._fresh_target_item(item)
|
|
2175
|
+
if target_item is None:
|
|
2176
|
+
return None
|
|
2177
|
+
return {
|
|
2178
|
+
"created": iso_or_none(target_item.created),
|
|
2179
|
+
"modified": iso_or_none(target_item.modified),
|
|
2180
|
+
}
|
|
2181
|
+
|
|
2182
|
+
def read_authorship(self, item: MigrationItem) -> tuple[str | None, str | None]:
|
|
2183
|
+
"""The written item's author/editor login names (for the authorship diff)."""
|
|
2184
|
+
target_item = self._fresh_target_item(item)
|
|
2185
|
+
if target_item is None:
|
|
2186
|
+
return (None, None)
|
|
2187
|
+
return (
|
|
2188
|
+
_user_login(self._list.context.web, target_item.author_id, self._login_cache),
|
|
2189
|
+
_user_login(self._list.context.web, target_item.editor_id, self._login_cache),
|
|
2190
|
+
)
|
|
2191
|
+
|
|
2192
|
+
def read_permissions(self, item: MigrationItem) -> list[PermissionEntry]:
|
|
2193
|
+
"""Read the written item's *unique* role assignments (for the permission diff)."""
|
|
2194
|
+
target_item = self._fresh_target_item(item)
|
|
2195
|
+
if target_item is None or not _has_unique_role_assignments(target_item, refresh=True):
|
|
2196
|
+
return []
|
|
2197
|
+
return _read_role_assignments(target_item, normalize=self._principals().normalize)
|
|
272
2198
|
|
|
273
2199
|
def close(self) -> None:
|
|
274
2200
|
pass
|
|
@@ -278,22 +2204,55 @@ class SharePointLibrarySource:
|
|
|
278
2204
|
"""Enumerates a document library's files and folders (recursively) for migration.
|
|
279
2205
|
|
|
280
2206
|
Folder entries (``item_type="folder"``, trailing ``/`` on the destination)
|
|
281
|
-
preserve the folder structure — including **empty** folders — on the target
|
|
2207
|
+
preserve the folder structure — including **empty** folders — on the target, and
|
|
2208
|
+
carry the folder's own column values (a document set's metadata, a managed
|
|
2209
|
+
folder's department) as their payload when the parent list is known.
|
|
282
2210
|
"""
|
|
283
2211
|
|
|
2212
|
+
def rebind(self) -> "SharePointLibrarySource":
|
|
2213
|
+
"""This source on its own cloned context (see :meth:`SharePointListSource.rebind`)."""
|
|
2214
|
+
context = _cloned_context(self._folder)
|
|
2215
|
+
sp_list = _cloned_list(self._sp_list, context) if self._sp_list is not None else None
|
|
2216
|
+
return SharePointLibrarySource(_cloned_folder(self._folder, context), self.on_bytes, sp_list=sp_list)
|
|
2217
|
+
|
|
284
2218
|
def __init__(
|
|
285
2219
|
self,
|
|
286
2220
|
library_folder: "Folder",
|
|
287
2221
|
on_bytes: Callable[[int, int | None], None] | None = None,
|
|
2222
|
+
sp_list: "SPList | None" = None,
|
|
288
2223
|
) -> None:
|
|
289
2224
|
self._folder = library_folder
|
|
2225
|
+
# The parent list, when known — author/editor ids (``AuthorId``/``EditorId``)
|
|
2226
|
+
# are not exposed on the ``File`` resource and must be read from its items.
|
|
2227
|
+
self._sp_list = sp_list
|
|
2228
|
+
# Folder column values come from the list's items and are projected exactly
|
|
2229
|
+
# like a record's (typed values normalized), so that code is reused here.
|
|
2230
|
+
self._list_source = SharePointListSource(sp_list) if sp_list is not None else None
|
|
2231
|
+
self._folder_payloads: dict[str, dict] | None = None
|
|
290
2232
|
self._files: dict[str, "File"] = {}
|
|
2233
|
+
# Folder resources by library-relative path, so their own system metadata
|
|
2234
|
+
# (``TimeCreated``/``TimeLastModified``) can be diffed after the run.
|
|
2235
|
+
self._folders: dict[str, "Folder"] = {}
|
|
2236
|
+
self._users: dict[int, "Principal | None"] = {}
|
|
2237
|
+
# Group title -> (owner user, owner group chain); a ``<Group>`` needs both.
|
|
2238
|
+
self._group_owners: dict[str, tuple["Principal | None", list[str]]] = {}
|
|
2239
|
+
self._default_groups: _DefaultGroups | None = None
|
|
2240
|
+
self._item_authors: dict[str, tuple[int | None, int | None]] | None = None
|
|
2241
|
+
self._item_unique: dict[str, bool] | None = None
|
|
2242
|
+
# Content-approval state by file URL, read alongside the author ids (only
|
|
2243
|
+
# when the library moderates).
|
|
2244
|
+
self._item_moderation: dict[str, dict] | None = None
|
|
2245
|
+
# Server-relative URLs of checked-out files, read alongside the author ids.
|
|
2246
|
+
self._item_checkout: set[str] | None = None
|
|
2247
|
+
self._moderation_on: bool | None = None
|
|
2248
|
+
self.warnings: list[str] = []
|
|
291
2249
|
# Optional hook invoked while a file downloads: (bytes_read, file_size)
|
|
292
2250
|
self.on_bytes = on_bytes
|
|
293
2251
|
|
|
294
2252
|
def label(self) -> str:
|
|
295
2253
|
return f"library:{self._folder.server_relative_url}"
|
|
296
2254
|
|
|
2255
|
+
@site_access(SiteLevel.READ)
|
|
297
2256
|
def list_items(self, progress: MigrationProgress = None) -> list[MigrationItem]:
|
|
298
2257
|
# The root folder's URL may not be loaded yet (e.g. via
|
|
299
2258
|
# ``list.root_folder``); fetch it so destinations stay library-relative
|
|
@@ -303,8 +2262,10 @@ class SharePointLibrarySource:
|
|
|
303
2262
|
self._folder.ensure_properties(["ServerRelativeUrl"]).execute_query()
|
|
304
2263
|
root = self._folder.server_relative_url or ""
|
|
305
2264
|
root = root.rstrip("/")
|
|
2265
|
+
extra = _site_assets_scaffolding(self._folder)
|
|
306
2266
|
loaded_folders = self._folder.get_folders(recursive=True).execute_query()
|
|
307
2267
|
loaded = self._folder.get_files(recursive=True).execute_query()
|
|
2268
|
+
authors = self._file_authors()
|
|
308
2269
|
|
|
309
2270
|
def _rel(url: str) -> str:
|
|
310
2271
|
return url[len(root) :].lstrip("/") if root else url.lstrip("/")
|
|
@@ -314,33 +2275,107 @@ class SharePointLibrarySource:
|
|
|
314
2275
|
for folder in loaded_folders:
|
|
315
2276
|
url = folder.server_relative_url or ""
|
|
316
2277
|
rel = _rel(url)
|
|
317
|
-
if not rel or rel in seen:
|
|
2278
|
+
if not rel or rel in seen or self._folder.is_system_path(rel, extra):
|
|
318
2279
|
continue
|
|
319
2280
|
seen.add(rel)
|
|
320
|
-
|
|
2281
|
+
self._folders[rel] = folder
|
|
2282
|
+
author_id, editor_id = authors.get(url, (None, None))
|
|
2283
|
+
folder_item = MigrationItem(
|
|
2284
|
+
source_path=url,
|
|
2285
|
+
dest_path=f"{rel}/",
|
|
2286
|
+
item_type="folder",
|
|
2287
|
+
modified=iso_or_none(folder.time_last_modified),
|
|
2288
|
+
created=iso_or_none(folder.time_created),
|
|
2289
|
+
)
|
|
2290
|
+
folder_item.author = self._principal_for(author_id)
|
|
2291
|
+
folder_item.editor = self._principal_for(editor_id)
|
|
2292
|
+
result.append(folder_item)
|
|
321
2293
|
emit_progress(progress, done=len(result), stage="planning", items=[folder])
|
|
322
2294
|
for file in loaded:
|
|
323
2295
|
url = file.server_relative_url or ""
|
|
324
2296
|
rel = _rel(url)
|
|
2297
|
+
if self._folder.is_system_path(rel, extra):
|
|
2298
|
+
continue
|
|
325
2299
|
self._files[rel] = file
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
)
|
|
2300
|
+
author_id = parse_int(file.author.id)
|
|
2301
|
+
editor_id = parse_int(file.modified_by.id)
|
|
2302
|
+
if author_id is None and editor_id is None:
|
|
2303
|
+
author_id, editor_id = authors.get(url, (None, None))
|
|
2304
|
+
item = MigrationItem(
|
|
2305
|
+
source_path=url,
|
|
2306
|
+
dest_path=rel,
|
|
2307
|
+
size_bytes=file.length or 0,
|
|
2308
|
+
item_type="file",
|
|
2309
|
+
modified=iso_or_none(file.time_last_modified),
|
|
2310
|
+
created=iso_or_none(file.time_created),
|
|
2311
|
+
source_id=str(file.unique_id) if file.unique_id else None,
|
|
2312
|
+
version_label=file.ui_version_label,
|
|
337
2313
|
)
|
|
2314
|
+
item.author = self._principal_for(author_id)
|
|
2315
|
+
item.editor = self._principal_for(editor_id)
|
|
2316
|
+
result.append(item)
|
|
338
2317
|
emit_progress(progress, done=len(result), stage="planning", items=[file])
|
|
2318
|
+
self._report_checkouts(result)
|
|
2319
|
+
self._report_drafts(result)
|
|
339
2320
|
return result
|
|
340
2321
|
|
|
341
|
-
def
|
|
2322
|
+
def _report_checkouts(self, items: list[MigrationItem]) -> None:
|
|
2323
|
+
"""Warn about files whose in-progress edits REST cannot see.
|
|
2324
|
+
|
|
2325
|
+
A checked-out file exposes its last **checked-in** content, so the copy is
|
|
2326
|
+
faithful to what the source returns while the author's pending edits stay
|
|
2327
|
+
behind. Verification cannot catch that — it compares the same read — so the
|
|
2328
|
+
loss is reported here instead of passing silently.
|
|
2329
|
+
"""
|
|
2330
|
+
checkout = self._item_checkout or set()
|
|
2331
|
+
checked = sorted(item.dest_path for item in items if item.item_type != "folder" and item.source_path in checkout)
|
|
2332
|
+
if not checked:
|
|
2333
|
+
return
|
|
2334
|
+
shown = ", ".join(checked[:_WARNING_SAMPLE])
|
|
2335
|
+
if len(checked) > _WARNING_SAMPLE:
|
|
2336
|
+
shown = f"{shown} and {len(checked) - _WARNING_SAMPLE} more"
|
|
2337
|
+
self.warnings.append(
|
|
2338
|
+
f"{len(checked)} checked-out file(s) were copied from their last checked-in version "
|
|
2339
|
+
f"(in-progress edits are not visible over REST): {shown}"
|
|
2340
|
+
)
|
|
2341
|
+
|
|
2342
|
+
def _report_drafts(self, items: list[MigrationItem]) -> None:
|
|
2343
|
+
"""Warn about files whose current version is an un-published (minor) draft.
|
|
2344
|
+
|
|
2345
|
+
REST returns the *draft* content, so the copy is faithful to the version the
|
|
2346
|
+
source reports — but version history is not preserved, so the published
|
|
2347
|
+
version a draft supersedes never reaches the target and the copy keeps the
|
|
2348
|
+
draft alone. Verification compares the same read and cannot see the
|
|
2349
|
+
difference, so the loss is reported here instead of passing silently.
|
|
2350
|
+
|
|
2351
|
+
The signal rides the file listing (``MinorVersion``), so this costs no extra
|
|
2352
|
+
request: a published file is ``x.0``, a draft ``x.n`` with ``n > 0``.
|
|
2353
|
+
"""
|
|
2354
|
+
drafts: list[str] = []
|
|
2355
|
+
for item in items:
|
|
2356
|
+
if item.item_type == "folder":
|
|
2357
|
+
continue
|
|
2358
|
+
file = self._files.get(item.dest_path)
|
|
2359
|
+
if file is None or not file.minor_version:
|
|
2360
|
+
continue
|
|
2361
|
+
drafts.append(item.dest_path)
|
|
2362
|
+
if not drafts:
|
|
2363
|
+
return
|
|
2364
|
+
drafts.sort()
|
|
2365
|
+
shown = ", ".join(drafts[:_WARNING_SAMPLE])
|
|
2366
|
+
if len(drafts) > _WARNING_SAMPLE:
|
|
2367
|
+
shown = f"{shown} and {len(drafts) - _WARNING_SAMPLE} more"
|
|
2368
|
+
self.warnings.append(
|
|
2369
|
+
f"{len(drafts)} file(s) are on an un-published (minor) version: the draft content "
|
|
2370
|
+
f"is copied, the published version it supersedes is not (version history is not "
|
|
2371
|
+
f"preserved): {shown}"
|
|
2372
|
+
)
|
|
2373
|
+
|
|
2374
|
+
@site_access(SiteLevel.READ)
|
|
2375
|
+
def read(self, item: MigrationItem) -> object:
|
|
342
2376
|
if item.item_type == "folder":
|
|
343
|
-
|
|
2377
|
+
# A folder's payload is its column values (empty when it carries none).
|
|
2378
|
+
return self._folder_values(item) or b""
|
|
344
2379
|
file = self._files.get(item.dest_path)
|
|
345
2380
|
if file is None:
|
|
346
2381
|
raise FileNotFoundError(item.source_path)
|
|
@@ -354,10 +2389,53 @@ class SharePointLibrarySource:
|
|
|
354
2389
|
file.download_session(buffer, chunk_downloaded=_chunk_downloaded).execute_query()
|
|
355
2390
|
return buffer.getvalue()
|
|
356
2391
|
|
|
2392
|
+
@site_access(SiteLevel.READ)
|
|
2393
|
+
def read_version_history(self, item: MigrationItem) -> tuple[str | None, list[tuple[str, bytes]]]:
|
|
2394
|
+
"""Read the file's current version label and its older versions.
|
|
2395
|
+
|
|
2396
|
+
Returns ``(current_label, older)`` where ``older`` is oldest-first and
|
|
2397
|
+
excludes the current version (which :meth:`read` already supplies). The
|
|
2398
|
+
current label comes from ``UIVersionLabel``; older content is streamed
|
|
2399
|
+
from each ``File.Versions`` entry. Folders have no version history.
|
|
2400
|
+
"""
|
|
2401
|
+
if item.item_type == "folder":
|
|
2402
|
+
return None, []
|
|
2403
|
+
file = self._files.get(item.dest_path)
|
|
2404
|
+
if file is None:
|
|
2405
|
+
raise FileNotFoundError(item.source_path)
|
|
2406
|
+
if file.ui_version_label is None:
|
|
2407
|
+
file.ensure_property("UIVersionLabel").execute_query()
|
|
2408
|
+
older: list[tuple[str, bytes]] = []
|
|
2409
|
+
for version in sorted(file.versions.get().execute_query(), key=lambda v: v.sort_key):
|
|
2410
|
+
label = version.version_label
|
|
2411
|
+
if label and not version.is_current_version:
|
|
2412
|
+
older.append((label, version.open_binary_stream().execute_query().value or b""))
|
|
2413
|
+
return file.ui_version_label, older
|
|
2414
|
+
|
|
2415
|
+
@property
|
|
2416
|
+
def supports_folder_records(self) -> bool:
|
|
2417
|
+
"""Whether a folder's column values are migrated *and* comparable."""
|
|
2418
|
+
return self._list_source is not None
|
|
2419
|
+
|
|
357
2420
|
def checksum(self, item: MigrationItem) -> str:
|
|
358
2421
|
if item.item_type == "folder":
|
|
359
|
-
return
|
|
360
|
-
return
|
|
2422
|
+
return _content_checksum(_canonicalize_taxonomy_record(self._folder_values(item)))
|
|
2423
|
+
return checksum(cast(bytes, self.read(item)))
|
|
2424
|
+
|
|
2425
|
+
def _folder_values(self, item: MigrationItem) -> dict:
|
|
2426
|
+
"""The source folder's column values (empty when it carries none)."""
|
|
2427
|
+
if self._folder_payloads is None:
|
|
2428
|
+
payloads: dict[str, dict] = {}
|
|
2429
|
+
if self._sp_list is None or self._list_source is None:
|
|
2430
|
+
self.warnings.append(
|
|
2431
|
+
"folder column values were not read: the parent library is unknown "
|
|
2432
|
+
"(pass sp_list to SharePointLibrarySource)"
|
|
2433
|
+
)
|
|
2434
|
+
else:
|
|
2435
|
+
payloads.update(self._list_source.folder_records())
|
|
2436
|
+
self.warnings.extend(self._list_source.warnings)
|
|
2437
|
+
self._folder_payloads = payloads
|
|
2438
|
+
return self._folder_payloads.get(str(item.source_path).rstrip("/"), {})
|
|
361
2439
|
|
|
362
2440
|
def read_permissions(self, item: MigrationItem) -> list[PermissionEntry]:
|
|
363
2441
|
"""Read the item's role assignments (for best-effort ACL preservation).
|
|
@@ -368,16 +2446,59 @@ class SharePointLibrarySource:
|
|
|
368
2446
|
securable = self._securable(item)
|
|
369
2447
|
if securable is None:
|
|
370
2448
|
return []
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
2449
|
+
# Files: reuse the unique-ACL flag read with the authorship pass (the
|
|
2450
|
+
# ``File``/``ListItem`` resources do not expose it without an extra GET).
|
|
2451
|
+
if item.item_type != "folder" and self._item_unique is not None:
|
|
2452
|
+
unique = self._item_unique.get(item.source_path)
|
|
2453
|
+
if unique is not None:
|
|
2454
|
+
securable.properties["HasUniqueRoleAssignments"] = unique
|
|
2455
|
+
if not _has_unique_role_assignments(securable):
|
|
2456
|
+
return []
|
|
2457
|
+
entries = _read_role_assignments(securable, resolve=self._principal_for, normalize=self._normalize_name)
|
|
2458
|
+
_attach_group_owners(entries, self._folder.context.web, self._principal_for, self._group_owners)
|
|
2459
|
+
return entries
|
|
2460
|
+
|
|
2461
|
+
def _normalize_name(self, name: str) -> str:
|
|
2462
|
+
"""Canonicalize a principal name (default groups -> ``default:<Kind>``)."""
|
|
2463
|
+
context = getattr(self._folder, "context", None)
|
|
2464
|
+
web = getattr(context, "web", None) if context is not None else None
|
|
2465
|
+
if web is None:
|
|
2466
|
+
return name
|
|
2467
|
+
if self._default_groups is None:
|
|
2468
|
+
self._default_groups = _DefaultGroups(web)
|
|
2469
|
+
return self._default_groups.normalize(name)
|
|
2470
|
+
|
|
2471
|
+
def read_metadata(self, item: MigrationItem) -> dict | None:
|
|
2472
|
+
"""Comparable attributes of the source item (for the post-run metadata diff)."""
|
|
2473
|
+
if item.item_type == "folder":
|
|
2474
|
+
folder = self._folders.get(str(item.dest_path).rstrip("/"))
|
|
2475
|
+
if folder is None:
|
|
2476
|
+
return None
|
|
2477
|
+
return {
|
|
2478
|
+
"created": iso_or_none(folder.time_created),
|
|
2479
|
+
"modified": iso_or_none(folder.time_last_modified),
|
|
2480
|
+
}
|
|
2481
|
+
file = self._files.get(item.dest_path)
|
|
2482
|
+
if file is None:
|
|
2483
|
+
return None
|
|
2484
|
+
metadata = {
|
|
2485
|
+
"created": iso_or_none(file.time_created),
|
|
2486
|
+
"modified": iso_or_none(file.time_last_modified),
|
|
2487
|
+
"size_bytes": file.length or 0,
|
|
2488
|
+
}
|
|
2489
|
+
self._file_authors()
|
|
2490
|
+
state = (self._item_moderation or {}).get(item.source_path)
|
|
2491
|
+
if state:
|
|
2492
|
+
status = state.get(_MODERATION_STATUS)
|
|
2493
|
+
metadata["moderation_status"] = None if status is None else str(status)
|
|
2494
|
+
return metadata
|
|
2495
|
+
|
|
2496
|
+
def read_authorship(self, item: MigrationItem) -> tuple[str | None, str | None]:
|
|
2497
|
+
"""The source author/editor login names (for the authorship diff)."""
|
|
2498
|
+
return (
|
|
2499
|
+
item.author.login_name if item.author else None,
|
|
2500
|
+
item.editor.login_name if item.editor else None,
|
|
2501
|
+
)
|
|
381
2502
|
|
|
382
2503
|
def _securable(self, item: MigrationItem):
|
|
383
2504
|
if item.item_type == "folder":
|
|
@@ -385,6 +2506,105 @@ class SharePointLibrarySource:
|
|
|
385
2506
|
file = self._files.get(item.dest_path)
|
|
386
2507
|
return file.listItemAllFields if file is not None else None
|
|
387
2508
|
|
|
2509
|
+
def _principal_for(self, user_id: Any) -> "Principal | None":
|
|
2510
|
+
"""Resolve a site-user id to a :class:`Principal` (login + PUID), cached."""
|
|
2511
|
+
key = parse_int(user_id)
|
|
2512
|
+
if key is None:
|
|
2513
|
+
return None
|
|
2514
|
+
if key in self._users:
|
|
2515
|
+
return self._users[key]
|
|
2516
|
+
principal: "Principal | None" = None
|
|
2517
|
+
try:
|
|
2518
|
+
user = self._folder.context.web.site_users.get_by_id(cast("str", key)).get().execute_query()
|
|
2519
|
+
principal = _principal_of(user, key)
|
|
2520
|
+
if user.user_id.name_id and principal.system_id is None:
|
|
2521
|
+
# e.g. the app principal, whose ``UserId.NameId`` is not a PUID.
|
|
2522
|
+
# Emitting it would fail the whole ingestion job, so drop it.
|
|
2523
|
+
self.warnings.append(
|
|
2524
|
+
f"user {key} ({user.login_name!r}) has no usable PUID ({user.user_id.name_id!r}); "
|
|
2525
|
+
"it is omitted from the server-side user map"
|
|
2526
|
+
)
|
|
2527
|
+
except Exception as e: # noqa: BLE001 — a missing user degrades to no authorship
|
|
2528
|
+
self.warnings.append(f"user {key} could not be resolved: {e}")
|
|
2529
|
+
self._users[key] = principal
|
|
2530
|
+
return principal
|
|
2531
|
+
|
|
2532
|
+
def _file_authors(self) -> dict[str, tuple[int | None, int | None]]:
|
|
2533
|
+
"""Author/editor ids by server-relative file URL (one list-items read).
|
|
2534
|
+
|
|
2535
|
+
``File.Author``/``ModifiedBy`` is a non-expandable navigation on the File
|
|
2536
|
+
resource, so the ids come from the parent library's list items.
|
|
2537
|
+
"""
|
|
2538
|
+
if self._item_authors is not None:
|
|
2539
|
+
return self._item_authors
|
|
2540
|
+
authors: dict[str, tuple[int | None, int | None]] = {}
|
|
2541
|
+
unique: dict[str, bool] = {}
|
|
2542
|
+
moderation: dict[str, dict] = {}
|
|
2543
|
+
checkout: set[str] = set()
|
|
2544
|
+
moderates = self._moderation_enabled()
|
|
2545
|
+
if self._sp_list is not None:
|
|
2546
|
+
try:
|
|
2547
|
+
# ``CheckoutUser`` is a user field: it only projects when its
|
|
2548
|
+
# sub-properties are selected *and* the field is expanded — a bare
|
|
2549
|
+
# ``$select=CheckoutUser`` is rejected by the server.
|
|
2550
|
+
select = ["FileRef", *_METADATA_SELECT, "CheckoutUser/Id", "CheckoutUser/Title"]
|
|
2551
|
+
if moderates:
|
|
2552
|
+
select.extend(_MODERATION_FIELDS)
|
|
2553
|
+
items = self._sp_list.items.select(select).expand(["CheckoutUser"]).get_all().execute_query()
|
|
2554
|
+
for item in items:
|
|
2555
|
+
ref = item.file_ref
|
|
2556
|
+
if ref:
|
|
2557
|
+
authors[ref] = (item.author_id, item.editor_id)
|
|
2558
|
+
unique[ref] = bool(item.has_unique_role_assignments)
|
|
2559
|
+
if item.properties.get("CheckoutUser"):
|
|
2560
|
+
checkout.add(ref)
|
|
2561
|
+
if moderates:
|
|
2562
|
+
state = _moderation_state(item.properties)
|
|
2563
|
+
if state:
|
|
2564
|
+
moderation[ref] = state
|
|
2565
|
+
except Exception as e: # noqa: BLE001 — authorship is best-effort
|
|
2566
|
+
self.warnings.append(f"author/editor read failed: {e}")
|
|
2567
|
+
self._item_authors = authors
|
|
2568
|
+
self._item_unique = unique
|
|
2569
|
+
self._item_moderation = moderation
|
|
2570
|
+
self._item_checkout = checkout
|
|
2571
|
+
return authors
|
|
2572
|
+
|
|
2573
|
+
def _moderation_enabled(self) -> bool:
|
|
2574
|
+
"""Whether the parent library enables content approval (read once)."""
|
|
2575
|
+
if self._moderation_on is None:
|
|
2576
|
+
self._moderation_on = False
|
|
2577
|
+
if self._sp_list is not None:
|
|
2578
|
+
try:
|
|
2579
|
+
self._sp_list.ensure_properties(["EnableModeration"]).get().execute_query()
|
|
2580
|
+
self._moderation_on = bool(self._sp_list.properties.get("EnableModeration"))
|
|
2581
|
+
except Exception as e: # noqa: BLE001 — approval state is best-effort
|
|
2582
|
+
self.warnings.append(f"moderation setting read failed: {e}")
|
|
2583
|
+
return self._moderation_on
|
|
2584
|
+
|
|
2585
|
+
@property
|
|
2586
|
+
def supports_item_state(self) -> bool:
|
|
2587
|
+
"""Whether approval state can be read (needs the parent library)."""
|
|
2588
|
+
return self._list_source is not None
|
|
2589
|
+
|
|
2590
|
+
def read_item_state(self, item: MigrationItem) -> dict | None:
|
|
2591
|
+
"""Approval state that a fresh upload would not reproduce.
|
|
2592
|
+
|
|
2593
|
+
A copy arrives approved on a list without moderation and pending on one with it,
|
|
2594
|
+
so a pending source says nothing the copy does not already say; a draft, rejected
|
|
2595
|
+
or scheduled one does, together with its approval comments.
|
|
2596
|
+
"""
|
|
2597
|
+
if item.item_type == "folder" or self._list_source is None:
|
|
2598
|
+
return None
|
|
2599
|
+
self._file_authors()
|
|
2600
|
+
state = (self._item_moderation or {}).get(item.source_path)
|
|
2601
|
+
if not state:
|
|
2602
|
+
return None
|
|
2603
|
+
status = state.get(_MODERATION_STATUS)
|
|
2604
|
+
if status is None or status == SPModerationStatusType.Pending.value:
|
|
2605
|
+
return None
|
|
2606
|
+
return state
|
|
2607
|
+
|
|
388
2608
|
def close(self) -> None:
|
|
389
2609
|
pass
|
|
390
2610
|
|
|
@@ -394,30 +2614,170 @@ class SharePointLibraryTarget:
|
|
|
394
2614
|
|
|
395
2615
|
Uses the simple upload for files up to ~4MB; ``write_many`` (parallel,
|
|
396
2616
|
``concurrency > 1``) uses ``create_upload_session`` for larger files.
|
|
2617
|
+
|
|
2618
|
+
Pass ``sp_list`` (the target library) to also replay a folder's column values: a
|
|
2619
|
+
folder is a list item, so a document set's metadata or a managed folder's
|
|
2620
|
+
department is written onto the created folder's item. ``content_type_map``
|
|
2621
|
+
rewrites the folder's content type id to its target counterpart, exactly as it
|
|
2622
|
+
does for an item record.
|
|
2623
|
+
|
|
2624
|
+
Pass ``structure`` (a :class:`~office365.migration.sharepoint.structure.ListStructure`
|
|
2625
|
+
from :func:`~office365.migration.sharepoint.structure.load_list_structure`) to
|
|
2626
|
+
replay a captured shape onto the library before the first file is uploaded — the
|
|
2627
|
+
columns, content types, views and container settings of a bundle travel in its
|
|
2628
|
+
sidecar, not in each file.
|
|
397
2629
|
"""
|
|
398
2630
|
|
|
399
|
-
|
|
2631
|
+
#: Files carry content-approval state (``apply_item_state``). Documents refuse a
|
|
2632
|
+
#: moderation change combined with other property writes, so it is a write of its
|
|
2633
|
+
#: own, applied after the timestamps that would otherwise re-approve the file.
|
|
2634
|
+
supports_item_state = True
|
|
2635
|
+
|
|
2636
|
+
def rebind(self) -> "SharePointLibraryTarget":
|
|
2637
|
+
"""This target on its own cloned context (see :meth:`SharePointListSource.rebind`)."""
|
|
2638
|
+
context = _cloned_context(self._folder)
|
|
2639
|
+
sp_list = _cloned_list(self._sp_list, context) if self._sp_list is not None else None
|
|
2640
|
+
return SharePointLibraryTarget(
|
|
2641
|
+
_cloned_folder(self._folder, context),
|
|
2642
|
+
concurrency=self._concurrency,
|
|
2643
|
+
sp_list=sp_list,
|
|
2644
|
+
content_type_map=self._content_type_map,
|
|
2645
|
+
structure=self._structure,
|
|
2646
|
+
)
|
|
2647
|
+
|
|
2648
|
+
def __init__(
|
|
2649
|
+
self,
|
|
2650
|
+
library_folder: "Folder",
|
|
2651
|
+
concurrency: int = 1,
|
|
2652
|
+
sp_list: "SPList | None" = None,
|
|
2653
|
+
content_type_map: "ContentTypeMap | None" = None,
|
|
2654
|
+
structure: "ListStructure | None" = None,
|
|
2655
|
+
) -> None:
|
|
2656
|
+
if structure is not None and sp_list is None:
|
|
2657
|
+
raise ValueError("a structure snapshot needs the target list (sp_list) to be applied to")
|
|
2658
|
+
self._structure = structure
|
|
2659
|
+
self._structure_applied = False
|
|
400
2660
|
self._folder = library_folder
|
|
401
2661
|
self._concurrency = concurrency
|
|
402
|
-
|
|
2662
|
+
# The folder-record mapping is the record mapping: reuse the list target so a
|
|
2663
|
+
# folder's Lookup/Person/taxonomy/choice values resolve the same way.
|
|
2664
|
+
self._sp_list = sp_list
|
|
2665
|
+
self._list_target = (
|
|
2666
|
+
SharePointListTarget(sp_list, content_type_map=content_type_map) if sp_list is not None else None
|
|
2667
|
+
)
|
|
2668
|
+
self._content_type_map = content_type_map
|
|
2669
|
+
self.warnings: list[str] = []
|
|
2670
|
+
self._login_cache: dict[int, str | None] = {}
|
|
2671
|
+
self._principals_cache: _TargetPrincipals | None = None
|
|
2672
|
+
# Author/Editor values resolved by ``apply_authorship`` and folded into the
|
|
2673
|
+
# final timestamp write so ``Editor`` isn't reset by the latter.
|
|
2674
|
+
self._pending_authorship: dict[str, dict] = {}
|
|
2675
|
+
self._field_scan: SharePointListSource | None = None
|
|
2676
|
+
|
|
2677
|
+
def _principals(self) -> _TargetPrincipals:
|
|
2678
|
+
"""The (lazily built) target principal/role resolver."""
|
|
2679
|
+
if self._principals_cache is None:
|
|
2680
|
+
self._principals_cache = _TargetPrincipals(self._folder.context.web, self.warnings)
|
|
2681
|
+
return self._principals_cache
|
|
2682
|
+
|
|
2683
|
+
def configure(self, options) -> None:
|
|
2684
|
+
"""Replay the captured structure onto the library before the first upload.
|
|
2685
|
+
|
|
2686
|
+
Called by :class:`MigrationRunner` before the run. A bundle carries the
|
|
2687
|
+
library's columns, content types, views and container settings in a sidecar,
|
|
2688
|
+
not in each file, so they have to exist before the files land — a file
|
|
2689
|
+
uploaded into a bare library stores no column values of its own.
|
|
2690
|
+
"""
|
|
2691
|
+
self.apply_structure()
|
|
2692
|
+
|
|
2693
|
+
def apply_structure(self) -> list[str]:
|
|
2694
|
+
"""Provision the snapshot passed as ``structure`` (once, idempotent)."""
|
|
2695
|
+
if self._structure is None or self._structure_applied or self._sp_list is None:
|
|
2696
|
+
return []
|
|
2697
|
+
self._structure_applied = True
|
|
2698
|
+
entries = self._content_type_map.entries if self._content_type_map is not None else None
|
|
2699
|
+
warnings = provision_list_structure(self._sp_list, self._structure, content_type_map=entries)
|
|
2700
|
+
self.warnings.extend(warnings)
|
|
2701
|
+
return warnings
|
|
403
2702
|
|
|
404
2703
|
def label(self) -> str:
|
|
405
2704
|
return f"library:{self._folder.server_relative_url}"
|
|
406
2705
|
|
|
407
2706
|
def _url(self, item: MigrationItem) -> str:
|
|
408
|
-
return f"{(self._folder.server_relative_url or '').rstrip('/')}/{item.dest_path}"
|
|
2707
|
+
return f"{(self._folder.server_relative_url or '').rstrip('/')}/{str(item.dest_path).strip('/')}"
|
|
409
2708
|
|
|
2709
|
+
@site_access(SiteLevel.READ)
|
|
410
2710
|
def exists(self, item: MigrationItem) -> bool:
|
|
2711
|
+
url = self._url(item)
|
|
411
2712
|
try:
|
|
412
|
-
|
|
2713
|
+
if item.item_type == "folder":
|
|
2714
|
+
self._folder.context.web.get_folder_by_server_relative_url(url).get().execute_query()
|
|
2715
|
+
else:
|
|
2716
|
+
self._folder.context.web.get_file_by_server_relative_url(url).get().execute_query()
|
|
413
2717
|
return True
|
|
414
|
-
except Exception: # noqa: BLE001 — a missing
|
|
2718
|
+
except Exception: # noqa: BLE001 — a missing item surfaces as a request error
|
|
415
2719
|
return False
|
|
416
2720
|
|
|
2721
|
+
def _ensure_folders(self, items: list[MigrationItem]) -> None:
|
|
2722
|
+
"""Create folder items (deduplicated to deepest paths) in one round-trip."""
|
|
2723
|
+
paths = [str(item.dest_path).strip("/") for item in items]
|
|
2724
|
+
paths = [path for path in paths if path]
|
|
2725
|
+
if not paths:
|
|
2726
|
+
return
|
|
2727
|
+
self._folder.ensure_folders(paths)
|
|
2728
|
+
self._folder.context.execute_query()
|
|
2729
|
+
|
|
2730
|
+
@site_access(SiteLevel.WRITE)
|
|
417
2731
|
def write(self, item: MigrationItem, payload: object) -> None:
|
|
2732
|
+
if item.item_type == "folder":
|
|
2733
|
+
self._ensure_folders([item])
|
|
2734
|
+
if isinstance(payload, dict):
|
|
2735
|
+
self._apply_folder_values(item, payload)
|
|
2736
|
+
return
|
|
2737
|
+
if isinstance(payload, dict):
|
|
2738
|
+
# ``str(payload).encode()`` below would write the record's ``repr`` into a file
|
|
2739
|
+
# nobody asked for, and report it as a success: refuse instead.
|
|
2740
|
+
raise ValueError(
|
|
2741
|
+
f"{item.dest_path!r} is a {item.item_type!r} with a dict payload: this target writes files, and a "
|
|
2742
|
+
"list record is not a file body — migrate records into a list"
|
|
2743
|
+
)
|
|
418
2744
|
content = payload if isinstance(payload, bytes) else str(payload).encode("utf-8")
|
|
419
2745
|
self._folder.upload_file(item.dest_path, content).execute_query()
|
|
420
2746
|
|
|
2747
|
+
@property
|
|
2748
|
+
def supports_folder_records(self) -> bool:
|
|
2749
|
+
"""Whether a folder's column values are migrated *and* comparable."""
|
|
2750
|
+
return self._list_target is not None
|
|
2751
|
+
|
|
2752
|
+
def _apply_folder_values(self, item: MigrationItem, record: dict) -> None:
|
|
2753
|
+
"""Write a folder's column values onto the folder's underlying list item."""
|
|
2754
|
+
assert self._list_target is not None
|
|
2755
|
+
values = _folder_record_values(record)
|
|
2756
|
+
if not values:
|
|
2757
|
+
return
|
|
2758
|
+
values = self._list_target.translate_record(values)
|
|
2759
|
+
folder_item = self._securable(item)
|
|
2760
|
+
for key, value in values.items():
|
|
2761
|
+
folder_item.set_property(key, value)
|
|
2762
|
+
try:
|
|
2763
|
+
folder_item.update().execute_query()
|
|
2764
|
+
except Exception as e: # noqa: BLE001 — a folder's structure is worth more than its values
|
|
2765
|
+
self.warnings.append(f"folder column values for {item.dest_path!r} could not be written: {e}")
|
|
2766
|
+
|
|
2767
|
+
def _folder_projection(self) -> list[str]:
|
|
2768
|
+
"""The target's folder columns (read once) — the set the source projected."""
|
|
2769
|
+
if self._sp_list is None:
|
|
2770
|
+
return []
|
|
2771
|
+
if self._field_scan is None:
|
|
2772
|
+
# Field definitions are read by the same code on both sides: structure
|
|
2773
|
+
# provisioning keeps the internal names, so the projections line up.
|
|
2774
|
+
self._field_scan = SharePointListSource(self._sp_list)
|
|
2775
|
+
try:
|
|
2776
|
+
return self._field_scan.folder_projection()
|
|
2777
|
+
except Exception as e: # noqa: BLE001 — without a projection no folder values move
|
|
2778
|
+
self.warnings.append(f"could not read the target columns for folder values: {e}")
|
|
2779
|
+
return []
|
|
2780
|
+
|
|
421
2781
|
def write_many(
|
|
422
2782
|
self,
|
|
423
2783
|
items: list[MigrationItem],
|
|
@@ -431,90 +2791,270 @@ class SharePointLibraryTarget:
|
|
|
431
2791
|
"""
|
|
432
2792
|
from office365.migration.sharepoint.transfer import _transfer_files_parallel
|
|
433
2793
|
|
|
2794
|
+
failures: list[Failure] = []
|
|
2795
|
+
folders = [item for item in items if item.item_type == "folder"]
|
|
2796
|
+
if folders:
|
|
2797
|
+
try:
|
|
2798
|
+
self._ensure_folders(folders)
|
|
2799
|
+
except Exception: # noqa: BLE001 — fall back to per-folder to attribute errors
|
|
2800
|
+
for folder in folders:
|
|
2801
|
+
try:
|
|
2802
|
+
self._ensure_folders([folder])
|
|
2803
|
+
except Exception as e: # noqa: BLE001
|
|
2804
|
+
failures.append((folder.dest_path, str(e)))
|
|
2805
|
+
# A folder's column values can only be written once its item exists, so they
|
|
2806
|
+
# follow the (batched) folder creation.
|
|
2807
|
+
for item, payload in zip(items, payloads):
|
|
2808
|
+
if item.item_type == "folder" and isinstance(payload, dict):
|
|
2809
|
+
self._apply_folder_values(item, payload)
|
|
434
2810
|
files = [
|
|
435
2811
|
(item.dest_path, payload if isinstance(payload, bytes) else str(payload).encode("utf-8"))
|
|
436
2812
|
for item, payload in zip(items, payloads)
|
|
2813
|
+
if item.item_type != "folder"
|
|
437
2814
|
]
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
2815
|
+
if files:
|
|
2816
|
+
failures.extend(
|
|
2817
|
+
_transfer_files_parallel(
|
|
2818
|
+
self._folder,
|
|
2819
|
+
files,
|
|
2820
|
+
concurrency=concurrency or self._concurrency or 1,
|
|
2821
|
+
)
|
|
2822
|
+
)
|
|
2823
|
+
return failures
|
|
443
2824
|
|
|
2825
|
+
@site_access(SiteLevel.READ)
|
|
444
2826
|
def list_paths(self) -> list[str]:
|
|
445
2827
|
root = (self._folder.server_relative_url or "").rstrip("/")
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
2828
|
+
extra = _site_assets_scaffolding(self._folder)
|
|
2829
|
+
loaded_files = self._folder.get_files(recursive=True).execute_query()
|
|
2830
|
+
loaded_folders = self._folder.get_folders(recursive=True).execute_query()
|
|
2831
|
+
paths = [(f.server_relative_url or "")[len(root) :].lstrip("/") for f in loaded_files]
|
|
2832
|
+
paths += [f"{(f.server_relative_url or '')[len(root) :].lstrip('/')}/" for f in loaded_folders]
|
|
2833
|
+
# Mirror the source projection: SharePoint-owned scaffolding (``Forms/``,
|
|
2834
|
+
# ``desktop.ini``, and on SiteAssets the site icon + auto-provisioned
|
|
2835
|
+
# notebook) is recreated server-side, never migrated, so it must not be
|
|
2836
|
+
# reported as target-only content during verification. Source folder paths
|
|
2837
|
+
# carry a trailing slash; target folder paths mirror that.
|
|
2838
|
+
return [p for p in paths if p != "/" and not self._folder.is_system_path(p, extra)]
|
|
2839
|
+
|
|
2840
|
+
@site_access(SiteLevel.READ)
|
|
2841
|
+
def read(self, item: MigrationItem) -> bytes:
|
|
2842
|
+
"""Download the written item's bytes (used by verification for Office files)."""
|
|
2843
|
+
if item.item_type == "folder":
|
|
2844
|
+
return b""
|
|
450
2845
|
file = self._folder.context.web.get_file_by_server_relative_url(self._url(item)).get().execute_query()
|
|
451
2846
|
buffer = io.BytesIO()
|
|
452
2847
|
file.download(buffer).execute_query()
|
|
453
|
-
return
|
|
2848
|
+
return buffer.getvalue()
|
|
454
2849
|
|
|
2850
|
+
def checksum(self, item: MigrationItem) -> str:
|
|
2851
|
+
if item.item_type == "folder":
|
|
2852
|
+
values = self._target_folder_values(item)
|
|
2853
|
+
if values is None or self._list_target is None:
|
|
2854
|
+
return ""
|
|
2855
|
+
return self._list_target.content_checksum(values)
|
|
2856
|
+
return checksum(self.read(item))
|
|
2857
|
+
|
|
2858
|
+
def _target_folder_values(self, item: MigrationItem) -> dict | None:
|
|
2859
|
+
"""The target folder's column values as they read back (``None`` if unknown)."""
|
|
2860
|
+
columns = self._folder_projection()
|
|
2861
|
+
if not columns:
|
|
2862
|
+
return None
|
|
2863
|
+
list_item = self._securable(item).select(columns).get().execute_query()
|
|
2864
|
+
return _folder_record_values(dict(list_item.properties))
|
|
2865
|
+
|
|
2866
|
+
@site_access(SiteLevel.READ)
|
|
455
2867
|
def modified(self, item: MigrationItem) -> str:
|
|
456
2868
|
"""Last-modified of the target file (for incremental migration)."""
|
|
2869
|
+
if item.item_type == "folder":
|
|
2870
|
+
return ""
|
|
457
2871
|
file = self._folder.context.web.get_file_by_server_relative_url(self._url(item)).get().execute_query()
|
|
458
2872
|
return iso_or_none(file.time_last_modified) or ""
|
|
459
2873
|
|
|
2874
|
+
@site_access(SiteLevel.WRITE)
|
|
460
2875
|
def apply_timestamps(self, item: MigrationItem) -> None:
|
|
461
2876
|
"""Best-effort: restore ``Created``/``Modified`` on the written item.
|
|
462
2877
|
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
2878
|
+
``ValidateUpdateListItem`` is the only REST path that can set these system
|
|
2879
|
+
fields. For files it runs as a system update (``bNewDocumentUpdate=True``, the
|
|
2880
|
+
CSOM ``UpdateOverwriteVersion`` path) so the metadata lands without creating a
|
|
2881
|
+
new version; folders have no version history. ``preserve_versions`` still needs
|
|
2882
|
+
the server-side API. Authorship values resolved for the same item ride along in
|
|
2883
|
+
this write.
|
|
2884
|
+
"""
|
|
2885
|
+
self._restore_fidelity(item, timestamps=True)
|
|
2886
|
+
|
|
2887
|
+
def _restore_fidelity(self, item: MigrationItem, timestamps: bool) -> None:
|
|
2888
|
+
"""One system update carrying every fidelity value this item has.
|
|
2889
|
+
|
|
2890
|
+
A document's item form reads its dates in the web's locale rather than the UTC
|
|
2891
|
+
a caller holds, so the timestamps are converted first (see
|
|
2892
|
+
:func:`_web_local_texts`); the approval state is a write of its own and stays
|
|
2893
|
+
last — see :meth:`apply_item_state`.
|
|
466
2894
|
"""
|
|
467
|
-
form_values: dict[str, str] = {}
|
|
468
|
-
created = _sp_timestamp(item.created)
|
|
469
|
-
modified = _sp_timestamp(item.modified)
|
|
470
|
-
if created:
|
|
471
|
-
form_values["Created"] = created
|
|
472
|
-
if modified:
|
|
473
|
-
form_values["Modified"] = modified
|
|
474
|
-
if not form_values:
|
|
475
|
-
return
|
|
476
2895
|
securable = self._securable(item)
|
|
477
2896
|
if securable is None:
|
|
478
2897
|
return
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
2898
|
+
created = modified = None
|
|
2899
|
+
if timestamps:
|
|
2900
|
+
created, modified = _web_local_texts(self._folder.context.web, item.created, item.modified)
|
|
2901
|
+
authorship = self._pending_authorship.pop(item.dest_path, {})
|
|
2902
|
+
if not (created or modified or authorship):
|
|
2903
|
+
return
|
|
2904
|
+
result = securable.restore_fidelity(
|
|
2905
|
+
created=created,
|
|
2906
|
+
modified=modified,
|
|
2907
|
+
author=authorship.get("Author"),
|
|
2908
|
+
editor=authorship.get("Editor"),
|
|
482
2909
|
new_document_update=item.item_type != "folder",
|
|
2910
|
+
web_local_dates=True,
|
|
483
2911
|
).execute_query()
|
|
2912
|
+
_report_rejected_fields(result, self.warnings, f"timestamps {item.dest_path}")
|
|
2913
|
+
|
|
2914
|
+
def apply_authorship(self, item: MigrationItem) -> None:
|
|
2915
|
+
"""Best-effort: resolve ``Author``/``Editor`` and cache them for one write.
|
|
2916
|
+
|
|
2917
|
+
A principal is applied only when its login name resolves to a target user
|
|
2918
|
+
(``EnsureUser``); unresolved principals are skipped (same-tenant only).
|
|
2919
|
+
|
|
2920
|
+
Nothing is sent here: a separate write per item doubled the cost of a
|
|
2921
|
+
preserved run, and a system update re-approves a document, so the cached
|
|
2922
|
+
values are better folded into the timestamps write (or in
|
|
2923
|
+
:meth:`finalize_fidelity` when timestamps are not preserved).
|
|
2924
|
+
"""
|
|
2925
|
+
securable = self._securable(item)
|
|
2926
|
+
if securable is None:
|
|
2927
|
+
return
|
|
2928
|
+
author = self._principals().user(item.author.login_name if item.author else None)
|
|
2929
|
+
editor = self._principals().user(item.editor.login_name if item.editor else None)
|
|
2930
|
+
if author is not None and author.is_service_account:
|
|
2931
|
+
author = None
|
|
2932
|
+
if editor is not None and editor.is_service_account:
|
|
2933
|
+
editor = None
|
|
2934
|
+
if author is None and editor is None:
|
|
2935
|
+
return
|
|
2936
|
+
self._pending_authorship[item.dest_path] = {"Author": author, "Editor": editor}
|
|
2937
|
+
|
|
2938
|
+
@site_access(SiteLevel.WRITE)
|
|
2939
|
+
def finalize_fidelity(self, item: MigrationItem) -> None:
|
|
2940
|
+
"""Write the fidelity values that were only cached for this item.
|
|
484
2941
|
|
|
2942
|
+
The last hook wins the write: with timestamps preserved that is
|
|
2943
|
+
:meth:`apply_timestamps`; without them it is this method, so an item costs
|
|
2944
|
+
one system update instead of one per property group. Runs before the
|
|
2945
|
+
approval write, which must stay last.
|
|
2946
|
+
"""
|
|
2947
|
+
self._restore_fidelity(item, timestamps=False)
|
|
2948
|
+
|
|
2949
|
+
@site_access(SiteLevel.MANAGE)
|
|
485
2950
|
def apply_permissions(self, item: MigrationItem, permissions: list[PermissionEntry]) -> None:
|
|
486
|
-
"""Best-effort:
|
|
2951
|
+
"""Best-effort: replay a file's or folder's unique ACLs onto the target item.
|
|
487
2952
|
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
2953
|
+
Same-tenant only — cross-tenant identity mapping is out of scope. See
|
|
2954
|
+
:func:`_replay_role_assignments` for what happens to principals, roles and
|
|
2955
|
+
inheritance that cannot be resolved.
|
|
491
2956
|
"""
|
|
492
2957
|
securable = self._securable(item)
|
|
493
2958
|
if securable is None:
|
|
494
2959
|
return
|
|
495
|
-
securable.
|
|
496
|
-
for entry in permissions:
|
|
497
|
-
for role_name in entry.roles:
|
|
498
|
-
role = self._role_definition(role_name)
|
|
499
|
-
if role is not None:
|
|
500
|
-
securable.add_role_assignment(entry.principal_name, role)
|
|
2960
|
+
_replay_role_assignments(securable, self._principals(), permissions, self.warnings, item.dest_path)
|
|
501
2961
|
securable.context.execute_query()
|
|
502
2962
|
|
|
2963
|
+
@site_access(SiteLevel.WRITE)
|
|
2964
|
+
def apply_item_state(self, item: MigrationItem, state: dict) -> None:
|
|
2965
|
+
"""Best-effort: restore a migrated file's content-approval state.
|
|
2966
|
+
|
|
2967
|
+
A fresh document is pending on a moderated library and approved on one without
|
|
2968
|
+
it, so a draft or rejected source file would otherwise silently become visible.
|
|
2969
|
+
Documents reject a moderation change combined with other properties (``You
|
|
2970
|
+
cannot change moderation status and set other item properties at that same
|
|
2971
|
+
time.``), which is why a list item carries its state in its other system update
|
|
2972
|
+
and a file needs this write of its own, applied last. A library without
|
|
2973
|
+
moderation enabled has no such fields: the write fails and is reported, never
|
|
2974
|
+
fatal.
|
|
2975
|
+
"""
|
|
2976
|
+
if item.item_type == "folder" or not state:
|
|
2977
|
+
return
|
|
2978
|
+
securable = self._securable(item)
|
|
2979
|
+
if securable is None:
|
|
2980
|
+
return
|
|
2981
|
+
try:
|
|
2982
|
+
result = securable.restore_fidelity(approval=dict(state), new_document_update=True).execute_query()
|
|
2983
|
+
except Exception as e: # noqa: BLE001 — approval state is best-effort
|
|
2984
|
+
self.warnings.append(f"approval state for {item.dest_path!r} could not be restored: {e}")
|
|
2985
|
+
return
|
|
2986
|
+
_report_rejected_fields(result, self.warnings, f"approval state {item.dest_path}")
|
|
2987
|
+
|
|
2988
|
+
@site_access(SiteLevel.READ)
|
|
2989
|
+
def read_metadata(self, item: MigrationItem) -> dict | None:
|
|
2990
|
+
"""Comparable attributes of the written item (for the metadata diff)."""
|
|
2991
|
+
if item.item_type == "folder":
|
|
2992
|
+
# A folder is an item too: the timestamp system update lands on its list
|
|
2993
|
+
# item, and the folder resource reflects it (same read as for a file).
|
|
2994
|
+
folder = (
|
|
2995
|
+
self._folder.context.web.get_folder_by_server_relative_path(self._url(item).rstrip("/"))
|
|
2996
|
+
.get()
|
|
2997
|
+
.execute_query()
|
|
2998
|
+
)
|
|
2999
|
+
return {
|
|
3000
|
+
"created": iso_or_none(folder.time_created),
|
|
3001
|
+
"modified": iso_or_none(folder.time_last_modified),
|
|
3002
|
+
}
|
|
3003
|
+
file = self._folder.context.web.get_file_by_server_relative_url(self._url(item)).get().execute_query()
|
|
3004
|
+
metadata = {
|
|
3005
|
+
"created": iso_or_none(file.time_created),
|
|
3006
|
+
"modified": iso_or_none(file.time_last_modified),
|
|
3007
|
+
"size_bytes": file.length or 0,
|
|
3008
|
+
}
|
|
3009
|
+
status = self._target_moderation_status(item)
|
|
3010
|
+
if status is not None:
|
|
3011
|
+
metadata["moderation_status"] = status
|
|
3012
|
+
return metadata
|
|
3013
|
+
|
|
3014
|
+
def _target_moderation_status(self, item: MigrationItem) -> str | None:
|
|
3015
|
+
"""The written file's approval status, or ``None`` when not readable."""
|
|
3016
|
+
securable = self._securable(item)
|
|
3017
|
+
if securable is None:
|
|
3018
|
+
return None
|
|
3019
|
+
try:
|
|
3020
|
+
securable.select([_MODERATION_STATUS]).get().execute_query()
|
|
3021
|
+
except Exception: # noqa: BLE001 — a library without moderation has no such column
|
|
3022
|
+
return None
|
|
3023
|
+
status = securable.moderation_status
|
|
3024
|
+
return None if status is None else str(status.value)
|
|
3025
|
+
|
|
3026
|
+
def read_permissions(self, item: MigrationItem) -> list[PermissionEntry]:
|
|
3027
|
+
"""Read the written item's *unique* role assignments (for the permission diff)."""
|
|
3028
|
+
securable = self._securable(item)
|
|
3029
|
+
if securable is None or not _has_unique_role_assignments(securable, refresh=True):
|
|
3030
|
+
return []
|
|
3031
|
+
return _read_role_assignments(securable, normalize=self._principals().normalize)
|
|
3032
|
+
|
|
3033
|
+
def _fresh_securable(self, item: MigrationItem):
|
|
3034
|
+
"""Re-read the written item so its properties reflect what was applied."""
|
|
3035
|
+
securable = self._securable(item)
|
|
3036
|
+
if securable is not None:
|
|
3037
|
+
securable.get().execute_query()
|
|
3038
|
+
return securable
|
|
3039
|
+
|
|
3040
|
+
def read_authorship(self, item: MigrationItem) -> tuple[str | None, str | None]:
|
|
3041
|
+
"""The written item's author/editor login names (for the authorship diff)."""
|
|
3042
|
+
securable = self._fresh_securable(item)
|
|
3043
|
+
if securable is None:
|
|
3044
|
+
return (None, None)
|
|
3045
|
+
return (
|
|
3046
|
+
_user_login(self._folder.context.web, securable.author_id, self._login_cache),
|
|
3047
|
+
_user_login(self._folder.context.web, securable.editor_id, self._login_cache),
|
|
3048
|
+
)
|
|
3049
|
+
|
|
503
3050
|
def _securable(self, item: MigrationItem):
|
|
504
3051
|
url = self._url(item).rstrip("/")
|
|
505
3052
|
if item.item_type == "folder":
|
|
506
3053
|
return self._folder.context.web.get_folder_by_server_relative_path(url).list_item_all_fields
|
|
507
3054
|
return self._folder.context.web.get_file_by_server_relative_url(url).listItemAllFields
|
|
508
3055
|
|
|
509
|
-
def _role_definition(self, name: str) -> "RoleDefinition | None":
|
|
510
|
-
"""Resolve (and cache) a target role definition by name."""
|
|
511
|
-
if self._role_definitions is None:
|
|
512
|
-
loaded = self._folder.context.web.role_definitions.get().execute_query()
|
|
513
|
-
self._role_definitions = {rd.name: rd for rd in loaded if rd.name}
|
|
514
|
-
return self._role_definitions.get(name)
|
|
515
|
-
|
|
516
3056
|
def commit(self, options=None) -> None:
|
|
517
|
-
|
|
3057
|
+
self._pending_authorship.clear()
|
|
518
3058
|
|
|
519
3059
|
def close(self) -> None:
|
|
520
3060
|
pass
|