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