diff --git a/sailpoint/__init__.py b/sailpoint/__init__.py index 725d117c8..7ebffa727 100644 --- a/sailpoint/__init__.py +++ b/sailpoint/__init__.py @@ -13,320 +13,524 @@ # # If two partitions share a resource name, SourcesApi automatically combines both # via Python multiple inheritance — existing imports never change. +# +# API classes load lazily (PEP 562). `import sailpoint` loads only the shared +# support modules below. A partition package loads the first time one of its +# API classes is accessed, for example `from sailpoint import SourcesApi` or +# `SailPoint.SourcesApi`. + +import importlib +import threading +from typing import TYPE_CHECKING, Any, Dict, List, Tuple -# --- Shared ApiClient --- +# --- Shared ApiClient and common utilities (eager, small) --- from sailpoint.api_client import ApiClient +from sailpoint.configuration import Configuration, ConfigurationParams +from sailpoint.paginator import Paginator + +# --- Lazy API exports: resource name -> ((module path, class name), ...) --- +# A resource with more than one entry is combined via multiple inheritance, +# latest first so its MRO wins. +_API_EXPORTS: Dict[str, Tuple[Tuple[str, str], ...]] = { + "AccessModelMetadataApi": (("sailpoint.access_model_metadata.api.access_model_metadata_api", "AccessModelMetadataApi"),), + "AccessProfilesApi": (("sailpoint.access_profiles.api.access_profiles_api", "AccessProfilesApi"),), + "AccessRequestApprovalsApi": (("sailpoint.access_request_approvals.api.access_request_approvals_api", "AccessRequestApprovalsApi"),), + "AccessRequestIdentityMetricsApi": (("sailpoint.access_request_identity_metrics.api.access_request_identity_metrics_api", "AccessRequestIdentityMetricsApi"),), + "AccessRequestsApi": (("sailpoint.access_requests.api.access_requests_api", "AccessRequestsApi"),), + "AccountActivitiesApi": (("sailpoint.account_activities.api.account_activities_api", "AccountActivitiesApi"),), + "AccountAggregationsApi": (("sailpoint.account_aggregations.api.account_aggregations_api", "AccountAggregationsApi"),), + "AccountDeletionRequestsApi": (("sailpoint.account_deletion_requests.api.account_deletion_requests_api", "AccountDeletionRequestsApi"),), + "AccountUsagesApi": (("sailpoint.account_usages.api.account_usages_api", "AccountUsagesApi"),), + "AccountsApi": (("sailpoint.accounts.api.accounts_api", "AccountsApi"),), + "ApiUsageApi": (("sailpoint.api_usage.api.api_usage_api", "ApiUsageApi"),), + "ApplicationDiscoveryApi": (("sailpoint.application_discovery.api.application_discovery_api", "ApplicationDiscoveryApi"),), + "ApprovalsApi": (("sailpoint.approvals.api.approvals_api", "ApprovalsApi"),), + "AppsApi": (("sailpoint.apps.api.apps_api", "AppsApi"),), + "AuthProfileApi": (("sailpoint.auth_profile.api.auth_profile_api", "AuthProfileApi"),), + "AuthUsersApi": (("sailpoint.auth_users.api.auth_users_api", "AuthUsersApi"),), + "BrandingApi": (("sailpoint.branding.api.branding_api", "BrandingApi"),), + "BusinessApplicationsApi": (("sailpoint.business_applications.api.business_applications_api", "BusinessApplicationsApi"),), + "CertificationCampaignFiltersApi": (("sailpoint.certification_campaign_filters.api.certification_campaign_filters_api", "CertificationCampaignFiltersApi"),), + "CertificationCampaignsApi": (("sailpoint.certification_campaigns.api.certification_campaigns_api", "CertificationCampaignsApi"),), + "CertificationSummariesApi": (("sailpoint.certification_summaries.api.certification_summaries_api", "CertificationSummariesApi"),), + "CertificationsApi": (("sailpoint.certifications.api.certifications_api", "CertificationsApi"),), + "ClassifySourceApi": (("sailpoint.classify_source.api.classify_source_api", "ClassifySourceApi"),), + "ConfigurationHubApi": (("sailpoint.configuration_hub.api.configuration_hub_api", "ConfigurationHubApi"),), + "ConnectorCustomizersApi": (("sailpoint.connector_customizers.api.connector_customizers_api", "ConnectorCustomizersApi"),), + "ConnectorRuleManagementApi": (("sailpoint.connector_rule_management.api.connector_rule_management_api", "ConnectorRuleManagementApi"),), + "ConnectorsApi": (("sailpoint.connectors.api.connectors_api", "ConnectorsApi"),), + "CustomFormsApi": (("sailpoint.custom_forms.api.custom_forms_api", "CustomFormsApi"),), + "CustomPasswordInstructionsApi": (("sailpoint.custom_password_instructions.api.custom_password_instructions_api", "CustomPasswordInstructionsApi"),), + "CustomUserLevelsApi": (("sailpoint.custom_user_levels.api.custom_user_levels_api", "CustomUserLevelsApi"),), + "DataAccessSecurityApi": (("sailpoint.data_access_security.api.data_access_security_api", "DataAccessSecurityApi"),), + "DataSegmentationApi": (("sailpoint.data_segmentation.api.data_segmentation_api", "DataSegmentationApi"),), + "DeclassifySourceApi": (("sailpoint.declassify_source.api.declassify_source_api", "DeclassifySourceApi"),), + "DimensionsApi": (("sailpoint.dimensions.api.dimensions_api", "DimensionsApi"),), + "EntitlementConnectionsApi": (("sailpoint.entitlement_connections.api.entitlement_connections_api", "EntitlementConnectionsApi"),), + "EntitlementsApi": (("sailpoint.entitlements.api.entitlements_api", "EntitlementsApi"),), + "GlobalTenantSecuritySettingsApi": (("sailpoint.global_tenant_security_settings.api.global_tenant_security_settings_api", "GlobalTenantSecuritySettingsApi"),), + "GovernanceGroupsApi": (("sailpoint.governance_groups.api.governance_groups_api", "GovernanceGroupsApi"),), + "IAIAccessRequestRecommendationsApi": (("sailpoint.iai_access_request_recommendations.api.iai_access_request_recommendations_api", "IAIAccessRequestRecommendationsApi"),), + "IAICommonAccessApi": (("sailpoint.iai_common_access.api.iai_common_access_api", "IAICommonAccessApi"),), + "IAIOutliersApi": (("sailpoint.iai_outliers.api.iai_outliers_api", "IAIOutliersApi"),), + "IAIPeerGroupStrategiesApi": (("sailpoint.iai_peer_group_strategies.api.iai_peer_group_strategies_api", "IAIPeerGroupStrategiesApi"),), + "IAIRecommendationsApi": (("sailpoint.iai_recommendations.api.iai_recommendations_api", "IAIRecommendationsApi"),), + "IAIRoleMiningApi": (("sailpoint.iai_role_mining.api.iai_role_mining_api", "IAIRoleMiningApi"),), + "IconsApi": (("sailpoint.icons.api.icons_api", "IconsApi"),), + "IdentitiesApi": (("sailpoint.identities.api.identities_api", "IdentitiesApi"),), + "IdentityAttributesApi": (("sailpoint.identity_attributes.api.identity_attributes_api", "IdentityAttributesApi"),), + "IdentityHistoryApi": (("sailpoint.identity_history.api.identity_history_api", "IdentityHistoryApi"),), + "IdentityProfilesApi": (("sailpoint.identity_profiles.api.identity_profiles_api", "IdentityProfilesApi"),), + "IntelligenceApi": (("sailpoint.intelligence.api.intelligence_api", "IntelligenceApi"),), + "IntelligencePackageApi": (("sailpoint.intelligence_package.api.intelligence_package_api", "IntelligencePackageApi"),), + "JITAccessApi": (("sailpoint.jit_access.api.jit_access_api", "JITAccessApi"),), + "JITActivationsApi": (("sailpoint.jit_activations.api.jit_activations_api", "JITActivationsApi"),), + "LaunchersApi": (("sailpoint.launchers.api.launchers_api", "LaunchersApi"),), + "LifecycleStatesApi": (("sailpoint.lifecycle_states.api.lifecycle_states_api", "LifecycleStatesApi"),), + "MachineAccountClassifyApi": (("sailpoint.machine_account_classify.api.machine_account_classify_api", "MachineAccountClassifyApi"),), + "MachineAccountCreationRequestApi": (("sailpoint.machine_account_creation_request.api.machine_account_creation_request_api", "MachineAccountCreationRequestApi"),), + "MachineAccountMappingsApi": (("sailpoint.machine_account_mappings.api.machine_account_mappings_api", "MachineAccountMappingsApi"),), + "MachineAccountSubtypesApi": (("sailpoint.machine_account_subtypes.api.machine_account_subtypes_api", "MachineAccountSubtypesApi"),), + "MachineAccountsApi": (("sailpoint.machine_accounts.api.machine_accounts_api", "MachineAccountsApi"),), + "MachineClassificationConfigApi": (("sailpoint.machine_classification_config.api.machine_classification_config_api", "MachineClassificationConfigApi"),), + "MachineIdentitiesApi": (("sailpoint.machine_identities.api.machine_identities_api", "MachineIdentitiesApi"),), + "MachineIdentityLifecycleActionsApi": (("sailpoint.machine_identities_lifecycle_actions.api.machine_identity_lifecycle_actions_api", "MachineIdentityLifecycleActionsApi"),), + "ManagedClientsApi": (("sailpoint.managed_clients.api.managed_clients_api", "ManagedClientsApi"),), + "ManagedClusterTypesApi": (("sailpoint.managed_cluster_types.api.managed_cluster_types_api", "ManagedClusterTypesApi"),), + "ManagedClustersApi": (("sailpoint.managed_clusters.api.managed_clusters_api", "ManagedClustersApi"),), + "MFAConfigurationApi": (("sailpoint.mfa_configuration.api.mfa_configuration_api", "MFAConfigurationApi"),), + "MultiHostIntegrationApi": (("sailpoint.multi_host_integration.api.multi_host_integration_api", "MultiHostIntegrationApi"),), + "AdvancedSearchApi": (("sailpoint.nerm.api.advanced_search_api", "AdvancedSearchApi"),), + "AttributeOptionsApi": (("sailpoint.nerm.api.attribute_options_api", "AttributeOptionsApi"),), + "AttributesApi": (("sailpoint.nerm.api.attributes_api", "AttributesApi"),), + "AuditsApi": (("sailpoint.nerm.api.audits_api", "AuditsApi"),), + "ConsolidationApi": (("sailpoint.nerm.api.consolidation_api", "ConsolidationApi"),), + "DelegationsApi": (("sailpoint.nerm.api.delegations_api", "DelegationsApi"),), + "FormAttributesApi": (("sailpoint.nerm.api.form_attributes_api", "FormAttributesApi"),), + "FormsApi": (("sailpoint.nerm.api.forms_api", "FormsApi"),), + "IdentityProofingResultsApi": (("sailpoint.nerm.api.identity_proofing_results_api", "IdentityProofingResultsApi"),), + "IscAccountsApi": (("sailpoint.nerm.api.isc_accounts_api", "IscAccountsApi"),), + "JobStatusApi": (("sailpoint.nerm.api.job_status_api", "JobStatusApi"),), + "LanguagesApi": (("sailpoint.nerm.api.languages_api", "LanguagesApi"),), + "PageContentTranslationsApi": (("sailpoint.nerm.api.page_content_translations_api", "PageContentTranslationsApi"),), + "PageContentsApi": (("sailpoint.nerm.api.page_contents_api", "PageContentsApi"),), + "PageElementsApi": (("sailpoint.nerm.api.page_elements_api", "PageElementsApi"),), + "PagesApi": (("sailpoint.nerm.api.pages_api", "PagesApi"),), + "PermissionsApi": (("sailpoint.nerm.api.permissions_api", "PermissionsApi"),), + "ProfileTypeRolesApi": (("sailpoint.nerm.api.profile_type_roles_api", "ProfileTypeRolesApi"),), + "ProfileTypesApi": (("sailpoint.nerm.api.profile_types_api", "ProfileTypesApi"),), + "ProfilesApi": (("sailpoint.nerm.api.profiles_api", "ProfilesApi"),), + "RiskLevelsApi": (("sailpoint.nerm.api.risk_levels_api", "RiskLevelsApi"),), + "RiskScoresApi": (("sailpoint.nerm.api.risk_scores_api", "RiskScoresApi"),), + "RoleProfilesApi": (("sailpoint.nerm.api.role_profiles_api", "RoleProfilesApi"),), + "RolesApi": (("sailpoint.roles.api.roles_api", "RolesApi"), ("sailpoint.nerm.api.roles_api", "RolesApi")), + "SyncedAttributesApi": (("sailpoint.nerm.api.synced_attributes_api", "SyncedAttributesApi"),), + "SystemRolePermissionsApi": (("sailpoint.nerm.api.system_role_permissions_api", "SystemRolePermissionsApi"),), + "SystemRolesApi": (("sailpoint.nerm.api.system_roles_api", "SystemRolesApi"),), + "UserManagersApi": (("sailpoint.nerm.api.user_managers_api", "UserManagersApi"),), + "UserProfilesApi": (("sailpoint.nerm.api.user_profiles_api", "UserProfilesApi"),), + "UserRolesApi": (("sailpoint.nerm.api.user_roles_api", "UserRolesApi"),), + "UsersApi": (("sailpoint.nerm.api.users_api", "UsersApi"),), + "WorkflowActionPerformerApi": (("sailpoint.nerm.api.workflow_action_performer_api", "WorkflowActionPerformerApi"),), + "WorkflowActionsApi": (("sailpoint.nerm.api.workflow_actions_api", "WorkflowActionsApi"),), + "WorkflowSessionsApi": (("sailpoint.nerm.api.workflow_sessions_api", "WorkflowSessionsApi"),), + "WorkflowsApi": (("sailpoint.workflows.api.workflows_api", "WorkflowsApi"), ("sailpoint.nerm.api.workflows_api", "WorkflowsApi")), + "NonEmployeeLifecycleManagementApi": (("sailpoint.non_employee_lifecycle_management.api.non_employee_lifecycle_management_api", "NonEmployeeLifecycleManagementApi"),), + "NotificationsApi": (("sailpoint.notifications.api.notifications_api", "NotificationsApi"),), + "OAuthClientsApi": (("sailpoint.oauth_clients.api.o_auth_clients_api", "OAuthClientsApi"),), + "OrgConfigApi": (("sailpoint.org_config.api.org_config_api", "OrgConfigApi"),), + "ParameterStorageApi": (("sailpoint.parameter_storage.api.parameter_storage_api", "ParameterStorageApi"),), + "PasswordConfigurationApi": (("sailpoint.password_configuration.api.password_configuration_api", "PasswordConfigurationApi"),), + "PasswordDictionaryApi": (("sailpoint.password_dictionary.api.password_dictionary_api", "PasswordDictionaryApi"),), + "PasswordManagementApi": (("sailpoint.password_management.api.password_management_api", "PasswordManagementApi"),), + "PasswordPoliciesApi": (("sailpoint.password_policies.api.password_policies_api", "PasswordPoliciesApi"),), + "PasswordSyncGroupsApi": (("sailpoint.password_sync_groups.api.password_sync_groups_api", "PasswordSyncGroupsApi"),), + "PersonalAccessTokensApi": (("sailpoint.personal_access_tokens.api.personal_access_tokens_api", "PersonalAccessTokensApi"),), + "PrivilegeCriteriaApi": (("sailpoint.privilege_criteria.api.privilege_criteria_api", "PrivilegeCriteriaApi"),), + "PrivilegeCriteriaConfigurationApi": (("sailpoint.privilege_criteria_configuration.api.privilege_criteria_configuration_api", "PrivilegeCriteriaConfigurationApi"),), + "PromptInsightsApi": (("sailpoint.prompt_insights.api.prompt_insights_api", "PromptInsightsApi"),), + "PublicIdentitiesApi": (("sailpoint.public_identities.api.public_identities_api", "PublicIdentitiesApi"),), + "PublicIdentitiesConfigApi": (("sailpoint.public_identities_config.api.public_identities_config_api", "PublicIdentitiesConfigApi"),), + "PublicMachineIdentitiesApi": (("sailpoint.public_machine_identities.api.public_machine_identities_api", "PublicMachineIdentitiesApi"),), + "ReportsDataExtractionApi": (("sailpoint.reports_data_extraction.api.reports_data_extraction_api", "ReportsDataExtractionApi"),), + "RequestableObjectsApi": (("sailpoint.requestable_objects.api.requestable_objects_api", "RequestableObjectsApi"),), + "RoleInsightsApi": (("sailpoint.role_insights.api.role_insights_api", "RoleInsightsApi"),), + "RolePropagationApi": (("sailpoint.role_propagation.api.role_propagation_api", "RolePropagationApi"),), + "SavedSearchApi": (("sailpoint.saved_search.api.saved_search_api", "SavedSearchApi"),), + "ScheduledSearchApi": (("sailpoint.scheduled_search.api.scheduled_search_api", "ScheduledSearchApi"),), + "SearchApi": (("sailpoint.search.api.search_api", "SearchApi"),), + "SearchAttributeConfigurationApi": (("sailpoint.search_attribute_configuration.api.search_attribute_configuration_api", "SearchAttributeConfigurationApi"),), + "SegmentsApi": (("sailpoint.segments.api.segments_api", "SegmentsApi"),), + "ServiceDeskIntegrationApi": (("sailpoint.service_desk_integration.api.service_desk_integration_api", "ServiceDeskIntegrationApi"),), + "SharedSignalsFrameworkSSFApi": (("sailpoint.shared_signals_framework_ssf.api.shared_signals_framework_ssf_api", "SharedSignalsFrameworkSSFApi"),), + "SIMIntegrationsApi": (("sailpoint.sim_integrations.api.sim_integrations_api", "SIMIntegrationsApi"),), + "SODControlsApi": (("sailpoint.sod_controls.api.sod_controls_api", "SODControlsApi"),), + "SODPoliciesApi": (("sailpoint.sod_policies.api.sod_policies_api", "SODPoliciesApi"),), + "SODViolationsApi": (("sailpoint.sod_violations.api.sod_violations_api", "SODViolationsApi"),), + "SourceUsagesApi": (("sailpoint.source_usages.api.source_usages_api", "SourceUsagesApi"),), + "SourcesApi": (("sailpoint.sources.api.sources_api", "SourcesApi"),), + "SPConfigApi": (("sailpoint.sp_config.api.sp_config_api", "SPConfigApi"),), + "SuggestedEntitlementDescriptionApi": (("sailpoint.suggested_entitlement_description.api.suggested_entitlement_description_api", "SuggestedEntitlementDescriptionApi"),), + "TaggedObjectsApi": (("sailpoint.tagged_objects.api.tagged_objects_api", "TaggedObjectsApi"),), + "TagsApi": (("sailpoint.tags.api.tags_api", "TagsApi"),), + "TaskManagementApi": (("sailpoint.task_management.api.task_management_api", "TaskManagementApi"),), + "TenantApi": (("sailpoint.tenant.api.tenant_api", "TenantApi"),), + "TenantContextApi": (("sailpoint.tenant_context.api.tenant_context_api", "TenantContextApi"),), + "TransformsApi": (("sailpoint.transforms.api.transforms_api", "TransformsApi"),), + "TriggersApi": (("sailpoint.triggers.api.triggers_api", "TriggersApi"),), + "UIMetadataApi": (("sailpoint.ui_metadata.api.ui_metadata_api", "UIMetadataApi"),), + "WorkItemsApi": (("sailpoint.work_items.api.work_items_api", "WorkItemsApi"),), + "WorkReassignmentApi": (("sailpoint.work_reassignment.api.work_reassignment_api", "WorkReassignmentApi"),), +} + +__all__ = [ + "ApiClient", + "Configuration", + "ConfigurationParams", + "Paginator", + "SailPoint", + "AccessModelMetadataApi", + "AccessProfilesApi", + "AccessRequestApprovalsApi", + "AccessRequestIdentityMetricsApi", + "AccessRequestsApi", + "AccountActivitiesApi", + "AccountAggregationsApi", + "AccountDeletionRequestsApi", + "AccountUsagesApi", + "AccountsApi", + "ApiUsageApi", + "ApplicationDiscoveryApi", + "ApprovalsApi", + "AppsApi", + "AuthProfileApi", + "AuthUsersApi", + "BrandingApi", + "BusinessApplicationsApi", + "CertificationCampaignFiltersApi", + "CertificationCampaignsApi", + "CertificationSummariesApi", + "CertificationsApi", + "ClassifySourceApi", + "ConfigurationHubApi", + "ConnectorCustomizersApi", + "ConnectorRuleManagementApi", + "ConnectorsApi", + "CustomFormsApi", + "CustomPasswordInstructionsApi", + "CustomUserLevelsApi", + "DataAccessSecurityApi", + "DataSegmentationApi", + "DeclassifySourceApi", + "DimensionsApi", + "EntitlementConnectionsApi", + "EntitlementsApi", + "GlobalTenantSecuritySettingsApi", + "GovernanceGroupsApi", + "IAIAccessRequestRecommendationsApi", + "IAICommonAccessApi", + "IAIOutliersApi", + "IAIPeerGroupStrategiesApi", + "IAIRecommendationsApi", + "IAIRoleMiningApi", + "IconsApi", + "IdentitiesApi", + "IdentityAttributesApi", + "IdentityHistoryApi", + "IdentityProfilesApi", + "IntelligenceApi", + "IntelligencePackageApi", + "JITAccessApi", + "JITActivationsApi", + "LaunchersApi", + "LifecycleStatesApi", + "MachineAccountClassifyApi", + "MachineAccountCreationRequestApi", + "MachineAccountMappingsApi", + "MachineAccountSubtypesApi", + "MachineAccountsApi", + "MachineClassificationConfigApi", + "MachineIdentitiesApi", + "MachineIdentityLifecycleActionsApi", + "ManagedClientsApi", + "ManagedClusterTypesApi", + "ManagedClustersApi", + "MFAConfigurationApi", + "MultiHostIntegrationApi", + "AdvancedSearchApi", + "AttributeOptionsApi", + "AttributesApi", + "AuditsApi", + "ConsolidationApi", + "DelegationsApi", + "FormAttributesApi", + "FormsApi", + "IdentityProofingResultsApi", + "IscAccountsApi", + "JobStatusApi", + "LanguagesApi", + "PageContentTranslationsApi", + "PageContentsApi", + "PageElementsApi", + "PagesApi", + "PermissionsApi", + "ProfileTypeRolesApi", + "ProfileTypesApi", + "ProfilesApi", + "RiskLevelsApi", + "RiskScoresApi", + "RoleProfilesApi", + "RolesApi", + "SyncedAttributesApi", + "SystemRolePermissionsApi", + "SystemRolesApi", + "UserManagersApi", + "UserProfilesApi", + "UserRolesApi", + "UsersApi", + "WorkflowActionPerformerApi", + "WorkflowActionsApi", + "WorkflowSessionsApi", + "WorkflowsApi", + "NonEmployeeLifecycleManagementApi", + "NotificationsApi", + "OAuthClientsApi", + "OrgConfigApi", + "ParameterStorageApi", + "PasswordConfigurationApi", + "PasswordDictionaryApi", + "PasswordManagementApi", + "PasswordPoliciesApi", + "PasswordSyncGroupsApi", + "PersonalAccessTokensApi", + "PrivilegeCriteriaApi", + "PrivilegeCriteriaConfigurationApi", + "PromptInsightsApi", + "PublicIdentitiesApi", + "PublicIdentitiesConfigApi", + "PublicMachineIdentitiesApi", + "ReportsDataExtractionApi", + "RequestableObjectsApi", + "RoleInsightsApi", + "RolePropagationApi", + "SavedSearchApi", + "ScheduledSearchApi", + "SearchApi", + "SearchAttributeConfigurationApi", + "SegmentsApi", + "ServiceDeskIntegrationApi", + "SharedSignalsFrameworkSSFApi", + "SIMIntegrationsApi", + "SODControlsApi", + "SODPoliciesApi", + "SODViolationsApi", + "SourceUsagesApi", + "SourcesApi", + "SPConfigApi", + "SuggestedEntitlementDescriptionApi", + "TaggedObjectsApi", + "TagsApi", + "TaskManagementApi", + "TenantApi", + "TenantContextApi", + "TransformsApi", + "TriggersApi", + "UIMetadataApi", + "WorkItemsApi", + "WorkReassignmentApi", +] + +_load_lock = threading.RLock() + + +def _load_api(name: str) -> Any: + """Import the API class for `name`, build it if combined, and cache it.""" + with _load_lock: + cached = globals().get(name) + if cached is not None: + return cached + bases = tuple( + getattr(importlib.import_module(module_path), class_name) + for module_path, class_name in _API_EXPORTS[name] + ) + value = bases[0] if len(bases) == 1 else type(name, bases, {"__module__": __name__}) + globals()[name] = value + return value -# --- Partition API class imports (private) --- -from sailpoint.access_model_metadata.api.access_model_metadata_api import AccessModelMetadataApi as _access_model_metadata__AccessModelMetadataApi -from sailpoint.access_profiles.api.access_profiles_api import AccessProfilesApi as _access_profiles__AccessProfilesApi -from sailpoint.access_request_approvals.api.access_request_approvals_api import AccessRequestApprovalsApi as _access_request_approvals__AccessRequestApprovalsApi -from sailpoint.access_request_identity_metrics.api.access_request_identity_metrics_api import AccessRequestIdentityMetricsApi as _access_request_identity_metrics__AccessRequestIdentityMetricsApi -from sailpoint.access_requests.api.access_requests_api import AccessRequestsApi as _access_requests__AccessRequestsApi -from sailpoint.account_activities.api.account_activities_api import AccountActivitiesApi as _account_activities__AccountActivitiesApi -from sailpoint.account_aggregations.api.account_aggregations_api import AccountAggregationsApi as _account_aggregations__AccountAggregationsApi -from sailpoint.account_deletion_requests.api.account_deletion_requests_api import AccountDeletionRequestsApi as _account_deletion_requests__AccountDeletionRequestsApi -from sailpoint.account_usages.api.account_usages_api import AccountUsagesApi as _account_usages__AccountUsagesApi -from sailpoint.accounts.api.accounts_api import AccountsApi as _accounts__AccountsApi -from sailpoint.api_usage.api.api_usage_api import ApiUsageApi as _api_usage__ApiUsageApi -from sailpoint.application_discovery.api.application_discovery_api import ApplicationDiscoveryApi as _application_discovery__ApplicationDiscoveryApi -from sailpoint.approvals.api.approvals_api import ApprovalsApi as _approvals__ApprovalsApi -from sailpoint.apps.api.apps_api import AppsApi as _apps__AppsApi -from sailpoint.auth_profile.api.auth_profile_api import AuthProfileApi as _auth_profile__AuthProfileApi -from sailpoint.auth_users.api.auth_users_api import AuthUsersApi as _auth_users__AuthUsersApi -from sailpoint.branding.api.branding_api import BrandingApi as _branding__BrandingApi -from sailpoint.business_applications.api.business_applications_api import BusinessApplicationsApi as _business_applications__BusinessApplicationsApi -from sailpoint.certification_campaign_filters.api.certification_campaign_filters_api import CertificationCampaignFiltersApi as _certification_campaign_filters__CertificationCampaignFiltersApi -from sailpoint.certification_campaigns.api.certification_campaigns_api import CertificationCampaignsApi as _certification_campaigns__CertificationCampaignsApi -from sailpoint.certification_summaries.api.certification_summaries_api import CertificationSummariesApi as _certification_summaries__CertificationSummariesApi -from sailpoint.certifications.api.certifications_api import CertificationsApi as _certifications__CertificationsApi -from sailpoint.classify_source.api.classify_source_api import ClassifySourceApi as _classify_source__ClassifySourceApi -from sailpoint.configuration_hub.api.configuration_hub_api import ConfigurationHubApi as _configuration_hub__ConfigurationHubApi -from sailpoint.connector_customizers.api.connector_customizers_api import ConnectorCustomizersApi as _connector_customizers__ConnectorCustomizersApi -from sailpoint.connector_rule_management.api.connector_rule_management_api import ConnectorRuleManagementApi as _connector_rule_management__ConnectorRuleManagementApi -from sailpoint.connectors.api.connectors_api import ConnectorsApi as _connectors__ConnectorsApi -from sailpoint.custom_forms.api.custom_forms_api import CustomFormsApi as _custom_forms__CustomFormsApi -from sailpoint.custom_password_instructions.api.custom_password_instructions_api import CustomPasswordInstructionsApi as _custom_password_instructions__CustomPasswordInstructionsApi -from sailpoint.custom_user_levels.api.custom_user_levels_api import CustomUserLevelsApi as _custom_user_levels__CustomUserLevelsApi -from sailpoint.data_access_security.api.data_access_security_api import DataAccessSecurityApi as _data_access_security__DataAccessSecurityApi -from sailpoint.data_segmentation.api.data_segmentation_api import DataSegmentationApi as _data_segmentation__DataSegmentationApi -from sailpoint.declassify_source.api.declassify_source_api import DeclassifySourceApi as _declassify_source__DeclassifySourceApi -from sailpoint.dimensions.api.dimensions_api import DimensionsApi as _dimensions__DimensionsApi -from sailpoint.entitlement_connections.api.entitlement_connections_api import EntitlementConnectionsApi as _entitlement_connections__EntitlementConnectionsApi -from sailpoint.entitlements.api.entitlements_api import EntitlementsApi as _entitlements__EntitlementsApi -from sailpoint.global_tenant_security_settings.api.global_tenant_security_settings_api import GlobalTenantSecuritySettingsApi as _global_tenant_security_settings__GlobalTenantSecuritySettingsApi -from sailpoint.governance_groups.api.governance_groups_api import GovernanceGroupsApi as _governance_groups__GovernanceGroupsApi -from sailpoint.iai_access_request_recommendations.api.iai_access_request_recommendations_api import IAIAccessRequestRecommendationsApi as _iai_access_request_recommendations__IAIAccessRequestRecommendationsApi -from sailpoint.iai_common_access.api.iai_common_access_api import IAICommonAccessApi as _iai_common_access__IAICommonAccessApi -from sailpoint.iai_outliers.api.iai_outliers_api import IAIOutliersApi as _iai_outliers__IAIOutliersApi -from sailpoint.iai_peer_group_strategies.api.iai_peer_group_strategies_api import IAIPeerGroupStrategiesApi as _iai_peer_group_strategies__IAIPeerGroupStrategiesApi -from sailpoint.iai_recommendations.api.iai_recommendations_api import IAIRecommendationsApi as _iai_recommendations__IAIRecommendationsApi -from sailpoint.iai_role_mining.api.iai_role_mining_api import IAIRoleMiningApi as _iai_role_mining__IAIRoleMiningApi -from sailpoint.icons.api.icons_api import IconsApi as _icons__IconsApi -from sailpoint.identities.api.identities_api import IdentitiesApi as _identities__IdentitiesApi -from sailpoint.identity_attributes.api.identity_attributes_api import IdentityAttributesApi as _identity_attributes__IdentityAttributesApi -from sailpoint.identity_history.api.identity_history_api import IdentityHistoryApi as _identity_history__IdentityHistoryApi -from sailpoint.identity_profiles.api.identity_profiles_api import IdentityProfilesApi as _identity_profiles__IdentityProfilesApi -from sailpoint.intelligence.api.intelligence_api import IntelligenceApi as _intelligence__IntelligenceApi -from sailpoint.intelligence_package.api.intelligence_package_api import IntelligencePackageApi as _intelligence_package__IntelligencePackageApi -from sailpoint.jit_access.api.jit_access_api import JITAccessApi as _jit_access__JITAccessApi -from sailpoint.jit_activations.api.jit_activations_api import JITActivationsApi as _jit_activations__JITActivationsApi -from sailpoint.launchers.api.launchers_api import LaunchersApi as _launchers__LaunchersApi -from sailpoint.lifecycle_states.api.lifecycle_states_api import LifecycleStatesApi as _lifecycle_states__LifecycleStatesApi -from sailpoint.machine_account_classify.api.machine_account_classify_api import MachineAccountClassifyApi as _machine_account_classify__MachineAccountClassifyApi -from sailpoint.machine_account_creation_request.api.machine_account_creation_request_api import MachineAccountCreationRequestApi as _machine_account_creation_request__MachineAccountCreationRequestApi -from sailpoint.machine_account_mappings.api.machine_account_mappings_api import MachineAccountMappingsApi as _machine_account_mappings__MachineAccountMappingsApi -from sailpoint.machine_account_subtypes.api.machine_account_subtypes_api import MachineAccountSubtypesApi as _machine_account_subtypes__MachineAccountSubtypesApi -from sailpoint.machine_accounts.api.machine_accounts_api import MachineAccountsApi as _machine_accounts__MachineAccountsApi -from sailpoint.machine_classification_config.api.machine_classification_config_api import MachineClassificationConfigApi as _machine_classification_config__MachineClassificationConfigApi -from sailpoint.machine_identities.api.machine_identities_api import MachineIdentitiesApi as _machine_identities__MachineIdentitiesApi -from sailpoint.machine_identities_lifecycle_actions.api.machine_identity_lifecycle_actions_api import MachineIdentityLifecycleActionsApi as _machine_identities_lifecycle_actions__MachineIdentityLifecycleActionsApi -from sailpoint.managed_clients.api.managed_clients_api import ManagedClientsApi as _managed_clients__ManagedClientsApi -from sailpoint.managed_cluster_types.api.managed_cluster_types_api import ManagedClusterTypesApi as _managed_cluster_types__ManagedClusterTypesApi -from sailpoint.managed_clusters.api.managed_clusters_api import ManagedClustersApi as _managed_clusters__ManagedClustersApi -from sailpoint.mfa_configuration.api.mfa_configuration_api import MFAConfigurationApi as _mfa_configuration__MFAConfigurationApi -from sailpoint.multi_host_integration.api.multi_host_integration_api import MultiHostIntegrationApi as _multi_host_integration__MultiHostIntegrationApi -from sailpoint.nerm.api.advanced_search_api import AdvancedSearchApi as _nerm__AdvancedSearchApi -from sailpoint.nerm.api.attribute_options_api import AttributeOptionsApi as _nerm__AttributeOptionsApi -from sailpoint.nerm.api.attributes_api import AttributesApi as _nerm__AttributesApi -from sailpoint.nerm.api.audits_api import AuditsApi as _nerm__AuditsApi -from sailpoint.nerm.api.consolidation_api import ConsolidationApi as _nerm__ConsolidationApi -from sailpoint.nerm.api.delegations_api import DelegationsApi as _nerm__DelegationsApi -from sailpoint.nerm.api.form_attributes_api import FormAttributesApi as _nerm__FormAttributesApi -from sailpoint.nerm.api.forms_api import FormsApi as _nerm__FormsApi -from sailpoint.nerm.api.identity_proofing_results_api import IdentityProofingResultsApi as _nerm__IdentityProofingResultsApi -from sailpoint.nerm.api.isc_accounts_api import IscAccountsApi as _nerm__IscAccountsApi -from sailpoint.nerm.api.job_status_api import JobStatusApi as _nerm__JobStatusApi -from sailpoint.nerm.api.languages_api import LanguagesApi as _nerm__LanguagesApi -from sailpoint.nerm.api.page_content_translations_api import PageContentTranslationsApi as _nerm__PageContentTranslationsApi -from sailpoint.nerm.api.page_contents_api import PageContentsApi as _nerm__PageContentsApi -from sailpoint.nerm.api.page_elements_api import PageElementsApi as _nerm__PageElementsApi -from sailpoint.nerm.api.pages_api import PagesApi as _nerm__PagesApi -from sailpoint.nerm.api.permissions_api import PermissionsApi as _nerm__PermissionsApi -from sailpoint.nerm.api.profile_type_roles_api import ProfileTypeRolesApi as _nerm__ProfileTypeRolesApi -from sailpoint.nerm.api.profile_types_api import ProfileTypesApi as _nerm__ProfileTypesApi -from sailpoint.nerm.api.profiles_api import ProfilesApi as _nerm__ProfilesApi -from sailpoint.nerm.api.risk_levels_api import RiskLevelsApi as _nerm__RiskLevelsApi -from sailpoint.nerm.api.risk_scores_api import RiskScoresApi as _nerm__RiskScoresApi -from sailpoint.nerm.api.role_profiles_api import RoleProfilesApi as _nerm__RoleProfilesApi -from sailpoint.nerm.api.roles_api import RolesApi as _nerm__RolesApi -from sailpoint.nerm.api.synced_attributes_api import SyncedAttributesApi as _nerm__SyncedAttributesApi -from sailpoint.nerm.api.system_role_permissions_api import SystemRolePermissionsApi as _nerm__SystemRolePermissionsApi -from sailpoint.nerm.api.system_roles_api import SystemRolesApi as _nerm__SystemRolesApi -from sailpoint.nerm.api.user_managers_api import UserManagersApi as _nerm__UserManagersApi -from sailpoint.nerm.api.user_profiles_api import UserProfilesApi as _nerm__UserProfilesApi -from sailpoint.nerm.api.user_roles_api import UserRolesApi as _nerm__UserRolesApi -from sailpoint.nerm.api.users_api import UsersApi as _nerm__UsersApi -from sailpoint.nerm.api.workflow_action_performer_api import WorkflowActionPerformerApi as _nerm__WorkflowActionPerformerApi -from sailpoint.nerm.api.workflow_actions_api import WorkflowActionsApi as _nerm__WorkflowActionsApi -from sailpoint.nerm.api.workflow_sessions_api import WorkflowSessionsApi as _nerm__WorkflowSessionsApi -from sailpoint.nerm.api.workflows_api import WorkflowsApi as _nerm__WorkflowsApi -from sailpoint.non_employee_lifecycle_management.api.non_employee_lifecycle_management_api import NonEmployeeLifecycleManagementApi as _non_employee_lifecycle_management__NonEmployeeLifecycleManagementApi -from sailpoint.notifications.api.notifications_api import NotificationsApi as _notifications__NotificationsApi -from sailpoint.oauth_clients.api.o_auth_clients_api import OAuthClientsApi as _oauth_clients__OAuthClientsApi -from sailpoint.org_config.api.org_config_api import OrgConfigApi as _org_config__OrgConfigApi -from sailpoint.parameter_storage.api.parameter_storage_api import ParameterStorageApi as _parameter_storage__ParameterStorageApi -from sailpoint.password_configuration.api.password_configuration_api import PasswordConfigurationApi as _password_configuration__PasswordConfigurationApi -from sailpoint.password_dictionary.api.password_dictionary_api import PasswordDictionaryApi as _password_dictionary__PasswordDictionaryApi -from sailpoint.password_management.api.password_management_api import PasswordManagementApi as _password_management__PasswordManagementApi -from sailpoint.password_policies.api.password_policies_api import PasswordPoliciesApi as _password_policies__PasswordPoliciesApi -from sailpoint.password_sync_groups.api.password_sync_groups_api import PasswordSyncGroupsApi as _password_sync_groups__PasswordSyncGroupsApi -from sailpoint.personal_access_tokens.api.personal_access_tokens_api import PersonalAccessTokensApi as _personal_access_tokens__PersonalAccessTokensApi -from sailpoint.privilege_criteria.api.privilege_criteria_api import PrivilegeCriteriaApi as _privilege_criteria__PrivilegeCriteriaApi -from sailpoint.privilege_criteria_configuration.api.privilege_criteria_configuration_api import PrivilegeCriteriaConfigurationApi as _privilege_criteria_configuration__PrivilegeCriteriaConfigurationApi -from sailpoint.prompt_insights.api.prompt_insights_api import PromptInsightsApi as _prompt_insights__PromptInsightsApi -from sailpoint.public_identities.api.public_identities_api import PublicIdentitiesApi as _public_identities__PublicIdentitiesApi -from sailpoint.public_identities_config.api.public_identities_config_api import PublicIdentitiesConfigApi as _public_identities_config__PublicIdentitiesConfigApi -from sailpoint.public_machine_identities.api.public_machine_identities_api import PublicMachineIdentitiesApi as _public_machine_identities__PublicMachineIdentitiesApi -from sailpoint.reports_data_extraction.api.reports_data_extraction_api import ReportsDataExtractionApi as _reports_data_extraction__ReportsDataExtractionApi -from sailpoint.requestable_objects.api.requestable_objects_api import RequestableObjectsApi as _requestable_objects__RequestableObjectsApi -from sailpoint.role_insights.api.role_insights_api import RoleInsightsApi as _role_insights__RoleInsightsApi -from sailpoint.role_propagation.api.role_propagation_api import RolePropagationApi as _role_propagation__RolePropagationApi -from sailpoint.roles.api.roles_api import RolesApi as _roles__RolesApi -from sailpoint.saved_search.api.saved_search_api import SavedSearchApi as _saved_search__SavedSearchApi -from sailpoint.scheduled_search.api.scheduled_search_api import ScheduledSearchApi as _scheduled_search__ScheduledSearchApi -from sailpoint.search.api.search_api import SearchApi as _search__SearchApi -from sailpoint.search_attribute_configuration.api.search_attribute_configuration_api import SearchAttributeConfigurationApi as _search_attribute_configuration__SearchAttributeConfigurationApi -from sailpoint.segments.api.segments_api import SegmentsApi as _segments__SegmentsApi -from sailpoint.service_desk_integration.api.service_desk_integration_api import ServiceDeskIntegrationApi as _service_desk_integration__ServiceDeskIntegrationApi -from sailpoint.shared_signals_framework_ssf.api.shared_signals_framework_ssf_api import SharedSignalsFrameworkSSFApi as _shared_signals_framework_ssf__SharedSignalsFrameworkSSFApi -from sailpoint.sim_integrations.api.sim_integrations_api import SIMIntegrationsApi as _sim_integrations__SIMIntegrationsApi -from sailpoint.sod_controls.api.sod_controls_api import SODControlsApi as _sod_controls__SODControlsApi -from sailpoint.sod_policies.api.sod_policies_api import SODPoliciesApi as _sod_policies__SODPoliciesApi -from sailpoint.sod_violations.api.sod_violations_api import SODViolationsApi as _sod_violations__SODViolationsApi -from sailpoint.source_usages.api.source_usages_api import SourceUsagesApi as _source_usages__SourceUsagesApi -from sailpoint.sources.api.sources_api import SourcesApi as _sources__SourcesApi -from sailpoint.sp_config.api.sp_config_api import SPConfigApi as _sp_config__SPConfigApi -from sailpoint.suggested_entitlement_description.api.suggested_entitlement_description_api import SuggestedEntitlementDescriptionApi as _suggested_entitlement_description__SuggestedEntitlementDescriptionApi -from sailpoint.tagged_objects.api.tagged_objects_api import TaggedObjectsApi as _tagged_objects__TaggedObjectsApi -from sailpoint.tags.api.tags_api import TagsApi as _tags__TagsApi -from sailpoint.task_management.api.task_management_api import TaskManagementApi as _task_management__TaskManagementApi -from sailpoint.tenant.api.tenant_api import TenantApi as _tenant__TenantApi -from sailpoint.tenant_context.api.tenant_context_api import TenantContextApi as _tenant_context__TenantContextApi -from sailpoint.transforms.api.transforms_api import TransformsApi as _transforms__TransformsApi -from sailpoint.triggers.api.triggers_api import TriggersApi as _triggers__TriggersApi -from sailpoint.ui_metadata.api.ui_metadata_api import UIMetadataApi as _ui_metadata__UIMetadataApi -from sailpoint.work_items.api.work_items_api import WorkItemsApi as _work_items__WorkItemsApi -from sailpoint.work_reassignment.api.work_reassignment_api import WorkReassignmentApi as _work_reassignment__WorkReassignmentApi -from sailpoint.workflows.api.workflows_api import WorkflowsApi as _workflows__WorkflowsApi -# --- Combined multi-version API classes --- -class _RolesApiCombined(_roles__RolesApi, _nerm__RolesApi): pass -class _WorkflowsApiCombined(_workflows__WorkflowsApi, _nerm__WorkflowsApi): pass +class _SailPointNamespace(type): + """Metaclass that resolves `SailPoint.` on first access.""" -# --- Resource-named exports --- -AccessModelMetadataApi = _access_model_metadata__AccessModelMetadataApi -AccessProfilesApi = _access_profiles__AccessProfilesApi -AccessRequestApprovalsApi = _access_request_approvals__AccessRequestApprovalsApi -AccessRequestIdentityMetricsApi = _access_request_identity_metrics__AccessRequestIdentityMetricsApi -AccessRequestsApi = _access_requests__AccessRequestsApi -AccountActivitiesApi = _account_activities__AccountActivitiesApi -AccountAggregationsApi = _account_aggregations__AccountAggregationsApi -AccountDeletionRequestsApi = _account_deletion_requests__AccountDeletionRequestsApi -AccountUsagesApi = _account_usages__AccountUsagesApi -AccountsApi = _accounts__AccountsApi -ApiUsageApi = _api_usage__ApiUsageApi -ApplicationDiscoveryApi = _application_discovery__ApplicationDiscoveryApi -ApprovalsApi = _approvals__ApprovalsApi -AppsApi = _apps__AppsApi -AuthProfileApi = _auth_profile__AuthProfileApi -AuthUsersApi = _auth_users__AuthUsersApi -BrandingApi = _branding__BrandingApi -BusinessApplicationsApi = _business_applications__BusinessApplicationsApi -CertificationCampaignFiltersApi = _certification_campaign_filters__CertificationCampaignFiltersApi -CertificationCampaignsApi = _certification_campaigns__CertificationCampaignsApi -CertificationSummariesApi = _certification_summaries__CertificationSummariesApi -CertificationsApi = _certifications__CertificationsApi -ClassifySourceApi = _classify_source__ClassifySourceApi -ConfigurationHubApi = _configuration_hub__ConfigurationHubApi -ConnectorCustomizersApi = _connector_customizers__ConnectorCustomizersApi -ConnectorRuleManagementApi = _connector_rule_management__ConnectorRuleManagementApi -ConnectorsApi = _connectors__ConnectorsApi -CustomFormsApi = _custom_forms__CustomFormsApi -CustomPasswordInstructionsApi = _custom_password_instructions__CustomPasswordInstructionsApi -CustomUserLevelsApi = _custom_user_levels__CustomUserLevelsApi -DataAccessSecurityApi = _data_access_security__DataAccessSecurityApi -DataSegmentationApi = _data_segmentation__DataSegmentationApi -DeclassifySourceApi = _declassify_source__DeclassifySourceApi -DimensionsApi = _dimensions__DimensionsApi -EntitlementConnectionsApi = _entitlement_connections__EntitlementConnectionsApi -EntitlementsApi = _entitlements__EntitlementsApi -GlobalTenantSecuritySettingsApi = _global_tenant_security_settings__GlobalTenantSecuritySettingsApi -GovernanceGroupsApi = _governance_groups__GovernanceGroupsApi -IAIAccessRequestRecommendationsApi = _iai_access_request_recommendations__IAIAccessRequestRecommendationsApi -IAICommonAccessApi = _iai_common_access__IAICommonAccessApi -IAIOutliersApi = _iai_outliers__IAIOutliersApi -IAIPeerGroupStrategiesApi = _iai_peer_group_strategies__IAIPeerGroupStrategiesApi -IAIRecommendationsApi = _iai_recommendations__IAIRecommendationsApi -IAIRoleMiningApi = _iai_role_mining__IAIRoleMiningApi -IconsApi = _icons__IconsApi -IdentitiesApi = _identities__IdentitiesApi -IdentityAttributesApi = _identity_attributes__IdentityAttributesApi -IdentityHistoryApi = _identity_history__IdentityHistoryApi -IdentityProfilesApi = _identity_profiles__IdentityProfilesApi -IntelligenceApi = _intelligence__IntelligenceApi -IntelligencePackageApi = _intelligence_package__IntelligencePackageApi -JITAccessApi = _jit_access__JITAccessApi -JITActivationsApi = _jit_activations__JITActivationsApi -LaunchersApi = _launchers__LaunchersApi -LifecycleStatesApi = _lifecycle_states__LifecycleStatesApi -MachineAccountClassifyApi = _machine_account_classify__MachineAccountClassifyApi -MachineAccountCreationRequestApi = _machine_account_creation_request__MachineAccountCreationRequestApi -MachineAccountMappingsApi = _machine_account_mappings__MachineAccountMappingsApi -MachineAccountSubtypesApi = _machine_account_subtypes__MachineAccountSubtypesApi -MachineAccountsApi = _machine_accounts__MachineAccountsApi -MachineClassificationConfigApi = _machine_classification_config__MachineClassificationConfigApi -MachineIdentitiesApi = _machine_identities__MachineIdentitiesApi -MachineIdentityLifecycleActionsApi = _machine_identities_lifecycle_actions__MachineIdentityLifecycleActionsApi -ManagedClientsApi = _managed_clients__ManagedClientsApi -ManagedClusterTypesApi = _managed_cluster_types__ManagedClusterTypesApi -ManagedClustersApi = _managed_clusters__ManagedClustersApi -MFAConfigurationApi = _mfa_configuration__MFAConfigurationApi -MultiHostIntegrationApi = _multi_host_integration__MultiHostIntegrationApi -AdvancedSearchApi = _nerm__AdvancedSearchApi -AttributeOptionsApi = _nerm__AttributeOptionsApi -AttributesApi = _nerm__AttributesApi -AuditsApi = _nerm__AuditsApi -ConsolidationApi = _nerm__ConsolidationApi -DelegationsApi = _nerm__DelegationsApi -FormAttributesApi = _nerm__FormAttributesApi -FormsApi = _nerm__FormsApi -IdentityProofingResultsApi = _nerm__IdentityProofingResultsApi -IscAccountsApi = _nerm__IscAccountsApi -JobStatusApi = _nerm__JobStatusApi -LanguagesApi = _nerm__LanguagesApi -PageContentTranslationsApi = _nerm__PageContentTranslationsApi -PageContentsApi = _nerm__PageContentsApi -PageElementsApi = _nerm__PageElementsApi -PagesApi = _nerm__PagesApi -PermissionsApi = _nerm__PermissionsApi -ProfileTypeRolesApi = _nerm__ProfileTypeRolesApi -ProfileTypesApi = _nerm__ProfileTypesApi -ProfilesApi = _nerm__ProfilesApi -RiskLevelsApi = _nerm__RiskLevelsApi -RiskScoresApi = _nerm__RiskScoresApi -RoleProfilesApi = _nerm__RoleProfilesApi -RolesApi = _RolesApiCombined -SyncedAttributesApi = _nerm__SyncedAttributesApi -SystemRolePermissionsApi = _nerm__SystemRolePermissionsApi -SystemRolesApi = _nerm__SystemRolesApi -UserManagersApi = _nerm__UserManagersApi -UserProfilesApi = _nerm__UserProfilesApi -UserRolesApi = _nerm__UserRolesApi -UsersApi = _nerm__UsersApi -WorkflowActionPerformerApi = _nerm__WorkflowActionPerformerApi -WorkflowActionsApi = _nerm__WorkflowActionsApi -WorkflowSessionsApi = _nerm__WorkflowSessionsApi -WorkflowsApi = _WorkflowsApiCombined -NonEmployeeLifecycleManagementApi = _non_employee_lifecycle_management__NonEmployeeLifecycleManagementApi -NotificationsApi = _notifications__NotificationsApi -OAuthClientsApi = _oauth_clients__OAuthClientsApi -OrgConfigApi = _org_config__OrgConfigApi -ParameterStorageApi = _parameter_storage__ParameterStorageApi -PasswordConfigurationApi = _password_configuration__PasswordConfigurationApi -PasswordDictionaryApi = _password_dictionary__PasswordDictionaryApi -PasswordManagementApi = _password_management__PasswordManagementApi -PasswordPoliciesApi = _password_policies__PasswordPoliciesApi -PasswordSyncGroupsApi = _password_sync_groups__PasswordSyncGroupsApi -PersonalAccessTokensApi = _personal_access_tokens__PersonalAccessTokensApi -PrivilegeCriteriaApi = _privilege_criteria__PrivilegeCriteriaApi -PrivilegeCriteriaConfigurationApi = _privilege_criteria_configuration__PrivilegeCriteriaConfigurationApi -PromptInsightsApi = _prompt_insights__PromptInsightsApi -PublicIdentitiesApi = _public_identities__PublicIdentitiesApi -PublicIdentitiesConfigApi = _public_identities_config__PublicIdentitiesConfigApi -PublicMachineIdentitiesApi = _public_machine_identities__PublicMachineIdentitiesApi -ReportsDataExtractionApi = _reports_data_extraction__ReportsDataExtractionApi -RequestableObjectsApi = _requestable_objects__RequestableObjectsApi -RoleInsightsApi = _role_insights__RoleInsightsApi -RolePropagationApi = _role_propagation__RolePropagationApi -SavedSearchApi = _saved_search__SavedSearchApi -ScheduledSearchApi = _scheduled_search__ScheduledSearchApi -SearchApi = _search__SearchApi -SearchAttributeConfigurationApi = _search_attribute_configuration__SearchAttributeConfigurationApi -SegmentsApi = _segments__SegmentsApi -ServiceDeskIntegrationApi = _service_desk_integration__ServiceDeskIntegrationApi -SharedSignalsFrameworkSSFApi = _shared_signals_framework_ssf__SharedSignalsFrameworkSSFApi -SIMIntegrationsApi = _sim_integrations__SIMIntegrationsApi -SODControlsApi = _sod_controls__SODControlsApi -SODPoliciesApi = _sod_policies__SODPoliciesApi -SODViolationsApi = _sod_violations__SODViolationsApi -SourceUsagesApi = _source_usages__SourceUsagesApi -SourcesApi = _sources__SourcesApi -SPConfigApi = _sp_config__SPConfigApi -SuggestedEntitlementDescriptionApi = _suggested_entitlement_description__SuggestedEntitlementDescriptionApi -TaggedObjectsApi = _tagged_objects__TaggedObjectsApi -TagsApi = _tags__TagsApi -TaskManagementApi = _task_management__TaskManagementApi -TenantApi = _tenant__TenantApi -TenantContextApi = _tenant_context__TenantContextApi -TransformsApi = _transforms__TransformsApi -TriggersApi = _triggers__TriggersApi -UIMetadataApi = _ui_metadata__UIMetadataApi -WorkItemsApi = _work_items__WorkItemsApi -WorkReassignmentApi = _work_reassignment__WorkReassignmentApi + def __getattr__(cls, name: str) -> Any: + if name in _API_EXPORTS: + value = _load_api(name) + setattr(cls, name, value) + return value + raise AttributeError(f"type object {cls.__name__!r} has no attribute {name!r}") -# --- SailPoint namespace (all resources grouped, alternative style) --- -class SailPoint: + def __dir__(cls) -> List[str]: + return sorted(set(super().__dir__()) | set(_API_EXPORTS)) + + +if TYPE_CHECKING: + # --- Partition API class imports (private) --- + from sailpoint.access_model_metadata.api.access_model_metadata_api import AccessModelMetadataApi as _access_model_metadata__AccessModelMetadataApi + from sailpoint.access_profiles.api.access_profiles_api import AccessProfilesApi as _access_profiles__AccessProfilesApi + from sailpoint.access_request_approvals.api.access_request_approvals_api import AccessRequestApprovalsApi as _access_request_approvals__AccessRequestApprovalsApi + from sailpoint.access_request_identity_metrics.api.access_request_identity_metrics_api import AccessRequestIdentityMetricsApi as _access_request_identity_metrics__AccessRequestIdentityMetricsApi + from sailpoint.access_requests.api.access_requests_api import AccessRequestsApi as _access_requests__AccessRequestsApi + from sailpoint.account_activities.api.account_activities_api import AccountActivitiesApi as _account_activities__AccountActivitiesApi + from sailpoint.account_aggregations.api.account_aggregations_api import AccountAggregationsApi as _account_aggregations__AccountAggregationsApi + from sailpoint.account_deletion_requests.api.account_deletion_requests_api import AccountDeletionRequestsApi as _account_deletion_requests__AccountDeletionRequestsApi + from sailpoint.account_usages.api.account_usages_api import AccountUsagesApi as _account_usages__AccountUsagesApi + from sailpoint.accounts.api.accounts_api import AccountsApi as _accounts__AccountsApi + from sailpoint.api_usage.api.api_usage_api import ApiUsageApi as _api_usage__ApiUsageApi + from sailpoint.application_discovery.api.application_discovery_api import ApplicationDiscoveryApi as _application_discovery__ApplicationDiscoveryApi + from sailpoint.approvals.api.approvals_api import ApprovalsApi as _approvals__ApprovalsApi + from sailpoint.apps.api.apps_api import AppsApi as _apps__AppsApi + from sailpoint.auth_profile.api.auth_profile_api import AuthProfileApi as _auth_profile__AuthProfileApi + from sailpoint.auth_users.api.auth_users_api import AuthUsersApi as _auth_users__AuthUsersApi + from sailpoint.branding.api.branding_api import BrandingApi as _branding__BrandingApi + from sailpoint.business_applications.api.business_applications_api import BusinessApplicationsApi as _business_applications__BusinessApplicationsApi + from sailpoint.certification_campaign_filters.api.certification_campaign_filters_api import CertificationCampaignFiltersApi as _certification_campaign_filters__CertificationCampaignFiltersApi + from sailpoint.certification_campaigns.api.certification_campaigns_api import CertificationCampaignsApi as _certification_campaigns__CertificationCampaignsApi + from sailpoint.certification_summaries.api.certification_summaries_api import CertificationSummariesApi as _certification_summaries__CertificationSummariesApi + from sailpoint.certifications.api.certifications_api import CertificationsApi as _certifications__CertificationsApi + from sailpoint.classify_source.api.classify_source_api import ClassifySourceApi as _classify_source__ClassifySourceApi + from sailpoint.configuration_hub.api.configuration_hub_api import ConfigurationHubApi as _configuration_hub__ConfigurationHubApi + from sailpoint.connector_customizers.api.connector_customizers_api import ConnectorCustomizersApi as _connector_customizers__ConnectorCustomizersApi + from sailpoint.connector_rule_management.api.connector_rule_management_api import ConnectorRuleManagementApi as _connector_rule_management__ConnectorRuleManagementApi + from sailpoint.connectors.api.connectors_api import ConnectorsApi as _connectors__ConnectorsApi + from sailpoint.custom_forms.api.custom_forms_api import CustomFormsApi as _custom_forms__CustomFormsApi + from sailpoint.custom_password_instructions.api.custom_password_instructions_api import CustomPasswordInstructionsApi as _custom_password_instructions__CustomPasswordInstructionsApi + from sailpoint.custom_user_levels.api.custom_user_levels_api import CustomUserLevelsApi as _custom_user_levels__CustomUserLevelsApi + from sailpoint.data_access_security.api.data_access_security_api import DataAccessSecurityApi as _data_access_security__DataAccessSecurityApi + from sailpoint.data_segmentation.api.data_segmentation_api import DataSegmentationApi as _data_segmentation__DataSegmentationApi + from sailpoint.declassify_source.api.declassify_source_api import DeclassifySourceApi as _declassify_source__DeclassifySourceApi + from sailpoint.dimensions.api.dimensions_api import DimensionsApi as _dimensions__DimensionsApi + from sailpoint.entitlement_connections.api.entitlement_connections_api import EntitlementConnectionsApi as _entitlement_connections__EntitlementConnectionsApi + from sailpoint.entitlements.api.entitlements_api import EntitlementsApi as _entitlements__EntitlementsApi + from sailpoint.global_tenant_security_settings.api.global_tenant_security_settings_api import GlobalTenantSecuritySettingsApi as _global_tenant_security_settings__GlobalTenantSecuritySettingsApi + from sailpoint.governance_groups.api.governance_groups_api import GovernanceGroupsApi as _governance_groups__GovernanceGroupsApi + from sailpoint.iai_access_request_recommendations.api.iai_access_request_recommendations_api import IAIAccessRequestRecommendationsApi as _iai_access_request_recommendations__IAIAccessRequestRecommendationsApi + from sailpoint.iai_common_access.api.iai_common_access_api import IAICommonAccessApi as _iai_common_access__IAICommonAccessApi + from sailpoint.iai_outliers.api.iai_outliers_api import IAIOutliersApi as _iai_outliers__IAIOutliersApi + from sailpoint.iai_peer_group_strategies.api.iai_peer_group_strategies_api import IAIPeerGroupStrategiesApi as _iai_peer_group_strategies__IAIPeerGroupStrategiesApi + from sailpoint.iai_recommendations.api.iai_recommendations_api import IAIRecommendationsApi as _iai_recommendations__IAIRecommendationsApi + from sailpoint.iai_role_mining.api.iai_role_mining_api import IAIRoleMiningApi as _iai_role_mining__IAIRoleMiningApi + from sailpoint.icons.api.icons_api import IconsApi as _icons__IconsApi + from sailpoint.identities.api.identities_api import IdentitiesApi as _identities__IdentitiesApi + from sailpoint.identity_attributes.api.identity_attributes_api import IdentityAttributesApi as _identity_attributes__IdentityAttributesApi + from sailpoint.identity_history.api.identity_history_api import IdentityHistoryApi as _identity_history__IdentityHistoryApi + from sailpoint.identity_profiles.api.identity_profiles_api import IdentityProfilesApi as _identity_profiles__IdentityProfilesApi + from sailpoint.intelligence.api.intelligence_api import IntelligenceApi as _intelligence__IntelligenceApi + from sailpoint.intelligence_package.api.intelligence_package_api import IntelligencePackageApi as _intelligence_package__IntelligencePackageApi + from sailpoint.jit_access.api.jit_access_api import JITAccessApi as _jit_access__JITAccessApi + from sailpoint.jit_activations.api.jit_activations_api import JITActivationsApi as _jit_activations__JITActivationsApi + from sailpoint.launchers.api.launchers_api import LaunchersApi as _launchers__LaunchersApi + from sailpoint.lifecycle_states.api.lifecycle_states_api import LifecycleStatesApi as _lifecycle_states__LifecycleStatesApi + from sailpoint.machine_account_classify.api.machine_account_classify_api import MachineAccountClassifyApi as _machine_account_classify__MachineAccountClassifyApi + from sailpoint.machine_account_creation_request.api.machine_account_creation_request_api import MachineAccountCreationRequestApi as _machine_account_creation_request__MachineAccountCreationRequestApi + from sailpoint.machine_account_mappings.api.machine_account_mappings_api import MachineAccountMappingsApi as _machine_account_mappings__MachineAccountMappingsApi + from sailpoint.machine_account_subtypes.api.machine_account_subtypes_api import MachineAccountSubtypesApi as _machine_account_subtypes__MachineAccountSubtypesApi + from sailpoint.machine_accounts.api.machine_accounts_api import MachineAccountsApi as _machine_accounts__MachineAccountsApi + from sailpoint.machine_classification_config.api.machine_classification_config_api import MachineClassificationConfigApi as _machine_classification_config__MachineClassificationConfigApi + from sailpoint.machine_identities.api.machine_identities_api import MachineIdentitiesApi as _machine_identities__MachineIdentitiesApi + from sailpoint.machine_identities_lifecycle_actions.api.machine_identity_lifecycle_actions_api import MachineIdentityLifecycleActionsApi as _machine_identities_lifecycle_actions__MachineIdentityLifecycleActionsApi + from sailpoint.managed_clients.api.managed_clients_api import ManagedClientsApi as _managed_clients__ManagedClientsApi + from sailpoint.managed_cluster_types.api.managed_cluster_types_api import ManagedClusterTypesApi as _managed_cluster_types__ManagedClusterTypesApi + from sailpoint.managed_clusters.api.managed_clusters_api import ManagedClustersApi as _managed_clusters__ManagedClustersApi + from sailpoint.mfa_configuration.api.mfa_configuration_api import MFAConfigurationApi as _mfa_configuration__MFAConfigurationApi + from sailpoint.multi_host_integration.api.multi_host_integration_api import MultiHostIntegrationApi as _multi_host_integration__MultiHostIntegrationApi + from sailpoint.nerm.api.advanced_search_api import AdvancedSearchApi as _nerm__AdvancedSearchApi + from sailpoint.nerm.api.attribute_options_api import AttributeOptionsApi as _nerm__AttributeOptionsApi + from sailpoint.nerm.api.attributes_api import AttributesApi as _nerm__AttributesApi + from sailpoint.nerm.api.audits_api import AuditsApi as _nerm__AuditsApi + from sailpoint.nerm.api.consolidation_api import ConsolidationApi as _nerm__ConsolidationApi + from sailpoint.nerm.api.delegations_api import DelegationsApi as _nerm__DelegationsApi + from sailpoint.nerm.api.form_attributes_api import FormAttributesApi as _nerm__FormAttributesApi + from sailpoint.nerm.api.forms_api import FormsApi as _nerm__FormsApi + from sailpoint.nerm.api.identity_proofing_results_api import IdentityProofingResultsApi as _nerm__IdentityProofingResultsApi + from sailpoint.nerm.api.isc_accounts_api import IscAccountsApi as _nerm__IscAccountsApi + from sailpoint.nerm.api.job_status_api import JobStatusApi as _nerm__JobStatusApi + from sailpoint.nerm.api.languages_api import LanguagesApi as _nerm__LanguagesApi + from sailpoint.nerm.api.page_content_translations_api import PageContentTranslationsApi as _nerm__PageContentTranslationsApi + from sailpoint.nerm.api.page_contents_api import PageContentsApi as _nerm__PageContentsApi + from sailpoint.nerm.api.page_elements_api import PageElementsApi as _nerm__PageElementsApi + from sailpoint.nerm.api.pages_api import PagesApi as _nerm__PagesApi + from sailpoint.nerm.api.permissions_api import PermissionsApi as _nerm__PermissionsApi + from sailpoint.nerm.api.profile_type_roles_api import ProfileTypeRolesApi as _nerm__ProfileTypeRolesApi + from sailpoint.nerm.api.profile_types_api import ProfileTypesApi as _nerm__ProfileTypesApi + from sailpoint.nerm.api.profiles_api import ProfilesApi as _nerm__ProfilesApi + from sailpoint.nerm.api.risk_levels_api import RiskLevelsApi as _nerm__RiskLevelsApi + from sailpoint.nerm.api.risk_scores_api import RiskScoresApi as _nerm__RiskScoresApi + from sailpoint.nerm.api.role_profiles_api import RoleProfilesApi as _nerm__RoleProfilesApi + from sailpoint.nerm.api.roles_api import RolesApi as _nerm__RolesApi + from sailpoint.nerm.api.synced_attributes_api import SyncedAttributesApi as _nerm__SyncedAttributesApi + from sailpoint.nerm.api.system_role_permissions_api import SystemRolePermissionsApi as _nerm__SystemRolePermissionsApi + from sailpoint.nerm.api.system_roles_api import SystemRolesApi as _nerm__SystemRolesApi + from sailpoint.nerm.api.user_managers_api import UserManagersApi as _nerm__UserManagersApi + from sailpoint.nerm.api.user_profiles_api import UserProfilesApi as _nerm__UserProfilesApi + from sailpoint.nerm.api.user_roles_api import UserRolesApi as _nerm__UserRolesApi + from sailpoint.nerm.api.users_api import UsersApi as _nerm__UsersApi + from sailpoint.nerm.api.workflow_action_performer_api import WorkflowActionPerformerApi as _nerm__WorkflowActionPerformerApi + from sailpoint.nerm.api.workflow_actions_api import WorkflowActionsApi as _nerm__WorkflowActionsApi + from sailpoint.nerm.api.workflow_sessions_api import WorkflowSessionsApi as _nerm__WorkflowSessionsApi + from sailpoint.nerm.api.workflows_api import WorkflowsApi as _nerm__WorkflowsApi + from sailpoint.non_employee_lifecycle_management.api.non_employee_lifecycle_management_api import NonEmployeeLifecycleManagementApi as _non_employee_lifecycle_management__NonEmployeeLifecycleManagementApi + from sailpoint.notifications.api.notifications_api import NotificationsApi as _notifications__NotificationsApi + from sailpoint.oauth_clients.api.o_auth_clients_api import OAuthClientsApi as _oauth_clients__OAuthClientsApi + from sailpoint.org_config.api.org_config_api import OrgConfigApi as _org_config__OrgConfigApi + from sailpoint.parameter_storage.api.parameter_storage_api import ParameterStorageApi as _parameter_storage__ParameterStorageApi + from sailpoint.password_configuration.api.password_configuration_api import PasswordConfigurationApi as _password_configuration__PasswordConfigurationApi + from sailpoint.password_dictionary.api.password_dictionary_api import PasswordDictionaryApi as _password_dictionary__PasswordDictionaryApi + from sailpoint.password_management.api.password_management_api import PasswordManagementApi as _password_management__PasswordManagementApi + from sailpoint.password_policies.api.password_policies_api import PasswordPoliciesApi as _password_policies__PasswordPoliciesApi + from sailpoint.password_sync_groups.api.password_sync_groups_api import PasswordSyncGroupsApi as _password_sync_groups__PasswordSyncGroupsApi + from sailpoint.personal_access_tokens.api.personal_access_tokens_api import PersonalAccessTokensApi as _personal_access_tokens__PersonalAccessTokensApi + from sailpoint.privilege_criteria.api.privilege_criteria_api import PrivilegeCriteriaApi as _privilege_criteria__PrivilegeCriteriaApi + from sailpoint.privilege_criteria_configuration.api.privilege_criteria_configuration_api import PrivilegeCriteriaConfigurationApi as _privilege_criteria_configuration__PrivilegeCriteriaConfigurationApi + from sailpoint.prompt_insights.api.prompt_insights_api import PromptInsightsApi as _prompt_insights__PromptInsightsApi + from sailpoint.public_identities.api.public_identities_api import PublicIdentitiesApi as _public_identities__PublicIdentitiesApi + from sailpoint.public_identities_config.api.public_identities_config_api import PublicIdentitiesConfigApi as _public_identities_config__PublicIdentitiesConfigApi + from sailpoint.public_machine_identities.api.public_machine_identities_api import PublicMachineIdentitiesApi as _public_machine_identities__PublicMachineIdentitiesApi + from sailpoint.reports_data_extraction.api.reports_data_extraction_api import ReportsDataExtractionApi as _reports_data_extraction__ReportsDataExtractionApi + from sailpoint.requestable_objects.api.requestable_objects_api import RequestableObjectsApi as _requestable_objects__RequestableObjectsApi + from sailpoint.role_insights.api.role_insights_api import RoleInsightsApi as _role_insights__RoleInsightsApi + from sailpoint.role_propagation.api.role_propagation_api import RolePropagationApi as _role_propagation__RolePropagationApi + from sailpoint.roles.api.roles_api import RolesApi as _roles__RolesApi + from sailpoint.saved_search.api.saved_search_api import SavedSearchApi as _saved_search__SavedSearchApi + from sailpoint.scheduled_search.api.scheduled_search_api import ScheduledSearchApi as _scheduled_search__ScheduledSearchApi + from sailpoint.search.api.search_api import SearchApi as _search__SearchApi + from sailpoint.search_attribute_configuration.api.search_attribute_configuration_api import SearchAttributeConfigurationApi as _search_attribute_configuration__SearchAttributeConfigurationApi + from sailpoint.segments.api.segments_api import SegmentsApi as _segments__SegmentsApi + from sailpoint.service_desk_integration.api.service_desk_integration_api import ServiceDeskIntegrationApi as _service_desk_integration__ServiceDeskIntegrationApi + from sailpoint.shared_signals_framework_ssf.api.shared_signals_framework_ssf_api import SharedSignalsFrameworkSSFApi as _shared_signals_framework_ssf__SharedSignalsFrameworkSSFApi + from sailpoint.sim_integrations.api.sim_integrations_api import SIMIntegrationsApi as _sim_integrations__SIMIntegrationsApi + from sailpoint.sod_controls.api.sod_controls_api import SODControlsApi as _sod_controls__SODControlsApi + from sailpoint.sod_policies.api.sod_policies_api import SODPoliciesApi as _sod_policies__SODPoliciesApi + from sailpoint.sod_violations.api.sod_violations_api import SODViolationsApi as _sod_violations__SODViolationsApi + from sailpoint.source_usages.api.source_usages_api import SourceUsagesApi as _source_usages__SourceUsagesApi + from sailpoint.sources.api.sources_api import SourcesApi as _sources__SourcesApi + from sailpoint.sp_config.api.sp_config_api import SPConfigApi as _sp_config__SPConfigApi + from sailpoint.suggested_entitlement_description.api.suggested_entitlement_description_api import SuggestedEntitlementDescriptionApi as _suggested_entitlement_description__SuggestedEntitlementDescriptionApi + from sailpoint.tagged_objects.api.tagged_objects_api import TaggedObjectsApi as _tagged_objects__TaggedObjectsApi + from sailpoint.tags.api.tags_api import TagsApi as _tags__TagsApi + from sailpoint.task_management.api.task_management_api import TaskManagementApi as _task_management__TaskManagementApi + from sailpoint.tenant.api.tenant_api import TenantApi as _tenant__TenantApi + from sailpoint.tenant_context.api.tenant_context_api import TenantContextApi as _tenant_context__TenantContextApi + from sailpoint.transforms.api.transforms_api import TransformsApi as _transforms__TransformsApi + from sailpoint.triggers.api.triggers_api import TriggersApi as _triggers__TriggersApi + from sailpoint.ui_metadata.api.ui_metadata_api import UIMetadataApi as _ui_metadata__UIMetadataApi + from sailpoint.work_items.api.work_items_api import WorkItemsApi as _work_items__WorkItemsApi + from sailpoint.work_reassignment.api.work_reassignment_api import WorkReassignmentApi as _work_reassignment__WorkReassignmentApi + from sailpoint.workflows.api.workflows_api import WorkflowsApi as _workflows__WorkflowsApi + + # Combined multi-version API classes + class _RolesApiCombined(_roles__RolesApi, _nerm__RolesApi): ... + class _WorkflowsApiCombined(_workflows__WorkflowsApi, _nerm__WorkflowsApi): ... + + # --- Resource-named exports --- AccessModelMetadataApi = _access_model_metadata__AccessModelMetadataApi AccessProfilesApi = _access_profiles__AccessProfilesApi AccessRequestApprovalsApi = _access_request_approvals__AccessRequestApprovalsApi @@ -477,6 +681,167 @@ class SailPoint: WorkItemsApi = _work_items__WorkItemsApi WorkReassignmentApi = _work_reassignment__WorkReassignmentApi -# --- Common utilities --- -from sailpoint.configuration import Configuration, ConfigurationParams -from sailpoint.paginator import Paginator + # --- SailPoint namespace (all resources grouped, alternative style) --- + class SailPoint: + AccessModelMetadataApi = _access_model_metadata__AccessModelMetadataApi + AccessProfilesApi = _access_profiles__AccessProfilesApi + AccessRequestApprovalsApi = _access_request_approvals__AccessRequestApprovalsApi + AccessRequestIdentityMetricsApi = _access_request_identity_metrics__AccessRequestIdentityMetricsApi + AccessRequestsApi = _access_requests__AccessRequestsApi + AccountActivitiesApi = _account_activities__AccountActivitiesApi + AccountAggregationsApi = _account_aggregations__AccountAggregationsApi + AccountDeletionRequestsApi = _account_deletion_requests__AccountDeletionRequestsApi + AccountUsagesApi = _account_usages__AccountUsagesApi + AccountsApi = _accounts__AccountsApi + ApiUsageApi = _api_usage__ApiUsageApi + ApplicationDiscoveryApi = _application_discovery__ApplicationDiscoveryApi + ApprovalsApi = _approvals__ApprovalsApi + AppsApi = _apps__AppsApi + AuthProfileApi = _auth_profile__AuthProfileApi + AuthUsersApi = _auth_users__AuthUsersApi + BrandingApi = _branding__BrandingApi + BusinessApplicationsApi = _business_applications__BusinessApplicationsApi + CertificationCampaignFiltersApi = _certification_campaign_filters__CertificationCampaignFiltersApi + CertificationCampaignsApi = _certification_campaigns__CertificationCampaignsApi + CertificationSummariesApi = _certification_summaries__CertificationSummariesApi + CertificationsApi = _certifications__CertificationsApi + ClassifySourceApi = _classify_source__ClassifySourceApi + ConfigurationHubApi = _configuration_hub__ConfigurationHubApi + ConnectorCustomizersApi = _connector_customizers__ConnectorCustomizersApi + ConnectorRuleManagementApi = _connector_rule_management__ConnectorRuleManagementApi + ConnectorsApi = _connectors__ConnectorsApi + CustomFormsApi = _custom_forms__CustomFormsApi + CustomPasswordInstructionsApi = _custom_password_instructions__CustomPasswordInstructionsApi + CustomUserLevelsApi = _custom_user_levels__CustomUserLevelsApi + DataAccessSecurityApi = _data_access_security__DataAccessSecurityApi + DataSegmentationApi = _data_segmentation__DataSegmentationApi + DeclassifySourceApi = _declassify_source__DeclassifySourceApi + DimensionsApi = _dimensions__DimensionsApi + EntitlementConnectionsApi = _entitlement_connections__EntitlementConnectionsApi + EntitlementsApi = _entitlements__EntitlementsApi + GlobalTenantSecuritySettingsApi = _global_tenant_security_settings__GlobalTenantSecuritySettingsApi + GovernanceGroupsApi = _governance_groups__GovernanceGroupsApi + IAIAccessRequestRecommendationsApi = _iai_access_request_recommendations__IAIAccessRequestRecommendationsApi + IAICommonAccessApi = _iai_common_access__IAICommonAccessApi + IAIOutliersApi = _iai_outliers__IAIOutliersApi + IAIPeerGroupStrategiesApi = _iai_peer_group_strategies__IAIPeerGroupStrategiesApi + IAIRecommendationsApi = _iai_recommendations__IAIRecommendationsApi + IAIRoleMiningApi = _iai_role_mining__IAIRoleMiningApi + IconsApi = _icons__IconsApi + IdentitiesApi = _identities__IdentitiesApi + IdentityAttributesApi = _identity_attributes__IdentityAttributesApi + IdentityHistoryApi = _identity_history__IdentityHistoryApi + IdentityProfilesApi = _identity_profiles__IdentityProfilesApi + IntelligenceApi = _intelligence__IntelligenceApi + IntelligencePackageApi = _intelligence_package__IntelligencePackageApi + JITAccessApi = _jit_access__JITAccessApi + JITActivationsApi = _jit_activations__JITActivationsApi + LaunchersApi = _launchers__LaunchersApi + LifecycleStatesApi = _lifecycle_states__LifecycleStatesApi + MachineAccountClassifyApi = _machine_account_classify__MachineAccountClassifyApi + MachineAccountCreationRequestApi = _machine_account_creation_request__MachineAccountCreationRequestApi + MachineAccountMappingsApi = _machine_account_mappings__MachineAccountMappingsApi + MachineAccountSubtypesApi = _machine_account_subtypes__MachineAccountSubtypesApi + MachineAccountsApi = _machine_accounts__MachineAccountsApi + MachineClassificationConfigApi = _machine_classification_config__MachineClassificationConfigApi + MachineIdentitiesApi = _machine_identities__MachineIdentitiesApi + MachineIdentityLifecycleActionsApi = _machine_identities_lifecycle_actions__MachineIdentityLifecycleActionsApi + ManagedClientsApi = _managed_clients__ManagedClientsApi + ManagedClusterTypesApi = _managed_cluster_types__ManagedClusterTypesApi + ManagedClustersApi = _managed_clusters__ManagedClustersApi + MFAConfigurationApi = _mfa_configuration__MFAConfigurationApi + MultiHostIntegrationApi = _multi_host_integration__MultiHostIntegrationApi + AdvancedSearchApi = _nerm__AdvancedSearchApi + AttributeOptionsApi = _nerm__AttributeOptionsApi + AttributesApi = _nerm__AttributesApi + AuditsApi = _nerm__AuditsApi + ConsolidationApi = _nerm__ConsolidationApi + DelegationsApi = _nerm__DelegationsApi + FormAttributesApi = _nerm__FormAttributesApi + FormsApi = _nerm__FormsApi + IdentityProofingResultsApi = _nerm__IdentityProofingResultsApi + IscAccountsApi = _nerm__IscAccountsApi + JobStatusApi = _nerm__JobStatusApi + LanguagesApi = _nerm__LanguagesApi + PageContentTranslationsApi = _nerm__PageContentTranslationsApi + PageContentsApi = _nerm__PageContentsApi + PageElementsApi = _nerm__PageElementsApi + PagesApi = _nerm__PagesApi + PermissionsApi = _nerm__PermissionsApi + ProfileTypeRolesApi = _nerm__ProfileTypeRolesApi + ProfileTypesApi = _nerm__ProfileTypesApi + ProfilesApi = _nerm__ProfilesApi + RiskLevelsApi = _nerm__RiskLevelsApi + RiskScoresApi = _nerm__RiskScoresApi + RoleProfilesApi = _nerm__RoleProfilesApi + RolesApi = _RolesApiCombined + SyncedAttributesApi = _nerm__SyncedAttributesApi + SystemRolePermissionsApi = _nerm__SystemRolePermissionsApi + SystemRolesApi = _nerm__SystemRolesApi + UserManagersApi = _nerm__UserManagersApi + UserProfilesApi = _nerm__UserProfilesApi + UserRolesApi = _nerm__UserRolesApi + UsersApi = _nerm__UsersApi + WorkflowActionPerformerApi = _nerm__WorkflowActionPerformerApi + WorkflowActionsApi = _nerm__WorkflowActionsApi + WorkflowSessionsApi = _nerm__WorkflowSessionsApi + WorkflowsApi = _WorkflowsApiCombined + NonEmployeeLifecycleManagementApi = _non_employee_lifecycle_management__NonEmployeeLifecycleManagementApi + NotificationsApi = _notifications__NotificationsApi + OAuthClientsApi = _oauth_clients__OAuthClientsApi + OrgConfigApi = _org_config__OrgConfigApi + ParameterStorageApi = _parameter_storage__ParameterStorageApi + PasswordConfigurationApi = _password_configuration__PasswordConfigurationApi + PasswordDictionaryApi = _password_dictionary__PasswordDictionaryApi + PasswordManagementApi = _password_management__PasswordManagementApi + PasswordPoliciesApi = _password_policies__PasswordPoliciesApi + PasswordSyncGroupsApi = _password_sync_groups__PasswordSyncGroupsApi + PersonalAccessTokensApi = _personal_access_tokens__PersonalAccessTokensApi + PrivilegeCriteriaApi = _privilege_criteria__PrivilegeCriteriaApi + PrivilegeCriteriaConfigurationApi = _privilege_criteria_configuration__PrivilegeCriteriaConfigurationApi + PromptInsightsApi = _prompt_insights__PromptInsightsApi + PublicIdentitiesApi = _public_identities__PublicIdentitiesApi + PublicIdentitiesConfigApi = _public_identities_config__PublicIdentitiesConfigApi + PublicMachineIdentitiesApi = _public_machine_identities__PublicMachineIdentitiesApi + ReportsDataExtractionApi = _reports_data_extraction__ReportsDataExtractionApi + RequestableObjectsApi = _requestable_objects__RequestableObjectsApi + RoleInsightsApi = _role_insights__RoleInsightsApi + RolePropagationApi = _role_propagation__RolePropagationApi + SavedSearchApi = _saved_search__SavedSearchApi + ScheduledSearchApi = _scheduled_search__ScheduledSearchApi + SearchApi = _search__SearchApi + SearchAttributeConfigurationApi = _search_attribute_configuration__SearchAttributeConfigurationApi + SegmentsApi = _segments__SegmentsApi + ServiceDeskIntegrationApi = _service_desk_integration__ServiceDeskIntegrationApi + SharedSignalsFrameworkSSFApi = _shared_signals_framework_ssf__SharedSignalsFrameworkSSFApi + SIMIntegrationsApi = _sim_integrations__SIMIntegrationsApi + SODControlsApi = _sod_controls__SODControlsApi + SODPoliciesApi = _sod_policies__SODPoliciesApi + SODViolationsApi = _sod_violations__SODViolationsApi + SourceUsagesApi = _source_usages__SourceUsagesApi + SourcesApi = _sources__SourcesApi + SPConfigApi = _sp_config__SPConfigApi + SuggestedEntitlementDescriptionApi = _suggested_entitlement_description__SuggestedEntitlementDescriptionApi + TaggedObjectsApi = _tagged_objects__TaggedObjectsApi + TagsApi = _tags__TagsApi + TaskManagementApi = _task_management__TaskManagementApi + TenantApi = _tenant__TenantApi + TenantContextApi = _tenant_context__TenantContextApi + TransformsApi = _transforms__TransformsApi + TriggersApi = _triggers__TriggersApi + UIMetadataApi = _ui_metadata__UIMetadataApi + WorkItemsApi = _work_items__WorkItemsApi + WorkReassignmentApi = _work_reassignment__WorkReassignmentApi +else: + # Runtime only: type checkers skip this branch, so they still report + # unknown names such as `from sailpoint import NotARealApi`. + def __getattr__(name: str) -> Any: + if name in _API_EXPORTS: + return _load_api(name) + raise AttributeError(f"module {__name__!r} has no attribute {name!r}") + + def __dir__() -> List[str]: + return sorted(set(globals()) | set(_API_EXPORTS)) + + class SailPoint(metaclass=_SailPointNamespace): + """All resource API classes grouped under one name, e.g. `SailPoint.SourcesApi`.""" diff --git a/sailpoint/paginator.py b/sailpoint/paginator.py index 1023c7111..8de1edff2 100644 --- a/sailpoint/paginator.py +++ b/sailpoint/paginator.py @@ -1,7 +1,13 @@ +from __future__ import annotations + import logging -from sailpoint.search.api.search_api import SearchApi -from sailpoint.search.models.search import Search -from typing import Any, Callable, Iterator, Optional, Tuple, Type, TypeVar, overload +from typing import TYPE_CHECKING, Any, Callable, Iterator, Optional, Tuple, Type, TypeVar, overload + +# Type-only imports: loading the search partition here would make every +# `import sailpoint` pay for it (sailpoint/__init__.py imports Paginator eagerly). +if TYPE_CHECKING: + from sailpoint.search.api.search_api import SearchApi + from sailpoint.search.models.search import Search T = TypeVar('T') TItem = TypeVar('TItem') diff --git a/sdk-resources/build-versioned-sdk.js b/sdk-resources/build-versioned-sdk.js index 69429c140..bd8a52608 100644 --- a/sdk-resources/build-versioned-sdk.js +++ b/sdk-resources/build-versioned-sdk.js @@ -694,6 +694,10 @@ node sdk-resources/build-versioned-sdk.js // resolve to the same resource name // - Common utilities (Configuration, Paginator) // +// API classes are resolved lazily through a module-level __getattr__ (PEP 562) +// so `import sailpoint` does not import any partition package. Combined classes +// are built on first access and cached in the module globals. +// // Partition packages are detected by the presence of an api/ subdirectory. // Multi-version: Python multiple inheritance gives the cleanest combination — // class AccountsApi(AccountsV2Api, AccountsV1Api): pass @@ -841,39 +845,54 @@ function generateInitPy() { patchAndCopyRootFile("rest.py"); patchAndCopyRootFile("api_client.py"); - // Imports: one private alias per versioned class. + // Lazy loading (PEP 562): importing every partition eagerly costs 20–40 s, + // so the generated module only maps each public name to where it lives and + // imports the partition on first attribute access. The eager imports are + // still emitted under `if TYPE_CHECKING:` so IDEs and type checkers resolve + // every export without running them. + // + // Type-checking imports: one private alias per versioned class. // Use the partition dir as a disambiguating prefix so two partitions that // happen to generate the same class name (e.g. both NERM and ISC expose a // RolesApi) don't clobber each other's alias. - const imports = partitions.map(p => { - const alias = `_${p.partDir}__${p.className}`; - return `from sailpoint.${p.partDir}.api.${p.module} import ${p.className} as ${alias}`; - }).join("\n"); + const aliasOf = p => `_${p.partDir}__${p.className}`; + const typeCheckingImports = partitions.map(p => + ` from sailpoint.${p.partDir}.api.${p.module} import ${p.className} as ${aliasOf(p)}` + ).join("\n"); - // SailPoint namespace members and any combined-class declarations + // Runtime lazy map, type-checking combined classes, resource exports and + // SailPoint namespace members + const lazyExportLines = []; const combinedClassLines = []; - const resourceExportLines = []; // top-level resource-named exports + const resourceExportLines = []; const nsMembers = []; for (const [resourceApiName, group] of byResource.entries()) { + // Multi-version — Python multiple inheritance: latest first so its MRO wins + const ordered = [...group].reverse(); + const targets = ordered + .map(p => `("sailpoint.${p.partDir}.api.${p.module}", "${p.className}")`) + .join(", "); + lazyExportLines.push(` "${resourceApiName}": (${targets}${ordered.length === 1 ? "," : ""}),`); + + let target; if (group.length === 1) { - const alias = `_${group[0].partDir}__${group[0].className}`; - resourceExportLines.push(`${resourceApiName} = ${alias}`); - nsMembers.push(` ${resourceApiName} = ${alias}`); + target = aliasOf(group[0]); } else { - // Multi-version — Python multiple inheritance: latest first so its MRO wins - const bases = [...group].reverse().map(p => `_${p.partDir}__${p.className}`).join(", "); - const combinedVar = `_${resourceApiName}Combined`; - combinedClassLines.push(`class ${combinedVar}(${bases}): pass`); - resourceExportLines.push(`${resourceApiName} = ${combinedVar}`); - nsMembers.push(` ${resourceApiName} = ${combinedVar}`); + target = `_${resourceApiName}Combined`; + combinedClassLines.push(` class ${target}(${ordered.map(aliasOf).join(", ")}): ...`); } + resourceExportLines.push(` ${resourceApiName} = ${target}`); + nsMembers.push(` ${resourceApiName} = ${target}`); } + const eagerExports = ["ApiClient", "Configuration", "ConfigurationParams", "Paginator", "SailPoint"]; + const allLines = [...eagerExports, ...byResource.keys()].map(n => ` "${n}",`).join("\n"); + // Combined classes must be declared BEFORE the resource export assignments - // that reference them, otherwise Python raises a NameError at import time. + // that reference them, otherwise the type checker reports an unbound name. const combinedSection = combinedClassLines.length > 0 - ? `\n# --- Combined multi-version API classes ---\n${combinedClassLines.join("\n")}\n` + ? `\n # Combined multi-version API classes\n${combinedClassLines.join("\n")}\n` : ""; const fileContent = `# Auto-generated by build-versioned-sdk.js — DO NOT EDIT @@ -891,23 +910,87 @@ function generateInitPy() { # # If two partitions share a resource name, SourcesApi automatically combines both # via Python multiple inheritance — existing imports never change. +# +# API classes load lazily (PEP 562). \`import sailpoint\` loads only the shared +# support modules below. A partition package loads the first time one of its +# API classes is accessed, for example \`from sailpoint import SourcesApi\` or +# \`SailPoint.SourcesApi\`. + +import importlib +import threading +from typing import TYPE_CHECKING, Any, Dict, List, Tuple -# --- Shared ApiClient --- +# --- Shared ApiClient and common utilities (eager, small) --- from sailpoint.api_client import ApiClient +from sailpoint.configuration import Configuration, ConfigurationParams +from sailpoint.paginator import Paginator + +# --- Lazy API exports: resource name -> ((module path, class name), ...) --- +# A resource with more than one entry is combined via multiple inheritance, +# latest first so its MRO wins. +_API_EXPORTS: Dict[str, Tuple[Tuple[str, str], ...]] = { +${lazyExportLines.join("\n")} +} + +__all__ = [ +${allLines} +] -# --- Partition API class imports (private) --- -${imports} +_load_lock = threading.RLock() + + +def _load_api(name: str) -> Any: + """Import the API class for \`name\`, build it if combined, and cache it.""" + with _load_lock: + cached = globals().get(name) + if cached is not None: + return cached + bases = tuple( + getattr(importlib.import_module(module_path), class_name) + for module_path, class_name in _API_EXPORTS[name] + ) + value = bases[0] if len(bases) == 1 else type(name, bases, {"__module__": __name__}) + globals()[name] = value + return value + + +class _SailPointNamespace(type): + """Metaclass that resolves \`SailPoint.\` on first access.""" + + def __getattr__(cls, name: str) -> Any: + if name in _API_EXPORTS: + value = _load_api(name) + setattr(cls, name, value) + return value + raise AttributeError(f"type object {cls.__name__!r} has no attribute {name!r}") + + def __dir__(cls) -> List[str]: + return sorted(set(super().__dir__()) | set(_API_EXPORTS)) + + +if TYPE_CHECKING: + # --- Partition API class imports (private) --- +${typeCheckingImports} ${combinedSection} -# --- Resource-named exports --- + # --- Resource-named exports --- ${resourceExportLines.join("\n")} -# --- SailPoint namespace (all resources grouped, alternative style) --- -class SailPoint: + # --- SailPoint namespace (all resources grouped, alternative style) --- + class SailPoint: ${nsMembers.join("\n")} - -# --- Common utilities --- -from sailpoint.configuration import Configuration, ConfigurationParams -from sailpoint.paginator import Paginator +else: + # Runtime only: type checkers skip this branch, so they still report + # unknown names such as \`from sailpoint import NotARealApi\`. + def __getattr__(name: str) -> Any: + if name in _API_EXPORTS: + return _load_api(name) + raise AttributeError(f"module {__name__!r} has no attribute {name!r}") + + def __dir__() -> List[str]: + return sorted(set(globals()) | set(_API_EXPORTS)) + + class SailPoint(metaclass=_SailPointNamespace): + """All resource API classes grouped under one name, e.g. \`SailPoint.SourcesApi\`.""" `; fs.writeFileSync(path.join(SAILPOINT_DIR, "__init__.py"), fileContent, "utf8"); diff --git a/validation_test.py b/validation_test.py index 569c1e0b5..43190fc46 100644 --- a/validation_test.py +++ b/validation_test.py @@ -294,5 +294,110 @@ def test_nerm_v2025_list_delegations(self): self.assertIsNotNone(result.data) self.assertEqual(200, result.status_code) + +class TestLazyImports(unittest.TestCase): + """ + sailpoint/__init__.py resolves API classes lazily (PEP 562), so importing the + package must not import any partition package. These tests need no tenant. + """ + + # Shared, non-partition modules that `import sailpoint` is allowed to load + ROOT_MODULES = {"api_client", "api_response", "configuration", "exceptions", "paginator", "rest"} + + @classmethod + def setUpClass(cls): + if not HAS_V1: + raise unittest.SkipTest( + "V1 partition packages not built yet. " + "Run: node sdk-resources/build-versioned-sdk.js " + ) + + def _loaded_partitions(self, code): + """Run `code` in a fresh interpreter and return the sailpoint partitions it loaded.""" + import os + import subprocess + import sys + script = ( + code + "\n" + "import sys\n" + "print(','.join(sorted({m.split('.')[1] for m in sys.modules if m.startswith('sailpoint.')})))\n" + ) + out = subprocess.run( + [sys.executable, "-c", script], + cwd=os.path.dirname(os.path.abspath(__file__)), + capture_output=True, text=True, check=True, + ).stdout.strip().splitlines()[-1] + return set(filter(None, out.split(","))) - self.ROOT_MODULES + + def test_import_sailpoint_loads_no_partitions(self): + self.assertEqual(set(), self._loaded_partitions("import sailpoint")) + + def test_import_one_api_loads_only_its_partition(self): + self.assertEqual({"search"}, self._loaded_partitions("from sailpoint import SearchApi")) + + def test_namespace_access_loads_only_its_partition(self): + self.assertEqual( + {"sources"}, + self._loaded_partitions("from sailpoint import SailPoint\nSailPoint.SourcesApi"), + ) + + def test_flat_imports(self): + from sailpoint import SourcesApi, ApiClient, Configuration, ConfigurationParams, Paginator + from sailpoint.sources import SourcesApi as PartitionSourcesApi + from sailpoint.sources.api.sources_api import SourcesApi as ModuleSourcesApi + self.assertIs(SourcesApi, PartitionSourcesApi) + self.assertIs(SourcesApi, ModuleSourcesApi) + self.assertIsNotNone(ApiClient) + self.assertIsNotNone(Configuration) + self.assertIsNotNone(ConfigurationParams) + self.assertIsNotNone(Paginator) + + def test_namespace_matches_flat_exports(self): + import sailpoint + from sailpoint import SailPoint + self.assertIs(SailPoint.SourcesApi, sailpoint.SourcesApi) + self.assertIs(SailPoint.RolesApi, sailpoint.RolesApi) + self.assertIn("SourcesApi", dir(SailPoint)) + + def test_combined_classes_expose_both_partitions(self): + import sailpoint + from sailpoint import RolesApi, WorkflowsApi + from sailpoint.roles.api.roles_api import RolesApi as IscRolesApi + from sailpoint.nerm.api.roles_api import RolesApi as NermRolesApi + from sailpoint.workflows.api.workflows_api import WorkflowsApi as IscWorkflowsApi + from sailpoint.nerm.api.workflows_api import WorkflowsApi as NermWorkflowsApi + self.assertTrue(issubclass(RolesApi, IscRolesApi)) + self.assertTrue(issubclass(RolesApi, NermRolesApi)) + self.assertTrue(issubclass(WorkflowsApi, IscWorkflowsApi)) + self.assertTrue(issubclass(WorkflowsApi, NermWorkflowsApi)) + # Built once and cached, so every access returns the same class + self.assertIs(RolesApi, sailpoint.RolesApi) + self.assertIs(WorkflowsApi, sailpoint.WorkflowsApi) + + def test_every_export_resolves(self): + import sailpoint + for name in sailpoint.__all__: + with self.subTest(name=name): + self.assertIsNotNone(getattr(sailpoint, name)) + self.assertTrue(set(sailpoint.__all__) <= set(dir(sailpoint))) + + def test_star_import(self): + namespace = {} + exec("from sailpoint import *", namespace) + self.assertIn("SourcesApi", namespace) + self.assertIn("ApiClient", namespace) + self.assertIn("SailPoint", namespace) + + def test_unknown_names_raise_attribute_error(self): + import sailpoint + from sailpoint import SailPoint + with self.assertRaises(AttributeError): + sailpoint.NotARealApi + with self.assertRaises(AttributeError): + SailPoint.NotARealApi + with self.assertRaises(ImportError): + from sailpoint import NotARealApi # noqa: F401 + + if __name__ == '__main__': unittest.main()