From f6f2ee6c609ac302dd6d07e721bbb9fa470d29bb Mon Sep 17 00:00:00 2001 From: tyler-mairose-sp Date: Wed, 25 Oct 2023 09:57:23 -0400 Subject: [PATCH] Add v2 and cc apis --- example.py | 23 +- sailpoint/.openapi-generator/FILES | 928 +---------- sailpoint/cc/__init__.py | 58 + sailpoint/cc/api/__init__.py | 10 + sailpoint/cc/api/accounts_api.py | 294 ++++ sailpoint/cc/api/applications_api.py | 851 ++++++++++ sailpoint/cc/api/connectors_api.py | 776 +++++++++ sailpoint/cc/api/sources_accounts_api.py | 169 ++ sailpoint/cc/api/sources_aggregation_api.py | 211 +++ sailpoint/cc/api/system_api.py | 195 +++ sailpoint/cc/api/user_api.py | 315 ++++ sailpoint/cc/api_client.py | 800 +++++++++ sailpoint/cc/api_response.py | 31 + sailpoint/cc/configuration.py | 470 ++++++ sailpoint/cc/docs/AccountsApi.md | 153 ++ sailpoint/cc/docs/ApplicationsApi.md | 442 +++++ sailpoint/cc/docs/ConnectorsApi.md | 384 +++++ sailpoint/cc/docs/CreateApplicationRequest.md | 29 + sailpoint/cc/docs/CreateConnectorRequest.md | 32 + sailpoint/cc/docs/GetIdentity200Response.md | 68 + .../cc/docs/GetIdentity200ResponseAuth.md | 29 + .../cc/docs/GetIdentity200ResponseOrg.md | 77 + .../cc/docs/ImportConnectorConfigRequest.md | 28 + .../cc/docs/ListAccounts200ResponseInner.md | 45 + ...nts200ResponseInnerPasswordChangeResult.md | 28 + .../docs/ListApplications200ResponseInner.md | 77 + ...esponseInnerAccountServicePoliciesInner.md | 30 + ...cations200ResponseInnerAppProfilesInner.md | 32 + .../ListApplications200ResponseInnerHealth.md | 31 + .../ListApplications200ResponseInnerOwner.md | 29 + .../cc/docs/ListConnectors200Response.md | 29 + .../ListConnectors200ResponseItemsInner.md | 45 + sailpoint/cc/docs/LoadAccountsRequest.md | 29 + sailpoint/cc/docs/RefreshIdentitiesRequest.md | 29 + .../RefreshIdentitiesRequestRefreshArgs.md | 33 + sailpoint/cc/docs/SourcesAccountsApi.md | 83 + sailpoint/cc/docs/SourcesAggregationApi.md | 89 + sailpoint/cc/docs/SystemApi.md | 86 + sailpoint/cc/docs/UpdateApplicationRequest.md | 28 + .../cc/docs/UpdateUserPermissionsRequest.md | 30 + sailpoint/cc/docs/UserApi.md | 158 ++ sailpoint/cc/exceptions.py | 175 ++ sailpoint/cc/models/__init__.py | 35 + .../cc/models/create_application_request.py | 69 + .../cc/models/create_connector_request.py | 80 + .../cc/models/get_identity200_response.py | 221 +++ .../models/get_identity200_response_auth.py | 69 + .../cc/models/get_identity200_response_org.py | 267 +++ .../models/import_connector_config_request.py | 67 + .../models/list_accounts200_response_inner.py | 156 ++ ...0_response_inner_password_change_result.py | 70 + .../list_applications200_response_inner.py | 291 ++++ ...se_inner_account_service_policies_inner.py | 75 + ...ns200_response_inner_app_profiles_inner.py | 83 + ...t_applications200_response_inner_health.py | 76 + ...st_applications200_response_inner_owner.py | 69 + .../cc/models/list_connectors200_response.py | 79 + ...list_connectors200_response_items_inner.py | 166 ++ sailpoint/cc/models/load_accounts_request.py | 70 + .../cc/models/refresh_identities_request.py | 80 + ...refresh_identities_request_refresh_args.py | 109 ++ .../cc/models/update_application_request.py | 64 + .../models/update_user_permissions_request.py | 91 ++ sailpoint/cc/rest.py | 357 ++++ sailpoint/cc/test/__init__.py | 0 sailpoint/cc/test/test_accounts_api.py | 44 + sailpoint/cc/test/test_applications_api.py | 72 + sailpoint/cc/test/test_connectors_api.py | 65 + .../test/test_create_application_request.py | 54 + .../cc/test/test_create_connector_request.py | 57 + .../cc/test/test_get_identity200_response.py | 151 ++ .../test_get_identity200_response_auth.py | 54 + .../test/test_get_identity200_response_org.py | 104 ++ .../test_import_connector_config_request.py | 53 + .../test_list_accounts200_response_inner.py | 55 + ...0_response_inner_password_change_result.py | 55 + ...est_list_applications200_response_inner.py | 121 ++ ...se_inner_account_service_policies_inner.py | 58 + ...ns200_response_inner_app_profiles_inner.py | 59 + ...t_applications200_response_inner_health.py | 57 + ...st_applications200_response_inner_owner.py | 55 + .../test/test_list_connectors200_response.py | 74 + ...list_connectors200_response_items_inner.py | 71 + .../cc/test/test_load_accounts_request.py | 54 + .../test/test_refresh_identities_request.py | 60 + ...refresh_identities_request_refresh_args.py | 59 + .../cc/test/test_sources_accounts_api.py | 37 + .../cc/test/test_sources_aggregation_api.py | 37 + sailpoint/cc/test/test_system_api.py | 37 + .../test/test_update_application_request.py | 53 + .../test_update_user_permissions_request.py | 55 + sailpoint/cc/test/test_user_api.py | 44 + sailpoint/cc_README.md | 148 ++ sailpoint/v2/__init__.py | 48 + sailpoint/v2/api/__init__.py | 5 + sailpoint/v2/api/governance_groups_api.py | 1454 +++++++++++++++++ sailpoint/v2/api/org_api.py | 315 ++++ sailpoint/v2/api_client.py | 800 +++++++++ sailpoint/v2/api_response.py | 31 + sailpoint/v2/configuration.py | 470 ++++++ .../docs/BulkDeleteWorkGroups200Response.md | 30 + .../v2/docs/BulkDeleteWorkGroupsRequest.md | 28 + sailpoint/v2/docs/CreateWorkgroupRequest.md | 30 + .../v2/docs/CreateWorkgroupRequestOwner.md | 28 + .../v2/docs/GetOrgSettings200Response.md | 62 + ...GetOrgSettings200ResponseApprovalConfig.md | 31 + ...ings200ResponseSystemNotificationConfig.md | 29 + ...temNotificationConfigNotificationsInner.md | 30 + ...ationConfigNotificationsInnerThresholds.md | 29 + sailpoint/v2/docs/GovernanceGroupsApi.md | 722 ++++++++ ...istWorkgroupConnections200ResponseInner.md | 33 + .../ListWorkgroupMembers200ResponseInner.md | 32 + .../v2/docs/ListWorkgroups200ResponseInner.md | 35 + .../ListWorkgroups200ResponseInnerOwner.md | 31 + .../v2/docs/ModifyWorkgroupMembersRequest.md | 29 + sailpoint/v2/docs/OrgApi.md | 141 ++ sailpoint/v2/docs/UpdateOrgSettingsRequest.md | 50 + sailpoint/v2/exceptions.py | 175 ++ sailpoint/v2/models/__init__.py | 30 + .../bulk_delete_work_groups200_response.py | 72 + .../models/bulk_delete_work_groups_request.py | 63 + .../v2/models/create_workgroup_request.py | 77 + .../models/create_workgroup_request_owner.py | 63 + .../v2/models/get_org_settings200_response.py | 239 +++ ...rg_settings200_response_approval_config.py | 79 + ...200_response_system_notification_config.py | 98 ++ ...notification_config_notifications_inner.py | 86 + ...n_config_notifications_inner_thresholds.py | 74 + ...workgroup_connections200_response_inner.py | 85 + ...ist_workgroup_members200_response_inner.py | 78 + .../list_workgroups200_response_inner.py | 96 ++ ...list_workgroups200_response_inner_owner.py | 75 + .../modify_workgroup_members_request.py | 69 + .../v2/models/update_org_settings_request.py | 176 ++ sailpoint/v2/rest.py | 357 ++++ sailpoint/v2/test/__init__.py | 0 ...est_bulk_delete_work_groups200_response.py | 62 + .../test_bulk_delete_work_groups_request.py | 55 + .../v2/test/test_create_workgroup_request.py | 56 + .../test_create_workgroup_request_owner.py | 53 + .../test/test_get_org_settings200_response.py | 108 ++ ...rg_settings200_response_approval_config.py | 61 + ...200_response_system_notification_config.py | 63 + ...notification_config_notifications_inner.py | 61 + ...n_config_notifications_inner_thresholds.py | 58 + .../v2/test/test_governance_groups_api.py | 93 ++ ...workgroup_connections200_response_inner.py | 60 + ...ist_workgroup_members200_response_inner.py | 58 + .../test_list_workgroups200_response_inner.py | 65 + ...list_workgroups200_response_inner_owner.py | 57 + .../test_modify_workgroup_members_request.py | 58 + sailpoint/v2/test/test_org_api.py | 44 + .../test/test_update_org_settings_request.py | 87 + sailpoint/v2_README.md | 137 ++ sdk-resources/beta-config.yaml | 1 + sdk-resources/cc-config.yaml | 4 + sdk-resources/resources/api_client.mustache | 2 +- sdk-resources/v2-config.yaml | 5 + sdk-resources/v3-config.yaml | 1 + 159 files changed, 18805 insertions(+), 875 deletions(-) create mode 100644 sailpoint/cc/__init__.py create mode 100644 sailpoint/cc/api/__init__.py create mode 100644 sailpoint/cc/api/accounts_api.py create mode 100644 sailpoint/cc/api/applications_api.py create mode 100644 sailpoint/cc/api/connectors_api.py create mode 100644 sailpoint/cc/api/sources_accounts_api.py create mode 100644 sailpoint/cc/api/sources_aggregation_api.py create mode 100644 sailpoint/cc/api/system_api.py create mode 100644 sailpoint/cc/api/user_api.py create mode 100644 sailpoint/cc/api_client.py create mode 100644 sailpoint/cc/api_response.py create mode 100644 sailpoint/cc/configuration.py create mode 100644 sailpoint/cc/docs/AccountsApi.md create mode 100644 sailpoint/cc/docs/ApplicationsApi.md create mode 100644 sailpoint/cc/docs/ConnectorsApi.md create mode 100644 sailpoint/cc/docs/CreateApplicationRequest.md create mode 100644 sailpoint/cc/docs/CreateConnectorRequest.md create mode 100644 sailpoint/cc/docs/GetIdentity200Response.md create mode 100644 sailpoint/cc/docs/GetIdentity200ResponseAuth.md create mode 100644 sailpoint/cc/docs/GetIdentity200ResponseOrg.md create mode 100644 sailpoint/cc/docs/ImportConnectorConfigRequest.md create mode 100644 sailpoint/cc/docs/ListAccounts200ResponseInner.md create mode 100644 sailpoint/cc/docs/ListAccounts200ResponseInnerPasswordChangeResult.md create mode 100644 sailpoint/cc/docs/ListApplications200ResponseInner.md create mode 100644 sailpoint/cc/docs/ListApplications200ResponseInnerAccountServicePoliciesInner.md create mode 100644 sailpoint/cc/docs/ListApplications200ResponseInnerAppProfilesInner.md create mode 100644 sailpoint/cc/docs/ListApplications200ResponseInnerHealth.md create mode 100644 sailpoint/cc/docs/ListApplications200ResponseInnerOwner.md create mode 100644 sailpoint/cc/docs/ListConnectors200Response.md create mode 100644 sailpoint/cc/docs/ListConnectors200ResponseItemsInner.md create mode 100644 sailpoint/cc/docs/LoadAccountsRequest.md create mode 100644 sailpoint/cc/docs/RefreshIdentitiesRequest.md create mode 100644 sailpoint/cc/docs/RefreshIdentitiesRequestRefreshArgs.md create mode 100644 sailpoint/cc/docs/SourcesAccountsApi.md create mode 100644 sailpoint/cc/docs/SourcesAggregationApi.md create mode 100644 sailpoint/cc/docs/SystemApi.md create mode 100644 sailpoint/cc/docs/UpdateApplicationRequest.md create mode 100644 sailpoint/cc/docs/UpdateUserPermissionsRequest.md create mode 100644 sailpoint/cc/docs/UserApi.md create mode 100644 sailpoint/cc/exceptions.py create mode 100644 sailpoint/cc/models/__init__.py create mode 100644 sailpoint/cc/models/create_application_request.py create mode 100644 sailpoint/cc/models/create_connector_request.py create mode 100644 sailpoint/cc/models/get_identity200_response.py create mode 100644 sailpoint/cc/models/get_identity200_response_auth.py create mode 100644 sailpoint/cc/models/get_identity200_response_org.py create mode 100644 sailpoint/cc/models/import_connector_config_request.py create mode 100644 sailpoint/cc/models/list_accounts200_response_inner.py create mode 100644 sailpoint/cc/models/list_accounts200_response_inner_password_change_result.py create mode 100644 sailpoint/cc/models/list_applications200_response_inner.py create mode 100644 sailpoint/cc/models/list_applications200_response_inner_account_service_policies_inner.py create mode 100644 sailpoint/cc/models/list_applications200_response_inner_app_profiles_inner.py create mode 100644 sailpoint/cc/models/list_applications200_response_inner_health.py create mode 100644 sailpoint/cc/models/list_applications200_response_inner_owner.py create mode 100644 sailpoint/cc/models/list_connectors200_response.py create mode 100644 sailpoint/cc/models/list_connectors200_response_items_inner.py create mode 100644 sailpoint/cc/models/load_accounts_request.py create mode 100644 sailpoint/cc/models/refresh_identities_request.py create mode 100644 sailpoint/cc/models/refresh_identities_request_refresh_args.py create mode 100644 sailpoint/cc/models/update_application_request.py create mode 100644 sailpoint/cc/models/update_user_permissions_request.py create mode 100644 sailpoint/cc/rest.py create mode 100644 sailpoint/cc/test/__init__.py create mode 100644 sailpoint/cc/test/test_accounts_api.py create mode 100644 sailpoint/cc/test/test_applications_api.py create mode 100644 sailpoint/cc/test/test_connectors_api.py create mode 100644 sailpoint/cc/test/test_create_application_request.py create mode 100644 sailpoint/cc/test/test_create_connector_request.py create mode 100644 sailpoint/cc/test/test_get_identity200_response.py create mode 100644 sailpoint/cc/test/test_get_identity200_response_auth.py create mode 100644 sailpoint/cc/test/test_get_identity200_response_org.py create mode 100644 sailpoint/cc/test/test_import_connector_config_request.py create mode 100644 sailpoint/cc/test/test_list_accounts200_response_inner.py create mode 100644 sailpoint/cc/test/test_list_accounts200_response_inner_password_change_result.py create mode 100644 sailpoint/cc/test/test_list_applications200_response_inner.py create mode 100644 sailpoint/cc/test/test_list_applications200_response_inner_account_service_policies_inner.py create mode 100644 sailpoint/cc/test/test_list_applications200_response_inner_app_profiles_inner.py create mode 100644 sailpoint/cc/test/test_list_applications200_response_inner_health.py create mode 100644 sailpoint/cc/test/test_list_applications200_response_inner_owner.py create mode 100644 sailpoint/cc/test/test_list_connectors200_response.py create mode 100644 sailpoint/cc/test/test_list_connectors200_response_items_inner.py create mode 100644 sailpoint/cc/test/test_load_accounts_request.py create mode 100644 sailpoint/cc/test/test_refresh_identities_request.py create mode 100644 sailpoint/cc/test/test_refresh_identities_request_refresh_args.py create mode 100644 sailpoint/cc/test/test_sources_accounts_api.py create mode 100644 sailpoint/cc/test/test_sources_aggregation_api.py create mode 100644 sailpoint/cc/test/test_system_api.py create mode 100644 sailpoint/cc/test/test_update_application_request.py create mode 100644 sailpoint/cc/test/test_update_user_permissions_request.py create mode 100644 sailpoint/cc/test/test_user_api.py create mode 100644 sailpoint/cc_README.md create mode 100644 sailpoint/v2/__init__.py create mode 100644 sailpoint/v2/api/__init__.py create mode 100644 sailpoint/v2/api/governance_groups_api.py create mode 100644 sailpoint/v2/api/org_api.py create mode 100644 sailpoint/v2/api_client.py create mode 100644 sailpoint/v2/api_response.py create mode 100644 sailpoint/v2/configuration.py create mode 100644 sailpoint/v2/docs/BulkDeleteWorkGroups200Response.md create mode 100644 sailpoint/v2/docs/BulkDeleteWorkGroupsRequest.md create mode 100644 sailpoint/v2/docs/CreateWorkgroupRequest.md create mode 100644 sailpoint/v2/docs/CreateWorkgroupRequestOwner.md create mode 100644 sailpoint/v2/docs/GetOrgSettings200Response.md create mode 100644 sailpoint/v2/docs/GetOrgSettings200ResponseApprovalConfig.md create mode 100644 sailpoint/v2/docs/GetOrgSettings200ResponseSystemNotificationConfig.md create mode 100644 sailpoint/v2/docs/GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner.md create mode 100644 sailpoint/v2/docs/GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds.md create mode 100644 sailpoint/v2/docs/GovernanceGroupsApi.md create mode 100644 sailpoint/v2/docs/ListWorkgroupConnections200ResponseInner.md create mode 100644 sailpoint/v2/docs/ListWorkgroupMembers200ResponseInner.md create mode 100644 sailpoint/v2/docs/ListWorkgroups200ResponseInner.md create mode 100644 sailpoint/v2/docs/ListWorkgroups200ResponseInnerOwner.md create mode 100644 sailpoint/v2/docs/ModifyWorkgroupMembersRequest.md create mode 100644 sailpoint/v2/docs/OrgApi.md create mode 100644 sailpoint/v2/docs/UpdateOrgSettingsRequest.md create mode 100644 sailpoint/v2/exceptions.py create mode 100644 sailpoint/v2/models/__init__.py create mode 100644 sailpoint/v2/models/bulk_delete_work_groups200_response.py create mode 100644 sailpoint/v2/models/bulk_delete_work_groups_request.py create mode 100644 sailpoint/v2/models/create_workgroup_request.py create mode 100644 sailpoint/v2/models/create_workgroup_request_owner.py create mode 100644 sailpoint/v2/models/get_org_settings200_response.py create mode 100644 sailpoint/v2/models/get_org_settings200_response_approval_config.py create mode 100644 sailpoint/v2/models/get_org_settings200_response_system_notification_config.py create mode 100644 sailpoint/v2/models/get_org_settings200_response_system_notification_config_notifications_inner.py create mode 100644 sailpoint/v2/models/get_org_settings200_response_system_notification_config_notifications_inner_thresholds.py create mode 100644 sailpoint/v2/models/list_workgroup_connections200_response_inner.py create mode 100644 sailpoint/v2/models/list_workgroup_members200_response_inner.py create mode 100644 sailpoint/v2/models/list_workgroups200_response_inner.py create mode 100644 sailpoint/v2/models/list_workgroups200_response_inner_owner.py create mode 100644 sailpoint/v2/models/modify_workgroup_members_request.py create mode 100644 sailpoint/v2/models/update_org_settings_request.py create mode 100644 sailpoint/v2/rest.py create mode 100644 sailpoint/v2/test/__init__.py create mode 100644 sailpoint/v2/test/test_bulk_delete_work_groups200_response.py create mode 100644 sailpoint/v2/test/test_bulk_delete_work_groups_request.py create mode 100644 sailpoint/v2/test/test_create_workgroup_request.py create mode 100644 sailpoint/v2/test/test_create_workgroup_request_owner.py create mode 100644 sailpoint/v2/test/test_get_org_settings200_response.py create mode 100644 sailpoint/v2/test/test_get_org_settings200_response_approval_config.py create mode 100644 sailpoint/v2/test/test_get_org_settings200_response_system_notification_config.py create mode 100644 sailpoint/v2/test/test_get_org_settings200_response_system_notification_config_notifications_inner.py create mode 100644 sailpoint/v2/test/test_get_org_settings200_response_system_notification_config_notifications_inner_thresholds.py create mode 100644 sailpoint/v2/test/test_governance_groups_api.py create mode 100644 sailpoint/v2/test/test_list_workgroup_connections200_response_inner.py create mode 100644 sailpoint/v2/test/test_list_workgroup_members200_response_inner.py create mode 100644 sailpoint/v2/test/test_list_workgroups200_response_inner.py create mode 100644 sailpoint/v2/test/test_list_workgroups200_response_inner_owner.py create mode 100644 sailpoint/v2/test/test_modify_workgroup_members_request.py create mode 100644 sailpoint/v2/test/test_org_api.py create mode 100644 sailpoint/v2/test/test_update_org_settings_request.py create mode 100644 sailpoint/v2_README.md create mode 100644 sdk-resources/cc-config.yaml create mode 100644 sdk-resources/v2-config.yaml diff --git a/example.py b/example.py index 56e8047a5..7cb35e7a4 100644 --- a/example.py +++ b/example.py @@ -5,9 +5,12 @@ from sailpoint.v3.models.transform_read import TransformRead from sailpoint.v3.rest import ApiException from pprint import pprint +from sailpoint.cc.api_client import ApiClient +from sailpoint.cc.api.accounts_api import AccountsApi +from sailpoint.cc.api.connectors_api import ConnectorsApi configuration = Configuration() - + # Enter a context with an instance of the API client with sailpoint.v3.ApiClient(configuration) as api_client: # Create an instance of the API class @@ -24,12 +27,12 @@ api_instance = sailpoint.v3.AccessProfilesApi(api_client) - try: - api_response = api_instance.list_access_profiles() - print("The response of AccessProfilesApi->list_access_profiles:\n") - for access_profile in api_response: - pprint(access_profile.name) - except Exception as e: - print( - "Exception when calling AccessProfilesApi->list_access_profiles: %s\n" % e - ) +# try: +# api_response = api_instance.list_access_profiles() +# print("The response of AccessProfilesApi->list_access_profiles:\n") +# for access_profile in api_response: +# pprint(access_profile.name) +# except Exception as e: +# print( +# "Exception when calling AccessProfilesApi->list_access_profiles: %s\n" % e +# ) diff --git a/sailpoint/.openapi-generator/FILES b/sailpoint/.openapi-generator/FILES index dd4319008..f925596cc 100644 --- a/sailpoint/.openapi-generator/FILES +++ b/sailpoint/.openapi-generator/FILES @@ -1,864 +1,64 @@ -v3/__init__.py -v3/api/__init__.py -v3/api/access_profiles_api.py -v3/api/access_request_approvals_api.py -v3/api/access_requests_api.py -v3/api/account_activities_api.py -v3/api/account_usages_api.py -v3/api/accounts_api.py -v3/api/auth_user_api.py -v3/api/certification_campaign_filters_api.py -v3/api/certification_campaigns_api.py -v3/api/certification_summaries_api.py -v3/api/certifications_api.py -v3/api/global_tenant_security_settings_api.py -v3/api/identity_profiles_api.py -v3/api/lifecycle_states_api.py -v3/api/non_employee_lifecycle_management_api.py -v3/api/o_auth_clients_api.py -v3/api/password_configuration_api.py -v3/api/password_dictionary_api.py -v3/api/password_management_api.py -v3/api/password_sync_groups_api.py -v3/api/personal_access_tokens_api.py -v3/api/public_identities_api.py -v3/api/public_identities_config_api.py -v3/api/requestable_objects_api.py -v3/api/roles_api.py -v3/api/saved_search_api.py -v3/api/scheduled_search_api.py -v3/api/search_api.py -v3/api/segments_api.py -v3/api/service_desk_integration_api.py -v3/api/sod_policy_api.py -v3/api/sod_violations_api.py -v3/api/source_usages_api.py -v3/api/sources_api.py -v3/api/tagged_objects_api.py -v3/api/transforms_api.py -v3/api/work_items_api.py -v3/api_client.py -v3/api_response.py -v3/configuration.py -v3/docs/Access.md -v3/docs/AccessConstraint.md -v3/docs/AccessCriteria.md -v3/docs/AccessCriteriaCriteriaListInner.md -v3/docs/AccessProfile.md -v3/docs/AccessProfileApprovalScheme.md -v3/docs/AccessProfileBulkDeleteRequest.md -v3/docs/AccessProfileBulkDeleteResponse.md -v3/docs/AccessProfileDocument.md -v3/docs/AccessProfileEntitlement.md -v3/docs/AccessProfileRef.md -v3/docs/AccessProfileRole.md -v3/docs/AccessProfileSourceRef.md -v3/docs/AccessProfileSummary.md -v3/docs/AccessProfileUsage.md -v3/docs/AccessProfilesApi.md -v3/docs/AccessRequest.md -v3/docs/AccessRequestApprovalsApi.md -v3/docs/AccessRequestConfig.md -v3/docs/AccessRequestItem.md -v3/docs/AccessRequestPhases.md -v3/docs/AccessRequestType.md -v3/docs/AccessRequestsApi.md -v3/docs/AccessReviewItem.md -v3/docs/AccessReviewReassignment.md -v3/docs/AccessSummary.md -v3/docs/AccessSummaryAccess.md -v3/docs/AccessType.md -v3/docs/Account.md -v3/docs/AccountAction.md -v3/docs/AccountActivitiesApi.md -v3/docs/AccountActivity.md -v3/docs/AccountActivityDocument.md -v3/docs/AccountActivityItem.md -v3/docs/AccountActivityItemOperation.md -v3/docs/AccountActivitySearchedItem.md -v3/docs/AccountAttributes.md -v3/docs/AccountAttributesCreate.md -v3/docs/AccountAttributesCreateAttributes.md -v3/docs/AccountDocument.md -v3/docs/AccountRequest.md -v3/docs/AccountRequestInfo.md -v3/docs/AccountRequestResult.md -v3/docs/AccountSource.md -v3/docs/AccountToggleRequest.md -v3/docs/AccountUnlockRequest.md -v3/docs/AccountUsage.md -v3/docs/AccountUsagesApi.md -v3/docs/AccountsApi.md -v3/docs/AccountsAsyncResult.md -v3/docs/ActivateCampaignOptions.md -v3/docs/AdminReviewReassign.md -v3/docs/AdminReviewReassignReassignTo.md -v3/docs/Aggregation.md -v3/docs/AggregationDocument.md -v3/docs/AggregationResult.md -v3/docs/AggregationType.md -v3/docs/Aggregations.md -v3/docs/App.md -v3/docs/AppAllOfAccount.md -v3/docs/Approval.md -v3/docs/ApprovalComment.md -v3/docs/ApprovalForwardHistory.md -v3/docs/ApprovalItemDetails.md -v3/docs/ApprovalItems.md -v3/docs/ApprovalReminderAndEscalationConfig.md -v3/docs/ApprovalScheme.md -v3/docs/ApprovalSchemeForRole.md -v3/docs/ApprovalStatus.md -v3/docs/ApprovalStatusDto.md -v3/docs/ApprovalSummary.md -v3/docs/ArrayInner.md -v3/docs/AttributeDefinition.md -v3/docs/AttributeDefinitionSchema.md -v3/docs/AttributeDefinitionType.md -v3/docs/AttributeRequest.md -v3/docs/AuthUser.md -v3/docs/AuthUserApi.md -v3/docs/BaseAccess.md -v3/docs/BaseAccount.md -v3/docs/BaseCommonDto.md -v3/docs/BaseDocument.md -v3/docs/BaseEntitlement.md -v3/docs/BaseReferenceDto.md -v3/docs/Bound.md -v3/docs/BucketAggregation.md -v3/docs/BucketType.md -v3/docs/BulkTaggedObject.md -v3/docs/Campaign.md -v3/docs/CampaignAlert.md -v3/docs/CampaignAllOfFilter.md -v3/docs/CampaignAllOfRoleCompositionCampaignInfo.md -v3/docs/CampaignAllOfRoleCompositionCampaignInfoRemediatorRef.md -v3/docs/CampaignAllOfSearchCampaignInfo.md -v3/docs/CampaignAllOfSearchCampaignInfoReviewer.md -v3/docs/CampaignAllOfSourceOwnerCampaignInfo.md -v3/docs/CampaignAllOfSourcesWithOrphanEntitlements.md -v3/docs/CampaignCompleteOptions.md -v3/docs/CampaignFilterDetails.md -v3/docs/CampaignFilterDetailsCriteriaListInner.md -v3/docs/CampaignReference.md -v3/docs/CampaignReport.md -v3/docs/CampaignReportsConfig.md -v3/docs/CampaignTemplate.md -v3/docs/CampaignTemplateOwnerRef.md -v3/docs/CampaignsDeleteRequest.md -v3/docs/CancelAccessRequest.md -v3/docs/CancelledRequestDetails.md -v3/docs/Certification.md -v3/docs/CertificationCampaignFiltersApi.md -v3/docs/CertificationCampaignsApi.md -v3/docs/CertificationDecision.md -v3/docs/CertificationIdentitySummary.md -v3/docs/CertificationPhase.md -v3/docs/CertificationReference.md -v3/docs/CertificationSummariesApi.md -v3/docs/CertificationTask.md -v3/docs/CertificationsApi.md -v3/docs/ClientType.md -v3/docs/Column.md -v3/docs/Comment.md -v3/docs/CommentDto.md -v3/docs/CommentDtoAuthor.md -v3/docs/CompletedApproval.md -v3/docs/CompletedApprovalReviewerComment.md -v3/docs/CompletedApprovalState.md -v3/docs/CompletionStatus.md -v3/docs/ConflictingAccessCriteria.md -v3/docs/CreateOAuthClientRequest.md -v3/docs/CreateOAuthClientResponse.md -v3/docs/CreatePersonalAccessTokenRequest.md -v3/docs/CreatePersonalAccessTokenResponse.md -v3/docs/CreateSavedSearchRequest.md -v3/docs/CreateScheduledSearchRequest.md -v3/docs/CriteriaType.md -v3/docs/DeleteNonEmployeeRecordsInBulkRequest.md -v3/docs/DeleteSource202Response.md -v3/docs/DisplayReference.md -v3/docs/DocumentType.md -v3/docs/DtoType.md -v3/docs/EmailNotificationOption.md -v3/docs/Entitlement.md -v3/docs/EntitlementDocument.md -v3/docs/EntitlementDto.md -v3/docs/EntitlementRef.md -v3/docs/EntitlementRequestConfig.md -v3/docs/EntitlementSource.md -v3/docs/EntitlementSummary.md -v3/docs/ErrorMessageDto.md -v3/docs/ErrorResponseDto.md -v3/docs/Event.md -v3/docs/EventDocument.md -v3/docs/ExceptionAccessCriteria.md -v3/docs/ExceptionCriteria.md -v3/docs/ExceptionCriteriaAccess.md -v3/docs/ExceptionCriteriaCriteriaListInner.md -v3/docs/ExecutionStatus.md -v3/docs/ExpansionItem.md -v3/docs/Expression.md -v3/docs/FieldDetailsDto.md -v3/docs/Filter.md -v3/docs/FilterAggregation.md -v3/docs/FilterType.md -v3/docs/FormDetails.md -v3/docs/FormItemDetails.md -v3/docs/ForwardApprovalDto.md -v3/docs/GetActiveCampaigns200ResponseInner.md -v3/docs/GetOAuthClientResponse.md -v3/docs/GetPersonalAccessTokenResponse.md -v3/docs/GlobalTenantSecuritySettingsApi.md -v3/docs/GrantType.md -v3/docs/IdentityAccess.md -v3/docs/IdentityAttribute.md -v3/docs/IdentityAttributeConfig.md -v3/docs/IdentityAttributeTransform.md -v3/docs/IdentityCertDecisionSummary.md -v3/docs/IdentityCertificationDto.md -v3/docs/IdentityDocument.md -v3/docs/IdentityExceptionReportReference.md -v3/docs/IdentityProfile.md -v3/docs/IdentityProfileAllOfAuthoritativeSource.md -v3/docs/IdentityProfileAllOfOwner.md -v3/docs/IdentityProfileExportedObject.md -v3/docs/IdentityProfilesApi.md -v3/docs/IdentityReference.md -v3/docs/IdentityReferenceWithNameAndEmail.md -v3/docs/IdentitySummary.md -v3/docs/IdentityWithNewAccess.md -v3/docs/IdentityWithNewAccess1.md -v3/docs/IdentityWithNewAccessAccessRefsInner.md -v3/docs/ImportNonEmployeeRecordsInBulkRequest.md -v3/docs/Index.md -v3/docs/InnerHit.md -v3/docs/JsonPatch.md -v3/docs/JsonPatchOperation.md -v3/docs/JsonPatchOperationValue.md -v3/docs/LifecycleState.md -v3/docs/LifecycleStatesApi.md -v3/docs/ListAccessProfiles401Response.md -v3/docs/ListAccessProfiles429Response.md -v3/docs/LocaleOrigin.md -v3/docs/ManagerCorrelationMapping.md -v3/docs/ManualWorkItemDetails.md -v3/docs/ManualWorkItemState.md -v3/docs/MetricAggregation.md -v3/docs/MetricType.md -v3/docs/ModelSchema.md -v3/docs/MultiPolicyRequest.md -v3/docs/NameType.md -v3/docs/NestedAggregation.md -v3/docs/NetworkConfiguration.md -v3/docs/NonEmployeeApprovalDecision.md -v3/docs/NonEmployeeApprovalItem.md -v3/docs/NonEmployeeApprovalItemBase.md -v3/docs/NonEmployeeApprovalItemDetail.md -v3/docs/NonEmployeeApprovalSummary.md -v3/docs/NonEmployeeBulkUploadJob.md -v3/docs/NonEmployeeBulkUploadStatus.md -v3/docs/NonEmployeeIdentityDtoType.md -v3/docs/NonEmployeeIdentityReferenceWithId.md -v3/docs/NonEmployeeIdnUserRequest.md -v3/docs/NonEmployeeLifecycleManagementApi.md -v3/docs/NonEmployeeRecord.md -v3/docs/NonEmployeeRejectApprovalDecision.md -v3/docs/NonEmployeeRequest.md -v3/docs/NonEmployeeRequestBody.md -v3/docs/NonEmployeeRequestLite.md -v3/docs/NonEmployeeRequestSummary.md -v3/docs/NonEmployeeRequestWithoutApprovalItem.md -v3/docs/NonEmployeeSchemaAttribute.md -v3/docs/NonEmployeeSchemaAttributeBody.md -v3/docs/NonEmployeeSchemaAttributeType.md -v3/docs/NonEmployeeSource.md -v3/docs/NonEmployeeSourceLite.md -v3/docs/NonEmployeeSourceLiteWithSchemaAttributes.md -v3/docs/NonEmployeeSourceRequestBody.md -v3/docs/NonEmployeeSourceWithCloudExternalId.md -v3/docs/NonEmployeeSourceWithNECount.md -v3/docs/OAuthClientsApi.md -v3/docs/ObjectImportResult.md -v3/docs/Operation.md -v3/docs/OriginalRequest.md -v3/docs/Owner.md -v3/docs/OwnerReference.md -v3/docs/OwnerReferenceSegments.md -v3/docs/Owns.md -v3/docs/PasswordChangeRequest.md -v3/docs/PasswordChangeResponse.md -v3/docs/PasswordConfigurationApi.md -v3/docs/PasswordDictionaryApi.md -v3/docs/PasswordInfo.md -v3/docs/PasswordInfoAccount.md -v3/docs/PasswordInfoQueryDTO.md -v3/docs/PasswordManagementApi.md -v3/docs/PasswordOrgConfig.md -v3/docs/PasswordStatus.md -v3/docs/PasswordSyncGroup.md -v3/docs/PasswordSyncGroupsApi.md -v3/docs/PendingApproval.md -v3/docs/PendingApprovalAction.md -v3/docs/PermissionDto.md -v3/docs/PersonalAccessTokensApi.md -v3/docs/PreApprovalTriggerDetails.md -v3/docs/ProcessingDetails.md -v3/docs/ProvisioningConfig.md -v3/docs/ProvisioningConfigManagedResourceRefsInner.md -v3/docs/ProvisioningConfigPlanInitializerScript.md -v3/docs/ProvisioningCriteriaLevel1.md -v3/docs/ProvisioningCriteriaLevel2.md -v3/docs/ProvisioningCriteriaLevel3.md -v3/docs/ProvisioningCriteriaOperation.md -v3/docs/ProvisioningDetails.md -v3/docs/ProvisioningPolicy.md -v3/docs/ProvisioningPolicyDto.md -v3/docs/ProvisioningState.md -v3/docs/PublicIdentitiesApi.md -v3/docs/PublicIdentitiesConfigApi.md -v3/docs/PublicIdentity.md -v3/docs/PublicIdentityAttributeConfig.md -v3/docs/PublicIdentityConfig.md -v3/docs/Query.md -v3/docs/QueryResultFilter.md -v3/docs/QueryType.md -v3/docs/QueuedCheckConfigDetails.md -v3/docs/Range.md -v3/docs/ReassignReference.md -v3/docs/Reassignment.md -v3/docs/ReassignmentReference.md -v3/docs/ReassignmentTrailDTO.md -v3/docs/ReassignmentType.md -v3/docs/Reference.md -v3/docs/RemediationItemDetails.md -v3/docs/RemediationItems.md -v3/docs/ReportResultReference.md -v3/docs/ReportType.md -v3/docs/RequestOnBehalfOfConfig.md -v3/docs/Requestability.md -v3/docs/RequestabilityForRole.md -v3/docs/RequestableObject.md -v3/docs/RequestableObjectReference.md -v3/docs/RequestableObjectRequestStatus.md -v3/docs/RequestableObjectType.md -v3/docs/RequestableObjectsApi.md -v3/docs/RequestedItemStatus.md -v3/docs/RequestedItemStatusRequestState.md -v3/docs/ReviewDecision.md -v3/docs/ReviewReassign.md -v3/docs/ReviewRecommendation.md -v3/docs/ReviewableAccessProfile.md -v3/docs/ReviewableEntitlement.md -v3/docs/ReviewableEntitlementAccount.md -v3/docs/ReviewableRole.md -v3/docs/Reviewer.md -v3/docs/Revocability.md -v3/docs/Role.md -v3/docs/RoleAssignmentSourceType.md -v3/docs/RoleBulkDeleteRequest.md -v3/docs/RoleCriteriaKey.md -v3/docs/RoleCriteriaKeyType.md -v3/docs/RoleCriteriaLevel1.md -v3/docs/RoleCriteriaLevel2.md -v3/docs/RoleCriteriaLevel3.md -v3/docs/RoleCriteriaOperation.md -v3/docs/RoleDocument.md -v3/docs/RoleIdentity.md -v3/docs/RoleMembershipIdentity.md -v3/docs/RoleMembershipSelector.md -v3/docs/RoleMembershipSelectorType.md -v3/docs/RoleSummary.md -v3/docs/RolesApi.md -v3/docs/SODPolicyApi.md -v3/docs/SODViolationsApi.md -v3/docs/SavedSearch.md -v3/docs/SavedSearchApi.md -v3/docs/SavedSearchDetail.md -v3/docs/SavedSearchDetailFilters.md -v3/docs/SavedSearchName.md -v3/docs/Schedule.md -v3/docs/Schedule1.md -v3/docs/Schedule1Days.md -v3/docs/Schedule1Hours.md -v3/docs/ScheduleDays.md -v3/docs/ScheduleHours.md -v3/docs/ScheduleMonths.md -v3/docs/ScheduleType.md -v3/docs/ScheduledSearch.md -v3/docs/ScheduledSearchAllOfOwner.md -v3/docs/ScheduledSearchApi.md -v3/docs/ScheduledSearchName.md -v3/docs/Search.md -v3/docs/SearchAggregationSpecification.md -v3/docs/SearchApi.md -v3/docs/SearchArguments.md -v3/docs/SearchFilterType.md -v3/docs/SearchIdentityReference.md -v3/docs/SearchSchedule.md -v3/docs/SearchScheduleRecipientsInner.md -v3/docs/SectionDetails.md -v3/docs/Segment.md -v3/docs/SegmentsApi.md -v3/docs/Selector.md -v3/docs/SelectorType.md -v3/docs/ServiceDeskIntegrationApi.md -v3/docs/ServiceDeskIntegrationDto.md -v3/docs/ServiceDeskIntegrationDtoAllOfBeforeProvisioningRule.md -v3/docs/ServiceDeskIntegrationDtoAllOfClusterRef.md -v3/docs/ServiceDeskIntegrationDtoAllOfOwnerRef.md -v3/docs/ServiceDeskIntegrationTemplateDto.md -v3/docs/ServiceDeskIntegrationTemplateType.md -v3/docs/SetLifecycleState200Response.md -v3/docs/SetLifecycleStateRequest.md -v3/docs/SlimCampaign.md -v3/docs/SodExemptCriteria.md -v3/docs/SodPolicy.md -v3/docs/SodPolicyConflictingAccessCriteria.md -v3/docs/SodPolicySchedule.md -v3/docs/SodViolationCheck.md -v3/docs/SodViolationCheckResult.md -v3/docs/SodViolationContext.md -v3/docs/SodViolationContextCheckCompleted.md -v3/docs/SodViolationContextConflictingAccessCriteria.md -v3/docs/SodViolationContextConflictingAccessCriteriaLeftCriteria.md -v3/docs/Source.md -v3/docs/SourceAccountCorrelationConfig.md -v3/docs/SourceAccountCorrelationRule.md -v3/docs/SourceBeforeProvisioningRule.md -v3/docs/SourceCluster.md -v3/docs/SourceFeature.md -v3/docs/SourceHealthDto.md -v3/docs/SourceManagementWorkgroup.md -v3/docs/SourceManagerCorrelationRule.md -v3/docs/SourceOwner.md -v3/docs/SourcePasswordPoliciesInner.md -v3/docs/SourceSchemasInner.md -v3/docs/SourceUsage.md -v3/docs/SourceUsageStatus.md -v3/docs/SourceUsagesApi.md -v3/docs/SourcesApi.md -v3/docs/SpConfigMessage.md -v3/docs/SubSearchAggregationSpecification.md -v3/docs/TaggedObject.md -v3/docs/TaggedObjectDto.md -v3/docs/TaggedObjectsApi.md -v3/docs/TaskResultSimplified.md -v3/docs/TextQuery.md -v3/docs/Transform.md -v3/docs/TransformDefinition.md -v3/docs/TransformDefinitionAttributesValue.md -v3/docs/TransformRead.md -v3/docs/TransformsApi.md -v3/docs/TypeAheadQuery.md -v3/docs/TypedReference.md -v3/docs/UpdatePasswordDictionaryRequest.md -v3/docs/UsageType.md -v3/docs/Value.md -v3/docs/ViolationContext.md -v3/docs/ViolationContextPolicy.md -v3/docs/ViolationOwnerAssignmentConfig.md -v3/docs/ViolationOwnerAssignmentConfigOwnerRef.md -v3/docs/ViolationPrediction.md -v3/docs/VisibilityCriteria.md -v3/docs/WorkItemState.md -v3/docs/WorkItemType.md -v3/docs/WorkItems.md -v3/docs/WorkItemsApi.md -v3/docs/WorkItemsCount.md -v3/docs/WorkItemsSummary.md -v3/exceptions.py -v3/models/__init__.py -v3/models/access.py -v3/models/access_constraint.py -v3/models/access_criteria.py -v3/models/access_criteria_criteria_list_inner.py -v3/models/access_profile.py -v3/models/access_profile_approval_scheme.py -v3/models/access_profile_bulk_delete_request.py -v3/models/access_profile_bulk_delete_response.py -v3/models/access_profile_document.py -v3/models/access_profile_entitlement.py -v3/models/access_profile_ref.py -v3/models/access_profile_role.py -v3/models/access_profile_source_ref.py -v3/models/access_profile_summary.py -v3/models/access_profile_usage.py -v3/models/access_request.py -v3/models/access_request_config.py -v3/models/access_request_item.py -v3/models/access_request_phases.py -v3/models/access_request_type.py -v3/models/access_review_item.py -v3/models/access_review_reassignment.py -v3/models/access_summary.py -v3/models/access_summary_access.py -v3/models/access_type.py -v3/models/account.py -v3/models/account_action.py -v3/models/account_activity.py -v3/models/account_activity_document.py -v3/models/account_activity_item.py -v3/models/account_activity_item_operation.py -v3/models/account_activity_searched_item.py -v3/models/account_attributes.py -v3/models/account_attributes_create.py -v3/models/account_attributes_create_attributes.py -v3/models/account_document.py -v3/models/account_request.py -v3/models/account_request_info.py -v3/models/account_request_result.py -v3/models/account_source.py -v3/models/account_toggle_request.py -v3/models/account_unlock_request.py -v3/models/account_usage.py -v3/models/accounts_async_result.py -v3/models/activate_campaign_options.py -v3/models/admin_review_reassign.py -v3/models/admin_review_reassign_reassign_to.py -v3/models/aggregation.py -v3/models/aggregation_document.py -v3/models/aggregation_result.py -v3/models/aggregation_type.py -v3/models/aggregations.py -v3/models/app.py -v3/models/app_all_of_account.py -v3/models/approval.py -v3/models/approval_comment.py -v3/models/approval_forward_history.py -v3/models/approval_item_details.py -v3/models/approval_items.py -v3/models/approval_reminder_and_escalation_config.py -v3/models/approval_scheme.py -v3/models/approval_scheme_for_role.py -v3/models/approval_status.py -v3/models/approval_status_dto.py -v3/models/approval_summary.py -v3/models/array_inner.py -v3/models/attribute_definition.py -v3/models/attribute_definition_schema.py -v3/models/attribute_definition_type.py -v3/models/attribute_request.py -v3/models/auth_user.py -v3/models/base_access.py -v3/models/base_account.py -v3/models/base_common_dto.py -v3/models/base_document.py -v3/models/base_entitlement.py -v3/models/base_reference_dto.py -v3/models/bound.py -v3/models/bucket_aggregation.py -v3/models/bucket_type.py -v3/models/bulk_tagged_object.py -v3/models/campaign.py -v3/models/campaign_alert.py -v3/models/campaign_all_of_filter.py -v3/models/campaign_all_of_role_composition_campaign_info.py -v3/models/campaign_all_of_role_composition_campaign_info_remediator_ref.py -v3/models/campaign_all_of_search_campaign_info.py -v3/models/campaign_all_of_search_campaign_info_reviewer.py -v3/models/campaign_all_of_source_owner_campaign_info.py -v3/models/campaign_all_of_sources_with_orphan_entitlements.py -v3/models/campaign_complete_options.py -v3/models/campaign_filter_details.py -v3/models/campaign_filter_details_criteria_list_inner.py -v3/models/campaign_reference.py -v3/models/campaign_report.py -v3/models/campaign_reports_config.py -v3/models/campaign_template.py -v3/models/campaign_template_owner_ref.py -v3/models/campaigns_delete_request.py -v3/models/cancel_access_request.py -v3/models/cancelled_request_details.py -v3/models/certification.py -v3/models/certification_decision.py -v3/models/certification_identity_summary.py -v3/models/certification_phase.py -v3/models/certification_reference.py -v3/models/certification_task.py -v3/models/client_type.py -v3/models/column.py -v3/models/comment.py -v3/models/comment_dto.py -v3/models/comment_dto_author.py -v3/models/completed_approval.py -v3/models/completed_approval_reviewer_comment.py -v3/models/completed_approval_state.py -v3/models/completion_status.py -v3/models/conflicting_access_criteria.py -v3/models/create_o_auth_client_request.py -v3/models/create_o_auth_client_response.py -v3/models/create_personal_access_token_request.py -v3/models/create_personal_access_token_response.py -v3/models/create_saved_search_request.py -v3/models/create_scheduled_search_request.py -v3/models/criteria_type.py -v3/models/delete_non_employee_records_in_bulk_request.py -v3/models/delete_source202_response.py -v3/models/display_reference.py -v3/models/document_type.py -v3/models/dto_type.py -v3/models/email_notification_option.py -v3/models/entitlement.py -v3/models/entitlement_document.py -v3/models/entitlement_dto.py -v3/models/entitlement_ref.py -v3/models/entitlement_request_config.py -v3/models/entitlement_source.py -v3/models/entitlement_summary.py -v3/models/error_message_dto.py -v3/models/error_response_dto.py -v3/models/event.py -v3/models/event_document.py -v3/models/exception_access_criteria.py -v3/models/exception_criteria.py -v3/models/exception_criteria_access.py -v3/models/exception_criteria_criteria_list_inner.py -v3/models/execution_status.py -v3/models/expansion_item.py -v3/models/expression.py -v3/models/field_details_dto.py -v3/models/filter.py -v3/models/filter_aggregation.py -v3/models/filter_type.py -v3/models/form_details.py -v3/models/form_item_details.py -v3/models/forward_approval_dto.py -v3/models/get_active_campaigns200_response_inner.py -v3/models/get_o_auth_client_response.py -v3/models/get_personal_access_token_response.py -v3/models/grant_type.py -v3/models/identity_access.py -v3/models/identity_attribute.py -v3/models/identity_attribute_config.py -v3/models/identity_attribute_transform.py -v3/models/identity_cert_decision_summary.py -v3/models/identity_certification_dto.py -v3/models/identity_document.py -v3/models/identity_exception_report_reference.py -v3/models/identity_profile.py -v3/models/identity_profile_all_of_authoritative_source.py -v3/models/identity_profile_all_of_owner.py -v3/models/identity_profile_exported_object.py -v3/models/identity_reference.py -v3/models/identity_reference_with_name_and_email.py -v3/models/identity_summary.py -v3/models/identity_with_new_access.py -v3/models/identity_with_new_access1.py -v3/models/identity_with_new_access_access_refs_inner.py -v3/models/import_non_employee_records_in_bulk_request.py -v3/models/index.py -v3/models/inner_hit.py -v3/models/json_patch.py -v3/models/json_patch_operation.py -v3/models/json_patch_operation_value.py -v3/models/lifecycle_state.py -v3/models/list_access_profiles401_response.py -v3/models/list_access_profiles429_response.py -v3/models/locale_origin.py -v3/models/manager_correlation_mapping.py -v3/models/manual_work_item_details.py -v3/models/manual_work_item_state.py -v3/models/metric_aggregation.py -v3/models/metric_type.py -v3/models/model_schema.py -v3/models/multi_policy_request.py -v3/models/name_type.py -v3/models/nested_aggregation.py -v3/models/network_configuration.py -v3/models/non_employee_approval_decision.py -v3/models/non_employee_approval_item.py -v3/models/non_employee_approval_item_base.py -v3/models/non_employee_approval_item_detail.py -v3/models/non_employee_approval_summary.py -v3/models/non_employee_bulk_upload_job.py -v3/models/non_employee_bulk_upload_status.py -v3/models/non_employee_identity_dto_type.py -v3/models/non_employee_identity_reference_with_id.py -v3/models/non_employee_idn_user_request.py -v3/models/non_employee_record.py -v3/models/non_employee_reject_approval_decision.py -v3/models/non_employee_request.py -v3/models/non_employee_request_body.py -v3/models/non_employee_request_lite.py -v3/models/non_employee_request_summary.py -v3/models/non_employee_request_without_approval_item.py -v3/models/non_employee_schema_attribute.py -v3/models/non_employee_schema_attribute_body.py -v3/models/non_employee_schema_attribute_type.py -v3/models/non_employee_source.py -v3/models/non_employee_source_lite.py -v3/models/non_employee_source_lite_with_schema_attributes.py -v3/models/non_employee_source_request_body.py -v3/models/non_employee_source_with_cloud_external_id.py -v3/models/non_employee_source_with_ne_count.py -v3/models/object_import_result.py -v3/models/operation.py -v3/models/original_request.py -v3/models/owner.py -v3/models/owner_reference.py -v3/models/owner_reference_segments.py -v3/models/owns.py -v3/models/password_change_request.py -v3/models/password_change_response.py -v3/models/password_info.py -v3/models/password_info_account.py -v3/models/password_info_query_dto.py -v3/models/password_org_config.py -v3/models/password_status.py -v3/models/password_sync_group.py -v3/models/pending_approval.py -v3/models/pending_approval_action.py -v3/models/permission_dto.py -v3/models/pre_approval_trigger_details.py -v3/models/processing_details.py -v3/models/provisioning_config.py -v3/models/provisioning_config_managed_resource_refs_inner.py -v3/models/provisioning_config_plan_initializer_script.py -v3/models/provisioning_criteria_level1.py -v3/models/provisioning_criteria_level2.py -v3/models/provisioning_criteria_level3.py -v3/models/provisioning_criteria_operation.py -v3/models/provisioning_details.py -v3/models/provisioning_policy.py -v3/models/provisioning_policy_dto.py -v3/models/provisioning_state.py -v3/models/public_identity.py -v3/models/public_identity_attribute_config.py -v3/models/public_identity_config.py -v3/models/query.py -v3/models/query_result_filter.py -v3/models/query_type.py -v3/models/queued_check_config_details.py -v3/models/range.py -v3/models/reassign_reference.py -v3/models/reassignment.py -v3/models/reassignment_reference.py -v3/models/reassignment_trail_dto.py -v3/models/reassignment_type.py -v3/models/reference.py -v3/models/remediation_item_details.py -v3/models/remediation_items.py -v3/models/report_result_reference.py -v3/models/report_type.py -v3/models/request_on_behalf_of_config.py -v3/models/requestability.py -v3/models/requestability_for_role.py -v3/models/requestable_object.py -v3/models/requestable_object_reference.py -v3/models/requestable_object_request_status.py -v3/models/requestable_object_type.py -v3/models/requested_item_status.py -v3/models/requested_item_status_request_state.py -v3/models/review_decision.py -v3/models/review_reassign.py -v3/models/review_recommendation.py -v3/models/reviewable_access_profile.py -v3/models/reviewable_entitlement.py -v3/models/reviewable_entitlement_account.py -v3/models/reviewable_role.py -v3/models/reviewer.py -v3/models/revocability.py -v3/models/role.py -v3/models/role_assignment_source_type.py -v3/models/role_bulk_delete_request.py -v3/models/role_criteria_key.py -v3/models/role_criteria_key_type.py -v3/models/role_criteria_level1.py -v3/models/role_criteria_level2.py -v3/models/role_criteria_level3.py -v3/models/role_criteria_operation.py -v3/models/role_document.py -v3/models/role_identity.py -v3/models/role_membership_identity.py -v3/models/role_membership_selector.py -v3/models/role_membership_selector_type.py -v3/models/role_summary.py -v3/models/saved_search.py -v3/models/saved_search_detail.py -v3/models/saved_search_detail_filters.py -v3/models/saved_search_name.py -v3/models/schedule.py -v3/models/schedule1.py -v3/models/schedule1_days.py -v3/models/schedule1_hours.py -v3/models/schedule_days.py -v3/models/schedule_hours.py -v3/models/schedule_months.py -v3/models/schedule_type.py -v3/models/scheduled_search.py -v3/models/scheduled_search_all_of_owner.py -v3/models/scheduled_search_name.py -v3/models/search.py -v3/models/search_aggregation_specification.py -v3/models/search_arguments.py -v3/models/search_filter_type.py -v3/models/search_identity_reference.py -v3/models/search_schedule.py -v3/models/search_schedule_recipients_inner.py -v3/models/section_details.py -v3/models/segment.py -v3/models/selector.py -v3/models/selector_type.py -v3/models/service_desk_integration_dto.py -v3/models/service_desk_integration_dto_all_of_before_provisioning_rule.py -v3/models/service_desk_integration_dto_all_of_cluster_ref.py -v3/models/service_desk_integration_dto_all_of_owner_ref.py -v3/models/service_desk_integration_template_dto.py -v3/models/service_desk_integration_template_type.py -v3/models/set_lifecycle_state200_response.py -v3/models/set_lifecycle_state_request.py -v3/models/slim_campaign.py -v3/models/sod_exempt_criteria.py -v3/models/sod_policy.py -v3/models/sod_policy_conflicting_access_criteria.py -v3/models/sod_policy_schedule.py -v3/models/sod_violation_check.py -v3/models/sod_violation_check_result.py -v3/models/sod_violation_context.py -v3/models/sod_violation_context_check_completed.py -v3/models/sod_violation_context_conflicting_access_criteria.py -v3/models/sod_violation_context_conflicting_access_criteria_left_criteria.py -v3/models/source.py -v3/models/source_account_correlation_config.py -v3/models/source_account_correlation_rule.py -v3/models/source_before_provisioning_rule.py -v3/models/source_cluster.py -v3/models/source_feature.py -v3/models/source_health_dto.py -v3/models/source_management_workgroup.py -v3/models/source_manager_correlation_rule.py -v3/models/source_owner.py -v3/models/source_password_policies_inner.py -v3/models/source_schemas_inner.py -v3/models/source_usage.py -v3/models/source_usage_status.py -v3/models/sp_config_message.py -v3/models/sub_search_aggregation_specification.py -v3/models/tagged_object.py -v3/models/tagged_object_dto.py -v3/models/task_result_simplified.py -v3/models/text_query.py -v3/models/transform.py -v3/models/transform_definition.py -v3/models/transform_definition_attributes_value.py -v3/models/transform_read.py -v3/models/type_ahead_query.py -v3/models/typed_reference.py -v3/models/update_password_dictionary_request.py -v3/models/usage_type.py -v3/models/value.py -v3/models/violation_context.py -v3/models/violation_context_policy.py -v3/models/violation_owner_assignment_config.py -v3/models/violation_owner_assignment_config_owner_ref.py -v3/models/violation_prediction.py -v3/models/visibility_criteria.py -v3/models/work_item_state.py -v3/models/work_item_type.py -v3/models/work_items.py -v3/models/work_items_count.py -v3/models/work_items_summary.py -v3/rest.py -v3/test/__init__.py -v3_README.md +cc/__init__.py +cc/api/__init__.py +cc/api/accounts_api.py +cc/api/applications_api.py +cc/api/connectors_api.py +cc/api/sources_accounts_api.py +cc/api/sources_aggregation_api.py +cc/api/system_api.py +cc/api/user_api.py +cc/api_client.py +cc/api_response.py +cc/configuration.py +cc/docs/AccountsApi.md +cc/docs/ApplicationsApi.md +cc/docs/ConnectorsApi.md +cc/docs/CreateApplicationRequest.md +cc/docs/CreateConnectorRequest.md +cc/docs/GetIdentity200Response.md +cc/docs/GetIdentity200ResponseAuth.md +cc/docs/GetIdentity200ResponseOrg.md +cc/docs/ImportConnectorConfigRequest.md +cc/docs/ListAccounts200ResponseInner.md +cc/docs/ListAccounts200ResponseInnerPasswordChangeResult.md +cc/docs/ListApplications200ResponseInner.md +cc/docs/ListApplications200ResponseInnerAccountServicePoliciesInner.md +cc/docs/ListApplications200ResponseInnerAppProfilesInner.md +cc/docs/ListApplications200ResponseInnerHealth.md +cc/docs/ListApplications200ResponseInnerOwner.md +cc/docs/ListConnectors200Response.md +cc/docs/ListConnectors200ResponseItemsInner.md +cc/docs/LoadAccountsRequest.md +cc/docs/RefreshIdentitiesRequest.md +cc/docs/RefreshIdentitiesRequestRefreshArgs.md +cc/docs/SourcesAccountsApi.md +cc/docs/SourcesAggregationApi.md +cc/docs/SystemApi.md +cc/docs/UpdateApplicationRequest.md +cc/docs/UpdateUserPermissionsRequest.md +cc/docs/UserApi.md +cc/exceptions.py +cc/models/__init__.py +cc/models/create_application_request.py +cc/models/create_connector_request.py +cc/models/get_identity200_response.py +cc/models/get_identity200_response_auth.py +cc/models/get_identity200_response_org.py +cc/models/import_connector_config_request.py +cc/models/list_accounts200_response_inner.py +cc/models/list_accounts200_response_inner_password_change_result.py +cc/models/list_applications200_response_inner.py +cc/models/list_applications200_response_inner_account_service_policies_inner.py +cc/models/list_applications200_response_inner_app_profiles_inner.py +cc/models/list_applications200_response_inner_health.py +cc/models/list_applications200_response_inner_owner.py +cc/models/list_connectors200_response.py +cc/models/list_connectors200_response_items_inner.py +cc/models/load_accounts_request.py +cc/models/refresh_identities_request.py +cc/models/refresh_identities_request_refresh_args.py +cc/models/update_application_request.py +cc/models/update_user_permissions_request.py +cc/rest.py +cc/test/__init__.py +cc_README.md diff --git a/sailpoint/cc/__init__.py b/sailpoint/cc/__init__.py new file mode 100644 index 000000000..e8e8ace4a --- /dev/null +++ b/sailpoint/cc/__init__.py @@ -0,0 +1,58 @@ +# coding: utf-8 + +# flake8: noqa + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +__version__ = "1.0.0" + +# import apis into sdk package +from cc.api.accounts_api import AccountsApi +from cc.api.applications_api import ApplicationsApi +from cc.api.connectors_api import ConnectorsApi +from cc.api.sources_accounts_api import SourcesAccountsApi +from cc.api.sources_aggregation_api import SourcesAggregationApi +from cc.api.system_api import SystemApi +from cc.api.user_api import UserApi + +# import ApiClient +from cc.api_response import ApiResponse +from cc.api_client import ApiClient +from cc.configuration import Configuration +from cc.exceptions import OpenApiException +from cc.exceptions import ApiTypeError +from cc.exceptions import ApiValueError +from cc.exceptions import ApiKeyError +from cc.exceptions import ApiAttributeError +from cc.exceptions import ApiException + +# import models into sdk package +from cc.models.create_application_request import CreateApplicationRequest +from cc.models.create_connector_request import CreateConnectorRequest +from cc.models.get_identity200_response import GetIdentity200Response +from cc.models.get_identity200_response_auth import GetIdentity200ResponseAuth +from cc.models.get_identity200_response_org import GetIdentity200ResponseOrg +from cc.models.import_connector_config_request import ImportConnectorConfigRequest +from cc.models.list_accounts200_response_inner import ListAccounts200ResponseInner +from cc.models.list_accounts200_response_inner_password_change_result import ListAccounts200ResponseInnerPasswordChangeResult +from cc.models.list_applications200_response_inner import ListApplications200ResponseInner +from cc.models.list_applications200_response_inner_account_service_policies_inner import ListApplications200ResponseInnerAccountServicePoliciesInner +from cc.models.list_applications200_response_inner_app_profiles_inner import ListApplications200ResponseInnerAppProfilesInner +from cc.models.list_applications200_response_inner_health import ListApplications200ResponseInnerHealth +from cc.models.list_applications200_response_inner_owner import ListApplications200ResponseInnerOwner +from cc.models.list_connectors200_response import ListConnectors200Response +from cc.models.list_connectors200_response_items_inner import ListConnectors200ResponseItemsInner +from cc.models.load_accounts_request import LoadAccountsRequest +from cc.models.refresh_identities_request import RefreshIdentitiesRequest +from cc.models.refresh_identities_request_refresh_args import RefreshIdentitiesRequestRefreshArgs +from cc.models.update_application_request import UpdateApplicationRequest +from cc.models.update_user_permissions_request import UpdateUserPermissionsRequest diff --git a/sailpoint/cc/api/__init__.py b/sailpoint/cc/api/__init__.py new file mode 100644 index 000000000..0d192d761 --- /dev/null +++ b/sailpoint/cc/api/__init__.py @@ -0,0 +1,10 @@ +# flake8: noqa + +# import apis into api package +from cc.api.accounts_api import AccountsApi +from cc.api.applications_api import ApplicationsApi +from cc.api.connectors_api import ConnectorsApi +from cc.api.sources_accounts_api import SourcesAccountsApi +from cc.api.sources_aggregation_api import SourcesAggregationApi +from cc.api.system_api import SystemApi +from cc.api.user_api import UserApi diff --git a/sailpoint/cc/api/accounts_api.py b/sailpoint/cc/api/accounts_api.py new file mode 100644 index 000000000..53d4dfd98 --- /dev/null +++ b/sailpoint/cc/api/accounts_api.py @@ -0,0 +1,294 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from pydantic import StrictStr + +from typing import List + +from cc.models.list_accounts200_response_inner import ListAccounts200ResponseInner + +from cc.api_client import ApiClient +from cc.api_response import ApiResponse +from cc.exceptions import ( # noqa: F401 + ApiTypeError, ApiValueError) + + +class AccountsApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def list_accounts( + self, + **kwargs) -> List[ListAccounts200ResponseInner]: # noqa: E501 + """List Accounts # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_accounts(async_req=True) + >>> result = thread.get() + + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: List[ListAccounts200ResponseInner] + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the list_accounts_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.list_accounts_with_http_info(**kwargs) # noqa: E501 + + @validate_arguments + def list_accounts_with_http_info(self, + **kwargs) -> ApiResponse: # noqa: E501 + """List Accounts # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_accounts_with_http_info(async_req=True) + >>> result = thread.get() + + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(List[ListAccounts200ResponseInner], status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method list_accounts" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = { + '200': "List[ListAccounts200ResponseInner]", + } + + return self.api_client.call_api( + '/cc/api/account/list', + 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def remove_account(self, id: StrictStr, **kwargs) -> None: # noqa: E501 + """Remove Account # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.remove_account(id, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the remove_account_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.remove_account_with_http_info(id, **kwargs) # noqa: E501 + + @validate_arguments + def remove_account_with_http_info(self, id: StrictStr, + **kwargs) -> ApiResponse: # noqa: E501 + """Remove Account # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.remove_account_with_http_info(id, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = ['id'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method remove_account" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id']: + _path_params['id'] = _params['id'] + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/cc/api/account/remove/{id}', + 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/sailpoint/cc/api/applications_api.py b/sailpoint/cc/api/applications_api.py new file mode 100644 index 000000000..cc3e34c06 --- /dev/null +++ b/sailpoint/cc/api/applications_api.py @@ -0,0 +1,851 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from pydantic import StrictStr + +from typing import List, Optional + +from cc.models.create_application_request import CreateApplicationRequest +from cc.models.list_applications200_response_inner import ListApplications200ResponseInner +from cc.models.update_application_request import UpdateApplicationRequest + +from cc.api_client import ApiClient +from cc.api_response import ApiResponse +from cc.exceptions import ( # noqa: F401 + ApiTypeError, ApiValueError) + + +class ApplicationsApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def create_application(self, + create_application_request: Optional[ + CreateApplicationRequest] = None, + **kwargs) -> None: # noqa: E501 + """Create Application # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_application(create_application_request, async_req=True) + >>> result = thread.get() + + :param create_application_request: + :type create_application_request: CreateApplicationRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the create_application_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.create_application_with_http_info( + create_application_request, **kwargs) # noqa: E501 + + @validate_arguments + def create_application_with_http_info( + self, + create_application_request: Optional[ + CreateApplicationRequest] = None, + **kwargs) -> ApiResponse: # noqa: E501 + """Create Application # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_application_with_http_info(create_application_request, async_req=True) + >>> result = thread.get() + + :param create_application_request: + :type create_application_request: CreateApplicationRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = ['create_application_request'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method create_application" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['create_application_request'] is not None: + _body_params = _params['create_application_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get( + '_content_type', + self.api_client.select_header_content_type(['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/cc/api/app/create', + 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_application(self, id: StrictStr, + **kwargs) -> None: # noqa: E501 + """Delete Application # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_application(id, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the delete_application_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.delete_application_with_http_info(id, + **kwargs) # noqa: E501 + + @validate_arguments + def delete_application_with_http_info( + self, id: StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Delete Application # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_application_with_http_info(id, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = ['id'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method delete_application" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id']: + _path_params['id'] = _params['id'] + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/cc/api/app/delete/{id}', + 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_application( + self, id: StrictStr, + **kwargs) -> ListApplications200ResponseInner: # noqa: E501 + """Get Single Application # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_application(id, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: ListApplications200ResponseInner + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_application_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_application_with_http_info(id, **kwargs) # noqa: E501 + + @validate_arguments + def get_application_with_http_info(self, id: StrictStr, + **kwargs) -> ApiResponse: # noqa: E501 + """Get Single Application # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_application_with_http_info(id, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(ListApplications200ResponseInner, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = ['id'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method get_application" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id']: + _path_params['id'] = _params['id'] + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = { + '200': "ListApplications200ResponseInner", + } + + return self.api_client.call_api( + '/cc/api/app/get/{id}', + 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_application_access_profiles(self, id: StrictStr, + **kwargs) -> None: # noqa: E501 + """Get Access Profiles for Application # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_application_access_profiles(id, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_application_access_profiles_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_application_access_profiles_with_http_info( + id, **kwargs) # noqa: E501 + + @validate_arguments + def get_application_access_profiles_with_http_info( + self, id: StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Get Access Profiles for Application # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_application_access_profiles_with_http_info(id, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = ['id'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError( + "Got an unexpected keyword argument '%s'" + " to method get_application_access_profiles" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id']: + _path_params['id'] = _params['id'] + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = [] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/cc/api/app/getAccessProfiles/{id}', + 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def list_applications( + self, + **kwargs) -> List[ListApplications200ResponseInner]: # noqa: E501 + """List Applications # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_applications(async_req=True) + >>> result = thread.get() + + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: List[ListApplications200ResponseInner] + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the list_applications_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.list_applications_with_http_info(**kwargs) # noqa: E501 + + @validate_arguments + def list_applications_with_http_info( + self, **kwargs) -> ApiResponse: # noqa: E501 + """List Applications # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_applications_with_http_info(async_req=True) + >>> result = thread.get() + + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(List[ListApplications200ResponseInner], status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method list_applications" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = { + '200': "List[ListApplications200ResponseInner]", + } + + return self.api_client.call_api( + '/cc/api/app/list', + 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def update_application(self, + id: StrictStr, + update_application_request: Optional[ + UpdateApplicationRequest] = None, + **kwargs) -> None: # noqa: E501 + """Update Application # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_application(id, update_application_request, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param update_application_request: + :type update_application_request: UpdateApplicationRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the update_application_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.update_application_with_http_info( + id, update_application_request, **kwargs) # noqa: E501 + + @validate_arguments + def update_application_with_http_info( + self, + id: StrictStr, + update_application_request: Optional[ + UpdateApplicationRequest] = None, + **kwargs) -> ApiResponse: # noqa: E501 + """Update Application # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_application_with_http_info(id, update_application_request, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param update_application_request: + :type update_application_request: UpdateApplicationRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = ['id', 'update_application_request'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method update_application" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id']: + _path_params['id'] = _params['id'] + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['update_application_request'] is not None: + _body_params = _params['update_application_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get( + '_content_type', + self.api_client.select_header_content_type(['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/cc/api/app/update/{id}', + 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/sailpoint/cc/api/connectors_api.py b/sailpoint/cc/api/connectors_api.py new file mode 100644 index 000000000..9f43fccc9 --- /dev/null +++ b/sailpoint/cc/api/connectors_api.py @@ -0,0 +1,776 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from typing_extensions import Annotated +from pydantic import Field, StrictBool, StrictBytes, StrictStr + +from typing import Optional, Union + +from cc.models.list_connectors200_response import ListConnectors200Response + +from cc.api_client import ApiClient +from cc.api_response import ApiResponse +from cc.exceptions import ( # noqa: F401 + ApiTypeError, ApiValueError) + + +class ConnectorsApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def create_connector(self, + content_type: Optional[StrictStr] = None, + name: Optional[StrictStr] = None, + description: Optional[StrictStr] = None, + class_name: Optional[StrictStr] = None, + direct_connect: Optional[StrictBool] = None, + status: Optional[StrictStr] = None, + **kwargs) -> None: # noqa: E501 + """Create Connector # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_connector(content_type, name, description, class_name, direct_connect, status, async_req=True) + >>> result = thread.get() + + :param content_type: + :type content_type: str + :param name: + :type name: str + :param description: + :type description: str + :param class_name: + :type class_name: str + :param direct_connect: + :type direct_connect: bool + :param status: + :type status: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the create_connector_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.create_connector_with_http_info(content_type, name, + description, class_name, + direct_connect, status, + **kwargs) # noqa: E501 + + @validate_arguments + def create_connector_with_http_info( + self, + content_type: Optional[StrictStr] = None, + name: Optional[StrictStr] = None, + description: Optional[StrictStr] = None, + class_name: Optional[StrictStr] = None, + direct_connect: Optional[StrictBool] = None, + status: Optional[StrictStr] = None, + **kwargs) -> ApiResponse: # noqa: E501 + """Create Connector # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_connector_with_http_info(content_type, name, description, class_name, direct_connect, status, async_req=True) + >>> result = thread.get() + + :param content_type: + :type content_type: str + :param name: + :type name: str + :param description: + :type description: str + :param class_name: + :type class_name: str + :param direct_connect: + :type direct_connect: bool + :param status: + :type status: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = [ + 'content_type', 'name', 'description', 'class_name', + 'direct_connect', 'status' + ] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method create_connector" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + if _params['content_type']: + _header_params['Content-Type'] = _params['content_type'] + + # process the form parameters + _form_params = [] + _files = {} + if _params['name']: + _form_params.append(('name', _params['name'])) + + if _params['description']: + _form_params.append(('description', _params['description'])) + + if _params['class_name']: + _form_params.append(('className', _params['class_name'])) + + if _params['direct_connect']: + _form_params.append(('directConnect', _params['direct_connect'])) + + if _params['status']: + _form_params.append(('status', _params['status'])) + + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get( + '_content_type', + self.api_client.select_header_content_type( + ['application/x-www-form-urlencoded'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/cc/api/connector/create', + 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_connector(self, id: StrictStr, **kwargs) -> None: # noqa: E501 + """Delete Connector # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_connector(id, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the delete_connector_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.delete_connector_with_http_info(id, **kwargs) # noqa: E501 + + @validate_arguments + def delete_connector_with_http_info(self, id: StrictStr, + **kwargs) -> ApiResponse: # noqa: E501 + """Delete Connector # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_connector_with_http_info(id, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = ['id'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method delete_connector" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id']: + _path_params['id'] = _params['id'] + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/cc/api/connector/delete/{id}', + 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def export_connector_config(self, id: StrictStr, + **kwargs) -> None: # noqa: E501 + """Export Connector Config # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.export_connector_config(id, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the export_connector_config_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.export_connector_config_with_http_info( + id, **kwargs) # noqa: E501 + + @validate_arguments + def export_connector_config_with_http_info( + self, id: StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Export Connector Config # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.export_connector_config_with_http_info(id, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = ['id'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method export_connector_config" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id']: + _path_params['id'] = _params['id'] + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/cc/api/connector/export/{id}', + 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def import_connector_config( + self, + id: StrictStr, + file: + Annotated[ + Optional[Union[StrictBytes, StrictStr]], + Field( + description= + "This is the connector config zip bundle which gets uploaded." + )] = None, + **kwargs) -> None: # noqa: E501 + """Import Connector Config # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.import_connector_config(id, file, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param file: This is the connector config zip bundle which gets uploaded. + :type file: bytearray + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the import_connector_config_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.import_connector_config_with_http_info( + id, file, **kwargs) # noqa: E501 + + @validate_arguments + def import_connector_config_with_http_info( + self, + id: StrictStr, + file: + Annotated[ + Optional[Union[StrictBytes, StrictStr]], + Field( + description= + "This is the connector config zip bundle which gets uploaded." + )] = None, + **kwargs) -> ApiResponse: # noqa: E501 + """Import Connector Config # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.import_connector_config_with_http_info(id, file, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param file: This is the connector config zip bundle which gets uploaded. + :type file: bytearray + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = ['id', 'file'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method import_connector_config" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id']: + _path_params['id'] = _params['id'] + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + if _params['file']: + _files['file'] = _params['file'] + + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get( + '_content_type', + self.api_client.select_header_content_type(['multipart/form-data' + ])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/cc/api/connector/import/{id}', + 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def list_connectors(self, + **kwargs) -> ListConnectors200Response: # noqa: E501 + """List Connectors # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_connectors(async_req=True) + >>> result = thread.get() + + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: ListConnectors200Response + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the list_connectors_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.list_connectors_with_http_info(**kwargs) # noqa: E501 + + @validate_arguments + def list_connectors_with_http_info(self, + **kwargs) -> ApiResponse: # noqa: E501 + """List Connectors # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_connectors_with_http_info(async_req=True) + >>> result = thread.get() + + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(ListConnectors200Response, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method list_connectors" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = { + '200': "ListConnectors200Response", + } + + return self.api_client.call_api( + '/cc/api/connector/list', + 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/sailpoint/cc/api/sources_accounts_api.py b/sailpoint/cc/api/sources_accounts_api.py new file mode 100644 index 000000000..7bac3b830 --- /dev/null +++ b/sailpoint/cc/api/sources_accounts_api.py @@ -0,0 +1,169 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from pydantic import StrictStr + +from cc.api_client import ApiClient +from cc.api_response import ApiResponse +from cc.exceptions import ( # noqa: F401 + ApiTypeError, ApiValueError) + + +class SourcesAccountsApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def export_account_feed(self, id: StrictStr, + **kwargs) -> None: # noqa: E501 + """Export Account Feed # noqa: E501 + + Exports a CSV of the accounts for a particular source. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.export_account_feed(id, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the export_account_feed_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.export_account_feed_with_http_info(id, + **kwargs) # noqa: E501 + + @validate_arguments + def export_account_feed_with_http_info( + self, id: StrictStr, **kwargs) -> ApiResponse: # noqa: E501 + """Export Account Feed # noqa: E501 + + Exports a CSV of the accounts for a particular source. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.export_account_feed_with_http_info(id, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = ['id'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method export_account_feed" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id']: + _path_params['id'] = _params['id'] + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/cc/api/source/exportAccountFeed/{id}', + 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/sailpoint/cc/api/sources_aggregation_api.py b/sailpoint/cc/api/sources_aggregation_api.py new file mode 100644 index 000000000..0d7589aad --- /dev/null +++ b/sailpoint/cc/api/sources_aggregation_api.py @@ -0,0 +1,211 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from pydantic import StrictBool, StrictBytes, StrictStr + +from typing import Optional, Union + +from cc.api_client import ApiClient +from cc.api_response import ApiResponse +from cc.exceptions import ( # noqa: F401 + ApiTypeError, ApiValueError) + + +class SourcesAggregationApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def load_accounts(self, + id: StrictStr, + content_type: Optional[StrictStr] = None, + disable_optimization: Optional[StrictBool] = None, + file: Optional[Union[StrictBytes, StrictStr]] = None, + **kwargs) -> None: # noqa: E501 + """Account Aggregation (File) # noqa: E501 + + Aggregates a delimited file for the given source. This only works for file-based sources. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.load_accounts(id, content_type, disable_optimization, file, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param content_type: + :type content_type: str + :param disable_optimization: + :type disable_optimization: bool + :param file: + :type file: bytearray + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the load_accounts_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.load_accounts_with_http_info(id, content_type, + disable_optimization, file, + **kwargs) # noqa: E501 + + @validate_arguments + def load_accounts_with_http_info( + self, + id: StrictStr, + content_type: Optional[StrictStr] = None, + disable_optimization: Optional[StrictBool] = None, + file: Optional[Union[StrictBytes, StrictStr]] = None, + **kwargs) -> ApiResponse: # noqa: E501 + """Account Aggregation (File) # noqa: E501 + + Aggregates a delimited file for the given source. This only works for file-based sources. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.load_accounts_with_http_info(id, content_type, disable_optimization, file, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param content_type: + :type content_type: str + :param disable_optimization: + :type disable_optimization: bool + :param file: + :type file: bytearray + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = ['id', 'content_type', 'disable_optimization', 'file'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method load_accounts" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id']: + _path_params['id'] = _params['id'] + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + if _params['content_type']: + _header_params['Content-Type'] = _params['content_type'] + + # process the form parameters + _form_params = [] + _files = {} + if _params['disable_optimization']: + _form_params.append( + ('disableOptimization', _params['disable_optimization'])) + + if _params['file']: + _files['file'] = _params['file'] + + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get( + '_content_type', + self.api_client.select_header_content_type(['multipart/form-data' + ])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/cc/api/source/loadAccounts/{id}', + 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/sailpoint/cc/api/system_api.py b/sailpoint/cc/api/system_api.py new file mode 100644 index 000000000..f73f321a2 --- /dev/null +++ b/sailpoint/cc/api/system_api.py @@ -0,0 +1,195 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from pydantic import StrictStr + +from typing import Optional + +from cc.models.refresh_identities_request import RefreshIdentitiesRequest + +from cc.api_client import ApiClient +from cc.api_response import ApiResponse +from cc.exceptions import ( # noqa: F401 + ApiTypeError, ApiValueError) + + +class SystemApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def refresh_identities(self, + content_type: Optional[StrictStr] = None, + refresh_identities_request: Optional[ + RefreshIdentitiesRequest] = None, + **kwargs) -> None: # noqa: E501 + """Refresh Identities # noqa: E501 + + This kicks off an identity refresh for a specified set of identity attributes. This can be a long running process. IdentityNow has pre-scheduled versions of this task at set intervals and events already, so only run this when directed by SailPoint. _Note: If the identities specified by the filter do not exist, a full identity refresh will be run. Use with caution._ Refresh Arguments: | Key | Description | |-----------------------|----------------------------------------------------| | correlateEntitlements | Analyzes entitlements, access profiles, and roles. | | promoteAttributes | Calculates identity attributes. | | refreshManagerStatus | Calculates manager correlation and manager status. | | synchronizeAttributes | Performs attribute sync provisioning. | | pruneIdentities | Removes any identities which don't have accounts. | | provision | Provisions any assigned roles or access profiles. | # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.refresh_identities(content_type, refresh_identities_request, async_req=True) + >>> result = thread.get() + + :param content_type: + :type content_type: str + :param refresh_identities_request: + :type refresh_identities_request: RefreshIdentitiesRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the refresh_identities_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.refresh_identities_with_http_info( + content_type, refresh_identities_request, **kwargs) # noqa: E501 + + @validate_arguments + def refresh_identities_with_http_info( + self, + content_type: Optional[StrictStr] = None, + refresh_identities_request: Optional[ + RefreshIdentitiesRequest] = None, + **kwargs) -> ApiResponse: # noqa: E501 + """Refresh Identities # noqa: E501 + + This kicks off an identity refresh for a specified set of identity attributes. This can be a long running process. IdentityNow has pre-scheduled versions of this task at set intervals and events already, so only run this when directed by SailPoint. _Note: If the identities specified by the filter do not exist, a full identity refresh will be run. Use with caution._ Refresh Arguments: | Key | Description | |-----------------------|----------------------------------------------------| | correlateEntitlements | Analyzes entitlements, access profiles, and roles. | | promoteAttributes | Calculates identity attributes. | | refreshManagerStatus | Calculates manager correlation and manager status. | | synchronizeAttributes | Performs attribute sync provisioning. | | pruneIdentities | Removes any identities which don't have accounts. | | provision | Provisions any assigned roles or access profiles. | # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.refresh_identities_with_http_info(content_type, refresh_identities_request, async_req=True) + >>> result = thread.get() + + :param content_type: + :type content_type: str + :param refresh_identities_request: + :type refresh_identities_request: RefreshIdentitiesRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = ['content_type', 'refresh_identities_request'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method refresh_identities" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + if _params['content_type']: + _header_params['Content-Type'] = _params['content_type'] + + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['refresh_identities_request'] is not None: + _body_params = _params['refresh_identities_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get( + '_content_type', + self.api_client.select_header_content_type(['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/cc/api/system/refreshIdentities', + 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/sailpoint/cc/api/user_api.py b/sailpoint/cc/api/user_api.py new file mode 100644 index 000000000..368e7f422 --- /dev/null +++ b/sailpoint/cc/api/user_api.py @@ -0,0 +1,315 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from pydantic import StrictStr + +from typing import Optional + +from cc.models.get_identity200_response import GetIdentity200Response +from cc.models.update_user_permissions_request import UpdateUserPermissionsRequest + +from cc.api_client import ApiClient +from cc.api_response import ApiResponse +from cc.exceptions import ( # noqa: F401 + ApiTypeError, ApiValueError) + + +class UserApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def get_identity(self, id: StrictStr, + **kwargs) -> GetIdentity200Response: # noqa: E501 + """Get Single Identity # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_identity(id, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: GetIdentity200Response + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_identity_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_identity_with_http_info(id, **kwargs) # noqa: E501 + + @validate_arguments + def get_identity_with_http_info(self, id: StrictStr, + **kwargs) -> ApiResponse: # noqa: E501 + """Get Single Identity # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_identity_with_http_info(id, async_req=True) + >>> result = thread.get() + + :param id: (required) + :type id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(GetIdentity200Response, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = ['id'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method get_identity" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['id']: + _path_params['id'] = _params['id'] + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = { + '200': "GetIdentity200Response", + } + + return self.api_client.call_api( + '/cc/api/user/get/{id}', + 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def update_user_permissions(self, + update_user_permissions_request: Optional[ + UpdateUserPermissionsRequest] = None, + **kwargs) -> None: # noqa: E501 + """Update User Permissions # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_user_permissions(update_user_permissions_request, async_req=True) + >>> result = thread.get() + + :param update_user_permissions_request: + :type update_user_permissions_request: UpdateUserPermissionsRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the update_user_permissions_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.update_user_permissions_with_http_info( + update_user_permissions_request, **kwargs) # noqa: E501 + + @validate_arguments + def update_user_permissions_with_http_info( + self, + update_user_permissions_request: Optional[ + UpdateUserPermissionsRequest] = None, + **kwargs) -> ApiResponse: # noqa: E501 + """Update User Permissions # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_user_permissions_with_http_info(update_user_permissions_request, async_req=True) + >>> result = thread.get() + + :param update_user_permissions_request: + :type update_user_permissions_request: UpdateUserPermissionsRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = ['update_user_permissions_request'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method update_user_permissions" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['update_user_permissions_request'] is not None: + _body_params = _params['update_user_permissions_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get( + '_content_type', + self.api_client.select_header_content_type(['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/cc/api/user/updatePermissions', + 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/sailpoint/cc/api_client.py b/sailpoint/cc/api_client.py new file mode 100644 index 000000000..047e5a3e2 --- /dev/null +++ b/sailpoint/cc/api_client.py @@ -0,0 +1,800 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import atexit +import datetime +from dateutil.parser import parse +import json +import mimetypes +from multiprocessing.pool import ThreadPool +import os +import re +import tempfile + +from urllib.parse import quote + +from sailpoint.configuration import Configuration +from cc.api_response import ApiResponse +import cc.models +from cc import rest +from cc.exceptions import ApiValueError, ApiException + + +class ApiClient: + """Generic API client for OpenAPI client library builds. + + OpenAPI generic API client. This client handles the client- + server communication, and is invariant across implementations. Specifics of + the methods and models for each application are generated from the OpenAPI + templates. + + :param configuration: .Configuration object for this client + :param header_name: a header to pass when making calls to the API. + :param header_value: a header value to pass when making calls to + the API. + :param cookie: a cookie to include in the header when making calls + to the API + :param pool_threads: The number of threads to use for async requests + to the API. More threads means more concurrent API requests. + """ + + PRIMITIVE_TYPES = (float, bool, bytes, str, int) + NATIVE_TYPES_MAPPING = { + 'int': int, + 'long': int, # TODO remove as only py3 is supported? + 'float': float, + 'str': str, + 'bool': bool, + 'date': datetime.date, + 'datetime': datetime.datetime, + 'object': object, + } + _pool = None + + def __init__(self, + configuration=None, + header_name=None, + header_value=None, + cookie=None, + pool_threads=1) -> None: + # use default configuration if none is provided + if configuration is None: + configuration = Configuration.get_default() + self.configuration = configuration + self.pool_threads = pool_threads + + self.rest_client = rest.RESTClientObject(configuration) + self.default_headers = {} + if header_name is not None: + self.default_headers[header_name] = header_value + self.cookie = cookie + # Set default User-Agent. + self.user_agent = 'OpenAPI-Generator/1.0.0/python' + self.client_side_validation = configuration.client_side_validation + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.close() + + def close(self): + if self._pool: + self._pool.close() + self._pool.join() + self._pool = None + if hasattr(atexit, 'unregister'): + atexit.unregister(self.close) + + @property + def pool(self): + """Create thread pool on first request + avoids instantiating unused threadpool for blocking clients. + """ + if self._pool is None: + atexit.register(self.close) + self._pool = ThreadPool(self.pool_threads) + return self._pool + + @property + def user_agent(self): + """User agent for this API client""" + return self.default_headers['User-Agent'] + + @user_agent.setter + def user_agent(self, value): + self.default_headers['User-Agent'] = value + + def set_default_header(self, header_name, header_value): + self.default_headers[header_name] = header_value + + _default = None + + @classmethod + def get_default(cls): + """Return new instance of ApiClient. + + This method returns newly created, based on default constructor, + object of ApiClient class or returns a copy of default + ApiClient. + + :return: The ApiClient object. + """ + if cls._default is None: + cls._default = ApiClient() + return cls._default + + @classmethod + def set_default(cls, default): + """Set default instance of ApiClient. + + It stores default ApiClient. + + :param default: object of ApiClient. + """ + cls._default = default + + def __call_api(self, + resource_path, + method, + path_params=None, + query_params=None, + header_params=None, + body=None, + post_params=None, + files=None, + response_types_map=None, + auth_settings=None, + _return_http_data_only=None, + collection_formats=None, + _preload_content=True, + _request_timeout=None, + _host=None, + _request_auth=None): + + config = self.configuration + + # header parameters + header_params = header_params or {} + header_params.update(self.default_headers) + if self.cookie: + header_params['Cookie'] = self.cookie + if header_params: + header_params = self.sanitize_for_serialization(header_params) + header_params = dict( + self.parameters_to_tuples(header_params, collection_formats)) + # Add Authentication header to request + header_params['Authorization'] = self.configuration.access_token + + # path parameters + if path_params: + path_params = self.sanitize_for_serialization(path_params) + path_params = self.parameters_to_tuples(path_params, + collection_formats) + for k, v in path_params: + # specified safe chars, encode everything + resource_path = resource_path.replace( + '{%s}' % k, + quote(str(v), safe=config.safe_chars_for_path_param)) + + # post parameters + if post_params or files: + post_params = post_params if post_params else [] + post_params = self.sanitize_for_serialization(post_params) + post_params = self.parameters_to_tuples(post_params, + collection_formats) + post_params.extend(self.files_parameters(files)) + + # auth setting + self.update_params_for_auth(header_params, + query_params, + auth_settings, + resource_path, + method, + body, + request_auth=_request_auth) + + # body + if body: + body = self.sanitize_for_serialization(body) + + # request url + if _host is None: + url = self.configuration.base_url + '/' + resource_path + else: + # use server/host defined in path or operation instead + url = _host + resource_path + + # query parameters + if query_params: + query_params = self.sanitize_for_serialization(query_params) + url_query = self.parameters_to_url_query(query_params, + collection_formats) + url += "?" + url_query + + try: + # perform request and return response + response_data = self.request(method, + url, + query_params=query_params, + headers=header_params, + post_params=post_params, + body=body, + _preload_content=_preload_content, + _request_timeout=_request_timeout) + except ApiException as e: + if e.body: + e.body = e.body.decode('utf-8') + raise e + + self.last_response = response_data + + return_data = None # assuming derialization is not needed + # data needs deserialization or returns HTTP data (deserialized) only + if _preload_content or _return_http_data_only: + response_type = response_types_map.get(str(response_data.status), + None) + if not response_type and isinstance( + response_data.status, + int) and 100 <= response_data.status <= 599: + # if not found, look for '1XX', '2XX', etc. + response_type = response_types_map.get( + str(response_data.status)[0] + "XX", None) + + if response_type == "bytearray": + response_data.data = response_data.data + else: + match = None + content_type = response_data.getheader('content-type') + if content_type is not None: + match = re.search(r"charset=([a-zA-Z\-\d]+)[\s;]?", + content_type) + encoding = match.group(1) if match else "utf-8" + response_data.data = response_data.data.decode(encoding) + + # deserialize response data + if response_type == "bytearray": + return_data = response_data.data + elif response_type: + return_data = self.deserialize(response_data, response_type) + else: + return_data = None + + if _return_http_data_only: + return return_data + else: + return ApiResponse(status_code=response_data.status, + data=return_data, + headers=response_data.getheaders(), + raw_data=response_data.data) + + def sanitize_for_serialization(self, obj): + """Builds a JSON POST object. + + If obj is None, return None. + If obj is str, int, long, float, bool, return directly. + If obj is datetime.datetime, datetime.date + convert to string in iso8601 format. + If obj is list, sanitize each element in the list. + If obj is dict, return the dict. + If obj is OpenAPI model, return the properties dict. + + :param obj: The data to serialize. + :return: The serialized form of data. + """ + if obj is None: + return None + elif isinstance(obj, self.PRIMITIVE_TYPES): + return obj + elif isinstance(obj, list): + return [ + self.sanitize_for_serialization(sub_obj) for sub_obj in obj + ] + elif isinstance(obj, tuple): + return tuple( + self.sanitize_for_serialization(sub_obj) for sub_obj in obj) + elif isinstance(obj, (datetime.datetime, datetime.date)): + return obj.isoformat() + + if isinstance(obj, dict): + obj_dict = obj + else: + # Convert model obj to dict except + # attributes `openapi_types`, `attribute_map` + # and attributes which value is not None. + # Convert attribute name to json key in + # model definition for request. + obj_dict = obj.to_dict() + + return { + key: self.sanitize_for_serialization(val) + for key, val in obj_dict.items() + } + + def deserialize(self, response, response_type): + """Deserializes response into an object. + + :param response: RESTResponse object to be deserialized. + :param response_type: class literal for + deserialized object, or string of class name. + + :return: deserialized object. + """ + # handle file downloading + # save response body into a tmp file and return the instance + if response_type == "file": + return self.__deserialize_file(response) + + # fetch data from response object + try: + data = json.loads(response.data) + except ValueError: + data = response.data + + return self.__deserialize(data, response_type) + + def __deserialize(self, data, klass): + """Deserializes dict, list, str into an object. + + :param data: dict, list or str. + :param klass: class literal, or string of class name. + + :return: object. + """ + if data is None: + return None + + if isinstance(klass, str): + if klass.startswith('List['): + sub_kls = re.match(r'List\[(.*)]', klass).group(1) + return [ + self.__deserialize(sub_data, sub_kls) for sub_data in data + ] + + if klass.startswith('Dict['): + sub_kls = re.match(r'Dict\[([^,]*), (.*)]', klass).group(2) + return { + k: self.__deserialize(v, sub_kls) + for k, v in data.items() + } + + # convert str to class + if klass in self.NATIVE_TYPES_MAPPING: + klass = self.NATIVE_TYPES_MAPPING[klass] + else: + klass = getattr(cc.models, klass) + + if klass in self.PRIMITIVE_TYPES: + return self.__deserialize_primitive(data, klass) + elif klass == object: + return self.__deserialize_object(data) + elif klass == datetime.date: + return self.__deserialize_date(data) + elif klass == datetime.datetime: + return self.__deserialize_datetime(data) + else: + return self.__deserialize_model(data, klass) + + def call_api(self, + resource_path, + method, + path_params=None, + query_params=None, + header_params=None, + body=None, + post_params=None, + files=None, + response_types_map=None, + auth_settings=None, + async_req=None, + _return_http_data_only=None, + collection_formats=None, + _preload_content=True, + _request_timeout=None, + _host=None, + _request_auth=None): + """Makes the HTTP request (synchronous) and returns deserialized data. + + To make an async_req request, set the async_req parameter. + + :param resource_path: Path to method endpoint. + :param method: Method to call. + :param path_params: Path parameters in the url. + :param query_params: Query parameters in the url. + :param header_params: Header parameters to be + placed in the request header. + :param body: Request body. + :param post_params dict: Request post form parameters, + for `application/x-www-form-urlencoded`, `multipart/form-data`. + :param auth_settings list: Auth Settings names for the request. + :param response: Response data type. + :param files dict: key -> filename, value -> filepath, + for `multipart/form-data`. + :param async_req bool: execute request asynchronously + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :param collection_formats: dict of collection formats for path, query, + header, and post parameters. + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_token: dict, optional + :return: + If async_req parameter is True, + the request will be called asynchronously. + The method will return the request thread. + If parameter async_req is False or missing, + then the method will return the response directly. + """ + if not async_req: + return self.__call_api(resource_path, method, path_params, + query_params, header_params, body, + post_params, files, response_types_map, + auth_settings, _return_http_data_only, + collection_formats, _preload_content, + _request_timeout, _host, _request_auth) + + return self.pool.apply_async( + self.__call_api, + (resource_path, method, path_params, query_params, header_params, + body, post_params, files, response_types_map, auth_settings, + _return_http_data_only, collection_formats, _preload_content, + _request_timeout, _host, _request_auth)) + + def request(self, + method, + url, + query_params=None, + headers=None, + post_params=None, + body=None, + _preload_content=True, + _request_timeout=None): + """Makes the HTTP request using RESTClient.""" + if method == "GET": + return self.rest_client.get_request( + url, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + headers=headers) + elif method == "HEAD": + return self.rest_client.head_request( + url, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + headers=headers) + elif method == "OPTIONS": + return self.rest_client.options_request( + url, + query_params=query_params, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout) + elif method == "POST": + return self.rest_client.post_request( + url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "PUT": + return self.rest_client.put_request( + url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "PATCH": + return self.rest_client.patch_request( + url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "DELETE": + return self.rest_client.delete_request( + url, + query_params=query_params, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + else: + raise ApiValueError("http method must be `GET`, `HEAD`, `OPTIONS`," + " `POST`, `PATCH`, `PUT` or `DELETE`.") + + def parameters_to_tuples(self, params, collection_formats): + """Get parameters as list of tuples, formatting collections. + + :param params: Parameters as dict or list of two-tuples + :param dict collection_formats: Parameter collection formats + :return: Parameters as list of tuples, collections formatted + """ + new_params = [] + if collection_formats is None: + collection_formats = {} + for k, v in params.items() if isinstance( + params, dict) else params: # noqa: E501 + if k in collection_formats: + collection_format = collection_formats[k] + if collection_format == 'multi': + new_params.extend((k, value) for value in v) + else: + if collection_format == 'ssv': + delimiter = ' ' + elif collection_format == 'tsv': + delimiter = '\t' + elif collection_format == 'pipes': + delimiter = '|' + else: # csv is the default + delimiter = ',' + new_params.append( + (k, delimiter.join(str(value) for value in v))) + else: + new_params.append((k, v)) + return new_params + + def parameters_to_url_query(self, params, collection_formats): + """Get parameters as list of tuples, formatting collections. + + :param params: Parameters as dict or list of two-tuples + :param dict collection_formats: Parameter collection formats + :return: URL query string (e.g. a=Hello%20World&b=123) + """ + new_params = [] + if collection_formats is None: + collection_formats = {} + for k, v in params.items() if isinstance( + params, dict) else params: # noqa: E501 + if isinstance(v, (int, float)): + v = str(v) + if isinstance(v, bool): + v = str(v).lower() + if isinstance(v, dict): + v = json.dumps(v) + + if k in collection_formats: + collection_format = collection_formats[k] + if collection_format == 'multi': + new_params.extend((k, value) for value in v) + else: + if collection_format == 'ssv': + delimiter = ' ' + elif collection_format == 'tsv': + delimiter = '\t' + elif collection_format == 'pipes': + delimiter = '|' + else: # csv is the default + delimiter = ',' + new_params.append( + (k, delimiter.join(quote(str(value)) for value in v))) + else: + new_params.append((k, quote(str(v)))) + + return "&".join(["=".join(item) for item in new_params]) + + def files_parameters(self, files=None): + """Builds form parameters. + + :param files: File parameters. + :return: Form parameters with files. + """ + params = [] + + if files: + for k, v in files.items(): + if not v: + continue + file_names = v if type(v) is list else [v] + for n in file_names: + with open(n, 'rb') as f: + filename = os.path.basename(f.name) + filedata = f.read() + mimetype = (mimetypes.guess_type(filename)[0] + or 'application/octet-stream') + params.append( + tuple([k, tuple([filename, filedata, mimetype])])) + + return params + + def select_header_accept(self, accepts): + """Returns `Accept` based on an array of accepts provided. + + :param accepts: List of headers. + :return: Accept (e.g. application/json). + """ + if not accepts: + return + + for accept in accepts: + if re.search('json', accept, re.IGNORECASE): + return accept + + return accepts[0] + + def select_header_content_type(self, content_types): + """Returns `Content-Type` based on an array of content_types provided. + + :param content_types: List of content-types. + :return: Content-Type (e.g. application/json). + """ + if not content_types: + return None + + for content_type in content_types: + if re.search('json', content_type, re.IGNORECASE): + return content_type + + return content_types[0] + + def update_params_for_auth(self, + headers, + queries, + auth_settings, + resource_path, + method, + body, + request_auth=None): + """Updates header and query params based on authentication setting. + + :param headers: Header parameters dict to be updated. + :param queries: Query parameters tuple list to be updated. + :param auth_settings: Authentication setting identifiers list. + :resource_path: A string representation of the HTTP request resource path. + :method: A string representation of the HTTP request method. + :body: A object representing the body of the HTTP request. + The object type is the return value of sanitize_for_serialization(). + :param request_auth: if set, the provided settings will + override the token in the configuration. + """ + if not auth_settings: + return + + if request_auth: + self._apply_auth_params(headers, queries, resource_path, method, + body, request_auth) + return + + for auth in auth_settings: + auth_setting = self.configuration.auth_settings().get(auth) + if auth_setting: + self._apply_auth_params(headers, queries, resource_path, + method, body, auth_setting) + + def _apply_auth_params(self, headers, queries, resource_path, method, body, + auth_setting): + """Updates the request parameters based on a single auth_setting + + :param headers: Header parameters dict to be updated. + :param queries: Query parameters tuple list to be updated. + :resource_path: A string representation of the HTTP request resource path. + :method: A string representation of the HTTP request method. + :body: A object representing the body of the HTTP request. + The object type is the return value of sanitize_for_serialization(). + :param auth_setting: auth settings for the endpoint + """ + if auth_setting['in'] == 'cookie': + headers['Cookie'] = auth_setting['value'] + elif auth_setting['in'] == 'header': + if auth_setting['type'] != 'http-signature': + headers[auth_setting['key']] = auth_setting['value'] + elif auth_setting['in'] == 'query': + queries.append((auth_setting['key'], auth_setting['value'])) + else: + raise ApiValueError( + 'Authentication token must be in `query` or `header`') + + def __deserialize_file(self, response): + """Deserializes body to file + + Saves response body into a file in a temporary folder, + using the filename from the `Content-Disposition` header if provided. + + :param response: RESTResponse. + :return: file path. + """ + fd, path = tempfile.mkstemp(dir=self.configuration.temp_folder_path) + os.close(fd) + os.remove(path) + + content_disposition = response.getheader("Content-Disposition") + if content_disposition: + filename = re.search(r'filename=[\'"]?([^\'"\s]+)[\'"]?', + content_disposition).group(1) + path = os.path.join(os.path.dirname(path), filename) + + with open(path, "wb") as f: + f.write(response.data) + + return path + + def __deserialize_primitive(self, data, klass): + """Deserializes string to primitive type. + + :param data: str. + :param klass: class literal. + + :return: int, long, float, str, bool. + """ + try: + return klass(data) + except UnicodeEncodeError: + return str(data) + except TypeError: + return data + + def __deserialize_object(self, value): + """Return an original value. + + :return: object. + """ + return value + + def __deserialize_date(self, string): + """Deserializes string to date. + + :param string: str. + :return: date. + """ + try: + return parse(string).date() + except ImportError: + return string + except ValueError: + raise rest.ApiException( + status=0, + reason="Failed to parse `{0}` as date object".format(string)) + + def __deserialize_datetime(self, string): + """Deserializes string to datetime. + + The string should be in iso8601 datetime format. + + :param string: str. + :return: datetime. + """ + try: + return parse(string) + except ImportError: + return string + except ValueError: + raise rest.ApiException( + status=0, + reason=( + "Failed to parse `{0}` as datetime object".format(string))) + + def __deserialize_model(self, data, klass): + """Deserializes list or dict to model. + + :param data: dict, list. + :param klass: class literal. + :return: model object. + """ + + return klass.from_dict(data) diff --git a/sailpoint/cc/api_response.py b/sailpoint/cc/api_response.py new file mode 100644 index 000000000..56314e5a6 --- /dev/null +++ b/sailpoint/cc/api_response.py @@ -0,0 +1,31 @@ +"""API response object.""" + +from __future__ import annotations +from typing import Any, Dict, Optional +from pydantic import Field, StrictInt, StrictStr + + +class ApiResponse: + """ + API response object + """ + + status_code: Optional[StrictInt] = Field(None, + description="HTTP status code") + headers: Optional[Dict[StrictStr, + StrictStr]] = Field(None, + description="HTTP headers") + data: Optional[Any] = Field( + None, description="Deserialized data given the data type") + raw_data: Optional[Any] = Field( + None, description="Raw data (HTTP response body)") + + def __init__(self, + status_code=None, + headers=None, + data=None, + raw_data=None) -> None: + self.status_code = status_code + self.headers = headers + self.data = data + self.raw_data = raw_data diff --git a/sailpoint/cc/configuration.py b/sailpoint/cc/configuration.py new file mode 100644 index 000000000..8d2cd7a37 --- /dev/null +++ b/sailpoint/cc/configuration.py @@ -0,0 +1,470 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import copy +import logging +import multiprocessing +import sys +import urllib3 + +import http.client as httplib + +JSON_SCHEMA_VALIDATION_KEYWORDS = { + 'multipleOf', 'maximum', 'exclusiveMaximum', 'minimum', 'exclusiveMinimum', + 'maxLength', 'minLength', 'pattern', 'maxItems', 'minItems' +} + + +class Configuration: + """This class contains various settings of the API client. + + :param host: Base url. + :param api_key: Dict to store API key(s). + Each entry in the dict specifies an API key. + The dict key is the name of the security scheme in the OAS specification. + The dict value is the API key secret. + :param api_key_prefix: Dict to store API prefix (e.g. Bearer). + The dict key is the name of the security scheme in the OAS specification. + The dict value is an API key prefix when generating the auth data. + :param username: Username for HTTP basic authentication. + :param password: Password for HTTP basic authentication. + :param access_token: Access token. + :param server_index: Index to servers configuration. + :param server_variables: Mapping with string values to replace variables in + templated server configuration. The validation of enums is performed for + variables with defined enum values before. + :param server_operation_index: Mapping from operation ID to an index to server + configuration. + :param server_operation_variables: Mapping from operation ID to a mapping with + string values to replace variables in templated server configuration. + The validation of enums is performed for variables with defined enum + values before. + :param ssl_ca_cert: str - the path to a file of concatenated CA certificates + in PEM format. + + :Example: + """ + + _default = None + + def __init__( + self, + host=None, + api_key=None, + api_key_prefix=None, + username=None, + password=None, + access_token=None, + server_index=None, + server_variables=None, + server_operation_index=None, + server_operation_variables=None, + ssl_ca_cert=None, + ) -> None: + """Constructor + """ + self._base_path = "https://sailpoint.api.identitynow.com" if host is None else host + """Default Base url + """ + self.server_index = 0 if server_index is None and host is None else server_index + self.server_operation_index = server_operation_index or {} + """Default server index + """ + self.server_variables = server_variables or {} + self.server_operation_variables = server_operation_variables or {} + """Default server variables + """ + self.temp_folder_path = None + """Temp file folder for downloading files + """ + # Authentication Settings + self.api_key = {} + if api_key: + self.api_key = api_key + """dict to store API key(s) + """ + self.api_key_prefix = {} + if api_key_prefix: + self.api_key_prefix = api_key_prefix + """dict to store API prefix (e.g. Bearer) + """ + self.refresh_api_key_hook = None + """function hook to refresh API key if expired + """ + self.username = username + """Username for HTTP basic authentication + """ + self.password = password + """Password for HTTP basic authentication + """ + self.access_token = access_token + """Access token + """ + self.logger = {} + """Logging Settings + """ + self.logger["package_logger"] = logging.getLogger("cc") + self.logger["urllib3_logger"] = logging.getLogger("urllib3") + self.logger_format = '%(asctime)s %(levelname)s %(message)s' + """Log format + """ + self.logger_stream_handler = None + """Log stream handler + """ + self.logger_file_handler = None + """Log file handler + """ + self.logger_file = None + """Debug file location + """ + self.debug = False + """Debug switch + """ + + self.verify_ssl = True + """SSL/TLS verification + Set this to false to skip verifying SSL certificate when calling API + from https server. + """ + self.ssl_ca_cert = ssl_ca_cert + """Set this to customize the certificate file to verify the peer. + """ + self.cert_file = None + """client certificate file + """ + self.key_file = None + """client key file + """ + self.assert_hostname = None + """Set this to True/False to enable/disable SSL hostname verification. + """ + self.tls_server_name = None + """SSL/TLS Server Name Indication (SNI) + Set this to the SNI value expected by the server. + """ + + self.connection_pool_maxsize = multiprocessing.cpu_count() * 5 + """urllib3 connection pool's maximum number of connections saved + per pool. urllib3 uses 1 connection as default value, but this is + not the best value when you are making a lot of possibly parallel + requests to the same host, which is often the case here. + cpu_count * 5 is used as default value to increase performance. + """ + + self.proxy = None + """Proxy URL + """ + self.proxy_headers = None + """Proxy headers + """ + self.safe_chars_for_path_param = '' + """Safe chars for path_param + """ + self.retries = None + """Adding retries to override urllib3 default value 3 + """ + # Enable client side validation + self.client_side_validation = True + + self.socket_options = None + """Options to pass down to the underlying urllib3 socket + """ + + self.datetime_format = "%Y-%m-%dT%H:%M:%S.%f%z" + """datetime format + """ + + self.date_format = "%Y-%m-%d" + """date format + """ + + def __deepcopy__(self, memo): + cls = self.__class__ + result = cls.__new__(cls) + memo[id(self)] = result + for k, v in self.__dict__.items(): + if k not in ('logger', 'logger_file_handler'): + setattr(result, k, copy.deepcopy(v, memo)) + # shallow copy of loggers + result.logger = copy.copy(self.logger) + # use setters to configure loggers + result.logger_file = self.logger_file + result.debug = self.debug + return result + + def __setattr__(self, name, value): + object.__setattr__(self, name, value) + + @classmethod + def set_default(cls, default): + """Set default instance of configuration. + + It stores default configuration, which can be + returned by get_default_copy method. + + :param default: object of Configuration + """ + cls._default = default + + @classmethod + def get_default_copy(cls): + """Deprecated. Please use `get_default` instead. + + Deprecated. Please use `get_default` instead. + + :return: The configuration object. + """ + return cls.get_default() + + @classmethod + def get_default(cls): + """Return the default configuration. + + This method returns newly created, based on default constructor, + object of Configuration class or returns a copy of default + configuration. + + :return: The configuration object. + """ + if cls._default is None: + cls._default = Configuration() + return cls._default + + @property + def logger_file(self): + """The logger file. + + If the logger_file is None, then add stream handler and remove file + handler. Otherwise, add file handler and remove stream handler. + + :param value: The logger_file path. + :type: str + """ + return self.__logger_file + + @logger_file.setter + def logger_file(self, value): + """The logger file. + + If the logger_file is None, then add stream handler and remove file + handler. Otherwise, add file handler and remove stream handler. + + :param value: The logger_file path. + :type: str + """ + self.__logger_file = value + if self.__logger_file: + # If set logging file, + # then add file handler and remove stream handler. + self.logger_file_handler = logging.FileHandler(self.__logger_file) + self.logger_file_handler.setFormatter(self.logger_formatter) + for _, logger in self.logger.items(): + logger.addHandler(self.logger_file_handler) + + @property + def debug(self): + """Debug status + + :param value: The debug status, True or False. + :type: bool + """ + return self.__debug + + @debug.setter + def debug(self, value): + """Debug status + + :param value: The debug status, True or False. + :type: bool + """ + self.__debug = value + if self.__debug: + # if debug status is True, turn on debug logging + for _, logger in self.logger.items(): + logger.setLevel(logging.DEBUG) + # turn on httplib debug + httplib.HTTPConnection.debuglevel = 1 + else: + # if debug status is False, turn off debug logging, + # setting log level to default `logging.WARNING` + for _, logger in self.logger.items(): + logger.setLevel(logging.WARNING) + # turn off httplib debug + httplib.HTTPConnection.debuglevel = 0 + + @property + def logger_format(self): + """The logger format. + + The logger_formatter will be updated when sets logger_format. + + :param value: The format string. + :type: str + """ + return self.__logger_format + + @logger_format.setter + def logger_format(self, value): + """The logger format. + + The logger_formatter will be updated when sets logger_format. + + :param value: The format string. + :type: str + """ + self.__logger_format = value + self.logger_formatter = logging.Formatter(self.__logger_format) + + def get_api_key_with_prefix(self, identifier, alias=None): + """Gets API key (with prefix if set). + + :param identifier: The identifier of apiKey. + :param alias: The alternative identifier of apiKey. + :return: The token for api key authentication. + """ + if self.refresh_api_key_hook is not None: + self.refresh_api_key_hook(self) + key = self.api_key.get( + identifier, + self.api_key.get(alias) if alias is not None else None) + if key: + prefix = self.api_key_prefix.get(identifier) + if prefix: + return "%s %s" % (prefix, key) + else: + return key + + def get_basic_auth_token(self): + """Gets HTTP basic authentication header (string). + + :return: The token for basic HTTP authentication. + """ + username = "" + if self.username is not None: + username = self.username + password = "" + if self.password is not None: + password = self.password + return urllib3.util.make_headers(basic_auth=username + ':' + + password).get('authorization') + + def auth_settings(self): + """Gets Auth Settings dict for api client. + + :return: The Auth Settings information dict. + """ + auth = {} + if self.access_token is not None: + auth['UserContextAuth'] = { + 'type': 'oauth2', + 'in': 'header', + 'key': 'Authorization', + 'value': 'Bearer ' + self.access_token + } + if self.access_token is not None: + auth['UserContextAuth'] = { + 'type': 'oauth2', + 'in': 'header', + 'key': 'Authorization', + 'value': 'Bearer ' + self.access_token + } + return auth + + def to_debug_report(self): + """Gets the essential information for debugging. + + :return: The report for debugging. + """ + return "Python SDK Debug Report:\n"\ + "OS: {env}\n"\ + "Python Version: {pyversion}\n"\ + "Version of the API: 1.0.0\n"\ + "SDK Package Version: 1.0.0".\ + format(env=sys.platform, pyversion=sys.version) + + def get_host_settings(self): + """Gets an array of host settings + + :return: An array of host settings + """ + return [{ + 'url': "https://{tenant}.api.identitynow.com", + 'description': "This is the production API server.", + 'variables': { + 'tenant': { + 'description': + "This is the name of your tenant, typically your company's name.", + 'default_value': "sailpoint", + } + } + }, { + 'url': "https://{apiUrl}", + 'description': "This is the CC API server.", + 'variables': { + 'apiUrl': { + 'description': "This is the api url of your tenant", + 'default_value': "sailpoint.api.identitynow.com", + } + } + }] + + def get_host_from_settings(self, index, variables=None, servers=None): + """Gets host URL based on the index and variables + :param index: array index of the host settings + :param variables: hash of variable and the corresponding value + :param servers: an array of host settings or None + :return: URL based on host settings + """ + if index is None: + return self._base_path + + variables = {} if variables is None else variables + servers = self.get_host_settings() if servers is None else servers + + try: + server = servers[index] + except IndexError: + raise ValueError( + "Invalid index {0} when selecting the host settings. " + "Must be less than {1}".format(index, len(servers))) + + url = server['url'] + + # go through variables and replace placeholders + for variable_name, variable in server.get('variables', {}).items(): + used_value = variables.get(variable_name, + variable['default_value']) + + if 'enum_values' in variable \ + and used_value not in variable['enum_values']: + raise ValueError( + "The variable `{0}` in the host URL has invalid value " + "{1}. Must be {2}.".format(variable_name, + variables[variable_name], + variable['enum_values'])) + + url = url.replace("{" + variable_name + "}", used_value) + + return url + + @property + def host(self): + """Return generated host.""" + return self.get_host_from_settings(self.server_index, + variables=self.server_variables) + + @host.setter + def host(self, value): + """Fix base path.""" + self._base_path = value + self.server_index = None diff --git a/sailpoint/cc/docs/AccountsApi.md b/sailpoint/cc/docs/AccountsApi.md new file mode 100644 index 000000000..b41563afa --- /dev/null +++ b/sailpoint/cc/docs/AccountsApi.md @@ -0,0 +1,153 @@ +# cc.AccountsApi + +All URIs are relative to *https://sailpoint.api.identitynow.com* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**list_accounts**](AccountsApi.md#list_accounts) | **GET** /cc/api/account/list | List Accounts +[**remove_account**](AccountsApi.md#remove_account) | **POST** /cc/api/account/remove/{id} | Remove Account + + +# **list_accounts** +> List[ListAccounts200ResponseInner] list_accounts() + +List Accounts + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import cc +from cc.models.list_accounts200_response_inner import ListAccounts200ResponseInner +from cc.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com +# See configuration.py for a list of all supported configuration parameters. +configuration = cc.Configuration( + host = "https://sailpoint.api.identitynow.com" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with cc.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cc.AccountsApi(api_client) + + try: + # List Accounts + api_response = api_instance.list_accounts() + print("The response of AccountsApi->list_accounts:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling AccountsApi->list_accounts: %s\n" % e) +``` + + + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**List[ListAccounts200ResponseInner]**](ListAccounts200ResponseInner.md) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful response | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **remove_account** +> remove_account(id) + +Remove Account + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import cc +from cc.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com +# See configuration.py for a list of all supported configuration parameters. +configuration = cc.Configuration( + host = "https://sailpoint.api.identitynow.com" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with cc.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cc.AccountsApi(api_client) + id = '12345' # str | + + try: + # Remove Account + api_instance.remove_account(id) + except Exception as e: + print("Exception when calling AccountsApi->remove_account: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful response | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/sailpoint/cc/docs/ApplicationsApi.md b/sailpoint/cc/docs/ApplicationsApi.md new file mode 100644 index 000000000..97f10c27c --- /dev/null +++ b/sailpoint/cc/docs/ApplicationsApi.md @@ -0,0 +1,442 @@ +# cc.ApplicationsApi + +All URIs are relative to *https://sailpoint.api.identitynow.com* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**create_application**](ApplicationsApi.md#create_application) | **POST** /cc/api/app/create | Create Application +[**delete_application**](ApplicationsApi.md#delete_application) | **POST** /cc/api/app/delete/{id} | Delete Application +[**get_application**](ApplicationsApi.md#get_application) | **GET** /cc/api/app/get/{id} | Get Single Application +[**get_application_access_profiles**](ApplicationsApi.md#get_application_access_profiles) | **GET** /cc/api/app/getAccessProfiles/{id} | Get Access Profiles for Application +[**list_applications**](ApplicationsApi.md#list_applications) | **GET** /cc/api/app/list | List Applications +[**update_application**](ApplicationsApi.md#update_application) | **POST** /cc/api/app/update/{id} | Update Application + + +# **create_application** +> create_application(create_application_request=create_application_request) + +Create Application + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import cc +from cc.models.create_application_request import CreateApplicationRequest +from cc.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com +# See configuration.py for a list of all supported configuration parameters. +configuration = cc.Configuration( + host = "https://sailpoint.api.identitynow.com" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with cc.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cc.ApplicationsApi(api_client) + create_application_request = cc.CreateApplicationRequest() # CreateApplicationRequest | (optional) + + try: + # Create Application + api_instance.create_application(create_application_request=create_application_request) + except Exception as e: + print("Exception when calling ApplicationsApi->create_application: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **create_application_request** | [**CreateApplicationRequest**](CreateApplicationRequest.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful response | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_application** +> delete_application(id) + +Delete Application + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import cc +from cc.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com +# See configuration.py for a list of all supported configuration parameters. +configuration = cc.Configuration( + host = "https://sailpoint.api.identitynow.com" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with cc.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cc.ApplicationsApi(api_client) + id = '12345' # str | + + try: + # Delete Application + api_instance.delete_application(id) + except Exception as e: + print("Exception when calling ApplicationsApi->delete_application: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful response | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_application** +> ListApplications200ResponseInner get_application(id) + +Get Single Application + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import cc +from cc.models.list_applications200_response_inner import ListApplications200ResponseInner +from cc.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com +# See configuration.py for a list of all supported configuration parameters. +configuration = cc.Configuration( + host = "https://sailpoint.api.identitynow.com" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with cc.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cc.ApplicationsApi(api_client) + id = '12345' # str | + + try: + # Get Single Application + api_response = api_instance.get_application(id) + print("The response of ApplicationsApi->get_application:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ApplicationsApi->get_application: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + +### Return type + +[**ListApplications200ResponseInner**](ListApplications200ResponseInner.md) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful response | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_application_access_profiles** +> get_application_access_profiles(id) + +Get Access Profiles for Application + +### Example + +```python +import time +import os +import cc +from cc.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com +# See configuration.py for a list of all supported configuration parameters. +configuration = cc.Configuration( + host = "https://sailpoint.api.identitynow.com" +) + + +# Enter a context with an instance of the API client +with cc.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cc.ApplicationsApi(api_client) + id = '12345' # str | + + try: + # Get Access Profiles for Application + api_instance.get_application_access_profiles(id) + except Exception as e: + print("Exception when calling ApplicationsApi->get_application_access_profiles: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful response | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_applications** +> List[ListApplications200ResponseInner] list_applications() + +List Applications + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import cc +from cc.models.list_applications200_response_inner import ListApplications200ResponseInner +from cc.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com +# See configuration.py for a list of all supported configuration parameters. +configuration = cc.Configuration( + host = "https://sailpoint.api.identitynow.com" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with cc.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cc.ApplicationsApi(api_client) + + try: + # List Applications + api_response = api_instance.list_applications() + print("The response of ApplicationsApi->list_applications:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ApplicationsApi->list_applications: %s\n" % e) +``` + + + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**List[ListApplications200ResponseInner]**](ListApplications200ResponseInner.md) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful response | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_application** +> update_application(id, update_application_request=update_application_request) + +Update Application + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import cc +from cc.models.update_application_request import UpdateApplicationRequest +from cc.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com +# See configuration.py for a list of all supported configuration parameters. +configuration = cc.Configuration( + host = "https://sailpoint.api.identitynow.com" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with cc.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cc.ApplicationsApi(api_client) + id = '12345' # str | + update_application_request = cc.UpdateApplicationRequest() # UpdateApplicationRequest | (optional) + + try: + # Update Application + api_instance.update_application(id, update_application_request=update_application_request) + except Exception as e: + print("Exception when calling ApplicationsApi->update_application: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **update_application_request** | [**UpdateApplicationRequest**](UpdateApplicationRequest.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful response | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/sailpoint/cc/docs/ConnectorsApi.md b/sailpoint/cc/docs/ConnectorsApi.md new file mode 100644 index 000000000..9fac892c5 --- /dev/null +++ b/sailpoint/cc/docs/ConnectorsApi.md @@ -0,0 +1,384 @@ +# cc.ConnectorsApi + +All URIs are relative to *https://sailpoint.api.identitynow.com* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**create_connector**](ConnectorsApi.md#create_connector) | **POST** /cc/api/connector/create | Create Connector +[**delete_connector**](ConnectorsApi.md#delete_connector) | **POST** /cc/api/connector/delete/{id} | Delete Connector +[**export_connector_config**](ConnectorsApi.md#export_connector_config) | **GET** /cc/api/connector/export/{id} | Export Connector Config +[**import_connector_config**](ConnectorsApi.md#import_connector_config) | **POST** /cc/api/connector/import/{id} | Import Connector Config +[**list_connectors**](ConnectorsApi.md#list_connectors) | **GET** /cc/api/connector/list | List Connectors + + +# **create_connector** +> create_connector(content_type=content_type, name=name, description=description, class_name=class_name, direct_connect=direct_connect, status=status) + +Create Connector + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import cc +from cc.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com +# See configuration.py for a list of all supported configuration parameters. +configuration = cc.Configuration( + host = "https://sailpoint.api.identitynow.com" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with cc.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cc.ConnectorsApi(api_client) + content_type = 'application/x-www-form-urlencoded' # str | (optional) + name = 'name_example' # str | (optional) + description = 'description_example' # str | (optional) + class_name = 'class_name_example' # str | (optional) + direct_connect = True # bool | (optional) + status = 'status_example' # str | (optional) + + try: + # Create Connector + api_instance.create_connector(content_type=content_type, name=name, description=description, class_name=class_name, direct_connect=direct_connect, status=status) + except Exception as e: + print("Exception when calling ConnectorsApi->create_connector: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **content_type** | **str**| | [optional] + **name** | **str**| | [optional] + **description** | **str**| | [optional] + **class_name** | **str**| | [optional] + **direct_connect** | **bool**| | [optional] + **status** | **str**| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: application/x-www-form-urlencoded + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful response | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_connector** +> delete_connector(id) + +Delete Connector + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import cc +from cc.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com +# See configuration.py for a list of all supported configuration parameters. +configuration = cc.Configuration( + host = "https://sailpoint.api.identitynow.com" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with cc.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cc.ConnectorsApi(api_client) + id = 'id_example' # str | + + try: + # Delete Connector + api_instance.delete_connector(id) + except Exception as e: + print("Exception when calling ConnectorsApi->delete_connector: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful response | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **export_connector_config** +> export_connector_config(id) + +Export Connector Config + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import cc +from cc.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com +# See configuration.py for a list of all supported configuration parameters. +configuration = cc.Configuration( + host = "https://sailpoint.api.identitynow.com" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with cc.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cc.ConnectorsApi(api_client) + id = 'id_example' # str | + + try: + # Export Connector Config + api_instance.export_connector_config(id) + except Exception as e: + print("Exception when calling ConnectorsApi->export_connector_config: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful response | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **import_connector_config** +> import_connector_config(id, file=file) + +Import Connector Config + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import cc +from cc.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com +# See configuration.py for a list of all supported configuration parameters. +configuration = cc.Configuration( + host = "https://sailpoint.api.identitynow.com" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with cc.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cc.ConnectorsApi(api_client) + id = 'id_example' # str | + file = None # bytearray | This is the connector config zip bundle which gets uploaded. (optional) + + try: + # Import Connector Config + api_instance.import_connector_config(id, file=file) + except Exception as e: + print("Exception when calling ConnectorsApi->import_connector_config: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **file** | **bytearray**| This is the connector config zip bundle which gets uploaded. | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful response | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_connectors** +> ListConnectors200Response list_connectors() + +List Connectors + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import cc +from cc.models.list_connectors200_response import ListConnectors200Response +from cc.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com +# See configuration.py for a list of all supported configuration parameters. +configuration = cc.Configuration( + host = "https://sailpoint.api.identitynow.com" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with cc.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cc.ConnectorsApi(api_client) + + try: + # List Connectors + api_response = api_instance.list_connectors() + print("The response of ConnectorsApi->list_connectors:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling ConnectorsApi->list_connectors: %s\n" % e) +``` + + + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**ListConnectors200Response**](ListConnectors200Response.md) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful response | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/sailpoint/cc/docs/CreateApplicationRequest.md b/sailpoint/cc/docs/CreateApplicationRequest.md new file mode 100644 index 000000000..6fd1e2f29 --- /dev/null +++ b/sailpoint/cc/docs/CreateApplicationRequest.md @@ -0,0 +1,29 @@ +# CreateApplicationRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] +**description** | **str** | | [optional] + +## Example + +```python +from cc.models.create_application_request import CreateApplicationRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of CreateApplicationRequest from a JSON string +create_application_request_instance = CreateApplicationRequest.from_json(json) +# print the JSON string representation of the object +print CreateApplicationRequest.to_json() + +# convert the object into a dict +create_application_request_dict = create_application_request_instance.to_dict() +# create an instance of CreateApplicationRequest from a dict +create_application_request_form_dict = create_application_request.from_dict(create_application_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/CreateConnectorRequest.md b/sailpoint/cc/docs/CreateConnectorRequest.md new file mode 100644 index 000000000..ec11dc0be --- /dev/null +++ b/sailpoint/cc/docs/CreateConnectorRequest.md @@ -0,0 +1,32 @@ +# CreateConnectorRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] +**description** | **str** | | [optional] +**class_name** | **str** | | [optional] +**direct_connect** | **bool** | | [optional] +**status** | **str** | | [optional] + +## Example + +```python +from cc.models.create_connector_request import CreateConnectorRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of CreateConnectorRequest from a JSON string +create_connector_request_instance = CreateConnectorRequest.from_json(json) +# print the JSON string representation of the object +print CreateConnectorRequest.to_json() + +# convert the object into a dict +create_connector_request_dict = create_connector_request_instance.to_dict() +# create an instance of CreateConnectorRequest from a dict +create_connector_request_form_dict = create_connector_request.from_dict(create_connector_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/GetIdentity200Response.md b/sailpoint/cc/docs/GetIdentity200Response.md new file mode 100644 index 000000000..7997a2d4c --- /dev/null +++ b/sailpoint/cc/docs/GetIdentity200Response.md @@ -0,0 +1,68 @@ +# GetIdentity200Response + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [optional] +**alias** | **str** | | [optional] +**uid** | **str** | | [optional] +**name** | **str** | | [optional] +**display_name** | **str** | | [optional] +**uuid** | **str** | | [optional] +**encryption_key** | **object** | | [optional] +**encryption_check** | **object** | | [optional] +**status** | **str** | | [optional] +**pending** | **bool** | | [optional] +**password_reset_since_last_login** | **bool** | | [optional] +**usage_cert_attested** | **object** | | [optional] +**user_flags** | **object** | | [optional] +**enabled** | **bool** | | [optional] +**alt_auth_via** | **str** | | [optional] +**alt_auth_via_integration_data** | **object** | | [optional] +**kba_answers** | **float** | | [optional] +**disable_password_reset** | **bool** | | [optional] +**pta_source_id** | **object** | | [optional] +**supports_password_push** | **bool** | | [optional] +**attributes** | **object** | | [optional] +**external_id** | **str** | | [optional] +**role** | **List[object]** | | [optional] +**phone** | **object** | | [optional] +**email** | **str** | | [optional] +**personal_email** | **object** | | [optional] +**employee_number** | **object** | | [optional] +**risk_score** | **float** | | [optional] +**feature_flags** | **object** | | [optional] +**feature** | **List[str]** | | [optional] +**org_encryption_key** | **str** | | [optional] +**org_encryption_key_id** | **str** | | [optional] +**meta** | **object** | | [optional] +**org** | [**GetIdentity200ResponseOrg**](GetIdentity200ResponseOrg.md) | | [optional] +**step_up_auth** | **bool** | | [optional] +**bx_install_prompted** | **bool** | | [optional] +**federated_login** | **bool** | | [optional] +**auth** | [**GetIdentity200ResponseAuth**](GetIdentity200ResponseAuth.md) | | [optional] +**on_network** | **bool** | | [optional] +**on_trusted_geo** | **bool** | | [optional] +**login_url** | **str** | | [optional] + +## Example + +```python +from cc.models.get_identity200_response import GetIdentity200Response + +# TODO update the JSON string below +json = "{}" +# create an instance of GetIdentity200Response from a JSON string +get_identity200_response_instance = GetIdentity200Response.from_json(json) +# print the JSON string representation of the object +print GetIdentity200Response.to_json() + +# convert the object into a dict +get_identity200_response_dict = get_identity200_response_instance.to_dict() +# create an instance of GetIdentity200Response from a dict +get_identity200_response_form_dict = get_identity200_response.from_dict(get_identity200_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/GetIdentity200ResponseAuth.md b/sailpoint/cc/docs/GetIdentity200ResponseAuth.md new file mode 100644 index 000000000..81739e7a6 --- /dev/null +++ b/sailpoint/cc/docs/GetIdentity200ResponseAuth.md @@ -0,0 +1,29 @@ +# GetIdentity200ResponseAuth + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**service** | **str** | | [optional] +**encryption** | **str** | | [optional] + +## Example + +```python +from cc.models.get_identity200_response_auth import GetIdentity200ResponseAuth + +# TODO update the JSON string below +json = "{}" +# create an instance of GetIdentity200ResponseAuth from a JSON string +get_identity200_response_auth_instance = GetIdentity200ResponseAuth.from_json(json) +# print the JSON string representation of the object +print GetIdentity200ResponseAuth.to_json() + +# convert the object into a dict +get_identity200_response_auth_dict = get_identity200_response_auth_instance.to_dict() +# create an instance of GetIdentity200ResponseAuth from a dict +get_identity200_response_auth_form_dict = get_identity200_response_auth.from_dict(get_identity200_response_auth_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/GetIdentity200ResponseOrg.md b/sailpoint/cc/docs/GetIdentity200ResponseOrg.md new file mode 100644 index 000000000..19d980881 --- /dev/null +++ b/sailpoint/cc/docs/GetIdentity200ResponseOrg.md @@ -0,0 +1,77 @@ +# GetIdentity200ResponseOrg + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] +**script_name** | **str** | | [optional] +**mode** | **str** | | [optional] +**num_questions** | **float** | | [optional] +**status** | **str** | | [optional] +**max_registered_users** | **float** | | [optional] +**pod** | **str** | | [optional] +**pwd_reset_personal_phone** | **bool** | | [optional] +**pwd_reset_personal_email** | **bool** | | [optional] +**pwd_reset_kba** | **bool** | | [optional] +**pwd_reset_email** | **bool** | | [optional] +**pwd_reset_duo** | **bool** | | [optional] +**pwd_reset_phone_mask** | **bool** | | [optional] +**auth_error_text** | **object** | | [optional] +**strong_auth_kba** | **bool** | | [optional] +**strong_auth_personal_phone** | **bool** | | [optional] +**strong_auth_personal_email** | **bool** | | [optional] +**integrations** | **List[object]** | | [optional] +**product_name** | **str** | | [optional] +**kba_req_for_authn** | **float** | | [optional] +**kba_req_answers** | **float** | | [optional] +**lockout_attempt_threshold** | **float** | | [optional] +**lockout_time_minutes** | **float** | | [optional] +**usage_cert_required** | **bool** | | [optional] +**admin_strong_auth_required** | **bool** | | [optional] +**enable_external_password_change** | **bool** | | [optional] +**enable_password_replay** | **bool** | | [optional] +**enable_automatic_password_replay** | **bool** | | [optional] +**notify_authentication_setting_change** | **bool** | | [optional] +**netmasks** | **object** | | [optional] +**country_codes** | **object** | | [optional] +**white_list** | **bool** | | [optional] +**username_empty_text** | **object** | | [optional] +**username_label** | **object** | | [optional] +**enable_automation_generation** | **bool** | | [optional] +**email_test_mode** | **bool** | | [optional] +**email_test_address** | **str** | | [optional] +**org_type** | **str** | | [optional] +**password_replay_state** | **str** | | [optional] +**system_notification_config** | **str** | | [optional] +**redirect_patterns** | **str** | | [optional] +**max_cluster_debug_hours** | **str** | | [optional] +**brand_name** | **str** | | [optional] +**logo** | **object** | | [optional] +**email_from_address** | **object** | | [optional] +**standard_logo_url** | **object** | | [optional] +**narrow_logo_url** | **object** | | [optional] +**action_button_color** | **str** | | [optional] +**active_link_color** | **str** | | [optional] +**navigation_color** | **str** | | [optional] + +## Example + +```python +from cc.models.get_identity200_response_org import GetIdentity200ResponseOrg + +# TODO update the JSON string below +json = "{}" +# create an instance of GetIdentity200ResponseOrg from a JSON string +get_identity200_response_org_instance = GetIdentity200ResponseOrg.from_json(json) +# print the JSON string representation of the object +print GetIdentity200ResponseOrg.to_json() + +# convert the object into a dict +get_identity200_response_org_dict = get_identity200_response_org_instance.to_dict() +# create an instance of GetIdentity200ResponseOrg from a dict +get_identity200_response_org_form_dict = get_identity200_response_org.from_dict(get_identity200_response_org_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/ImportConnectorConfigRequest.md b/sailpoint/cc/docs/ImportConnectorConfigRequest.md new file mode 100644 index 000000000..2abca7950 --- /dev/null +++ b/sailpoint/cc/docs/ImportConnectorConfigRequest.md @@ -0,0 +1,28 @@ +# ImportConnectorConfigRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**file** | **bytearray** | This is the connector config zip bundle which gets uploaded. | [optional] + +## Example + +```python +from cc.models.import_connector_config_request import ImportConnectorConfigRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of ImportConnectorConfigRequest from a JSON string +import_connector_config_request_instance = ImportConnectorConfigRequest.from_json(json) +# print the JSON string representation of the object +print ImportConnectorConfigRequest.to_json() + +# convert the object into a dict +import_connector_config_request_dict = import_connector_config_request_instance.to_dict() +# create an instance of ImportConnectorConfigRequest from a dict +import_connector_config_request_form_dict = import_connector_config_request.from_dict(import_connector_config_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/ListAccounts200ResponseInner.md b/sailpoint/cc/docs/ListAccounts200ResponseInner.md new file mode 100644 index 000000000..42282892d --- /dev/null +++ b/sailpoint/cc/docs/ListAccounts200ResponseInner.md @@ -0,0 +1,45 @@ +# ListAccounts200ResponseInner + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [optional] +**type** | **str** | | [optional] +**display_name** | **str** | | [optional] +**username** | **str** | | [optional] +**password_required** | **bool** | | [optional] +**password_provided** | **bool** | | [optional] +**apps** | **List[object]** | | [optional] +**sso_method** | **str** | | [optional] +**id_encryption** | **str** | | [optional] +**password_encryption** | **str** | | [optional] +**last_passwd_change** | **str** | | [optional] +**service_name** | **str** | | [optional] +**date_disabled** | **str** | | [optional] +**account_service_id** | **int** | | [optional] +**service_id** | **int** | | [optional] +**pending_password_request_id** | **str** | | [optional] +**password_change_status** | **str** | | [optional] +**password_change_result** | [**ListAccounts200ResponseInnerPasswordChangeResult**](ListAccounts200ResponseInnerPasswordChangeResult.md) | | [optional] + +## Example + +```python +from cc.models.list_accounts200_response_inner import ListAccounts200ResponseInner + +# TODO update the JSON string below +json = "{}" +# create an instance of ListAccounts200ResponseInner from a JSON string +list_accounts200_response_inner_instance = ListAccounts200ResponseInner.from_json(json) +# print the JSON string representation of the object +print ListAccounts200ResponseInner.to_json() + +# convert the object into a dict +list_accounts200_response_inner_dict = list_accounts200_response_inner_instance.to_dict() +# create an instance of ListAccounts200ResponseInner from a dict +list_accounts200_response_inner_form_dict = list_accounts200_response_inner.from_dict(list_accounts200_response_inner_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/ListAccounts200ResponseInnerPasswordChangeResult.md b/sailpoint/cc/docs/ListAccounts200ResponseInnerPasswordChangeResult.md new file mode 100644 index 000000000..2f4f4453c --- /dev/null +++ b/sailpoint/cc/docs/ListAccounts200ResponseInnerPasswordChangeResult.md @@ -0,0 +1,28 @@ +# ListAccounts200ResponseInnerPasswordChangeResult + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**completion_status** | **str** | | [optional] + +## Example + +```python +from cc.models.list_accounts200_response_inner_password_change_result import ListAccounts200ResponseInnerPasswordChangeResult + +# TODO update the JSON string below +json = "{}" +# create an instance of ListAccounts200ResponseInnerPasswordChangeResult from a JSON string +list_accounts200_response_inner_password_change_result_instance = ListAccounts200ResponseInnerPasswordChangeResult.from_json(json) +# print the JSON string representation of the object +print ListAccounts200ResponseInnerPasswordChangeResult.to_json() + +# convert the object into a dict +list_accounts200_response_inner_password_change_result_dict = list_accounts200_response_inner_password_change_result_instance.to_dict() +# create an instance of ListAccounts200ResponseInnerPasswordChangeResult from a dict +list_accounts200_response_inner_password_change_result_form_dict = list_accounts200_response_inner_password_change_result.from_dict(list_accounts200_response_inner_password_change_result_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/ListApplications200ResponseInner.md b/sailpoint/cc/docs/ListApplications200ResponseInner.md new file mode 100644 index 000000000..367648f04 --- /dev/null +++ b/sailpoint/cc/docs/ListApplications200ResponseInner.md @@ -0,0 +1,77 @@ +# ListApplications200ResponseInner + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [optional] +**app_id** | **str** | | [optional] +**service_id** | **str** | | [optional] +**service_app_id** | **str** | | [optional] +**name** | **str** | | [optional] +**description** | **str** | | [optional] +**app_center_enabled** | **bool** | | [optional] +**provision_request_enabled** | **bool** | | [optional] +**control_type** | **str** | | [optional] +**mobile** | **bool** | | [optional] +**private_app** | **bool** | | [optional] +**script_name** | **str** | | [optional] +**status** | **str** | | [optional] +**icon** | **str** | | [optional] +**health** | [**ListApplications200ResponseInnerHealth**](ListApplications200ResponseInnerHealth.md) | | [optional] +**enable_sso** | **bool** | | [optional] +**sso_method** | **str** | | [optional] +**has_links** | **bool** | | [optional] +**has_automations** | **bool** | | [optional] +**step_up_auth_data** | **object** | | [optional] +**step_up_auth_type** | **str** | | [optional] +**usage_analytics** | **bool** | | [optional] +**usage_cert_required** | **bool** | | [optional] +**usage_cert_text** | **object** | | [optional] +**launchpad_enabled** | **bool** | | [optional] +**password_managed** | **bool** | | [optional] +**owner** | [**ListApplications200ResponseInnerOwner**](ListApplications200ResponseInnerOwner.md) | | [optional] +**date_created** | **float** | | [optional] +**last_updated** | **float** | | [optional] +**default_access_profile** | **object** | | [optional] +**service** | **str** | | [optional] +**selected_sso_method** | **str** | | [optional] +**supported_sso_methods** | **float** | | [optional] +**off_network_blocked_roles** | **object** | | [optional] +**supported_off_network** | **str** | | [optional] +**account_service_id** | **float** | | [optional] +**launcher_count** | **float** | | [optional] +**account_service_name** | **str** | | [optional] +**account_service_external_id** | **str** | | [optional] +**account_service_match_all_accounts** | **bool** | | [optional] +**external_id** | **str** | | [optional] +**account_service_use_for_password_management** | **bool** | | [optional] +**account_service_policy_id** | **str** | | [optional] +**account_service_policy_name** | **str** | | [optional] +**require_strong_authn** | **bool** | | [optional] +**account_service_policies** | [**List[ListApplications200ResponseInnerAccountServicePoliciesInner]**](ListApplications200ResponseInnerAccountServicePoliciesInner.md) | | [optional] +**xsd_version** | **str** | | [optional] +**app_profiles** | [**List[ListApplications200ResponseInnerAppProfilesInner]**](ListApplications200ResponseInnerAppProfilesInner.md) | | [optional] +**password_service_id** | **float** | | [optional] +**access_profile_ids** | **object** | | [optional] + +## Example + +```python +from cc.models.list_applications200_response_inner import ListApplications200ResponseInner + +# TODO update the JSON string below +json = "{}" +# create an instance of ListApplications200ResponseInner from a JSON string +list_applications200_response_inner_instance = ListApplications200ResponseInner.from_json(json) +# print the JSON string representation of the object +print ListApplications200ResponseInner.to_json() + +# convert the object into a dict +list_applications200_response_inner_dict = list_applications200_response_inner_instance.to_dict() +# create an instance of ListApplications200ResponseInner from a dict +list_applications200_response_inner_form_dict = list_applications200_response_inner.from_dict(list_applications200_response_inner_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/ListApplications200ResponseInnerAccountServicePoliciesInner.md b/sailpoint/cc/docs/ListApplications200ResponseInnerAccountServicePoliciesInner.md new file mode 100644 index 000000000..abd5bfd2d --- /dev/null +++ b/sailpoint/cc/docs/ListApplications200ResponseInnerAccountServicePoliciesInner.md @@ -0,0 +1,30 @@ +# ListApplications200ResponseInnerAccountServicePoliciesInner + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**policy_id** | **str** | | [optional] +**policy_name** | **str** | | [optional] +**selectors** | **object** | | [optional] + +## Example + +```python +from cc.models.list_applications200_response_inner_account_service_policies_inner import ListApplications200ResponseInnerAccountServicePoliciesInner + +# TODO update the JSON string below +json = "{}" +# create an instance of ListApplications200ResponseInnerAccountServicePoliciesInner from a JSON string +list_applications200_response_inner_account_service_policies_inner_instance = ListApplications200ResponseInnerAccountServicePoliciesInner.from_json(json) +# print the JSON string representation of the object +print ListApplications200ResponseInnerAccountServicePoliciesInner.to_json() + +# convert the object into a dict +list_applications200_response_inner_account_service_policies_inner_dict = list_applications200_response_inner_account_service_policies_inner_instance.to_dict() +# create an instance of ListApplications200ResponseInnerAccountServicePoliciesInner from a dict +list_applications200_response_inner_account_service_policies_inner_form_dict = list_applications200_response_inner_account_service_policies_inner.from_dict(list_applications200_response_inner_account_service_policies_inner_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/ListApplications200ResponseInnerAppProfilesInner.md b/sailpoint/cc/docs/ListApplications200ResponseInnerAppProfilesInner.md new file mode 100644 index 000000000..7d3237041 --- /dev/null +++ b/sailpoint/cc/docs/ListApplications200ResponseInnerAppProfilesInner.md @@ -0,0 +1,32 @@ +# ListApplications200ResponseInnerAppProfilesInner + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **float** | | [optional] +**filename** | **str** | | [optional] +**created_by** | **str** | | [optional] +**date_created** | **str** | | [optional] +**xsd_version** | **str** | | [optional] + +## Example + +```python +from cc.models.list_applications200_response_inner_app_profiles_inner import ListApplications200ResponseInnerAppProfilesInner + +# TODO update the JSON string below +json = "{}" +# create an instance of ListApplications200ResponseInnerAppProfilesInner from a JSON string +list_applications200_response_inner_app_profiles_inner_instance = ListApplications200ResponseInnerAppProfilesInner.from_json(json) +# print the JSON string representation of the object +print ListApplications200ResponseInnerAppProfilesInner.to_json() + +# convert the object into a dict +list_applications200_response_inner_app_profiles_inner_dict = list_applications200_response_inner_app_profiles_inner_instance.to_dict() +# create an instance of ListApplications200ResponseInnerAppProfilesInner from a dict +list_applications200_response_inner_app_profiles_inner_form_dict = list_applications200_response_inner_app_profiles_inner.from_dict(list_applications200_response_inner_app_profiles_inner_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/ListApplications200ResponseInnerHealth.md b/sailpoint/cc/docs/ListApplications200ResponseInnerHealth.md new file mode 100644 index 000000000..62958cc68 --- /dev/null +++ b/sailpoint/cc/docs/ListApplications200ResponseInnerHealth.md @@ -0,0 +1,31 @@ +# ListApplications200ResponseInnerHealth + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**status** | **str** | | [optional] +**last_changed** | **str** | | [optional] +**since** | **float** | | [optional] +**healthy** | **bool** | | [optional] + +## Example + +```python +from cc.models.list_applications200_response_inner_health import ListApplications200ResponseInnerHealth + +# TODO update the JSON string below +json = "{}" +# create an instance of ListApplications200ResponseInnerHealth from a JSON string +list_applications200_response_inner_health_instance = ListApplications200ResponseInnerHealth.from_json(json) +# print the JSON string representation of the object +print ListApplications200ResponseInnerHealth.to_json() + +# convert the object into a dict +list_applications200_response_inner_health_dict = list_applications200_response_inner_health_instance.to_dict() +# create an instance of ListApplications200ResponseInnerHealth from a dict +list_applications200_response_inner_health_form_dict = list_applications200_response_inner_health.from_dict(list_applications200_response_inner_health_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/ListApplications200ResponseInnerOwner.md b/sailpoint/cc/docs/ListApplications200ResponseInnerOwner.md new file mode 100644 index 000000000..7605390ea --- /dev/null +++ b/sailpoint/cc/docs/ListApplications200ResponseInnerOwner.md @@ -0,0 +1,29 @@ +# ListApplications200ResponseInnerOwner + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [optional] +**name** | **str** | | [optional] + +## Example + +```python +from cc.models.list_applications200_response_inner_owner import ListApplications200ResponseInnerOwner + +# TODO update the JSON string below +json = "{}" +# create an instance of ListApplications200ResponseInnerOwner from a JSON string +list_applications200_response_inner_owner_instance = ListApplications200ResponseInnerOwner.from_json(json) +# print the JSON string representation of the object +print ListApplications200ResponseInnerOwner.to_json() + +# convert the object into a dict +list_applications200_response_inner_owner_dict = list_applications200_response_inner_owner_instance.to_dict() +# create an instance of ListApplications200ResponseInnerOwner from a dict +list_applications200_response_inner_owner_form_dict = list_applications200_response_inner_owner.from_dict(list_applications200_response_inner_owner_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/ListConnectors200Response.md b/sailpoint/cc/docs/ListConnectors200Response.md new file mode 100644 index 000000000..bfdc11738 --- /dev/null +++ b/sailpoint/cc/docs/ListConnectors200Response.md @@ -0,0 +1,29 @@ +# ListConnectors200Response + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**total** | **float** | | [optional] +**items** | [**List[ListConnectors200ResponseItemsInner]**](ListConnectors200ResponseItemsInner.md) | | [optional] + +## Example + +```python +from cc.models.list_connectors200_response import ListConnectors200Response + +# TODO update the JSON string below +json = "{}" +# create an instance of ListConnectors200Response from a JSON string +list_connectors200_response_instance = ListConnectors200Response.from_json(json) +# print the JSON string representation of the object +print ListConnectors200Response.to_json() + +# convert the object into a dict +list_connectors200_response_dict = list_connectors200_response_instance.to_dict() +# create an instance of ListConnectors200Response from a dict +list_connectors200_response_form_dict = list_connectors200_response.from_dict(list_connectors200_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/ListConnectors200ResponseItemsInner.md b/sailpoint/cc/docs/ListConnectors200ResponseItemsInner.md new file mode 100644 index 000000000..eaae4d3f5 --- /dev/null +++ b/sailpoint/cc/docs/ListConnectors200ResponseItemsInner.md @@ -0,0 +1,45 @@ +# ListConnectors200ResponseItemsInner + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**application_xml** | **str** | | [optional] +**class_name** | **str** | | [optional] +**connector_metadata** | **object** | | [optional] +**correlation_config_xml** | **str** | | [optional] +**direct_connect** | **bool** | | [optional] +**file_upload** | **bool** | | [optional] +**id** | **int** | | [optional] +**name** | **str** | | [optional] +**s3_location** | **str** | | [optional] +**scope** | **str** | | [optional] +**script_name** | **str** | | [optional] +**source_config** | **str** | | [optional] +**source_config_from** | **str** | | [optional] +**source_config_xml** | **str** | | [optional] +**status** | **str** | | [optional] +**translation_properties** | **object** | | [optional] +**type** | **str** | | [optional] +**uploaded_files** | **List[object]** | | [optional] + +## Example + +```python +from cc.models.list_connectors200_response_items_inner import ListConnectors200ResponseItemsInner + +# TODO update the JSON string below +json = "{}" +# create an instance of ListConnectors200ResponseItemsInner from a JSON string +list_connectors200_response_items_inner_instance = ListConnectors200ResponseItemsInner.from_json(json) +# print the JSON string representation of the object +print ListConnectors200ResponseItemsInner.to_json() + +# convert the object into a dict +list_connectors200_response_items_inner_dict = list_connectors200_response_items_inner_instance.to_dict() +# create an instance of ListConnectors200ResponseItemsInner from a dict +list_connectors200_response_items_inner_form_dict = list_connectors200_response_items_inner.from_dict(list_connectors200_response_items_inner_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/LoadAccountsRequest.md b/sailpoint/cc/docs/LoadAccountsRequest.md new file mode 100644 index 000000000..a3d6bd143 --- /dev/null +++ b/sailpoint/cc/docs/LoadAccountsRequest.md @@ -0,0 +1,29 @@ +# LoadAccountsRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**disable_optimization** | **bool** | | [optional] +**file** | **bytearray** | | [optional] + +## Example + +```python +from cc.models.load_accounts_request import LoadAccountsRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of LoadAccountsRequest from a JSON string +load_accounts_request_instance = LoadAccountsRequest.from_json(json) +# print the JSON string representation of the object +print LoadAccountsRequest.to_json() + +# convert the object into a dict +load_accounts_request_dict = load_accounts_request_instance.to_dict() +# create an instance of LoadAccountsRequest from a dict +load_accounts_request_form_dict = load_accounts_request.from_dict(load_accounts_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/RefreshIdentitiesRequest.md b/sailpoint/cc/docs/RefreshIdentitiesRequest.md new file mode 100644 index 000000000..3a095edaf --- /dev/null +++ b/sailpoint/cc/docs/RefreshIdentitiesRequest.md @@ -0,0 +1,29 @@ +# RefreshIdentitiesRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**filter** | **str** | Defines the identity or identities which this refresh applies to. The filter must use searchable identity attributes. If the filter cannot be understood or parsed, all identities will be refreshed. | [optional] +**refresh_args** | [**RefreshIdentitiesRequestRefreshArgs**](RefreshIdentitiesRequestRefreshArgs.md) | | [optional] + +## Example + +```python +from cc.models.refresh_identities_request import RefreshIdentitiesRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of RefreshIdentitiesRequest from a JSON string +refresh_identities_request_instance = RefreshIdentitiesRequest.from_json(json) +# print the JSON string representation of the object +print RefreshIdentitiesRequest.to_json() + +# convert the object into a dict +refresh_identities_request_dict = refresh_identities_request_instance.to_dict() +# create an instance of RefreshIdentitiesRequest from a dict +refresh_identities_request_form_dict = refresh_identities_request.from_dict(refresh_identities_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/RefreshIdentitiesRequestRefreshArgs.md b/sailpoint/cc/docs/RefreshIdentitiesRequestRefreshArgs.md new file mode 100644 index 000000000..1b595f6f3 --- /dev/null +++ b/sailpoint/cc/docs/RefreshIdentitiesRequestRefreshArgs.md @@ -0,0 +1,33 @@ +# RefreshIdentitiesRequestRefreshArgs + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**correlate_entitlements** | **bool** | This will refresh entitlement, role, and access profile calculations. | [optional] +**promote_attributes** | **bool** | This will calculate identity attributes. | [optional] +**refresh_manager_status** | **bool** | This recalculates manager correlation and manager status. Note: This is computationally expensive to run. | [optional] +**synchronize_attributes** | **bool** | Enables attribute synchronization. | [optional] +**prune_identities** | **bool** | Option that will enable deletion of an identity objects if there are no account objects. Note: This is not typically used in IdentityNow, except by guidance from SailPoint. | [optional] +**provision** | **bool** | Enables provisioning of role assignments with entitlements that are not currently fulfilled. | [optional] + +## Example + +```python +from cc.models.refresh_identities_request_refresh_args import RefreshIdentitiesRequestRefreshArgs + +# TODO update the JSON string below +json = "{}" +# create an instance of RefreshIdentitiesRequestRefreshArgs from a JSON string +refresh_identities_request_refresh_args_instance = RefreshIdentitiesRequestRefreshArgs.from_json(json) +# print the JSON string representation of the object +print RefreshIdentitiesRequestRefreshArgs.to_json() + +# convert the object into a dict +refresh_identities_request_refresh_args_dict = refresh_identities_request_refresh_args_instance.to_dict() +# create an instance of RefreshIdentitiesRequestRefreshArgs from a dict +refresh_identities_request_refresh_args_form_dict = refresh_identities_request_refresh_args.from_dict(refresh_identities_request_refresh_args_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/SourcesAccountsApi.md b/sailpoint/cc/docs/SourcesAccountsApi.md new file mode 100644 index 000000000..050ad9a6b --- /dev/null +++ b/sailpoint/cc/docs/SourcesAccountsApi.md @@ -0,0 +1,83 @@ +# cc.SourcesAccountsApi + +All URIs are relative to *https://sailpoint.api.identitynow.com* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**export_account_feed**](SourcesAccountsApi.md#export_account_feed) | **GET** /cc/api/source/exportAccountFeed/{id} | Export Account Feed + + +# **export_account_feed** +> export_account_feed(id) + +Export Account Feed + +Exports a CSV of the accounts for a particular source. + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import cc +from cc.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com +# See configuration.py for a list of all supported configuration parameters. +configuration = cc.Configuration( + host = "https://sailpoint.api.identitynow.com" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with cc.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cc.SourcesAccountsApi(api_client) + id = 'id_example' # str | + + try: + # Export Account Feed + api_instance.export_account_feed(id) + except Exception as e: + print("Exception when calling SourcesAccountsApi->export_account_feed: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + +### Return type + +void (empty response body) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful response | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/sailpoint/cc/docs/SourcesAggregationApi.md b/sailpoint/cc/docs/SourcesAggregationApi.md new file mode 100644 index 000000000..d6bba582e --- /dev/null +++ b/sailpoint/cc/docs/SourcesAggregationApi.md @@ -0,0 +1,89 @@ +# cc.SourcesAggregationApi + +All URIs are relative to *https://sailpoint.api.identitynow.com* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**load_accounts**](SourcesAggregationApi.md#load_accounts) | **POST** /cc/api/source/loadAccounts/{id} | Account Aggregation (File) + + +# **load_accounts** +> load_accounts(id, content_type=content_type, disable_optimization=disable_optimization, file=file) + +Account Aggregation (File) + +Aggregates a delimited file for the given source. This only works for file-based sources. + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import cc +from cc.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com +# See configuration.py for a list of all supported configuration parameters. +configuration = cc.Configuration( + host = "https://sailpoint.api.identitynow.com" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with cc.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cc.SourcesAggregationApi(api_client) + id = 'id_example' # str | + content_type = 'application/x-www-form-urlencoded' # str | (optional) + disable_optimization = True # bool | (optional) + file = None # bytearray | (optional) + + try: + # Account Aggregation (File) + api_instance.load_accounts(id, content_type=content_type, disable_optimization=disable_optimization, file=file) + except Exception as e: + print("Exception when calling SourcesAggregationApi->load_accounts: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + **content_type** | **str**| | [optional] + **disable_optimization** | **bool**| | [optional] + **file** | **bytearray**| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: multipart/form-data + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful response | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/sailpoint/cc/docs/SystemApi.md b/sailpoint/cc/docs/SystemApi.md new file mode 100644 index 000000000..91af940f8 --- /dev/null +++ b/sailpoint/cc/docs/SystemApi.md @@ -0,0 +1,86 @@ +# cc.SystemApi + +All URIs are relative to *https://sailpoint.api.identitynow.com* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**refresh_identities**](SystemApi.md#refresh_identities) | **POST** /cc/api/system/refreshIdentities | Refresh Identities + + +# **refresh_identities** +> refresh_identities(content_type=content_type, refresh_identities_request=refresh_identities_request) + +Refresh Identities + +This kicks off an identity refresh for a specified set of identity attributes. This can be a long running process. IdentityNow has pre-scheduled versions of this task at set intervals and events already, so only run this when directed by SailPoint. _Note: If the identities specified by the filter do not exist, a full identity refresh will be run. Use with caution._ Refresh Arguments: | Key | Description | |-----------------------|----------------------------------------------------| | correlateEntitlements | Analyzes entitlements, access profiles, and roles. | | promoteAttributes | Calculates identity attributes. | | refreshManagerStatus | Calculates manager correlation and manager status. | | synchronizeAttributes | Performs attribute sync provisioning. | | pruneIdentities | Removes any identities which don't have accounts. | | provision | Provisions any assigned roles or access profiles. | + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import cc +from cc.models.refresh_identities_request import RefreshIdentitiesRequest +from cc.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com +# See configuration.py for a list of all supported configuration parameters. +configuration = cc.Configuration( + host = "https://sailpoint.api.identitynow.com" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with cc.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cc.SystemApi(api_client) + content_type = 'application/json' # str | (optional) + refresh_identities_request = cc.RefreshIdentitiesRequest() # RefreshIdentitiesRequest | (optional) + + try: + # Refresh Identities + api_instance.refresh_identities(content_type=content_type, refresh_identities_request=refresh_identities_request) + except Exception as e: + print("Exception when calling SystemApi->refresh_identities: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **content_type** | **str**| | [optional] + **refresh_identities_request** | [**RefreshIdentitiesRequest**](RefreshIdentitiesRequest.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful response | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/sailpoint/cc/docs/UpdateApplicationRequest.md b/sailpoint/cc/docs/UpdateApplicationRequest.md new file mode 100644 index 000000000..c1ce3ba9a --- /dev/null +++ b/sailpoint/cc/docs/UpdateApplicationRequest.md @@ -0,0 +1,28 @@ +# UpdateApplicationRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**description** | **str** | | [optional] + +## Example + +```python +from cc.models.update_application_request import UpdateApplicationRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of UpdateApplicationRequest from a JSON string +update_application_request_instance = UpdateApplicationRequest.from_json(json) +# print the JSON string representation of the object +print UpdateApplicationRequest.to_json() + +# convert the object into a dict +update_application_request_dict = update_application_request_instance.to_dict() +# create an instance of UpdateApplicationRequest from a dict +update_application_request_form_dict = update_application_request.from_dict(update_application_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/UpdateUserPermissionsRequest.md b/sailpoint/cc/docs/UpdateUserPermissionsRequest.md new file mode 100644 index 000000000..a19e90375 --- /dev/null +++ b/sailpoint/cc/docs/UpdateUserPermissionsRequest.md @@ -0,0 +1,30 @@ +# UpdateUserPermissionsRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**ids** | **str** | | [optional] +**is_admin** | **str** | Indicates if user should be an IDN Admin. \"0\" for false, \"1\" for true. | [optional] +**admin_type** | **str** | | [optional] + +## Example + +```python +from cc.models.update_user_permissions_request import UpdateUserPermissionsRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of UpdateUserPermissionsRequest from a JSON string +update_user_permissions_request_instance = UpdateUserPermissionsRequest.from_json(json) +# print the JSON string representation of the object +print UpdateUserPermissionsRequest.to_json() + +# convert the object into a dict +update_user_permissions_request_dict = update_user_permissions_request_instance.to_dict() +# create an instance of UpdateUserPermissionsRequest from a dict +update_user_permissions_request_form_dict = update_user_permissions_request.from_dict(update_user_permissions_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/cc/docs/UserApi.md b/sailpoint/cc/docs/UserApi.md new file mode 100644 index 000000000..5ad84564e --- /dev/null +++ b/sailpoint/cc/docs/UserApi.md @@ -0,0 +1,158 @@ +# cc.UserApi + +All URIs are relative to *https://sailpoint.api.identitynow.com* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**get_identity**](UserApi.md#get_identity) | **GET** /cc/api/user/get/{id} | Get Single Identity +[**update_user_permissions**](UserApi.md#update_user_permissions) | **POST** /cc/api/user/updatePermissions | Update User Permissions + + +# **get_identity** +> GetIdentity200Response get_identity(id) + +Get Single Identity + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import cc +from cc.models.get_identity200_response import GetIdentity200Response +from cc.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com +# See configuration.py for a list of all supported configuration parameters. +configuration = cc.Configuration( + host = "https://sailpoint.api.identitynow.com" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with cc.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cc.UserApi(api_client) + id = '5433236' # str | + + try: + # Get Single Identity + api_response = api_instance.get_identity(id) + print("The response of UserApi->get_identity:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling UserApi->get_identity: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **id** | **str**| | + +### Return type + +[**GetIdentity200Response**](GetIdentity200Response.md) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful response | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_user_permissions** +> update_user_permissions(update_user_permissions_request=update_user_permissions_request) + +Update User Permissions + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import cc +from cc.models.update_user_permissions_request import UpdateUserPermissionsRequest +from cc.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com +# See configuration.py for a list of all supported configuration parameters. +configuration = cc.Configuration( + host = "https://sailpoint.api.identitynow.com" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with cc.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cc.UserApi(api_client) + update_user_permissions_request = cc.UpdateUserPermissionsRequest() # UpdateUserPermissionsRequest | (optional) + + try: + # Update User Permissions + api_instance.update_user_permissions(update_user_permissions_request=update_user_permissions_request) + except Exception as e: + print("Exception when calling UserApi->update_user_permissions: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **update_user_permissions_request** | [**UpdateUserPermissionsRequest**](UpdateUserPermissionsRequest.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful response | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/sailpoint/cc/exceptions.py b/sailpoint/cc/exceptions.py new file mode 100644 index 000000000..484571b3e --- /dev/null +++ b/sailpoint/cc/exceptions.py @@ -0,0 +1,175 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +class OpenApiException(Exception): + """The base exception class for all OpenAPIExceptions""" + + +class ApiTypeError(OpenApiException, TypeError): + + def __init__(self, + msg, + path_to_item=None, + valid_classes=None, + key_type=None) -> None: + """ Raises an exception for TypeErrors + + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (list): a list of keys an indices to get to the + current_item + None if unset + valid_classes (tuple): the primitive classes that current item + should be an instance of + None if unset + key_type (bool): False if our value is a value in a dict + True if it is a key in a dict + False if our item is an item in a list + None if unset + """ + self.path_to_item = path_to_item + self.valid_classes = valid_classes + self.key_type = key_type + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiTypeError, self).__init__(full_msg) + + +class ApiValueError(OpenApiException, ValueError): + + def __init__(self, msg, path_to_item=None) -> None: + """ + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (list) the path to the exception in the + received_data dict. None if unset + """ + + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiValueError, self).__init__(full_msg) + + +class ApiAttributeError(OpenApiException, AttributeError): + + def __init__(self, msg, path_to_item=None) -> None: + """ + Raised when an attribute reference or assignment fails. + + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (None/list) the path to the exception in the + received_data dict + """ + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiAttributeError, self).__init__(full_msg) + + +class ApiKeyError(OpenApiException, KeyError): + + def __init__(self, msg, path_to_item=None) -> None: + """ + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (None/list) the path to the exception in the + received_data dict + """ + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiKeyError, self).__init__(full_msg) + + +class ApiException(OpenApiException): + + def __init__(self, status=None, reason=None, http_resp=None) -> None: + if http_resp: + self.status = http_resp.status + self.reason = http_resp.reason + self.body = http_resp.data + self.headers = http_resp.getheaders() + else: + self.status = status + self.reason = reason + self.body = None + self.headers = None + + def __str__(self): + """Custom error messages for exception""" + error_message = "({0})\n"\ + "Reason: {1}\n".format(self.status, self.reason) + if self.headers: + error_message += "HTTP response headers: {0}\n".format( + self.headers) + + if self.body: + error_message += "HTTP response body: {0}\n".format(self.body) + + return error_message + + +class BadRequestException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None) -> None: + super(BadRequestException, self).__init__(status, reason, http_resp) + + +class NotFoundException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None) -> None: + super(NotFoundException, self).__init__(status, reason, http_resp) + + +class UnauthorizedException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None) -> None: + super(UnauthorizedException, self).__init__(status, reason, http_resp) + + +class ForbiddenException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None) -> None: + super(ForbiddenException, self).__init__(status, reason, http_resp) + + +class ServiceException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None) -> None: + super(ServiceException, self).__init__(status, reason, http_resp) + + +def render_path(path_to_item): + """Returns a string representation of a path""" + result = "" + for pth in path_to_item: + if isinstance(pth, int): + result += "[{0}]".format(pth) + else: + result += "['{0}']".format(pth) + return result diff --git a/sailpoint/cc/models/__init__.py b/sailpoint/cc/models/__init__.py new file mode 100644 index 000000000..7ecbb4719 --- /dev/null +++ b/sailpoint/cc/models/__init__.py @@ -0,0 +1,35 @@ +# coding: utf-8 + +# flake8: noqa +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +# import models into model package +from cc.models.create_application_request import CreateApplicationRequest +from cc.models.create_connector_request import CreateConnectorRequest +from cc.models.get_identity200_response import GetIdentity200Response +from cc.models.get_identity200_response_auth import GetIdentity200ResponseAuth +from cc.models.get_identity200_response_org import GetIdentity200ResponseOrg +from cc.models.import_connector_config_request import ImportConnectorConfigRequest +from cc.models.list_accounts200_response_inner import ListAccounts200ResponseInner +from cc.models.list_accounts200_response_inner_password_change_result import ListAccounts200ResponseInnerPasswordChangeResult +from cc.models.list_applications200_response_inner import ListApplications200ResponseInner +from cc.models.list_applications200_response_inner_account_service_policies_inner import ListApplications200ResponseInnerAccountServicePoliciesInner +from cc.models.list_applications200_response_inner_app_profiles_inner import ListApplications200ResponseInnerAppProfilesInner +from cc.models.list_applications200_response_inner_health import ListApplications200ResponseInnerHealth +from cc.models.list_applications200_response_inner_owner import ListApplications200ResponseInnerOwner +from cc.models.list_connectors200_response import ListConnectors200Response +from cc.models.list_connectors200_response_items_inner import ListConnectors200ResponseItemsInner +from cc.models.load_accounts_request import LoadAccountsRequest +from cc.models.refresh_identities_request import RefreshIdentitiesRequest +from cc.models.refresh_identities_request_refresh_args import RefreshIdentitiesRequestRefreshArgs +from cc.models.update_application_request import UpdateApplicationRequest +from cc.models.update_user_permissions_request import UpdateUserPermissionsRequest diff --git a/sailpoint/cc/models/create_application_request.py b/sailpoint/cc/models/create_application_request.py new file mode 100644 index 000000000..3bd497aea --- /dev/null +++ b/sailpoint/cc/models/create_application_request.py @@ -0,0 +1,69 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional +from pydantic import BaseModel, StrictStr + + +class CreateApplicationRequest(BaseModel): + """ + CreateApplicationRequest + """ + name: Optional[StrictStr] = None + description: Optional[StrictStr] = None + __properties = ["name", "description"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> CreateApplicationRequest: + """Create an instance of CreateApplicationRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> CreateApplicationRequest: + """Create an instance of CreateApplicationRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return CreateApplicationRequest.parse_obj(obj) + + _obj = CreateApplicationRequest.parse_obj({ + "name": + obj.get("name"), + "description": + obj.get("description") + }) + return _obj diff --git a/sailpoint/cc/models/create_connector_request.py b/sailpoint/cc/models/create_connector_request.py new file mode 100644 index 000000000..c1b523cb8 --- /dev/null +++ b/sailpoint/cc/models/create_connector_request.py @@ -0,0 +1,80 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional +from pydantic import BaseModel, Field, StrictBool, StrictStr + + +class CreateConnectorRequest(BaseModel): + """ + CreateConnectorRequest + """ + name: Optional[StrictStr] = None + description: Optional[StrictStr] = None + class_name: Optional[StrictStr] = Field(None, alias="className") + direct_connect: Optional[StrictBool] = Field(None, alias="directConnect") + status: Optional[StrictStr] = None + __properties = [ + "name", "description", "className", "directConnect", "status" + ] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> CreateConnectorRequest: + """Create an instance of CreateConnectorRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> CreateConnectorRequest: + """Create an instance of CreateConnectorRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return CreateConnectorRequest.parse_obj(obj) + + _obj = CreateConnectorRequest.parse_obj({ + "name": + obj.get("name"), + "description": + obj.get("description"), + "class_name": + obj.get("className"), + "direct_connect": + obj.get("directConnect"), + "status": + obj.get("status") + }) + return _obj diff --git a/sailpoint/cc/models/get_identity200_response.py b/sailpoint/cc/models/get_identity200_response.py new file mode 100644 index 000000000..50e9232f9 --- /dev/null +++ b/sailpoint/cc/models/get_identity200_response.py @@ -0,0 +1,221 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Any, Dict, List, Optional, Union +from pydantic import BaseModel, Field, StrictBool, StrictFloat, StrictInt, StrictStr, conlist +from cc.models.get_identity200_response_auth import GetIdentity200ResponseAuth +from cc.models.get_identity200_response_org import GetIdentity200ResponseOrg + + +class GetIdentity200Response(BaseModel): + """ + GetIdentity200Response + """ + id: Optional[StrictStr] = None + alias: Optional[StrictStr] = None + uid: Optional[StrictStr] = None + name: Optional[StrictStr] = None + display_name: Optional[StrictStr] = Field(None, alias="displayName") + uuid: Optional[StrictStr] = None + encryption_key: Optional[Dict[str, Any]] = Field(None, + alias="encryptionKey") + encryption_check: Optional[Dict[str, Any]] = Field(None, + alias="encryptionCheck") + status: Optional[StrictStr] = None + pending: Optional[StrictBool] = None + password_reset_since_last_login: Optional[StrictBool] = Field( + None, alias="passwordResetSinceLastLogin") + usage_cert_attested: Optional[Dict[str, + Any]] = Field(None, + alias="usageCertAttested") + user_flags: Optional[Dict[str, Any]] = Field(None, alias="userFlags") + enabled: Optional[StrictBool] = None + alt_auth_via: Optional[StrictStr] = Field(None, alias="altAuthVia") + alt_auth_via_integration_data: Optional[Dict[str, Any]] = Field( + None, alias="altAuthViaIntegrationData") + kba_answers: Optional[Union[StrictFloat, + StrictInt]] = Field(None, alias="kbaAnswers") + disable_password_reset: Optional[StrictBool] = Field( + None, alias="disablePasswordReset") + pta_source_id: Optional[Dict[str, Any]] = Field(None, alias="ptaSourceId") + supports_password_push: Optional[StrictBool] = Field( + None, alias="supportsPasswordPush") + attributes: Optional[Dict[str, Any]] = None + external_id: Optional[StrictStr] = Field(None, alias="externalId") + role: Optional[conlist(Dict[str, Any])] = None + phone: Optional[Dict[str, Any]] = None + email: Optional[StrictStr] = None + personal_email: Optional[Dict[str, Any]] = Field(None, + alias="personalEmail") + employee_number: Optional[Dict[str, Any]] = Field(None, + alias="employeeNumber") + risk_score: Optional[Union[StrictFloat, + StrictInt]] = Field(None, alias="riskScore") + feature_flags: Optional[Dict[str, Any]] = Field(None, alias="featureFlags") + feature: Optional[conlist(StrictStr)] = None + org_encryption_key: Optional[StrictStr] = Field(None, + alias="orgEncryptionKey") + org_encryption_key_id: Optional[StrictStr] = Field( + None, alias="orgEncryptionKeyId") + meta: Optional[Dict[str, Any]] = None + org: Optional[GetIdentity200ResponseOrg] = None + step_up_auth: Optional[StrictBool] = Field(None, alias="stepUpAuth") + bx_install_prompted: Optional[StrictBool] = Field( + None, alias="bxInstallPrompted") + federated_login: Optional[StrictBool] = Field(None, alias="federatedLogin") + auth: Optional[GetIdentity200ResponseAuth] = None + on_network: Optional[StrictBool] = Field(None, alias="onNetwork") + on_trusted_geo: Optional[StrictBool] = Field(None, alias="onTrustedGeo") + login_url: Optional[StrictStr] = Field(None, alias="loginUrl") + __properties = [ + "id", "alias", "uid", "name", "displayName", "uuid", "encryptionKey", + "encryptionCheck", "status", "pending", "passwordResetSinceLastLogin", + "usageCertAttested", "userFlags", "enabled", "altAuthVia", + "altAuthViaIntegrationData", "kbaAnswers", "disablePasswordReset", + "ptaSourceId", "supportsPasswordPush", "attributes", "externalId", + "role", "phone", "email", "personalEmail", "employeeNumber", + "riskScore", "featureFlags", "feature", "orgEncryptionKey", + "orgEncryptionKeyId", "meta", "org", "stepUpAuth", "bxInstallPrompted", + "federatedLogin", "auth", "onNetwork", "onTrustedGeo", "loginUrl" + ] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> GetIdentity200Response: + """Create an instance of GetIdentity200Response from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of org + if self.org: + _dict['org'] = self.org.to_dict() + # override the default output from pydantic by calling `to_dict()` of auth + if self.auth: + _dict['auth'] = self.auth.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> GetIdentity200Response: + """Create an instance of GetIdentity200Response from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return GetIdentity200Response.parse_obj(obj) + + _obj = GetIdentity200Response.parse_obj({ + "id": + obj.get("id"), + "alias": + obj.get("alias"), + "uid": + obj.get("uid"), + "name": + obj.get("name"), + "display_name": + obj.get("displayName"), + "uuid": + obj.get("uuid"), + "encryption_key": + obj.get("encryptionKey"), + "encryption_check": + obj.get("encryptionCheck"), + "status": + obj.get("status"), + "pending": + obj.get("pending"), + "password_reset_since_last_login": + obj.get("passwordResetSinceLastLogin"), + "usage_cert_attested": + obj.get("usageCertAttested"), + "user_flags": + obj.get("userFlags"), + "enabled": + obj.get("enabled"), + "alt_auth_via": + obj.get("altAuthVia"), + "alt_auth_via_integration_data": + obj.get("altAuthViaIntegrationData"), + "kba_answers": + obj.get("kbaAnswers"), + "disable_password_reset": + obj.get("disablePasswordReset"), + "pta_source_id": + obj.get("ptaSourceId"), + "supports_password_push": + obj.get("supportsPasswordPush"), + "attributes": + obj.get("attributes"), + "external_id": + obj.get("externalId"), + "role": + obj.get("role"), + "phone": + obj.get("phone"), + "email": + obj.get("email"), + "personal_email": + obj.get("personalEmail"), + "employee_number": + obj.get("employeeNumber"), + "risk_score": + obj.get("riskScore"), + "feature_flags": + obj.get("featureFlags"), + "feature": + obj.get("feature"), + "org_encryption_key": + obj.get("orgEncryptionKey"), + "org_encryption_key_id": + obj.get("orgEncryptionKeyId"), + "meta": + obj.get("meta"), + "org": + GetIdentity200ResponseOrg.from_dict(obj.get("org")) + if obj.get("org") is not None else None, + "step_up_auth": + obj.get("stepUpAuth"), + "bx_install_prompted": + obj.get("bxInstallPrompted"), + "federated_login": + obj.get("federatedLogin"), + "auth": + GetIdentity200ResponseAuth.from_dict(obj.get("auth")) + if obj.get("auth") is not None else None, + "on_network": + obj.get("onNetwork"), + "on_trusted_geo": + obj.get("onTrustedGeo"), + "login_url": + obj.get("loginUrl") + }) + return _obj diff --git a/sailpoint/cc/models/get_identity200_response_auth.py b/sailpoint/cc/models/get_identity200_response_auth.py new file mode 100644 index 000000000..065986ba3 --- /dev/null +++ b/sailpoint/cc/models/get_identity200_response_auth.py @@ -0,0 +1,69 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional +from pydantic import BaseModel, StrictStr + + +class GetIdentity200ResponseAuth(BaseModel): + """ + GetIdentity200ResponseAuth + """ + service: Optional[StrictStr] = None + encryption: Optional[StrictStr] = None + __properties = ["service", "encryption"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> GetIdentity200ResponseAuth: + """Create an instance of GetIdentity200ResponseAuth from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> GetIdentity200ResponseAuth: + """Create an instance of GetIdentity200ResponseAuth from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return GetIdentity200ResponseAuth.parse_obj(obj) + + _obj = GetIdentity200ResponseAuth.parse_obj({ + "service": + obj.get("service"), + "encryption": + obj.get("encryption") + }) + return _obj diff --git a/sailpoint/cc/models/get_identity200_response_org.py b/sailpoint/cc/models/get_identity200_response_org.py new file mode 100644 index 000000000..1a115c32d --- /dev/null +++ b/sailpoint/cc/models/get_identity200_response_org.py @@ -0,0 +1,267 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Any, Dict, List, Optional, Union +from pydantic import BaseModel, Field, StrictBool, StrictFloat, StrictInt, StrictStr, conlist + + +class GetIdentity200ResponseOrg(BaseModel): + """ + GetIdentity200ResponseOrg + """ + name: Optional[StrictStr] = None + script_name: Optional[StrictStr] = Field(None, alias="scriptName") + mode: Optional[StrictStr] = None + num_questions: Optional[Union[StrictFloat, + StrictInt]] = Field(None, + alias="numQuestions") + status: Optional[StrictStr] = None + max_registered_users: Optional[Union[StrictFloat, StrictInt]] = Field( + None, alias="maxRegisteredUsers") + pod: Optional[StrictStr] = None + pwd_reset_personal_phone: Optional[StrictBool] = Field( + None, alias="pwdResetPersonalPhone") + pwd_reset_personal_email: Optional[StrictBool] = Field( + None, alias="pwdResetPersonalEmail") + pwd_reset_kba: Optional[StrictBool] = Field(None, alias="pwdResetKba") + pwd_reset_email: Optional[StrictBool] = Field(None, alias="pwdResetEmail") + pwd_reset_duo: Optional[StrictBool] = Field(None, alias="pwdResetDuo") + pwd_reset_phone_mask: Optional[StrictBool] = Field( + None, alias="pwdResetPhoneMask") + auth_error_text: Optional[Dict[str, Any]] = Field(None, + alias="authErrorText") + strong_auth_kba: Optional[StrictBool] = Field(None, alias="strongAuthKba") + strong_auth_personal_phone: Optional[StrictBool] = Field( + None, alias="strongAuthPersonalPhone") + strong_auth_personal_email: Optional[StrictBool] = Field( + None, alias="strongAuthPersonalEmail") + integrations: Optional[conlist(Dict[str, Any])] = None + product_name: Optional[StrictStr] = Field(None, alias="productName") + kba_req_for_authn: Optional[Union[StrictFloat, StrictInt]] = Field( + None, alias="kbaReqForAuthn") + kba_req_answers: Optional[Union[StrictFloat, + StrictInt]] = Field(None, + alias="kbaReqAnswers") + lockout_attempt_threshold: Optional[Union[StrictFloat, StrictInt]] = Field( + None, alias="lockoutAttemptThreshold") + lockout_time_minutes: Optional[Union[StrictFloat, StrictInt]] = Field( + None, alias="lockoutTimeMinutes") + usage_cert_required: Optional[StrictBool] = Field( + None, alias="usageCertRequired") + admin_strong_auth_required: Optional[StrictBool] = Field( + None, alias="adminStrongAuthRequired") + enable_external_password_change: Optional[StrictBool] = Field( + None, alias="enableExternalPasswordChange") + enable_password_replay: Optional[StrictBool] = Field( + None, alias="enablePasswordReplay") + enable_automatic_password_replay: Optional[StrictBool] = Field( + None, alias="enableAutomaticPasswordReplay") + notify_authentication_setting_change: Optional[StrictBool] = Field( + None, alias="notifyAuthenticationSettingChange") + netmasks: Optional[Dict[str, Any]] = None + country_codes: Optional[Dict[str, Any]] = Field(None, alias="countryCodes") + white_list: Optional[StrictBool] = Field(None, alias="whiteList") + username_empty_text: Optional[Dict[str, + Any]] = Field(None, + alias="usernameEmptyText") + username_label: Optional[Dict[str, Any]] = Field(None, + alias="usernameLabel") + enable_automation_generation: Optional[StrictBool] = Field( + None, alias="enableAutomationGeneration") + email_test_mode: Optional[StrictBool] = Field(None, alias="emailTestMode") + email_test_address: Optional[StrictStr] = Field(None, + alias="emailTestAddress") + org_type: Optional[StrictStr] = Field(None, alias="orgType") + password_replay_state: Optional[StrictStr] = Field( + None, alias="passwordReplayState") + system_notification_config: Optional[StrictStr] = Field( + None, alias="systemNotificationConfig") + redirect_patterns: Optional[StrictStr] = Field(None, + alias="redirectPatterns") + max_cluster_debug_hours: Optional[StrictStr] = Field( + None, alias="maxClusterDebugHours") + brand_name: Optional[StrictStr] = Field(None, alias="brandName") + logo: Optional[Dict[str, Any]] = None + email_from_address: Optional[Dict[str, + Any]] = Field(None, + alias="emailFromAddress") + standard_logo_url: Optional[Dict[str, + Any]] = Field(None, + alias="standardLogoUrl") + narrow_logo_url: Optional[Dict[str, Any]] = Field(None, + alias="narrowLogoUrl") + action_button_color: Optional[StrictStr] = Field(None, + alias="actionButtonColor") + active_link_color: Optional[StrictStr] = Field(None, + alias="activeLinkColor") + navigation_color: Optional[StrictStr] = Field(None, + alias="navigationColor") + __properties = [ + "name", "scriptName", "mode", "numQuestions", "status", + "maxRegisteredUsers", "pod", "pwdResetPersonalPhone", + "pwdResetPersonalEmail", "pwdResetKba", "pwdResetEmail", "pwdResetDuo", + "pwdResetPhoneMask", "authErrorText", "strongAuthKba", + "strongAuthPersonalPhone", "strongAuthPersonalEmail", "integrations", + "productName", "kbaReqForAuthn", "kbaReqAnswers", + "lockoutAttemptThreshold", "lockoutTimeMinutes", "usageCertRequired", + "adminStrongAuthRequired", "enableExternalPasswordChange", + "enablePasswordReplay", "enableAutomaticPasswordReplay", + "notifyAuthenticationSettingChange", "netmasks", "countryCodes", + "whiteList", "usernameEmptyText", "usernameLabel", + "enableAutomationGeneration", "emailTestMode", "emailTestAddress", + "orgType", "passwordReplayState", "systemNotificationConfig", + "redirectPatterns", "maxClusterDebugHours", "brandName", "logo", + "emailFromAddress", "standardLogoUrl", "narrowLogoUrl", + "actionButtonColor", "activeLinkColor", "navigationColor" + ] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> GetIdentity200ResponseOrg: + """Create an instance of GetIdentity200ResponseOrg from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> GetIdentity200ResponseOrg: + """Create an instance of GetIdentity200ResponseOrg from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return GetIdentity200ResponseOrg.parse_obj(obj) + + _obj = GetIdentity200ResponseOrg.parse_obj({ + "name": + obj.get("name"), + "script_name": + obj.get("scriptName"), + "mode": + obj.get("mode"), + "num_questions": + obj.get("numQuestions"), + "status": + obj.get("status"), + "max_registered_users": + obj.get("maxRegisteredUsers"), + "pod": + obj.get("pod"), + "pwd_reset_personal_phone": + obj.get("pwdResetPersonalPhone"), + "pwd_reset_personal_email": + obj.get("pwdResetPersonalEmail"), + "pwd_reset_kba": + obj.get("pwdResetKba"), + "pwd_reset_email": + obj.get("pwdResetEmail"), + "pwd_reset_duo": + obj.get("pwdResetDuo"), + "pwd_reset_phone_mask": + obj.get("pwdResetPhoneMask"), + "auth_error_text": + obj.get("authErrorText"), + "strong_auth_kba": + obj.get("strongAuthKba"), + "strong_auth_personal_phone": + obj.get("strongAuthPersonalPhone"), + "strong_auth_personal_email": + obj.get("strongAuthPersonalEmail"), + "integrations": + obj.get("integrations"), + "product_name": + obj.get("productName"), + "kba_req_for_authn": + obj.get("kbaReqForAuthn"), + "kba_req_answers": + obj.get("kbaReqAnswers"), + "lockout_attempt_threshold": + obj.get("lockoutAttemptThreshold"), + "lockout_time_minutes": + obj.get("lockoutTimeMinutes"), + "usage_cert_required": + obj.get("usageCertRequired"), + "admin_strong_auth_required": + obj.get("adminStrongAuthRequired"), + "enable_external_password_change": + obj.get("enableExternalPasswordChange"), + "enable_password_replay": + obj.get("enablePasswordReplay"), + "enable_automatic_password_replay": + obj.get("enableAutomaticPasswordReplay"), + "notify_authentication_setting_change": + obj.get("notifyAuthenticationSettingChange"), + "netmasks": + obj.get("netmasks"), + "country_codes": + obj.get("countryCodes"), + "white_list": + obj.get("whiteList"), + "username_empty_text": + obj.get("usernameEmptyText"), + "username_label": + obj.get("usernameLabel"), + "enable_automation_generation": + obj.get("enableAutomationGeneration"), + "email_test_mode": + obj.get("emailTestMode"), + "email_test_address": + obj.get("emailTestAddress"), + "org_type": + obj.get("orgType"), + "password_replay_state": + obj.get("passwordReplayState"), + "system_notification_config": + obj.get("systemNotificationConfig"), + "redirect_patterns": + obj.get("redirectPatterns"), + "max_cluster_debug_hours": + obj.get("maxClusterDebugHours"), + "brand_name": + obj.get("brandName"), + "logo": + obj.get("logo"), + "email_from_address": + obj.get("emailFromAddress"), + "standard_logo_url": + obj.get("standardLogoUrl"), + "narrow_logo_url": + obj.get("narrowLogoUrl"), + "action_button_color": + obj.get("actionButtonColor"), + "active_link_color": + obj.get("activeLinkColor"), + "navigation_color": + obj.get("navigationColor") + }) + return _obj diff --git a/sailpoint/cc/models/import_connector_config_request.py b/sailpoint/cc/models/import_connector_config_request.py new file mode 100644 index 000000000..57d0fb189 --- /dev/null +++ b/sailpoint/cc/models/import_connector_config_request.py @@ -0,0 +1,67 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional, Union +from pydantic import BaseModel, Field, StrictBytes, StrictStr + + +class ImportConnectorConfigRequest(BaseModel): + """ + ImportConnectorConfigRequest + """ + file: Optional[Union[StrictBytes, StrictStr]] = Field( + None, + description= + "This is the connector config zip bundle which gets uploaded.") + __properties = ["file"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ImportConnectorConfigRequest: + """Create an instance of ImportConnectorConfigRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ImportConnectorConfigRequest: + """Create an instance of ImportConnectorConfigRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ImportConnectorConfigRequest.parse_obj(obj) + + _obj = ImportConnectorConfigRequest.parse_obj( + {"file": obj.get("file")}) + return _obj diff --git a/sailpoint/cc/models/list_accounts200_response_inner.py b/sailpoint/cc/models/list_accounts200_response_inner.py new file mode 100644 index 000000000..6e1478857 --- /dev/null +++ b/sailpoint/cc/models/list_accounts200_response_inner.py @@ -0,0 +1,156 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Any, Dict, List, Optional +from pydantic import BaseModel, Field, StrictBool, StrictInt, StrictStr, conlist +from cc.models.list_accounts200_response_inner_password_change_result import ListAccounts200ResponseInnerPasswordChangeResult + + +class ListAccounts200ResponseInner(BaseModel): + """ + ListAccounts200ResponseInner + """ + id: Optional[StrictStr] = None + type: Optional[StrictStr] = None + display_name: Optional[StrictStr] = Field(None, alias="displayName") + username: Optional[StrictStr] = None + password_required: Optional[StrictBool] = Field(None, + alias="passwordRequired") + password_provided: Optional[StrictBool] = Field(None, + alias="passwordProvided") + apps: Optional[conlist(Dict[str, Any])] = None + sso_method: Optional[StrictStr] = Field(None, alias="ssoMethod") + id_encryption: Optional[StrictStr] = Field(None, alias="idEncryption") + password_encryption: Optional[StrictStr] = Field( + None, alias="passwordEncryption") + last_passwd_change: Optional[StrictStr] = Field(None, + alias="lastPasswdChange") + service_name: Optional[StrictStr] = Field(None, alias="serviceName") + date_disabled: Optional[StrictStr] = Field(None, alias="dateDisabled") + account_service_id: Optional[StrictInt] = Field(None, + alias="accountServiceId") + service_id: Optional[StrictInt] = Field(None, alias="serviceId") + pending_password_request_id: Optional[StrictStr] = Field( + None, alias="pendingPasswordRequestId") + password_change_status: Optional[StrictStr] = Field( + None, alias="passwordChangeStatus") + password_change_result: Optional[ + ListAccounts200ResponseInnerPasswordChangeResult] = Field( + None, alias="passwordChangeResult") + __properties = [ + "id", "type", "displayName", "username", "passwordRequired", + "passwordProvided", "apps", "ssoMethod", "idEncryption", + "passwordEncryption", "lastPasswdChange", "serviceName", + "dateDisabled", "accountServiceId", "serviceId", + "pendingPasswordRequestId", "passwordChangeStatus", + "passwordChangeResult" + ] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ListAccounts200ResponseInner: + """Create an instance of ListAccounts200ResponseInner from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of password_change_result + if self.password_change_result: + _dict[ + 'passwordChangeResult'] = self.password_change_result.to_dict( + ) + # set to None if last_passwd_change (nullable) is None + # and __fields_set__ contains the field + if self.last_passwd_change is None and "last_passwd_change" in self.__fields_set__: + _dict['lastPasswdChange'] = None + + # set to None if date_disabled (nullable) is None + # and __fields_set__ contains the field + if self.date_disabled is None and "date_disabled" in self.__fields_set__: + _dict['dateDisabled'] = None + + # set to None if pending_password_request_id (nullable) is None + # and __fields_set__ contains the field + if self.pending_password_request_id is None and "pending_password_request_id" in self.__fields_set__: + _dict['pendingPasswordRequestId'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ListAccounts200ResponseInner: + """Create an instance of ListAccounts200ResponseInner from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ListAccounts200ResponseInner.parse_obj(obj) + + _obj = ListAccounts200ResponseInner.parse_obj({ + "id": + obj.get("id"), + "type": + obj.get("type"), + "display_name": + obj.get("displayName"), + "username": + obj.get("username"), + "password_required": + obj.get("passwordRequired"), + "password_provided": + obj.get("passwordProvided"), + "apps": + obj.get("apps"), + "sso_method": + obj.get("ssoMethod"), + "id_encryption": + obj.get("idEncryption"), + "password_encryption": + obj.get("passwordEncryption"), + "last_passwd_change": + obj.get("lastPasswdChange"), + "service_name": + obj.get("serviceName"), + "date_disabled": + obj.get("dateDisabled"), + "account_service_id": + obj.get("accountServiceId"), + "service_id": + obj.get("serviceId"), + "pending_password_request_id": + obj.get("pendingPasswordRequestId"), + "password_change_status": + obj.get("passwordChangeStatus"), + "password_change_result": + ListAccounts200ResponseInnerPasswordChangeResult.from_dict( + obj.get("passwordChangeResult")) + if obj.get("passwordChangeResult") is not None else None + }) + return _obj diff --git a/sailpoint/cc/models/list_accounts200_response_inner_password_change_result.py b/sailpoint/cc/models/list_accounts200_response_inner_password_change_result.py new file mode 100644 index 000000000..3ec1a223c --- /dev/null +++ b/sailpoint/cc/models/list_accounts200_response_inner_password_change_result.py @@ -0,0 +1,70 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional +from pydantic import BaseModel, Field, StrictStr + + +class ListAccounts200ResponseInnerPasswordChangeResult(BaseModel): + """ + ListAccounts200ResponseInnerPasswordChangeResult + """ + completion_status: Optional[StrictStr] = Field(None, + alias="completionStatus") + __properties = ["completionStatus"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json( + cls, + json_str: str) -> ListAccounts200ResponseInnerPasswordChangeResult: + """Create an instance of ListAccounts200ResponseInnerPasswordChangeResult from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict( + cls, + obj: dict) -> ListAccounts200ResponseInnerPasswordChangeResult: + """Create an instance of ListAccounts200ResponseInnerPasswordChangeResult from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ListAccounts200ResponseInnerPasswordChangeResult.parse_obj( + obj) + + _obj = ListAccounts200ResponseInnerPasswordChangeResult.parse_obj( + {"completion_status": obj.get("completionStatus")}) + return _obj diff --git a/sailpoint/cc/models/list_applications200_response_inner.py b/sailpoint/cc/models/list_applications200_response_inner.py new file mode 100644 index 000000000..93516d8e6 --- /dev/null +++ b/sailpoint/cc/models/list_applications200_response_inner.py @@ -0,0 +1,291 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Any, Dict, List, Optional, Union +from pydantic import BaseModel, Field, StrictBool, StrictFloat, StrictInt, StrictStr, conlist +from cc.models.list_applications200_response_inner_account_service_policies_inner import ListApplications200ResponseInnerAccountServicePoliciesInner +from cc.models.list_applications200_response_inner_app_profiles_inner import ListApplications200ResponseInnerAppProfilesInner +from cc.models.list_applications200_response_inner_health import ListApplications200ResponseInnerHealth +from cc.models.list_applications200_response_inner_owner import ListApplications200ResponseInnerOwner + + +class ListApplications200ResponseInner(BaseModel): + """ + ListApplications200ResponseInner + """ + id: Optional[StrictStr] = None + app_id: Optional[StrictStr] = Field(None, alias="appId") + service_id: Optional[StrictStr] = Field(None, alias="serviceId") + service_app_id: Optional[StrictStr] = Field(None, alias="serviceAppId") + name: Optional[StrictStr] = None + description: Optional[StrictStr] = None + app_center_enabled: Optional[StrictBool] = Field(None, + alias="appCenterEnabled") + provision_request_enabled: Optional[StrictBool] = Field( + None, alias="provisionRequestEnabled") + control_type: Optional[StrictStr] = Field(None, alias="controlType") + mobile: Optional[StrictBool] = None + private_app: Optional[StrictBool] = Field(None, alias="privateApp") + script_name: Optional[StrictStr] = Field(None, alias="scriptName") + status: Optional[StrictStr] = None + icon: Optional[StrictStr] = None + health: Optional[ListApplications200ResponseInnerHealth] = None + enable_sso: Optional[StrictBool] = Field(None, alias="enableSso") + sso_method: Optional[StrictStr] = Field(None, alias="ssoMethod") + has_links: Optional[StrictBool] = Field(None, alias="hasLinks") + has_automations: Optional[StrictBool] = Field(None, alias="hasAutomations") + step_up_auth_data: Optional[Dict[str, Any]] = Field(None, + alias="stepUpAuthData") + step_up_auth_type: Optional[StrictStr] = Field(None, + alias="stepUpAuthType") + usage_analytics: Optional[StrictBool] = Field(None, alias="usageAnalytics") + usage_cert_required: Optional[StrictBool] = Field( + None, alias="usageCertRequired") + usage_cert_text: Optional[Dict[str, Any]] = Field(None, + alias="usageCertText") + launchpad_enabled: Optional[StrictBool] = Field(None, + alias="launchpadEnabled") + password_managed: Optional[StrictBool] = Field(None, + alias="passwordManaged") + owner: Optional[ListApplications200ResponseInnerOwner] = None + date_created: Optional[Union[StrictFloat, + StrictInt]] = Field(None, alias="dateCreated") + last_updated: Optional[Union[StrictFloat, + StrictInt]] = Field(None, alias="lastUpdated") + default_access_profile: Optional[Dict[str, Any]] = Field( + None, alias="defaultAccessProfile") + service: Optional[StrictStr] = None + selected_sso_method: Optional[StrictStr] = Field(None, + alias="selectedSsoMethod") + supported_sso_methods: Optional[Union[StrictFloat, StrictInt]] = Field( + None, alias="supportedSsoMethods") + off_network_blocked_roles: Optional[Dict[str, Any]] = Field( + None, alias="offNetworkBlockedRoles") + supported_off_network: Optional[StrictStr] = Field( + None, alias="supportedOffNetwork") + account_service_id: Optional[Union[StrictFloat, StrictInt]] = Field( + None, alias="accountServiceId") + launcher_count: Optional[Union[StrictFloat, + StrictInt]] = Field(None, + alias="launcherCount") + account_service_name: Optional[StrictStr] = Field( + None, alias="accountServiceName") + account_service_external_id: Optional[StrictStr] = Field( + None, alias="accountServiceExternalId") + account_service_match_all_accounts: Optional[StrictBool] = Field( + None, alias="accountServiceMatchAllAccounts") + external_id: Optional[StrictStr] = Field(None, alias="externalId") + account_service_use_for_password_management: Optional[StrictBool] = Field( + None, alias="accountServiceUseForPasswordManagement") + account_service_policy_id: Optional[StrictStr] = Field( + None, alias="accountServicePolicyId") + account_service_policy_name: Optional[StrictStr] = Field( + None, alias="accountServicePolicyName") + require_strong_authn: Optional[StrictBool] = Field( + None, alias="requireStrongAuthn") + account_service_policies: Optional[conlist( + ListApplications200ResponseInnerAccountServicePoliciesInner)] = Field( + None, alias="accountServicePolicies") + xsd_version: Optional[StrictStr] = Field(None, alias="xsdVersion") + app_profiles: Optional[conlist( + ListApplications200ResponseInnerAppProfilesInner)] = Field( + None, alias="appProfiles") + password_service_id: Optional[Union[StrictFloat, StrictInt]] = Field( + None, alias="passwordServiceId") + access_profile_ids: Optional[Dict[str, + Any]] = Field(None, + alias="accessProfileIds") + __properties = [ + "id", "appId", "serviceId", "serviceAppId", "name", "description", + "appCenterEnabled", "provisionRequestEnabled", "controlType", "mobile", + "privateApp", "scriptName", "status", "icon", "health", "enableSso", + "ssoMethod", "hasLinks", "hasAutomations", "stepUpAuthData", + "stepUpAuthType", "usageAnalytics", "usageCertRequired", + "usageCertText", "launchpadEnabled", "passwordManaged", "owner", + "dateCreated", "lastUpdated", "defaultAccessProfile", "service", + "selectedSsoMethod", "supportedSsoMethods", "offNetworkBlockedRoles", + "supportedOffNetwork", "accountServiceId", "launcherCount", + "accountServiceName", "accountServiceExternalId", + "accountServiceMatchAllAccounts", "externalId", + "accountServiceUseForPasswordManagement", "accountServicePolicyId", + "accountServicePolicyName", "requireStrongAuthn", + "accountServicePolicies", "xsdVersion", "appProfiles", + "passwordServiceId", "accessProfileIds" + ] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ListApplications200ResponseInner: + """Create an instance of ListApplications200ResponseInner from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of health + if self.health: + _dict['health'] = self.health.to_dict() + # override the default output from pydantic by calling `to_dict()` of owner + if self.owner: + _dict['owner'] = self.owner.to_dict() + # override the default output from pydantic by calling `to_dict()` of each item in account_service_policies (list) + _items = [] + if self.account_service_policies: + for _item in self.account_service_policies: + if _item: + _items.append(_item.to_dict()) + _dict['accountServicePolicies'] = _items + # override the default output from pydantic by calling `to_dict()` of each item in app_profiles (list) + _items = [] + if self.app_profiles: + for _item in self.app_profiles: + if _item: + _items.append(_item.to_dict()) + _dict['appProfiles'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ListApplications200ResponseInner: + """Create an instance of ListApplications200ResponseInner from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ListApplications200ResponseInner.parse_obj(obj) + + _obj = ListApplications200ResponseInner.parse_obj({ + "id": + obj.get("id"), + "app_id": + obj.get("appId"), + "service_id": + obj.get("serviceId"), + "service_app_id": + obj.get("serviceAppId"), + "name": + obj.get("name"), + "description": + obj.get("description"), + "app_center_enabled": + obj.get("appCenterEnabled"), + "provision_request_enabled": + obj.get("provisionRequestEnabled"), + "control_type": + obj.get("controlType"), + "mobile": + obj.get("mobile"), + "private_app": + obj.get("privateApp"), + "script_name": + obj.get("scriptName"), + "status": + obj.get("status"), + "icon": + obj.get("icon"), + "health": + ListApplications200ResponseInnerHealth.from_dict(obj.get("health")) + if obj.get("health") is not None else None, + "enable_sso": + obj.get("enableSso"), + "sso_method": + obj.get("ssoMethod"), + "has_links": + obj.get("hasLinks"), + "has_automations": + obj.get("hasAutomations"), + "step_up_auth_data": + obj.get("stepUpAuthData"), + "step_up_auth_type": + obj.get("stepUpAuthType"), + "usage_analytics": + obj.get("usageAnalytics"), + "usage_cert_required": + obj.get("usageCertRequired"), + "usage_cert_text": + obj.get("usageCertText"), + "launchpad_enabled": + obj.get("launchpadEnabled"), + "password_managed": + obj.get("passwordManaged"), + "owner": + ListApplications200ResponseInnerOwner.from_dict(obj.get("owner")) + if obj.get("owner") is not None else None, + "date_created": + obj.get("dateCreated"), + "last_updated": + obj.get("lastUpdated"), + "default_access_profile": + obj.get("defaultAccessProfile"), + "service": + obj.get("service"), + "selected_sso_method": + obj.get("selectedSsoMethod"), + "supported_sso_methods": + obj.get("supportedSsoMethods"), + "off_network_blocked_roles": + obj.get("offNetworkBlockedRoles"), + "supported_off_network": + obj.get("supportedOffNetwork"), + "account_service_id": + obj.get("accountServiceId"), + "launcher_count": + obj.get("launcherCount"), + "account_service_name": + obj.get("accountServiceName"), + "account_service_external_id": + obj.get("accountServiceExternalId"), + "account_service_match_all_accounts": + obj.get("accountServiceMatchAllAccounts"), + "external_id": + obj.get("externalId"), + "account_service_use_for_password_management": + obj.get("accountServiceUseForPasswordManagement"), + "account_service_policy_id": + obj.get("accountServicePolicyId"), + "account_service_policy_name": + obj.get("accountServicePolicyName"), + "require_strong_authn": + obj.get("requireStrongAuthn"), + "account_service_policies": [ + ListApplications200ResponseInnerAccountServicePoliciesInner. + from_dict(_item) for _item in obj.get("accountServicePolicies") + ] if obj.get("accountServicePolicies") is not None else None, + "xsd_version": + obj.get("xsdVersion"), + "app_profiles": [ + ListApplications200ResponseInnerAppProfilesInner.from_dict( + _item) for _item in obj.get("appProfiles") + ] if obj.get("appProfiles") is not None else None, + "password_service_id": + obj.get("passwordServiceId"), + "access_profile_ids": + obj.get("accessProfileIds") + }) + return _obj diff --git a/sailpoint/cc/models/list_applications200_response_inner_account_service_policies_inner.py b/sailpoint/cc/models/list_applications200_response_inner_account_service_policies_inner.py new file mode 100644 index 000000000..b5876ff44 --- /dev/null +++ b/sailpoint/cc/models/list_applications200_response_inner_account_service_policies_inner.py @@ -0,0 +1,75 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Any, Dict, Optional +from pydantic import BaseModel, Field, StrictStr + + +class ListApplications200ResponseInnerAccountServicePoliciesInner(BaseModel): + """ + ListApplications200ResponseInnerAccountServicePoliciesInner + """ + policy_id: Optional[StrictStr] = Field(None, alias="policyId") + policy_name: Optional[StrictStr] = Field(None, alias="policyName") + selectors: Optional[Dict[str, Any]] = None + __properties = ["policyId", "policyName", "selectors"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json( + cls, json_str: str + ) -> ListApplications200ResponseInnerAccountServicePoliciesInner: + """Create an instance of ListApplications200ResponseInnerAccountServicePoliciesInner from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict( + cls, obj: dict + ) -> ListApplications200ResponseInnerAccountServicePoliciesInner: + """Create an instance of ListApplications200ResponseInnerAccountServicePoliciesInner from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ListApplications200ResponseInnerAccountServicePoliciesInner.parse_obj( + obj) + + _obj = ListApplications200ResponseInnerAccountServicePoliciesInner.parse_obj( + { + "policy_id": obj.get("policyId"), + "policy_name": obj.get("policyName"), + "selectors": obj.get("selectors") + }) + return _obj diff --git a/sailpoint/cc/models/list_applications200_response_inner_app_profiles_inner.py b/sailpoint/cc/models/list_applications200_response_inner_app_profiles_inner.py new file mode 100644 index 000000000..3048e20fb --- /dev/null +++ b/sailpoint/cc/models/list_applications200_response_inner_app_profiles_inner.py @@ -0,0 +1,83 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional, Union +from pydantic import BaseModel, Field, StrictFloat, StrictInt, StrictStr + + +class ListApplications200ResponseInnerAppProfilesInner(BaseModel): + """ + ListApplications200ResponseInnerAppProfilesInner + """ + id: Optional[Union[StrictFloat, StrictInt]] = None + filename: Optional[StrictStr] = None + created_by: Optional[StrictStr] = Field(None, alias="createdBy") + date_created: Optional[StrictStr] = Field(None, alias="dateCreated") + xsd_version: Optional[StrictStr] = Field(None, alias="xsdVersion") + __properties = ["id", "filename", "createdBy", "dateCreated", "xsdVersion"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json( + cls, + json_str: str) -> ListApplications200ResponseInnerAppProfilesInner: + """Create an instance of ListApplications200ResponseInnerAppProfilesInner from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict( + cls, + obj: dict) -> ListApplications200ResponseInnerAppProfilesInner: + """Create an instance of ListApplications200ResponseInnerAppProfilesInner from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ListApplications200ResponseInnerAppProfilesInner.parse_obj( + obj) + + _obj = ListApplications200ResponseInnerAppProfilesInner.parse_obj({ + "id": + obj.get("id"), + "filename": + obj.get("filename"), + "created_by": + obj.get("createdBy"), + "date_created": + obj.get("dateCreated"), + "xsd_version": + obj.get("xsdVersion") + }) + return _obj diff --git a/sailpoint/cc/models/list_applications200_response_inner_health.py b/sailpoint/cc/models/list_applications200_response_inner_health.py new file mode 100644 index 000000000..3658ab68d --- /dev/null +++ b/sailpoint/cc/models/list_applications200_response_inner_health.py @@ -0,0 +1,76 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional, Union +from pydantic import BaseModel, Field, StrictBool, StrictFloat, StrictInt, StrictStr + + +class ListApplications200ResponseInnerHealth(BaseModel): + """ + ListApplications200ResponseInnerHealth + """ + status: Optional[StrictStr] = None + last_changed: Optional[StrictStr] = Field(None, alias="lastChanged") + since: Optional[Union[StrictFloat, StrictInt]] = None + healthy: Optional[StrictBool] = None + __properties = ["status", "lastChanged", "since", "healthy"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, + json_str: str) -> ListApplications200ResponseInnerHealth: + """Create an instance of ListApplications200ResponseInnerHealth from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ListApplications200ResponseInnerHealth: + """Create an instance of ListApplications200ResponseInnerHealth from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ListApplications200ResponseInnerHealth.parse_obj(obj) + + _obj = ListApplications200ResponseInnerHealth.parse_obj({ + "status": + obj.get("status"), + "last_changed": + obj.get("lastChanged"), + "since": + obj.get("since"), + "healthy": + obj.get("healthy") + }) + return _obj diff --git a/sailpoint/cc/models/list_applications200_response_inner_owner.py b/sailpoint/cc/models/list_applications200_response_inner_owner.py new file mode 100644 index 000000000..2d1e70c95 --- /dev/null +++ b/sailpoint/cc/models/list_applications200_response_inner_owner.py @@ -0,0 +1,69 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional +from pydantic import BaseModel, StrictStr + + +class ListApplications200ResponseInnerOwner(BaseModel): + """ + ListApplications200ResponseInnerOwner + """ + id: Optional[StrictStr] = None + name: Optional[StrictStr] = None + __properties = ["id", "name"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ListApplications200ResponseInnerOwner: + """Create an instance of ListApplications200ResponseInnerOwner from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ListApplications200ResponseInnerOwner: + """Create an instance of ListApplications200ResponseInnerOwner from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ListApplications200ResponseInnerOwner.parse_obj(obj) + + _obj = ListApplications200ResponseInnerOwner.parse_obj({ + "id": + obj.get("id"), + "name": + obj.get("name") + }) + return _obj diff --git a/sailpoint/cc/models/list_connectors200_response.py b/sailpoint/cc/models/list_connectors200_response.py new file mode 100644 index 000000000..9d8b7478a --- /dev/null +++ b/sailpoint/cc/models/list_connectors200_response.py @@ -0,0 +1,79 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import List, Optional, Union +from pydantic import BaseModel, StrictFloat, StrictInt, conlist +from cc.models.list_connectors200_response_items_inner import ListConnectors200ResponseItemsInner + + +class ListConnectors200Response(BaseModel): + """ + ListConnectors200Response + """ + total: Optional[Union[StrictFloat, StrictInt]] = None + items: Optional[conlist(ListConnectors200ResponseItemsInner)] = None + __properties = ["total", "items"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ListConnectors200Response: + """Create an instance of ListConnectors200Response from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of each item in items (list) + _items = [] + if self.items: + for _item in self.items: + if _item: + _items.append(_item.to_dict()) + _dict['items'] = _items + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ListConnectors200Response: + """Create an instance of ListConnectors200Response from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ListConnectors200Response.parse_obj(obj) + + _obj = ListConnectors200Response.parse_obj({ + "total": + obj.get("total"), + "items": [ + ListConnectors200ResponseItemsInner.from_dict(_item) + for _item in obj.get("items") + ] if obj.get("items") is not None else None + }) + return _obj diff --git a/sailpoint/cc/models/list_connectors200_response_items_inner.py b/sailpoint/cc/models/list_connectors200_response_items_inner.py new file mode 100644 index 000000000..976d9207e --- /dev/null +++ b/sailpoint/cc/models/list_connectors200_response_items_inner.py @@ -0,0 +1,166 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Any, Dict, List, Optional +from pydantic import BaseModel, Field, StrictBool, StrictInt, StrictStr, conlist + + +class ListConnectors200ResponseItemsInner(BaseModel): + """ + ListConnectors200ResponseItemsInner + """ + application_xml: Optional[StrictStr] = Field(None, alias="applicationXml") + class_name: Optional[StrictStr] = Field(None, alias="className") + connector_metadata: Optional[Dict[str, + Any]] = Field(None, + alias="connectorMetadata") + correlation_config_xml: Optional[StrictStr] = Field( + None, alias="correlationConfigXml") + direct_connect: Optional[StrictBool] = Field(None, alias="directConnect") + file_upload: Optional[StrictBool] = Field(None, alias="fileUpload") + id: Optional[StrictInt] = None + name: Optional[StrictStr] = None + s3_location: Optional[StrictStr] = Field(None, alias="s3Location") + scope: Optional[StrictStr] = None + script_name: Optional[StrictStr] = Field(None, alias="scriptName") + source_config: Optional[StrictStr] = Field(None, alias="sourceConfig") + source_config_from: Optional[StrictStr] = Field(None, + alias="sourceConfigFrom") + source_config_xml: Optional[StrictStr] = Field(None, + alias="sourceConfigXml") + status: Optional[StrictStr] = None + translation_properties: Optional[Dict[str, Any]] = Field( + None, alias="translationProperties") + type: Optional[StrictStr] = None + uploaded_files: Optional[conlist(Dict[str, + Any])] = Field(None, + alias="uploadedFiles") + __properties = [ + "applicationXml", "className", "connectorMetadata", + "correlationConfigXml", "directConnect", "fileUpload", "id", "name", + "s3Location", "scope", "scriptName", "sourceConfig", + "sourceConfigFrom", "sourceConfigXml", "status", + "translationProperties", "type", "uploadedFiles" + ] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ListConnectors200ResponseItemsInner: + """Create an instance of ListConnectors200ResponseItemsInner from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + # set to None if application_xml (nullable) is None + # and __fields_set__ contains the field + if self.application_xml is None and "application_xml" in self.__fields_set__: + _dict['applicationXml'] = None + + # set to None if class_name (nullable) is None + # and __fields_set__ contains the field + if self.class_name is None and "class_name" in self.__fields_set__: + _dict['className'] = None + + # set to None if correlation_config_xml (nullable) is None + # and __fields_set__ contains the field + if self.correlation_config_xml is None and "correlation_config_xml" in self.__fields_set__: + _dict['correlationConfigXml'] = None + + # set to None if s3_location (nullable) is None + # and __fields_set__ contains the field + if self.s3_location is None and "s3_location" in self.__fields_set__: + _dict['s3Location'] = None + + # set to None if source_config (nullable) is None + # and __fields_set__ contains the field + if self.source_config is None and "source_config" in self.__fields_set__: + _dict['sourceConfig'] = None + + # set to None if source_config_from (nullable) is None + # and __fields_set__ contains the field + if self.source_config_from is None and "source_config_from" in self.__fields_set__: + _dict['sourceConfigFrom'] = None + + # set to None if source_config_xml (nullable) is None + # and __fields_set__ contains the field + if self.source_config_xml is None and "source_config_xml" in self.__fields_set__: + _dict['sourceConfigXml'] = None + + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ListConnectors200ResponseItemsInner: + """Create an instance of ListConnectors200ResponseItemsInner from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ListConnectors200ResponseItemsInner.parse_obj(obj) + + _obj = ListConnectors200ResponseItemsInner.parse_obj({ + "application_xml": + obj.get("applicationXml"), + "class_name": + obj.get("className"), + "connector_metadata": + obj.get("connectorMetadata"), + "correlation_config_xml": + obj.get("correlationConfigXml"), + "direct_connect": + obj.get("directConnect"), + "file_upload": + obj.get("fileUpload"), + "id": + obj.get("id"), + "name": + obj.get("name"), + "s3_location": + obj.get("s3Location"), + "scope": + obj.get("scope"), + "script_name": + obj.get("scriptName"), + "source_config": + obj.get("sourceConfig"), + "source_config_from": + obj.get("sourceConfigFrom"), + "source_config_xml": + obj.get("sourceConfigXml"), + "status": + obj.get("status"), + "translation_properties": + obj.get("translationProperties"), + "type": + obj.get("type"), + "uploaded_files": + obj.get("uploadedFiles") + }) + return _obj diff --git a/sailpoint/cc/models/load_accounts_request.py b/sailpoint/cc/models/load_accounts_request.py new file mode 100644 index 000000000..5e18e15ae --- /dev/null +++ b/sailpoint/cc/models/load_accounts_request.py @@ -0,0 +1,70 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional, Union +from pydantic import BaseModel, Field, StrictBool, StrictBytes, StrictStr + + +class LoadAccountsRequest(BaseModel): + """ + LoadAccountsRequest + """ + disable_optimization: Optional[StrictBool] = Field( + None, alias="disableOptimization") + file: Optional[Union[StrictBytes, StrictStr]] = None + __properties = ["disableOptimization", "file"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> LoadAccountsRequest: + """Create an instance of LoadAccountsRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> LoadAccountsRequest: + """Create an instance of LoadAccountsRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return LoadAccountsRequest.parse_obj(obj) + + _obj = LoadAccountsRequest.parse_obj({ + "disable_optimization": + obj.get("disableOptimization"), + "file": + obj.get("file") + }) + return _obj diff --git a/sailpoint/cc/models/refresh_identities_request.py b/sailpoint/cc/models/refresh_identities_request.py new file mode 100644 index 000000000..8d5930670 --- /dev/null +++ b/sailpoint/cc/models/refresh_identities_request.py @@ -0,0 +1,80 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional +from pydantic import BaseModel, Field, StrictStr +from cc.models.refresh_identities_request_refresh_args import RefreshIdentitiesRequestRefreshArgs + + +class RefreshIdentitiesRequest(BaseModel): + """ + RefreshIdentitiesRequest + """ + filter: Optional[StrictStr] = Field( + None, + description= + "Defines the identity or identities which this refresh applies to. The filter must use searchable identity attributes. If the filter cannot be understood or parsed, all identities will be refreshed. " + ) + refresh_args: Optional[RefreshIdentitiesRequestRefreshArgs] = Field( + None, alias="refreshArgs") + __properties = ["filter", "refreshArgs"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> RefreshIdentitiesRequest: + """Create an instance of RefreshIdentitiesRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of refresh_args + if self.refresh_args: + _dict['refreshArgs'] = self.refresh_args.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> RefreshIdentitiesRequest: + """Create an instance of RefreshIdentitiesRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return RefreshIdentitiesRequest.parse_obj(obj) + + _obj = RefreshIdentitiesRequest.parse_obj({ + "filter": + obj.get("filter"), + "refresh_args": + RefreshIdentitiesRequestRefreshArgs.from_dict( + obj.get("refreshArgs")) + if obj.get("refreshArgs") is not None else None + }) + return _obj diff --git a/sailpoint/cc/models/refresh_identities_request_refresh_args.py b/sailpoint/cc/models/refresh_identities_request_refresh_args.py new file mode 100644 index 000000000..38f0c7df9 --- /dev/null +++ b/sailpoint/cc/models/refresh_identities_request_refresh_args.py @@ -0,0 +1,109 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional +from pydantic import BaseModel, Field, StrictBool + + +class RefreshIdentitiesRequestRefreshArgs(BaseModel): + """ + RefreshIdentitiesRequestRefreshArgs + """ + correlate_entitlements: Optional[StrictBool] = Field( + None, + alias="correlateEntitlements", + description= + "This will refresh entitlement, role, and access profile calculations." + ) + promote_attributes: Optional[StrictBool] = Field( + None, + alias="promoteAttributes", + description="This will calculate identity attributes.") + refresh_manager_status: Optional[StrictBool] = Field( + None, + alias="refreshManagerStatus", + description= + "This recalculates manager correlation and manager status. Note: This is computationally expensive to run. " + ) + synchronize_attributes: Optional[StrictBool] = Field( + None, + alias="synchronizeAttributes", + description="Enables attribute synchronization.") + prune_identities: Optional[StrictBool] = Field( + None, + alias="pruneIdentities", + description= + "Option that will enable deletion of an identity objects if there are no account objects. Note: This is not typically used in IdentityNow, except by guidance from SailPoint. " + ) + provision: Optional[StrictBool] = Field( + None, + description= + "Enables provisioning of role assignments with entitlements that are not currently fulfilled." + ) + __properties = [ + "correlateEntitlements", "promoteAttributes", "refreshManagerStatus", + "synchronizeAttributes", "pruneIdentities", "provision" + ] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> RefreshIdentitiesRequestRefreshArgs: + """Create an instance of RefreshIdentitiesRequestRefreshArgs from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> RefreshIdentitiesRequestRefreshArgs: + """Create an instance of RefreshIdentitiesRequestRefreshArgs from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return RefreshIdentitiesRequestRefreshArgs.parse_obj(obj) + + _obj = RefreshIdentitiesRequestRefreshArgs.parse_obj({ + "correlate_entitlements": + obj.get("correlateEntitlements"), + "promote_attributes": + obj.get("promoteAttributes"), + "refresh_manager_status": + obj.get("refreshManagerStatus"), + "synchronize_attributes": + obj.get("synchronizeAttributes"), + "prune_identities": + obj.get("pruneIdentities"), + "provision": + obj.get("provision") + }) + return _obj diff --git a/sailpoint/cc/models/update_application_request.py b/sailpoint/cc/models/update_application_request.py new file mode 100644 index 000000000..dcc8c2caf --- /dev/null +++ b/sailpoint/cc/models/update_application_request.py @@ -0,0 +1,64 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional +from pydantic import BaseModel, StrictStr + + +class UpdateApplicationRequest(BaseModel): + """ + UpdateApplicationRequest + """ + description: Optional[StrictStr] = None + __properties = ["description"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> UpdateApplicationRequest: + """Create an instance of UpdateApplicationRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> UpdateApplicationRequest: + """Create an instance of UpdateApplicationRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return UpdateApplicationRequest.parse_obj(obj) + + _obj = UpdateApplicationRequest.parse_obj( + {"description": obj.get("description")}) + return _obj diff --git a/sailpoint/cc/models/update_user_permissions_request.py b/sailpoint/cc/models/update_user_permissions_request.py new file mode 100644 index 000000000..a6918f7fb --- /dev/null +++ b/sailpoint/cc/models/update_user_permissions_request.py @@ -0,0 +1,91 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional +from pydantic import BaseModel, Field, StrictStr, validator + + +class UpdateUserPermissionsRequest(BaseModel): + """ + UpdateUserPermissionsRequest + """ + ids: Optional[StrictStr] = None + is_admin: Optional[StrictStr] = Field( + None, + alias="isAdmin", + description= + "Indicates if user should be an IDN Admin. \"0\" for false, \"1\" for true." + ) + admin_type: Optional[StrictStr] = Field(None, alias="adminType") + __properties = ["ids", "isAdmin", "adminType"] + + @validator('admin_type') + def admin_type_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('ADMIN', 'CERT_ADMIN', 'HELPDESK', 'REPORT_ADMIN', + 'ROLE_ADMIN', 'ROLE_SUBADMIN', 'SOURCE_ADMIN', + 'SOURCE_SUBADMIN'): + raise ValueError( + "must be one of enum values ('ADMIN', 'CERT_ADMIN', 'HELPDESK', 'REPORT_ADMIN', 'ROLE_ADMIN', 'ROLE_SUBADMIN', 'SOURCE_ADMIN', 'SOURCE_SUBADMIN')" + ) + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> UpdateUserPermissionsRequest: + """Create an instance of UpdateUserPermissionsRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> UpdateUserPermissionsRequest: + """Create an instance of UpdateUserPermissionsRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return UpdateUserPermissionsRequest.parse_obj(obj) + + _obj = UpdateUserPermissionsRequest.parse_obj({ + "ids": + obj.get("ids"), + "is_admin": + obj.get("isAdmin"), + "admin_type": + obj.get("adminType") + }) + return _obj diff --git a/sailpoint/cc/rest.py b/sailpoint/cc/rest.py new file mode 100644 index 000000000..26d7beb51 --- /dev/null +++ b/sailpoint/cc/rest.py @@ -0,0 +1,357 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import io +import json +import logging +import re +import ssl + +from urllib.parse import urlencode, quote_plus +import urllib3 + +from cc.exceptions import ApiException, UnauthorizedException, ForbiddenException, NotFoundException, ServiceException, ApiValueError, BadRequestException + +logger = logging.getLogger(__name__) + + +class RESTResponse(io.IOBase): + + def __init__(self, resp) -> None: + self.urllib3_response = resp + self.status = resp.status + self.reason = resp.reason + self.data = resp.data + + def getheaders(self): + """Returns a dictionary of the response headers.""" + return self.urllib3_response.headers + + def getheader(self, name, default=None): + """Returns a given response header.""" + return self.urllib3_response.headers.get(name, default) + + +class RESTClientObject: + + def __init__(self, configuration, pools_size=4, maxsize=None) -> None: + # urllib3.PoolManager will pass all kw parameters to connectionpool + # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 # noqa: E501 + # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680 # noqa: E501 + # maxsize is the number of requests to host that are allowed in parallel # noqa: E501 + # Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html # noqa: E501 + + # cert_reqs + if configuration.verify_ssl: + cert_reqs = ssl.CERT_REQUIRED + else: + cert_reqs = ssl.CERT_NONE + + addition_pool_args = {} + if configuration.assert_hostname is not None: + addition_pool_args[ + 'assert_hostname'] = configuration.assert_hostname # noqa: E501 + + if configuration.retries is not None: + addition_pool_args['retries'] = configuration.retries + + if configuration.tls_server_name: + addition_pool_args[ + 'server_hostname'] = configuration.tls_server_name + + if configuration.socket_options is not None: + addition_pool_args['socket_options'] = configuration.socket_options + + if maxsize is None: + if configuration.connection_pool_maxsize is not None: + maxsize = configuration.connection_pool_maxsize + else: + maxsize = 4 + + # https pool manager + if configuration.proxy: + self.pool_manager = urllib3.ProxyManager( + num_pools=pools_size, + maxsize=maxsize, + cert_reqs=cert_reqs, + ca_certs=configuration.ssl_ca_cert, + cert_file=configuration.cert_file, + key_file=configuration.key_file, + proxy_url=configuration.proxy, + proxy_headers=configuration.proxy_headers, + **addition_pool_args) + else: + self.pool_manager = urllib3.PoolManager( + num_pools=pools_size, + maxsize=maxsize, + cert_reqs=cert_reqs, + ca_certs=configuration.ssl_ca_cert, + cert_file=configuration.cert_file, + key_file=configuration.key_file, + **addition_pool_args) + + def request(self, + method, + url, + query_params=None, + headers=None, + body=None, + post_params=None, + _preload_content=True, + _request_timeout=None): + """Perform requests. + + :param method: http request method + :param url: http request url + :param query_params: query parameters in the url + :param headers: http request headers + :param body: request json body, for `application/json` + :param post_params: request post parameters, + `application/x-www-form-urlencoded` + and `multipart/form-data` + :param _preload_content: if False, the urllib3.HTTPResponse object will + be returned without reading/decoding response + data. Default is True. + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + """ + method = method.upper() + assert method in [ + 'GET', 'HEAD', 'DELETE', 'POST', 'PUT', 'PATCH', 'OPTIONS' + ] + + if post_params and body: + raise ApiValueError( + "body parameter cannot be used with post_params parameter.") + + post_params = post_params or {} + headers = headers or {} + # url already contains the URL query string + # so reset query_params to empty dict + query_params = {} + + timeout = None + if _request_timeout: + if isinstance(_request_timeout, (int, float)): # noqa: E501,F821 + timeout = urllib3.Timeout(total=_request_timeout) + elif (isinstance(_request_timeout, tuple) + and len(_request_timeout) == 2): + timeout = urllib3.Timeout(connect=_request_timeout[0], + read=_request_timeout[1]) + + try: + # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE` + if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']: + + # no content type provided or payload is json + if not headers.get('Content-Type') or re.search( + 'json', headers['Content-Type'], re.IGNORECASE): + request_body = None + if body is not None: + request_body = json.dumps(body) + r = self.pool_manager.request( + method, + url, + body=request_body, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + elif headers[ + 'Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501 + r = self.pool_manager.request( + method, + url, + fields=post_params, + encode_multipart=False, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + elif headers['Content-Type'] == 'multipart/form-data': + # must del headers['Content-Type'], or the correct + # Content-Type which generated by urllib3 will be + # overwritten. + del headers['Content-Type'] + r = self.pool_manager.request( + method, + url, + fields=post_params, + encode_multipart=True, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + # Pass a `string` parameter directly in the body to support + # other content types than Json when `body` argument is + # provided in serialized form + elif isinstance(body, str) or isinstance(body, bytes): + request_body = body + r = self.pool_manager.request( + method, + url, + body=request_body, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + else: + # Cannot generate the request from given parameters + msg = """Cannot prepare a request message for provided + arguments. Please check that your arguments match + declared content type.""" + raise ApiException(status=0, reason=msg) + # For `GET`, `HEAD` + else: + r = self.pool_manager.request(method, + url, + fields={}, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + except urllib3.exceptions.SSLError as e: + msg = "{0}\n{1}".format(type(e).__name__, str(e)) + raise ApiException(status=0, reason=msg) + + if _preload_content: + r = RESTResponse(r) + + # log response body + logger.debug("response body: %s", r.data) + + if not 200 <= r.status <= 299: + if r.status == 400: + raise BadRequestException(http_resp=r) + + if r.status == 401: + raise UnauthorizedException(http_resp=r) + + if r.status == 403: + raise ForbiddenException(http_resp=r) + + if r.status == 404: + raise NotFoundException(http_resp=r) + + if 500 <= r.status <= 599: + raise ServiceException(http_resp=r) + + raise ApiException(http_resp=r) + + return r + + def get_request(self, + url, + headers=None, + query_params=None, + _preload_content=True, + _request_timeout=None): + return self.request("GET", + url, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + query_params=query_params) + + def head_request(self, + url, + headers=None, + query_params=None, + _preload_content=True, + _request_timeout=None): + return self.request("HEAD", + url, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + query_params=query_params) + + def options_request(self, + url, + headers=None, + query_params=None, + post_params=None, + body=None, + _preload_content=True, + _request_timeout=None): + return self.request("OPTIONS", + url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def delete_request(self, + url, + headers=None, + query_params=None, + body=None, + _preload_content=True, + _request_timeout=None): + return self.request("DELETE", + url, + headers=headers, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def post_request(self, + url, + headers=None, + query_params=None, + post_params=None, + body=None, + _preload_content=True, + _request_timeout=None): + return self.request("POST", + url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def put_request(self, + url, + headers=None, + query_params=None, + post_params=None, + body=None, + _preload_content=True, + _request_timeout=None): + return self.request("PUT", + url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def patch_request(self, + url, + headers=None, + query_params=None, + post_params=None, + body=None, + _preload_content=True, + _request_timeout=None): + return self.request("PATCH", + url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) diff --git a/sailpoint/cc/test/__init__.py b/sailpoint/cc/test/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/sailpoint/cc/test/test_accounts_api.py b/sailpoint/cc/test/test_accounts_api.py new file mode 100644 index 000000000..d8e9e3eb0 --- /dev/null +++ b/sailpoint/cc/test/test_accounts_api.py @@ -0,0 +1,44 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from cc.api.accounts_api import AccountsApi # noqa: E501 + + +class TestAccountsApi(unittest.TestCase): + """AccountsApi unit test stubs""" + + def setUp(self) -> None: + self.api = AccountsApi() # noqa: E501 + + def tearDown(self) -> None: + pass + + def test_list_accounts(self) -> None: + """Test case for list_accounts + + List Accounts # noqa: E501 + """ + pass + + def test_remove_account(self) -> None: + """Test case for remove_account + + Remove Account # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_applications_api.py b/sailpoint/cc/test/test_applications_api.py new file mode 100644 index 000000000..3a0778c3d --- /dev/null +++ b/sailpoint/cc/test/test_applications_api.py @@ -0,0 +1,72 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from cc.api.applications_api import ApplicationsApi # noqa: E501 + + +class TestApplicationsApi(unittest.TestCase): + """ApplicationsApi unit test stubs""" + + def setUp(self) -> None: + self.api = ApplicationsApi() # noqa: E501 + + def tearDown(self) -> None: + pass + + def test_create_application(self) -> None: + """Test case for create_application + + Create Application # noqa: E501 + """ + pass + + def test_delete_application(self) -> None: + """Test case for delete_application + + Delete Application # noqa: E501 + """ + pass + + def test_get_application(self) -> None: + """Test case for get_application + + Get Single Application # noqa: E501 + """ + pass + + def test_get_application_access_profiles(self) -> None: + """Test case for get_application_access_profiles + + Get Access Profiles for Application # noqa: E501 + """ + pass + + def test_list_applications(self) -> None: + """Test case for list_applications + + List Applications # noqa: E501 + """ + pass + + def test_update_application(self) -> None: + """Test case for update_application + + Update Application # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_connectors_api.py b/sailpoint/cc/test/test_connectors_api.py new file mode 100644 index 000000000..e67aadd03 --- /dev/null +++ b/sailpoint/cc/test/test_connectors_api.py @@ -0,0 +1,65 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from cc.api.connectors_api import ConnectorsApi # noqa: E501 + + +class TestConnectorsApi(unittest.TestCase): + """ConnectorsApi unit test stubs""" + + def setUp(self) -> None: + self.api = ConnectorsApi() # noqa: E501 + + def tearDown(self) -> None: + pass + + def test_create_connector(self) -> None: + """Test case for create_connector + + Create Connector # noqa: E501 + """ + pass + + def test_delete_connector(self) -> None: + """Test case for delete_connector + + Delete Connector # noqa: E501 + """ + pass + + def test_export_connector_config(self) -> None: + """Test case for export_connector_config + + Export Connector Config # noqa: E501 + """ + pass + + def test_import_connector_config(self) -> None: + """Test case for import_connector_config + + Import Connector Config # noqa: E501 + """ + pass + + def test_list_connectors(self) -> None: + """Test case for list_connectors + + List Connectors # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_create_application_request.py b/sailpoint/cc/test/test_create_application_request.py new file mode 100644 index 000000000..a1199d324 --- /dev/null +++ b/sailpoint/cc/test/test_create_application_request.py @@ -0,0 +1,54 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.create_application_request import CreateApplicationRequest # noqa: E501 + + +class TestCreateApplicationRequest(unittest.TestCase): + """CreateApplicationRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CreateApplicationRequest: + """Test CreateApplicationRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `CreateApplicationRequest` + """ + model = CreateApplicationRequest() # noqa: E501 + if include_optional: + return CreateApplicationRequest( + name = 'My App', + description = '' + ) + else: + return CreateApplicationRequest( + ) + """ + + def testCreateApplicationRequest(self): + """Test CreateApplicationRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_create_connector_request.py b/sailpoint/cc/test/test_create_connector_request.py new file mode 100644 index 000000000..d834982b5 --- /dev/null +++ b/sailpoint/cc/test/test_create_connector_request.py @@ -0,0 +1,57 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.create_connector_request import CreateConnectorRequest # noqa: E501 + + +class TestCreateConnectorRequest(unittest.TestCase): + """CreateConnectorRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CreateConnectorRequest: + """Test CreateConnectorRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `CreateConnectorRequest` + """ + model = CreateConnectorRequest() # noqa: E501 + if include_optional: + return CreateConnectorRequest( + name = 'My Connector', + description = 'My Connector', + class_name = 'sailpoint.connector.OpenConnectorAdapter', + direct_connect = True, + status = 'released' + ) + else: + return CreateConnectorRequest( + ) + """ + + def testCreateConnectorRequest(self): + """Test CreateConnectorRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_get_identity200_response.py b/sailpoint/cc/test/test_get_identity200_response.py new file mode 100644 index 000000000..e47856bd1 --- /dev/null +++ b/sailpoint/cc/test/test_get_identity200_response.py @@ -0,0 +1,151 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.get_identity200_response import GetIdentity200Response # noqa: E501 + + +class TestGetIdentity200Response(unittest.TestCase): + """GetIdentity200Response unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> GetIdentity200Response: + """Test GetIdentity200Response + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GetIdentity200Response` + """ + model = GetIdentity200Response() # noqa: E501 + if include_optional: + return GetIdentity200Response( + id = '', + alias = '', + uid = '', + name = '', + display_name = '', + uuid = '', + encryption_key = None, + encryption_check = None, + status = '', + pending = True, + password_reset_since_last_login = True, + usage_cert_attested = None, + user_flags = None, + enabled = True, + alt_auth_via = '', + alt_auth_via_integration_data = None, + kba_answers = 1.337, + disable_password_reset = True, + pta_source_id = None, + supports_password_push = True, + attributes = None, + external_id = '', + role = [ + None + ], + phone = None, + email = '', + personal_email = None, + employee_number = None, + risk_score = 1.337, + feature_flags = None, + feature = [ + '' + ], + org_encryption_key = '', + org_encryption_key_id = '', + meta = None, + org = cc.models.get_identity_200_response_org.GetIdentity_200_response_org( + name = '', + script_name = '', + mode = '', + num_questions = 1.337, + status = '', + max_registered_users = 1.337, + pod = '', + pwd_reset_personal_phone = True, + pwd_reset_personal_email = True, + pwd_reset_kba = True, + pwd_reset_email = True, + pwd_reset_duo = True, + pwd_reset_phone_mask = True, + auth_error_text = cc.models.auth_error_text.authErrorText(), + strong_auth_kba = True, + strong_auth_personal_phone = True, + strong_auth_personal_email = True, + integrations = [ + None + ], + product_name = '', + kba_req_for_authn = 1.337, + kba_req_answers = 1.337, + lockout_attempt_threshold = 1.337, + lockout_time_minutes = 1.337, + usage_cert_required = True, + admin_strong_auth_required = True, + enable_external_password_change = True, + enable_password_replay = True, + enable_automatic_password_replay = True, + notify_authentication_setting_change = True, + netmasks = cc.models.netmasks.netmasks(), + country_codes = cc.models.country_codes.countryCodes(), + white_list = True, + username_empty_text = cc.models.username_empty_text.usernameEmptyText(), + username_label = cc.models.username_label.usernameLabel(), + enable_automation_generation = True, + email_test_mode = True, + email_test_address = '', + org_type = '', + password_replay_state = '', + system_notification_config = '', + redirect_patterns = '', + max_cluster_debug_hours = '', + brand_name = '', + logo = cc.models.logo.logo(), + email_from_address = cc.models.email_from_address.emailFromAddress(), + standard_logo_url = cc.models.standard_logo_url.standardLogoUrl(), + narrow_logo_url = cc.models.narrow_logo_url.narrowLogoUrl(), + action_button_color = '', + active_link_color = '', + navigation_color = '', ), + step_up_auth = True, + bx_install_prompted = True, + federated_login = True, + auth = cc.models.get_identity_200_response_auth.GetIdentity_200_response_auth( + service = '', + encryption = '', ), + on_network = True, + on_trusted_geo = True, + login_url = '' + ) + else: + return GetIdentity200Response( + ) + """ + + def testGetIdentity200Response(self): + """Test GetIdentity200Response""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_get_identity200_response_auth.py b/sailpoint/cc/test/test_get_identity200_response_auth.py new file mode 100644 index 000000000..e473ed20b --- /dev/null +++ b/sailpoint/cc/test/test_get_identity200_response_auth.py @@ -0,0 +1,54 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.get_identity200_response_auth import GetIdentity200ResponseAuth # noqa: E501 + + +class TestGetIdentity200ResponseAuth(unittest.TestCase): + """GetIdentity200ResponseAuth unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> GetIdentity200ResponseAuth: + """Test GetIdentity200ResponseAuth + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GetIdentity200ResponseAuth` + """ + model = GetIdentity200ResponseAuth() # noqa: E501 + if include_optional: + return GetIdentity200ResponseAuth( + service = '', + encryption = '' + ) + else: + return GetIdentity200ResponseAuth( + ) + """ + + def testGetIdentity200ResponseAuth(self): + """Test GetIdentity200ResponseAuth""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_get_identity200_response_org.py b/sailpoint/cc/test/test_get_identity200_response_org.py new file mode 100644 index 000000000..31bd61181 --- /dev/null +++ b/sailpoint/cc/test/test_get_identity200_response_org.py @@ -0,0 +1,104 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.get_identity200_response_org import GetIdentity200ResponseOrg # noqa: E501 + + +class TestGetIdentity200ResponseOrg(unittest.TestCase): + """GetIdentity200ResponseOrg unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> GetIdentity200ResponseOrg: + """Test GetIdentity200ResponseOrg + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GetIdentity200ResponseOrg` + """ + model = GetIdentity200ResponseOrg() # noqa: E501 + if include_optional: + return GetIdentity200ResponseOrg( + name = '', + script_name = '', + mode = '', + num_questions = 1.337, + status = '', + max_registered_users = 1.337, + pod = '', + pwd_reset_personal_phone = True, + pwd_reset_personal_email = True, + pwd_reset_kba = True, + pwd_reset_email = True, + pwd_reset_duo = True, + pwd_reset_phone_mask = True, + auth_error_text = None, + strong_auth_kba = True, + strong_auth_personal_phone = True, + strong_auth_personal_email = True, + integrations = [ + None + ], + product_name = '', + kba_req_for_authn = 1.337, + kba_req_answers = 1.337, + lockout_attempt_threshold = 1.337, + lockout_time_minutes = 1.337, + usage_cert_required = True, + admin_strong_auth_required = True, + enable_external_password_change = True, + enable_password_replay = True, + enable_automatic_password_replay = True, + notify_authentication_setting_change = True, + netmasks = None, + country_codes = None, + white_list = True, + username_empty_text = None, + username_label = None, + enable_automation_generation = True, + email_test_mode = True, + email_test_address = '', + org_type = '', + password_replay_state = '', + system_notification_config = '', + redirect_patterns = '', + max_cluster_debug_hours = '', + brand_name = '', + logo = None, + email_from_address = None, + standard_logo_url = None, + narrow_logo_url = None, + action_button_color = '', + active_link_color = '', + navigation_color = '' + ) + else: + return GetIdentity200ResponseOrg( + ) + """ + + def testGetIdentity200ResponseOrg(self): + """Test GetIdentity200ResponseOrg""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_import_connector_config_request.py b/sailpoint/cc/test/test_import_connector_config_request.py new file mode 100644 index 000000000..618786afa --- /dev/null +++ b/sailpoint/cc/test/test_import_connector_config_request.py @@ -0,0 +1,53 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.import_connector_config_request import ImportConnectorConfigRequest # noqa: E501 + + +class TestImportConnectorConfigRequest(unittest.TestCase): + """ImportConnectorConfigRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> ImportConnectorConfigRequest: + """Test ImportConnectorConfigRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ImportConnectorConfigRequest` + """ + model = ImportConnectorConfigRequest() # noqa: E501 + if include_optional: + return ImportConnectorConfigRequest( + file = bytes(b'blah') + ) + else: + return ImportConnectorConfigRequest( + ) + """ + + def testImportConnectorConfigRequest(self): + """Test ImportConnectorConfigRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_list_accounts200_response_inner.py b/sailpoint/cc/test/test_list_accounts200_response_inner.py new file mode 100644 index 000000000..b15e64b0a --- /dev/null +++ b/sailpoint/cc/test/test_list_accounts200_response_inner.py @@ -0,0 +1,55 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.list_accounts200_response_inner import ListAccounts200ResponseInner # noqa: E501 + + +class TestListAccounts200ResponseInner(unittest.TestCase): + """ListAccounts200ResponseInner unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> ListAccounts200ResponseInner: + """Test ListAccounts200ResponseInner + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ListAccounts200ResponseInner` + """ + model = ListAccounts200ResponseInner() # noqa: E501 + if include_optional: + return ListAccounts200ResponseInner( + id = '17248154', + type = 'SYSTEM_CONTROLLED', + display_name = 'tyler.mairose' + ) + else: + return ListAccounts200ResponseInner( + ) + """ + + def testListAccounts200ResponseInner(self): + """Test ListAccounts200ResponseInner""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_list_accounts200_response_inner_password_change_result.py b/sailpoint/cc/test/test_list_accounts200_response_inner_password_change_result.py new file mode 100644 index 000000000..fefa8236e --- /dev/null +++ b/sailpoint/cc/test/test_list_accounts200_response_inner_password_change_result.py @@ -0,0 +1,55 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.list_accounts200_response_inner_password_change_result import ListAccounts200ResponseInnerPasswordChangeResult # noqa: E501 + + +class TestListAccounts200ResponseInnerPasswordChangeResult(unittest.TestCase): + """ListAccounts200ResponseInnerPasswordChangeResult unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance( + self, include_optional + ) -> ListAccounts200ResponseInnerPasswordChangeResult: + """Test ListAccounts200ResponseInnerPasswordChangeResult + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ListAccounts200ResponseInnerPasswordChangeResult` + """ + model = ListAccounts200ResponseInnerPasswordChangeResult() # noqa: E501 + if include_optional: + return ListAccounts200ResponseInnerPasswordChangeResult( + completion_status = 'SUCCESS' + ) + else: + return ListAccounts200ResponseInnerPasswordChangeResult( + ) + """ + + def testListAccounts200ResponseInnerPasswordChangeResult(self): + """Test ListAccounts200ResponseInnerPasswordChangeResult""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_list_applications200_response_inner.py b/sailpoint/cc/test/test_list_applications200_response_inner.py new file mode 100644 index 000000000..86b4ef824 --- /dev/null +++ b/sailpoint/cc/test/test_list_applications200_response_inner.py @@ -0,0 +1,121 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.list_applications200_response_inner import ListApplications200ResponseInner # noqa: E501 + + +class TestListApplications200ResponseInner(unittest.TestCase): + """ListApplications200ResponseInner unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, + include_optional) -> ListApplications200ResponseInner: + """Test ListApplications200ResponseInner + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ListApplications200ResponseInner` + """ + model = ListApplications200ResponseInner() # noqa: E501 + if include_optional: + return ListApplications200ResponseInner( + id = '', + app_id = '', + service_id = '', + service_app_id = '', + name = '', + description = '', + app_center_enabled = True, + provision_request_enabled = True, + control_type = '', + mobile = True, + private_app = True, + script_name = '', + status = '', + icon = '', + health = cc.models.list_applications_200_response_inner_health.listApplications_200_response_inner_health( + status = '', + last_changed = '', + since = 1.337, + healthy = True, ), + enable_sso = True, + sso_method = '', + has_links = True, + has_automations = True, + step_up_auth_data = None, + step_up_auth_type = '', + usage_analytics = True, + usage_cert_required = True, + usage_cert_text = None, + launchpad_enabled = True, + password_managed = True, + owner = cc.models.list_applications_200_response_inner_owner.listApplications_200_response_inner_owner( + id = '', + name = '', ), + date_created = 1.337, + last_updated = 1.337, + default_access_profile = None, + service = '', + selected_sso_method = '', + supported_sso_methods = 1.337, + off_network_blocked_roles = None, + supported_off_network = '', + account_service_id = 1.337, + launcher_count = 1.337, + account_service_name = '', + account_service_external_id = '', + account_service_match_all_accounts = True, + external_id = '', + account_service_use_for_password_management = True, + account_service_policy_id = '', + account_service_policy_name = '', + require_strong_authn = True, + account_service_policies = [ + cc.models.list_applications_200_response_inner_account_service_policies_inner.listApplications_200_response_inner_accountServicePolicies_inner( + policy_id = '', + policy_name = '', + selectors = cc.models.selectors.selectors(), ) + ], + xsd_version = '', + app_profiles = [ + cc.models.list_applications_200_response_inner_app_profiles_inner.listApplications_200_response_inner_appProfiles_inner( + id = 1.337, + filename = '', + created_by = '', + date_created = '', + xsd_version = '', ) + ], + password_service_id = 1.337, + access_profile_ids = None + ) + else: + return ListApplications200ResponseInner( + ) + """ + + def testListApplications200ResponseInner(self): + """Test ListApplications200ResponseInner""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_list_applications200_response_inner_account_service_policies_inner.py b/sailpoint/cc/test/test_list_applications200_response_inner_account_service_policies_inner.py new file mode 100644 index 000000000..dd484b5ee --- /dev/null +++ b/sailpoint/cc/test/test_list_applications200_response_inner_account_service_policies_inner.py @@ -0,0 +1,58 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.list_applications200_response_inner_account_service_policies_inner import ListApplications200ResponseInnerAccountServicePoliciesInner # noqa: E501 + + +class TestListApplications200ResponseInnerAccountServicePoliciesInner( + unittest.TestCase): + """ListApplications200ResponseInnerAccountServicePoliciesInner unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance( + self, include_optional + ) -> ListApplications200ResponseInnerAccountServicePoliciesInner: + """Test ListApplications200ResponseInnerAccountServicePoliciesInner + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ListApplications200ResponseInnerAccountServicePoliciesInner` + """ + model = ListApplications200ResponseInnerAccountServicePoliciesInner() # noqa: E501 + if include_optional: + return ListApplications200ResponseInnerAccountServicePoliciesInner( + policy_id = '', + policy_name = '', + selectors = None + ) + else: + return ListApplications200ResponseInnerAccountServicePoliciesInner( + ) + """ + + def testListApplications200ResponseInnerAccountServicePoliciesInner(self): + """Test ListApplications200ResponseInnerAccountServicePoliciesInner""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_list_applications200_response_inner_app_profiles_inner.py b/sailpoint/cc/test/test_list_applications200_response_inner_app_profiles_inner.py new file mode 100644 index 000000000..328c3aed4 --- /dev/null +++ b/sailpoint/cc/test/test_list_applications200_response_inner_app_profiles_inner.py @@ -0,0 +1,59 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.list_applications200_response_inner_app_profiles_inner import ListApplications200ResponseInnerAppProfilesInner # noqa: E501 + + +class TestListApplications200ResponseInnerAppProfilesInner(unittest.TestCase): + """ListApplications200ResponseInnerAppProfilesInner unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance( + self, include_optional + ) -> ListApplications200ResponseInnerAppProfilesInner: + """Test ListApplications200ResponseInnerAppProfilesInner + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ListApplications200ResponseInnerAppProfilesInner` + """ + model = ListApplications200ResponseInnerAppProfilesInner() # noqa: E501 + if include_optional: + return ListApplications200ResponseInnerAppProfilesInner( + id = 1.337, + filename = '', + created_by = '', + date_created = '', + xsd_version = '' + ) + else: + return ListApplications200ResponseInnerAppProfilesInner( + ) + """ + + def testListApplications200ResponseInnerAppProfilesInner(self): + """Test ListApplications200ResponseInnerAppProfilesInner""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_list_applications200_response_inner_health.py b/sailpoint/cc/test/test_list_applications200_response_inner_health.py new file mode 100644 index 000000000..ce1831832 --- /dev/null +++ b/sailpoint/cc/test/test_list_applications200_response_inner_health.py @@ -0,0 +1,57 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.list_applications200_response_inner_health import ListApplications200ResponseInnerHealth # noqa: E501 + + +class TestListApplications200ResponseInnerHealth(unittest.TestCase): + """ListApplications200ResponseInnerHealth unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance( + self, include_optional) -> ListApplications200ResponseInnerHealth: + """Test ListApplications200ResponseInnerHealth + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ListApplications200ResponseInnerHealth` + """ + model = ListApplications200ResponseInnerHealth() # noqa: E501 + if include_optional: + return ListApplications200ResponseInnerHealth( + status = '', + last_changed = '', + since = 1.337, + healthy = True + ) + else: + return ListApplications200ResponseInnerHealth( + ) + """ + + def testListApplications200ResponseInnerHealth(self): + """Test ListApplications200ResponseInnerHealth""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_list_applications200_response_inner_owner.py b/sailpoint/cc/test/test_list_applications200_response_inner_owner.py new file mode 100644 index 000000000..1c0f39f6e --- /dev/null +++ b/sailpoint/cc/test/test_list_applications200_response_inner_owner.py @@ -0,0 +1,55 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.list_applications200_response_inner_owner import ListApplications200ResponseInnerOwner # noqa: E501 + + +class TestListApplications200ResponseInnerOwner(unittest.TestCase): + """ListApplications200ResponseInnerOwner unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance( + self, include_optional) -> ListApplications200ResponseInnerOwner: + """Test ListApplications200ResponseInnerOwner + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ListApplications200ResponseInnerOwner` + """ + model = ListApplications200ResponseInnerOwner() # noqa: E501 + if include_optional: + return ListApplications200ResponseInnerOwner( + id = '', + name = '' + ) + else: + return ListApplications200ResponseInnerOwner( + ) + """ + + def testListApplications200ResponseInnerOwner(self): + """Test ListApplications200ResponseInnerOwner""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_list_connectors200_response.py b/sailpoint/cc/test/test_list_connectors200_response.py new file mode 100644 index 000000000..8308533e6 --- /dev/null +++ b/sailpoint/cc/test/test_list_connectors200_response.py @@ -0,0 +1,74 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.list_connectors200_response import ListConnectors200Response # noqa: E501 + + +class TestListConnectors200Response(unittest.TestCase): + """ListConnectors200Response unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> ListConnectors200Response: + """Test ListConnectors200Response + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ListConnectors200Response` + """ + model = ListConnectors200Response() # noqa: E501 + if include_optional: + return ListConnectors200Response( + total = 1.337, + items = [ + cc.models.list_connectors_200_response_items_inner.listConnectors_200_response_items_inner( + application_xml = '', + class_name = '', + connector_metadata = cc.models.connector_metadata.connectorMetadata(), + correlation_config_xml = '', + direct_connect = True, + file_upload = True, + id = 8017, + name = 'ACF2', + s3_location = '', + scope = 'global', + script_name = 'acf2-angularsc', + source_config = '', + source_config_from = '', + source_config_xml = '', + status = 'RELEASED', + translation_properties = cc.models.translation_properties.translationProperties(), + type = 'ACF2 - Full', + uploaded_files = [], ) + ] + ) + else: + return ListConnectors200Response( + ) + """ + + def testListConnectors200Response(self): + """Test ListConnectors200Response""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_list_connectors200_response_items_inner.py b/sailpoint/cc/test/test_list_connectors200_response_items_inner.py new file mode 100644 index 000000000..8c09b4615 --- /dev/null +++ b/sailpoint/cc/test/test_list_connectors200_response_items_inner.py @@ -0,0 +1,71 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.list_connectors200_response_items_inner import ListConnectors200ResponseItemsInner # noqa: E501 + + +class TestListConnectors200ResponseItemsInner(unittest.TestCase): + """ListConnectors200ResponseItemsInner unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, + include_optional) -> ListConnectors200ResponseItemsInner: + """Test ListConnectors200ResponseItemsInner + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ListConnectors200ResponseItemsInner` + """ + model = ListConnectors200ResponseItemsInner() # noqa: E501 + if include_optional: + return ListConnectors200ResponseItemsInner( + application_xml = '', + class_name = '', + connector_metadata = None, + correlation_config_xml = '', + direct_connect = True, + file_upload = True, + id = 8017, + name = 'ACF2', + s3_location = '', + scope = 'global', + script_name = 'acf2-angularsc', + source_config = '', + source_config_from = '', + source_config_xml = '', + status = 'RELEASED', + translation_properties = None, + type = 'ACF2 - Full', + uploaded_files = [] + ) + else: + return ListConnectors200ResponseItemsInner( + ) + """ + + def testListConnectors200ResponseItemsInner(self): + """Test ListConnectors200ResponseItemsInner""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_load_accounts_request.py b/sailpoint/cc/test/test_load_accounts_request.py new file mode 100644 index 000000000..df3a912a4 --- /dev/null +++ b/sailpoint/cc/test/test_load_accounts_request.py @@ -0,0 +1,54 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.load_accounts_request import LoadAccountsRequest # noqa: E501 + + +class TestLoadAccountsRequest(unittest.TestCase): + """LoadAccountsRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> LoadAccountsRequest: + """Test LoadAccountsRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `LoadAccountsRequest` + """ + model = LoadAccountsRequest() # noqa: E501 + if include_optional: + return LoadAccountsRequest( + disable_optimization = True, + file = bytes(b'blah') + ) + else: + return LoadAccountsRequest( + ) + """ + + def testLoadAccountsRequest(self): + """Test LoadAccountsRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_refresh_identities_request.py b/sailpoint/cc/test/test_refresh_identities_request.py new file mode 100644 index 000000000..30d1c0088 --- /dev/null +++ b/sailpoint/cc/test/test_refresh_identities_request.py @@ -0,0 +1,60 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.refresh_identities_request import RefreshIdentitiesRequest # noqa: E501 + + +class TestRefreshIdentitiesRequest(unittest.TestCase): + """RefreshIdentitiesRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> RefreshIdentitiesRequest: + """Test RefreshIdentitiesRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `RefreshIdentitiesRequest` + """ + model = RefreshIdentitiesRequest() # noqa: E501 + if include_optional: + return RefreshIdentitiesRequest( + filter = '', + refresh_args = cc.models.refresh_identities_request_refresh_args.refreshIdentities_request_refreshArgs( + correlate_entitlements = True, + promote_attributes = True, + refresh_manager_status = False, + synchronize_attributes = False, + prune_identities = False, + provision = False, ) + ) + else: + return RefreshIdentitiesRequest( + ) + """ + + def testRefreshIdentitiesRequest(self): + """Test RefreshIdentitiesRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_refresh_identities_request_refresh_args.py b/sailpoint/cc/test/test_refresh_identities_request_refresh_args.py new file mode 100644 index 000000000..633c22477 --- /dev/null +++ b/sailpoint/cc/test/test_refresh_identities_request_refresh_args.py @@ -0,0 +1,59 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.refresh_identities_request_refresh_args import RefreshIdentitiesRequestRefreshArgs # noqa: E501 + + +class TestRefreshIdentitiesRequestRefreshArgs(unittest.TestCase): + """RefreshIdentitiesRequestRefreshArgs unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, + include_optional) -> RefreshIdentitiesRequestRefreshArgs: + """Test RefreshIdentitiesRequestRefreshArgs + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `RefreshIdentitiesRequestRefreshArgs` + """ + model = RefreshIdentitiesRequestRefreshArgs() # noqa: E501 + if include_optional: + return RefreshIdentitiesRequestRefreshArgs( + correlate_entitlements = True, + promote_attributes = True, + refresh_manager_status = False, + synchronize_attributes = False, + prune_identities = False, + provision = False + ) + else: + return RefreshIdentitiesRequestRefreshArgs( + ) + """ + + def testRefreshIdentitiesRequestRefreshArgs(self): + """Test RefreshIdentitiesRequestRefreshArgs""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_sources_accounts_api.py b/sailpoint/cc/test/test_sources_accounts_api.py new file mode 100644 index 000000000..e263735cf --- /dev/null +++ b/sailpoint/cc/test/test_sources_accounts_api.py @@ -0,0 +1,37 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from cc.api.sources_accounts_api import SourcesAccountsApi # noqa: E501 + + +class TestSourcesAccountsApi(unittest.TestCase): + """SourcesAccountsApi unit test stubs""" + + def setUp(self) -> None: + self.api = SourcesAccountsApi() # noqa: E501 + + def tearDown(self) -> None: + pass + + def test_export_account_feed(self) -> None: + """Test case for export_account_feed + + Export Account Feed # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_sources_aggregation_api.py b/sailpoint/cc/test/test_sources_aggregation_api.py new file mode 100644 index 000000000..2dd147cf6 --- /dev/null +++ b/sailpoint/cc/test/test_sources_aggregation_api.py @@ -0,0 +1,37 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from cc.api.sources_aggregation_api import SourcesAggregationApi # noqa: E501 + + +class TestSourcesAggregationApi(unittest.TestCase): + """SourcesAggregationApi unit test stubs""" + + def setUp(self) -> None: + self.api = SourcesAggregationApi() # noqa: E501 + + def tearDown(self) -> None: + pass + + def test_load_accounts(self) -> None: + """Test case for load_accounts + + Account Aggregation (File) # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_system_api.py b/sailpoint/cc/test/test_system_api.py new file mode 100644 index 000000000..6215f3bfb --- /dev/null +++ b/sailpoint/cc/test/test_system_api.py @@ -0,0 +1,37 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from cc.api.system_api import SystemApi # noqa: E501 + + +class TestSystemApi(unittest.TestCase): + """SystemApi unit test stubs""" + + def setUp(self) -> None: + self.api = SystemApi() # noqa: E501 + + def tearDown(self) -> None: + pass + + def test_refresh_identities(self) -> None: + """Test case for refresh_identities + + Refresh Identities # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_update_application_request.py b/sailpoint/cc/test/test_update_application_request.py new file mode 100644 index 000000000..f112bbf2a --- /dev/null +++ b/sailpoint/cc/test/test_update_application_request.py @@ -0,0 +1,53 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.update_application_request import UpdateApplicationRequest # noqa: E501 + + +class TestUpdateApplicationRequest(unittest.TestCase): + """UpdateApplicationRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> UpdateApplicationRequest: + """Test UpdateApplicationRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `UpdateApplicationRequest` + """ + model = UpdateApplicationRequest() # noqa: E501 + if include_optional: + return UpdateApplicationRequest( + description = '' + ) + else: + return UpdateApplicationRequest( + ) + """ + + def testUpdateApplicationRequest(self): + """Test UpdateApplicationRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_update_user_permissions_request.py b/sailpoint/cc/test/test_update_user_permissions_request.py new file mode 100644 index 000000000..c74b26e84 --- /dev/null +++ b/sailpoint/cc/test/test_update_user_permissions_request.py @@ -0,0 +1,55 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from cc.models.update_user_permissions_request import UpdateUserPermissionsRequest # noqa: E501 + + +class TestUpdateUserPermissionsRequest(unittest.TestCase): + """UpdateUserPermissionsRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> UpdateUserPermissionsRequest: + """Test UpdateUserPermissionsRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `UpdateUserPermissionsRequest` + """ + model = UpdateUserPermissionsRequest() # noqa: E501 + if include_optional: + return UpdateUserPermissionsRequest( + ids = '71624,71625', + is_admin = '1', + admin_type = 'ADMIN' + ) + else: + return UpdateUserPermissionsRequest( + ) + """ + + def testUpdateUserPermissionsRequest(self): + """Test UpdateUserPermissionsRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc/test/test_user_api.py b/sailpoint/cc/test/test_user_api.py new file mode 100644 index 000000000..ed2c9a54f --- /dev/null +++ b/sailpoint/cc/test/test_user_api.py @@ -0,0 +1,44 @@ +# coding: utf-8 + +""" + IdentityNow cc (private) APIs + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 1.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from cc.api.user_api import UserApi # noqa: E501 + + +class TestUserApi(unittest.TestCase): + """UserApi unit test stubs""" + + def setUp(self) -> None: + self.api = UserApi() # noqa: E501 + + def tearDown(self) -> None: + pass + + def test_get_identity(self) -> None: + """Test case for get_identity + + Get Single Identity # noqa: E501 + """ + pass + + def test_update_user_permissions(self) -> None: + """Test case for update_user_permissions + + Update User Permissions # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/cc_README.md b/sailpoint/cc_README.md new file mode 100644 index 000000000..942637334 --- /dev/null +++ b/sailpoint/cc_README.md @@ -0,0 +1,148 @@ +# cc +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +The `cc` package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: + +- API version: 1.0.0 +- Package version: 1.0.0 +- Build package: org.openapitools.codegen.languages.PythonClientCodegen + +## Requirements. + +Python 3.7+ + +## Installation & Usage + +This python library package is generated without supporting files like setup.py or requirements files + +To be able to use it, you will need these dependencies in your own package that uses this library: + +* urllib3 >= 1.25.3 +* python-dateutil +* pydantic +* aenum + +## Getting Started + +In your own code, to use this library to connect and interact with cc, +you can run the following: + +```python + +import time +import cc +from cc.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com +# See configuration.py for a list of all supported configuration parameters. +configuration = cc.Configuration( + host = "https://sailpoint.api.identitynow.com" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + + +# Enter a context with an instance of the API client +with cc.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = cc.AccountsApi(api_client) + + try: + # List Accounts + api_response = api_instance.list_accounts() + print("The response of AccountsApi->list_accounts:\n") + pprint(api_response) + except ApiException as e: + print("Exception when calling AccountsApi->list_accounts: %s\n" % e) + +``` + +## Documentation for API Endpoints + +All URIs are relative to *https://sailpoint.api.identitynow.com* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +*AccountsApi* | [**list_accounts**](cc/docs/AccountsApi.md#list_accounts) | **GET** /cc/api/account/list | List Accounts +*AccountsApi* | [**remove_account**](cc/docs/AccountsApi.md#remove_account) | **POST** /cc/api/account/remove/{id} | Remove Account +*ApplicationsApi* | [**create_application**](cc/docs/ApplicationsApi.md#create_application) | **POST** /cc/api/app/create | Create Application +*ApplicationsApi* | [**delete_application**](cc/docs/ApplicationsApi.md#delete_application) | **POST** /cc/api/app/delete/{id} | Delete Application +*ApplicationsApi* | [**get_application**](cc/docs/ApplicationsApi.md#get_application) | **GET** /cc/api/app/get/{id} | Get Single Application +*ApplicationsApi* | [**get_application_access_profiles**](cc/docs/ApplicationsApi.md#get_application_access_profiles) | **GET** /cc/api/app/getAccessProfiles/{id} | Get Access Profiles for Application +*ApplicationsApi* | [**list_applications**](cc/docs/ApplicationsApi.md#list_applications) | **GET** /cc/api/app/list | List Applications +*ApplicationsApi* | [**update_application**](cc/docs/ApplicationsApi.md#update_application) | **POST** /cc/api/app/update/{id} | Update Application +*ConnectorsApi* | [**create_connector**](cc/docs/ConnectorsApi.md#create_connector) | **POST** /cc/api/connector/create | Create Connector +*ConnectorsApi* | [**delete_connector**](cc/docs/ConnectorsApi.md#delete_connector) | **POST** /cc/api/connector/delete/{id} | Delete Connector +*ConnectorsApi* | [**export_connector_config**](cc/docs/ConnectorsApi.md#export_connector_config) | **GET** /cc/api/connector/export/{id} | Export Connector Config +*ConnectorsApi* | [**import_connector_config**](cc/docs/ConnectorsApi.md#import_connector_config) | **POST** /cc/api/connector/import/{id} | Import Connector Config +*ConnectorsApi* | [**list_connectors**](cc/docs/ConnectorsApi.md#list_connectors) | **GET** /cc/api/connector/list | List Connectors +*SourcesAccountsApi* | [**export_account_feed**](cc/docs/SourcesAccountsApi.md#export_account_feed) | **GET** /cc/api/source/exportAccountFeed/{id} | Export Account Feed +*SourcesAggregationApi* | [**load_accounts**](cc/docs/SourcesAggregationApi.md#load_accounts) | **POST** /cc/api/source/loadAccounts/{id} | Account Aggregation (File) +*SystemApi* | [**refresh_identities**](cc/docs/SystemApi.md#refresh_identities) | **POST** /cc/api/system/refreshIdentities | Refresh Identities +*UserApi* | [**get_identity**](cc/docs/UserApi.md#get_identity) | **GET** /cc/api/user/get/{id} | Get Single Identity +*UserApi* | [**update_user_permissions**](cc/docs/UserApi.md#update_user_permissions) | **POST** /cc/api/user/updatePermissions | Update User Permissions + + +## Documentation For Models + + - [CreateApplicationRequest](cc/docs/CreateApplicationRequest.md) + - [CreateConnectorRequest](cc/docs/CreateConnectorRequest.md) + - [GetIdentity200Response](cc/docs/GetIdentity200Response.md) + - [GetIdentity200ResponseAuth](cc/docs/GetIdentity200ResponseAuth.md) + - [GetIdentity200ResponseOrg](cc/docs/GetIdentity200ResponseOrg.md) + - [ImportConnectorConfigRequest](cc/docs/ImportConnectorConfigRequest.md) + - [ListAccounts200ResponseInner](cc/docs/ListAccounts200ResponseInner.md) + - [ListAccounts200ResponseInnerPasswordChangeResult](cc/docs/ListAccounts200ResponseInnerPasswordChangeResult.md) + - [ListApplications200ResponseInner](cc/docs/ListApplications200ResponseInner.md) + - [ListApplications200ResponseInnerAccountServicePoliciesInner](cc/docs/ListApplications200ResponseInnerAccountServicePoliciesInner.md) + - [ListApplications200ResponseInnerAppProfilesInner](cc/docs/ListApplications200ResponseInnerAppProfilesInner.md) + - [ListApplications200ResponseInnerHealth](cc/docs/ListApplications200ResponseInnerHealth.md) + - [ListApplications200ResponseInnerOwner](cc/docs/ListApplications200ResponseInnerOwner.md) + - [ListConnectors200Response](cc/docs/ListConnectors200Response.md) + - [ListConnectors200ResponseItemsInner](cc/docs/ListConnectors200ResponseItemsInner.md) + - [LoadAccountsRequest](cc/docs/LoadAccountsRequest.md) + - [RefreshIdentitiesRequest](cc/docs/RefreshIdentitiesRequest.md) + - [RefreshIdentitiesRequestRefreshArgs](cc/docs/RefreshIdentitiesRequestRefreshArgs.md) + - [UpdateApplicationRequest](cc/docs/UpdateApplicationRequest.md) + - [UpdateUserPermissionsRequest](cc/docs/UpdateUserPermissionsRequest.md) + + + +## Documentation For Authorization + + +Authentication schemes defined for the API: + +### UserContextAuth + +- **Type**: OAuth +- **Flow**: application +- **Authorization URL**: +- **Scopes**: + - **sp:scopes:default**: default scope + - **sp:scopes:all**: access to all scopes + + +### UserContextAuth + +- **Type**: OAuth +- **Flow**: accessCode +- **Authorization URL**: https://tenant.identitynow.com/oauth/authorize +- **Scopes**: + - **sp:scopes:default**: default scope + - **sp:scopes:all**: access to all scopes + + +## Author + + + + diff --git a/sailpoint/v2/__init__.py b/sailpoint/v2/__init__.py new file mode 100644 index 000000000..1e996eb40 --- /dev/null +++ b/sailpoint/v2/__init__.py @@ -0,0 +1,48 @@ +# coding: utf-8 + +# flake8: noqa + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +__version__ = "1.0.0" + +# import apis into sdk package +from v2.api.governance_groups_api import GovernanceGroupsApi +from v2.api.org_api import OrgApi + +# import ApiClient +from v2.api_response import ApiResponse +from v2.api_client import ApiClient +from v2.configuration import Configuration +from v2.exceptions import OpenApiException +from v2.exceptions import ApiTypeError +from v2.exceptions import ApiValueError +from v2.exceptions import ApiKeyError +from v2.exceptions import ApiAttributeError +from v2.exceptions import ApiException + +# import models into sdk package +from v2.models.bulk_delete_work_groups200_response import BulkDeleteWorkGroups200Response +from v2.models.bulk_delete_work_groups_request import BulkDeleteWorkGroupsRequest +from v2.models.create_workgroup_request import CreateWorkgroupRequest +from v2.models.create_workgroup_request_owner import CreateWorkgroupRequestOwner +from v2.models.get_org_settings200_response import GetOrgSettings200Response +from v2.models.get_org_settings200_response_approval_config import GetOrgSettings200ResponseApprovalConfig +from v2.models.get_org_settings200_response_system_notification_config import GetOrgSettings200ResponseSystemNotificationConfig +from v2.models.get_org_settings200_response_system_notification_config_notifications_inner import GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner +from v2.models.get_org_settings200_response_system_notification_config_notifications_inner_thresholds import GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds +from v2.models.list_workgroup_connections200_response_inner import ListWorkgroupConnections200ResponseInner +from v2.models.list_workgroup_members200_response_inner import ListWorkgroupMembers200ResponseInner +from v2.models.list_workgroups200_response_inner import ListWorkgroups200ResponseInner +from v2.models.list_workgroups200_response_inner_owner import ListWorkgroups200ResponseInnerOwner +from v2.models.modify_workgroup_members_request import ModifyWorkgroupMembersRequest +from v2.models.update_org_settings_request import UpdateOrgSettingsRequest diff --git a/sailpoint/v2/api/__init__.py b/sailpoint/v2/api/__init__.py new file mode 100644 index 000000000..db7bf34a6 --- /dev/null +++ b/sailpoint/v2/api/__init__.py @@ -0,0 +1,5 @@ +# flake8: noqa + +# import apis into api package +from v2.api.governance_groups_api import GovernanceGroupsApi +from v2.api.org_api import OrgApi diff --git a/sailpoint/v2/api/governance_groups_api.py b/sailpoint/v2/api/governance_groups_api.py new file mode 100644 index 000000000..943231b5f --- /dev/null +++ b/sailpoint/v2/api/governance_groups_api.py @@ -0,0 +1,1454 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from typing_extensions import Annotated +from pydantic import Field, StrictStr, conint + +from typing import List, Optional + +from v2.models.bulk_delete_work_groups200_response import BulkDeleteWorkGroups200Response +from v2.models.bulk_delete_work_groups_request import BulkDeleteWorkGroupsRequest +from v2.models.create_workgroup_request import CreateWorkgroupRequest +from v2.models.list_workgroup_connections200_response_inner import ListWorkgroupConnections200ResponseInner +from v2.models.list_workgroup_members200_response_inner import ListWorkgroupMembers200ResponseInner +from v2.models.list_workgroups200_response_inner import ListWorkgroups200ResponseInner +from v2.models.modify_workgroup_members_request import ModifyWorkgroupMembersRequest + +from v2.api_client import ApiClient +from v2.api_response import ApiResponse +from v2.exceptions import ( # noqa: F401 + ApiTypeError, ApiValueError) + + +class GovernanceGroupsApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def bulk_delete_work_groups( + self, bulk_delete_work_groups_request: Annotated[ + BulkDeleteWorkGroupsRequest, + Field(..., description="Work group ids to delete")], + **kwargs) -> BulkDeleteWorkGroups200Response: # noqa: E501 + """Bulk delete work groups # noqa: E501 + + This API allows you to bulk-delete work groups # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.bulk_delete_work_groups(bulk_delete_work_groups_request, async_req=True) + >>> result = thread.get() + + :param bulk_delete_work_groups_request: Work group ids to delete (required) + :type bulk_delete_work_groups_request: BulkDeleteWorkGroupsRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: BulkDeleteWorkGroups200Response + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the bulk_delete_work_groups_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.bulk_delete_work_groups_with_http_info( + bulk_delete_work_groups_request, **kwargs) # noqa: E501 + + @validate_arguments + def bulk_delete_work_groups_with_http_info( + self, bulk_delete_work_groups_request: Annotated[ + BulkDeleteWorkGroupsRequest, + Field(..., description="Work group ids to delete")], + **kwargs) -> ApiResponse: # noqa: E501 + """Bulk delete work groups # noqa: E501 + + This API allows you to bulk-delete work groups # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.bulk_delete_work_groups_with_http_info(bulk_delete_work_groups_request, async_req=True) + >>> result = thread.get() + + :param bulk_delete_work_groups_request: Work group ids to delete (required) + :type bulk_delete_work_groups_request: BulkDeleteWorkGroupsRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(BulkDeleteWorkGroups200Response, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = ['bulk_delete_work_groups_request'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method bulk_delete_work_groups" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['bulk_delete_work_groups_request'] is not None: + _body_params = _params['bulk_delete_work_groups_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get( + '_content_type', + self.api_client.select_header_content_type(['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = { + '200': "BulkDeleteWorkGroups200Response", + } + + return self.api_client.call_api( + '/workgroups/bulk-delete', + 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def create_workgroup( + self, create_workgroup_request: Annotated[ + CreateWorkgroupRequest, + Field(..., description="Work group to create.")], + **kwargs) -> List[ListWorkgroups200ResponseInner]: # noqa: E501 + """Create Work Group # noqa: E501 + + This API allows you to create a work group # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_workgroup(create_workgroup_request, async_req=True) + >>> result = thread.get() + + :param create_workgroup_request: Work group to create. (required) + :type create_workgroup_request: CreateWorkgroupRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: List[ListWorkgroups200ResponseInner] + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the create_workgroup_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.create_workgroup_with_http_info(create_workgroup_request, + **kwargs) # noqa: E501 + + @validate_arguments + def create_workgroup_with_http_info( + self, create_workgroup_request: Annotated[ + CreateWorkgroupRequest, + Field(..., description="Work group to create.")], + **kwargs) -> ApiResponse: # noqa: E501 + """Create Work Group # noqa: E501 + + This API allows you to create a work group # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.create_workgroup_with_http_info(create_workgroup_request, async_req=True) + >>> result = thread.get() + + :param create_workgroup_request: Work group to create. (required) + :type create_workgroup_request: CreateWorkgroupRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(List[ListWorkgroups200ResponseInner], status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = ['create_workgroup_request'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method create_workgroup" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['create_workgroup_request'] is not None: + _body_params = _params['create_workgroup_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get( + '_content_type', + self.api_client.select_header_content_type(['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = { + '200': "List[ListWorkgroups200ResponseInner]", + } + + return self.api_client.call_api( + '/workgroups', + 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def delete_workgroup(self, workgroup_id: Annotated[ + StrictStr, Field(..., description="The workgroup ID")], + **kwargs) -> None: # noqa: E501 + """Delete Work Group By Id # noqa: E501 + + This API deletes a single workgroup based on the ID # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_workgroup(workgroup_id, async_req=True) + >>> result = thread.get() + + :param workgroup_id: The workgroup ID (required) + :type workgroup_id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the delete_workgroup_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.delete_workgroup_with_http_info(workgroup_id, + **kwargs) # noqa: E501 + + @validate_arguments + def delete_workgroup_with_http_info(self, workgroup_id: Annotated[ + StrictStr, Field(..., description="The workgroup ID")], + **kwargs) -> ApiResponse: # noqa: E501 + """Delete Work Group By Id # noqa: E501 + + This API deletes a single workgroup based on the ID # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.delete_workgroup_with_http_info(workgroup_id, async_req=True) + >>> result = thread.get() + + :param workgroup_id: The workgroup ID (required) + :type workgroup_id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = ['workgroup_id'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method delete_workgroup" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['workgroup_id']: + _path_params['workgroupId'] = _params['workgroup_id'] + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workgroups/{workgroupId}', + 'DELETE', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def get_workgroup( + self, workgroup_id: Annotated[ + StrictStr, + Field(..., description="The workgroup ID")], + **kwargs) -> ListWorkgroups200ResponseInner: # noqa: E501 + """Get Work Group By Id # noqa: E501 + + This API returns the details for a single workgroup based on the ID # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_workgroup(workgroup_id, async_req=True) + >>> result = thread.get() + + :param workgroup_id: The workgroup ID (required) + :type workgroup_id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: ListWorkgroups200ResponseInner + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_workgroup_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_workgroup_with_http_info(workgroup_id, + **kwargs) # noqa: E501 + + @validate_arguments + def get_workgroup_with_http_info(self, workgroup_id: Annotated[ + StrictStr, Field(..., description="The workgroup ID")], + **kwargs) -> ApiResponse: # noqa: E501 + """Get Work Group By Id # noqa: E501 + + This API returns the details for a single workgroup based on the ID # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_workgroup_with_http_info(workgroup_id, async_req=True) + >>> result = thread.get() + + :param workgroup_id: The workgroup ID (required) + :type workgroup_id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(ListWorkgroups200ResponseInner, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = ['workgroup_id'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method get_workgroup" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['workgroup_id']: + _path_params['workgroupId'] = _params['workgroup_id'] + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = { + '200': "ListWorkgroups200ResponseInner", + } + + return self.api_client.call_api( + '/workgroups/{workgroupId}', + 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def list_workgroup_connections( + self, + workgroup_id: Annotated[StrictStr, + Field(..., description="The workgroup ID")], + **kwargs + ) -> List[ListWorkgroupConnections200ResponseInner]: # noqa: E501 + """List Work Group Connections # noqa: E501 + + This API returns the connections of a work group # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_workgroup_connections(workgroup_id, async_req=True) + >>> result = thread.get() + + :param workgroup_id: The workgroup ID (required) + :type workgroup_id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: List[ListWorkgroupConnections200ResponseInner] + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the list_workgroup_connections_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.list_workgroup_connections_with_http_info( + workgroup_id, **kwargs) # noqa: E501 + + @validate_arguments + def list_workgroup_connections_with_http_info( + self, workgroup_id: Annotated[ + StrictStr, + Field(..., description="The workgroup ID")], + **kwargs) -> ApiResponse: # noqa: E501 + """List Work Group Connections # noqa: E501 + + This API returns the connections of a work group # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_workgroup_connections_with_http_info(workgroup_id, async_req=True) + >>> result = thread.get() + + :param workgroup_id: The workgroup ID (required) + :type workgroup_id: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(List[ListWorkgroupConnections200ResponseInner], status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = ['workgroup_id'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method list_workgroup_connections" % + _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['workgroup_id']: + _path_params['workgroupId'] = _params['workgroup_id'] + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = { + '200': "List[ListWorkgroupConnections200ResponseInner]", + } + + return self.api_client.call_api( + '/workgroups/{workgroupId}/connections', + 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def list_workgroup_members( + self, + workgroup_id: Annotated[ + StrictStr, + Field(..., description="The workgroup ID")], + limit: Annotated[ + Optional[conint(strict=True, le=250, ge=0)], + Field(description="Max number of results to return")] = None, + offset: + Annotated[ + Optional[conint(strict=True, ge=0)], + Field( + description= + "Offset into the full result set. Usually specified with *limit* to paginate through the results." + )] = None, + filters: + Annotated[ + Optional[StrictStr], + Field( + description= + "Filter results using the following syntax. [{property:name, value: \"Tyler\", operation: EQ}]" + )] = None, + **kwargs + ) -> List[ListWorkgroupMembers200ResponseInner]: # noqa: E501 + """List Work Group Members # noqa: E501 + + This API returns the members of a work group # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_workgroup_members(workgroup_id, limit, offset, filters, async_req=True) + >>> result = thread.get() + + :param workgroup_id: The workgroup ID (required) + :type workgroup_id: str + :param limit: Max number of results to return + :type limit: int + :param offset: Offset into the full result set. Usually specified with *limit* to paginate through the results. + :type offset: int + :param filters: Filter results using the following syntax. [{property:name, value: \"Tyler\", operation: EQ}] + :type filters: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: List[ListWorkgroupMembers200ResponseInner] + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the list_workgroup_members_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.list_workgroup_members_with_http_info( + workgroup_id, limit, offset, filters, **kwargs) # noqa: E501 + + @validate_arguments + def list_workgroup_members_with_http_info( + self, + workgroup_id: Annotated[ + StrictStr, + Field(..., description="The workgroup ID")], + limit: Annotated[ + Optional[conint(strict=True, le=250, ge=0)], + Field(description="Max number of results to return")] = None, + offset: + Annotated[ + Optional[conint(strict=True, ge=0)], + Field( + description= + "Offset into the full result set. Usually specified with *limit* to paginate through the results." + )] = None, + filters: + Annotated[ + Optional[StrictStr], + Field( + description= + "Filter results using the following syntax. [{property:name, value: \"Tyler\", operation: EQ}]" + )] = None, + **kwargs) -> ApiResponse: # noqa: E501 + """List Work Group Members # noqa: E501 + + This API returns the members of a work group # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_workgroup_members_with_http_info(workgroup_id, limit, offset, filters, async_req=True) + >>> result = thread.get() + + :param workgroup_id: The workgroup ID (required) + :type workgroup_id: str + :param limit: Max number of results to return + :type limit: int + :param offset: Offset into the full result set. Usually specified with *limit* to paginate through the results. + :type offset: int + :param filters: Filter results using the following syntax. [{property:name, value: \"Tyler\", operation: EQ}] + :type filters: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(List[ListWorkgroupMembers200ResponseInner], status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = ['workgroup_id', 'limit', 'offset', 'filters'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method list_workgroup_members" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['workgroup_id']: + _path_params['workgroupId'] = _params['workgroup_id'] + + # process the query parameters + _query_params = [] + if _params.get('limit') is not None: # noqa: E501 + _query_params.append(('limit', _params['limit'])) + + if _params.get('offset') is not None: # noqa: E501 + _query_params.append(('offset', _params['offset'])) + + if _params.get('filters') is not None: # noqa: E501 + _query_params.append(('filters', _params['filters'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = { + '200': "List[ListWorkgroupMembers200ResponseInner]", + } + + return self.api_client.call_api( + '/workgroups/{workgroupId}/members', + 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def list_workgroups( + self, + limit: Annotated[ + Optional[conint(strict=True, le=250, ge=0)], + Field(description="Max number of results to return")] = None, + offset: + Annotated[ + Optional[conint(strict=True, ge=0)], + Field( + description= + "Offset into the full result set. Usually specified with *limit* to paginate through the results." + )] = None, + filters: + Annotated[ + Optional[StrictStr], + Field( + description= + "Filter results using the following syntax. [{property:name, value: \"Tyler\", operation: EQ}]" + )] = None, + **kwargs) -> List[ListWorkgroups200ResponseInner]: # noqa: E501 + """List Work Groups # noqa: E501 + + This API returns a list of work groups # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_workgroups(limit, offset, filters, async_req=True) + >>> result = thread.get() + + :param limit: Max number of results to return + :type limit: int + :param offset: Offset into the full result set. Usually specified with *limit* to paginate through the results. + :type offset: int + :param filters: Filter results using the following syntax. [{property:name, value: \"Tyler\", operation: EQ}] + :type filters: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: List[ListWorkgroups200ResponseInner] + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the list_workgroups_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.list_workgroups_with_http_info(limit, offset, filters, + **kwargs) # noqa: E501 + + @validate_arguments + def list_workgroups_with_http_info( + self, + limit: Annotated[ + Optional[conint(strict=True, le=250, ge=0)], + Field(description="Max number of results to return")] = None, + offset: + Annotated[ + Optional[conint(strict=True, ge=0)], + Field( + description= + "Offset into the full result set. Usually specified with *limit* to paginate through the results." + )] = None, + filters: + Annotated[ + Optional[StrictStr], + Field( + description= + "Filter results using the following syntax. [{property:name, value: \"Tyler\", operation: EQ}]" + )] = None, + **kwargs) -> ApiResponse: # noqa: E501 + """List Work Groups # noqa: E501 + + This API returns a list of work groups # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_workgroups_with_http_info(limit, offset, filters, async_req=True) + >>> result = thread.get() + + :param limit: Max number of results to return + :type limit: int + :param offset: Offset into the full result set. Usually specified with *limit* to paginate through the results. + :type offset: int + :param filters: Filter results using the following syntax. [{property:name, value: \"Tyler\", operation: EQ}] + :type filters: str + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(List[ListWorkgroups200ResponseInner], status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = ['limit', 'offset', 'filters'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method list_workgroups" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + if _params.get('limit') is not None: # noqa: E501 + _query_params.append(('limit', _params['limit'])) + + if _params.get('offset') is not None: # noqa: E501 + _query_params.append(('offset', _params['offset'])) + + if _params.get('filters') is not None: # noqa: E501 + _query_params.append(('filters', _params['filters'])) + + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = { + '200': "List[ListWorkgroups200ResponseInner]", + } + + return self.api_client.call_api( + '/workgroups', + 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def modify_workgroup_members( + self, workgroup_id: Annotated[ + StrictStr, + Field(..., description="The workgroup ID")], + modify_workgroup_members_request: Annotated[ + ModifyWorkgroupMembersRequest, + Field(..., description="Add/Remove workgroup member ids.")], + **kwargs) -> None: # noqa: E501 + """Modify Work Group Members # noqa: E501 + + This API allows you to modify the members of a work group # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.modify_workgroup_members(workgroup_id, modify_workgroup_members_request, async_req=True) + >>> result = thread.get() + + :param workgroup_id: The workgroup ID (required) + :type workgroup_id: str + :param modify_workgroup_members_request: Add/Remove workgroup member ids. (required) + :type modify_workgroup_members_request: ModifyWorkgroupMembersRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the modify_workgroup_members_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.modify_workgroup_members_with_http_info( + workgroup_id, modify_workgroup_members_request, + **kwargs) # noqa: E501 + + @validate_arguments + def modify_workgroup_members_with_http_info( + self, workgroup_id: Annotated[ + StrictStr, + Field(..., description="The workgroup ID")], + modify_workgroup_members_request: Annotated[ + ModifyWorkgroupMembersRequest, + Field(..., description="Add/Remove workgroup member ids.")], + **kwargs) -> ApiResponse: # noqa: E501 + """Modify Work Group Members # noqa: E501 + + This API allows you to modify the members of a work group # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.modify_workgroup_members_with_http_info(workgroup_id, modify_workgroup_members_request, async_req=True) + >>> result = thread.get() + + :param workgroup_id: The workgroup ID (required) + :type workgroup_id: str + :param modify_workgroup_members_request: Add/Remove workgroup member ids. (required) + :type modify_workgroup_members_request: ModifyWorkgroupMembersRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: None + """ + + _params = locals() + + _all_params = ['workgroup_id', 'modify_workgroup_members_request'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method modify_workgroup_members" % + _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['workgroup_id']: + _path_params['workgroupId'] = _params['workgroup_id'] + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['modify_workgroup_members_request'] is not None: + _body_params = _params['modify_workgroup_members_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get( + '_content_type', + self.api_client.select_header_content_type(['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = {} + + return self.api_client.call_api( + '/workgroups/{workgroupId}/members', + 'POST', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def update_workgroup( + self, workgroup_id: Annotated[ + StrictStr, + Field(..., description="The workgroup ID")], + create_workgroup_request: Annotated[ + CreateWorkgroupRequest, + Field(..., description="Work group to modify.")], + **kwargs) -> ListWorkgroups200ResponseInner: # noqa: E501 + """Update Work Group By Id # noqa: E501 + + This API updates and returns the details for a single workgroup based on the ID # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_workgroup(workgroup_id, create_workgroup_request, async_req=True) + >>> result = thread.get() + + :param workgroup_id: The workgroup ID (required) + :type workgroup_id: str + :param create_workgroup_request: Work group to modify. (required) + :type create_workgroup_request: CreateWorkgroupRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: ListWorkgroups200ResponseInner + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the update_workgroup_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.update_workgroup_with_http_info(workgroup_id, + create_workgroup_request, + **kwargs) # noqa: E501 + + @validate_arguments + def update_workgroup_with_http_info( + self, workgroup_id: Annotated[ + StrictStr, + Field(..., description="The workgroup ID")], + create_workgroup_request: Annotated[ + CreateWorkgroupRequest, + Field(..., description="Work group to modify.")], + **kwargs) -> ApiResponse: # noqa: E501 + """Update Work Group By Id # noqa: E501 + + This API updates and returns the details for a single workgroup based on the ID # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_workgroup_with_http_info(workgroup_id, create_workgroup_request, async_req=True) + >>> result = thread.get() + + :param workgroup_id: The workgroup ID (required) + :type workgroup_id: str + :param create_workgroup_request: Work group to modify. (required) + :type create_workgroup_request: CreateWorkgroupRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(ListWorkgroups200ResponseInner, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = ['workgroup_id', 'create_workgroup_request'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method update_workgroup" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + if _params['workgroup_id']: + _path_params['workgroupId'] = _params['workgroup_id'] + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['create_workgroup_request'] is not None: + _body_params = _params['create_workgroup_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get( + '_content_type', + self.api_client.select_header_content_type(['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = ['UserContextAuth', 'UserContextAuth'] # noqa: E501 + + _response_types_map = { + '200': "ListWorkgroups200ResponseInner", + } + + return self.api_client.call_api( + '/workgroups/{workgroupId}', + 'PATCH', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/sailpoint/v2/api/org_api.py b/sailpoint/v2/api/org_api.py new file mode 100644 index 000000000..f1f809cd8 --- /dev/null +++ b/sailpoint/v2/api/org_api.py @@ -0,0 +1,315 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import re # noqa: F401 +import io +import warnings + +from pydantic import validate_arguments, ValidationError + +from typing_extensions import Annotated +from pydantic import Field + +from v2.models.get_org_settings200_response import GetOrgSettings200Response +from v2.models.update_org_settings_request import UpdateOrgSettingsRequest + +from v2.api_client import ApiClient +from v2.api_response import ApiResponse +from v2.exceptions import ( # noqa: F401 + ApiTypeError, ApiValueError) + + +class OrgApi: + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + def __init__(self, api_client=None) -> None: + if api_client is None: + api_client = ApiClient.get_default() + self.api_client = api_client + + @validate_arguments + def get_org_settings(self, + **kwargs) -> GetOrgSettings200Response: # noqa: E501 + """Retrieves your org settings. # noqa: E501 + + Retrieves information and operational settings for your org (as determined by the URL domain). # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_org_settings(async_req=True) + >>> result = thread.get() + + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: GetOrgSettings200Response + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the get_org_settings_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.get_org_settings_with_http_info(**kwargs) # noqa: E501 + + @validate_arguments + def get_org_settings_with_http_info(self, + **kwargs) -> ApiResponse: # noqa: E501 + """Retrieves your org settings. # noqa: E501 + + Retrieves information and operational settings for your org (as determined by the URL domain). # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.get_org_settings_with_http_info(async_req=True) + >>> result = thread.get() + + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(GetOrgSettings200Response, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = [] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method get_org_settings" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # authentication setting + _auth_settings = [] # noqa: E501 + + _response_types_map = { + '200': "GetOrgSettings200Response", + } + + return self.api_client.call_api( + '/org', + 'GET', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) + + @validate_arguments + def update_org_settings( + self, update_org_settings_request: Annotated[ + UpdateOrgSettingsRequest, + Field(..., description="Org settings to update.")], + **kwargs) -> GetOrgSettings200Response: # noqa: E501 + """Updates one or more org attributes. # noqa: E501 + + Updates one or more attributes for your org. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_org_settings(update_org_settings_request, async_req=True) + >>> result = thread.get() + + :param update_org_settings_request: Org settings to update. (required) + :type update_org_settings_request: UpdateOrgSettingsRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _request_timeout: timeout setting for this request. + If one number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: GetOrgSettings200Response + """ + kwargs['_return_http_data_only'] = True + if '_preload_content' in kwargs: + message = "Error! Please call the update_org_settings_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501 + raise ValueError(message) + return self.update_org_settings_with_http_info( + update_org_settings_request, **kwargs) # noqa: E501 + + @validate_arguments + def update_org_settings_with_http_info( + self, update_org_settings_request: Annotated[ + UpdateOrgSettingsRequest, + Field(..., description="Org settings to update.")], + **kwargs) -> ApiResponse: # noqa: E501 + """Updates one or more org attributes. # noqa: E501 + + Updates one or more attributes for your org. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.update_org_settings_with_http_info(update_org_settings_request, async_req=True) + >>> result = thread.get() + + :param update_org_settings_request: Org settings to update. (required) + :type update_org_settings_request: UpdateOrgSettingsRequest + :param async_req: Whether to execute the request asynchronously. + :type async_req: bool, optional + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :type _preload_content: bool, optional + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :type _return_http_data_only: bool, optional + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_auth: dict, optional + :type _content_type: string, optional: force content-type for the request + :return: Returns the result object. + If the method is called asynchronously, + returns the request thread. + :rtype: tuple(GetOrgSettings200Response, status_code(int), headers(HTTPHeaderDict)) + """ + + _params = locals() + + _all_params = ['update_org_settings_request'] + _all_params.extend([ + 'async_req', '_return_http_data_only', '_preload_content', + '_request_timeout', '_request_auth', '_content_type', '_headers' + ]) + + # validate the arguments + for _key, _val in _params['kwargs'].items(): + if _key not in _all_params: + raise ApiTypeError("Got an unexpected keyword argument '%s'" + " to method update_org_settings" % _key) + _params[_key] = _val + del _params['kwargs'] + + _collection_formats = {} + + # process the path parameters + _path_params = {} + + # process the query parameters + _query_params = [] + # process the header parameters + _header_params = dict(_params.get('_headers', {})) + # process the form parameters + _form_params = [] + _files = {} + # process the body parameter + _body_params = None + if _params['update_org_settings_request'] is not None: + _body_params = _params['update_org_settings_request'] + + # set the HTTP header `Accept` + _header_params['Accept'] = self.api_client.select_header_accept( + ['application/json']) # noqa: E501 + + # set the HTTP header `Content-Type` + _content_types_list = _params.get( + '_content_type', + self.api_client.select_header_content_type(['application/json'])) + if _content_types_list: + _header_params['Content-Type'] = _content_types_list + + # authentication setting + _auth_settings = [] # noqa: E501 + + _response_types_map = { + '200': "GetOrgSettings200Response", + } + + return self.api_client.call_api( + '/org', + 'PATCH', + _path_params, + _query_params, + _header_params, + body=_body_params, + post_params=_form_params, + files=_files, + response_types_map=_response_types_map, + auth_settings=_auth_settings, + async_req=_params.get('async_req'), + _return_http_data_only=_params.get( + '_return_http_data_only'), # noqa: E501 + _preload_content=_params.get('_preload_content', True), + _request_timeout=_params.get('_request_timeout'), + collection_formats=_collection_formats, + _request_auth=_params.get('_request_auth')) diff --git a/sailpoint/v2/api_client.py b/sailpoint/v2/api_client.py new file mode 100644 index 000000000..cdbef945e --- /dev/null +++ b/sailpoint/v2/api_client.py @@ -0,0 +1,800 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import atexit +import datetime +from dateutil.parser import parse +import json +import mimetypes +from multiprocessing.pool import ThreadPool +import os +import re +import tempfile + +from urllib.parse import quote + +from sailpoint.configuration import Configuration +from v2.api_response import ApiResponse +import v2.models +from v2 import rest +from v2.exceptions import ApiValueError, ApiException + + +class ApiClient: + """Generic API client for OpenAPI client library builds. + + OpenAPI generic API client. This client handles the client- + server communication, and is invariant across implementations. Specifics of + the methods and models for each application are generated from the OpenAPI + templates. + + :param configuration: .Configuration object for this client + :param header_name: a header to pass when making calls to the API. + :param header_value: a header value to pass when making calls to + the API. + :param cookie: a cookie to include in the header when making calls + to the API + :param pool_threads: The number of threads to use for async requests + to the API. More threads means more concurrent API requests. + """ + + PRIMITIVE_TYPES = (float, bool, bytes, str, int) + NATIVE_TYPES_MAPPING = { + 'int': int, + 'long': int, # TODO remove as only py3 is supported? + 'float': float, + 'str': str, + 'bool': bool, + 'date': datetime.date, + 'datetime': datetime.datetime, + 'object': object, + } + _pool = None + + def __init__(self, + configuration=None, + header_name=None, + header_value=None, + cookie=None, + pool_threads=1) -> None: + # use default configuration if none is provided + if configuration is None: + configuration = Configuration.get_default() + self.configuration = configuration + self.pool_threads = pool_threads + + self.rest_client = rest.RESTClientObject(configuration) + self.default_headers = {} + if header_name is not None: + self.default_headers[header_name] = header_value + self.cookie = cookie + # Set default User-Agent. + self.user_agent = 'OpenAPI-Generator/1.0.0/python' + self.client_side_validation = configuration.client_side_validation + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.close() + + def close(self): + if self._pool: + self._pool.close() + self._pool.join() + self._pool = None + if hasattr(atexit, 'unregister'): + atexit.unregister(self.close) + + @property + def pool(self): + """Create thread pool on first request + avoids instantiating unused threadpool for blocking clients. + """ + if self._pool is None: + atexit.register(self.close) + self._pool = ThreadPool(self.pool_threads) + return self._pool + + @property + def user_agent(self): + """User agent for this API client""" + return self.default_headers['User-Agent'] + + @user_agent.setter + def user_agent(self, value): + self.default_headers['User-Agent'] = value + + def set_default_header(self, header_name, header_value): + self.default_headers[header_name] = header_value + + _default = None + + @classmethod + def get_default(cls): + """Return new instance of ApiClient. + + This method returns newly created, based on default constructor, + object of ApiClient class or returns a copy of default + ApiClient. + + :return: The ApiClient object. + """ + if cls._default is None: + cls._default = ApiClient() + return cls._default + + @classmethod + def set_default(cls, default): + """Set default instance of ApiClient. + + It stores default ApiClient. + + :param default: object of ApiClient. + """ + cls._default = default + + def __call_api(self, + resource_path, + method, + path_params=None, + query_params=None, + header_params=None, + body=None, + post_params=None, + files=None, + response_types_map=None, + auth_settings=None, + _return_http_data_only=None, + collection_formats=None, + _preload_content=True, + _request_timeout=None, + _host=None, + _request_auth=None): + + config = self.configuration + + # header parameters + header_params = header_params or {} + header_params.update(self.default_headers) + if self.cookie: + header_params['Cookie'] = self.cookie + if header_params: + header_params = self.sanitize_for_serialization(header_params) + header_params = dict( + self.parameters_to_tuples(header_params, collection_formats)) + # Add Authentication header to request + header_params['Authorization'] = self.configuration.access_token + + # path parameters + if path_params: + path_params = self.sanitize_for_serialization(path_params) + path_params = self.parameters_to_tuples(path_params, + collection_formats) + for k, v in path_params: + # specified safe chars, encode everything + resource_path = resource_path.replace( + '{%s}' % k, + quote(str(v), safe=config.safe_chars_for_path_param)) + + # post parameters + if post_params or files: + post_params = post_params if post_params else [] + post_params = self.sanitize_for_serialization(post_params) + post_params = self.parameters_to_tuples(post_params, + collection_formats) + post_params.extend(self.files_parameters(files)) + + # auth setting + self.update_params_for_auth(header_params, + query_params, + auth_settings, + resource_path, + method, + body, + request_auth=_request_auth) + + # body + if body: + body = self.sanitize_for_serialization(body) + + # request url + if _host is None: + url = self.configuration.base_url + '/v2' + resource_path + else: + # use server/host defined in path or operation instead + url = _host + resource_path + + # query parameters + if query_params: + query_params = self.sanitize_for_serialization(query_params) + url_query = self.parameters_to_url_query(query_params, + collection_formats) + url += "?" + url_query + + try: + # perform request and return response + response_data = self.request(method, + url, + query_params=query_params, + headers=header_params, + post_params=post_params, + body=body, + _preload_content=_preload_content, + _request_timeout=_request_timeout) + except ApiException as e: + if e.body: + e.body = e.body.decode('utf-8') + raise e + + self.last_response = response_data + + return_data = None # assuming derialization is not needed + # data needs deserialization or returns HTTP data (deserialized) only + if _preload_content or _return_http_data_only: + response_type = response_types_map.get(str(response_data.status), + None) + if not response_type and isinstance( + response_data.status, + int) and 100 <= response_data.status <= 599: + # if not found, look for '1XX', '2XX', etc. + response_type = response_types_map.get( + str(response_data.status)[0] + "XX", None) + + if response_type == "bytearray": + response_data.data = response_data.data + else: + match = None + content_type = response_data.getheader('content-type') + if content_type is not None: + match = re.search(r"charset=([a-zA-Z\-\d]+)[\s;]?", + content_type) + encoding = match.group(1) if match else "utf-8" + response_data.data = response_data.data.decode(encoding) + + # deserialize response data + if response_type == "bytearray": + return_data = response_data.data + elif response_type: + return_data = self.deserialize(response_data, response_type) + else: + return_data = None + + if _return_http_data_only: + return return_data + else: + return ApiResponse(status_code=response_data.status, + data=return_data, + headers=response_data.getheaders(), + raw_data=response_data.data) + + def sanitize_for_serialization(self, obj): + """Builds a JSON POST object. + + If obj is None, return None. + If obj is str, int, long, float, bool, return directly. + If obj is datetime.datetime, datetime.date + convert to string in iso8601 format. + If obj is list, sanitize each element in the list. + If obj is dict, return the dict. + If obj is OpenAPI model, return the properties dict. + + :param obj: The data to serialize. + :return: The serialized form of data. + """ + if obj is None: + return None + elif isinstance(obj, self.PRIMITIVE_TYPES): + return obj + elif isinstance(obj, list): + return [ + self.sanitize_for_serialization(sub_obj) for sub_obj in obj + ] + elif isinstance(obj, tuple): + return tuple( + self.sanitize_for_serialization(sub_obj) for sub_obj in obj) + elif isinstance(obj, (datetime.datetime, datetime.date)): + return obj.isoformat() + + if isinstance(obj, dict): + obj_dict = obj + else: + # Convert model obj to dict except + # attributes `openapi_types`, `attribute_map` + # and attributes which value is not None. + # Convert attribute name to json key in + # model definition for request. + obj_dict = obj.to_dict() + + return { + key: self.sanitize_for_serialization(val) + for key, val in obj_dict.items() + } + + def deserialize(self, response, response_type): + """Deserializes response into an object. + + :param response: RESTResponse object to be deserialized. + :param response_type: class literal for + deserialized object, or string of class name. + + :return: deserialized object. + """ + # handle file downloading + # save response body into a tmp file and return the instance + if response_type == "file": + return self.__deserialize_file(response) + + # fetch data from response object + try: + data = json.loads(response.data) + except ValueError: + data = response.data + + return self.__deserialize(data, response_type) + + def __deserialize(self, data, klass): + """Deserializes dict, list, str into an object. + + :param data: dict, list or str. + :param klass: class literal, or string of class name. + + :return: object. + """ + if data is None: + return None + + if isinstance(klass, str): + if klass.startswith('List['): + sub_kls = re.match(r'List\[(.*)]', klass).group(1) + return [ + self.__deserialize(sub_data, sub_kls) for sub_data in data + ] + + if klass.startswith('Dict['): + sub_kls = re.match(r'Dict\[([^,]*), (.*)]', klass).group(2) + return { + k: self.__deserialize(v, sub_kls) + for k, v in data.items() + } + + # convert str to class + if klass in self.NATIVE_TYPES_MAPPING: + klass = self.NATIVE_TYPES_MAPPING[klass] + else: + klass = getattr(v2.models, klass) + + if klass in self.PRIMITIVE_TYPES: + return self.__deserialize_primitive(data, klass) + elif klass == object: + return self.__deserialize_object(data) + elif klass == datetime.date: + return self.__deserialize_date(data) + elif klass == datetime.datetime: + return self.__deserialize_datetime(data) + else: + return self.__deserialize_model(data, klass) + + def call_api(self, + resource_path, + method, + path_params=None, + query_params=None, + header_params=None, + body=None, + post_params=None, + files=None, + response_types_map=None, + auth_settings=None, + async_req=None, + _return_http_data_only=None, + collection_formats=None, + _preload_content=True, + _request_timeout=None, + _host=None, + _request_auth=None): + """Makes the HTTP request (synchronous) and returns deserialized data. + + To make an async_req request, set the async_req parameter. + + :param resource_path: Path to method endpoint. + :param method: Method to call. + :param path_params: Path parameters in the url. + :param query_params: Query parameters in the url. + :param header_params: Header parameters to be + placed in the request header. + :param body: Request body. + :param post_params dict: Request post form parameters, + for `application/x-www-form-urlencoded`, `multipart/form-data`. + :param auth_settings list: Auth Settings names for the request. + :param response: Response data type. + :param files dict: key -> filename, value -> filepath, + for `multipart/form-data`. + :param async_req bool: execute request asynchronously + :param _return_http_data_only: response data instead of ApiResponse + object with status code, headers, etc + :param _preload_content: if False, the ApiResponse.data will + be set to none and raw_data will store the + HTTP response body without reading/decoding. + Default is True. + :param collection_formats: dict of collection formats for path, query, + header, and post parameters. + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + :param _request_auth: set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + :type _request_token: dict, optional + :return: + If async_req parameter is True, + the request will be called asynchronously. + The method will return the request thread. + If parameter async_req is False or missing, + then the method will return the response directly. + """ + if not async_req: + return self.__call_api(resource_path, method, path_params, + query_params, header_params, body, + post_params, files, response_types_map, + auth_settings, _return_http_data_only, + collection_formats, _preload_content, + _request_timeout, _host, _request_auth) + + return self.pool.apply_async( + self.__call_api, + (resource_path, method, path_params, query_params, header_params, + body, post_params, files, response_types_map, auth_settings, + _return_http_data_only, collection_formats, _preload_content, + _request_timeout, _host, _request_auth)) + + def request(self, + method, + url, + query_params=None, + headers=None, + post_params=None, + body=None, + _preload_content=True, + _request_timeout=None): + """Makes the HTTP request using RESTClient.""" + if method == "GET": + return self.rest_client.get_request( + url, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + headers=headers) + elif method == "HEAD": + return self.rest_client.head_request( + url, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + headers=headers) + elif method == "OPTIONS": + return self.rest_client.options_request( + url, + query_params=query_params, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout) + elif method == "POST": + return self.rest_client.post_request( + url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "PUT": + return self.rest_client.put_request( + url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "PATCH": + return self.rest_client.patch_request( + url, + query_params=query_params, + headers=headers, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + elif method == "DELETE": + return self.rest_client.delete_request( + url, + query_params=query_params, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + else: + raise ApiValueError("http method must be `GET`, `HEAD`, `OPTIONS`," + " `POST`, `PATCH`, `PUT` or `DELETE`.") + + def parameters_to_tuples(self, params, collection_formats): + """Get parameters as list of tuples, formatting collections. + + :param params: Parameters as dict or list of two-tuples + :param dict collection_formats: Parameter collection formats + :return: Parameters as list of tuples, collections formatted + """ + new_params = [] + if collection_formats is None: + collection_formats = {} + for k, v in params.items() if isinstance( + params, dict) else params: # noqa: E501 + if k in collection_formats: + collection_format = collection_formats[k] + if collection_format == 'multi': + new_params.extend((k, value) for value in v) + else: + if collection_format == 'ssv': + delimiter = ' ' + elif collection_format == 'tsv': + delimiter = '\t' + elif collection_format == 'pipes': + delimiter = '|' + else: # csv is the default + delimiter = ',' + new_params.append( + (k, delimiter.join(str(value) for value in v))) + else: + new_params.append((k, v)) + return new_params + + def parameters_to_url_query(self, params, collection_formats): + """Get parameters as list of tuples, formatting collections. + + :param params: Parameters as dict or list of two-tuples + :param dict collection_formats: Parameter collection formats + :return: URL query string (e.g. a=Hello%20World&b=123) + """ + new_params = [] + if collection_formats is None: + collection_formats = {} + for k, v in params.items() if isinstance( + params, dict) else params: # noqa: E501 + if isinstance(v, (int, float)): + v = str(v) + if isinstance(v, bool): + v = str(v).lower() + if isinstance(v, dict): + v = json.dumps(v) + + if k in collection_formats: + collection_format = collection_formats[k] + if collection_format == 'multi': + new_params.extend((k, value) for value in v) + else: + if collection_format == 'ssv': + delimiter = ' ' + elif collection_format == 'tsv': + delimiter = '\t' + elif collection_format == 'pipes': + delimiter = '|' + else: # csv is the default + delimiter = ',' + new_params.append( + (k, delimiter.join(quote(str(value)) for value in v))) + else: + new_params.append((k, quote(str(v)))) + + return "&".join(["=".join(item) for item in new_params]) + + def files_parameters(self, files=None): + """Builds form parameters. + + :param files: File parameters. + :return: Form parameters with files. + """ + params = [] + + if files: + for k, v in files.items(): + if not v: + continue + file_names = v if type(v) is list else [v] + for n in file_names: + with open(n, 'rb') as f: + filename = os.path.basename(f.name) + filedata = f.read() + mimetype = (mimetypes.guess_type(filename)[0] + or 'application/octet-stream') + params.append( + tuple([k, tuple([filename, filedata, mimetype])])) + + return params + + def select_header_accept(self, accepts): + """Returns `Accept` based on an array of accepts provided. + + :param accepts: List of headers. + :return: Accept (e.g. application/json). + """ + if not accepts: + return + + for accept in accepts: + if re.search('json', accept, re.IGNORECASE): + return accept + + return accepts[0] + + def select_header_content_type(self, content_types): + """Returns `Content-Type` based on an array of content_types provided. + + :param content_types: List of content-types. + :return: Content-Type (e.g. application/json). + """ + if not content_types: + return None + + for content_type in content_types: + if re.search('json', content_type, re.IGNORECASE): + return content_type + + return content_types[0] + + def update_params_for_auth(self, + headers, + queries, + auth_settings, + resource_path, + method, + body, + request_auth=None): + """Updates header and query params based on authentication setting. + + :param headers: Header parameters dict to be updated. + :param queries: Query parameters tuple list to be updated. + :param auth_settings: Authentication setting identifiers list. + :resource_path: A string representation of the HTTP request resource path. + :method: A string representation of the HTTP request method. + :body: A object representing the body of the HTTP request. + The object type is the return value of sanitize_for_serialization(). + :param request_auth: if set, the provided settings will + override the token in the configuration. + """ + if not auth_settings: + return + + if request_auth: + self._apply_auth_params(headers, queries, resource_path, method, + body, request_auth) + return + + for auth in auth_settings: + auth_setting = self.configuration.auth_settings().get(auth) + if auth_setting: + self._apply_auth_params(headers, queries, resource_path, + method, body, auth_setting) + + def _apply_auth_params(self, headers, queries, resource_path, method, body, + auth_setting): + """Updates the request parameters based on a single auth_setting + + :param headers: Header parameters dict to be updated. + :param queries: Query parameters tuple list to be updated. + :resource_path: A string representation of the HTTP request resource path. + :method: A string representation of the HTTP request method. + :body: A object representing the body of the HTTP request. + The object type is the return value of sanitize_for_serialization(). + :param auth_setting: auth settings for the endpoint + """ + if auth_setting['in'] == 'cookie': + headers['Cookie'] = auth_setting['value'] + elif auth_setting['in'] == 'header': + if auth_setting['type'] != 'http-signature': + headers[auth_setting['key']] = auth_setting['value'] + elif auth_setting['in'] == 'query': + queries.append((auth_setting['key'], auth_setting['value'])) + else: + raise ApiValueError( + 'Authentication token must be in `query` or `header`') + + def __deserialize_file(self, response): + """Deserializes body to file + + Saves response body into a file in a temporary folder, + using the filename from the `Content-Disposition` header if provided. + + :param response: RESTResponse. + :return: file path. + """ + fd, path = tempfile.mkstemp(dir=self.configuration.temp_folder_path) + os.close(fd) + os.remove(path) + + content_disposition = response.getheader("Content-Disposition") + if content_disposition: + filename = re.search(r'filename=[\'"]?([^\'"\s]+)[\'"]?', + content_disposition).group(1) + path = os.path.join(os.path.dirname(path), filename) + + with open(path, "wb") as f: + f.write(response.data) + + return path + + def __deserialize_primitive(self, data, klass): + """Deserializes string to primitive type. + + :param data: str. + :param klass: class literal. + + :return: int, long, float, str, bool. + """ + try: + return klass(data) + except UnicodeEncodeError: + return str(data) + except TypeError: + return data + + def __deserialize_object(self, value): + """Return an original value. + + :return: object. + """ + return value + + def __deserialize_date(self, string): + """Deserializes string to date. + + :param string: str. + :return: date. + """ + try: + return parse(string).date() + except ImportError: + return string + except ValueError: + raise rest.ApiException( + status=0, + reason="Failed to parse `{0}` as date object".format(string)) + + def __deserialize_datetime(self, string): + """Deserializes string to datetime. + + The string should be in iso8601 datetime format. + + :param string: str. + :return: datetime. + """ + try: + return parse(string) + except ImportError: + return string + except ValueError: + raise rest.ApiException( + status=0, + reason=( + "Failed to parse `{0}` as datetime object".format(string))) + + def __deserialize_model(self, data, klass): + """Deserializes list or dict to model. + + :param data: dict, list. + :param klass: class literal. + :return: model object. + """ + + return klass.from_dict(data) diff --git a/sailpoint/v2/api_response.py b/sailpoint/v2/api_response.py new file mode 100644 index 000000000..56314e5a6 --- /dev/null +++ b/sailpoint/v2/api_response.py @@ -0,0 +1,31 @@ +"""API response object.""" + +from __future__ import annotations +from typing import Any, Dict, Optional +from pydantic import Field, StrictInt, StrictStr + + +class ApiResponse: + """ + API response object + """ + + status_code: Optional[StrictInt] = Field(None, + description="HTTP status code") + headers: Optional[Dict[StrictStr, + StrictStr]] = Field(None, + description="HTTP headers") + data: Optional[Any] = Field( + None, description="Deserialized data given the data type") + raw_data: Optional[Any] = Field( + None, description="Raw data (HTTP response body)") + + def __init__(self, + status_code=None, + headers=None, + data=None, + raw_data=None) -> None: + self.status_code = status_code + self.headers = headers + self.data = data + self.raw_data = raw_data diff --git a/sailpoint/v2/configuration.py b/sailpoint/v2/configuration.py new file mode 100644 index 000000000..4c302bb66 --- /dev/null +++ b/sailpoint/v2/configuration.py @@ -0,0 +1,470 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import copy +import logging +import multiprocessing +import sys +import urllib3 + +import http.client as httplib + +JSON_SCHEMA_VALIDATION_KEYWORDS = { + 'multipleOf', 'maximum', 'exclusiveMaximum', 'minimum', 'exclusiveMinimum', + 'maxLength', 'minLength', 'pattern', 'maxItems', 'minItems' +} + + +class Configuration: + """This class contains various settings of the API client. + + :param host: Base url. + :param api_key: Dict to store API key(s). + Each entry in the dict specifies an API key. + The dict key is the name of the security scheme in the OAS specification. + The dict value is the API key secret. + :param api_key_prefix: Dict to store API prefix (e.g. Bearer). + The dict key is the name of the security scheme in the OAS specification. + The dict value is an API key prefix when generating the auth data. + :param username: Username for HTTP basic authentication. + :param password: Password for HTTP basic authentication. + :param access_token: Access token. + :param server_index: Index to servers configuration. + :param server_variables: Mapping with string values to replace variables in + templated server configuration. The validation of enums is performed for + variables with defined enum values before. + :param server_operation_index: Mapping from operation ID to an index to server + configuration. + :param server_operation_variables: Mapping from operation ID to a mapping with + string values to replace variables in templated server configuration. + The validation of enums is performed for variables with defined enum + values before. + :param ssl_ca_cert: str - the path to a file of concatenated CA certificates + in PEM format. + + :Example: + """ + + _default = None + + def __init__( + self, + host=None, + api_key=None, + api_key_prefix=None, + username=None, + password=None, + access_token=None, + server_index=None, + server_variables=None, + server_operation_index=None, + server_operation_variables=None, + ssl_ca_cert=None, + ) -> None: + """Constructor + """ + self._base_path = "https://sailpoint.api.identitynow.com/v2" if host is None else host + """Default Base url + """ + self.server_index = 0 if server_index is None and host is None else server_index + self.server_operation_index = server_operation_index or {} + """Default server index + """ + self.server_variables = server_variables or {} + self.server_operation_variables = server_operation_variables or {} + """Default server variables + """ + self.temp_folder_path = None + """Temp file folder for downloading files + """ + # Authentication Settings + self.api_key = {} + if api_key: + self.api_key = api_key + """dict to store API key(s) + """ + self.api_key_prefix = {} + if api_key_prefix: + self.api_key_prefix = api_key_prefix + """dict to store API prefix (e.g. Bearer) + """ + self.refresh_api_key_hook = None + """function hook to refresh API key if expired + """ + self.username = username + """Username for HTTP basic authentication + """ + self.password = password + """Password for HTTP basic authentication + """ + self.access_token = access_token + """Access token + """ + self.logger = {} + """Logging Settings + """ + self.logger["package_logger"] = logging.getLogger("v2") + self.logger["urllib3_logger"] = logging.getLogger("urllib3") + self.logger_format = '%(asctime)s %(levelname)s %(message)s' + """Log format + """ + self.logger_stream_handler = None + """Log stream handler + """ + self.logger_file_handler = None + """Log file handler + """ + self.logger_file = None + """Debug file location + """ + self.debug = False + """Debug switch + """ + + self.verify_ssl = True + """SSL/TLS verification + Set this to false to skip verifying SSL certificate when calling API + from https server. + """ + self.ssl_ca_cert = ssl_ca_cert + """Set this to customize the certificate file to verify the peer. + """ + self.cert_file = None + """client certificate file + """ + self.key_file = None + """client key file + """ + self.assert_hostname = None + """Set this to True/False to enable/disable SSL hostname verification. + """ + self.tls_server_name = None + """SSL/TLS Server Name Indication (SNI) + Set this to the SNI value expected by the server. + """ + + self.connection_pool_maxsize = multiprocessing.cpu_count() * 5 + """urllib3 connection pool's maximum number of connections saved + per pool. urllib3 uses 1 connection as default value, but this is + not the best value when you are making a lot of possibly parallel + requests to the same host, which is often the case here. + cpu_count * 5 is used as default value to increase performance. + """ + + self.proxy = None + """Proxy URL + """ + self.proxy_headers = None + """Proxy headers + """ + self.safe_chars_for_path_param = '' + """Safe chars for path_param + """ + self.retries = None + """Adding retries to override urllib3 default value 3 + """ + # Enable client side validation + self.client_side_validation = True + + self.socket_options = None + """Options to pass down to the underlying urllib3 socket + """ + + self.datetime_format = "%Y-%m-%dT%H:%M:%S.%f%z" + """datetime format + """ + + self.date_format = "%Y-%m-%d" + """date format + """ + + def __deepcopy__(self, memo): + cls = self.__class__ + result = cls.__new__(cls) + memo[id(self)] = result + for k, v in self.__dict__.items(): + if k not in ('logger', 'logger_file_handler'): + setattr(result, k, copy.deepcopy(v, memo)) + # shallow copy of loggers + result.logger = copy.copy(self.logger) + # use setters to configure loggers + result.logger_file = self.logger_file + result.debug = self.debug + return result + + def __setattr__(self, name, value): + object.__setattr__(self, name, value) + + @classmethod + def set_default(cls, default): + """Set default instance of configuration. + + It stores default configuration, which can be + returned by get_default_copy method. + + :param default: object of Configuration + """ + cls._default = default + + @classmethod + def get_default_copy(cls): + """Deprecated. Please use `get_default` instead. + + Deprecated. Please use `get_default` instead. + + :return: The configuration object. + """ + return cls.get_default() + + @classmethod + def get_default(cls): + """Return the default configuration. + + This method returns newly created, based on default constructor, + object of Configuration class or returns a copy of default + configuration. + + :return: The configuration object. + """ + if cls._default is None: + cls._default = Configuration() + return cls._default + + @property + def logger_file(self): + """The logger file. + + If the logger_file is None, then add stream handler and remove file + handler. Otherwise, add file handler and remove stream handler. + + :param value: The logger_file path. + :type: str + """ + return self.__logger_file + + @logger_file.setter + def logger_file(self, value): + """The logger file. + + If the logger_file is None, then add stream handler and remove file + handler. Otherwise, add file handler and remove stream handler. + + :param value: The logger_file path. + :type: str + """ + self.__logger_file = value + if self.__logger_file: + # If set logging file, + # then add file handler and remove stream handler. + self.logger_file_handler = logging.FileHandler(self.__logger_file) + self.logger_file_handler.setFormatter(self.logger_formatter) + for _, logger in self.logger.items(): + logger.addHandler(self.logger_file_handler) + + @property + def debug(self): + """Debug status + + :param value: The debug status, True or False. + :type: bool + """ + return self.__debug + + @debug.setter + def debug(self, value): + """Debug status + + :param value: The debug status, True or False. + :type: bool + """ + self.__debug = value + if self.__debug: + # if debug status is True, turn on debug logging + for _, logger in self.logger.items(): + logger.setLevel(logging.DEBUG) + # turn on httplib debug + httplib.HTTPConnection.debuglevel = 1 + else: + # if debug status is False, turn off debug logging, + # setting log level to default `logging.WARNING` + for _, logger in self.logger.items(): + logger.setLevel(logging.WARNING) + # turn off httplib debug + httplib.HTTPConnection.debuglevel = 0 + + @property + def logger_format(self): + """The logger format. + + The logger_formatter will be updated when sets logger_format. + + :param value: The format string. + :type: str + """ + return self.__logger_format + + @logger_format.setter + def logger_format(self, value): + """The logger format. + + The logger_formatter will be updated when sets logger_format. + + :param value: The format string. + :type: str + """ + self.__logger_format = value + self.logger_formatter = logging.Formatter(self.__logger_format) + + def get_api_key_with_prefix(self, identifier, alias=None): + """Gets API key (with prefix if set). + + :param identifier: The identifier of apiKey. + :param alias: The alternative identifier of apiKey. + :return: The token for api key authentication. + """ + if self.refresh_api_key_hook is not None: + self.refresh_api_key_hook(self) + key = self.api_key.get( + identifier, + self.api_key.get(alias) if alias is not None else None) + if key: + prefix = self.api_key_prefix.get(identifier) + if prefix: + return "%s %s" % (prefix, key) + else: + return key + + def get_basic_auth_token(self): + """Gets HTTP basic authentication header (string). + + :return: The token for basic HTTP authentication. + """ + username = "" + if self.username is not None: + username = self.username + password = "" + if self.password is not None: + password = self.password + return urllib3.util.make_headers(basic_auth=username + ':' + + password).get('authorization') + + def auth_settings(self): + """Gets Auth Settings dict for api client. + + :return: The Auth Settings information dict. + """ + auth = {} + if self.access_token is not None: + auth['UserContextAuth'] = { + 'type': 'oauth2', + 'in': 'header', + 'key': 'Authorization', + 'value': 'Bearer ' + self.access_token + } + if self.access_token is not None: + auth['UserContextAuth'] = { + 'type': 'oauth2', + 'in': 'header', + 'key': 'Authorization', + 'value': 'Bearer ' + self.access_token + } + return auth + + def to_debug_report(self): + """Gets the essential information for debugging. + + :return: The report for debugging. + """ + return "Python SDK Debug Report:\n"\ + "OS: {env}\n"\ + "Python Version: {pyversion}\n"\ + "Version of the API: 2.0.0\n"\ + "SDK Package Version: 1.0.0".\ + format(env=sys.platform, pyversion=sys.version) + + def get_host_settings(self): + """Gets an array of host settings + + :return: An array of host settings + """ + return [{ + 'url': "https://{tenant}.api.identitynow.com/v2", + 'description': "This is the production API server.", + 'variables': { + 'tenant': { + 'description': + "This is the name of your tenant, typically your company's name.", + 'default_value': "sailpoint", + } + } + }, { + 'url': "https://{apiUrl}/v2", + 'description': "This is the V2 API server.", + 'variables': { + 'apiUrl': { + 'description': "This is the api url of your tenant", + 'default_value': "sailpoint.api.identitynow.com", + } + } + }] + + def get_host_from_settings(self, index, variables=None, servers=None): + """Gets host URL based on the index and variables + :param index: array index of the host settings + :param variables: hash of variable and the corresponding value + :param servers: an array of host settings or None + :return: URL based on host settings + """ + if index is None: + return self._base_path + + variables = {} if variables is None else variables + servers = self.get_host_settings() if servers is None else servers + + try: + server = servers[index] + except IndexError: + raise ValueError( + "Invalid index {0} when selecting the host settings. " + "Must be less than {1}".format(index, len(servers))) + + url = server['url'] + + # go through variables and replace placeholders + for variable_name, variable in server.get('variables', {}).items(): + used_value = variables.get(variable_name, + variable['default_value']) + + if 'enum_values' in variable \ + and used_value not in variable['enum_values']: + raise ValueError( + "The variable `{0}` in the host URL has invalid value " + "{1}. Must be {2}.".format(variable_name, + variables[variable_name], + variable['enum_values'])) + + url = url.replace("{" + variable_name + "}", used_value) + + return url + + @property + def host(self): + """Return generated host.""" + return self.get_host_from_settings(self.server_index, + variables=self.server_variables) + + @host.setter + def host(self, value): + """Fix base path.""" + self._base_path = value + self.server_index = None diff --git a/sailpoint/v2/docs/BulkDeleteWorkGroups200Response.md b/sailpoint/v2/docs/BulkDeleteWorkGroups200Response.md new file mode 100644 index 000000000..74ea36f21 --- /dev/null +++ b/sailpoint/v2/docs/BulkDeleteWorkGroups200Response.md @@ -0,0 +1,30 @@ +# BulkDeleteWorkGroups200Response + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**deleted** | **List[str]** | | [optional] +**in_use** | **List[str]** | | [optional] +**not_found** | **List[str]** | | [optional] + +## Example + +```python +from v2.models.bulk_delete_work_groups200_response import BulkDeleteWorkGroups200Response + +# TODO update the JSON string below +json = "{}" +# create an instance of BulkDeleteWorkGroups200Response from a JSON string +bulk_delete_work_groups200_response_instance = BulkDeleteWorkGroups200Response.from_json(json) +# print the JSON string representation of the object +print BulkDeleteWorkGroups200Response.to_json() + +# convert the object into a dict +bulk_delete_work_groups200_response_dict = bulk_delete_work_groups200_response_instance.to_dict() +# create an instance of BulkDeleteWorkGroups200Response from a dict +bulk_delete_work_groups200_response_form_dict = bulk_delete_work_groups200_response.from_dict(bulk_delete_work_groups200_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/v2/docs/BulkDeleteWorkGroupsRequest.md b/sailpoint/v2/docs/BulkDeleteWorkGroupsRequest.md new file mode 100644 index 000000000..8f4c1bf24 --- /dev/null +++ b/sailpoint/v2/docs/BulkDeleteWorkGroupsRequest.md @@ -0,0 +1,28 @@ +# BulkDeleteWorkGroupsRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**ids** | **List[str]** | | [optional] + +## Example + +```python +from v2.models.bulk_delete_work_groups_request import BulkDeleteWorkGroupsRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of BulkDeleteWorkGroupsRequest from a JSON string +bulk_delete_work_groups_request_instance = BulkDeleteWorkGroupsRequest.from_json(json) +# print the JSON string representation of the object +print BulkDeleteWorkGroupsRequest.to_json() + +# convert the object into a dict +bulk_delete_work_groups_request_dict = bulk_delete_work_groups_request_instance.to_dict() +# create an instance of BulkDeleteWorkGroupsRequest from a dict +bulk_delete_work_groups_request_form_dict = bulk_delete_work_groups_request.from_dict(bulk_delete_work_groups_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/v2/docs/CreateWorkgroupRequest.md b/sailpoint/v2/docs/CreateWorkgroupRequest.md new file mode 100644 index 000000000..1526d6240 --- /dev/null +++ b/sailpoint/v2/docs/CreateWorkgroupRequest.md @@ -0,0 +1,30 @@ +# CreateWorkgroupRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] +**description** | **str** | | [optional] +**owner** | [**CreateWorkgroupRequestOwner**](CreateWorkgroupRequestOwner.md) | | [optional] + +## Example + +```python +from v2.models.create_workgroup_request import CreateWorkgroupRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of CreateWorkgroupRequest from a JSON string +create_workgroup_request_instance = CreateWorkgroupRequest.from_json(json) +# print the JSON string representation of the object +print CreateWorkgroupRequest.to_json() + +# convert the object into a dict +create_workgroup_request_dict = create_workgroup_request_instance.to_dict() +# create an instance of CreateWorkgroupRequest from a dict +create_workgroup_request_form_dict = create_workgroup_request.from_dict(create_workgroup_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/v2/docs/CreateWorkgroupRequestOwner.md b/sailpoint/v2/docs/CreateWorkgroupRequestOwner.md new file mode 100644 index 000000000..285b0acf0 --- /dev/null +++ b/sailpoint/v2/docs/CreateWorkgroupRequestOwner.md @@ -0,0 +1,28 @@ +# CreateWorkgroupRequestOwner + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [optional] + +## Example + +```python +from v2.models.create_workgroup_request_owner import CreateWorkgroupRequestOwner + +# TODO update the JSON string below +json = "{}" +# create an instance of CreateWorkgroupRequestOwner from a JSON string +create_workgroup_request_owner_instance = CreateWorkgroupRequestOwner.from_json(json) +# print the JSON string representation of the object +print CreateWorkgroupRequestOwner.to_json() + +# convert the object into a dict +create_workgroup_request_owner_dict = create_workgroup_request_owner_instance.to_dict() +# create an instance of CreateWorkgroupRequestOwner from a dict +create_workgroup_request_owner_form_dict = create_workgroup_request_owner.from_dict(create_workgroup_request_owner_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/v2/docs/GetOrgSettings200Response.md b/sailpoint/v2/docs/GetOrgSettings200Response.md new file mode 100644 index 000000000..8cc251cba --- /dev/null +++ b/sailpoint/v2/docs/GetOrgSettings200Response.md @@ -0,0 +1,62 @@ +# GetOrgSettings200Response + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | | [optional] +**name** | **str** | | [optional] +**description** | **str** | | [optional] +**date_created** | **datetime** | | [optional] +**last_updated** | **datetime** | | [optional] +**script_name** | **str** | | [optional] +**sso_domain** | **str** | | [optional] +**status** | **str** | | [optional] +**max_registered_identities** | **int** | | [optional] +**identity_count** | **int** | | [optional] +**kba_req_for_authn** | **int** | | [optional] +**kba_req_answers** | **int** | | [optional] +**lockout_attempt_threshold** | **int** | | [optional] +**lockout_time_minutes** | **int** | | [optional] +**usage_cert_required** | **bool** | | [optional] +**admin_strong_auth_required** | **bool** | | [optional] +**enable_external_password_change** | **bool** | | [optional] +**enable_password_replay** | **bool** | | [optional] +**enable_automatic_password_replay** | **bool** | | [optional] +**netmasks** | **List[str]** | | [optional] +**country_codes** | **List[str]** | | [optional] +**white_list** | **bool** | | [optional] +**email_test_mode** | **bool** | | [optional] +**email_test_address** | **str** | | [optional] +**username_empty_text** | **str** | | [optional] +**username_label** | **str** | | [optional] +**enable_automation_generation** | **bool** | | [optional] +**password_replay_state** | **str** | | [optional] +**system_notification_config** | [**GetOrgSettings200ResponseSystemNotificationConfig**](GetOrgSettings200ResponseSystemNotificationConfig.md) | | [optional] +**system_notification_emails** | **List[str]** | | [optional] +**login_url** | **str** | | [optional] +**redirect_patterns** | **List[str]** | | [optional] +**style_hash** | **str** | | [optional] +**approval_config** | [**GetOrgSettings200ResponseApprovalConfig**](GetOrgSettings200ResponseApprovalConfig.md) | | [optional] +**sso_partner_source** | **str** | | [optional] + +## Example + +```python +from v2.models.get_org_settings200_response import GetOrgSettings200Response + +# TODO update the JSON string below +json = "{}" +# create an instance of GetOrgSettings200Response from a JSON string +get_org_settings200_response_instance = GetOrgSettings200Response.from_json(json) +# print the JSON string representation of the object +print GetOrgSettings200Response.to_json() + +# convert the object into a dict +get_org_settings200_response_dict = get_org_settings200_response_instance.to_dict() +# create an instance of GetOrgSettings200Response from a dict +get_org_settings200_response_form_dict = get_org_settings200_response.from_dict(get_org_settings200_response_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/v2/docs/GetOrgSettings200ResponseApprovalConfig.md b/sailpoint/v2/docs/GetOrgSettings200ResponseApprovalConfig.md new file mode 100644 index 000000000..c2c18dbf6 --- /dev/null +++ b/sailpoint/v2/docs/GetOrgSettings200ResponseApprovalConfig.md @@ -0,0 +1,31 @@ +# GetOrgSettings200ResponseApprovalConfig + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**days_till_escalation** | **int** | | +**days_between_reminders** | **int** | | +**max_reminders** | **int** | | +**fallback_approver** | **str** | | + +## Example + +```python +from v2.models.get_org_settings200_response_approval_config import GetOrgSettings200ResponseApprovalConfig + +# TODO update the JSON string below +json = "{}" +# create an instance of GetOrgSettings200ResponseApprovalConfig from a JSON string +get_org_settings200_response_approval_config_instance = GetOrgSettings200ResponseApprovalConfig.from_json(json) +# print the JSON string representation of the object +print GetOrgSettings200ResponseApprovalConfig.to_json() + +# convert the object into a dict +get_org_settings200_response_approval_config_dict = get_org_settings200_response_approval_config_instance.to_dict() +# create an instance of GetOrgSettings200ResponseApprovalConfig from a dict +get_org_settings200_response_approval_config_form_dict = get_org_settings200_response_approval_config.from_dict(get_org_settings200_response_approval_config_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/v2/docs/GetOrgSettings200ResponseSystemNotificationConfig.md b/sailpoint/v2/docs/GetOrgSettings200ResponseSystemNotificationConfig.md new file mode 100644 index 000000000..3ef5fbdb0 --- /dev/null +++ b/sailpoint/v2/docs/GetOrgSettings200ResponseSystemNotificationConfig.md @@ -0,0 +1,29 @@ +# GetOrgSettings200ResponseSystemNotificationConfig + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**notifications** | [**List[GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner]**](GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner.md) | | [optional] +**recipient_type** | **str** | | [optional] + +## Example + +```python +from v2.models.get_org_settings200_response_system_notification_config import GetOrgSettings200ResponseSystemNotificationConfig + +# TODO update the JSON string below +json = "{}" +# create an instance of GetOrgSettings200ResponseSystemNotificationConfig from a JSON string +get_org_settings200_response_system_notification_config_instance = GetOrgSettings200ResponseSystemNotificationConfig.from_json(json) +# print the JSON string representation of the object +print GetOrgSettings200ResponseSystemNotificationConfig.to_json() + +# convert the object into a dict +get_org_settings200_response_system_notification_config_dict = get_org_settings200_response_system_notification_config_instance.to_dict() +# create an instance of GetOrgSettings200ResponseSystemNotificationConfig from a dict +get_org_settings200_response_system_notification_config_form_dict = get_org_settings200_response_system_notification_config.from_dict(get_org_settings200_response_system_notification_config_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/v2/docs/GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner.md b/sailpoint/v2/docs/GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner.md new file mode 100644 index 000000000..491dfb205 --- /dev/null +++ b/sailpoint/v2/docs/GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner.md @@ -0,0 +1,30 @@ +# GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | **str** | | [optional] +**by_email** | **bool** | | [optional] +**thresholds** | [**GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds**](GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds.md) | | [optional] + +## Example + +```python +from v2.models.get_org_settings200_response_system_notification_config_notifications_inner import GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner + +# TODO update the JSON string below +json = "{}" +# create an instance of GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner from a JSON string +get_org_settings200_response_system_notification_config_notifications_inner_instance = GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner.from_json(json) +# print the JSON string representation of the object +print GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner.to_json() + +# convert the object into a dict +get_org_settings200_response_system_notification_config_notifications_inner_dict = get_org_settings200_response_system_notification_config_notifications_inner_instance.to_dict() +# create an instance of GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner from a dict +get_org_settings200_response_system_notification_config_notifications_inner_form_dict = get_org_settings200_response_system_notification_config_notifications_inner.from_dict(get_org_settings200_response_system_notification_config_notifications_inner_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/v2/docs/GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds.md b/sailpoint/v2/docs/GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds.md new file mode 100644 index 000000000..d3e6bd475 --- /dev/null +++ b/sailpoint/v2/docs/GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds.md @@ -0,0 +1,29 @@ +# GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**healthy** | **str** | | [optional] +**unhealthy** | **str** | | [optional] + +## Example + +```python +from v2.models.get_org_settings200_response_system_notification_config_notifications_inner_thresholds import GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds + +# TODO update the JSON string below +json = "{}" +# create an instance of GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds from a JSON string +get_org_settings200_response_system_notification_config_notifications_inner_thresholds_instance = GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds.from_json(json) +# print the JSON string representation of the object +print GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds.to_json() + +# convert the object into a dict +get_org_settings200_response_system_notification_config_notifications_inner_thresholds_dict = get_org_settings200_response_system_notification_config_notifications_inner_thresholds_instance.to_dict() +# create an instance of GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds from a dict +get_org_settings200_response_system_notification_config_notifications_inner_thresholds_form_dict = get_org_settings200_response_system_notification_config_notifications_inner_thresholds.from_dict(get_org_settings200_response_system_notification_config_notifications_inner_thresholds_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/v2/docs/GovernanceGroupsApi.md b/sailpoint/v2/docs/GovernanceGroupsApi.md new file mode 100644 index 000000000..b21eba887 --- /dev/null +++ b/sailpoint/v2/docs/GovernanceGroupsApi.md @@ -0,0 +1,722 @@ +# v2.GovernanceGroupsApi + +All URIs are relative to *https://sailpoint.api.identitynow.com/v2* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**bulk_delete_work_groups**](GovernanceGroupsApi.md#bulk_delete_work_groups) | **POST** /workgroups/bulk-delete | Bulk delete work groups +[**create_workgroup**](GovernanceGroupsApi.md#create_workgroup) | **POST** /workgroups | Create Work Group +[**delete_workgroup**](GovernanceGroupsApi.md#delete_workgroup) | **DELETE** /workgroups/{workgroupId} | Delete Work Group By Id +[**get_workgroup**](GovernanceGroupsApi.md#get_workgroup) | **GET** /workgroups/{workgroupId} | Get Work Group By Id +[**list_workgroup_connections**](GovernanceGroupsApi.md#list_workgroup_connections) | **GET** /workgroups/{workgroupId}/connections | List Work Group Connections +[**list_workgroup_members**](GovernanceGroupsApi.md#list_workgroup_members) | **GET** /workgroups/{workgroupId}/members | List Work Group Members +[**list_workgroups**](GovernanceGroupsApi.md#list_workgroups) | **GET** /workgroups | List Work Groups +[**modify_workgroup_members**](GovernanceGroupsApi.md#modify_workgroup_members) | **POST** /workgroups/{workgroupId}/members | Modify Work Group Members +[**update_workgroup**](GovernanceGroupsApi.md#update_workgroup) | **PATCH** /workgroups/{workgroupId} | Update Work Group By Id + + +# **bulk_delete_work_groups** +> BulkDeleteWorkGroups200Response bulk_delete_work_groups(bulk_delete_work_groups_request) + +Bulk delete work groups + +This API allows you to bulk-delete work groups + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import v2 +from v2.models.bulk_delete_work_groups200_response import BulkDeleteWorkGroups200Response +from v2.models.bulk_delete_work_groups_request import BulkDeleteWorkGroupsRequest +from v2.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = v2.Configuration( + host = "https://sailpoint.api.identitynow.com/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with v2.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = v2.GovernanceGroupsApi(api_client) + bulk_delete_work_groups_request = v2.BulkDeleteWorkGroupsRequest() # BulkDeleteWorkGroupsRequest | Work group ids to delete + + try: + # Bulk delete work groups + api_response = api_instance.bulk_delete_work_groups(bulk_delete_work_groups_request) + print("The response of GovernanceGroupsApi->bulk_delete_work_groups:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling GovernanceGroupsApi->bulk_delete_work_groups: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **bulk_delete_work_groups_request** | [**BulkDeleteWorkGroupsRequest**](BulkDeleteWorkGroupsRequest.md)| Work group ids to delete | + +### Return type + +[**BulkDeleteWorkGroups200Response**](BulkDeleteWorkGroups200Response.md) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | List of work group objects | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_workgroup** +> List[ListWorkgroups200ResponseInner] create_workgroup(create_workgroup_request) + +Create Work Group + +This API allows you to create a work group + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import v2 +from v2.models.create_workgroup_request import CreateWorkgroupRequest +from v2.models.list_workgroups200_response_inner import ListWorkgroups200ResponseInner +from v2.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = v2.Configuration( + host = "https://sailpoint.api.identitynow.com/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with v2.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = v2.GovernanceGroupsApi(api_client) + create_workgroup_request = v2.CreateWorkgroupRequest() # CreateWorkgroupRequest | Work group to create. + + try: + # Create Work Group + api_response = api_instance.create_workgroup(create_workgroup_request) + print("The response of GovernanceGroupsApi->create_workgroup:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling GovernanceGroupsApi->create_workgroup: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **create_workgroup_request** | [**CreateWorkgroupRequest**](CreateWorkgroupRequest.md)| Work group to create. | + +### Return type + +[**List[ListWorkgroups200ResponseInner]**](ListWorkgroups200ResponseInner.md) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | List of work group objects | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_workgroup** +> delete_workgroup(workgroup_id) + +Delete Work Group By Id + +This API deletes a single workgroup based on the ID + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import v2 +from v2.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = v2.Configuration( + host = "https://sailpoint.api.identitynow.com/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with v2.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = v2.GovernanceGroupsApi(api_client) + workgroup_id = 'ef38f94347e94562b5bb8424a56397d8' # str | The workgroup ID + + try: + # Delete Work Group By Id + api_instance.delete_workgroup(workgroup_id) + except Exception as e: + print("Exception when calling GovernanceGroupsApi->delete_workgroup: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **workgroup_id** | **str**| The workgroup ID | + +### Return type + +void (empty response body) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Empty response on successful deletion | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_workgroup** +> ListWorkgroups200ResponseInner get_workgroup(workgroup_id) + +Get Work Group By Id + +This API returns the details for a single workgroup based on the ID + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import v2 +from v2.models.list_workgroups200_response_inner import ListWorkgroups200ResponseInner +from v2.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = v2.Configuration( + host = "https://sailpoint.api.identitynow.com/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with v2.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = v2.GovernanceGroupsApi(api_client) + workgroup_id = 'ef38f94347e94562b5bb8424a56397d8' # str | The workgroup ID + + try: + # Get Work Group By Id + api_response = api_instance.get_workgroup(workgroup_id) + print("The response of GovernanceGroupsApi->get_workgroup:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling GovernanceGroupsApi->get_workgroup: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **workgroup_id** | **str**| The workgroup ID | + +### Return type + +[**ListWorkgroups200ResponseInner**](ListWorkgroups200ResponseInner.md) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Workgroup object | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_workgroup_connections** +> List[ListWorkgroupConnections200ResponseInner] list_workgroup_connections(workgroup_id) + +List Work Group Connections + +This API returns the connections of a work group + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import v2 +from v2.models.list_workgroup_connections200_response_inner import ListWorkgroupConnections200ResponseInner +from v2.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = v2.Configuration( + host = "https://sailpoint.api.identitynow.com/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with v2.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = v2.GovernanceGroupsApi(api_client) + workgroup_id = 'ef38f94347e94562b5bb8424a56397d8' # str | The workgroup ID + + try: + # List Work Group Connections + api_response = api_instance.list_workgroup_connections(workgroup_id) + print("The response of GovernanceGroupsApi->list_workgroup_connections:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling GovernanceGroupsApi->list_workgroup_connections: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **workgroup_id** | **str**| The workgroup ID | + +### Return type + +[**List[ListWorkgroupConnections200ResponseInner]**](ListWorkgroupConnections200ResponseInner.md) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | List of work group connection objects | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_workgroup_members** +> List[ListWorkgroupMembers200ResponseInner] list_workgroup_members(workgroup_id, limit=limit, offset=offset, filters=filters) + +List Work Group Members + +This API returns the members of a work group + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import v2 +from v2.models.list_workgroup_members200_response_inner import ListWorkgroupMembers200ResponseInner +from v2.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = v2.Configuration( + host = "https://sailpoint.api.identitynow.com/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with v2.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = v2.GovernanceGroupsApi(api_client) + workgroup_id = 'ef38f94347e94562b5bb8424a56397d8' # str | The workgroup ID + limit = 250 # int | Max number of results to return (optional) (default to 250) + offset = 0 # int | Offset into the full result set. Usually specified with *limit* to paginate through the results. (optional) (default to 0) + filters = 'filters_example' # str | Filter results using the following syntax. [{property:name, value: \"Tyler\", operation: EQ}] (optional) + + try: + # List Work Group Members + api_response = api_instance.list_workgroup_members(workgroup_id, limit=limit, offset=offset, filters=filters) + print("The response of GovernanceGroupsApi->list_workgroup_members:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling GovernanceGroupsApi->list_workgroup_members: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **workgroup_id** | **str**| The workgroup ID | + **limit** | **int**| Max number of results to return | [optional] [default to 250] + **offset** | **int**| Offset into the full result set. Usually specified with *limit* to paginate through the results. | [optional] [default to 0] + **filters** | **str**| Filter results using the following syntax. [{property:name, value: \"Tyler\", operation: EQ}] | [optional] + +### Return type + +[**List[ListWorkgroupMembers200ResponseInner]**](ListWorkgroupMembers200ResponseInner.md) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | List of work group member objects | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_workgroups** +> List[ListWorkgroups200ResponseInner] list_workgroups(limit=limit, offset=offset, filters=filters) + +List Work Groups + +This API returns a list of work groups + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import v2 +from v2.models.list_workgroups200_response_inner import ListWorkgroups200ResponseInner +from v2.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = v2.Configuration( + host = "https://sailpoint.api.identitynow.com/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with v2.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = v2.GovernanceGroupsApi(api_client) + limit = 250 # int | Max number of results to return (optional) (default to 250) + offset = 0 # int | Offset into the full result set. Usually specified with *limit* to paginate through the results. (optional) (default to 0) + filters = 'filters_example' # str | Filter results using the following syntax. [{property:name, value: \"Tyler\", operation: EQ}] (optional) + + try: + # List Work Groups + api_response = api_instance.list_workgroups(limit=limit, offset=offset, filters=filters) + print("The response of GovernanceGroupsApi->list_workgroups:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling GovernanceGroupsApi->list_workgroups: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **limit** | **int**| Max number of results to return | [optional] [default to 250] + **offset** | **int**| Offset into the full result set. Usually specified with *limit* to paginate through the results. | [optional] [default to 0] + **filters** | **str**| Filter results using the following syntax. [{property:name, value: \"Tyler\", operation: EQ}] | [optional] + +### Return type + +[**List[ListWorkgroups200ResponseInner]**](ListWorkgroups200ResponseInner.md) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | List of work group objects | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **modify_workgroup_members** +> modify_workgroup_members(workgroup_id, modify_workgroup_members_request) + +Modify Work Group Members + +This API allows you to modify the members of a work group + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import v2 +from v2.models.modify_workgroup_members_request import ModifyWorkgroupMembersRequest +from v2.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = v2.Configuration( + host = "https://sailpoint.api.identitynow.com/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with v2.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = v2.GovernanceGroupsApi(api_client) + workgroup_id = 'ef38f94347e94562b5bb8424a56397d8' # str | The workgroup ID + modify_workgroup_members_request = v2.ModifyWorkgroupMembersRequest() # ModifyWorkgroupMembersRequest | Add/Remove workgroup member ids. + + try: + # Modify Work Group Members + api_instance.modify_workgroup_members(workgroup_id, modify_workgroup_members_request) + except Exception as e: + print("Exception when calling GovernanceGroupsApi->modify_workgroup_members: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **workgroup_id** | **str**| The workgroup ID | + **modify_workgroup_members_request** | [**ModifyWorkgroupMembersRequest**](ModifyWorkgroupMembersRequest.md)| Add/Remove workgroup member ids. | + +### Return type + +void (empty response body) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | Empty response on successful deletion | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_workgroup** +> ListWorkgroups200ResponseInner update_workgroup(workgroup_id, create_workgroup_request) + +Update Work Group By Id + +This API updates and returns the details for a single workgroup based on the ID + +### Example + +* OAuth Authentication (UserContextAuth): +* OAuth Authentication (UserContextAuth): +```python +import time +import os +import v2 +from v2.models.create_workgroup_request import CreateWorkgroupRequest +from v2.models.list_workgroups200_response_inner import ListWorkgroups200ResponseInner +from v2.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = v2.Configuration( + host = "https://sailpoint.api.identitynow.com/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +# Enter a context with an instance of the API client +with v2.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = v2.GovernanceGroupsApi(api_client) + workgroup_id = 'ef38f94347e94562b5bb8424a56397d8' # str | The workgroup ID + create_workgroup_request = v2.CreateWorkgroupRequest() # CreateWorkgroupRequest | Work group to modify. + + try: + # Update Work Group By Id + api_response = api_instance.update_workgroup(workgroup_id, create_workgroup_request) + print("The response of GovernanceGroupsApi->update_workgroup:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling GovernanceGroupsApi->update_workgroup: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **workgroup_id** | **str**| The workgroup ID | + **create_workgroup_request** | [**CreateWorkgroupRequest**](CreateWorkgroupRequest.md)| Work group to modify. | + +### Return type + +[**ListWorkgroups200ResponseInner**](ListWorkgroups200ResponseInner.md) + +### Authorization + +[UserContextAuth](../README.md#UserContextAuth), [UserContextAuth](../README.md#UserContextAuth) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Workgroup object | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/sailpoint/v2/docs/ListWorkgroupConnections200ResponseInner.md b/sailpoint/v2/docs/ListWorkgroupConnections200ResponseInner.md new file mode 100644 index 000000000..263c52290 --- /dev/null +++ b/sailpoint/v2/docs/ListWorkgroupConnections200ResponseInner.md @@ -0,0 +1,33 @@ +# ListWorkgroupConnections200ResponseInner + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**connection_type** | **str** | | [optional] +**description** | **str** | | [optional] +**name** | **str** | | [optional] +**object_id** | **str** | | [optional] +**object_type** | **str** | | [optional] +**workgroup_id** | **str** | | [optional] + +## Example + +```python +from v2.models.list_workgroup_connections200_response_inner import ListWorkgroupConnections200ResponseInner + +# TODO update the JSON string below +json = "{}" +# create an instance of ListWorkgroupConnections200ResponseInner from a JSON string +list_workgroup_connections200_response_inner_instance = ListWorkgroupConnections200ResponseInner.from_json(json) +# print the JSON string representation of the object +print ListWorkgroupConnections200ResponseInner.to_json() + +# convert the object into a dict +list_workgroup_connections200_response_inner_dict = list_workgroup_connections200_response_inner_instance.to_dict() +# create an instance of ListWorkgroupConnections200ResponseInner from a dict +list_workgroup_connections200_response_inner_form_dict = list_workgroup_connections200_response_inner.from_dict(list_workgroup_connections200_response_inner_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/v2/docs/ListWorkgroupMembers200ResponseInner.md b/sailpoint/v2/docs/ListWorkgroupMembers200ResponseInner.md new file mode 100644 index 000000000..c48dc61fe --- /dev/null +++ b/sailpoint/v2/docs/ListWorkgroupMembers200ResponseInner.md @@ -0,0 +1,32 @@ +# ListWorkgroupMembers200ResponseInner + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**alias** | **str** | | [optional] +**email** | **str** | | [optional] +**external_id** | **str** | | [optional] +**id** | **int** | | [optional] +**name** | **str** | | [optional] + +## Example + +```python +from v2.models.list_workgroup_members200_response_inner import ListWorkgroupMembers200ResponseInner + +# TODO update the JSON string below +json = "{}" +# create an instance of ListWorkgroupMembers200ResponseInner from a JSON string +list_workgroup_members200_response_inner_instance = ListWorkgroupMembers200ResponseInner.from_json(json) +# print the JSON string representation of the object +print ListWorkgroupMembers200ResponseInner.to_json() + +# convert the object into a dict +list_workgroup_members200_response_inner_dict = list_workgroup_members200_response_inner_instance.to_dict() +# create an instance of ListWorkgroupMembers200ResponseInner from a dict +list_workgroup_members200_response_inner_form_dict = list_workgroup_members200_response_inner.from_dict(list_workgroup_members200_response_inner_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/v2/docs/ListWorkgroups200ResponseInner.md b/sailpoint/v2/docs/ListWorkgroups200ResponseInner.md new file mode 100644 index 000000000..6e61d9308 --- /dev/null +++ b/sailpoint/v2/docs/ListWorkgroups200ResponseInner.md @@ -0,0 +1,35 @@ +# ListWorkgroups200ResponseInner + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**connection_count** | **int** | | [optional] +**created** | **int** | | [optional] +**description** | **str** | | [optional] +**id** | **str** | | [optional] +**member_count** | **int** | | [optional] +**modified** | **int** | | [optional] +**name** | **str** | | [optional] +**owner** | [**ListWorkgroups200ResponseInnerOwner**](ListWorkgroups200ResponseInnerOwner.md) | | [optional] + +## Example + +```python +from v2.models.list_workgroups200_response_inner import ListWorkgroups200ResponseInner + +# TODO update the JSON string below +json = "{}" +# create an instance of ListWorkgroups200ResponseInner from a JSON string +list_workgroups200_response_inner_instance = ListWorkgroups200ResponseInner.from_json(json) +# print the JSON string representation of the object +print ListWorkgroups200ResponseInner.to_json() + +# convert the object into a dict +list_workgroups200_response_inner_dict = list_workgroups200_response_inner_instance.to_dict() +# create an instance of ListWorkgroups200ResponseInner from a dict +list_workgroups200_response_inner_form_dict = list_workgroups200_response_inner.from_dict(list_workgroups200_response_inner_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/v2/docs/ListWorkgroups200ResponseInnerOwner.md b/sailpoint/v2/docs/ListWorkgroups200ResponseInnerOwner.md new file mode 100644 index 000000000..ee444af4d --- /dev/null +++ b/sailpoint/v2/docs/ListWorkgroups200ResponseInnerOwner.md @@ -0,0 +1,31 @@ +# ListWorkgroups200ResponseInnerOwner + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**display_name** | **str** | | [optional] +**email_address** | **str** | | [optional] +**id** | **str** | | [optional] +**name** | **str** | | [optional] + +## Example + +```python +from v2.models.list_workgroups200_response_inner_owner import ListWorkgroups200ResponseInnerOwner + +# TODO update the JSON string below +json = "{}" +# create an instance of ListWorkgroups200ResponseInnerOwner from a JSON string +list_workgroups200_response_inner_owner_instance = ListWorkgroups200ResponseInnerOwner.from_json(json) +# print the JSON string representation of the object +print ListWorkgroups200ResponseInnerOwner.to_json() + +# convert the object into a dict +list_workgroups200_response_inner_owner_dict = list_workgroups200_response_inner_owner_instance.to_dict() +# create an instance of ListWorkgroups200ResponseInnerOwner from a dict +list_workgroups200_response_inner_owner_form_dict = list_workgroups200_response_inner_owner.from_dict(list_workgroups200_response_inner_owner_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/v2/docs/ModifyWorkgroupMembersRequest.md b/sailpoint/v2/docs/ModifyWorkgroupMembersRequest.md new file mode 100644 index 000000000..991d98044 --- /dev/null +++ b/sailpoint/v2/docs/ModifyWorkgroupMembersRequest.md @@ -0,0 +1,29 @@ +# ModifyWorkgroupMembersRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**add** | **List[str]** | | [optional] +**remove** | **List[str]** | | [optional] + +## Example + +```python +from v2.models.modify_workgroup_members_request import ModifyWorkgroupMembersRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of ModifyWorkgroupMembersRequest from a JSON string +modify_workgroup_members_request_instance = ModifyWorkgroupMembersRequest.from_json(json) +# print the JSON string representation of the object +print ModifyWorkgroupMembersRequest.to_json() + +# convert the object into a dict +modify_workgroup_members_request_dict = modify_workgroup_members_request_instance.to_dict() +# create an instance of ModifyWorkgroupMembersRequest from a dict +modify_workgroup_members_request_form_dict = modify_workgroup_members_request.from_dict(modify_workgroup_members_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/v2/docs/OrgApi.md b/sailpoint/v2/docs/OrgApi.md new file mode 100644 index 000000000..7b01623af --- /dev/null +++ b/sailpoint/v2/docs/OrgApi.md @@ -0,0 +1,141 @@ +# v2.OrgApi + +All URIs are relative to *https://sailpoint.api.identitynow.com/v2* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**get_org_settings**](OrgApi.md#get_org_settings) | **GET** /org | Retrieves your org settings. +[**update_org_settings**](OrgApi.md#update_org_settings) | **PATCH** /org | Updates one or more org attributes. + + +# **get_org_settings** +> GetOrgSettings200Response get_org_settings() + +Retrieves your org settings. + +Retrieves information and operational settings for your org (as determined by the URL domain). + +### Example + +```python +import time +import os +import v2 +from v2.models.get_org_settings200_response import GetOrgSettings200Response +from v2.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = v2.Configuration( + host = "https://sailpoint.api.identitynow.com/v2" +) + + +# Enter a context with an instance of the API client +with v2.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = v2.OrgApi(api_client) + + try: + # Retrieves your org settings. + api_response = api_instance.get_org_settings() + print("The response of OrgApi->get_org_settings:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling OrgApi->get_org_settings: %s\n" % e) +``` + + + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**GetOrgSettings200Response**](GetOrgSettings200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK. | * ETag - Entity tag.
* Last-Modified - Last modified date.
* Link - Links to alternate or related resources.
| + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_org_settings** +> GetOrgSettings200Response update_org_settings(update_org_settings_request) + +Updates one or more org attributes. + +Updates one or more attributes for your org. + +### Example + +```python +import time +import os +import v2 +from v2.models.get_org_settings200_response import GetOrgSettings200Response +from v2.models.update_org_settings_request import UpdateOrgSettingsRequest +from v2.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = v2.Configuration( + host = "https://sailpoint.api.identitynow.com/v2" +) + + +# Enter a context with an instance of the API client +with v2.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = v2.OrgApi(api_client) + update_org_settings_request = v2.UpdateOrgSettingsRequest() # UpdateOrgSettingsRequest | Org settings to update. + + try: + # Updates one or more org attributes. + api_response = api_instance.update_org_settings(update_org_settings_request) + print("The response of OrgApi->update_org_settings:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling OrgApi->update_org_settings: %s\n" % e) +``` + + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **update_org_settings_request** | [**UpdateOrgSettingsRequest**](UpdateOrgSettingsRequest.md)| Org settings to update. | + +### Return type + +[**GetOrgSettings200Response**](GetOrgSettings200Response.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK. | * ETag - Entity tag.
* Last-Modified - Last modified date.
* Link - Links to alternate or related resources.
| + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/sailpoint/v2/docs/UpdateOrgSettingsRequest.md b/sailpoint/v2/docs/UpdateOrgSettingsRequest.md new file mode 100644 index 000000000..1d3de439e --- /dev/null +++ b/sailpoint/v2/docs/UpdateOrgSettingsRequest.md @@ -0,0 +1,50 @@ +# UpdateOrgSettingsRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**country_codes** | **List[str]** | | [optional] +**enable_external_password_change** | **bool** | | [optional] +**enable_automatic_password_replay** | **bool** | | [optional] +**enable_automation_generation** | **bool** | | [optional] +**kba_req_answers** | **int** | | [optional] +**kba_req_for_authn** | **int** | | [optional] +**lockout_attempt_threshold** | **int** | | [optional] +**lockout_time_minutes** | **int** | | [optional] +**login_url** | **str** | | [optional] +**netmasks** | **List[str]** | | [optional] +**notify_authentication_setting_change** | **bool** | | [optional] +**password_replay_state** | **str** | | [optional] +**preferred_identity_invite_template** | **str** | | [optional] +**redirect_patterns** | **List[str]** | | [optional] +**sso_partner_source** | **str** | | [optional] +**system_notification_emails** | **List[str]** | | [optional] +**track_analytics** | **bool** | | [optional] +**usage_cert_required** | **bool** | | [optional] +**usage_cert_text** | **str** | | [optional] +**username_empty_text** | **str** | | [optional] +**username_label** | **str** | | [optional] +**white_list** | **bool** | | [optional] +**approval_config** | [**GetOrgSettings200ResponseApprovalConfig**](GetOrgSettings200ResponseApprovalConfig.md) | | [optional] + +## Example + +```python +from v2.models.update_org_settings_request import UpdateOrgSettingsRequest + +# TODO update the JSON string below +json = "{}" +# create an instance of UpdateOrgSettingsRequest from a JSON string +update_org_settings_request_instance = UpdateOrgSettingsRequest.from_json(json) +# print the JSON string representation of the object +print UpdateOrgSettingsRequest.to_json() + +# convert the object into a dict +update_org_settings_request_dict = update_org_settings_request_instance.to_dict() +# create an instance of UpdateOrgSettingsRequest from a dict +update_org_settings_request_form_dict = update_org_settings_request.from_dict(update_org_settings_request_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sailpoint/v2/exceptions.py b/sailpoint/v2/exceptions.py new file mode 100644 index 000000000..524b478c4 --- /dev/null +++ b/sailpoint/v2/exceptions.py @@ -0,0 +1,175 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +class OpenApiException(Exception): + """The base exception class for all OpenAPIExceptions""" + + +class ApiTypeError(OpenApiException, TypeError): + + def __init__(self, + msg, + path_to_item=None, + valid_classes=None, + key_type=None) -> None: + """ Raises an exception for TypeErrors + + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (list): a list of keys an indices to get to the + current_item + None if unset + valid_classes (tuple): the primitive classes that current item + should be an instance of + None if unset + key_type (bool): False if our value is a value in a dict + True if it is a key in a dict + False if our item is an item in a list + None if unset + """ + self.path_to_item = path_to_item + self.valid_classes = valid_classes + self.key_type = key_type + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiTypeError, self).__init__(full_msg) + + +class ApiValueError(OpenApiException, ValueError): + + def __init__(self, msg, path_to_item=None) -> None: + """ + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (list) the path to the exception in the + received_data dict. None if unset + """ + + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiValueError, self).__init__(full_msg) + + +class ApiAttributeError(OpenApiException, AttributeError): + + def __init__(self, msg, path_to_item=None) -> None: + """ + Raised when an attribute reference or assignment fails. + + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (None/list) the path to the exception in the + received_data dict + """ + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiAttributeError, self).__init__(full_msg) + + +class ApiKeyError(OpenApiException, KeyError): + + def __init__(self, msg, path_to_item=None) -> None: + """ + Args: + msg (str): the exception message + + Keyword Args: + path_to_item (None/list) the path to the exception in the + received_data dict + """ + self.path_to_item = path_to_item + full_msg = msg + if path_to_item: + full_msg = "{0} at {1}".format(msg, render_path(path_to_item)) + super(ApiKeyError, self).__init__(full_msg) + + +class ApiException(OpenApiException): + + def __init__(self, status=None, reason=None, http_resp=None) -> None: + if http_resp: + self.status = http_resp.status + self.reason = http_resp.reason + self.body = http_resp.data + self.headers = http_resp.getheaders() + else: + self.status = status + self.reason = reason + self.body = None + self.headers = None + + def __str__(self): + """Custom error messages for exception""" + error_message = "({0})\n"\ + "Reason: {1}\n".format(self.status, self.reason) + if self.headers: + error_message += "HTTP response headers: {0}\n".format( + self.headers) + + if self.body: + error_message += "HTTP response body: {0}\n".format(self.body) + + return error_message + + +class BadRequestException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None) -> None: + super(BadRequestException, self).__init__(status, reason, http_resp) + + +class NotFoundException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None) -> None: + super(NotFoundException, self).__init__(status, reason, http_resp) + + +class UnauthorizedException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None) -> None: + super(UnauthorizedException, self).__init__(status, reason, http_resp) + + +class ForbiddenException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None) -> None: + super(ForbiddenException, self).__init__(status, reason, http_resp) + + +class ServiceException(ApiException): + + def __init__(self, status=None, reason=None, http_resp=None) -> None: + super(ServiceException, self).__init__(status, reason, http_resp) + + +def render_path(path_to_item): + """Returns a string representation of a path""" + result = "" + for pth in path_to_item: + if isinstance(pth, int): + result += "[{0}]".format(pth) + else: + result += "['{0}']".format(pth) + return result diff --git a/sailpoint/v2/models/__init__.py b/sailpoint/v2/models/__init__.py new file mode 100644 index 000000000..0e19de3c1 --- /dev/null +++ b/sailpoint/v2/models/__init__.py @@ -0,0 +1,30 @@ +# coding: utf-8 + +# flake8: noqa +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +# import models into model package +from v2.models.bulk_delete_work_groups200_response import BulkDeleteWorkGroups200Response +from v2.models.bulk_delete_work_groups_request import BulkDeleteWorkGroupsRequest +from v2.models.create_workgroup_request import CreateWorkgroupRequest +from v2.models.create_workgroup_request_owner import CreateWorkgroupRequestOwner +from v2.models.get_org_settings200_response import GetOrgSettings200Response +from v2.models.get_org_settings200_response_approval_config import GetOrgSettings200ResponseApprovalConfig +from v2.models.get_org_settings200_response_system_notification_config import GetOrgSettings200ResponseSystemNotificationConfig +from v2.models.get_org_settings200_response_system_notification_config_notifications_inner import GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner +from v2.models.get_org_settings200_response_system_notification_config_notifications_inner_thresholds import GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds +from v2.models.list_workgroup_connections200_response_inner import ListWorkgroupConnections200ResponseInner +from v2.models.list_workgroup_members200_response_inner import ListWorkgroupMembers200ResponseInner +from v2.models.list_workgroups200_response_inner import ListWorkgroups200ResponseInner +from v2.models.list_workgroups200_response_inner_owner import ListWorkgroups200ResponseInnerOwner +from v2.models.modify_workgroup_members_request import ModifyWorkgroupMembersRequest +from v2.models.update_org_settings_request import UpdateOrgSettingsRequest diff --git a/sailpoint/v2/models/bulk_delete_work_groups200_response.py b/sailpoint/v2/models/bulk_delete_work_groups200_response.py new file mode 100644 index 000000000..0df7bb5a9 --- /dev/null +++ b/sailpoint/v2/models/bulk_delete_work_groups200_response.py @@ -0,0 +1,72 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import List, Optional +from pydantic import BaseModel, Field, StrictStr, conlist + + +class BulkDeleteWorkGroups200Response(BaseModel): + """ + BulkDeleteWorkGroups200Response + """ + deleted: Optional[conlist(StrictStr)] = None + in_use: Optional[conlist(StrictStr)] = Field(None, alias="inUse") + not_found: Optional[conlist(StrictStr)] = Field(None, alias="notFound") + __properties = ["deleted", "inUse", "notFound"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> BulkDeleteWorkGroups200Response: + """Create an instance of BulkDeleteWorkGroups200Response from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> BulkDeleteWorkGroups200Response: + """Create an instance of BulkDeleteWorkGroups200Response from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return BulkDeleteWorkGroups200Response.parse_obj(obj) + + _obj = BulkDeleteWorkGroups200Response.parse_obj({ + "deleted": + obj.get("deleted"), + "in_use": + obj.get("inUse"), + "not_found": + obj.get("notFound") + }) + return _obj diff --git a/sailpoint/v2/models/bulk_delete_work_groups_request.py b/sailpoint/v2/models/bulk_delete_work_groups_request.py new file mode 100644 index 000000000..b2056cda1 --- /dev/null +++ b/sailpoint/v2/models/bulk_delete_work_groups_request.py @@ -0,0 +1,63 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import List, Optional +from pydantic import BaseModel, StrictStr, conlist + + +class BulkDeleteWorkGroupsRequest(BaseModel): + """ + BulkDeleteWorkGroupsRequest + """ + ids: Optional[conlist(StrictStr)] = None + __properties = ["ids"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> BulkDeleteWorkGroupsRequest: + """Create an instance of BulkDeleteWorkGroupsRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> BulkDeleteWorkGroupsRequest: + """Create an instance of BulkDeleteWorkGroupsRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return BulkDeleteWorkGroupsRequest.parse_obj(obj) + + _obj = BulkDeleteWorkGroupsRequest.parse_obj({"ids": obj.get("ids")}) + return _obj diff --git a/sailpoint/v2/models/create_workgroup_request.py b/sailpoint/v2/models/create_workgroup_request.py new file mode 100644 index 000000000..c01efe4c8 --- /dev/null +++ b/sailpoint/v2/models/create_workgroup_request.py @@ -0,0 +1,77 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional +from pydantic import BaseModel, StrictStr +from v2.models.create_workgroup_request_owner import CreateWorkgroupRequestOwner + + +class CreateWorkgroupRequest(BaseModel): + """ + CreateWorkgroupRequest + """ + name: Optional[StrictStr] = None + description: Optional[StrictStr] = None + owner: Optional[CreateWorkgroupRequestOwner] = None + __properties = ["name", "description", "owner"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> CreateWorkgroupRequest: + """Create an instance of CreateWorkgroupRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of owner + if self.owner: + _dict['owner'] = self.owner.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> CreateWorkgroupRequest: + """Create an instance of CreateWorkgroupRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return CreateWorkgroupRequest.parse_obj(obj) + + _obj = CreateWorkgroupRequest.parse_obj({ + "name": + obj.get("name"), + "description": + obj.get("description"), + "owner": + CreateWorkgroupRequestOwner.from_dict(obj.get("owner")) + if obj.get("owner") is not None else None + }) + return _obj diff --git a/sailpoint/v2/models/create_workgroup_request_owner.py b/sailpoint/v2/models/create_workgroup_request_owner.py new file mode 100644 index 000000000..72bf25606 --- /dev/null +++ b/sailpoint/v2/models/create_workgroup_request_owner.py @@ -0,0 +1,63 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional +from pydantic import BaseModel, StrictStr + + +class CreateWorkgroupRequestOwner(BaseModel): + """ + CreateWorkgroupRequestOwner + """ + id: Optional[StrictStr] = None + __properties = ["id"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> CreateWorkgroupRequestOwner: + """Create an instance of CreateWorkgroupRequestOwner from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> CreateWorkgroupRequestOwner: + """Create an instance of CreateWorkgroupRequestOwner from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return CreateWorkgroupRequestOwner.parse_obj(obj) + + _obj = CreateWorkgroupRequestOwner.parse_obj({"id": obj.get("id")}) + return _obj diff --git a/sailpoint/v2/models/get_org_settings200_response.py b/sailpoint/v2/models/get_org_settings200_response.py new file mode 100644 index 000000000..336e071c9 --- /dev/null +++ b/sailpoint/v2/models/get_org_settings200_response.py @@ -0,0 +1,239 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from datetime import datetime +from typing import List, Optional +from pydantic import BaseModel, Field, StrictBool, StrictInt, StrictStr, conlist, validator +from v2.models.get_org_settings200_response_approval_config import GetOrgSettings200ResponseApprovalConfig +from v2.models.get_org_settings200_response_system_notification_config import GetOrgSettings200ResponseSystemNotificationConfig + + +class GetOrgSettings200Response(BaseModel): + """ + GetOrgSettings200Response + """ + id: Optional[StrictStr] = None + name: Optional[StrictStr] = None + description: Optional[StrictStr] = None + date_created: Optional[datetime] = Field(None, alias="dateCreated") + last_updated: Optional[datetime] = Field(None, alias="lastUpdated") + script_name: Optional[StrictStr] = Field(None, alias="scriptName") + sso_domain: Optional[StrictStr] = Field(None, alias="ssoDomain") + status: Optional[StrictStr] = None + max_registered_identities: Optional[StrictInt] = Field( + None, alias="maxRegisteredIdentities") + identity_count: Optional[StrictInt] = Field(None, alias="identityCount") + kba_req_for_authn: Optional[StrictInt] = Field(None, + alias="kbaReqForAuthn") + kba_req_answers: Optional[StrictInt] = Field(None, alias="kbaReqAnswers") + lockout_attempt_threshold: Optional[StrictInt] = Field( + None, alias="lockoutAttemptThreshold") + lockout_time_minutes: Optional[StrictInt] = Field( + None, alias="lockoutTimeMinutes") + usage_cert_required: Optional[StrictBool] = Field( + None, alias="usageCertRequired") + admin_strong_auth_required: Optional[StrictBool] = Field( + None, alias="adminStrongAuthRequired") + enable_external_password_change: Optional[StrictBool] = Field( + None, alias="enableExternalPasswordChange") + enable_password_replay: Optional[StrictBool] = Field( + None, alias="enablePasswordReplay") + enable_automatic_password_replay: Optional[StrictBool] = Field( + None, alias="enableAutomaticPasswordReplay") + netmasks: Optional[conlist(StrictStr)] = None + country_codes: Optional[conlist(StrictStr)] = Field(None, + alias="countryCodes") + white_list: Optional[StrictBool] = Field(None, alias="whiteList") + email_test_mode: Optional[StrictBool] = Field(None, alias="emailTestMode") + email_test_address: Optional[StrictStr] = Field(None, + alias="emailTestAddress") + username_empty_text: Optional[StrictStr] = Field(None, + alias="usernameEmptyText") + username_label: Optional[StrictStr] = Field(None, alias="usernameLabel") + enable_automation_generation: Optional[StrictBool] = Field( + None, alias="enableAutomationGeneration") + password_replay_state: Optional[StrictStr] = Field( + None, alias="passwordReplayState") + system_notification_config: Optional[ + GetOrgSettings200ResponseSystemNotificationConfig] = Field( + None, alias="systemNotificationConfig") + system_notification_emails: Optional[conlist(StrictStr)] = Field( + None, alias="systemNotificationEmails") + login_url: Optional[StrictStr] = Field(None, alias="loginUrl") + redirect_patterns: Optional[conlist(StrictStr)] = Field( + None, alias="redirectPatterns") + style_hash: Optional[StrictStr] = Field(None, alias="styleHash") + approval_config: Optional[GetOrgSettings200ResponseApprovalConfig] = Field( + None, alias="approvalConfig") + sso_partner_source: Optional[StrictStr] = Field(None, + alias="ssoPartnerSource") + __properties = [ + "id", "name", "description", "dateCreated", "lastUpdated", + "scriptName", "ssoDomain", "status", "maxRegisteredIdentities", + "identityCount", "kbaReqForAuthn", "kbaReqAnswers", + "lockoutAttemptThreshold", "lockoutTimeMinutes", "usageCertRequired", + "adminStrongAuthRequired", "enableExternalPasswordChange", + "enablePasswordReplay", "enableAutomaticPasswordReplay", "netmasks", + "countryCodes", "whiteList", "emailTestMode", "emailTestAddress", + "usernameEmptyText", "usernameLabel", "enableAutomationGeneration", + "passwordReplayState", "systemNotificationConfig", + "systemNotificationEmails", "loginUrl", "redirectPatterns", + "styleHash", "approvalConfig", "ssoPartnerSource" + ] + + @validator('status') + def status_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('inactive', 'active', 'demo', 'test'): + raise ValueError( + "must be one of enum values ('inactive', 'active', 'demo', 'test')" + ) + return value + + @validator('password_replay_state') + def password_replay_state_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('enabled', 'passive', 'disabled'): + raise ValueError( + "must be one of enum values ('enabled', 'passive', 'disabled')" + ) + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> GetOrgSettings200Response: + """Create an instance of GetOrgSettings200Response from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of system_notification_config + if self.system_notification_config: + _dict[ + 'systemNotificationConfig'] = self.system_notification_config.to_dict( + ) + # override the default output from pydantic by calling `to_dict()` of approval_config + if self.approval_config: + _dict['approvalConfig'] = self.approval_config.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> GetOrgSettings200Response: + """Create an instance of GetOrgSettings200Response from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return GetOrgSettings200Response.parse_obj(obj) + + _obj = GetOrgSettings200Response.parse_obj({ + "id": + obj.get("id"), + "name": + obj.get("name"), + "description": + obj.get("description"), + "date_created": + obj.get("dateCreated"), + "last_updated": + obj.get("lastUpdated"), + "script_name": + obj.get("scriptName"), + "sso_domain": + obj.get("ssoDomain"), + "status": + obj.get("status"), + "max_registered_identities": + obj.get("maxRegisteredIdentities"), + "identity_count": + obj.get("identityCount"), + "kba_req_for_authn": + obj.get("kbaReqForAuthn"), + "kba_req_answers": + obj.get("kbaReqAnswers"), + "lockout_attempt_threshold": + obj.get("lockoutAttemptThreshold"), + "lockout_time_minutes": + obj.get("lockoutTimeMinutes"), + "usage_cert_required": + obj.get("usageCertRequired"), + "admin_strong_auth_required": + obj.get("adminStrongAuthRequired"), + "enable_external_password_change": + obj.get("enableExternalPasswordChange"), + "enable_password_replay": + obj.get("enablePasswordReplay"), + "enable_automatic_password_replay": + obj.get("enableAutomaticPasswordReplay"), + "netmasks": + obj.get("netmasks"), + "country_codes": + obj.get("countryCodes"), + "white_list": + obj.get("whiteList"), + "email_test_mode": + obj.get("emailTestMode"), + "email_test_address": + obj.get("emailTestAddress"), + "username_empty_text": + obj.get("usernameEmptyText"), + "username_label": + obj.get("usernameLabel"), + "enable_automation_generation": + obj.get("enableAutomationGeneration"), + "password_replay_state": + obj.get("passwordReplayState"), + "system_notification_config": + GetOrgSettings200ResponseSystemNotificationConfig.from_dict( + obj.get("systemNotificationConfig")) + if obj.get("systemNotificationConfig") is not None else None, + "system_notification_emails": + obj.get("systemNotificationEmails"), + "login_url": + obj.get("loginUrl"), + "redirect_patterns": + obj.get("redirectPatterns"), + "style_hash": + obj.get("styleHash"), + "approval_config": + GetOrgSettings200ResponseApprovalConfig.from_dict( + obj.get("approvalConfig")) + if obj.get("approvalConfig") is not None else None, + "sso_partner_source": + obj.get("ssoPartnerSource") + }) + return _obj diff --git a/sailpoint/v2/models/get_org_settings200_response_approval_config.py b/sailpoint/v2/models/get_org_settings200_response_approval_config.py new file mode 100644 index 000000000..f1a34e88c --- /dev/null +++ b/sailpoint/v2/models/get_org_settings200_response_approval_config.py @@ -0,0 +1,79 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, Field, StrictInt, StrictStr + + +class GetOrgSettings200ResponseApprovalConfig(BaseModel): + """ + GetOrgSettings200ResponseApprovalConfig + """ + days_till_escalation: StrictInt = Field(..., alias="daysTillEscalation") + days_between_reminders: StrictInt = Field(..., + alias="daysBetweenReminders") + max_reminders: StrictInt = Field(..., alias="maxReminders") + fallback_approver: StrictStr = Field(..., alias="fallbackApprover") + __properties = [ + "daysTillEscalation", "daysBetweenReminders", "maxReminders", + "fallbackApprover" + ] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, + json_str: str) -> GetOrgSettings200ResponseApprovalConfig: + """Create an instance of GetOrgSettings200ResponseApprovalConfig from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> GetOrgSettings200ResponseApprovalConfig: + """Create an instance of GetOrgSettings200ResponseApprovalConfig from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return GetOrgSettings200ResponseApprovalConfig.parse_obj(obj) + + _obj = GetOrgSettings200ResponseApprovalConfig.parse_obj({ + "days_till_escalation": + obj.get("daysTillEscalation"), + "days_between_reminders": + obj.get("daysBetweenReminders"), + "max_reminders": + obj.get("maxReminders"), + "fallback_approver": + obj.get("fallbackApprover") + }) + return _obj diff --git a/sailpoint/v2/models/get_org_settings200_response_system_notification_config.py b/sailpoint/v2/models/get_org_settings200_response_system_notification_config.py new file mode 100644 index 000000000..202e4e4c4 --- /dev/null +++ b/sailpoint/v2/models/get_org_settings200_response_system_notification_config.py @@ -0,0 +1,98 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import List, Optional +from pydantic import BaseModel, Field, StrictStr, conlist, validator +from v2.models.get_org_settings200_response_system_notification_config_notifications_inner import GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner + + +class GetOrgSettings200ResponseSystemNotificationConfig(BaseModel): + """ + GetOrgSettings200ResponseSystemNotificationConfig + """ + notifications: Optional[conlist( + GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner + )] = None + recipient_type: Optional[StrictStr] = Field(None, alias="recipientType") + __properties = ["notifications", "recipientType"] + + @validator('recipient_type') + def recipient_type_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('allAdmins', 'specificIdentities'): + raise ValueError( + "must be one of enum values ('allAdmins', 'specificIdentities')" + ) + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json( + cls, json_str: str + ) -> GetOrgSettings200ResponseSystemNotificationConfig: + """Create an instance of GetOrgSettings200ResponseSystemNotificationConfig from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of each item in notifications (list) + _items = [] + if self.notifications: + for _item in self.notifications: + if _item: + _items.append(_item.to_dict()) + _dict['notifications'] = _items + return _dict + + @classmethod + def from_dict( + cls, + obj: dict) -> GetOrgSettings200ResponseSystemNotificationConfig: + """Create an instance of GetOrgSettings200ResponseSystemNotificationConfig from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return GetOrgSettings200ResponseSystemNotificationConfig.parse_obj( + obj) + + _obj = GetOrgSettings200ResponseSystemNotificationConfig.parse_obj({ + "notifications": [ + GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner + .from_dict(_item) for _item in obj.get("notifications") + ] if obj.get("notifications") is not None else None, + "recipient_type": + obj.get("recipientType") + }) + return _obj diff --git a/sailpoint/v2/models/get_org_settings200_response_system_notification_config_notifications_inner.py b/sailpoint/v2/models/get_org_settings200_response_system_notification_config_notifications_inner.py new file mode 100644 index 000000000..9971f5901 --- /dev/null +++ b/sailpoint/v2/models/get_org_settings200_response_system_notification_config_notifications_inner.py @@ -0,0 +1,86 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional +from pydantic import BaseModel, Field, StrictBool, StrictStr +from v2.models.get_org_settings200_response_system_notification_config_notifications_inner_thresholds import GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds + + +class GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner( + BaseModel): + """ + GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner + """ + type: Optional[StrictStr] = None + by_email: Optional[StrictBool] = Field(None, alias="byEmail") + thresholds: Optional[ + GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds] = None + __properties = ["type", "byEmail", "thresholds"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json( + cls, json_str: str + ) -> GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner: + """Create an instance of GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of thresholds + if self.thresholds: + _dict['thresholds'] = self.thresholds.to_dict() + return _dict + + @classmethod + def from_dict( + cls, obj: dict + ) -> GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner: + """Create an instance of GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner.parse_obj( + obj) + + _obj = GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner.parse_obj( + { + "type": + obj.get("type"), + "by_email": + obj.get("byEmail"), + "thresholds": + GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds + .from_dict(obj.get("thresholds")) + if obj.get("thresholds") is not None else None + }) + return _obj diff --git a/sailpoint/v2/models/get_org_settings200_response_system_notification_config_notifications_inner_thresholds.py b/sailpoint/v2/models/get_org_settings200_response_system_notification_config_notifications_inner_thresholds.py new file mode 100644 index 000000000..76d6c1f4f --- /dev/null +++ b/sailpoint/v2/models/get_org_settings200_response_system_notification_config_notifications_inner_thresholds.py @@ -0,0 +1,74 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional +from pydantic import BaseModel, StrictStr + + +class GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds( + BaseModel): + """ + GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds + """ + healthy: Optional[StrictStr] = None + unhealthy: Optional[StrictStr] = None + __properties = ["healthy", "unhealthy"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json( + cls, json_str: str + ) -> GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds: + """Create an instance of GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict( + cls, obj: dict + ) -> GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds: + """Create an instance of GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds.parse_obj( + obj) + + _obj = GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds.parse_obj( + { + "healthy": obj.get("healthy"), + "unhealthy": obj.get("unhealthy") + }) + return _obj diff --git a/sailpoint/v2/models/list_workgroup_connections200_response_inner.py b/sailpoint/v2/models/list_workgroup_connections200_response_inner.py new file mode 100644 index 000000000..964f821b0 --- /dev/null +++ b/sailpoint/v2/models/list_workgroup_connections200_response_inner.py @@ -0,0 +1,85 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional +from pydantic import BaseModel, Field, StrictStr + + +class ListWorkgroupConnections200ResponseInner(BaseModel): + """ + ListWorkgroupConnections200ResponseInner + """ + connection_type: Optional[StrictStr] = Field(None, alias="connectionType") + description: Optional[StrictStr] = None + name: Optional[StrictStr] = None + object_id: Optional[StrictStr] = Field(None, alias="objectId") + object_type: Optional[StrictStr] = Field(None, alias="objectType") + workgroup_id: Optional[StrictStr] = Field(None, alias="workgroupId") + __properties = [ + "connectionType", "description", "name", "objectId", "objectType", + "workgroupId" + ] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, + json_str: str) -> ListWorkgroupConnections200ResponseInner: + """Create an instance of ListWorkgroupConnections200ResponseInner from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ListWorkgroupConnections200ResponseInner: + """Create an instance of ListWorkgroupConnections200ResponseInner from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ListWorkgroupConnections200ResponseInner.parse_obj(obj) + + _obj = ListWorkgroupConnections200ResponseInner.parse_obj({ + "connection_type": + obj.get("connectionType"), + "description": + obj.get("description"), + "name": + obj.get("name"), + "object_id": + obj.get("objectId"), + "object_type": + obj.get("objectType"), + "workgroup_id": + obj.get("workgroupId") + }) + return _obj diff --git a/sailpoint/v2/models/list_workgroup_members200_response_inner.py b/sailpoint/v2/models/list_workgroup_members200_response_inner.py new file mode 100644 index 000000000..3edfd6f07 --- /dev/null +++ b/sailpoint/v2/models/list_workgroup_members200_response_inner.py @@ -0,0 +1,78 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional +from pydantic import BaseModel, Field, StrictInt, StrictStr + + +class ListWorkgroupMembers200ResponseInner(BaseModel): + """ + ListWorkgroupMembers200ResponseInner + """ + alias: Optional[StrictStr] = None + email: Optional[StrictStr] = None + external_id: Optional[StrictStr] = Field(None, alias="externalId") + id: Optional[StrictInt] = None + name: Optional[StrictStr] = None + __properties = ["alias", "email", "externalId", "id", "name"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ListWorkgroupMembers200ResponseInner: + """Create an instance of ListWorkgroupMembers200ResponseInner from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ListWorkgroupMembers200ResponseInner: + """Create an instance of ListWorkgroupMembers200ResponseInner from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ListWorkgroupMembers200ResponseInner.parse_obj(obj) + + _obj = ListWorkgroupMembers200ResponseInner.parse_obj({ + "alias": + obj.get("alias"), + "email": + obj.get("email"), + "external_id": + obj.get("externalId"), + "id": + obj.get("id"), + "name": + obj.get("name") + }) + return _obj diff --git a/sailpoint/v2/models/list_workgroups200_response_inner.py b/sailpoint/v2/models/list_workgroups200_response_inner.py new file mode 100644 index 000000000..35b9b898c --- /dev/null +++ b/sailpoint/v2/models/list_workgroups200_response_inner.py @@ -0,0 +1,96 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional +from pydantic import BaseModel, Field, StrictInt, StrictStr +from v2.models.list_workgroups200_response_inner_owner import ListWorkgroups200ResponseInnerOwner + + +class ListWorkgroups200ResponseInner(BaseModel): + """ + ListWorkgroups200ResponseInner + """ + connection_count: Optional[StrictInt] = Field(None, + alias="connectionCount") + created: Optional[StrictInt] = None + description: Optional[StrictStr] = None + id: Optional[StrictStr] = None + member_count: Optional[StrictInt] = Field(None, alias="memberCount") + modified: Optional[StrictInt] = None + name: Optional[StrictStr] = None + owner: Optional[ListWorkgroups200ResponseInnerOwner] = None + __properties = [ + "connectionCount", "created", "description", "id", "memberCount", + "modified", "name", "owner" + ] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ListWorkgroups200ResponseInner: + """Create an instance of ListWorkgroups200ResponseInner from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of owner + if self.owner: + _dict['owner'] = self.owner.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ListWorkgroups200ResponseInner: + """Create an instance of ListWorkgroups200ResponseInner from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ListWorkgroups200ResponseInner.parse_obj(obj) + + _obj = ListWorkgroups200ResponseInner.parse_obj({ + "connection_count": + obj.get("connectionCount"), + "created": + obj.get("created"), + "description": + obj.get("description"), + "id": + obj.get("id"), + "member_count": + obj.get("memberCount"), + "modified": + obj.get("modified"), + "name": + obj.get("name"), + "owner": + ListWorkgroups200ResponseInnerOwner.from_dict(obj.get("owner")) + if obj.get("owner") is not None else None + }) + return _obj diff --git a/sailpoint/v2/models/list_workgroups200_response_inner_owner.py b/sailpoint/v2/models/list_workgroups200_response_inner_owner.py new file mode 100644 index 000000000..4ff9ca54d --- /dev/null +++ b/sailpoint/v2/models/list_workgroups200_response_inner_owner.py @@ -0,0 +1,75 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import Optional +from pydantic import BaseModel, Field, StrictStr + + +class ListWorkgroups200ResponseInnerOwner(BaseModel): + """ + ListWorkgroups200ResponseInnerOwner + """ + display_name: Optional[StrictStr] = Field(None, alias="displayName") + email_address: Optional[StrictStr] = Field(None, alias="emailAddress") + id: Optional[StrictStr] = None + name: Optional[StrictStr] = None + __properties = ["displayName", "emailAddress", "id", "name"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ListWorkgroups200ResponseInnerOwner: + """Create an instance of ListWorkgroups200ResponseInnerOwner from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ListWorkgroups200ResponseInnerOwner: + """Create an instance of ListWorkgroups200ResponseInnerOwner from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ListWorkgroups200ResponseInnerOwner.parse_obj(obj) + + _obj = ListWorkgroups200ResponseInnerOwner.parse_obj({ + "display_name": + obj.get("displayName"), + "email_address": + obj.get("emailAddress"), + "id": + obj.get("id"), + "name": + obj.get("name") + }) + return _obj diff --git a/sailpoint/v2/models/modify_workgroup_members_request.py b/sailpoint/v2/models/modify_workgroup_members_request.py new file mode 100644 index 000000000..e3b171c69 --- /dev/null +++ b/sailpoint/v2/models/modify_workgroup_members_request.py @@ -0,0 +1,69 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import List, Optional +from pydantic import BaseModel, StrictStr, conlist + + +class ModifyWorkgroupMembersRequest(BaseModel): + """ + ModifyWorkgroupMembersRequest + """ + add: Optional[conlist(StrictStr)] = None + remove: Optional[conlist(StrictStr)] = None + __properties = ["add", "remove"] + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> ModifyWorkgroupMembersRequest: + """Create an instance of ModifyWorkgroupMembersRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> ModifyWorkgroupMembersRequest: + """Create an instance of ModifyWorkgroupMembersRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return ModifyWorkgroupMembersRequest.parse_obj(obj) + + _obj = ModifyWorkgroupMembersRequest.parse_obj({ + "add": + obj.get("add"), + "remove": + obj.get("remove") + }) + return _obj diff --git a/sailpoint/v2/models/update_org_settings_request.py b/sailpoint/v2/models/update_org_settings_request.py new file mode 100644 index 000000000..fbd278d8c --- /dev/null +++ b/sailpoint/v2/models/update_org_settings_request.py @@ -0,0 +1,176 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from typing import List, Optional +from pydantic import BaseModel, Field, StrictBool, StrictInt, StrictStr, conlist, validator +from v2.models.get_org_settings200_response_approval_config import GetOrgSettings200ResponseApprovalConfig + + +class UpdateOrgSettingsRequest(BaseModel): + """ + UpdateOrgSettingsRequest + """ + country_codes: Optional[conlist(StrictStr)] = Field(None, + alias="countryCodes") + enable_external_password_change: Optional[StrictBool] = Field( + None, alias="enableExternalPasswordChange") + enable_automatic_password_replay: Optional[StrictBool] = Field( + None, alias="enableAutomaticPasswordReplay") + enable_automation_generation: Optional[StrictBool] = Field( + None, alias="enableAutomationGeneration") + kba_req_answers: Optional[StrictInt] = Field(None, alias="kbaReqAnswers") + kba_req_for_authn: Optional[StrictInt] = Field(None, + alias="kbaReqForAuthn") + lockout_attempt_threshold: Optional[StrictInt] = Field( + None, alias="lockoutAttemptThreshold") + lockout_time_minutes: Optional[StrictInt] = Field( + None, alias="lockoutTimeMinutes") + login_url: Optional[StrictStr] = Field(None, alias="loginUrl") + netmasks: Optional[conlist(StrictStr)] = None + notify_authentication_setting_change: Optional[StrictBool] = Field( + None, alias="notifyAuthenticationSettingChange") + password_replay_state: Optional[StrictStr] = Field( + None, alias="passwordReplayState") + preferred_identity_invite_template: Optional[StrictStr] = Field( + None, alias="preferredIdentityInviteTemplate") + redirect_patterns: Optional[conlist(StrictStr)] = Field( + None, alias="redirectPatterns") + sso_partner_source: Optional[StrictStr] = Field(None, + alias="ssoPartnerSource") + system_notification_emails: Optional[conlist(StrictStr)] = Field( + None, alias="systemNotificationEmails") + track_analytics: Optional[StrictBool] = Field(None, alias="trackAnalytics") + usage_cert_required: Optional[StrictBool] = Field( + None, alias="usageCertRequired") + usage_cert_text: Optional[StrictStr] = Field(None, alias="usageCertText") + username_empty_text: Optional[StrictStr] = Field(None, + alias="usernameEmptyText") + username_label: Optional[StrictStr] = Field(None, alias="usernameLabel") + white_list: Optional[StrictBool] = Field(None, alias="whiteList") + approval_config: Optional[GetOrgSettings200ResponseApprovalConfig] = Field( + None, alias="approvalConfig") + __properties = [ + "countryCodes", "enableExternalPasswordChange", + "enableAutomaticPasswordReplay", "enableAutomationGeneration", + "kbaReqAnswers", "kbaReqForAuthn", "lockoutAttemptThreshold", + "lockoutTimeMinutes", "loginUrl", "netmasks", + "notifyAuthenticationSettingChange", "passwordReplayState", + "preferredIdentityInviteTemplate", "redirectPatterns", + "ssoPartnerSource", "systemNotificationEmails", "trackAnalytics", + "usageCertRequired", "usageCertText", "usernameEmptyText", + "usernameLabel", "whiteList", "approvalConfig" + ] + + @validator('password_replay_state') + def password_replay_state_validate_enum(cls, value): + """Validates the enum""" + if value is None: + return value + + if value not in ('enabled', 'passive', 'disabled'): + raise ValueError( + "must be one of enum values ('enabled', 'passive', 'disabled')" + ) + return value + + class Config: + """Pydantic configuration""" + allow_population_by_field_name = True + validate_assignment = True + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.dict(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> UpdateOrgSettingsRequest: + """Create an instance of UpdateOrgSettingsRequest from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self): + """Returns the dictionary representation of the model using alias""" + _dict = self.dict(by_alias=True, exclude={}, exclude_none=True) + # override the default output from pydantic by calling `to_dict()` of approval_config + if self.approval_config: + _dict['approvalConfig'] = self.approval_config.to_dict() + return _dict + + @classmethod + def from_dict(cls, obj: dict) -> UpdateOrgSettingsRequest: + """Create an instance of UpdateOrgSettingsRequest from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return UpdateOrgSettingsRequest.parse_obj(obj) + + _obj = UpdateOrgSettingsRequest.parse_obj({ + "country_codes": + obj.get("countryCodes"), + "enable_external_password_change": + obj.get("enableExternalPasswordChange"), + "enable_automatic_password_replay": + obj.get("enableAutomaticPasswordReplay"), + "enable_automation_generation": + obj.get("enableAutomationGeneration"), + "kba_req_answers": + obj.get("kbaReqAnswers"), + "kba_req_for_authn": + obj.get("kbaReqForAuthn"), + "lockout_attempt_threshold": + obj.get("lockoutAttemptThreshold"), + "lockout_time_minutes": + obj.get("lockoutTimeMinutes"), + "login_url": + obj.get("loginUrl"), + "netmasks": + obj.get("netmasks"), + "notify_authentication_setting_change": + obj.get("notifyAuthenticationSettingChange"), + "password_replay_state": + obj.get("passwordReplayState"), + "preferred_identity_invite_template": + obj.get("preferredIdentityInviteTemplate"), + "redirect_patterns": + obj.get("redirectPatterns"), + "sso_partner_source": + obj.get("ssoPartnerSource"), + "system_notification_emails": + obj.get("systemNotificationEmails"), + "track_analytics": + obj.get("trackAnalytics"), + "usage_cert_required": + obj.get("usageCertRequired"), + "usage_cert_text": + obj.get("usageCertText"), + "username_empty_text": + obj.get("usernameEmptyText"), + "username_label": + obj.get("usernameLabel"), + "white_list": + obj.get("whiteList"), + "approval_config": + GetOrgSettings200ResponseApprovalConfig.from_dict( + obj.get("approvalConfig")) + if obj.get("approvalConfig") is not None else None + }) + return _obj diff --git a/sailpoint/v2/rest.py b/sailpoint/v2/rest.py new file mode 100644 index 000000000..78e354603 --- /dev/null +++ b/sailpoint/v2/rest.py @@ -0,0 +1,357 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import io +import json +import logging +import re +import ssl + +from urllib.parse import urlencode, quote_plus +import urllib3 + +from v2.exceptions import ApiException, UnauthorizedException, ForbiddenException, NotFoundException, ServiceException, ApiValueError, BadRequestException + +logger = logging.getLogger(__name__) + + +class RESTResponse(io.IOBase): + + def __init__(self, resp) -> None: + self.urllib3_response = resp + self.status = resp.status + self.reason = resp.reason + self.data = resp.data + + def getheaders(self): + """Returns a dictionary of the response headers.""" + return self.urllib3_response.headers + + def getheader(self, name, default=None): + """Returns a given response header.""" + return self.urllib3_response.headers.get(name, default) + + +class RESTClientObject: + + def __init__(self, configuration, pools_size=4, maxsize=None) -> None: + # urllib3.PoolManager will pass all kw parameters to connectionpool + # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75 # noqa: E501 + # https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680 # noqa: E501 + # maxsize is the number of requests to host that are allowed in parallel # noqa: E501 + # Custom SSL certificates and client certificates: http://urllib3.readthedocs.io/en/latest/advanced-usage.html # noqa: E501 + + # cert_reqs + if configuration.verify_ssl: + cert_reqs = ssl.CERT_REQUIRED + else: + cert_reqs = ssl.CERT_NONE + + addition_pool_args = {} + if configuration.assert_hostname is not None: + addition_pool_args[ + 'assert_hostname'] = configuration.assert_hostname # noqa: E501 + + if configuration.retries is not None: + addition_pool_args['retries'] = configuration.retries + + if configuration.tls_server_name: + addition_pool_args[ + 'server_hostname'] = configuration.tls_server_name + + if configuration.socket_options is not None: + addition_pool_args['socket_options'] = configuration.socket_options + + if maxsize is None: + if configuration.connection_pool_maxsize is not None: + maxsize = configuration.connection_pool_maxsize + else: + maxsize = 4 + + # https pool manager + if configuration.proxy: + self.pool_manager = urllib3.ProxyManager( + num_pools=pools_size, + maxsize=maxsize, + cert_reqs=cert_reqs, + ca_certs=configuration.ssl_ca_cert, + cert_file=configuration.cert_file, + key_file=configuration.key_file, + proxy_url=configuration.proxy, + proxy_headers=configuration.proxy_headers, + **addition_pool_args) + else: + self.pool_manager = urllib3.PoolManager( + num_pools=pools_size, + maxsize=maxsize, + cert_reqs=cert_reqs, + ca_certs=configuration.ssl_ca_cert, + cert_file=configuration.cert_file, + key_file=configuration.key_file, + **addition_pool_args) + + def request(self, + method, + url, + query_params=None, + headers=None, + body=None, + post_params=None, + _preload_content=True, + _request_timeout=None): + """Perform requests. + + :param method: http request method + :param url: http request url + :param query_params: query parameters in the url + :param headers: http request headers + :param body: request json body, for `application/json` + :param post_params: request post parameters, + `application/x-www-form-urlencoded` + and `multipart/form-data` + :param _preload_content: if False, the urllib3.HTTPResponse object will + be returned without reading/decoding response + data. Default is True. + :param _request_timeout: timeout setting for this request. If one + number provided, it will be total request + timeout. It can also be a pair (tuple) of + (connection, read) timeouts. + """ + method = method.upper() + assert method in [ + 'GET', 'HEAD', 'DELETE', 'POST', 'PUT', 'PATCH', 'OPTIONS' + ] + + if post_params and body: + raise ApiValueError( + "body parameter cannot be used with post_params parameter.") + + post_params = post_params or {} + headers = headers or {} + # url already contains the URL query string + # so reset query_params to empty dict + query_params = {} + + timeout = None + if _request_timeout: + if isinstance(_request_timeout, (int, float)): # noqa: E501,F821 + timeout = urllib3.Timeout(total=_request_timeout) + elif (isinstance(_request_timeout, tuple) + and len(_request_timeout) == 2): + timeout = urllib3.Timeout(connect=_request_timeout[0], + read=_request_timeout[1]) + + try: + # For `POST`, `PUT`, `PATCH`, `OPTIONS`, `DELETE` + if method in ['POST', 'PUT', 'PATCH', 'OPTIONS', 'DELETE']: + + # no content type provided or payload is json + if not headers.get('Content-Type') or re.search( + 'json', headers['Content-Type'], re.IGNORECASE): + request_body = None + if body is not None: + request_body = json.dumps(body) + r = self.pool_manager.request( + method, + url, + body=request_body, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + elif headers[ + 'Content-Type'] == 'application/x-www-form-urlencoded': # noqa: E501 + r = self.pool_manager.request( + method, + url, + fields=post_params, + encode_multipart=False, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + elif headers['Content-Type'] == 'multipart/form-data': + # must del headers['Content-Type'], or the correct + # Content-Type which generated by urllib3 will be + # overwritten. + del headers['Content-Type'] + r = self.pool_manager.request( + method, + url, + fields=post_params, + encode_multipart=True, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + # Pass a `string` parameter directly in the body to support + # other content types than Json when `body` argument is + # provided in serialized form + elif isinstance(body, str) or isinstance(body, bytes): + request_body = body + r = self.pool_manager.request( + method, + url, + body=request_body, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + else: + # Cannot generate the request from given parameters + msg = """Cannot prepare a request message for provided + arguments. Please check that your arguments match + declared content type.""" + raise ApiException(status=0, reason=msg) + # For `GET`, `HEAD` + else: + r = self.pool_manager.request(method, + url, + fields={}, + preload_content=_preload_content, + timeout=timeout, + headers=headers) + except urllib3.exceptions.SSLError as e: + msg = "{0}\n{1}".format(type(e).__name__, str(e)) + raise ApiException(status=0, reason=msg) + + if _preload_content: + r = RESTResponse(r) + + # log response body + logger.debug("response body: %s", r.data) + + if not 200 <= r.status <= 299: + if r.status == 400: + raise BadRequestException(http_resp=r) + + if r.status == 401: + raise UnauthorizedException(http_resp=r) + + if r.status == 403: + raise ForbiddenException(http_resp=r) + + if r.status == 404: + raise NotFoundException(http_resp=r) + + if 500 <= r.status <= 599: + raise ServiceException(http_resp=r) + + raise ApiException(http_resp=r) + + return r + + def get_request(self, + url, + headers=None, + query_params=None, + _preload_content=True, + _request_timeout=None): + return self.request("GET", + url, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + query_params=query_params) + + def head_request(self, + url, + headers=None, + query_params=None, + _preload_content=True, + _request_timeout=None): + return self.request("HEAD", + url, + headers=headers, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + query_params=query_params) + + def options_request(self, + url, + headers=None, + query_params=None, + post_params=None, + body=None, + _preload_content=True, + _request_timeout=None): + return self.request("OPTIONS", + url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def delete_request(self, + url, + headers=None, + query_params=None, + body=None, + _preload_content=True, + _request_timeout=None): + return self.request("DELETE", + url, + headers=headers, + query_params=query_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def post_request(self, + url, + headers=None, + query_params=None, + post_params=None, + body=None, + _preload_content=True, + _request_timeout=None): + return self.request("POST", + url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def put_request(self, + url, + headers=None, + query_params=None, + post_params=None, + body=None, + _preload_content=True, + _request_timeout=None): + return self.request("PUT", + url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) + + def patch_request(self, + url, + headers=None, + query_params=None, + post_params=None, + body=None, + _preload_content=True, + _request_timeout=None): + return self.request("PATCH", + url, + headers=headers, + query_params=query_params, + post_params=post_params, + _preload_content=_preload_content, + _request_timeout=_request_timeout, + body=body) diff --git a/sailpoint/v2/test/__init__.py b/sailpoint/v2/test/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/sailpoint/v2/test/test_bulk_delete_work_groups200_response.py b/sailpoint/v2/test/test_bulk_delete_work_groups200_response.py new file mode 100644 index 000000000..53c6ea422 --- /dev/null +++ b/sailpoint/v2/test/test_bulk_delete_work_groups200_response.py @@ -0,0 +1,62 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from v2.models.bulk_delete_work_groups200_response import BulkDeleteWorkGroups200Response # noqa: E501 + + +class TestBulkDeleteWorkGroups200Response(unittest.TestCase): + """BulkDeleteWorkGroups200Response unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, + include_optional) -> BulkDeleteWorkGroups200Response: + """Test BulkDeleteWorkGroups200Response + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `BulkDeleteWorkGroups200Response` + """ + model = BulkDeleteWorkGroups200Response() # noqa: E501 + if include_optional: + return BulkDeleteWorkGroups200Response( + deleted = [ + '4518f275-e7de-40b8-9951-b67d6273421c' + ], + in_use = [ + '12538dlg-60d0-44b4-9273-d1ba578ef384' + ], + not_found = [ + '12538ecf-60d0-44b4-9273-d1ba578ef384' + ] + ) + else: + return BulkDeleteWorkGroups200Response( + ) + """ + + def testBulkDeleteWorkGroups200Response(self): + """Test BulkDeleteWorkGroups200Response""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/v2/test/test_bulk_delete_work_groups_request.py b/sailpoint/v2/test/test_bulk_delete_work_groups_request.py new file mode 100644 index 000000000..a518f5f6d --- /dev/null +++ b/sailpoint/v2/test/test_bulk_delete_work_groups_request.py @@ -0,0 +1,55 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from v2.models.bulk_delete_work_groups_request import BulkDeleteWorkGroupsRequest # noqa: E501 + + +class TestBulkDeleteWorkGroupsRequest(unittest.TestCase): + """BulkDeleteWorkGroupsRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> BulkDeleteWorkGroupsRequest: + """Test BulkDeleteWorkGroupsRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `BulkDeleteWorkGroupsRequest` + """ + model = BulkDeleteWorkGroupsRequest() # noqa: E501 + if include_optional: + return BulkDeleteWorkGroupsRequest( + ids = [ + '868edef1-222b-40e4-8787-b56cfd78b100' + ] + ) + else: + return BulkDeleteWorkGroupsRequest( + ) + """ + + def testBulkDeleteWorkGroupsRequest(self): + """Test BulkDeleteWorkGroupsRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/v2/test/test_create_workgroup_request.py b/sailpoint/v2/test/test_create_workgroup_request.py new file mode 100644 index 000000000..d2380d6c7 --- /dev/null +++ b/sailpoint/v2/test/test_create_workgroup_request.py @@ -0,0 +1,56 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from v2.models.create_workgroup_request import CreateWorkgroupRequest # noqa: E501 + + +class TestCreateWorkgroupRequest(unittest.TestCase): + """CreateWorkgroupRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CreateWorkgroupRequest: + """Test CreateWorkgroupRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `CreateWorkgroupRequest` + """ + model = CreateWorkgroupRequest() # noqa: E501 + if include_optional: + return CreateWorkgroupRequest( + name = 'Test group 3', + description = 'This is a test', + owner = v2.models.create_workgroup_request_owner.createWorkgroup_request_owner( + id = '2c9180867624cbd7017642d8c8c81f67', ) + ) + else: + return CreateWorkgroupRequest( + ) + """ + + def testCreateWorkgroupRequest(self): + """Test CreateWorkgroupRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/v2/test/test_create_workgroup_request_owner.py b/sailpoint/v2/test/test_create_workgroup_request_owner.py new file mode 100644 index 000000000..fe55801ab --- /dev/null +++ b/sailpoint/v2/test/test_create_workgroup_request_owner.py @@ -0,0 +1,53 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from v2.models.create_workgroup_request_owner import CreateWorkgroupRequestOwner # noqa: E501 + + +class TestCreateWorkgroupRequestOwner(unittest.TestCase): + """CreateWorkgroupRequestOwner unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> CreateWorkgroupRequestOwner: + """Test CreateWorkgroupRequestOwner + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `CreateWorkgroupRequestOwner` + """ + model = CreateWorkgroupRequestOwner() # noqa: E501 + if include_optional: + return CreateWorkgroupRequestOwner( + id = '2c9180867624cbd7017642d8c8c81f67' + ) + else: + return CreateWorkgroupRequestOwner( + ) + """ + + def testCreateWorkgroupRequestOwner(self): + """Test CreateWorkgroupRequestOwner""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/v2/test/test_get_org_settings200_response.py b/sailpoint/v2/test/test_get_org_settings200_response.py new file mode 100644 index 000000000..6d550cceb --- /dev/null +++ b/sailpoint/v2/test/test_get_org_settings200_response.py @@ -0,0 +1,108 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from v2.models.get_org_settings200_response import GetOrgSettings200Response # noqa: E501 + + +class TestGetOrgSettings200Response(unittest.TestCase): + """GetOrgSettings200Response unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> GetOrgSettings200Response: + """Test GetOrgSettings200Response + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GetOrgSettings200Response` + """ + model = GetOrgSettings200Response() # noqa: E501 + if include_optional: + return GetOrgSettings200Response( + id = '', + name = '', + description = '', + date_created = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + last_updated = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'), + script_name = '', + sso_domain = '', + status = 'inactive', + max_registered_identities = 56, + identity_count = 56, + kba_req_for_authn = 56, + kba_req_answers = 56, + lockout_attempt_threshold = 56, + lockout_time_minutes = 56, + usage_cert_required = True, + admin_strong_auth_required = True, + enable_external_password_change = True, + enable_password_replay = True, + enable_automatic_password_replay = True, + netmasks = [ + '' + ], + country_codes = [ + '' + ], + white_list = True, + email_test_mode = True, + email_test_address = '', + username_empty_text = '', + username_label = '', + enable_automation_generation = True, + password_replay_state = 'enabled', + system_notification_config = v2.models.get_org_settings_200_response_system_notification_config.getOrgSettings_200_response_systemNotificationConfig( + notifications = [ + v2.models.get_org_settings_200_response_system_notification_config_notifications_inner.getOrgSettings_200_response_systemNotificationConfig_notifications_inner( + type = '', + by_email = True, + thresholds = v2.models.get_org_settings_200_response_system_notification_config_notifications_inner_thresholds.getOrgSettings_200_response_systemNotificationConfig_notifications_inner_thresholds( + healthy = '', + unhealthy = '', ), ) + ], + recipient_type = 'allAdmins', ), + system_notification_emails = [ + '' + ], + login_url = '', + redirect_patterns = [ + '' + ], + style_hash = '', + approval_config = v2.models.get_org_settings_200_response_approval_config.getOrgSettings_200_response_approvalConfig( + days_till_escalation = 56, + days_between_reminders = 56, + max_reminders = 56, + fallback_approver = '', ), + sso_partner_source = '' + ) + else: + return GetOrgSettings200Response( + ) + """ + + def testGetOrgSettings200Response(self): + """Test GetOrgSettings200Response""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/v2/test/test_get_org_settings200_response_approval_config.py b/sailpoint/v2/test/test_get_org_settings200_response_approval_config.py new file mode 100644 index 000000000..0ba4c57ee --- /dev/null +++ b/sailpoint/v2/test/test_get_org_settings200_response_approval_config.py @@ -0,0 +1,61 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from v2.models.get_org_settings200_response_approval_config import GetOrgSettings200ResponseApprovalConfig # noqa: E501 + + +class TestGetOrgSettings200ResponseApprovalConfig(unittest.TestCase): + """GetOrgSettings200ResponseApprovalConfig unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance( + self, include_optional) -> GetOrgSettings200ResponseApprovalConfig: + """Test GetOrgSettings200ResponseApprovalConfig + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GetOrgSettings200ResponseApprovalConfig` + """ + model = GetOrgSettings200ResponseApprovalConfig() # noqa: E501 + if include_optional: + return GetOrgSettings200ResponseApprovalConfig( + days_till_escalation = 56, + days_between_reminders = 56, + max_reminders = 56, + fallback_approver = '' + ) + else: + return GetOrgSettings200ResponseApprovalConfig( + days_till_escalation = 56, + days_between_reminders = 56, + max_reminders = 56, + fallback_approver = '', + ) + """ + + def testGetOrgSettings200ResponseApprovalConfig(self): + """Test GetOrgSettings200ResponseApprovalConfig""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/v2/test/test_get_org_settings200_response_system_notification_config.py b/sailpoint/v2/test/test_get_org_settings200_response_system_notification_config.py new file mode 100644 index 000000000..b60f6a627 --- /dev/null +++ b/sailpoint/v2/test/test_get_org_settings200_response_system_notification_config.py @@ -0,0 +1,63 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from v2.models.get_org_settings200_response_system_notification_config import GetOrgSettings200ResponseSystemNotificationConfig # noqa: E501 + + +class TestGetOrgSettings200ResponseSystemNotificationConfig(unittest.TestCase): + """GetOrgSettings200ResponseSystemNotificationConfig unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance( + self, include_optional + ) -> GetOrgSettings200ResponseSystemNotificationConfig: + """Test GetOrgSettings200ResponseSystemNotificationConfig + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GetOrgSettings200ResponseSystemNotificationConfig` + """ + model = GetOrgSettings200ResponseSystemNotificationConfig() # noqa: E501 + if include_optional: + return GetOrgSettings200ResponseSystemNotificationConfig( + notifications = [ + v2.models.get_org_settings_200_response_system_notification_config_notifications_inner.getOrgSettings_200_response_systemNotificationConfig_notifications_inner( + type = '', + by_email = True, + thresholds = v2.models.get_org_settings_200_response_system_notification_config_notifications_inner_thresholds.getOrgSettings_200_response_systemNotificationConfig_notifications_inner_thresholds( + healthy = '', + unhealthy = '', ), ) + ], + recipient_type = 'allAdmins' + ) + else: + return GetOrgSettings200ResponseSystemNotificationConfig( + ) + """ + + def testGetOrgSettings200ResponseSystemNotificationConfig(self): + """Test GetOrgSettings200ResponseSystemNotificationConfig""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/v2/test/test_get_org_settings200_response_system_notification_config_notifications_inner.py b/sailpoint/v2/test/test_get_org_settings200_response_system_notification_config_notifications_inner.py new file mode 100644 index 000000000..e3e7fc39e --- /dev/null +++ b/sailpoint/v2/test/test_get_org_settings200_response_system_notification_config_notifications_inner.py @@ -0,0 +1,61 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from v2.models.get_org_settings200_response_system_notification_config_notifications_inner import GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner # noqa: E501 + + +class TestGetOrgSettings200ResponseSystemNotificationConfigNotificationsInner( + unittest.TestCase): + """GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance( + self, include_optional + ) -> GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner: + """Test GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner` + """ + model = GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner() # noqa: E501 + if include_optional: + return GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner( + type = '', + by_email = True, + thresholds = v2.models.get_org_settings_200_response_system_notification_config_notifications_inner_thresholds.getOrgSettings_200_response_systemNotificationConfig_notifications_inner_thresholds( + healthy = '', + unhealthy = '', ) + ) + else: + return GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner( + ) + """ + + def testGetOrgSettings200ResponseSystemNotificationConfigNotificationsInner( + self): + """Test GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/v2/test/test_get_org_settings200_response_system_notification_config_notifications_inner_thresholds.py b/sailpoint/v2/test/test_get_org_settings200_response_system_notification_config_notifications_inner_thresholds.py new file mode 100644 index 000000000..8e6a688f1 --- /dev/null +++ b/sailpoint/v2/test/test_get_org_settings200_response_system_notification_config_notifications_inner_thresholds.py @@ -0,0 +1,58 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from v2.models.get_org_settings200_response_system_notification_config_notifications_inner_thresholds import GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds # noqa: E501 + + +class TestGetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds( + unittest.TestCase): + """GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance( + self, include_optional + ) -> GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds: + """Test GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds` + """ + model = GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds() # noqa: E501 + if include_optional: + return GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds( + healthy = '', + unhealthy = '' + ) + else: + return GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds( + ) + """ + + def testGetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds( + self): + """Test GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/v2/test/test_governance_groups_api.py b/sailpoint/v2/test/test_governance_groups_api.py new file mode 100644 index 000000000..ff7ff1354 --- /dev/null +++ b/sailpoint/v2/test/test_governance_groups_api.py @@ -0,0 +1,93 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from v2.api.governance_groups_api import GovernanceGroupsApi # noqa: E501 + + +class TestGovernanceGroupsApi(unittest.TestCase): + """GovernanceGroupsApi unit test stubs""" + + def setUp(self) -> None: + self.api = GovernanceGroupsApi() # noqa: E501 + + def tearDown(self) -> None: + pass + + def test_bulk_delete_work_groups(self) -> None: + """Test case for bulk_delete_work_groups + + Bulk delete work groups # noqa: E501 + """ + pass + + def test_create_workgroup(self) -> None: + """Test case for create_workgroup + + Create Work Group # noqa: E501 + """ + pass + + def test_delete_workgroup(self) -> None: + """Test case for delete_workgroup + + Delete Work Group By Id # noqa: E501 + """ + pass + + def test_get_workgroup(self) -> None: + """Test case for get_workgroup + + Get Work Group By Id # noqa: E501 + """ + pass + + def test_list_workgroup_connections(self) -> None: + """Test case for list_workgroup_connections + + List Work Group Connections # noqa: E501 + """ + pass + + def test_list_workgroup_members(self) -> None: + """Test case for list_workgroup_members + + List Work Group Members # noqa: E501 + """ + pass + + def test_list_workgroups(self) -> None: + """Test case for list_workgroups + + List Work Groups # noqa: E501 + """ + pass + + def test_modify_workgroup_members(self) -> None: + """Test case for modify_workgroup_members + + Modify Work Group Members # noqa: E501 + """ + pass + + def test_update_workgroup(self) -> None: + """Test case for update_workgroup + + Update Work Group By Id # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/v2/test/test_list_workgroup_connections200_response_inner.py b/sailpoint/v2/test/test_list_workgroup_connections200_response_inner.py new file mode 100644 index 000000000..5b9bc5ac5 --- /dev/null +++ b/sailpoint/v2/test/test_list_workgroup_connections200_response_inner.py @@ -0,0 +1,60 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from v2.models.list_workgroup_connections200_response_inner import ListWorkgroupConnections200ResponseInner # noqa: E501 + + +class TestListWorkgroupConnections200ResponseInner(unittest.TestCase): + """ListWorkgroupConnections200ResponseInner unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance( + self, + include_optional) -> ListWorkgroupConnections200ResponseInner: + """Test ListWorkgroupConnections200ResponseInner + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ListWorkgroupConnections200ResponseInner` + """ + model = ListWorkgroupConnections200ResponseInner() # noqa: E501 + if include_optional: + return ListWorkgroupConnections200ResponseInner( + connection_type = 'AccessRequestReviewer', + description = '', + name = 'Test Approval Scheme', + object_id = '8c24b31fe23947b28e42691a4a6faaee', + object_type = 'AccessProfile', + workgroup_id = 'b0c131fa-5133-4efb-9bb2-e22529f44cad' + ) + else: + return ListWorkgroupConnections200ResponseInner( + ) + """ + + def testListWorkgroupConnections200ResponseInner(self): + """Test ListWorkgroupConnections200ResponseInner""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/v2/test/test_list_workgroup_members200_response_inner.py b/sailpoint/v2/test/test_list_workgroup_members200_response_inner.py new file mode 100644 index 000000000..11fc8e466 --- /dev/null +++ b/sailpoint/v2/test/test_list_workgroup_members200_response_inner.py @@ -0,0 +1,58 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from v2.models.list_workgroup_members200_response_inner import ListWorkgroupMembers200ResponseInner # noqa: E501 + + +class TestListWorkgroupMembers200ResponseInner(unittest.TestCase): + """ListWorkgroupMembers200ResponseInner unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance( + self, include_optional) -> ListWorkgroupMembers200ResponseInner: + """Test ListWorkgroupMembers200ResponseInner + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ListWorkgroupMembers200ResponseInner` + """ + model = ListWorkgroupMembers200ResponseInner() # noqa: E501 + if include_optional: + return ListWorkgroupMembers200ResponseInner( + alias = 'Jerry.Bennett', + email = 'Jerry.Bennett@sailpointdemo.com', + external_id = '2c9180837dfe6949017e208e26027b23', + id = 3497959, + name = 'Jerry.Bennett' + ) + else: + return ListWorkgroupMembers200ResponseInner( + ) + """ + + def testListWorkgroupMembers200ResponseInner(self): + """Test ListWorkgroupMembers200ResponseInner""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/v2/test/test_list_workgroups200_response_inner.py b/sailpoint/v2/test/test_list_workgroups200_response_inner.py new file mode 100644 index 000000000..b97486712 --- /dev/null +++ b/sailpoint/v2/test/test_list_workgroups200_response_inner.py @@ -0,0 +1,65 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from v2.models.list_workgroups200_response_inner import ListWorkgroups200ResponseInner # noqa: E501 + + +class TestListWorkgroups200ResponseInner(unittest.TestCase): + """ListWorkgroups200ResponseInner unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, + include_optional) -> ListWorkgroups200ResponseInner: + """Test ListWorkgroups200ResponseInner + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ListWorkgroups200ResponseInner` + """ + model = ListWorkgroups200ResponseInner() # noqa: E501 + if include_optional: + return ListWorkgroups200ResponseInner( + connection_count = 2, + created = 1641498673000, + description = 'Phil Governance Group', + id = 'b0c131fa-5133-4efb-9bb2-e22529f44cad', + member_count = 2, + modified = 1641498673000, + name = 'Phil Governance Group', + owner = v2.models.list_workgroups_200_response_inner_owner.listWorkgroups_200_response_inner_owner( + display_name = 'Philip Ellis', + email_address = 'philip.ellis@sailpoint.com', + id = '2c9180897d2cb80b017d39ccb26c1804', + name = 'philip.ellis', ) + ) + else: + return ListWorkgroups200ResponseInner( + ) + """ + + def testListWorkgroups200ResponseInner(self): + """Test ListWorkgroups200ResponseInner""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/v2/test/test_list_workgroups200_response_inner_owner.py b/sailpoint/v2/test/test_list_workgroups200_response_inner_owner.py new file mode 100644 index 000000000..8f8a7c8ee --- /dev/null +++ b/sailpoint/v2/test/test_list_workgroups200_response_inner_owner.py @@ -0,0 +1,57 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from v2.models.list_workgroups200_response_inner_owner import ListWorkgroups200ResponseInnerOwner # noqa: E501 + + +class TestListWorkgroups200ResponseInnerOwner(unittest.TestCase): + """ListWorkgroups200ResponseInnerOwner unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, + include_optional) -> ListWorkgroups200ResponseInnerOwner: + """Test ListWorkgroups200ResponseInnerOwner + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ListWorkgroups200ResponseInnerOwner` + """ + model = ListWorkgroups200ResponseInnerOwner() # noqa: E501 + if include_optional: + return ListWorkgroups200ResponseInnerOwner( + display_name = 'Philip Ellis', + email_address = 'philip.ellis@sailpoint.com', + id = '2c9180897d2cb80b017d39ccb26c1804', + name = 'philip.ellis' + ) + else: + return ListWorkgroups200ResponseInnerOwner( + ) + """ + + def testListWorkgroups200ResponseInnerOwner(self): + """Test ListWorkgroups200ResponseInnerOwner""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/v2/test/test_modify_workgroup_members_request.py b/sailpoint/v2/test/test_modify_workgroup_members_request.py new file mode 100644 index 000000000..2f7c33111 --- /dev/null +++ b/sailpoint/v2/test/test_modify_workgroup_members_request.py @@ -0,0 +1,58 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from v2.models.modify_workgroup_members_request import ModifyWorkgroupMembersRequest # noqa: E501 + + +class TestModifyWorkgroupMembersRequest(unittest.TestCase): + """ModifyWorkgroupMembersRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> ModifyWorkgroupMembersRequest: + """Test ModifyWorkgroupMembersRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `ModifyWorkgroupMembersRequest` + """ + model = ModifyWorkgroupMembersRequest() # noqa: E501 + if include_optional: + return ModifyWorkgroupMembersRequest( + add = [ + '2c9180867624cbd7017642d8c8c81f67' + ], + remove = [ + '2c9180867624cbd7017642d8c8c81f67' + ] + ) + else: + return ModifyWorkgroupMembersRequest( + ) + """ + + def testModifyWorkgroupMembersRequest(self): + """Test ModifyWorkgroupMembersRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/v2/test/test_org_api.py b/sailpoint/v2/test/test_org_api.py new file mode 100644 index 000000000..90baf86b0 --- /dev/null +++ b/sailpoint/v2/test/test_org_api.py @@ -0,0 +1,44 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest + +from v2.api.org_api import OrgApi # noqa: E501 + + +class TestOrgApi(unittest.TestCase): + """OrgApi unit test stubs""" + + def setUp(self) -> None: + self.api = OrgApi() # noqa: E501 + + def tearDown(self) -> None: + pass + + def test_get_org_settings(self) -> None: + """Test case for get_org_settings + + Retrieves your org settings. # noqa: E501 + """ + pass + + def test_update_org_settings(self) -> None: + """Test case for update_org_settings + + Updates one or more org attributes. # noqa: E501 + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/v2/test/test_update_org_settings_request.py b/sailpoint/v2/test/test_update_org_settings_request.py new file mode 100644 index 000000000..13ca503bd --- /dev/null +++ b/sailpoint/v2/test/test_update_org_settings_request.py @@ -0,0 +1,87 @@ +# coding: utf-8 + +""" + SailPoint SaaS API + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + + The version of the OpenAPI document: 2.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +import unittest +import datetime + +from v2.models.update_org_settings_request import UpdateOrgSettingsRequest # noqa: E501 + + +class TestUpdateOrgSettingsRequest(unittest.TestCase): + """UpdateOrgSettingsRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> UpdateOrgSettingsRequest: + """Test UpdateOrgSettingsRequest + include_option is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `UpdateOrgSettingsRequest` + """ + model = UpdateOrgSettingsRequest() # noqa: E501 + if include_optional: + return UpdateOrgSettingsRequest( + country_codes = [ + '' + ], + enable_external_password_change = True, + enable_automatic_password_replay = True, + enable_automation_generation = True, + kba_req_answers = 56, + kba_req_for_authn = 56, + lockout_attempt_threshold = 56, + lockout_time_minutes = 56, + login_url = '', + netmasks = [ + '' + ], + notify_authentication_setting_change = True, + password_replay_state = 'enabled', + preferred_identity_invite_template = '', + redirect_patterns = [ + '' + ], + sso_partner_source = '', + system_notification_emails = [ + '' + ], + track_analytics = True, + usage_cert_required = True, + usage_cert_text = '', + username_empty_text = '', + username_label = '', + white_list = True, + approval_config = v2.models.get_org_settings_200_response_approval_config.getOrgSettings_200_response_approvalConfig( + days_till_escalation = 56, + days_between_reminders = 56, + max_reminders = 56, + fallback_approver = '', ) + ) + else: + return UpdateOrgSettingsRequest( + ) + """ + + def testUpdateOrgSettingsRequest(self): + """Test UpdateOrgSettingsRequest""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + + +if __name__ == '__main__': + unittest.main() diff --git a/sailpoint/v2_README.md b/sailpoint/v2_README.md new file mode 100644 index 000000000..e3ec068d1 --- /dev/null +++ b/sailpoint/v2_README.md @@ -0,0 +1,137 @@ +# v2 +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +The `v2` package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: + +- API version: 2.0.0 +- Package version: 1.0.0 +- Build package: org.openapitools.codegen.languages.PythonClientCodegen + +## Requirements. + +Python 3.7+ + +## Installation & Usage + +This python library package is generated without supporting files like setup.py or requirements files + +To be able to use it, you will need these dependencies in your own package that uses this library: + +* urllib3 >= 1.25.3 +* python-dateutil +* pydantic +* aenum + +## Getting Started + +In your own code, to use this library to connect and interact with v2, +you can run the following: + +```python + +import time +import v2 +from v2.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to https://sailpoint.api.identitynow.com/v2 +# See configuration.py for a list of all supported configuration parameters. +configuration = v2.Configuration( + host = "https://sailpoint.api.identitynow.com/v2" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +configuration.access_token = os.environ["ACCESS_TOKEN"] + +configuration.access_token = os.environ["ACCESS_TOKEN"] + + +# Enter a context with an instance of the API client +with v2.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = v2.GovernanceGroupsApi(api_client) + bulk_delete_work_groups_request = v2.BulkDeleteWorkGroupsRequest() # BulkDeleteWorkGroupsRequest | Work group ids to delete + + try: + # Bulk delete work groups + api_response = api_instance.bulk_delete_work_groups(bulk_delete_work_groups_request) + print("The response of GovernanceGroupsApi->bulk_delete_work_groups:\n") + pprint(api_response) + except ApiException as e: + print("Exception when calling GovernanceGroupsApi->bulk_delete_work_groups: %s\n" % e) + +``` + +## Documentation for API Endpoints + +All URIs are relative to *https://sailpoint.api.identitynow.com/v2* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +*GovernanceGroupsApi* | [**bulk_delete_work_groups**](v2/docs/GovernanceGroupsApi.md#bulk_delete_work_groups) | **POST** /workgroups/bulk-delete | Bulk delete work groups +*GovernanceGroupsApi* | [**create_workgroup**](v2/docs/GovernanceGroupsApi.md#create_workgroup) | **POST** /workgroups | Create Work Group +*GovernanceGroupsApi* | [**delete_workgroup**](v2/docs/GovernanceGroupsApi.md#delete_workgroup) | **DELETE** /workgroups/{workgroupId} | Delete Work Group By Id +*GovernanceGroupsApi* | [**get_workgroup**](v2/docs/GovernanceGroupsApi.md#get_workgroup) | **GET** /workgroups/{workgroupId} | Get Work Group By Id +*GovernanceGroupsApi* | [**list_workgroup_connections**](v2/docs/GovernanceGroupsApi.md#list_workgroup_connections) | **GET** /workgroups/{workgroupId}/connections | List Work Group Connections +*GovernanceGroupsApi* | [**list_workgroup_members**](v2/docs/GovernanceGroupsApi.md#list_workgroup_members) | **GET** /workgroups/{workgroupId}/members | List Work Group Members +*GovernanceGroupsApi* | [**list_workgroups**](v2/docs/GovernanceGroupsApi.md#list_workgroups) | **GET** /workgroups | List Work Groups +*GovernanceGroupsApi* | [**modify_workgroup_members**](v2/docs/GovernanceGroupsApi.md#modify_workgroup_members) | **POST** /workgroups/{workgroupId}/members | Modify Work Group Members +*GovernanceGroupsApi* | [**update_workgroup**](v2/docs/GovernanceGroupsApi.md#update_workgroup) | **PATCH** /workgroups/{workgroupId} | Update Work Group By Id +*OrgApi* | [**get_org_settings**](v2/docs/OrgApi.md#get_org_settings) | **GET** /org | Retrieves your org settings. +*OrgApi* | [**update_org_settings**](v2/docs/OrgApi.md#update_org_settings) | **PATCH** /org | Updates one or more org attributes. + + +## Documentation For Models + + - [BulkDeleteWorkGroups200Response](v2/docs/BulkDeleteWorkGroups200Response.md) + - [BulkDeleteWorkGroupsRequest](v2/docs/BulkDeleteWorkGroupsRequest.md) + - [CreateWorkgroupRequest](v2/docs/CreateWorkgroupRequest.md) + - [CreateWorkgroupRequestOwner](v2/docs/CreateWorkgroupRequestOwner.md) + - [GetOrgSettings200Response](v2/docs/GetOrgSettings200Response.md) + - [GetOrgSettings200ResponseApprovalConfig](v2/docs/GetOrgSettings200ResponseApprovalConfig.md) + - [GetOrgSettings200ResponseSystemNotificationConfig](v2/docs/GetOrgSettings200ResponseSystemNotificationConfig.md) + - [GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner](v2/docs/GetOrgSettings200ResponseSystemNotificationConfigNotificationsInner.md) + - [GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds](v2/docs/GetOrgSettings200ResponseSystemNotificationConfigNotificationsInnerThresholds.md) + - [ListWorkgroupConnections200ResponseInner](v2/docs/ListWorkgroupConnections200ResponseInner.md) + - [ListWorkgroupMembers200ResponseInner](v2/docs/ListWorkgroupMembers200ResponseInner.md) + - [ListWorkgroups200ResponseInner](v2/docs/ListWorkgroups200ResponseInner.md) + - [ListWorkgroups200ResponseInnerOwner](v2/docs/ListWorkgroups200ResponseInnerOwner.md) + - [ModifyWorkgroupMembersRequest](v2/docs/ModifyWorkgroupMembersRequest.md) + - [UpdateOrgSettingsRequest](v2/docs/UpdateOrgSettingsRequest.md) + + + +## Documentation For Authorization + + +Authentication schemes defined for the API: + +### UserContextAuth + +- **Type**: OAuth +- **Flow**: application +- **Authorization URL**: +- **Scopes**: + - **sp:scopes:default**: default scope + - **sp:scopes:all**: access to all scopes + + +### UserContextAuth + +- **Type**: OAuth +- **Flow**: accessCode +- **Authorization URL**: https://tenant.identitynow.com/oauth/authorize +- **Scopes**: + - **sp:scopes:default**: default scope + - **sp:scopes:all**: access to all scopes + + +## Author + + + + diff --git a/sdk-resources/beta-config.yaml b/sdk-resources/beta-config.yaml index d7fb50f58..958c02927 100644 --- a/sdk-resources/beta-config.yaml +++ b/sdk-resources/beta-config.yaml @@ -1,4 +1,5 @@ templateDir: ./sdk-resources/resources packageName: beta packageVersion: 1.0.0 +apiVersion: beta generateSourceCodeOnly: true \ No newline at end of file diff --git a/sdk-resources/cc-config.yaml b/sdk-resources/cc-config.yaml new file mode 100644 index 000000000..31c203173 --- /dev/null +++ b/sdk-resources/cc-config.yaml @@ -0,0 +1,4 @@ +templateDir: ./sdk-resources/resources +packageName: cc +packageVersion: 1.0.0 +generateSourceCodeOnly: true \ No newline at end of file diff --git a/sdk-resources/resources/api_client.mustache b/sdk-resources/resources/api_client.mustache index a6fcc945b..2c8df5fd8 100644 --- a/sdk-resources/resources/api_client.mustache +++ b/sdk-resources/resources/api_client.mustache @@ -204,7 +204,7 @@ class ApiClient: # request url if _host is None: - url = self.configuration.base_url + '/{{packageName}}' + resource_path + url = self.configuration.base_url + '/{{apiVersion}}' + resource_path else: # use server/host defined in path or operation instead url = _host + resource_path diff --git a/sdk-resources/v2-config.yaml b/sdk-resources/v2-config.yaml new file mode 100644 index 000000000..e3d22614b --- /dev/null +++ b/sdk-resources/v2-config.yaml @@ -0,0 +1,5 @@ +templateDir: ./sdk-resources/resources +packageName: v2 +packageVersion: 1.0.0 +apiVersion: v2 +generateSourceCodeOnly: true \ No newline at end of file diff --git a/sdk-resources/v3-config.yaml b/sdk-resources/v3-config.yaml index 944dbe9b4..0b964ec38 100644 --- a/sdk-resources/v3-config.yaml +++ b/sdk-resources/v3-config.yaml @@ -1,4 +1,5 @@ templateDir: ./sdk-resources/resources packageName: v3 packageVersion: 1.0.0 +apiVersion: v3 generateSourceCodeOnly: true \ No newline at end of file