From 33c3e67134effe37c0eddcbcfa7dd1f89928ee69 Mon Sep 17 00:00:00 2001 From: Christopher Bonilla Date: Mon, 25 Nov 2024 16:05:13 +0100 Subject: [PATCH 1/3] chore: regenerate API client JIRA: TRIVIAL risk: low --- gooddata-api-client/.openapi-generator/FILES | 18 +- gooddata-api-client/README.md | 19 +- .../AbsoluteDateFilterAbsoluteDateFilter.md | 1 + gooddata-api-client/docs/ActionsApi.md | 90 +++ .../docs/ChatHistoryInteraction.md | 1 + gooddata-api-client/docs/ChatHistoryResult.md | 1 + gooddata-api-client/docs/ChatResult.md | 3 +- ...ValueFilterComparisonMeasureValueFilter.md | 1 + .../docs/DataSourceDeclarativeAPIsApi.md | 2 + .../docs/DataSourceEntityAPIsApi.md | 6 + .../docs/DateAbsoluteFilter.md | 4 +- .../docs/DeclarativeDataSource.md | 2 + .../docs/DeclarativeIdentityProvider.md | 20 + ...clarativeNotificationChannelDestination.md | 2 +- .../docs/DeclarativeOrganization.md | 1 + .../docs/DeclarativeOrganizationInfo.md | 1 + gooddata-api-client/docs/DefaultSmtp.md | 2 +- gooddata-api-client/docs/DefaultSmtpAllOf.md | 2 +- gooddata-api-client/docs/EntitiesApi.md | 48 +- .../docs/IdentityProvidersApi.md | 186 +++++- ...{SamlIdpSpecification.md => InPlatform.md} | 6 +- gooddata-api-client/docs/InPlatformAllOf.md | 12 + .../docs/InlineFilterDefinitionInline.md | 1 + .../docs/JsonApiDataSourceInAttributes.md | 4 +- .../docs/JsonApiDataSourceOutAttributes.md | 1 + .../docs/JsonApiDataSourcePatchAttributes.md | 4 +- .../docs/JsonApiIdentityProviderIn.md | 2 +- .../JsonApiIdentityProviderInAttributes.md | 8 +- ...entityProviderInAttributesSpecification.md | 18 - .../docs/JsonApiIdentityProviderOut.md | 2 +- .../JsonApiIdentityProviderOutAttributes.md | 16 + .../JsonApiIdentityProviderOutWithLinks.md | 2 +- .../docs/JsonApiIdentityProviderPatch.md | 2 +- .../JsonApiIdentityProviderPatchAttributes.md | 14 - ...ificationChannelInAttributesDestination.md | 2 +- gooddata-api-client/docs/LayoutApi.md | 167 ++++- .../docs/ManagePermissionsApi.md | 234 +++++++ ...eAttributeFilterNegativeAttributeFilter.md | 1 + .../docs/NotificationChannelDestination.md | 2 +- .../docs/NotificationChannelsApi.md | 142 ++++ .../docs/OidcIdpSpecification.md | 17 - .../docs/OrganizationDeclarativeAPIsApi.md | 19 + .../docs/OrganizationModelControllerApi.md | 48 +- ...eAttributeFilterPositiveAttributeFilter.md | 1 + ...asureValueFilterRangeMeasureValueFilter.md | 1 + .../docs/RankingFilterRankingFilter.md | 1 + .../RelativeDateFilterRelativeDateFilter.md | 1 + gooddata-api-client/docs/SmartFunctionsApi.md | 86 +++ gooddata-api-client/docs/Smtp.md | 2 +- gooddata-api-client/docs/SmtpAllOf.md | 2 +- gooddata-api-client/docs/TestConnectionApi.md | 4 + .../docs/TestDefinitionRequest.md | 2 + gooddata-api-client/docs/TestRequest.md | 2 + .../gooddata_api_client/api/actions_api.py | 150 +++++ .../api/identity_providers_api.py | 252 +++++++ .../gooddata_api_client/api/layout_api.py | 254 +++++++- .../api/manage_permissions_api.py | 454 +++++++++++++ .../api/notification_channels_api.py | 252 +++++++ .../api/smart_functions_api.py | 150 +++++ .../gooddata_api_client/apis/__init__.py | 1 + ...solute_date_filter_absolute_date_filter.py | 4 + .../model/chat_history_interaction.py | 9 + .../model/chat_history_result.py | 10 +- .../gooddata_api_client/model/chat_result.py | 22 +- ..._filter_comparison_measure_value_filter.py | 4 + .../model/date_absolute_filter.py | 12 +- .../model/declarative_data_source.py | 15 + ...on.py => declarative_identity_provider.py} | 137 ++-- .../model/declarative_notification_channel.py | 1 + ...rative_notification_channel_destination.py | 12 +- .../model/declarative_organization.py | 6 + .../model/declarative_organization_info.py | 4 + .../gooddata_api_client/model/default_smtp.py | 9 +- .../model/default_smtp_all_of.py | 9 +- ...der_patch_attributes.py => in_platform.py} | 91 ++- ...specification.py => in_platform_all_of.py} | 30 +- .../model/inline_filter_definition_inline.py | 4 + ...i_data_source_identifier_out_attributes.py | 1 + .../json_api_data_source_in_attributes.py | 19 +- .../json_api_data_source_out_attributes.py | 9 + .../json_api_data_source_patch_attributes.py | 19 +- .../model/json_api_identity_provider_in.py | 14 +- ...son_api_identity_provider_in_attributes.py | 71 +- .../model/json_api_identity_provider_out.py | 18 +- ...n_api_identity_provider_out_attributes.py} | 60 +- ...on_api_identity_provider_out_with_links.py | 12 +- .../model/json_api_identity_provider_patch.py | 18 +- ..._api_notification_channel_in_attributes.py | 1 + ...ation_channel_in_attributes_destination.py | 12 +- ...ribute_filter_negative_attribute_filter.py | 4 + .../model/notification_channel_destination.py | 12 +- ...ribute_filter_positive_attribute_filter.py | 4 + ...value_filter_range_measure_value_filter.py | 4 + .../model/ranking_filter_ranking_filter.py | 4 + ...lative_date_filter_relative_date_filter.py | 4 + .../gooddata_api_client/model/route_result.py | 9 +- .../gooddata_api_client/model/smtp.py | 9 +- .../gooddata_api_client/model/smtp_all_of.py | 9 +- .../model/test_definition_request.py | 9 + .../gooddata_api_client/model/test_request.py | 8 + .../gooddata_api_client/models/__init__.py | 8 +- schemas/gooddata-afm-client.json | 110 +++- schemas/gooddata-api-client.json | 616 +++++++++++++----- schemas/gooddata-metadata-client.json | 511 +++++++++++---- schemas/gooddata-scan-client.json | 19 +- 105 files changed, 3982 insertions(+), 740 deletions(-) create mode 100644 gooddata-api-client/docs/DeclarativeIdentityProvider.md rename gooddata-api-client/docs/{SamlIdpSpecification.md => InPlatform.md} (57%) create mode 100644 gooddata-api-client/docs/InPlatformAllOf.md delete mode 100644 gooddata-api-client/docs/JsonApiIdentityProviderInAttributesSpecification.md create mode 100644 gooddata-api-client/docs/JsonApiIdentityProviderOutAttributes.md delete mode 100644 gooddata-api-client/docs/JsonApiIdentityProviderPatchAttributes.md create mode 100644 gooddata-api-client/docs/ManagePermissionsApi.md delete mode 100644 gooddata-api-client/docs/OidcIdpSpecification.md create mode 100644 gooddata-api-client/gooddata_api_client/api/manage_permissions_api.py rename gooddata-api-client/gooddata_api_client/model/{json_api_identity_provider_in_attributes_specification.py => declarative_identity_provider.py} (72%) rename gooddata-api-client/gooddata_api_client/model/{json_api_identity_provider_patch_attributes.py => in_platform.py} (79%) rename gooddata-api-client/gooddata_api_client/model/{saml_idp_specification.py => in_platform_all_of.py} (91%) rename gooddata-api-client/gooddata_api_client/model/{oidc_idp_specification.py => json_api_identity_provider_out_attributes.py} (82%) diff --git a/gooddata-api-client/.openapi-generator/FILES b/gooddata-api-client/.openapi-generator/FILES index feece814b..bf104dce7 100644 --- a/gooddata-api-client/.openapi-generator/FILES +++ b/gooddata-api-client/.openapi-generator/FILES @@ -144,6 +144,7 @@ docs/DeclarativeExportDefinitionRequestPayload.md docs/DeclarativeFact.md docs/DeclarativeFilterContext.md docs/DeclarativeFilterView.md +docs/DeclarativeIdentityProvider.md docs/DeclarativeJwk.md docs/DeclarativeJwkSpecification.md docs/DeclarativeLabel.md @@ -248,6 +249,8 @@ docs/HistogramBucket.md docs/HistogramProperties.md docs/IdentifierDuplications.md docs/IdentityProvidersApi.md +docs/InPlatform.md +docs/InPlatformAllOf.md docs/InlineFilterDefinition.md docs/InlineFilterDefinitionInline.md docs/InlineMeasureDefinition.md @@ -494,14 +497,13 @@ docs/JsonApiFilterViewPatchAttributes.md docs/JsonApiFilterViewPatchDocument.md docs/JsonApiIdentityProviderIn.md docs/JsonApiIdentityProviderInAttributes.md -docs/JsonApiIdentityProviderInAttributesSpecification.md docs/JsonApiIdentityProviderInDocument.md docs/JsonApiIdentityProviderOut.md +docs/JsonApiIdentityProviderOutAttributes.md docs/JsonApiIdentityProviderOutDocument.md docs/JsonApiIdentityProviderOutList.md docs/JsonApiIdentityProviderOutWithLinks.md docs/JsonApiIdentityProviderPatch.md -docs/JsonApiIdentityProviderPatchAttributes.md docs/JsonApiIdentityProviderPatchDocument.md docs/JsonApiJwkIn.md docs/JsonApiJwkInAttributes.md @@ -734,6 +736,7 @@ docs/ListLinksAllOf.md docs/LocalIdentifier.md docs/LocaleRequest.md docs/ManageDashboardPermissionsRequestInner.md +docs/ManagePermissionsApi.md docs/MeasureDefinition.md docs/MeasureExecutionResultHeader.md docs/MeasureGroupHeaders.md @@ -752,7 +755,6 @@ docs/NotificationChannelDestination.md docs/NotificationChannelsApi.md docs/ObjectLinks.md docs/ObjectLinksContainer.md -docs/OidcIdpSpecification.md docs/OptionsApi.md docs/OrganizationControllerApi.md docs/OrganizationDeclarativeAPIsApi.md @@ -806,7 +808,6 @@ docs/RouteRequest.md docs/RouteResult.md docs/RsaSpecification.md docs/RulePermission.md -docs/SamlIdpSpecification.md docs/ScanRequest.md docs/ScanResultPdm.md docs/ScanSqlRequest.md @@ -930,6 +931,7 @@ gooddata_api_client/api/labels_api.py gooddata_api_client/api/layout_api.py gooddata_api_client/api/ldm_declarative_apis_api.py gooddata_api_client/api/llm_endpoints_api.py +gooddata_api_client/api/manage_permissions_api.py gooddata_api_client/api/metadata_sync_api.py gooddata_api_client/api/metrics_api.py gooddata_api_client/api/notification_channels_api.py @@ -1094,6 +1096,7 @@ gooddata_api_client/model/declarative_export_definition_request_payload.py gooddata_api_client/model/declarative_fact.py gooddata_api_client/model/declarative_filter_context.py gooddata_api_client/model/declarative_filter_view.py +gooddata_api_client/model/declarative_identity_provider.py gooddata_api_client/model/declarative_jwk.py gooddata_api_client/model/declarative_jwk_specification.py gooddata_api_client/model/declarative_label.py @@ -1189,6 +1192,8 @@ gooddata_api_client/model/histogram.py gooddata_api_client/model/histogram_bucket.py gooddata_api_client/model/histogram_properties.py gooddata_api_client/model/identifier_duplications.py +gooddata_api_client/model/in_platform.py +gooddata_api_client/model/in_platform_all_of.py gooddata_api_client/model/inline_filter_definition.py gooddata_api_client/model/inline_filter_definition_inline.py gooddata_api_client/model/inline_measure_definition.py @@ -1433,14 +1438,13 @@ gooddata_api_client/model/json_api_filter_view_patch_attributes.py gooddata_api_client/model/json_api_filter_view_patch_document.py gooddata_api_client/model/json_api_identity_provider_in.py gooddata_api_client/model/json_api_identity_provider_in_attributes.py -gooddata_api_client/model/json_api_identity_provider_in_attributes_specification.py gooddata_api_client/model/json_api_identity_provider_in_document.py gooddata_api_client/model/json_api_identity_provider_out.py +gooddata_api_client/model/json_api_identity_provider_out_attributes.py gooddata_api_client/model/json_api_identity_provider_out_document.py gooddata_api_client/model/json_api_identity_provider_out_list.py gooddata_api_client/model/json_api_identity_provider_out_with_links.py gooddata_api_client/model/json_api_identity_provider_patch.py -gooddata_api_client/model/json_api_identity_provider_patch_attributes.py gooddata_api_client/model/json_api_identity_provider_patch_document.py gooddata_api_client/model/json_api_jwk_in.py gooddata_api_client/model/json_api_jwk_in_attributes.py @@ -1684,7 +1688,6 @@ gooddata_api_client/model/notes.py gooddata_api_client/model/notification_channel_destination.py gooddata_api_client/model/object_links.py gooddata_api_client/model/object_links_container.py -gooddata_api_client/model/oidc_idp_specification.py gooddata_api_client/model/organization_permission_assignment.py gooddata_api_client/model/page_metadata.py gooddata_api_client/model/paging.py @@ -1730,7 +1733,6 @@ gooddata_api_client/model/route_request.py gooddata_api_client/model/route_result.py gooddata_api_client/model/rsa_specification.py gooddata_api_client/model/rule_permission.py -gooddata_api_client/model/saml_idp_specification.py gooddata_api_client/model/scan_request.py gooddata_api_client/model/scan_result_pdm.py gooddata_api_client/model/scan_sql_request.py diff --git a/gooddata-api-client/README.md b/gooddata-api-client/README.md index b19cbd12c..99423c698 100644 --- a/gooddata-api-client/README.md +++ b/gooddata-api-client/README.md @@ -207,7 +207,9 @@ Class | Method | HTTP request | Description *IdentityProvidersApi* | [**delete_entity_identity_providers**](docs/IdentityProvidersApi.md#delete_entity_identity_providers) | **DELETE** /api/v1/entities/identityProviders/{id} | Delete Identity Provider *IdentityProvidersApi* | [**get_all_entities_identity_providers**](docs/IdentityProvidersApi.md#get_all_entities_identity_providers) | **GET** /api/v1/entities/identityProviders | Get all Identity Providers *IdentityProvidersApi* | [**get_entity_identity_providers**](docs/IdentityProvidersApi.md#get_entity_identity_providers) | **GET** /api/v1/entities/identityProviders/{id} | Get Identity Provider +*IdentityProvidersApi* | [**get_identity_providers_layout**](docs/IdentityProvidersApi.md#get_identity_providers_layout) | **GET** /api/v1/layout/identityProviders | Get all identity providers layout *IdentityProvidersApi* | [**patch_entity_identity_providers**](docs/IdentityProvidersApi.md#patch_entity_identity_providers) | **PATCH** /api/v1/entities/identityProviders/{id} | Patch Identity Provider +*IdentityProvidersApi* | [**set_identity_providers**](docs/IdentityProvidersApi.md#set_identity_providers) | **PUT** /api/v1/layout/identityProviders | Set all identity providers *IdentityProvidersApi* | [**update_entity_identity_providers**](docs/IdentityProvidersApi.md#update_entity_identity_providers) | **PUT** /api/v1/entities/identityProviders/{id} | Put Identity Provider *InvalidateCacheApi* | [**register_upload_notification**](docs/InvalidateCacheApi.md#register_upload_notification) | **POST** /api/v1/actions/dataSources/{dataSourceId}/uploadNotification | Register an upload notification *JWKSApi* | [**create_entity_jwks**](docs/JWKSApi.md#create_entity_jwks) | **POST** /api/v1/entities/jwks | Post Jwks @@ -226,6 +228,9 @@ Class | Method | HTTP request | Description *LLMEndpointsApi* | [**update_entity_llm_endpoints**](docs/LLMEndpointsApi.md#update_entity_llm_endpoints) | **PUT** /api/v1/entities/llmEndpoints/{id} | PUT LLM endpoint entity *LabelsApi* | [**get_all_entities_labels**](docs/LabelsApi.md#get_all_entities_labels) | **GET** /api/v1/entities/workspaces/{workspaceId}/labels | Get all Labels *LabelsApi* | [**get_entity_labels**](docs/LabelsApi.md#get_entity_labels) | **GET** /api/v1/entities/workspaces/{workspaceId}/labels/{objectId} | Get a Label +*ManagePermissionsApi* | [**get_data_source_permissions**](docs/ManagePermissionsApi.md#get_data_source_permissions) | **GET** /api/v1/layout/dataSources/{dataSourceId}/permissions | Get permissions for the data source +*ManagePermissionsApi* | [**manage_data_source_permissions**](docs/ManagePermissionsApi.md#manage_data_source_permissions) | **POST** /api/v1/actions/dataSources/{dataSourceId}/managePermissions | Manage Permissions for a Data Source +*ManagePermissionsApi* | [**set_data_source_permissions**](docs/ManagePermissionsApi.md#set_data_source_permissions) | **PUT** /api/v1/layout/dataSources/{dataSourceId}/permissions | Set data source permissions. *MetadataSyncApi* | [**metadata_sync**](docs/MetadataSyncApi.md#metadata_sync) | **POST** /api/v1/actions/workspaces/{workspaceId}/metadataSync | (BETA) Sync Metadata to other services *MetadataSyncApi* | [**metadata_sync_organization**](docs/MetadataSyncApi.md#metadata_sync_organization) | **POST** /api/v1/actions/organization/metadataSync | (BETA) Sync organization scope Metadata to other services *MetricsApi* | [**create_entity_metrics**](docs/MetricsApi.md#create_entity_metrics) | **POST** /api/v1/entities/workspaces/{workspaceId}/metrics | Post Metrics @@ -238,7 +243,9 @@ Class | Method | HTTP request | Description *NotificationChannelsApi* | [**delete_entity_notification_channels**](docs/NotificationChannelsApi.md#delete_entity_notification_channels) | **DELETE** /api/v1/entities/notificationChannels/{id} | Delete Notification Channel entity *NotificationChannelsApi* | [**get_all_entities_notification_channels**](docs/NotificationChannelsApi.md#get_all_entities_notification_channels) | **GET** /api/v1/entities/notificationChannels | Get all Notification Channel entities *NotificationChannelsApi* | [**get_entity_notification_channels**](docs/NotificationChannelsApi.md#get_entity_notification_channels) | **GET** /api/v1/entities/notificationChannels/{id} | Get Notification Channel entity +*NotificationChannelsApi* | [**get_notification_channels_layout**](docs/NotificationChannelsApi.md#get_notification_channels_layout) | **GET** /api/v1/layout/notificationChannels | Get all notification channels layout *NotificationChannelsApi* | [**patch_entity_notification_channels**](docs/NotificationChannelsApi.md#patch_entity_notification_channels) | **PATCH** /api/v1/entities/notificationChannels/{id} | Patch Notification Channel entity +*NotificationChannelsApi* | [**set_notification_channels**](docs/NotificationChannelsApi.md#set_notification_channels) | **PUT** /api/v1/layout/notificationChannels | Set all notification channels *NotificationChannelsApi* | [**update_entity_notification_channels**](docs/NotificationChannelsApi.md#update_entity_notification_channels) | **PUT** /api/v1/entities/notificationChannels/{id} | Put Notification Channel entity *OptionsApi* | [**get_all_options**](docs/OptionsApi.md#get_all_options) | **GET** /api/v1/options | Links for all configuration options *OrganizationDeclarativeAPIsApi* | [**get_organization_layout**](docs/OrganizationDeclarativeAPIsApi.md#get_organization_layout) | **GET** /api/v1/layout/organization | Get organization layout @@ -280,6 +287,7 @@ Class | Method | HTTP request | Description *ScanningApi* | [**scan_sql**](docs/ScanningApi.md#scan_sql) | **POST** /api/v1/actions/dataSources/{dataSourceId}/scanSql | Collect metadata about SQL query *SmartFunctionsApi* | [**ai_chat**](docs/SmartFunctionsApi.md#ai_chat) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/chat | (BETA) Chat with AI *SmartFunctionsApi* | [**ai_chat_history**](docs/SmartFunctionsApi.md#ai_chat_history) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/chatHistory | (BETA) Get Chat History +*SmartFunctionsApi* | [**ai_chat_stream**](docs/SmartFunctionsApi.md#ai_chat_stream) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/chatStream | (BETA) Chat with AI *SmartFunctionsApi* | [**ai_route**](docs/SmartFunctionsApi.md#ai_route) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/route | (BETA) Route to supported use cases based on this input query. *SmartFunctionsApi* | [**ai_search**](docs/SmartFunctionsApi.md#ai_search) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/search | (BETA) Semantic Search in Metadata *SmartFunctionsApi* | [**anomaly_detection**](docs/SmartFunctionsApi.md#anomaly_detection) | **POST** /api/v1/actions/workspaces/{workspaceId}/execution/functions/anomalyDetection/{resultId} | (EXPERIMENTAL) Smart functions - Anomaly Detection @@ -375,6 +383,7 @@ Class | Method | HTTP request | Description *WorkspacesSettingsApi* | [**workspace_resolve_settings**](docs/WorkspacesSettingsApi.md#workspace_resolve_settings) | **POST** /api/v1/actions/workspaces/{workspaceId}/resolveSettings | Values for selected settings. *ActionsApi* | [**ai_chat**](docs/ActionsApi.md#ai_chat) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/chat | (BETA) Chat with AI *ActionsApi* | [**ai_chat_history**](docs/ActionsApi.md#ai_chat_history) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/chatHistory | (BETA) Get Chat History +*ActionsApi* | [**ai_chat_stream**](docs/ActionsApi.md#ai_chat_stream) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/chatStream | (BETA) Chat with AI *ActionsApi* | [**ai_route**](docs/ActionsApi.md#ai_route) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/route | (BETA) Route to supported use cases based on this input query. *ActionsApi* | [**ai_search**](docs/ActionsApi.md#ai_search) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/search | (BETA) Semantic Search in Metadata *ActionsApi* | [**all_platform_usage**](docs/ActionsApi.md#all_platform_usage) | **GET** /api/v1/actions/collectUsage | Info about the platform usage. @@ -629,6 +638,7 @@ Class | Method | HTTP request | Description *LayoutApi* | [**get_data_source_permissions**](docs/LayoutApi.md#get_data_source_permissions) | **GET** /api/v1/layout/dataSources/{dataSourceId}/permissions | Get permissions for the data source *LayoutApi* | [**get_data_sources_layout**](docs/LayoutApi.md#get_data_sources_layout) | **GET** /api/v1/layout/dataSources | Get all data sources *LayoutApi* | [**get_filter_views**](docs/LayoutApi.md#get_filter_views) | **GET** /api/v1/layout/workspaces/{workspaceId}/filterViews | Get filter views +*LayoutApi* | [**get_identity_providers_layout**](docs/LayoutApi.md#get_identity_providers_layout) | **GET** /api/v1/layout/identityProviders | Get all identity providers layout *LayoutApi* | [**get_logical_model**](docs/LayoutApi.md#get_logical_model) | **GET** /api/v1/layout/workspaces/{workspaceId}/logicalModel | Get logical model *LayoutApi* | [**get_notification_channels_layout**](docs/LayoutApi.md#get_notification_channels_layout) | **GET** /api/v1/layout/notificationChannels | Get all notification channels layout *LayoutApi* | [**get_organization_layout**](docs/LayoutApi.md#get_organization_layout) | **GET** /api/v1/layout/organization | Get organization layout @@ -652,6 +662,7 @@ Class | Method | HTTP request | Description *LayoutApi* | [**set_automations**](docs/LayoutApi.md#set_automations) | **PUT** /api/v1/layout/workspaces/{workspaceId}/automations | Set automations *LayoutApi* | [**set_data_source_permissions**](docs/LayoutApi.md#set_data_source_permissions) | **PUT** /api/v1/layout/dataSources/{dataSourceId}/permissions | Set data source permissions. *LayoutApi* | [**set_filter_views**](docs/LayoutApi.md#set_filter_views) | **PUT** /api/v1/layout/workspaces/{workspaceId}/filterViews | Set filter views +*LayoutApi* | [**set_identity_providers**](docs/LayoutApi.md#set_identity_providers) | **PUT** /api/v1/layout/identityProviders | Set all identity providers *LayoutApi* | [**set_logical_model**](docs/LayoutApi.md#set_logical_model) | **PUT** /api/v1/layout/workspaces/{workspaceId}/logicalModel | Set logical model *LayoutApi* | [**set_notification_channels**](docs/LayoutApi.md#set_notification_channels) | **PUT** /api/v1/layout/notificationChannels | Set all notification channels *LayoutApi* | [**set_organization_layout**](docs/LayoutApi.md#set_organization_layout) | **PUT** /api/v1/layout/organization | Set organization layout @@ -977,6 +988,7 @@ Class | Method | HTTP request | Description - [DeclarativeFact](docs/DeclarativeFact.md) - [DeclarativeFilterContext](docs/DeclarativeFilterContext.md) - [DeclarativeFilterView](docs/DeclarativeFilterView.md) + - [DeclarativeIdentityProvider](docs/DeclarativeIdentityProvider.md) - [DeclarativeJwk](docs/DeclarativeJwk.md) - [DeclarativeJwkSpecification](docs/DeclarativeJwkSpecification.md) - [DeclarativeLabel](docs/DeclarativeLabel.md) @@ -1072,6 +1084,8 @@ Class | Method | HTTP request | Description - [HistogramBucket](docs/HistogramBucket.md) - [HistogramProperties](docs/HistogramProperties.md) - [IdentifierDuplications](docs/IdentifierDuplications.md) + - [InPlatform](docs/InPlatform.md) + - [InPlatformAllOf](docs/InPlatformAllOf.md) - [InlineFilterDefinition](docs/InlineFilterDefinition.md) - [InlineFilterDefinitionInline](docs/InlineFilterDefinitionInline.md) - [InlineMeasureDefinition](docs/InlineMeasureDefinition.md) @@ -1316,14 +1330,13 @@ Class | Method | HTTP request | Description - [JsonApiFilterViewPatchDocument](docs/JsonApiFilterViewPatchDocument.md) - [JsonApiIdentityProviderIn](docs/JsonApiIdentityProviderIn.md) - [JsonApiIdentityProviderInAttributes](docs/JsonApiIdentityProviderInAttributes.md) - - [JsonApiIdentityProviderInAttributesSpecification](docs/JsonApiIdentityProviderInAttributesSpecification.md) - [JsonApiIdentityProviderInDocument](docs/JsonApiIdentityProviderInDocument.md) - [JsonApiIdentityProviderOut](docs/JsonApiIdentityProviderOut.md) + - [JsonApiIdentityProviderOutAttributes](docs/JsonApiIdentityProviderOutAttributes.md) - [JsonApiIdentityProviderOutDocument](docs/JsonApiIdentityProviderOutDocument.md) - [JsonApiIdentityProviderOutList](docs/JsonApiIdentityProviderOutList.md) - [JsonApiIdentityProviderOutWithLinks](docs/JsonApiIdentityProviderOutWithLinks.md) - [JsonApiIdentityProviderPatch](docs/JsonApiIdentityProviderPatch.md) - - [JsonApiIdentityProviderPatchAttributes](docs/JsonApiIdentityProviderPatchAttributes.md) - [JsonApiIdentityProviderPatchDocument](docs/JsonApiIdentityProviderPatchDocument.md) - [JsonApiJwkIn](docs/JsonApiJwkIn.md) - [JsonApiJwkInAttributes](docs/JsonApiJwkInAttributes.md) @@ -1567,7 +1580,6 @@ Class | Method | HTTP request | Description - [NotificationChannelDestination](docs/NotificationChannelDestination.md) - [ObjectLinks](docs/ObjectLinks.md) - [ObjectLinksContainer](docs/ObjectLinksContainer.md) - - [OidcIdpSpecification](docs/OidcIdpSpecification.md) - [OrganizationPermissionAssignment](docs/OrganizationPermissionAssignment.md) - [PageMetadata](docs/PageMetadata.md) - [Paging](docs/Paging.md) @@ -1613,7 +1625,6 @@ Class | Method | HTTP request | Description - [RouteResult](docs/RouteResult.md) - [RsaSpecification](docs/RsaSpecification.md) - [RulePermission](docs/RulePermission.md) - - [SamlIdpSpecification](docs/SamlIdpSpecification.md) - [ScanRequest](docs/ScanRequest.md) - [ScanResultPdm](docs/ScanResultPdm.md) - [ScanSqlRequest](docs/ScanSqlRequest.md) diff --git a/gooddata-api-client/docs/AbsoluteDateFilterAbsoluteDateFilter.md b/gooddata-api-client/docs/AbsoluteDateFilterAbsoluteDateFilter.md index f5b7d1af6..a82af8ee5 100644 --- a/gooddata-api-client/docs/AbsoluteDateFilterAbsoluteDateFilter.md +++ b/gooddata-api-client/docs/AbsoluteDateFilterAbsoluteDateFilter.md @@ -8,6 +8,7 @@ Name | Type | Description | Notes **_from** | **str** | | **to** | **str** | | **apply_on_result** | **bool** | | [optional] +**local_identifier** | **str** | | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[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/gooddata-api-client/docs/ActionsApi.md b/gooddata-api-client/docs/ActionsApi.md index 087f6312d..ed9cb8070 100644 --- a/gooddata-api-client/docs/ActionsApi.md +++ b/gooddata-api-client/docs/ActionsApi.md @@ -6,6 +6,7 @@ Method | HTTP request | Description ------------- | ------------- | ------------- [**ai_chat**](ActionsApi.md#ai_chat) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/chat | (BETA) Chat with AI [**ai_chat_history**](ActionsApi.md#ai_chat_history) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/chatHistory | (BETA) Get Chat History +[**ai_chat_stream**](ActionsApi.md#ai_chat_stream) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/chatStream | (BETA) Chat with AI [**ai_route**](ActionsApi.md#ai_route) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/route | (BETA) Route to supported use cases based on this input query. [**ai_search**](ActionsApi.md#ai_search) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/search | (BETA) Semantic Search in Metadata [**all_platform_usage**](ActionsApi.md#all_platform_usage) | **GET** /api/v1/actions/collectUsage | Info about the platform usage. @@ -222,6 +223,91 @@ No authorization required - **Accept**: application/json +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | + +[[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) + +# **ai_chat_stream** +> [dict] ai_chat_stream(workspace_id, chat_request) + +(BETA) Chat with AI + +(BETA) Combines multiple use cases such as search, create visualizations, ... + +### Example + + +```python +import time +import gooddata_api_client +from gooddata_api_client.api import actions_api +from gooddata_api_client.model.chat_request import ChatRequest +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = gooddata_api_client.Configuration( + host = "http://localhost" +) + + +# Enter a context with an instance of the API client +with gooddata_api_client.ApiClient() as api_client: + # Create an instance of the API class + api_instance = actions_api.ActionsApi(api_client) + workspace_id = "/6bUUGjjNSwg0_bs" # str | Workspace identifier + chat_request = ChatRequest( + limit_create=3, + limit_create_context=10, + limit_search=5, + question="question_example", + relevant_score_threshold=0.4, + search_score_threshold=0.9, + thread_id_suffix="thread_id_suffix_example", + title_to_descriptor_ratio=0.7, + user_context=UserContext( + active_object=ActiveObjectIdentification( + id="id_example", + type="type_example", + workspace_id="workspace_id_example", + ), + ), + ) # ChatRequest | + + # example passing only required values which don't have defaults set + try: + # (BETA) Chat with AI + api_response = api_instance.ai_chat_stream(workspace_id, chat_request) + pprint(api_response) + except gooddata_api_client.ApiException as e: + print("Exception when calling ActionsApi->ai_chat_stream: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **workspace_id** | **str**| Workspace identifier | + **chat_request** | [**ChatRequest**](ChatRequest.md)| | + +### Return type + +**[dict]** + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: text/event-stream + + ### HTTP response details | Status code | Description | Response headers | @@ -4563,6 +4649,8 @@ with gooddata_api_client.ApiClient() as api_client: api_instance = actions_api.ActionsApi(api_client) data_source_id = "myPostgres" # str | Data source id test_request = TestRequest( + client_id="client_id_example", + client_secret="client_secret_example", parameters=[ DataSourceParameter( name="name_example", @@ -4646,6 +4734,8 @@ with gooddata_api_client.ApiClient() as api_client: # Create an instance of the API class api_instance = actions_api.ActionsApi(api_client) test_definition_request = TestDefinitionRequest( + client_id="client_id_example", + client_secret="client_secret_example", parameters=[ DataSourceParameter( name="name_example", diff --git a/gooddata-api-client/docs/ChatHistoryInteraction.md b/gooddata-api-client/docs/ChatHistoryInteraction.md index f89a82cf5..361ad2856 100644 --- a/gooddata-api-client/docs/ChatHistoryInteraction.md +++ b/gooddata-api-client/docs/ChatHistoryInteraction.md @@ -13,6 +13,7 @@ Name | Type | Description | Notes **found_objects** | [**FoundObjects**](FoundObjects.md) | | [optional] **text_response** | **str** | Text response for general questions. | [optional] **thread_id_suffix** | **str** | Chat History thread suffix appended to ID generated by backend. Enables more chat windows. | [optional] +**user_feedback** | **str** | User feedback. | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[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/gooddata-api-client/docs/ChatHistoryResult.md b/gooddata-api-client/docs/ChatHistoryResult.md index e0834787a..2d9afc5fc 100644 --- a/gooddata-api-client/docs/ChatHistoryResult.md +++ b/gooddata-api-client/docs/ChatHistoryResult.md @@ -5,6 +5,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **interactions** | [**[ChatHistoryInteraction]**](ChatHistoryInteraction.md) | List of chat history interactions. | +**thread_id** | **str** | The conversation thread ID. | **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[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/gooddata-api-client/docs/ChatResult.md b/gooddata-api-client/docs/ChatResult.md index 52cf9e5db..f999cf58d 100644 --- a/gooddata-api-client/docs/ChatResult.md +++ b/gooddata-api-client/docs/ChatResult.md @@ -4,9 +4,10 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**routing** | [**RouteResult**](RouteResult.md) | | +**chat_history_interaction_id** | **int** | Chat History interaction ID. Unique ID for each interaction. | [optional] **created_visualizations** | [**CreatedVisualizations**](CreatedVisualizations.md) | | [optional] **found_objects** | [**FoundObjects**](FoundObjects.md) | | [optional] +**routing** | [**RouteResult**](RouteResult.md) | | [optional] **text_response** | **str** | Text response for general questions. | [optional] **thread_id_suffix** | **str** | Chat History thread suffix appended to ID generated by backend. Enables more chat windows. | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] diff --git a/gooddata-api-client/docs/ComparisonMeasureValueFilterComparisonMeasureValueFilter.md b/gooddata-api-client/docs/ComparisonMeasureValueFilterComparisonMeasureValueFilter.md index 13ab39595..9a1fa0f96 100644 --- a/gooddata-api-client/docs/ComparisonMeasureValueFilterComparisonMeasureValueFilter.md +++ b/gooddata-api-client/docs/ComparisonMeasureValueFilterComparisonMeasureValueFilter.md @@ -8,6 +8,7 @@ Name | Type | Description | Notes **operator** | **str** | | **value** | **float** | | **apply_on_result** | **bool** | | [optional] +**local_identifier** | **str** | | [optional] **treat_null_values_as** | **float** | | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] diff --git a/gooddata-api-client/docs/DataSourceDeclarativeAPIsApi.md b/gooddata-api-client/docs/DataSourceDeclarativeAPIsApi.md index 5a715bcb8..558ee3b0d 100644 --- a/gooddata-api-client/docs/DataSourceDeclarativeAPIsApi.md +++ b/gooddata-api-client/docs/DataSourceDeclarativeAPIsApi.md @@ -102,6 +102,8 @@ with gooddata_api_client.ApiClient() as api_client: data_sources=[ DeclarativeDataSource( cache_strategy="ALWAYS", + client_id="client1234", + client_secret="client_secret_example", decoded_parameters=[ Parameter( name="name_example", diff --git a/gooddata-api-client/docs/DataSourceEntityAPIsApi.md b/gooddata-api-client/docs/DataSourceEntityAPIsApi.md index ddcfd68c2..0e9529c91 100644 --- a/gooddata-api-client/docs/DataSourceEntityAPIsApi.md +++ b/gooddata-api-client/docs/DataSourceEntityAPIsApi.md @@ -46,6 +46,8 @@ with gooddata_api_client.ApiClient() as api_client: data=JsonApiDataSourceIn( attributes=JsonApiDataSourceInAttributes( cache_strategy="ALWAYS", + client_id="client_id_example", + client_secret="client_secret_example", name="name_example", parameters=[ JsonApiDataSourceInAttributesParametersInner( @@ -546,6 +548,8 @@ with gooddata_api_client.ApiClient() as api_client: data=JsonApiDataSourcePatch( attributes=JsonApiDataSourcePatchAttributes( cache_strategy="ALWAYS", + client_id="client_id_example", + client_secret="client_secret_example", name="name_example", parameters=[ JsonApiDataSourceInAttributesParametersInner( @@ -650,6 +654,8 @@ with gooddata_api_client.ApiClient() as api_client: data=JsonApiDataSourceIn( attributes=JsonApiDataSourceInAttributes( cache_strategy="ALWAYS", + client_id="client_id_example", + client_secret="client_secret_example", name="name_example", parameters=[ JsonApiDataSourceInAttributesParametersInner( diff --git a/gooddata-api-client/docs/DateAbsoluteFilter.md b/gooddata-api-client/docs/DateAbsoluteFilter.md index eaadaf3d0..1bf764f33 100644 --- a/gooddata-api-client/docs/DateAbsoluteFilter.md +++ b/gooddata-api-client/docs/DateAbsoluteFilter.md @@ -4,9 +4,9 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- +**_from** | **str** | | +**to** | **str** | | **using** | **str** | | -**_from** | **str** | | [optional] -**to** | **str** | | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[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/gooddata-api-client/docs/DeclarativeDataSource.md b/gooddata-api-client/docs/DeclarativeDataSource.md index 8066d07d3..88e3b9d0c 100644 --- a/gooddata-api-client/docs/DeclarativeDataSource.md +++ b/gooddata-api-client/docs/DeclarativeDataSource.md @@ -10,6 +10,8 @@ Name | Type | Description | Notes **schema** | **str** | A scheme/database with the data. | **type** | **str** | Type of database. | **cache_strategy** | **str** | Determines how the results coming from a particular datasource should be cached. - ALWAYS: The results from the datasource should be cached normally (the default). - NEVER: The results from the datasource should never be cached. | [optional] +**client_id** | **str** | Id of client with permission to connect to the data source. | [optional] +**client_secret** | **str** | The client secret to use to connect to the database providing the data for the data source. | [optional] **decoded_parameters** | [**[Parameter]**](Parameter.md) | | [optional] **parameters** | [**[Parameter]**](Parameter.md) | | [optional] **password** | **str** | Password for the data-source user, property is never returned back. | [optional] diff --git a/gooddata-api-client/docs/DeclarativeIdentityProvider.md b/gooddata-api-client/docs/DeclarativeIdentityProvider.md new file mode 100644 index 000000000..9f9bc5a33 --- /dev/null +++ b/gooddata-api-client/docs/DeclarativeIdentityProvider.md @@ -0,0 +1,20 @@ +# DeclarativeIdentityProvider + +Notification channels. + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | FilterView object ID. | +**custom_claim_mapping** | **{str: (str,)}** | Map of custom claim overrides. To be used when your Idp does not provide default claims (sub, email, name, given_name, family_name, urn.gooddata.user_groups [optional]). Define the key pair for the claim you wish to override, where the key is the default name of the attribute and the value is your custom name for the given attribute. | [optional] +**identifiers** | **[str]** | List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory. | [optional] +**oauth_client_id** | **str** | The OAuth client id of your OIDC provider. This field is mandatory for OIDC IdP. | [optional] +**oauth_client_secret** | **str** | The OAuth client secret of your OIDC provider. This field is mandatory for OIDC IdP. | [optional] +**oauth_issuer_id** | **str** | Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider. | [optional] +**oauth_issuer_location** | **str** | The location of your OIDC provider. This field is mandatory for OIDC IdP. | [optional] +**saml_metadata** | **str** | Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider. This field is mandatory for SAML IdP. | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] + +[[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/gooddata-api-client/docs/DeclarativeNotificationChannelDestination.md b/gooddata-api-client/docs/DeclarativeNotificationChannelDestination.md index 6d9d8c598..d80954de8 100644 --- a/gooddata-api-client/docs/DeclarativeNotificationChannelDestination.md +++ b/gooddata-api-client/docs/DeclarativeNotificationChannelDestination.md @@ -4,7 +4,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**from_email** | **str** | E-mail address to send notifications from. | [optional] if omitted the server will use the default value of "no-reply@gooddata.com" +**from_email** | **str** | E-mail address to send notifications from. | [optional] if omitted the server will use the default value of no-reply@gooddata.com **from_email_name** | **str** | An optional e-mail name to send notifications from. | [optional] if omitted the server will use the default value of "GoodData" **host** | **str** | The SMTP server address. | [optional] **password** | **str** | The SMTP server password. | [optional] diff --git a/gooddata-api-client/docs/DeclarativeOrganization.md b/gooddata-api-client/docs/DeclarativeOrganization.md index 24a685672..e8fd27f9f 100644 --- a/gooddata-api-client/docs/DeclarativeOrganization.md +++ b/gooddata-api-client/docs/DeclarativeOrganization.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **organization** | [**DeclarativeOrganizationInfo**](DeclarativeOrganizationInfo.md) | | **data_sources** | [**[DeclarativeDataSource]**](DeclarativeDataSource.md) | | [optional] +**identity_providers** | [**[DeclarativeIdentityProvider]**](DeclarativeIdentityProvider.md) | | [optional] **jwks** | [**[DeclarativeJwk]**](DeclarativeJwk.md) | | [optional] **notification_channels** | [**[DeclarativeNotificationChannel]**](DeclarativeNotificationChannel.md) | | [optional] **user_groups** | [**[DeclarativeUserGroup]**](DeclarativeUserGroup.md) | | [optional] diff --git a/gooddata-api-client/docs/DeclarativeOrganizationInfo.md b/gooddata-api-client/docs/DeclarativeOrganizationInfo.md index f5f1ecc44..8408cc1a6 100644 --- a/gooddata-api-client/docs/DeclarativeOrganizationInfo.md +++ b/gooddata-api-client/docs/DeclarativeOrganizationInfo.md @@ -9,6 +9,7 @@ Name | Type | Description | Notes **id** | **str** | Identifier of the organization. | **name** | **str** | Formal name of the organization. | **permissions** | [**[DeclarativeOrganizationPermission]**](DeclarativeOrganizationPermission.md) | | +**allowed_origins** | **[str]** | | [optional] **color_palettes** | [**[DeclarativeColorPalette]**](DeclarativeColorPalette.md) | A list of color palettes. | [optional] **csp_directives** | [**[DeclarativeCspDirective]**](DeclarativeCspDirective.md) | A list of CSP directives. | [optional] **early_access** | **str** | Early access defined on level Organization | [optional] diff --git a/gooddata-api-client/docs/DefaultSmtp.md b/gooddata-api-client/docs/DefaultSmtp.md index 903320802..336642add 100644 --- a/gooddata-api-client/docs/DefaultSmtp.md +++ b/gooddata-api-client/docs/DefaultSmtp.md @@ -6,7 +6,7 @@ Default SMTP destination for notifications. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **type** | **str** | The destination type. | defaults to "DEFAULT_SMTP" -**from_email** | **str** | E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead. | [optional] if omitted the server will use the default value of "no-reply@gooddata.com" +**from_email** | **str** | E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead. | [optional] if omitted the server will use the default value of no-reply@gooddata.com **from_email_name** | **str** | An optional e-mail name to send notifications from. Currently this does not have any effect. E-mail from name 'GoodData' is used instead. | [optional] if omitted the server will use the default value of "GoodData" **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] diff --git a/gooddata-api-client/docs/DefaultSmtpAllOf.md b/gooddata-api-client/docs/DefaultSmtpAllOf.md index 126995760..3eb86fe77 100644 --- a/gooddata-api-client/docs/DefaultSmtpAllOf.md +++ b/gooddata-api-client/docs/DefaultSmtpAllOf.md @@ -4,7 +4,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**from_email** | **str** | E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead. | [optional] if omitted the server will use the default value of "no-reply@gooddata.com" +**from_email** | **str** | E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead. | [optional] if omitted the server will use the default value of no-reply@gooddata.com **from_email_name** | **str** | An optional e-mail name to send notifications from. Currently this does not have any effect. E-mail from name 'GoodData' is used instead. | [optional] if omitted the server will use the default value of "GoodData" **type** | **str** | The destination type. | [optional] if omitted the server will use the default value of "DEFAULT_SMTP" **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] diff --git a/gooddata-api-client/docs/EntitiesApi.md b/gooddata-api-client/docs/EntitiesApi.md index 0706289ff..2d5226828 100644 --- a/gooddata-api-client/docs/EntitiesApi.md +++ b/gooddata-api-client/docs/EntitiesApi.md @@ -1057,6 +1057,8 @@ with gooddata_api_client.ApiClient() as api_client: data=JsonApiDataSourceIn( attributes=JsonApiDataSourceInAttributes( cache_strategy="ALWAYS", + client_id="client_id_example", + client_secret="client_secret_example", name="name_example", parameters=[ JsonApiDataSourceInAttributesParametersInner( @@ -1468,9 +1470,15 @@ with gooddata_api_client.ApiClient() as api_client: json_api_identity_provider_in_document = JsonApiIdentityProviderInDocument( data=JsonApiIdentityProviderIn( attributes=JsonApiIdentityProviderInAttributes( + custom_claim_mapping={ + "key": "key_example", + }, identifiers=["gooddata.com"], - specification=JsonApiIdentityProviderInAttributesSpecification(), - type="SAML", + oauth_client_id="oauth_client_id_example", + oauth_client_secret="oauth_client_secret_example", + oauth_issuer_id="myOidcProvider", + oauth_issuer_location="oauth_issuer_location_example", + saml_metadata="saml_metadata_example", ), id="id1", type="identityProvider", @@ -3817,7 +3825,7 @@ with gooddata_api_client.ApiClient() as api_client: # Create an instance of the API class api_instance = entities_api.EntitiesApi(api_client) id = "/6bUUGjjNSwg0_bs" # str | - filter = "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) + filter = "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) # example passing only required values which don't have defaults set try: @@ -6541,7 +6549,7 @@ configuration = gooddata_api_client.Configuration( with gooddata_api_client.ApiClient() as api_client: # Create an instance of the API class api_instance = entities_api.EntitiesApi(api_client) - filter = "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) + filter = "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) page = 0 # int | Zero-based page index (0..N) (optional) if omitted the server will use the default value of 0 size = 20 # int | The size of the page to be returned (optional) if omitted the server will use the default value of 20 sort = [ @@ -9732,7 +9740,7 @@ with gooddata_api_client.ApiClient() as api_client: # Create an instance of the API class api_instance = entities_api.EntitiesApi(api_client) id = "/6bUUGjjNSwg0_bs" # str | - filter = "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) + filter = "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) # example passing only required values which don't have defaults set try: @@ -12239,6 +12247,8 @@ with gooddata_api_client.ApiClient() as api_client: data=JsonApiDataSourcePatch( attributes=JsonApiDataSourcePatchAttributes( cache_strategy="ALWAYS", + client_id="client_id_example", + client_secret="client_secret_example", name="name_example", parameters=[ JsonApiDataSourceInAttributesParametersInner( @@ -12653,16 +12663,22 @@ with gooddata_api_client.ApiClient() as api_client: id = "/6bUUGjjNSwg0_bs" # str | json_api_identity_provider_patch_document = JsonApiIdentityProviderPatchDocument( data=JsonApiIdentityProviderPatch( - attributes=JsonApiIdentityProviderPatchAttributes( + attributes=JsonApiIdentityProviderInAttributes( + custom_claim_mapping={ + "key": "key_example", + }, identifiers=["gooddata.com"], - specification=JsonApiIdentityProviderInAttributesSpecification(), - type="SAML", + oauth_client_id="oauth_client_id_example", + oauth_client_secret="oauth_client_secret_example", + oauth_issuer_id="myOidcProvider", + oauth_issuer_location="oauth_issuer_location_example", + saml_metadata="saml_metadata_example", ), id="id1", type="identityProvider", ), ) # JsonApiIdentityProviderPatchDocument | - filter = "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) + filter = "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) # example passing only required values which don't have defaults set try: @@ -15101,6 +15117,8 @@ with gooddata_api_client.ApiClient() as api_client: data=JsonApiDataSourceIn( attributes=JsonApiDataSourceInAttributes( cache_strategy="ALWAYS", + client_id="client_id_example", + client_secret="client_secret_example", name="name_example", parameters=[ JsonApiDataSourceInAttributesParametersInner( @@ -15516,15 +15534,21 @@ with gooddata_api_client.ApiClient() as api_client: json_api_identity_provider_in_document = JsonApiIdentityProviderInDocument( data=JsonApiIdentityProviderIn( attributes=JsonApiIdentityProviderInAttributes( + custom_claim_mapping={ + "key": "key_example", + }, identifiers=["gooddata.com"], - specification=JsonApiIdentityProviderInAttributesSpecification(), - type="SAML", + oauth_client_id="oauth_client_id_example", + oauth_client_secret="oauth_client_secret_example", + oauth_issuer_id="myOidcProvider", + oauth_issuer_location="oauth_issuer_location_example", + saml_metadata="saml_metadata_example", ), id="id1", type="identityProvider", ), ) # JsonApiIdentityProviderInDocument | - filter = "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) + filter = "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) # example passing only required values which don't have defaults set try: diff --git a/gooddata-api-client/docs/IdentityProvidersApi.md b/gooddata-api-client/docs/IdentityProvidersApi.md index 1605ed275..85e0ef8a6 100644 --- a/gooddata-api-client/docs/IdentityProvidersApi.md +++ b/gooddata-api-client/docs/IdentityProvidersApi.md @@ -8,7 +8,9 @@ Method | HTTP request | Description [**delete_entity_identity_providers**](IdentityProvidersApi.md#delete_entity_identity_providers) | **DELETE** /api/v1/entities/identityProviders/{id} | Delete Identity Provider [**get_all_entities_identity_providers**](IdentityProvidersApi.md#get_all_entities_identity_providers) | **GET** /api/v1/entities/identityProviders | Get all Identity Providers [**get_entity_identity_providers**](IdentityProvidersApi.md#get_entity_identity_providers) | **GET** /api/v1/entities/identityProviders/{id} | Get Identity Provider +[**get_identity_providers_layout**](IdentityProvidersApi.md#get_identity_providers_layout) | **GET** /api/v1/layout/identityProviders | Get all identity providers layout [**patch_entity_identity_providers**](IdentityProvidersApi.md#patch_entity_identity_providers) | **PATCH** /api/v1/entities/identityProviders/{id} | Patch Identity Provider +[**set_identity_providers**](IdentityProvidersApi.md#set_identity_providers) | **PUT** /api/v1/layout/identityProviders | Set all identity providers [**update_entity_identity_providers**](IdentityProvidersApi.md#update_entity_identity_providers) | **PUT** /api/v1/entities/identityProviders/{id} | Put Identity Provider @@ -41,9 +43,15 @@ with gooddata_api_client.ApiClient() as api_client: json_api_identity_provider_in_document = JsonApiIdentityProviderInDocument( data=JsonApiIdentityProviderIn( attributes=JsonApiIdentityProviderInAttributes( + custom_claim_mapping={ + "key": "key_example", + }, identifiers=["gooddata.com"], - specification=JsonApiIdentityProviderInAttributesSpecification(), - type="SAML", + oauth_client_id="oauth_client_id_example", + oauth_client_secret="oauth_client_secret_example", + oauth_issuer_id="myOidcProvider", + oauth_issuer_location="oauth_issuer_location_example", + saml_metadata="saml_metadata_example", ), id="id1", type="identityProvider", @@ -113,7 +121,7 @@ with gooddata_api_client.ApiClient() as api_client: # Create an instance of the API class api_instance = identity_providers_api.IdentityProvidersApi(api_client) id = "/6bUUGjjNSwg0_bs" # str | - filter = "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) + filter = "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) # example passing only required values which don't have defaults set try: @@ -186,7 +194,7 @@ configuration = gooddata_api_client.Configuration( with gooddata_api_client.ApiClient() as api_client: # Create an instance of the API class api_instance = identity_providers_api.IdentityProvidersApi(api_client) - filter = "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) + filter = "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) page = 0 # int | Zero-based page index (0..N) (optional) if omitted the server will use the default value of 0 size = 20 # int | The size of the page to be returned (optional) if omitted the server will use the default value of 20 sort = [ @@ -265,7 +273,7 @@ with gooddata_api_client.ApiClient() as api_client: # Create an instance of the API class api_instance = identity_providers_api.IdentityProvidersApi(api_client) id = "/6bUUGjjNSwg0_bs" # str | - filter = "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) + filter = "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) # example passing only required values which don't have defaults set try: @@ -315,6 +323,69 @@ No authorization required [[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_identity_providers_layout** +> [DeclarativeIdentityProvider] get_identity_providers_layout() + +Get all identity providers layout + +Gets complete layout of identity providers. + +### Example + + +```python +import time +import gooddata_api_client +from gooddata_api_client.api import identity_providers_api +from gooddata_api_client.model.declarative_identity_provider import DeclarativeIdentityProvider +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = gooddata_api_client.Configuration( + host = "http://localhost" +) + + +# Enter a context with an instance of the API client +with gooddata_api_client.ApiClient() as api_client: + # Create an instance of the API class + api_instance = identity_providers_api.IdentityProvidersApi(api_client) + + # example, this endpoint has no required or optional parameters + try: + # Get all identity providers layout + api_response = api_instance.get_identity_providers_layout() + pprint(api_response) + except gooddata_api_client.ApiException as e: + print("Exception when calling IdentityProvidersApi->get_identity_providers_layout: %s\n" % e) +``` + + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**[DeclarativeIdentityProvider]**](DeclarativeIdentityProvider.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Retrieved layout of all identity providers. | - | + +[[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) + # **patch_entity_identity_providers** > JsonApiIdentityProviderOutDocument patch_entity_identity_providers(id, json_api_identity_provider_patch_document) @@ -344,16 +415,22 @@ with gooddata_api_client.ApiClient() as api_client: id = "/6bUUGjjNSwg0_bs" # str | json_api_identity_provider_patch_document = JsonApiIdentityProviderPatchDocument( data=JsonApiIdentityProviderPatch( - attributes=JsonApiIdentityProviderPatchAttributes( + attributes=JsonApiIdentityProviderInAttributes( + custom_claim_mapping={ + "key": "key_example", + }, identifiers=["gooddata.com"], - specification=JsonApiIdentityProviderInAttributesSpecification(), - type="SAML", + oauth_client_id="oauth_client_id_example", + oauth_client_secret="oauth_client_secret_example", + oauth_issuer_id="myOidcProvider", + oauth_issuer_location="oauth_issuer_location_example", + saml_metadata="saml_metadata_example", ), id="id1", type="identityProvider", ), ) # JsonApiIdentityProviderPatchDocument | - filter = "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) + filter = "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) # example passing only required values which don't have defaults set try: @@ -404,6 +481,85 @@ No authorization required [[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) +# **set_identity_providers** +> set_identity_providers(declarative_identity_provider) + +Set all identity providers + +Sets identity providers in organization. + +### Example + + +```python +import time +import gooddata_api_client +from gooddata_api_client.api import identity_providers_api +from gooddata_api_client.model.declarative_identity_provider import DeclarativeIdentityProvider +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = gooddata_api_client.Configuration( + host = "http://localhost" +) + + +# Enter a context with an instance of the API client +with gooddata_api_client.ApiClient() as api_client: + # Create an instance of the API class + api_instance = identity_providers_api.IdentityProvidersApi(api_client) + declarative_identity_provider = [ + DeclarativeIdentityProvider( + custom_claim_mapping={ + "key": "key_example", + }, + id="filterView-1", + identifiers=["gooddata.com"], + oauth_client_id="oauth_client_id_example", + oauth_client_secret="oauth_client_secret_example", + oauth_issuer_id="myOidcProvider", + oauth_issuer_location="oauth_issuer_location_example", + saml_metadata="saml_metadata_example", + ), + ] # [DeclarativeIdentityProvider] | + + # example passing only required values which don't have defaults set + try: + # Set all identity providers + api_instance.set_identity_providers(declarative_identity_provider) + except gooddata_api_client.ApiException as e: + print("Exception when calling IdentityProvidersApi->set_identity_providers: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **declarative_identity_provider** | [**[DeclarativeIdentityProvider]**](DeclarativeIdentityProvider.md)| | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: Not defined + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | All identity providers set. | - | + +[[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_entity_identity_providers** > JsonApiIdentityProviderOutDocument update_entity_identity_providers(id, json_api_identity_provider_in_document) @@ -434,15 +590,21 @@ with gooddata_api_client.ApiClient() as api_client: json_api_identity_provider_in_document = JsonApiIdentityProviderInDocument( data=JsonApiIdentityProviderIn( attributes=JsonApiIdentityProviderInAttributes( + custom_claim_mapping={ + "key": "key_example", + }, identifiers=["gooddata.com"], - specification=JsonApiIdentityProviderInAttributesSpecification(), - type="SAML", + oauth_client_id="oauth_client_id_example", + oauth_client_secret="oauth_client_secret_example", + oauth_issuer_id="myOidcProvider", + oauth_issuer_location="oauth_issuer_location_example", + saml_metadata="saml_metadata_example", ), id="id1", type="identityProvider", ), ) # JsonApiIdentityProviderInDocument | - filter = "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) + filter = "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) # example passing only required values which don't have defaults set try: diff --git a/gooddata-api-client/docs/SamlIdpSpecification.md b/gooddata-api-client/docs/InPlatform.md similarity index 57% rename from gooddata-api-client/docs/SamlIdpSpecification.md rename to gooddata-api-client/docs/InPlatform.md index 4322968d9..8c505bc23 100644 --- a/gooddata-api-client/docs/SamlIdpSpecification.md +++ b/gooddata-api-client/docs/InPlatform.md @@ -1,11 +1,11 @@ -# SamlIdpSpecification +# InPlatform -Specification of a SAML identity provider +In-platform destination for notifications. ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**metadata** | **str** | Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider. | +**type** | **str** | The destination type. | defaults to "IN_PLATFORM" **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[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/gooddata-api-client/docs/InPlatformAllOf.md b/gooddata-api-client/docs/InPlatformAllOf.md new file mode 100644 index 000000000..c92d7a952 --- /dev/null +++ b/gooddata-api-client/docs/InPlatformAllOf.md @@ -0,0 +1,12 @@ +# InPlatformAllOf + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | **str** | The destination type. | [optional] if omitted the server will use the default value of "IN_PLATFORM" +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] + +[[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/gooddata-api-client/docs/InlineFilterDefinitionInline.md b/gooddata-api-client/docs/InlineFilterDefinitionInline.md index 15c904619..e1c212a9b 100644 --- a/gooddata-api-client/docs/InlineFilterDefinitionInline.md +++ b/gooddata-api-client/docs/InlineFilterDefinitionInline.md @@ -6,6 +6,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **filter** | **str** | | **apply_on_result** | **bool** | | [optional] +**local_identifier** | **str** | | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[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/gooddata-api-client/docs/JsonApiDataSourceInAttributes.md b/gooddata-api-client/docs/JsonApiDataSourceInAttributes.md index 651f35137..e93c33f5c 100644 --- a/gooddata-api-client/docs/JsonApiDataSourceInAttributes.md +++ b/gooddata-api-client/docs/JsonApiDataSourceInAttributes.md @@ -8,11 +8,13 @@ Name | Type | Description | Notes **schema** | **str** | The schema to use as the root of the data for the data source. | **type** | **str** | Type of the database providing the data for the data source. | **cache_strategy** | **str, none_type** | Determines how the results coming from a particular datasource should be cached. | [optional] +**client_id** | **str, none_type** | The client id to use to connect to the database providing the data for the data source (for example a Databricks Service Account). | [optional] +**client_secret** | **str, none_type** | The client secret to use to connect to the database providing the data for the data source (for example a Databricks Service Account). | [optional] **parameters** | [**[JsonApiDataSourceInAttributesParametersInner], none_type**](JsonApiDataSourceInAttributesParametersInner.md) | Additional parameters to be used when connecting to the database providing the data for the data source. | [optional] **password** | **str, none_type** | The password to use to connect to the database providing the data for the data source. | [optional] **private_key** | **str, none_type** | The private key to use to connect to the database providing the data for the data source. | [optional] **private_key_passphrase** | **str, none_type** | The passphrase used to encrypt the private key. | [optional] -**token** | **str, none_type** | The token to use to connect to the database providing the data for the data source (for example a BigQuery Sevice Acount). | [optional] +**token** | **str, none_type** | The token to use to connect to the database providing the data for the data source (for example a BigQuery Service Account). | [optional] **url** | **str, none_type** | The URL of the database providing the data for the data source. | [optional] **username** | **str, none_type** | The username to use to connect to the database providing the data for the data source. | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] diff --git a/gooddata-api-client/docs/JsonApiDataSourceOutAttributes.md b/gooddata-api-client/docs/JsonApiDataSourceOutAttributes.md index c395323be..9c3cc73cb 100644 --- a/gooddata-api-client/docs/JsonApiDataSourceOutAttributes.md +++ b/gooddata-api-client/docs/JsonApiDataSourceOutAttributes.md @@ -9,6 +9,7 @@ Name | Type | Description | Notes **type** | **str** | Type of the database providing the data for the data source. | **authentication_type** | **str, none_type** | Type of authentication used to connect to the database. | [optional] **cache_strategy** | **str, none_type** | Determines how the results coming from a particular datasource should be cached. | [optional] +**client_id** | **str, none_type** | The client id to use to connect to the database providing the data for the data source (for example a Databricks Service Account). | [optional] **decoded_parameters** | [**[JsonApiDataSourceInAttributesParametersInner], none_type**](JsonApiDataSourceInAttributesParametersInner.md) | Decoded parameters to be used when connecting to the database providing the data for the data source. | [optional] **parameters** | [**[JsonApiDataSourceInAttributesParametersInner], none_type**](JsonApiDataSourceInAttributesParametersInner.md) | Additional parameters to be used when connecting to the database providing the data for the data source. | [optional] **url** | **str, none_type** | The URL of the database providing the data for the data source. | [optional] diff --git a/gooddata-api-client/docs/JsonApiDataSourcePatchAttributes.md b/gooddata-api-client/docs/JsonApiDataSourcePatchAttributes.md index f4607a97b..0ea1eb5f7 100644 --- a/gooddata-api-client/docs/JsonApiDataSourcePatchAttributes.md +++ b/gooddata-api-client/docs/JsonApiDataSourcePatchAttributes.md @@ -5,13 +5,15 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **cache_strategy** | **str, none_type** | Determines how the results coming from a particular datasource should be cached. | [optional] +**client_id** | **str, none_type** | The client id to use to connect to the database providing the data for the data source (for example a Databricks Service Account). | [optional] +**client_secret** | **str, none_type** | The client secret to use to connect to the database providing the data for the data source (for example a Databricks Service Account). | [optional] **name** | **str** | User-facing name of the data source. | [optional] **parameters** | [**[JsonApiDataSourceInAttributesParametersInner], none_type**](JsonApiDataSourceInAttributesParametersInner.md) | Additional parameters to be used when connecting to the database providing the data for the data source. | [optional] **password** | **str, none_type** | The password to use to connect to the database providing the data for the data source. | [optional] **private_key** | **str, none_type** | The private key to use to connect to the database providing the data for the data source. | [optional] **private_key_passphrase** | **str, none_type** | The passphrase used to encrypt the private key. | [optional] **schema** | **str** | The schema to use as the root of the data for the data source. | [optional] -**token** | **str, none_type** | The token to use to connect to the database providing the data for the data source (for example a BigQuery Sevice Acount). | [optional] +**token** | **str, none_type** | The token to use to connect to the database providing the data for the data source (for example a BigQuery Service Account). | [optional] **type** | **str** | Type of the database providing the data for the data source. | [optional] **url** | **str, none_type** | The URL of the database providing the data for the data source. | [optional] **username** | **str, none_type** | The username to use to connect to the database providing the data for the data source. | [optional] diff --git a/gooddata-api-client/docs/JsonApiIdentityProviderIn.md b/gooddata-api-client/docs/JsonApiIdentityProviderIn.md index bfe50f746..93a68e92c 100644 --- a/gooddata-api-client/docs/JsonApiIdentityProviderIn.md +++ b/gooddata-api-client/docs/JsonApiIdentityProviderIn.md @@ -5,9 +5,9 @@ JSON:API representation of identityProvider entity. ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**attributes** | [**JsonApiIdentityProviderInAttributes**](JsonApiIdentityProviderInAttributes.md) | | **id** | **str** | API identifier of an object | **type** | **str** | Object type | defaults to "identityProvider" +**attributes** | [**JsonApiIdentityProviderInAttributes**](JsonApiIdentityProviderInAttributes.md) | | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[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/gooddata-api-client/docs/JsonApiIdentityProviderInAttributes.md b/gooddata-api-client/docs/JsonApiIdentityProviderInAttributes.md index 2df531e4c..a76f10fa6 100644 --- a/gooddata-api-client/docs/JsonApiIdentityProviderInAttributes.md +++ b/gooddata-api-client/docs/JsonApiIdentityProviderInAttributes.md @@ -4,9 +4,13 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**specification** | [**JsonApiIdentityProviderInAttributesSpecification**](JsonApiIdentityProviderInAttributesSpecification.md) | | -**type** | **str** | Type of the identity provider. | +**custom_claim_mapping** | **{str: (str,)}** | Map of custom claim overrides. To be used when your Idp does not provide default claims (sub, email, name, given_name, family_name, urn.gooddata.user_groups [optional]). Define the key pair for the claim you wish to override, where the key is the default name of the attribute and the value is your custom name for the given attribute. | [optional] **identifiers** | **[str]** | List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory. | [optional] +**oauth_client_id** | **str** | The OAuth client id of your OIDC provider. This field is mandatory for OIDC IdP. | [optional] +**oauth_client_secret** | **str** | The OAuth client secret of your OIDC provider. This field is mandatory for OIDC IdP. | [optional] +**oauth_issuer_id** | **str** | Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider. | [optional] +**oauth_issuer_location** | **str** | The location of your OIDC provider. This field is mandatory for OIDC IdP. | [optional] +**saml_metadata** | **str** | Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider. This field is mandatory for SAML IdP. | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[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/gooddata-api-client/docs/JsonApiIdentityProviderInAttributesSpecification.md b/gooddata-api-client/docs/JsonApiIdentityProviderInAttributesSpecification.md deleted file mode 100644 index d9e23b7d5..000000000 --- a/gooddata-api-client/docs/JsonApiIdentityProviderInAttributesSpecification.md +++ /dev/null @@ -1,18 +0,0 @@ -# JsonApiIdentityProviderInAttributesSpecification - -Specification of the identity provider. - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**metadata** | **str** | Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider. | [optional] -**oauth_client_id** | **str** | | [optional] -**oauth_client_secret** | **str** | | [optional] -**oauth_issuer_id** | **str** | Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider. | [optional] -**oauth_issuer_location** | **str** | | [optional] -**oauth_subject_id_claim** | **str** | Any string identifying the claim in ID token, that should be used for user identification. The default value is 'sub'. | [optional] -**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] - -[[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/gooddata-api-client/docs/JsonApiIdentityProviderOut.md b/gooddata-api-client/docs/JsonApiIdentityProviderOut.md index 0898e9ef9..f473f8b7a 100644 --- a/gooddata-api-client/docs/JsonApiIdentityProviderOut.md +++ b/gooddata-api-client/docs/JsonApiIdentityProviderOut.md @@ -5,9 +5,9 @@ JSON:API representation of identityProvider entity. ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**attributes** | [**JsonApiIdentityProviderInAttributes**](JsonApiIdentityProviderInAttributes.md) | | **id** | **str** | API identifier of an object | **type** | **str** | Object type | defaults to "identityProvider" +**attributes** | [**JsonApiIdentityProviderOutAttributes**](JsonApiIdentityProviderOutAttributes.md) | | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[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/gooddata-api-client/docs/JsonApiIdentityProviderOutAttributes.md b/gooddata-api-client/docs/JsonApiIdentityProviderOutAttributes.md new file mode 100644 index 000000000..3c9eb0b14 --- /dev/null +++ b/gooddata-api-client/docs/JsonApiIdentityProviderOutAttributes.md @@ -0,0 +1,16 @@ +# JsonApiIdentityProviderOutAttributes + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**custom_claim_mapping** | **{str: (str,)}** | Map of custom claim overrides. To be used when your Idp does not provide default claims (sub, email, name, given_name, family_name, urn.gooddata.user_groups [optional]). Define the key pair for the claim you wish to override, where the key is the default name of the attribute and the value is your custom name for the given attribute. | [optional] +**identifiers** | **[str]** | List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory. | [optional] +**oauth_client_id** | **str** | The OAuth client id of your OIDC provider. This field is mandatory for OIDC IdP. | [optional] +**oauth_issuer_id** | **str** | Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider. | [optional] +**oauth_issuer_location** | **str** | The location of your OIDC provider. This field is mandatory for OIDC IdP. | [optional] +**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] + +[[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/gooddata-api-client/docs/JsonApiIdentityProviderOutWithLinks.md b/gooddata-api-client/docs/JsonApiIdentityProviderOutWithLinks.md index ffb7f286b..8b0d1468c 100644 --- a/gooddata-api-client/docs/JsonApiIdentityProviderOutWithLinks.md +++ b/gooddata-api-client/docs/JsonApiIdentityProviderOutWithLinks.md @@ -4,9 +4,9 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**attributes** | [**JsonApiIdentityProviderInAttributes**](JsonApiIdentityProviderInAttributes.md) | | **id** | **str** | API identifier of an object | **type** | **str** | Object type | defaults to "identityProvider" +**attributes** | [**JsonApiIdentityProviderOutAttributes**](JsonApiIdentityProviderOutAttributes.md) | | [optional] **links** | [**ObjectLinks**](ObjectLinks.md) | | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] diff --git a/gooddata-api-client/docs/JsonApiIdentityProviderPatch.md b/gooddata-api-client/docs/JsonApiIdentityProviderPatch.md index b4d1f99b5..eb78ac3da 100644 --- a/gooddata-api-client/docs/JsonApiIdentityProviderPatch.md +++ b/gooddata-api-client/docs/JsonApiIdentityProviderPatch.md @@ -5,9 +5,9 @@ JSON:API representation of patching identityProvider entity. ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**attributes** | [**JsonApiIdentityProviderPatchAttributes**](JsonApiIdentityProviderPatchAttributes.md) | | **id** | **str** | API identifier of an object | **type** | **str** | Object type | defaults to "identityProvider" +**attributes** | [**JsonApiIdentityProviderInAttributes**](JsonApiIdentityProviderInAttributes.md) | | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[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/gooddata-api-client/docs/JsonApiIdentityProviderPatchAttributes.md b/gooddata-api-client/docs/JsonApiIdentityProviderPatchAttributes.md deleted file mode 100644 index f03937e4d..000000000 --- a/gooddata-api-client/docs/JsonApiIdentityProviderPatchAttributes.md +++ /dev/null @@ -1,14 +0,0 @@ -# JsonApiIdentityProviderPatchAttributes - - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**identifiers** | **[str]** | List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory. | [optional] -**specification** | [**JsonApiIdentityProviderInAttributesSpecification**](JsonApiIdentityProviderInAttributesSpecification.md) | | [optional] -**type** | **str** | Type of the identity provider. | [optional] -**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] - -[[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/gooddata-api-client/docs/JsonApiNotificationChannelInAttributesDestination.md b/gooddata-api-client/docs/JsonApiNotificationChannelInAttributesDestination.md index 833abd72a..a80927804 100644 --- a/gooddata-api-client/docs/JsonApiNotificationChannelInAttributesDestination.md +++ b/gooddata-api-client/docs/JsonApiNotificationChannelInAttributesDestination.md @@ -5,7 +5,7 @@ The destination where the notifications are to be sent. ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**from_email** | **str** | E-mail address to send notifications from. | [optional] if omitted the server will use the default value of "no-reply@gooddata.com" +**from_email** | **str** | E-mail address to send notifications from. | [optional] if omitted the server will use the default value of no-reply@gooddata.com **from_email_name** | **str** | An optional e-mail name to send notifications from. | [optional] if omitted the server will use the default value of "GoodData" **host** | **str** | The SMTP server address. | [optional] **password** | **str** | The SMTP server password. | [optional] diff --git a/gooddata-api-client/docs/LayoutApi.md b/gooddata-api-client/docs/LayoutApi.md index 779ad20d0..025d91095 100644 --- a/gooddata-api-client/docs/LayoutApi.md +++ b/gooddata-api-client/docs/LayoutApi.md @@ -9,6 +9,7 @@ Method | HTTP request | Description [**get_data_source_permissions**](LayoutApi.md#get_data_source_permissions) | **GET** /api/v1/layout/dataSources/{dataSourceId}/permissions | Get permissions for the data source [**get_data_sources_layout**](LayoutApi.md#get_data_sources_layout) | **GET** /api/v1/layout/dataSources | Get all data sources [**get_filter_views**](LayoutApi.md#get_filter_views) | **GET** /api/v1/layout/workspaces/{workspaceId}/filterViews | Get filter views +[**get_identity_providers_layout**](LayoutApi.md#get_identity_providers_layout) | **GET** /api/v1/layout/identityProviders | Get all identity providers layout [**get_logical_model**](LayoutApi.md#get_logical_model) | **GET** /api/v1/layout/workspaces/{workspaceId}/logicalModel | Get logical model [**get_notification_channels_layout**](LayoutApi.md#get_notification_channels_layout) | **GET** /api/v1/layout/notificationChannels | Get all notification channels layout [**get_organization_layout**](LayoutApi.md#get_organization_layout) | **GET** /api/v1/layout/organization | Get organization layout @@ -32,6 +33,7 @@ Method | HTTP request | Description [**set_automations**](LayoutApi.md#set_automations) | **PUT** /api/v1/layout/workspaces/{workspaceId}/automations | Set automations [**set_data_source_permissions**](LayoutApi.md#set_data_source_permissions) | **PUT** /api/v1/layout/dataSources/{dataSourceId}/permissions | Set data source permissions. [**set_filter_views**](LayoutApi.md#set_filter_views) | **PUT** /api/v1/layout/workspaces/{workspaceId}/filterViews | Set filter views +[**set_identity_providers**](LayoutApi.md#set_identity_providers) | **PUT** /api/v1/layout/identityProviders | Set all identity providers [**set_logical_model**](LayoutApi.md#set_logical_model) | **PUT** /api/v1/layout/workspaces/{workspaceId}/logicalModel | Set logical model [**set_notification_channels**](LayoutApi.md#set_notification_channels) | **PUT** /api/v1/layout/notificationChannels | Set all notification channels [**set_organization_layout**](LayoutApi.md#set_organization_layout) | **PUT** /api/v1/layout/organization | Set organization layout @@ -414,6 +416,69 @@ No authorization required [[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_identity_providers_layout** +> [DeclarativeIdentityProvider] get_identity_providers_layout() + +Get all identity providers layout + +Gets complete layout of identity providers. + +### Example + + +```python +import time +import gooddata_api_client +from gooddata_api_client.api import layout_api +from gooddata_api_client.model.declarative_identity_provider import DeclarativeIdentityProvider +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = gooddata_api_client.Configuration( + host = "http://localhost" +) + + +# Enter a context with an instance of the API client +with gooddata_api_client.ApiClient() as api_client: + # Create an instance of the API class + api_instance = layout_api.LayoutApi(api_client) + + # example, this endpoint has no required or optional parameters + try: + # Get all identity providers layout + api_response = api_instance.get_identity_providers_layout() + pprint(api_response) + except gooddata_api_client.ApiException as e: + print("Exception when calling LayoutApi->get_identity_providers_layout: %s\n" % e) +``` + + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**[DeclarativeIdentityProvider]**](DeclarativeIdentityProvider.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Retrieved layout of all identity providers. | - | + +[[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_logical_model** > DeclarativeModel get_logical_model(workspace_id) @@ -1389,6 +1454,8 @@ with gooddata_api_client.ApiClient() as api_client: data_sources=[ DeclarativeDataSource( cache_strategy="ALWAYS", + client_id="client1234", + client_secret="client_secret_example", decoded_parameters=[ Parameter( name="name_example", @@ -2518,7 +2585,7 @@ No authorization required Set data source permissions. -et data source permissions. +set data source permissions. ### Example @@ -2678,6 +2745,85 @@ No authorization required [[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) +# **set_identity_providers** +> set_identity_providers(declarative_identity_provider) + +Set all identity providers + +Sets identity providers in organization. + +### Example + + +```python +import time +import gooddata_api_client +from gooddata_api_client.api import layout_api +from gooddata_api_client.model.declarative_identity_provider import DeclarativeIdentityProvider +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = gooddata_api_client.Configuration( + host = "http://localhost" +) + + +# Enter a context with an instance of the API client +with gooddata_api_client.ApiClient() as api_client: + # Create an instance of the API class + api_instance = layout_api.LayoutApi(api_client) + declarative_identity_provider = [ + DeclarativeIdentityProvider( + custom_claim_mapping={ + "key": "key_example", + }, + id="filterView-1", + identifiers=["gooddata.com"], + oauth_client_id="oauth_client_id_example", + oauth_client_secret="oauth_client_secret_example", + oauth_issuer_id="myOidcProvider", + oauth_issuer_location="oauth_issuer_location_example", + saml_metadata="saml_metadata_example", + ), + ] # [DeclarativeIdentityProvider] | + + # example passing only required values which don't have defaults set + try: + # Set all identity providers + api_instance.set_identity_providers(declarative_identity_provider) + except gooddata_api_client.ApiException as e: + print("Exception when calling LayoutApi->set_identity_providers: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **declarative_identity_provider** | [**[DeclarativeIdentityProvider]**](DeclarativeIdentityProvider.md)| | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: Not defined + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | All identity providers set. | - | + +[[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) + # **set_logical_model** > set_logical_model(workspace_id, declarative_model) @@ -2987,6 +3133,8 @@ with gooddata_api_client.ApiClient() as api_client: data_sources=[ DeclarativeDataSource( cache_strategy="ALWAYS", + client_id="client1234", + client_secret="client_secret_example", decoded_parameters=[ Parameter( name="name_example", @@ -3020,6 +3168,20 @@ with gooddata_api_client.ApiClient() as api_client: username="demo", ), ], + identity_providers=[ + DeclarativeIdentityProvider( + custom_claim_mapping={ + "key": "key_example", + }, + id="filterView-1", + identifiers=["gooddata.com"], + oauth_client_id="oauth_client_id_example", + oauth_client_secret="oauth_client_secret_example", + oauth_issuer_id="myOidcProvider", + oauth_issuer_location="oauth_issuer_location_example", + saml_metadata="saml_metadata_example", + ), + ], jwks=[ DeclarativeJwk( content=DeclarativeJwkSpecification(), @@ -3037,6 +3199,9 @@ with gooddata_api_client.ApiClient() as api_client: ), ], organization=DeclarativeOrganizationInfo( + allowed_origins=[ + "allowed_origins_example", + ], color_palettes=[ DeclarativeColorPalette( content=JsonNode(), diff --git a/gooddata-api-client/docs/ManagePermissionsApi.md b/gooddata-api-client/docs/ManagePermissionsApi.md new file mode 100644 index 000000000..32a0948d7 --- /dev/null +++ b/gooddata-api-client/docs/ManagePermissionsApi.md @@ -0,0 +1,234 @@ +# gooddata_api_client.ManagePermissionsApi + +All URIs are relative to *http://localhost* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**get_data_source_permissions**](ManagePermissionsApi.md#get_data_source_permissions) | **GET** /api/v1/layout/dataSources/{dataSourceId}/permissions | Get permissions for the data source +[**manage_data_source_permissions**](ManagePermissionsApi.md#manage_data_source_permissions) | **POST** /api/v1/actions/dataSources/{dataSourceId}/managePermissions | Manage Permissions for a Data Source +[**set_data_source_permissions**](ManagePermissionsApi.md#set_data_source_permissions) | **PUT** /api/v1/layout/dataSources/{dataSourceId}/permissions | Set data source permissions. + + +# **get_data_source_permissions** +> DeclarativeDataSourcePermissions get_data_source_permissions(data_source_id) + +Get permissions for the data source + +Retrieve current set of permissions of the data source in a declarative form. + +### Example + + +```python +import time +import gooddata_api_client +from gooddata_api_client.api import manage_permissions_api +from gooddata_api_client.model.declarative_data_source_permissions import DeclarativeDataSourcePermissions +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = gooddata_api_client.Configuration( + host = "http://localhost" +) + + +# Enter a context with an instance of the API client +with gooddata_api_client.ApiClient() as api_client: + # Create an instance of the API class + api_instance = manage_permissions_api.ManagePermissionsApi(api_client) + data_source_id = "dataSourceId_example" # str | + + # example passing only required values which don't have defaults set + try: + # Get permissions for the data source + api_response = api_instance.get_data_source_permissions(data_source_id) + pprint(api_response) + except gooddata_api_client.ApiException as e: + print("Exception when calling ManagePermissionsApi->get_data_source_permissions: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **data_source_id** | **str**| | + +### Return type + +[**DeclarativeDataSourcePermissions**](DeclarativeDataSourcePermissions.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Retrieved current set of permissions. | - | + +[[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) + +# **manage_data_source_permissions** +> manage_data_source_permissions(data_source_id, data_source_permission_assignment) + +Manage Permissions for a Data Source + +Manage Permissions for a Data Source + +### Example + + +```python +import time +import gooddata_api_client +from gooddata_api_client.api import manage_permissions_api +from gooddata_api_client.model.data_source_permission_assignment import DataSourcePermissionAssignment +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = gooddata_api_client.Configuration( + host = "http://localhost" +) + + +# Enter a context with an instance of the API client +with gooddata_api_client.ApiClient() as api_client: + # Create an instance of the API class + api_instance = manage_permissions_api.ManagePermissionsApi(api_client) + data_source_id = "dataSourceId_example" # str | + data_source_permission_assignment = [ + DataSourcePermissionAssignment( + assignee_identifier=AssigneeIdentifier( + id="id_example", + type="user", + ), + permissions=[ + "MANAGE", + ], + ), + ] # [DataSourcePermissionAssignment] | + + # example passing only required values which don't have defaults set + try: + # Manage Permissions for a Data Source + api_instance.manage_data_source_permissions(data_source_id, data_source_permission_assignment) + except gooddata_api_client.ApiException as e: + print("Exception when calling ManagePermissionsApi->manage_data_source_permissions: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **data_source_id** | **str**| | + **data_source_permission_assignment** | [**[DataSourcePermissionAssignment]**](DataSourcePermissionAssignment.md)| | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: Not defined + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | No Content | - | + +[[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) + +# **set_data_source_permissions** +> set_data_source_permissions(data_source_id, declarative_data_source_permissions) + +Set data source permissions. + +set data source permissions. + +### Example + + +```python +import time +import gooddata_api_client +from gooddata_api_client.api import manage_permissions_api +from gooddata_api_client.model.declarative_data_source_permissions import DeclarativeDataSourcePermissions +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = gooddata_api_client.Configuration( + host = "http://localhost" +) + + +# Enter a context with an instance of the API client +with gooddata_api_client.ApiClient() as api_client: + # Create an instance of the API class + api_instance = manage_permissions_api.ManagePermissionsApi(api_client) + data_source_id = "dataSourceId_example" # str | + declarative_data_source_permissions = DeclarativeDataSourcePermissions( + permissions=[ + DeclarativeDataSourcePermission( + assignee=AssigneeIdentifier( + id="id_example", + type="user", + ), + name="MANAGE", + ), + ], + ) # DeclarativeDataSourcePermissions | + + # example passing only required values which don't have defaults set + try: + # Set data source permissions. + api_instance.set_data_source_permissions(data_source_id, declarative_data_source_permissions) + except gooddata_api_client.ApiException as e: + print("Exception when calling ManagePermissionsApi->set_data_source_permissions: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **data_source_id** | **str**| | + **declarative_data_source_permissions** | [**DeclarativeDataSourcePermissions**](DeclarativeDataSourcePermissions.md)| | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: Not defined + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | No Content | - | + +[[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/gooddata-api-client/docs/NegativeAttributeFilterNegativeAttributeFilter.md b/gooddata-api-client/docs/NegativeAttributeFilterNegativeAttributeFilter.md index 77d345d81..cd8499341 100644 --- a/gooddata-api-client/docs/NegativeAttributeFilterNegativeAttributeFilter.md +++ b/gooddata-api-client/docs/NegativeAttributeFilterNegativeAttributeFilter.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes **label** | [**AfmIdentifier**](AfmIdentifier.md) | | **not_in** | [**AttributeFilterElements**](AttributeFilterElements.md) | | **apply_on_result** | **bool** | | [optional] +**local_identifier** | **str** | | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[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/gooddata-api-client/docs/NotificationChannelDestination.md b/gooddata-api-client/docs/NotificationChannelDestination.md index a2fdfe532..7bf38f616 100644 --- a/gooddata-api-client/docs/NotificationChannelDestination.md +++ b/gooddata-api-client/docs/NotificationChannelDestination.md @@ -8,7 +8,7 @@ Name | Type | Description | Notes **has_token** | **bool, none_type** | Flag indicating if webhook has a token. | [optional] [readonly] **token** | **str, none_type** | Bearer token for the webhook. | [optional] **url** | **str** | The webhook URL. | [optional] -**from_email** | **str** | E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead. | [optional] if omitted the server will use the default value of "no-reply@gooddata.com" +**from_email** | **str** | E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead. | [optional] if omitted the server will use the default value of no-reply@gooddata.com **from_email_name** | **str** | An optional e-mail name to send notifications from. Currently this does not have any effect. E-mail from name 'GoodData' is used instead. | [optional] if omitted the server will use the default value of "GoodData" **host** | **str** | The SMTP server address. | [optional] **password** | **str** | The SMTP server password. | [optional] diff --git a/gooddata-api-client/docs/NotificationChannelsApi.md b/gooddata-api-client/docs/NotificationChannelsApi.md index ce66293ca..9a4d73aa1 100644 --- a/gooddata-api-client/docs/NotificationChannelsApi.md +++ b/gooddata-api-client/docs/NotificationChannelsApi.md @@ -8,7 +8,9 @@ Method | HTTP request | Description [**delete_entity_notification_channels**](NotificationChannelsApi.md#delete_entity_notification_channels) | **DELETE** /api/v1/entities/notificationChannels/{id} | Delete Notification Channel entity [**get_all_entities_notification_channels**](NotificationChannelsApi.md#get_all_entities_notification_channels) | **GET** /api/v1/entities/notificationChannels | Get all Notification Channel entities [**get_entity_notification_channels**](NotificationChannelsApi.md#get_entity_notification_channels) | **GET** /api/v1/entities/notificationChannels/{id} | Get Notification Channel entity +[**get_notification_channels_layout**](NotificationChannelsApi.md#get_notification_channels_layout) | **GET** /api/v1/layout/notificationChannels | Get all notification channels layout [**patch_entity_notification_channels**](NotificationChannelsApi.md#patch_entity_notification_channels) | **PATCH** /api/v1/entities/notificationChannels/{id} | Patch Notification Channel entity +[**set_notification_channels**](NotificationChannelsApi.md#set_notification_channels) | **PUT** /api/v1/layout/notificationChannels | Set all notification channels [**update_entity_notification_channels**](NotificationChannelsApi.md#update_entity_notification_channels) | **PUT** /api/v1/entities/notificationChannels/{id} | Put Notification Channel entity @@ -318,6 +320,69 @@ No authorization required [[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_notification_channels_layout** +> DeclarativeNotificationChannels get_notification_channels_layout() + +Get all notification channels layout + +Gets complete layout of notification channels. + +### Example + + +```python +import time +import gooddata_api_client +from gooddata_api_client.api import notification_channels_api +from gooddata_api_client.model.declarative_notification_channels import DeclarativeNotificationChannels +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = gooddata_api_client.Configuration( + host = "http://localhost" +) + + +# Enter a context with an instance of the API client +with gooddata_api_client.ApiClient() as api_client: + # Create an instance of the API class + api_instance = notification_channels_api.NotificationChannelsApi(api_client) + + # example, this endpoint has no required or optional parameters + try: + # Get all notification channels layout + api_response = api_instance.get_notification_channels_layout() + pprint(api_response) + except gooddata_api_client.ApiException as e: + print("Exception when calling NotificationChannelsApi->get_notification_channels_layout: %s\n" % e) +``` + + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**DeclarativeNotificationChannels**](DeclarativeNotificationChannels.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Retrieved layout of all notification channels. | - | + +[[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) + # **patch_entity_notification_channels** > JsonApiNotificationChannelOutDocument patch_entity_notification_channels(id, json_api_notification_channel_patch_document) @@ -410,6 +475,83 @@ No authorization required [[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) +# **set_notification_channels** +> set_notification_channels(declarative_notification_channels) + +Set all notification channels + +Sets notification channels in organization. + +### Example + + +```python +import time +import gooddata_api_client +from gooddata_api_client.api import notification_channels_api +from gooddata_api_client.model.declarative_notification_channels import DeclarativeNotificationChannels +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = gooddata_api_client.Configuration( + host = "http://localhost" +) + + +# Enter a context with an instance of the API client +with gooddata_api_client.ApiClient() as api_client: + # Create an instance of the API class + api_instance = notification_channels_api.NotificationChannelsApi(api_client) + declarative_notification_channels = DeclarativeNotificationChannels( + notification_channels=[ + DeclarativeNotificationChannel( + allowed_recipients="INTERNAL", + custom_dashboard_url="custom_dashboard_url_example", + description="This is a channel", + destination=DeclarativeNotificationChannelDestination(None), + id="notification-channel-1", + name="channel", + ), + ], + ) # DeclarativeNotificationChannels | + + # example passing only required values which don't have defaults set + try: + # Set all notification channels + api_instance.set_notification_channels(declarative_notification_channels) + except gooddata_api_client.ApiException as e: + print("Exception when calling NotificationChannelsApi->set_notification_channels: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **declarative_notification_channels** | [**DeclarativeNotificationChannels**](DeclarativeNotificationChannels.md)| | + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: Not defined + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**204** | All notification channels set. | - | + +[[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_entity_notification_channels** > JsonApiNotificationChannelOutDocument update_entity_notification_channels(id, json_api_notification_channel_in_document) diff --git a/gooddata-api-client/docs/OidcIdpSpecification.md b/gooddata-api-client/docs/OidcIdpSpecification.md deleted file mode 100644 index 86eb999f6..000000000 --- a/gooddata-api-client/docs/OidcIdpSpecification.md +++ /dev/null @@ -1,17 +0,0 @@ -# OidcIdpSpecification - -Specification of an OIDC identity provider - -## Properties -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**oauth_client_id** | **str** | | -**oauth_client_secret** | **str** | | -**oauth_issuer_id** | **str** | Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider. | -**oauth_issuer_location** | **str** | | -**oauth_subject_id_claim** | **str** | Any string identifying the claim in ID token, that should be used for user identification. The default value is 'sub'. | -**any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] - -[[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/gooddata-api-client/docs/OrganizationDeclarativeAPIsApi.md b/gooddata-api-client/docs/OrganizationDeclarativeAPIsApi.md index 2400d11aa..bd6118807 100644 --- a/gooddata-api-client/docs/OrganizationDeclarativeAPIsApi.md +++ b/gooddata-api-client/docs/OrganizationDeclarativeAPIsApi.md @@ -109,6 +109,8 @@ with gooddata_api_client.ApiClient() as api_client: data_sources=[ DeclarativeDataSource( cache_strategy="ALWAYS", + client_id="client1234", + client_secret="client_secret_example", decoded_parameters=[ Parameter( name="name_example", @@ -142,6 +144,20 @@ with gooddata_api_client.ApiClient() as api_client: username="demo", ), ], + identity_providers=[ + DeclarativeIdentityProvider( + custom_claim_mapping={ + "key": "key_example", + }, + id="filterView-1", + identifiers=["gooddata.com"], + oauth_client_id="oauth_client_id_example", + oauth_client_secret="oauth_client_secret_example", + oauth_issuer_id="myOidcProvider", + oauth_issuer_location="oauth_issuer_location_example", + saml_metadata="saml_metadata_example", + ), + ], jwks=[ DeclarativeJwk( content=DeclarativeJwkSpecification(), @@ -159,6 +175,9 @@ with gooddata_api_client.ApiClient() as api_client: ), ], organization=DeclarativeOrganizationInfo( + allowed_origins=[ + "allowed_origins_example", + ], color_palettes=[ DeclarativeColorPalette( content=JsonNode(), diff --git a/gooddata-api-client/docs/OrganizationModelControllerApi.md b/gooddata-api-client/docs/OrganizationModelControllerApi.md index 8927ad538..d8383c46d 100644 --- a/gooddata-api-client/docs/OrganizationModelControllerApi.md +++ b/gooddata-api-client/docs/OrganizationModelControllerApi.md @@ -269,6 +269,8 @@ with gooddata_api_client.ApiClient() as api_client: data=JsonApiDataSourceIn( attributes=JsonApiDataSourceInAttributes( cache_strategy="ALWAYS", + client_id="client_id_example", + client_secret="client_secret_example", name="name_example", parameters=[ JsonApiDataSourceInAttributesParametersInner( @@ -370,9 +372,15 @@ with gooddata_api_client.ApiClient() as api_client: json_api_identity_provider_in_document = JsonApiIdentityProviderInDocument( data=JsonApiIdentityProviderIn( attributes=JsonApiIdentityProviderInAttributes( + custom_claim_mapping={ + "key": "key_example", + }, identifiers=["gooddata.com"], - specification=JsonApiIdentityProviderInAttributesSpecification(), - type="SAML", + oauth_client_id="oauth_client_id_example", + oauth_client_secret="oauth_client_secret_example", + oauth_issuer_id="myOidcProvider", + oauth_issuer_location="oauth_issuer_location_example", + saml_metadata="saml_metadata_example", ), id="id1", type="identityProvider", @@ -1362,7 +1370,7 @@ with gooddata_api_client.ApiClient() as api_client: # Create an instance of the API class api_instance = organization_model_controller_api.OrganizationModelControllerApi(api_client) id = "/6bUUGjjNSwg0_bs" # str | - filter = "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) + filter = "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) # example passing only required values which don't have defaults set try: @@ -2421,7 +2429,7 @@ configuration = gooddata_api_client.Configuration( with gooddata_api_client.ApiClient() as api_client: # Create an instance of the API class api_instance = organization_model_controller_api.OrganizationModelControllerApi(api_client) - filter = "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) + filter = "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) page = 0 # int | Zero-based page index (0..N) (optional) if omitted the server will use the default value of 0 size = 20 # int | The size of the page to be returned (optional) if omitted the server will use the default value of 20 sort = [ @@ -3618,7 +3626,7 @@ with gooddata_api_client.ApiClient() as api_client: # Create an instance of the API class api_instance = organization_model_controller_api.OrganizationModelControllerApi(api_client) id = "/6bUUGjjNSwg0_bs" # str | - filter = "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) + filter = "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) # example passing only required values which don't have defaults set try: @@ -4590,6 +4598,8 @@ with gooddata_api_client.ApiClient() as api_client: data=JsonApiDataSourcePatch( attributes=JsonApiDataSourcePatchAttributes( cache_strategy="ALWAYS", + client_id="client_id_example", + client_secret="client_secret_example", name="name_example", parameters=[ JsonApiDataSourceInAttributesParametersInner( @@ -4690,16 +4700,22 @@ with gooddata_api_client.ApiClient() as api_client: id = "/6bUUGjjNSwg0_bs" # str | json_api_identity_provider_patch_document = JsonApiIdentityProviderPatchDocument( data=JsonApiIdentityProviderPatch( - attributes=JsonApiIdentityProviderPatchAttributes( + attributes=JsonApiIdentityProviderInAttributes( + custom_claim_mapping={ + "key": "key_example", + }, identifiers=["gooddata.com"], - specification=JsonApiIdentityProviderInAttributesSpecification(), - type="SAML", + oauth_client_id="oauth_client_id_example", + oauth_client_secret="oauth_client_secret_example", + oauth_issuer_id="myOidcProvider", + oauth_issuer_location="oauth_issuer_location_example", + saml_metadata="saml_metadata_example", ), id="id1", type="identityProvider", ), ) # JsonApiIdentityProviderPatchDocument | - filter = "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) + filter = "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) # example passing only required values which don't have defaults set try: @@ -5732,6 +5748,8 @@ with gooddata_api_client.ApiClient() as api_client: data=JsonApiDataSourceIn( attributes=JsonApiDataSourceInAttributes( cache_strategy="ALWAYS", + client_id="client_id_example", + client_secret="client_secret_example", name="name_example", parameters=[ JsonApiDataSourceInAttributesParametersInner( @@ -5833,15 +5851,21 @@ with gooddata_api_client.ApiClient() as api_client: json_api_identity_provider_in_document = JsonApiIdentityProviderInDocument( data=JsonApiIdentityProviderIn( attributes=JsonApiIdentityProviderInAttributes( + custom_claim_mapping={ + "key": "key_example", + }, identifiers=["gooddata.com"], - specification=JsonApiIdentityProviderInAttributesSpecification(), - type="SAML", + oauth_client_id="oauth_client_id_example", + oauth_client_secret="oauth_client_secret_example", + oauth_issuer_id="myOidcProvider", + oauth_issuer_location="oauth_issuer_location_example", + saml_metadata="saml_metadata_example", ), id="id1", type="identityProvider", ), ) # JsonApiIdentityProviderInDocument | - filter = "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) + filter = "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue" # str | Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123'). (optional) # example passing only required values which don't have defaults set try: diff --git a/gooddata-api-client/docs/PositiveAttributeFilterPositiveAttributeFilter.md b/gooddata-api-client/docs/PositiveAttributeFilterPositiveAttributeFilter.md index a3d66419f..131dd44f5 100644 --- a/gooddata-api-client/docs/PositiveAttributeFilterPositiveAttributeFilter.md +++ b/gooddata-api-client/docs/PositiveAttributeFilterPositiveAttributeFilter.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes **_in** | [**AttributeFilterElements**](AttributeFilterElements.md) | | **label** | [**AfmIdentifier**](AfmIdentifier.md) | | **apply_on_result** | **bool** | | [optional] +**local_identifier** | **str** | | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[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/gooddata-api-client/docs/RangeMeasureValueFilterRangeMeasureValueFilter.md b/gooddata-api-client/docs/RangeMeasureValueFilterRangeMeasureValueFilter.md index 39c6ed2b5..b22709cd2 100644 --- a/gooddata-api-client/docs/RangeMeasureValueFilterRangeMeasureValueFilter.md +++ b/gooddata-api-client/docs/RangeMeasureValueFilterRangeMeasureValueFilter.md @@ -9,6 +9,7 @@ Name | Type | Description | Notes **operator** | **str** | | **to** | **float** | | **apply_on_result** | **bool** | | [optional] +**local_identifier** | **str** | | [optional] **treat_null_values_as** | **float** | | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] diff --git a/gooddata-api-client/docs/RankingFilterRankingFilter.md b/gooddata-api-client/docs/RankingFilterRankingFilter.md index 15c77ea4b..d9a12acda 100644 --- a/gooddata-api-client/docs/RankingFilterRankingFilter.md +++ b/gooddata-api-client/docs/RankingFilterRankingFilter.md @@ -8,6 +8,7 @@ Name | Type | Description | Notes **operator** | **str** | | **value** | **int** | | **apply_on_result** | **bool** | | [optional] +**local_identifier** | **str** | | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[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/gooddata-api-client/docs/RelativeDateFilterRelativeDateFilter.md b/gooddata-api-client/docs/RelativeDateFilterRelativeDateFilter.md index 5a17d7838..1858a752e 100644 --- a/gooddata-api-client/docs/RelativeDateFilterRelativeDateFilter.md +++ b/gooddata-api-client/docs/RelativeDateFilterRelativeDateFilter.md @@ -9,6 +9,7 @@ Name | Type | Description | Notes **granularity** | **str** | Date granularity specifying particular date attribute in given dimension. | **to** | **int** | End of the filtering interval. Specified by number of periods (with respect to given granularity). Value 'O' is representing current time-interval (current day, week, ...). | **apply_on_result** | **bool** | | [optional] +**local_identifier** | **str** | | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] [[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/gooddata-api-client/docs/SmartFunctionsApi.md b/gooddata-api-client/docs/SmartFunctionsApi.md index bc1e7b006..460e35ad8 100644 --- a/gooddata-api-client/docs/SmartFunctionsApi.md +++ b/gooddata-api-client/docs/SmartFunctionsApi.md @@ -6,6 +6,7 @@ Method | HTTP request | Description ------------- | ------------- | ------------- [**ai_chat**](SmartFunctionsApi.md#ai_chat) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/chat | (BETA) Chat with AI [**ai_chat_history**](SmartFunctionsApi.md#ai_chat_history) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/chatHistory | (BETA) Get Chat History +[**ai_chat_stream**](SmartFunctionsApi.md#ai_chat_stream) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/chatStream | (BETA) Chat with AI [**ai_route**](SmartFunctionsApi.md#ai_route) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/route | (BETA) Route to supported use cases based on this input query. [**ai_search**](SmartFunctionsApi.md#ai_search) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/search | (BETA) Semantic Search in Metadata [**anomaly_detection**](SmartFunctionsApi.md#anomaly_detection) | **POST** /api/v1/actions/workspaces/{workspaceId}/execution/functions/anomalyDetection/{resultId} | (EXPERIMENTAL) Smart functions - Anomaly Detection @@ -169,6 +170,91 @@ No authorization required - **Accept**: application/json +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | + +[[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) + +# **ai_chat_stream** +> [dict] ai_chat_stream(workspace_id, chat_request) + +(BETA) Chat with AI + +(BETA) Combines multiple use cases such as search, create visualizations, ... + +### Example + + +```python +import time +import gooddata_api_client +from gooddata_api_client.api import smart_functions_api +from gooddata_api_client.model.chat_request import ChatRequest +from pprint import pprint +# Defining the host is optional and defaults to http://localhost +# See configuration.py for a list of all supported configuration parameters. +configuration = gooddata_api_client.Configuration( + host = "http://localhost" +) + + +# Enter a context with an instance of the API client +with gooddata_api_client.ApiClient() as api_client: + # Create an instance of the API class + api_instance = smart_functions_api.SmartFunctionsApi(api_client) + workspace_id = "/6bUUGjjNSwg0_bs" # str | Workspace identifier + chat_request = ChatRequest( + limit_create=3, + limit_create_context=10, + limit_search=5, + question="question_example", + relevant_score_threshold=0.4, + search_score_threshold=0.9, + thread_id_suffix="thread_id_suffix_example", + title_to_descriptor_ratio=0.7, + user_context=UserContext( + active_object=ActiveObjectIdentification( + id="id_example", + type="type_example", + workspace_id="workspace_id_example", + ), + ), + ) # ChatRequest | + + # example passing only required values which don't have defaults set + try: + # (BETA) Chat with AI + api_response = api_instance.ai_chat_stream(workspace_id, chat_request) + pprint(api_response) + except gooddata_api_client.ApiException as e: + print("Exception when calling SmartFunctionsApi->ai_chat_stream: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **workspace_id** | **str**| Workspace identifier | + **chat_request** | [**ChatRequest**](ChatRequest.md)| | + +### Return type + +**[dict]** + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: text/event-stream + + ### HTTP response details | Status code | Description | Response headers | diff --git a/gooddata-api-client/docs/Smtp.md b/gooddata-api-client/docs/Smtp.md index fd7925d9b..8261d2624 100644 --- a/gooddata-api-client/docs/Smtp.md +++ b/gooddata-api-client/docs/Smtp.md @@ -6,7 +6,7 @@ Custom SMTP destination for notifications. The properties host, port, username, Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **type** | **str** | The destination type. | defaults to "SMTP" -**from_email** | **str** | E-mail address to send notifications from. | [optional] if omitted the server will use the default value of "no-reply@gooddata.com" +**from_email** | **str** | E-mail address to send notifications from. | [optional] if omitted the server will use the default value of no-reply@gooddata.com **from_email_name** | **str** | An optional e-mail name to send notifications from. | [optional] if omitted the server will use the default value of "GoodData" **host** | **str** | The SMTP server address. | [optional] **password** | **str** | The SMTP server password. | [optional] diff --git a/gooddata-api-client/docs/SmtpAllOf.md b/gooddata-api-client/docs/SmtpAllOf.md index 17166734f..1eccc4ee3 100644 --- a/gooddata-api-client/docs/SmtpAllOf.md +++ b/gooddata-api-client/docs/SmtpAllOf.md @@ -4,7 +4,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**from_email** | **str** | E-mail address to send notifications from. | [optional] if omitted the server will use the default value of "no-reply@gooddata.com" +**from_email** | **str** | E-mail address to send notifications from. | [optional] if omitted the server will use the default value of no-reply@gooddata.com **from_email_name** | **str** | An optional e-mail name to send notifications from. | [optional] if omitted the server will use the default value of "GoodData" **host** | **str** | The SMTP server address. | [optional] **password** | **str** | The SMTP server password. | [optional] diff --git a/gooddata-api-client/docs/TestConnectionApi.md b/gooddata-api-client/docs/TestConnectionApi.md index d82f68adf..9fcfab0b5 100644 --- a/gooddata-api-client/docs/TestConnectionApi.md +++ b/gooddata-api-client/docs/TestConnectionApi.md @@ -38,6 +38,8 @@ with gooddata_api_client.ApiClient() as api_client: api_instance = test_connection_api.TestConnectionApi(api_client) data_source_id = "myPostgres" # str | Data source id test_request = TestRequest( + client_id="client_id_example", + client_secret="client_secret_example", parameters=[ DataSourceParameter( name="name_example", @@ -121,6 +123,8 @@ with gooddata_api_client.ApiClient() as api_client: # Create an instance of the API class api_instance = test_connection_api.TestConnectionApi(api_client) test_definition_request = TestDefinitionRequest( + client_id="client_id_example", + client_secret="client_secret_example", parameters=[ DataSourceParameter( name="name_example", diff --git a/gooddata-api-client/docs/TestDefinitionRequest.md b/gooddata-api-client/docs/TestDefinitionRequest.md index 9a0f5f2af..dea6137b3 100644 --- a/gooddata-api-client/docs/TestDefinitionRequest.md +++ b/gooddata-api-client/docs/TestDefinitionRequest.md @@ -6,6 +6,8 @@ A request containing all information for testing data source definition. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **type** | **str** | Type of database, where test should connect to. | +**client_id** | **str** | Id for client based authentication for data sources which supports it. | [optional] +**client_secret** | **str** | Secret for client based authentication for data sources which supports it. | [optional] **parameters** | [**[DataSourceParameter]**](DataSourceParameter.md) | | [optional] **password** | **str** | Database user password. | [optional] **private_key** | **str** | Private key for data sources which supports key-pair authentication. | [optional] diff --git a/gooddata-api-client/docs/TestRequest.md b/gooddata-api-client/docs/TestRequest.md index 6a11beee6..c79efb371 100644 --- a/gooddata-api-client/docs/TestRequest.md +++ b/gooddata-api-client/docs/TestRequest.md @@ -5,6 +5,8 @@ A request containing all information for testing existing data source. ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- +**client_id** | **str** | Id for client based authentication for data sources which supports it. | [optional] +**client_secret** | **str** | Secret for client based authentication for data sources which supports it. | [optional] **parameters** | [**[DataSourceParameter]**](DataSourceParameter.md) | | [optional] **password** | **str** | Database user password. | [optional] **private_key** | **str** | Private key for data sources which supports key-pair authentication. | [optional] diff --git a/gooddata-api-client/gooddata_api_client/api/actions_api.py b/gooddata-api-client/gooddata_api_client/api/actions_api.py index 92709f4e7..ab51c6d00 100644 --- a/gooddata-api-client/gooddata_api_client/api/actions_api.py +++ b/gooddata-api-client/gooddata_api_client/api/actions_api.py @@ -224,6 +224,69 @@ def __init__(self, api_client=None): }, api_client=api_client ) + self.ai_chat_stream_endpoint = _Endpoint( + settings={ + 'response_type': ([dict],), + 'auth': [], + 'endpoint_path': '/api/v1/actions/workspaces/{workspaceId}/ai/chatStream', + 'operation_id': 'ai_chat_stream', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'workspace_id', + 'chat_request', + ], + 'required': [ + 'workspace_id', + 'chat_request', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + 'workspace_id', + ] + }, + root_map={ + 'validations': { + ('workspace_id',): { + + 'regex': { + 'pattern': r'^(?!\.)[.A-Za-z0-9_-]{1,255}$', # noqa: E501 + }, + }, + }, + 'allowed_values': { + }, + 'openapi_types': { + 'workspace_id': + (str,), + 'chat_request': + (ChatRequest,), + }, + 'attribute_map': { + 'workspace_id': 'workspaceId', + }, + 'location_map': { + 'workspace_id': 'path', + 'chat_request': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'text/event-stream' + ], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client + ) self.ai_route_endpoint = _Endpoint( settings={ 'response_type': (RouteResult,), @@ -3936,6 +3999,93 @@ def ai_chat_history( chat_history_request return self.ai_chat_history_endpoint.call_with_http_info(**kwargs) + def ai_chat_stream( + self, + workspace_id, + chat_request, + **kwargs + ): + """(BETA) Chat with AI # noqa: E501 + + (BETA) Combines multiple use cases such as search, create visualizations, ... # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.ai_chat_stream(workspace_id, chat_request, async_req=True) + >>> result = thread.get() + + Args: + workspace_id (str): Workspace identifier + chat_request (ChatRequest): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): 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. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + _request_auths (list): set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + Default is None + async_req (bool): execute request asynchronously + + Returns: + [dict] + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['_request_auths'] = kwargs.get('_request_auths', None) + kwargs['workspace_id'] = \ + workspace_id + kwargs['chat_request'] = \ + chat_request + return self.ai_chat_stream_endpoint.call_with_http_info(**kwargs) + def ai_route( self, workspace_id, diff --git a/gooddata-api-client/gooddata_api_client/api/identity_providers_api.py b/gooddata-api-client/gooddata_api_client/api/identity_providers_api.py index 7e125ca20..ecb434656 100644 --- a/gooddata-api-client/gooddata_api_client/api/identity_providers_api.py +++ b/gooddata-api-client/gooddata_api_client/api/identity_providers_api.py @@ -22,6 +22,7 @@ none_type, validate_and_convert_types ) +from gooddata_api_client.model.declarative_identity_provider import DeclarativeIdentityProvider from gooddata_api_client.model.json_api_identity_provider_in_document import JsonApiIdentityProviderInDocument from gooddata_api_client.model.json_api_identity_provider_out_document import JsonApiIdentityProviderOutDocument from gooddata_api_client.model.json_api_identity_provider_out_list import JsonApiIdentityProviderOutList @@ -289,6 +290,48 @@ def __init__(self, api_client=None): }, api_client=api_client ) + self.get_identity_providers_layout_endpoint = _Endpoint( + settings={ + 'response_type': ([DeclarativeIdentityProvider],), + 'auth': [], + 'endpoint_path': '/api/v1/layout/identityProviders', + 'operation_id': 'get_identity_providers_layout', + 'http_method': 'GET', + 'servers': None, + }, + params_map={ + 'all': [ + ], + 'required': [], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + }, + 'attribute_map': { + }, + 'location_map': { + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client + ) self.patch_entity_identity_providers_endpoint = _Endpoint( settings={ 'response_type': (JsonApiIdentityProviderOutDocument,), @@ -357,6 +400,54 @@ def __init__(self, api_client=None): }, api_client=api_client ) + self.set_identity_providers_endpoint = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/api/v1/layout/identityProviders', + 'operation_id': 'set_identity_providers', + 'http_method': 'PUT', + 'servers': None, + }, + params_map={ + 'all': [ + 'declarative_identity_provider', + ], + 'required': [ + 'declarative_identity_provider', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'declarative_identity_provider': + ([DeclarativeIdentityProvider],), + }, + 'attribute_map': { + }, + 'location_map': { + 'declarative_identity_provider': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client + ) self.update_entity_identity_providers_endpoint = _Endpoint( settings={ 'response_type': (JsonApiIdentityProviderOutDocument,), @@ -756,6 +847,84 @@ def get_entity_identity_providers( id return self.get_entity_identity_providers_endpoint.call_with_http_info(**kwargs) + def get_identity_providers_layout( + self, + **kwargs + ): + """Get all identity providers layout # noqa: E501 + + Gets complete layout of identity providers. # 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_providers_layout(async_req=True) + >>> result = thread.get() + + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): 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. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + _request_auths (list): set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + Default is None + async_req (bool): execute request asynchronously + + Returns: + [DeclarativeIdentityProvider] + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['_request_auths'] = kwargs.get('_request_auths', None) + return self.get_identity_providers_layout_endpoint.call_with_http_info(**kwargs) + def patch_entity_identity_providers( self, id, @@ -843,6 +1012,89 @@ def patch_entity_identity_providers( json_api_identity_provider_patch_document return self.patch_entity_identity_providers_endpoint.call_with_http_info(**kwargs) + def set_identity_providers( + self, + declarative_identity_provider, + **kwargs + ): + """Set all identity providers # noqa: E501 + + Sets identity providers in organization. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.set_identity_providers(declarative_identity_provider, async_req=True) + >>> result = thread.get() + + Args: + declarative_identity_provider ([DeclarativeIdentityProvider]): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): 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. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + _request_auths (list): set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + Default is None + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['_request_auths'] = kwargs.get('_request_auths', None) + kwargs['declarative_identity_provider'] = \ + declarative_identity_provider + return self.set_identity_providers_endpoint.call_with_http_info(**kwargs) + def update_entity_identity_providers( self, id, diff --git a/gooddata-api-client/gooddata_api_client/api/layout_api.py b/gooddata-api-client/gooddata_api_client/api/layout_api.py index a460a75de..3f052fe96 100644 --- a/gooddata-api-client/gooddata_api_client/api/layout_api.py +++ b/gooddata-api-client/gooddata_api_client/api/layout_api.py @@ -27,6 +27,7 @@ from gooddata_api_client.model.declarative_data_source_permissions import DeclarativeDataSourcePermissions from gooddata_api_client.model.declarative_data_sources import DeclarativeDataSources from gooddata_api_client.model.declarative_filter_view import DeclarativeFilterView +from gooddata_api_client.model.declarative_identity_provider import DeclarativeIdentityProvider from gooddata_api_client.model.declarative_model import DeclarativeModel from gooddata_api_client.model.declarative_notification_channels import DeclarativeNotificationChannels from gooddata_api_client.model.declarative_organization import DeclarativeOrganization @@ -325,6 +326,48 @@ def __init__(self, api_client=None): }, api_client=api_client ) + self.get_identity_providers_layout_endpoint = _Endpoint( + settings={ + 'response_type': ([DeclarativeIdentityProvider],), + 'auth': [], + 'endpoint_path': '/api/v1/layout/identityProviders', + 'operation_id': 'get_identity_providers_layout', + 'http_method': 'GET', + 'servers': None, + }, + params_map={ + 'all': [ + ], + 'required': [], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + }, + 'attribute_map': { + }, + 'location_map': { + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client + ) self.get_logical_model_endpoint = _Endpoint( settings={ 'response_type': (DeclarativeModel,), @@ -1455,6 +1498,54 @@ def __init__(self, api_client=None): }, api_client=api_client ) + self.set_identity_providers_endpoint = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/api/v1/layout/identityProviders', + 'operation_id': 'set_identity_providers', + 'http_method': 'PUT', + 'servers': None, + }, + params_map={ + 'all': [ + 'declarative_identity_provider', + ], + 'required': [ + 'declarative_identity_provider', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'declarative_identity_provider': + ([DeclarativeIdentityProvider],), + }, + 'attribute_map': { + }, + 'location_map': { + 'declarative_identity_provider': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client + ) self.set_logical_model_endpoint = _Endpoint( settings={ 'response_type': None, @@ -2379,6 +2470,84 @@ def get_filter_views( workspace_id return self.get_filter_views_endpoint.call_with_http_info(**kwargs) + def get_identity_providers_layout( + self, + **kwargs + ): + """Get all identity providers layout # noqa: E501 + + Gets complete layout of identity providers. # 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_providers_layout(async_req=True) + >>> result = thread.get() + + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): 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. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + _request_auths (list): set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + Default is None + async_req (bool): execute request asynchronously + + Returns: + [DeclarativeIdentityProvider] + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['_request_auths'] = kwargs.get('_request_auths', None) + return self.get_identity_providers_layout_endpoint.call_with_http_info(**kwargs) + def get_logical_model( self, workspace_id, @@ -4106,7 +4275,7 @@ def set_data_source_permissions( ): """Set data source permissions. # noqa: E501 - et data source permissions. # noqa: E501 + set data source permissions. # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True @@ -4272,6 +4441,89 @@ def set_filter_views( declarative_filter_view return self.set_filter_views_endpoint.call_with_http_info(**kwargs) + def set_identity_providers( + self, + declarative_identity_provider, + **kwargs + ): + """Set all identity providers # noqa: E501 + + Sets identity providers in organization. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.set_identity_providers(declarative_identity_provider, async_req=True) + >>> result = thread.get() + + Args: + declarative_identity_provider ([DeclarativeIdentityProvider]): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): 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. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + _request_auths (list): set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + Default is None + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['_request_auths'] = kwargs.get('_request_auths', None) + kwargs['declarative_identity_provider'] = \ + declarative_identity_provider + return self.set_identity_providers_endpoint.call_with_http_info(**kwargs) + def set_logical_model( self, workspace_id, diff --git a/gooddata-api-client/gooddata_api_client/api/manage_permissions_api.py b/gooddata-api-client/gooddata_api_client/api/manage_permissions_api.py new file mode 100644 index 000000000..e3a612827 --- /dev/null +++ b/gooddata-api-client/gooddata_api_client/api/manage_permissions_api.py @@ -0,0 +1,454 @@ +""" + OpenAPI definition + + No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501 + + The version of the OpenAPI document: v0 + Contact: support@gooddata.com + Generated by: https://openapi-generator.tech +""" + + +import re # noqa: F401 +import sys # noqa: F401 + +from gooddata_api_client.api_client import ApiClient, Endpoint as _Endpoint +from gooddata_api_client.model_utils import ( # noqa: F401 + check_allowed_values, + check_validations, + date, + datetime, + file_type, + none_type, + validate_and_convert_types +) +from gooddata_api_client.model.data_source_permission_assignment import DataSourcePermissionAssignment +from gooddata_api_client.model.declarative_data_source_permissions import DeclarativeDataSourcePermissions + + +class ManagePermissionsApi(object): + """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): + if api_client is None: + api_client = ApiClient() + self.api_client = api_client + self.get_data_source_permissions_endpoint = _Endpoint( + settings={ + 'response_type': (DeclarativeDataSourcePermissions,), + 'auth': [], + 'endpoint_path': '/api/v1/layout/dataSources/{dataSourceId}/permissions', + 'operation_id': 'get_data_source_permissions', + 'http_method': 'GET', + 'servers': None, + }, + params_map={ + 'all': [ + 'data_source_id', + ], + 'required': [ + 'data_source_id', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'data_source_id': + (str,), + }, + 'attribute_map': { + 'data_source_id': 'dataSourceId', + }, + 'location_map': { + 'data_source_id': 'path', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client + ) + self.manage_data_source_permissions_endpoint = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/api/v1/actions/dataSources/{dataSourceId}/managePermissions', + 'operation_id': 'manage_data_source_permissions', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'data_source_id', + 'data_source_permission_assignment', + ], + 'required': [ + 'data_source_id', + 'data_source_permission_assignment', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'data_source_id': + (str,), + 'data_source_permission_assignment': + ([DataSourcePermissionAssignment],), + }, + 'attribute_map': { + 'data_source_id': 'dataSourceId', + }, + 'location_map': { + 'data_source_id': 'path', + 'data_source_permission_assignment': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client + ) + self.set_data_source_permissions_endpoint = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/api/v1/layout/dataSources/{dataSourceId}/permissions', + 'operation_id': 'set_data_source_permissions', + 'http_method': 'PUT', + 'servers': None, + }, + params_map={ + 'all': [ + 'data_source_id', + 'declarative_data_source_permissions', + ], + 'required': [ + 'data_source_id', + 'declarative_data_source_permissions', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'data_source_id': + (str,), + 'declarative_data_source_permissions': + (DeclarativeDataSourcePermissions,), + }, + 'attribute_map': { + 'data_source_id': 'dataSourceId', + }, + 'location_map': { + 'data_source_id': 'path', + 'declarative_data_source_permissions': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client + ) + + def get_data_source_permissions( + self, + data_source_id, + **kwargs + ): + """Get permissions for the data source # noqa: E501 + + Retrieve current set of permissions of the data source in a declarative form. # 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_data_source_permissions(data_source_id, async_req=True) + >>> result = thread.get() + + Args: + data_source_id (str): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): 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. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + _request_auths (list): set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + Default is None + async_req (bool): execute request asynchronously + + Returns: + DeclarativeDataSourcePermissions + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['_request_auths'] = kwargs.get('_request_auths', None) + kwargs['data_source_id'] = \ + data_source_id + return self.get_data_source_permissions_endpoint.call_with_http_info(**kwargs) + + def manage_data_source_permissions( + self, + data_source_id, + data_source_permission_assignment, + **kwargs + ): + """Manage Permissions for a Data Source # noqa: E501 + + Manage Permissions for a Data 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.manage_data_source_permissions(data_source_id, data_source_permission_assignment, async_req=True) + >>> result = thread.get() + + Args: + data_source_id (str): + data_source_permission_assignment ([DataSourcePermissionAssignment]): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): 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. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + _request_auths (list): set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + Default is None + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['_request_auths'] = kwargs.get('_request_auths', None) + kwargs['data_source_id'] = \ + data_source_id + kwargs['data_source_permission_assignment'] = \ + data_source_permission_assignment + return self.manage_data_source_permissions_endpoint.call_with_http_info(**kwargs) + + def set_data_source_permissions( + self, + data_source_id, + declarative_data_source_permissions, + **kwargs + ): + """Set data source permissions. # noqa: E501 + + set data source 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.set_data_source_permissions(data_source_id, declarative_data_source_permissions, async_req=True) + >>> result = thread.get() + + Args: + data_source_id (str): + declarative_data_source_permissions (DeclarativeDataSourcePermissions): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): 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. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + _request_auths (list): set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + Default is None + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['_request_auths'] = kwargs.get('_request_auths', None) + kwargs['data_source_id'] = \ + data_source_id + kwargs['declarative_data_source_permissions'] = \ + declarative_data_source_permissions + return self.set_data_source_permissions_endpoint.call_with_http_info(**kwargs) + diff --git a/gooddata-api-client/gooddata_api_client/api/notification_channels_api.py b/gooddata-api-client/gooddata_api_client/api/notification_channels_api.py index 88421afb8..ea28bb465 100644 --- a/gooddata-api-client/gooddata_api_client/api/notification_channels_api.py +++ b/gooddata-api-client/gooddata_api_client/api/notification_channels_api.py @@ -22,6 +22,7 @@ none_type, validate_and_convert_types ) +from gooddata_api_client.model.declarative_notification_channels import DeclarativeNotificationChannels from gooddata_api_client.model.json_api_notification_channel_in_document import JsonApiNotificationChannelInDocument from gooddata_api_client.model.json_api_notification_channel_out_document import JsonApiNotificationChannelOutDocument from gooddata_api_client.model.json_api_notification_channel_out_list import JsonApiNotificationChannelOutList @@ -290,6 +291,48 @@ def __init__(self, api_client=None): }, api_client=api_client ) + self.get_notification_channels_layout_endpoint = _Endpoint( + settings={ + 'response_type': (DeclarativeNotificationChannels,), + 'auth': [], + 'endpoint_path': '/api/v1/layout/notificationChannels', + 'operation_id': 'get_notification_channels_layout', + 'http_method': 'GET', + 'servers': None, + }, + params_map={ + 'all': [ + ], + 'required': [], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + }, + 'attribute_map': { + }, + 'location_map': { + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client + ) self.patch_entity_notification_channels_endpoint = _Endpoint( settings={ 'response_type': (JsonApiNotificationChannelOutDocument,), @@ -358,6 +401,54 @@ def __init__(self, api_client=None): }, api_client=api_client ) + self.set_notification_channels_endpoint = _Endpoint( + settings={ + 'response_type': None, + 'auth': [], + 'endpoint_path': '/api/v1/layout/notificationChannels', + 'operation_id': 'set_notification_channels', + 'http_method': 'PUT', + 'servers': None, + }, + params_map={ + 'all': [ + 'declarative_notification_channels', + ], + 'required': [ + 'declarative_notification_channels', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'declarative_notification_channels': + (DeclarativeNotificationChannels,), + }, + 'attribute_map': { + }, + 'location_map': { + 'declarative_notification_channels': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client + ) self.update_entity_notification_channels_endpoint = _Endpoint( settings={ 'response_type': (JsonApiNotificationChannelOutDocument,), @@ -757,6 +848,84 @@ def get_entity_notification_channels( id return self.get_entity_notification_channels_endpoint.call_with_http_info(**kwargs) + def get_notification_channels_layout( + self, + **kwargs + ): + """Get all notification channels layout # noqa: E501 + + Gets complete layout of notification channels. # 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_notification_channels_layout(async_req=True) + >>> result = thread.get() + + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): 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. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + _request_auths (list): set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + Default is None + async_req (bool): execute request asynchronously + + Returns: + DeclarativeNotificationChannels + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['_request_auths'] = kwargs.get('_request_auths', None) + return self.get_notification_channels_layout_endpoint.call_with_http_info(**kwargs) + def patch_entity_notification_channels( self, id, @@ -844,6 +1013,89 @@ def patch_entity_notification_channels( json_api_notification_channel_patch_document return self.patch_entity_notification_channels_endpoint.call_with_http_info(**kwargs) + def set_notification_channels( + self, + declarative_notification_channels, + **kwargs + ): + """Set all notification channels # noqa: E501 + + Sets notification channels in organization. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.set_notification_channels(declarative_notification_channels, async_req=True) + >>> result = thread.get() + + Args: + declarative_notification_channels (DeclarativeNotificationChannels): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): 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. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + _request_auths (list): set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + Default is None + async_req (bool): execute request asynchronously + + Returns: + None + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['_request_auths'] = kwargs.get('_request_auths', None) + kwargs['declarative_notification_channels'] = \ + declarative_notification_channels + return self.set_notification_channels_endpoint.call_with_http_info(**kwargs) + def update_entity_notification_channels( self, id, diff --git a/gooddata-api-client/gooddata_api_client/api/smart_functions_api.py b/gooddata-api-client/gooddata_api_client/api/smart_functions_api.py index dff32b0e1..9fa95fea2 100644 --- a/gooddata-api-client/gooddata_api_client/api/smart_functions_api.py +++ b/gooddata-api-client/gooddata_api_client/api/smart_functions_api.py @@ -176,6 +176,69 @@ def __init__(self, api_client=None): }, api_client=api_client ) + self.ai_chat_stream_endpoint = _Endpoint( + settings={ + 'response_type': ([dict],), + 'auth': [], + 'endpoint_path': '/api/v1/actions/workspaces/{workspaceId}/ai/chatStream', + 'operation_id': 'ai_chat_stream', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'workspace_id', + 'chat_request', + ], + 'required': [ + 'workspace_id', + 'chat_request', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + 'workspace_id', + ] + }, + root_map={ + 'validations': { + ('workspace_id',): { + + 'regex': { + 'pattern': r'^(?!\.)[.A-Za-z0-9_-]{1,255}$', # noqa: E501 + }, + }, + }, + 'allowed_values': { + }, + 'openapi_types': { + 'workspace_id': + (str,), + 'chat_request': + (ChatRequest,), + }, + 'attribute_map': { + 'workspace_id': 'workspaceId', + }, + 'location_map': { + 'workspace_id': 'path', + 'chat_request': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'text/event-stream' + ], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client + ) self.ai_route_endpoint = _Endpoint( settings={ 'response_type': (RouteResult,), @@ -915,6 +978,93 @@ def ai_chat_history( chat_history_request return self.ai_chat_history_endpoint.call_with_http_info(**kwargs) + def ai_chat_stream( + self, + workspace_id, + chat_request, + **kwargs + ): + """(BETA) Chat with AI # noqa: E501 + + (BETA) Combines multiple use cases such as search, create visualizations, ... # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.ai_chat_stream(workspace_id, chat_request, async_req=True) + >>> result = thread.get() + + Args: + workspace_id (str): Workspace identifier + chat_request (ChatRequest): + + Keyword Args: + _return_http_data_only (bool): response data without head status + code and headers. Default is True. + _preload_content (bool): if False, the urllib3.HTTPResponse object + will be returned without reading/decoding response data. + Default is True. + _request_timeout (int/float/tuple): 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. + Default is None. + _check_input_type (bool): specifies if type checking + should be done one the data sent to the server. + Default is True. + _check_return_type (bool): specifies if type checking + should be done one the data received from the server. + Default is True. + _spec_property_naming (bool): True if the variable names in the input data + are serialized names, as specified in the OpenAPI document. + False if the variable names in the input data + are pythonic names, e.g. snake case (default) + _content_type (str/None): force body content-type. + Default is None and content-type will be predicted by allowed + content-types and body. + _host_index (int/None): specifies the index of the server + that we want to use. + Default is read from the configuration. + _request_auths (list): set to override the auth_settings for an a single + request; this effectively ignores the authentication + in the spec for a single request. + Default is None + async_req (bool): execute request asynchronously + + Returns: + [dict] + If the method is called asynchronously, returns the request + thread. + """ + kwargs['async_req'] = kwargs.get( + 'async_req', False + ) + kwargs['_return_http_data_only'] = kwargs.get( + '_return_http_data_only', True + ) + kwargs['_preload_content'] = kwargs.get( + '_preload_content', True + ) + kwargs['_request_timeout'] = kwargs.get( + '_request_timeout', None + ) + kwargs['_check_input_type'] = kwargs.get( + '_check_input_type', True + ) + kwargs['_check_return_type'] = kwargs.get( + '_check_return_type', True + ) + kwargs['_spec_property_naming'] = kwargs.get( + '_spec_property_naming', False + ) + kwargs['_content_type'] = kwargs.get( + '_content_type') + kwargs['_host_index'] = kwargs.get('_host_index') + kwargs['_request_auths'] = kwargs.get('_request_auths', None) + kwargs['workspace_id'] = \ + workspace_id + kwargs['chat_request'] = \ + chat_request + return self.ai_chat_stream_endpoint.call_with_http_info(**kwargs) + def ai_route( self, workspace_id, diff --git a/gooddata-api-client/gooddata_api_client/apis/__init__.py b/gooddata-api-client/gooddata_api_client/apis/__init__.py index fc48741c3..312eda2a4 100644 --- a/gooddata-api-client/gooddata_api_client/apis/__init__.py +++ b/gooddata-api-client/gooddata_api_client/apis/__init__.py @@ -44,6 +44,7 @@ from gooddata_api_client.api.ldm_declarative_apis_api import LDMDeclarativeAPIsApi from gooddata_api_client.api.llm_endpoints_api import LLMEndpointsApi from gooddata_api_client.api.labels_api import LabelsApi +from gooddata_api_client.api.manage_permissions_api import ManagePermissionsApi from gooddata_api_client.api.metadata_sync_api import MetadataSyncApi from gooddata_api_client.api.metrics_api import MetricsApi from gooddata_api_client.api.notification_channels_api import NotificationChannelsApi diff --git a/gooddata-api-client/gooddata_api_client/model/absolute_date_filter_absolute_date_filter.py b/gooddata-api-client/gooddata_api_client/model/absolute_date_filter_absolute_date_filter.py index b3898a542..5dbd388ec 100644 --- a/gooddata-api-client/gooddata_api_client/model/absolute_date_filter_absolute_date_filter.py +++ b/gooddata-api-client/gooddata_api_client/model/absolute_date_filter_absolute_date_filter.py @@ -102,6 +102,7 @@ def openapi_types(): '_from': (str,), # noqa: E501 'to': (str,), # noqa: E501 'apply_on_result': (bool,), # noqa: E501 + 'local_identifier': (str,), # noqa: E501 } @cached_property @@ -114,6 +115,7 @@ def discriminator(): '_from': 'from', # noqa: E501 'to': 'to', # noqa: E501 'apply_on_result': 'applyOnResult', # noqa: E501 + 'local_identifier': 'localIdentifier', # noqa: E501 } read_only_vars = { @@ -163,6 +165,7 @@ def _from_openapi_data(cls, dataset, _from, to, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) apply_on_result (bool): [optional] # noqa: E501 + local_identifier (str): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -257,6 +260,7 @@ def __init__(self, dataset, _from, to, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) apply_on_result (bool): [optional] # noqa: E501 + local_identifier (str): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) diff --git a/gooddata-api-client/gooddata_api_client/model/chat_history_interaction.py b/gooddata-api-client/gooddata_api_client/model/chat_history_interaction.py index 5e82665f7..59ddc293d 100644 --- a/gooddata-api-client/gooddata_api_client/model/chat_history_interaction.py +++ b/gooddata-api-client/gooddata_api_client/model/chat_history_interaction.py @@ -64,6 +64,11 @@ class ChatHistoryInteraction(ModelNormal): """ allowed_values = { + ('user_feedback',): { + 'POSITIVE': "POSITIVE", + 'NEGATIVE': "NEGATIVE", + 'NONE': "NONE", + }, } validations = { @@ -103,6 +108,7 @@ def openapi_types(): 'found_objects': (FoundObjects,), # noqa: E501 'text_response': (str,), # noqa: E501 'thread_id_suffix': (str,), # noqa: E501 + 'user_feedback': (str,), # noqa: E501 } @cached_property @@ -119,6 +125,7 @@ def discriminator(): 'found_objects': 'foundObjects', # noqa: E501 'text_response': 'textResponse', # noqa: E501 'thread_id_suffix': 'threadIdSuffix', # noqa: E501 + 'user_feedback': 'userFeedback', # noqa: E501 } read_only_vars = { @@ -172,6 +179,7 @@ def _from_openapi_data(cls, chat_history_interaction_id, interaction_finished, q found_objects (FoundObjects): [optional] # noqa: E501 text_response (str): Text response for general questions.. [optional] # noqa: E501 thread_id_suffix (str): Chat History thread suffix appended to ID generated by backend. Enables more chat windows.. [optional] # noqa: E501 + user_feedback (str): User feedback.. [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -271,6 +279,7 @@ def __init__(self, chat_history_interaction_id, interaction_finished, question, found_objects (FoundObjects): [optional] # noqa: E501 text_response (str): Text response for general questions.. [optional] # noqa: E501 thread_id_suffix (str): Chat History thread suffix appended to ID generated by backend. Enables more chat windows.. [optional] # noqa: E501 + user_feedback (str): User feedback.. [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) diff --git a/gooddata-api-client/gooddata_api_client/model/chat_history_result.py b/gooddata-api-client/gooddata_api_client/model/chat_history_result.py index 00f3c986e..bb51900b6 100644 --- a/gooddata-api-client/gooddata_api_client/model/chat_history_result.py +++ b/gooddata-api-client/gooddata_api_client/model/chat_history_result.py @@ -89,6 +89,7 @@ def openapi_types(): lazy_import() return { 'interactions': ([ChatHistoryInteraction],), # noqa: E501 + 'thread_id': (str,), # noqa: E501 } @cached_property @@ -98,6 +99,7 @@ def discriminator(): attribute_map = { 'interactions': 'interactions', # noqa: E501 + 'thread_id': 'threadId', # noqa: E501 } read_only_vars = { @@ -107,11 +109,12 @@ def discriminator(): @classmethod @convert_js_args_to_python_args - def _from_openapi_data(cls, interactions, *args, **kwargs): # noqa: E501 + def _from_openapi_data(cls, interactions, thread_id, *args, **kwargs): # noqa: E501 """ChatHistoryResult - a model defined in OpenAPI Args: interactions ([ChatHistoryInteraction]): List of chat history interactions. + thread_id (str): The conversation thread ID. Keyword Args: _check_type (bool): if True, values for parameters in openapi_types @@ -176,6 +179,7 @@ def _from_openapi_data(cls, interactions, *args, **kwargs): # noqa: E501 self._visited_composed_classes = _visited_composed_classes + (self.__class__,) self.interactions = interactions + self.thread_id = thread_id for var_name, var_value in kwargs.items(): if var_name not in self.attribute_map and \ self._configuration is not None and \ @@ -196,11 +200,12 @@ def _from_openapi_data(cls, interactions, *args, **kwargs): # noqa: E501 ]) @convert_js_args_to_python_args - def __init__(self, interactions, *args, **kwargs): # noqa: E501 + def __init__(self, interactions, thread_id, *args, **kwargs): # noqa: E501 """ChatHistoryResult - a model defined in OpenAPI Args: interactions ([ChatHistoryInteraction]): List of chat history interactions. + thread_id (str): The conversation thread ID. Keyword Args: _check_type (bool): if True, values for parameters in openapi_types @@ -263,6 +268,7 @@ def __init__(self, interactions, *args, **kwargs): # noqa: E501 self._visited_composed_classes = _visited_composed_classes + (self.__class__,) self.interactions = interactions + self.thread_id = thread_id for var_name, var_value in kwargs.items(): if var_name not in self.attribute_map and \ self._configuration is not None and \ diff --git a/gooddata-api-client/gooddata_api_client/model/chat_result.py b/gooddata-api-client/gooddata_api_client/model/chat_result.py index e1e8ed057..1758ea463 100644 --- a/gooddata-api-client/gooddata_api_client/model/chat_result.py +++ b/gooddata-api-client/gooddata_api_client/model/chat_result.py @@ -92,9 +92,10 @@ def openapi_types(): """ lazy_import() return { - 'routing': (RouteResult,), # noqa: E501 + 'chat_history_interaction_id': (int,), # noqa: E501 'created_visualizations': (CreatedVisualizations,), # noqa: E501 'found_objects': (FoundObjects,), # noqa: E501 + 'routing': (RouteResult,), # noqa: E501 'text_response': (str,), # noqa: E501 'thread_id_suffix': (str,), # noqa: E501 } @@ -105,9 +106,10 @@ def discriminator(): attribute_map = { - 'routing': 'routing', # noqa: E501 + 'chat_history_interaction_id': 'chatHistoryInteractionId', # noqa: E501 'created_visualizations': 'createdVisualizations', # noqa: E501 'found_objects': 'foundObjects', # noqa: E501 + 'routing': 'routing', # noqa: E501 'text_response': 'textResponse', # noqa: E501 'thread_id_suffix': 'threadIdSuffix', # noqa: E501 } @@ -119,12 +121,9 @@ def discriminator(): @classmethod @convert_js_args_to_python_args - def _from_openapi_data(cls, routing, *args, **kwargs): # noqa: E501 + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 """ChatResult - a model defined in OpenAPI - Args: - routing (RouteResult): - Keyword Args: _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be @@ -156,8 +155,10 @@ def _from_openapi_data(cls, routing, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + chat_history_interaction_id (int): Chat History interaction ID. Unique ID for each interaction.. [optional] # noqa: E501 created_visualizations (CreatedVisualizations): [optional] # noqa: E501 found_objects (FoundObjects): [optional] # noqa: E501 + routing (RouteResult): [optional] # noqa: E501 text_response (str): Text response for general questions.. [optional] # noqa: E501 thread_id_suffix (str): Chat History thread suffix appended to ID generated by backend. Enables more chat windows.. [optional] # noqa: E501 """ @@ -191,7 +192,6 @@ def _from_openapi_data(cls, routing, *args, **kwargs): # noqa: E501 self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) - self.routing = routing for var_name, var_value in kwargs.items(): if var_name not in self.attribute_map and \ self._configuration is not None and \ @@ -212,12 +212,9 @@ def _from_openapi_data(cls, routing, *args, **kwargs): # noqa: E501 ]) @convert_js_args_to_python_args - def __init__(self, routing, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """ChatResult - a model defined in OpenAPI - Args: - routing (RouteResult): - Keyword Args: _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be @@ -249,8 +246,10 @@ def __init__(self, routing, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + chat_history_interaction_id (int): Chat History interaction ID. Unique ID for each interaction.. [optional] # noqa: E501 created_visualizations (CreatedVisualizations): [optional] # noqa: E501 found_objects (FoundObjects): [optional] # noqa: E501 + routing (RouteResult): [optional] # noqa: E501 text_response (str): Text response for general questions.. [optional] # noqa: E501 thread_id_suffix (str): Chat History thread suffix appended to ID generated by backend. Enables more chat windows.. [optional] # noqa: E501 """ @@ -282,7 +281,6 @@ def __init__(self, routing, *args, **kwargs): # noqa: E501 self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) - self.routing = routing for var_name, var_value in kwargs.items(): if var_name not in self.attribute_map and \ self._configuration is not None and \ diff --git a/gooddata-api-client/gooddata_api_client/model/comparison_measure_value_filter_comparison_measure_value_filter.py b/gooddata-api-client/gooddata_api_client/model/comparison_measure_value_filter_comparison_measure_value_filter.py index 614fd2410..55c34a0c9 100644 --- a/gooddata-api-client/gooddata_api_client/model/comparison_measure_value_filter_comparison_measure_value_filter.py +++ b/gooddata-api-client/gooddata_api_client/model/comparison_measure_value_filter_comparison_measure_value_filter.py @@ -100,6 +100,7 @@ def openapi_types(): 'operator': (str,), # noqa: E501 'value': (float,), # noqa: E501 'apply_on_result': (bool,), # noqa: E501 + 'local_identifier': (str,), # noqa: E501 'treat_null_values_as': (float,), # noqa: E501 } @@ -113,6 +114,7 @@ def discriminator(): 'operator': 'operator', # noqa: E501 'value': 'value', # noqa: E501 'apply_on_result': 'applyOnResult', # noqa: E501 + 'local_identifier': 'localIdentifier', # noqa: E501 'treat_null_values_as': 'treatNullValuesAs', # noqa: E501 } @@ -163,6 +165,7 @@ def _from_openapi_data(cls, measure, operator, value, *args, **kwargs): # noqa: through its discriminator because we passed in _visited_composed_classes = (Animal,) apply_on_result (bool): [optional] # noqa: E501 + local_identifier (str): [optional] # noqa: E501 treat_null_values_as (float): [optional] # noqa: E501 """ @@ -258,6 +261,7 @@ def __init__(self, measure, operator, value, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) apply_on_result (bool): [optional] # noqa: E501 + local_identifier (str): [optional] # noqa: E501 treat_null_values_as (float): [optional] # noqa: E501 """ diff --git a/gooddata-api-client/gooddata_api_client/model/date_absolute_filter.py b/gooddata-api-client/gooddata_api_client/model/date_absolute_filter.py index 8e46d1ba4..68958cfae 100644 --- a/gooddata-api-client/gooddata_api_client/model/date_absolute_filter.py +++ b/gooddata-api-client/gooddata_api_client/model/date_absolute_filter.py @@ -90,9 +90,9 @@ def openapi_types(): """ lazy_import() return { - 'using': (str,), # noqa: E501 '_from': (str,), # noqa: E501 'to': (str,), # noqa: E501 + 'using': (str,), # noqa: E501 } @cached_property @@ -101,9 +101,9 @@ def discriminator(): attribute_map = { - 'using': 'using', # noqa: E501 '_from': 'from', # noqa: E501 'to': 'to', # noqa: E501 + 'using': 'using', # noqa: E501 } read_only_vars = { @@ -115,6 +115,8 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 """DateAbsoluteFilter - a model defined in OpenAPI Keyword Args: + _from (str): + to (str): using (str): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be @@ -146,8 +148,6 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - _from (str): [optional] # noqa: E501 - to (str): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -221,6 +221,8 @@ def __init__(self, *args, **kwargs): # noqa: E501 """DateAbsoluteFilter - a model defined in OpenAPI Keyword Args: + _from (str): + to (str): using (str): _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be @@ -252,8 +254,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - _from (str): [optional] # noqa: E501 - to (str): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) diff --git a/gooddata-api-client/gooddata_api_client/model/declarative_data_source.py b/gooddata-api-client/gooddata_api_client/model/declarative_data_source.py index e810293c7..7d89263d8 100644 --- a/gooddata-api-client/gooddata_api_client/model/declarative_data_source.py +++ b/gooddata-api-client/gooddata_api_client/model/declarative_data_source.py @@ -86,6 +86,7 @@ class DeclarativeDataSource(ModelNormal): 'SINGLESTORE': "SINGLESTORE", 'MOTHERDUCK': "MOTHERDUCK", 'FLIGHTRPC': "FLIGHTRPC", + 'FLEXCONNECT': "FLEXCONNECT", }, ('cache_strategy',): { 'ALWAYS': "ALWAYS", @@ -105,6 +106,12 @@ class DeclarativeDataSource(ModelNormal): ('schema',): { 'max_length': 255, }, + ('client_id',): { + 'max_length': 255, + }, + ('client_secret',): { + 'max_length': 255, + }, ('password',): { 'max_length': 255, }, @@ -153,6 +160,8 @@ def openapi_types(): 'schema': (str,), # noqa: E501 'type': (str,), # noqa: E501 'cache_strategy': (str,), # noqa: E501 + 'client_id': (str,), # noqa: E501 + 'client_secret': (str,), # noqa: E501 'decoded_parameters': ([Parameter],), # noqa: E501 'parameters': ([Parameter],), # noqa: E501 'password': (str,), # noqa: E501 @@ -175,6 +184,8 @@ def discriminator(): 'schema': 'schema', # noqa: E501 'type': 'type', # noqa: E501 'cache_strategy': 'cacheStrategy', # noqa: E501 + 'client_id': 'clientId', # noqa: E501 + 'client_secret': 'clientSecret', # noqa: E501 'decoded_parameters': 'decodedParameters', # noqa: E501 'parameters': 'parameters', # noqa: E501 'password': 'password', # noqa: E501 @@ -234,6 +245,8 @@ def _from_openapi_data(cls, id, name, schema, type, *args, **kwargs): # noqa: E through its discriminator because we passed in _visited_composed_classes = (Animal,) cache_strategy (str): Determines how the results coming from a particular datasource should be cached. - ALWAYS: The results from the datasource should be cached normally (the default). - NEVER: The results from the datasource should never be cached.. [optional] # noqa: E501 + client_id (str): Id of client with permission to connect to the data source.. [optional] # noqa: E501 + client_secret (str): The client secret to use to connect to the database providing the data for the data source.. [optional] # noqa: E501 decoded_parameters ([Parameter]): [optional] # noqa: E501 parameters ([Parameter]): [optional] # noqa: E501 password (str): Password for the data-source user, property is never returned back.. [optional] # noqa: E501 @@ -339,6 +352,8 @@ def __init__(self, id, name, schema, type, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) cache_strategy (str): Determines how the results coming from a particular datasource should be cached. - ALWAYS: The results from the datasource should be cached normally (the default). - NEVER: The results from the datasource should never be cached.. [optional] # noqa: E501 + client_id (str): Id of client with permission to connect to the data source.. [optional] # noqa: E501 + client_secret (str): The client secret to use to connect to the database providing the data for the data source.. [optional] # noqa: E501 decoded_parameters ([Parameter]): [optional] # noqa: E501 parameters ([Parameter]): [optional] # noqa: E501 password (str): Password for the data-source user, property is never returned back.. [optional] # noqa: E501 diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_in_attributes_specification.py b/gooddata-api-client/gooddata_api_client/model/declarative_identity_provider.py similarity index 72% rename from gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_in_attributes_specification.py rename to gooddata-api-client/gooddata_api_client/model/declarative_identity_provider.py index f94b24aa4..aaf620927 100644 --- a/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_in_attributes_specification.py +++ b/gooddata-api-client/gooddata_api_client/model/declarative_identity_provider.py @@ -30,14 +30,8 @@ from gooddata_api_client.exceptions import ApiAttributeError -def lazy_import(): - from gooddata_api_client.model.oidc_idp_specification import OidcIdpSpecification - from gooddata_api_client.model.saml_idp_specification import SamlIdpSpecification - globals()['OidcIdpSpecification'] = OidcIdpSpecification - globals()['SamlIdpSpecification'] = SamlIdpSpecification - -class JsonApiIdentityProviderInAttributesSpecification(ModelComposed): +class DeclarativeIdentityProvider(ModelNormal): """NOTE: This class is auto generated by OpenAPI Generator. Ref: https://openapi-generator.tech @@ -65,8 +59,12 @@ class JsonApiIdentityProviderInAttributesSpecification(ModelComposed): } validations = { - ('metadata',): { - 'max_length': 15000, + ('id',): { + 'regex': { + 'pattern': r'^(?!\.)[.A-Za-z0-9_-]{1,255}$', # noqa: E501 + }, + }, + ('custom_claim_mapping',): { }, ('oauth_client_id',): { 'max_length': 255, @@ -80,8 +78,8 @@ class JsonApiIdentityProviderInAttributesSpecification(ModelComposed): ('oauth_issuer_location',): { 'max_length': 255, }, - ('oauth_subject_id_claim',): { - 'max_length': 255, + ('saml_metadata',): { + 'max_length': 15000, }, } @@ -91,7 +89,6 @@ def additional_properties_type(): This must be a method because a model may have properties that are of type self, this must run after the class is loaded """ - lazy_import() return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False @@ -106,14 +103,15 @@ def openapi_types(): openapi_types (dict): The key is attribute name and the value is attribute type. """ - lazy_import() return { - 'metadata': (str,), # noqa: E501 + 'id': (str,), # noqa: E501 + 'custom_claim_mapping': ({str: (str,)},), # noqa: E501 + 'identifiers': ([str],), # noqa: E501 'oauth_client_id': (str,), # noqa: E501 'oauth_client_secret': (str,), # noqa: E501 'oauth_issuer_id': (str,), # noqa: E501 'oauth_issuer_location': (str,), # noqa: E501 - 'oauth_subject_id_claim': (str,), # noqa: E501 + 'saml_metadata': (str,), # noqa: E501 } @cached_property @@ -122,21 +120,28 @@ def discriminator(): attribute_map = { - 'metadata': 'metadata', # noqa: E501 + 'id': 'id', # noqa: E501 + 'custom_claim_mapping': 'customClaimMapping', # noqa: E501 + 'identifiers': 'identifiers', # noqa: E501 'oauth_client_id': 'oauthClientId', # noqa: E501 'oauth_client_secret': 'oauthClientSecret', # noqa: E501 'oauth_issuer_id': 'oauthIssuerId', # noqa: E501 'oauth_issuer_location': 'oauthIssuerLocation', # noqa: E501 - 'oauth_subject_id_claim': 'oauthSubjectIdClaim', # noqa: E501 + 'saml_metadata': 'samlMetadata', # noqa: E501 } read_only_vars = { } + _composed_schemas = {} + @classmethod @convert_js_args_to_python_args - def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 - """JsonApiIdentityProviderInAttributesSpecification - a model defined in OpenAPI + def _from_openapi_data(cls, id, *args, **kwargs): # noqa: E501 + """DeclarativeIdentityProvider - a model defined in OpenAPI + + Args: + id (str): FilterView object ID. Keyword Args: _check_type (bool): if True, values for parameters in openapi_types @@ -169,16 +174,17 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - metadata (str): Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider.. [optional] # noqa: E501 - oauth_client_id (str): [optional] # noqa: E501 - oauth_client_secret (str): [optional] # noqa: E501 + custom_claim_mapping ({str: (str,)}): Map of custom claim overrides. To be used when your Idp does not provide default claims (sub, email, name, given_name, family_name, urn.gooddata.user_groups [optional]). Define the key pair for the claim you wish to override, where the key is the default name of the attribute and the value is your custom name for the given attribute.. [optional] # noqa: E501 + identifiers ([str]): List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory.. [optional] # noqa: E501 + oauth_client_id (str): The OAuth client id of your OIDC provider. This field is mandatory for OIDC IdP.. [optional] # noqa: E501 + oauth_client_secret (str): The OAuth client secret of your OIDC provider. This field is mandatory for OIDC IdP.. [optional] # noqa: E501 oauth_issuer_id (str): Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider.. [optional] # noqa: E501 - oauth_issuer_location (str): [optional] # noqa: E501 - oauth_subject_id_claim (str): Any string identifying the claim in ID token, that should be used for user identification. The default value is 'sub'.. [optional] # noqa: E501 + oauth_issuer_location (str): The location of your OIDC provider. This field is mandatory for OIDC IdP.. [optional] # noqa: E501 + saml_metadata (str): Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider. This field is mandatory for SAML IdP.. [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) - _spec_property_naming = kwargs.pop('_spec_property_naming', False) + _spec_property_naming = kwargs.pop('_spec_property_naming', True) _path_to_item = kwargs.pop('_path_to_item', ()) _configuration = kwargs.pop('_configuration', None) _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) @@ -206,29 +212,15 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) - constant_args = { - '_check_type': _check_type, - '_path_to_item': _path_to_item, - '_spec_property_naming': _spec_property_naming, - '_configuration': _configuration, - '_visited_composed_classes': self._visited_composed_classes, - } - composed_info = validate_get_composed_info( - constant_args, kwargs, self) - self._composed_instances = composed_info[0] - self._var_name_to_model_instances = composed_info[1] - self._additional_properties_model_instances = composed_info[2] - discarded_args = composed_info[3] - + self.id = id for var_name, var_value in kwargs.items(): - if var_name in discarded_args and \ + if var_name not in self.attribute_map and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - self._additional_properties_model_instances: + self.additional_properties_type is None: # discard variable. continue setattr(self, var_name, var_value) - return self required_properties = set([ @@ -238,14 +230,14 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 '_path_to_item', '_configuration', '_visited_composed_classes', - '_composed_instances', - '_var_name_to_model_instances', - '_additional_properties_model_instances', ]) @convert_js_args_to_python_args - def __init__(self, *args, **kwargs): # noqa: E501 - """JsonApiIdentityProviderInAttributesSpecification - a model defined in OpenAPI + def __init__(self, id, *args, **kwargs): # noqa: E501 + """DeclarativeIdentityProvider - a model defined in OpenAPI + + Args: + id (str): FilterView object ID. Keyword Args: _check_type (bool): if True, values for parameters in openapi_types @@ -278,12 +270,13 @@ def __init__(self, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - metadata (str): Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider.. [optional] # noqa: E501 - oauth_client_id (str): [optional] # noqa: E501 - oauth_client_secret (str): [optional] # noqa: E501 + custom_claim_mapping ({str: (str,)}): Map of custom claim overrides. To be used when your Idp does not provide default claims (sub, email, name, given_name, family_name, urn.gooddata.user_groups [optional]). Define the key pair for the claim you wish to override, where the key is the default name of the attribute and the value is your custom name for the given attribute.. [optional] # noqa: E501 + identifiers ([str]): List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory.. [optional] # noqa: E501 + oauth_client_id (str): The OAuth client id of your OIDC provider. This field is mandatory for OIDC IdP.. [optional] # noqa: E501 + oauth_client_secret (str): The OAuth client secret of your OIDC provider. This field is mandatory for OIDC IdP.. [optional] # noqa: E501 oauth_issuer_id (str): Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider.. [optional] # noqa: E501 - oauth_issuer_location (str): [optional] # noqa: E501 - oauth_subject_id_claim (str): Any string identifying the claim in ID token, that should be used for user identification. The default value is 'sub'.. [optional] # noqa: E501 + oauth_issuer_location (str): The location of your OIDC provider. This field is mandatory for OIDC IdP.. [optional] # noqa: E501 + saml_metadata (str): Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider. This field is mandatory for SAML IdP.. [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -313,49 +306,15 @@ def __init__(self, *args, **kwargs): # noqa: E501 self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) - constant_args = { - '_check_type': _check_type, - '_path_to_item': _path_to_item, - '_spec_property_naming': _spec_property_naming, - '_configuration': _configuration, - '_visited_composed_classes': self._visited_composed_classes, - } - composed_info = validate_get_composed_info( - constant_args, kwargs, self) - self._composed_instances = composed_info[0] - self._var_name_to_model_instances = composed_info[1] - self._additional_properties_model_instances = composed_info[2] - discarded_args = composed_info[3] - + self.id = id for var_name, var_value in kwargs.items(): - if var_name in discarded_args and \ + if var_name not in self.attribute_map and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - self._additional_properties_model_instances: + self.additional_properties_type is None: # discard variable. continue setattr(self, var_name, var_value) if var_name in self.read_only_vars: raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " f"class with read only attributes.") - - @cached_property - def _composed_schemas(): - # we need this here to make our import statements work - # we must store _composed_schemas in here so the code is only run - # when we invoke this method. If we kept this at the class - # level we would get an error because the class level - # code would be run when this module is imported, and these composed - # classes don't exist yet because their module has not finished - # loading - lazy_import() - return { - 'anyOf': [ - ], - 'allOf': [ - ], - 'oneOf': [ - OidcIdpSpecification, - SamlIdpSpecification, - ], - } diff --git a/gooddata-api-client/gooddata_api_client/model/declarative_notification_channel.py b/gooddata-api-client/gooddata_api_client/model/declarative_notification_channel.py index 1ca790178..9d611ff7c 100644 --- a/gooddata-api-client/gooddata_api_client/model/declarative_notification_channel.py +++ b/gooddata-api-client/gooddata_api_client/model/declarative_notification_channel.py @@ -69,6 +69,7 @@ class DeclarativeNotificationChannel(ModelNormal): 'WEBHOOK': "WEBHOOK", 'SMTP': "SMTP", 'DEFAULT_SMTP': "DEFAULT_SMTP", + 'IN_PLATFORM': "IN_PLATFORM", }, } diff --git a/gooddata-api-client/gooddata_api_client/model/declarative_notification_channel_destination.py b/gooddata-api-client/gooddata_api_client/model/declarative_notification_channel_destination.py index a015f97b8..4718770e6 100644 --- a/gooddata-api-client/gooddata_api_client/model/declarative_notification_channel_destination.py +++ b/gooddata-api-client/gooddata_api_client/model/declarative_notification_channel_destination.py @@ -32,9 +32,11 @@ def lazy_import(): from gooddata_api_client.model.default_smtp import DefaultSmtp + from gooddata_api_client.model.in_platform import InPlatform from gooddata_api_client.model.smtp import Smtp from gooddata_api_client.model.webhook import Webhook globals()['DefaultSmtp'] = DefaultSmtp + globals()['InPlatform'] = InPlatform globals()['Smtp'] = Smtp globals()['Webhook'] = Webhook @@ -76,11 +78,6 @@ class DeclarativeNotificationChannelDestination(ModelComposed): } validations = { - ('from_email',): { - 'regex': { - 'pattern': r'(?:[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)])', # noqa: E501 - }, - }, ('token',): { 'max_length': 10000, }, @@ -185,7 +182,7 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - from_email (str): E-mail address to send notifications from.. [optional] if omitted the server will use the default value of "no-reply@gooddata.com" # noqa: E501 + from_email (str): E-mail address to send notifications from.. [optional] if omitted the server will use the default value of no-reply@gooddata.com # noqa: E501 from_email_name (str): An optional e-mail name to send notifications from.. [optional] if omitted the server will use the default value of "GoodData" # noqa: E501 host (str): The SMTP server address.. [optional] # noqa: E501 password (str): The SMTP server password.. [optional] # noqa: E501 @@ -298,7 +295,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - from_email (str): E-mail address to send notifications from.. [optional] if omitted the server will use the default value of "no-reply@gooddata.com" # noqa: E501 + from_email (str): E-mail address to send notifications from.. [optional] if omitted the server will use the default value of no-reply@gooddata.com # noqa: E501 from_email_name (str): An optional e-mail name to send notifications from.. [optional] if omitted the server will use the default value of "GoodData" # noqa: E501 host (str): The SMTP server address.. [optional] # noqa: E501 password (str): The SMTP server password.. [optional] # noqa: E501 @@ -380,6 +377,7 @@ def _composed_schemas(): ], 'oneOf': [ DefaultSmtp, + InPlatform, Smtp, Webhook, ], diff --git a/gooddata-api-client/gooddata_api_client/model/declarative_organization.py b/gooddata-api-client/gooddata_api_client/model/declarative_organization.py index d68eeec1a..2d36ae2b1 100644 --- a/gooddata-api-client/gooddata_api_client/model/declarative_organization.py +++ b/gooddata-api-client/gooddata_api_client/model/declarative_organization.py @@ -32,6 +32,7 @@ def lazy_import(): from gooddata_api_client.model.declarative_data_source import DeclarativeDataSource + from gooddata_api_client.model.declarative_identity_provider import DeclarativeIdentityProvider from gooddata_api_client.model.declarative_jwk import DeclarativeJwk from gooddata_api_client.model.declarative_notification_channel import DeclarativeNotificationChannel from gooddata_api_client.model.declarative_organization_info import DeclarativeOrganizationInfo @@ -40,6 +41,7 @@ def lazy_import(): from gooddata_api_client.model.declarative_workspace import DeclarativeWorkspace from gooddata_api_client.model.declarative_workspace_data_filter import DeclarativeWorkspaceDataFilter globals()['DeclarativeDataSource'] = DeclarativeDataSource + globals()['DeclarativeIdentityProvider'] = DeclarativeIdentityProvider globals()['DeclarativeJwk'] = DeclarativeJwk globals()['DeclarativeNotificationChannel'] = DeclarativeNotificationChannel globals()['DeclarativeOrganizationInfo'] = DeclarativeOrganizationInfo @@ -104,6 +106,7 @@ def openapi_types(): return { 'organization': (DeclarativeOrganizationInfo,), # noqa: E501 'data_sources': ([DeclarativeDataSource],), # noqa: E501 + 'identity_providers': ([DeclarativeIdentityProvider],), # noqa: E501 'jwks': ([DeclarativeJwk],), # noqa: E501 'notification_channels': ([DeclarativeNotificationChannel],), # noqa: E501 'user_groups': ([DeclarativeUserGroup],), # noqa: E501 @@ -120,6 +123,7 @@ def discriminator(): attribute_map = { 'organization': 'organization', # noqa: E501 'data_sources': 'dataSources', # noqa: E501 + 'identity_providers': 'identityProviders', # noqa: E501 'jwks': 'jwks', # noqa: E501 'notification_channels': 'notificationChannels', # noqa: E501 'user_groups': 'userGroups', # noqa: E501 @@ -173,6 +177,7 @@ def _from_openapi_data(cls, organization, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) data_sources ([DeclarativeDataSource]): [optional] # noqa: E501 + identity_providers ([DeclarativeIdentityProvider]): [optional] # noqa: E501 jwks ([DeclarativeJwk]): [optional] # noqa: E501 notification_channels ([DeclarativeNotificationChannel]): [optional] # noqa: E501 user_groups ([DeclarativeUserGroup]): [optional] # noqa: E501 @@ -269,6 +274,7 @@ def __init__(self, organization, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) data_sources ([DeclarativeDataSource]): [optional] # noqa: E501 + identity_providers ([DeclarativeIdentityProvider]): [optional] # noqa: E501 jwks ([DeclarativeJwk]): [optional] # noqa: E501 notification_channels ([DeclarativeNotificationChannel]): [optional] # noqa: E501 user_groups ([DeclarativeUserGroup]): [optional] # noqa: E501 diff --git a/gooddata-api-client/gooddata_api_client/model/declarative_organization_info.py b/gooddata-api-client/gooddata_api_client/model/declarative_organization_info.py index ac2012de6..0eaf0c4f6 100644 --- a/gooddata-api-client/gooddata_api_client/model/declarative_organization_info.py +++ b/gooddata-api-client/gooddata_api_client/model/declarative_organization_info.py @@ -133,6 +133,7 @@ def openapi_types(): 'id': (str,), # noqa: E501 'name': (str,), # noqa: E501 'permissions': ([DeclarativeOrganizationPermission],), # noqa: E501 + 'allowed_origins': ([str],), # noqa: E501 'color_palettes': ([DeclarativeColorPalette],), # noqa: E501 'csp_directives': ([DeclarativeCspDirective],), # noqa: E501 'early_access': (str,), # noqa: E501 @@ -158,6 +159,7 @@ def discriminator(): 'id': 'id', # noqa: E501 'name': 'name', # noqa: E501 'permissions': 'permissions', # noqa: E501 + 'allowed_origins': 'allowedOrigins', # noqa: E501 'color_palettes': 'colorPalettes', # noqa: E501 'csp_directives': 'cspDirectives', # noqa: E501 'early_access': 'earlyAccess', # noqa: E501 @@ -220,6 +222,7 @@ def _from_openapi_data(cls, hostname, id, name, permissions, *args, **kwargs): Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + allowed_origins ([str]): [optional] # noqa: E501 color_palettes ([DeclarativeColorPalette]): A list of color palettes.. [optional] # noqa: E501 csp_directives ([DeclarativeCspDirective]): A list of CSP directives.. [optional] # noqa: E501 early_access (str): Early access defined on level Organization. [optional] # noqa: E501 @@ -328,6 +331,7 @@ def __init__(self, hostname, id, name, permissions, *args, **kwargs): # noqa: E Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + allowed_origins ([str]): [optional] # noqa: E501 color_palettes ([DeclarativeColorPalette]): A list of color palettes.. [optional] # noqa: E501 csp_directives ([DeclarativeCspDirective]): A list of CSP directives.. [optional] # noqa: E501 early_access (str): Early access defined on level Organization. [optional] # noqa: E501 diff --git a/gooddata-api-client/gooddata_api_client/model/default_smtp.py b/gooddata-api-client/gooddata_api_client/model/default_smtp.py index bcc29533b..5d14c64aa 100644 --- a/gooddata-api-client/gooddata_api_client/model/default_smtp.py +++ b/gooddata-api-client/gooddata_api_client/model/default_smtp.py @@ -66,11 +66,6 @@ class DefaultSmtp(ModelComposed): } validations = { - ('from_email',): { - 'regex': { - 'pattern': r'(?:[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)])', # noqa: E501 - }, - }, } @cached_property @@ -152,7 +147,7 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - from_email (str): E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead.. [optional] if omitted the server will use the default value of "no-reply@gooddata.com" # noqa: E501 + from_email (str): E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead.. [optional] if omitted the server will use the default value of no-reply@gooddata.com # noqa: E501 from_email_name (str): An optional e-mail name to send notifications from. Currently this does not have any effect. E-mail from name 'GoodData' is used instead.. [optional] if omitted the server will use the default value of "GoodData" # noqa: E501 """ @@ -259,7 +254,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - from_email (str): E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead.. [optional] if omitted the server will use the default value of "no-reply@gooddata.com" # noqa: E501 + from_email (str): E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead.. [optional] if omitted the server will use the default value of no-reply@gooddata.com # noqa: E501 from_email_name (str): An optional e-mail name to send notifications from. Currently this does not have any effect. E-mail from name 'GoodData' is used instead.. [optional] if omitted the server will use the default value of "GoodData" # noqa: E501 """ diff --git a/gooddata-api-client/gooddata_api_client/model/default_smtp_all_of.py b/gooddata-api-client/gooddata_api_client/model/default_smtp_all_of.py index 64faad2c1..a9f19a906 100644 --- a/gooddata-api-client/gooddata_api_client/model/default_smtp_all_of.py +++ b/gooddata-api-client/gooddata_api_client/model/default_smtp_all_of.py @@ -62,11 +62,6 @@ class DefaultSmtpAllOf(ModelNormal): } validations = { - ('from_email',): { - 'regex': { - 'pattern': r'(?:[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)])', # noqa: E501 - }, - }, } @cached_property @@ -147,7 +142,7 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - from_email (str): E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead.. [optional] if omitted the server will use the default value of "no-reply@gooddata.com" # noqa: E501 + from_email (str): E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead.. [optional] if omitted the server will use the default value of no-reply@gooddata.com # noqa: E501 from_email_name (str): An optional e-mail name to send notifications from. Currently this does not have any effect. E-mail from name 'GoodData' is used instead.. [optional] if omitted the server will use the default value of "GoodData" # noqa: E501 type (str): The destination type.. [optional] if omitted the server will use the default value of "DEFAULT_SMTP" # noqa: E501 """ @@ -235,7 +230,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - from_email (str): E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead.. [optional] if omitted the server will use the default value of "no-reply@gooddata.com" # noqa: E501 + from_email (str): E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead.. [optional] if omitted the server will use the default value of no-reply@gooddata.com # noqa: E501 from_email_name (str): An optional e-mail name to send notifications from. Currently this does not have any effect. E-mail from name 'GoodData' is used instead.. [optional] if omitted the server will use the default value of "GoodData" # noqa: E501 type (str): The destination type.. [optional] if omitted the server will use the default value of "DEFAULT_SMTP" # noqa: E501 """ diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_patch_attributes.py b/gooddata-api-client/gooddata_api_client/model/in_platform.py similarity index 79% rename from gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_patch_attributes.py rename to gooddata-api-client/gooddata_api_client/model/in_platform.py index 30eec6145..12b64632a 100644 --- a/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_patch_attributes.py +++ b/gooddata-api-client/gooddata_api_client/model/in_platform.py @@ -31,11 +31,11 @@ def lazy_import(): - from gooddata_api_client.model.json_api_identity_provider_in_attributes_specification import JsonApiIdentityProviderInAttributesSpecification - globals()['JsonApiIdentityProviderInAttributesSpecification'] = JsonApiIdentityProviderInAttributesSpecification + from gooddata_api_client.model.in_platform_all_of import InPlatformAllOf + globals()['InPlatformAllOf'] = InPlatformAllOf -class JsonApiIdentityProviderPatchAttributes(ModelNormal): +class InPlatform(ModelComposed): """NOTE: This class is auto generated by OpenAPI Generator. Ref: https://openapi-generator.tech @@ -61,8 +61,7 @@ class JsonApiIdentityProviderPatchAttributes(ModelNormal): allowed_values = { ('type',): { - 'SAML': "SAML", - 'OIDC': "OIDC", + 'IN_PLATFORM': "IN_PLATFORM", }, } @@ -92,8 +91,6 @@ def openapi_types(): """ lazy_import() return { - 'identifiers': ([str],), # noqa: E501 - 'specification': (JsonApiIdentityProviderInAttributesSpecification,), # noqa: E501 'type': (str,), # noqa: E501 } @@ -103,22 +100,19 @@ def discriminator(): attribute_map = { - 'identifiers': 'identifiers', # noqa: E501 - 'specification': 'specification', # noqa: E501 'type': 'type', # noqa: E501 } read_only_vars = { } - _composed_schemas = {} - @classmethod @convert_js_args_to_python_args def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 - """JsonApiIdentityProviderPatchAttributes - a model defined in OpenAPI + """InPlatform - a model defined in OpenAPI Keyword Args: + type (str): The destination type.. defaults to "IN_PLATFORM", must be one of ["IN_PLATFORM", ] # noqa: E501 _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -149,13 +143,11 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - identifiers ([str]): List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory.. [optional] # noqa: E501 - specification (JsonApiIdentityProviderInAttributesSpecification): [optional] # noqa: E501 - type (str): Type of the identity provider.. [optional] # noqa: E501 """ + type = kwargs.get('type', "IN_PLATFORM") _check_type = kwargs.pop('_check_type', True) - _spec_property_naming = kwargs.pop('_spec_property_naming', True) + _spec_property_naming = kwargs.pop('_spec_property_naming', False) _path_to_item = kwargs.pop('_path_to_item', ()) _configuration = kwargs.pop('_configuration', None) _visited_composed_classes = kwargs.pop('_visited_composed_classes', ()) @@ -183,14 +175,29 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + for var_name, var_value in kwargs.items(): - if var_name not in self.attribute_map and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - self.additional_properties_type is None: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) + return self required_properties = set([ @@ -200,13 +207,17 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 '_path_to_item', '_configuration', '_visited_composed_classes', + '_composed_instances', + '_var_name_to_model_instances', + '_additional_properties_model_instances', ]) @convert_js_args_to_python_args def __init__(self, *args, **kwargs): # noqa: E501 - """JsonApiIdentityProviderPatchAttributes - a model defined in OpenAPI + """InPlatform - a model defined in OpenAPI Keyword Args: + type (str): The destination type.. defaults to "IN_PLATFORM", must be one of ["IN_PLATFORM", ] # noqa: E501 _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be raised if the wrong type is input. @@ -237,11 +248,9 @@ def __init__(self, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - identifiers ([str]): List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory.. [optional] # noqa: E501 - specification (JsonApiIdentityProviderInAttributesSpecification): [optional] # noqa: E501 - type (str): Type of the identity provider.. [optional] # noqa: E501 """ + type = kwargs.get('type', "IN_PLATFORM") _check_type = kwargs.pop('_check_type', True) _spec_property_naming = kwargs.pop('_spec_property_naming', False) _path_to_item = kwargs.pop('_path_to_item', ()) @@ -269,14 +278,48 @@ def __init__(self, *args, **kwargs): # noqa: E501 self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) + constant_args = { + '_check_type': _check_type, + '_path_to_item': _path_to_item, + '_spec_property_naming': _spec_property_naming, + '_configuration': _configuration, + '_visited_composed_classes': self._visited_composed_classes, + } + composed_info = validate_get_composed_info( + constant_args, kwargs, self) + self._composed_instances = composed_info[0] + self._var_name_to_model_instances = composed_info[1] + self._additional_properties_model_instances = composed_info[2] + discarded_args = composed_info[3] + for var_name, var_value in kwargs.items(): - if var_name not in self.attribute_map and \ + if var_name in discarded_args and \ self._configuration is not None and \ self._configuration.discard_unknown_keys and \ - self.additional_properties_type is None: + self._additional_properties_model_instances: # discard variable. continue setattr(self, var_name, var_value) if var_name in self.read_only_vars: raise ApiAttributeError(f"`{var_name}` is a read-only attribute. Use `from_openapi_data` to instantiate " f"class with read only attributes.") + + @cached_property + def _composed_schemas(): + # we need this here to make our import statements work + # we must store _composed_schemas in here so the code is only run + # when we invoke this method. If we kept this at the class + # level we would get an error because the class level + # code would be run when this module is imported, and these composed + # classes don't exist yet because their module has not finished + # loading + lazy_import() + return { + 'anyOf': [ + ], + 'allOf': [ + InPlatformAllOf, + ], + 'oneOf': [ + ], + } diff --git a/gooddata-api-client/gooddata_api_client/model/saml_idp_specification.py b/gooddata-api-client/gooddata_api_client/model/in_platform_all_of.py similarity index 91% rename from gooddata-api-client/gooddata_api_client/model/saml_idp_specification.py rename to gooddata-api-client/gooddata_api_client/model/in_platform_all_of.py index f45c8e14d..e2c0440d0 100644 --- a/gooddata-api-client/gooddata_api_client/model/saml_idp_specification.py +++ b/gooddata-api-client/gooddata_api_client/model/in_platform_all_of.py @@ -31,7 +31,7 @@ -class SamlIdpSpecification(ModelNormal): +class InPlatformAllOf(ModelNormal): """NOTE: This class is auto generated by OpenAPI Generator. Ref: https://openapi-generator.tech @@ -56,12 +56,12 @@ class SamlIdpSpecification(ModelNormal): """ allowed_values = { + ('type',): { + 'IN_PLATFORM': "IN_PLATFORM", + }, } validations = { - ('metadata',): { - 'max_length': 15000, - }, } @cached_property @@ -85,7 +85,7 @@ def openapi_types(): and the value is attribute type. """ return { - 'metadata': (str,), # noqa: E501 + 'type': (str,), # noqa: E501 } @cached_property @@ -94,7 +94,7 @@ def discriminator(): attribute_map = { - 'metadata': 'metadata', # noqa: E501 + 'type': 'type', # noqa: E501 } read_only_vars = { @@ -104,11 +104,8 @@ def discriminator(): @classmethod @convert_js_args_to_python_args - def _from_openapi_data(cls, metadata, *args, **kwargs): # noqa: E501 - """SamlIdpSpecification - a model defined in OpenAPI - - Args: - metadata (str): Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider. + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """InPlatformAllOf - a model defined in OpenAPI Keyword Args: _check_type (bool): if True, values for parameters in openapi_types @@ -141,6 +138,7 @@ def _from_openapi_data(cls, metadata, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + type (str): The destination type.. [optional] if omitted the server will use the default value of "IN_PLATFORM" # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -172,7 +170,6 @@ def _from_openapi_data(cls, metadata, *args, **kwargs): # noqa: E501 self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) - self.metadata = metadata for var_name, var_value in kwargs.items(): if var_name not in self.attribute_map and \ self._configuration is not None and \ @@ -193,11 +190,8 @@ def _from_openapi_data(cls, metadata, *args, **kwargs): # noqa: E501 ]) @convert_js_args_to_python_args - def __init__(self, metadata, *args, **kwargs): # noqa: E501 - """SamlIdpSpecification - a model defined in OpenAPI - - Args: - metadata (str): Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider. + def __init__(self, *args, **kwargs): # noqa: E501 + """InPlatformAllOf - a model defined in OpenAPI Keyword Args: _check_type (bool): if True, values for parameters in openapi_types @@ -230,6 +224,7 @@ def __init__(self, metadata, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + type (str): The destination type.. [optional] if omitted the server will use the default value of "IN_PLATFORM" # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -259,7 +254,6 @@ def __init__(self, metadata, *args, **kwargs): # noqa: E501 self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) - self.metadata = metadata for var_name, var_value in kwargs.items(): if var_name not in self.attribute_map and \ self._configuration is not None and \ diff --git a/gooddata-api-client/gooddata_api_client/model/inline_filter_definition_inline.py b/gooddata-api-client/gooddata_api_client/model/inline_filter_definition_inline.py index 79417e89e..bbc6ade0f 100644 --- a/gooddata-api-client/gooddata_api_client/model/inline_filter_definition_inline.py +++ b/gooddata-api-client/gooddata_api_client/model/inline_filter_definition_inline.py @@ -84,6 +84,7 @@ def openapi_types(): return { 'filter': (str,), # noqa: E501 'apply_on_result': (bool,), # noqa: E501 + 'local_identifier': (str,), # noqa: E501 } @cached_property @@ -94,6 +95,7 @@ def discriminator(): attribute_map = { 'filter': 'filter', # noqa: E501 'apply_on_result': 'applyOnResult', # noqa: E501 + 'local_identifier': 'localIdentifier', # noqa: E501 } read_only_vars = { @@ -141,6 +143,7 @@ def _from_openapi_data(cls, filter, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) apply_on_result (bool): [optional] # noqa: E501 + local_identifier (str): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -231,6 +234,7 @@ def __init__(self, filter, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) apply_on_result (bool): [optional] # noqa: E501 + local_identifier (str): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_data_source_identifier_out_attributes.py b/gooddata-api-client/gooddata_api_client/model/json_api_data_source_identifier_out_attributes.py index 44f8873a3..a3d45e650 100644 --- a/gooddata-api-client/gooddata_api_client/model/json_api_data_source_identifier_out_attributes.py +++ b/gooddata-api-client/gooddata_api_client/model/json_api_data_source_identifier_out_attributes.py @@ -80,6 +80,7 @@ class JsonApiDataSourceIdentifierOutAttributes(ModelNormal): 'SINGLESTORE': "SINGLESTORE", 'MOTHERDUCK': "MOTHERDUCK", 'FLIGHTRPC': "FLIGHTRPC", + 'FLEXCONNECT': "FLEXCONNECT", }, } diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_data_source_in_attributes.py b/gooddata-api-client/gooddata_api_client/model/json_api_data_source_in_attributes.py index dbf6605af..46cdb0633 100644 --- a/gooddata-api-client/gooddata_api_client/model/json_api_data_source_in_attributes.py +++ b/gooddata-api-client/gooddata_api_client/model/json_api_data_source_in_attributes.py @@ -84,6 +84,7 @@ class JsonApiDataSourceInAttributes(ModelNormal): 'SINGLESTORE': "SINGLESTORE", 'MOTHERDUCK': "MOTHERDUCK", 'FLIGHTRPC': "FLIGHTRPC", + 'FLEXCONNECT': "FLEXCONNECT", }, ('cache_strategy',): { 'None': None, @@ -99,6 +100,12 @@ class JsonApiDataSourceInAttributes(ModelNormal): ('schema',): { 'max_length': 255, }, + ('client_id',): { + 'max_length': 255, + }, + ('client_secret',): { + 'max_length': 255, + }, ('password',): { 'max_length': 255, }, @@ -146,6 +153,8 @@ def openapi_types(): 'schema': (str,), # noqa: E501 'type': (str,), # noqa: E501 'cache_strategy': (str, none_type,), # noqa: E501 + 'client_id': (str, none_type,), # noqa: E501 + 'client_secret': (str, none_type,), # noqa: E501 'parameters': ([JsonApiDataSourceInAttributesParametersInner], none_type,), # noqa: E501 'password': (str, none_type,), # noqa: E501 'private_key': (str, none_type,), # noqa: E501 @@ -165,6 +174,8 @@ def discriminator(): 'schema': 'schema', # noqa: E501 'type': 'type', # noqa: E501 'cache_strategy': 'cacheStrategy', # noqa: E501 + 'client_id': 'clientId', # noqa: E501 + 'client_secret': 'clientSecret', # noqa: E501 'parameters': 'parameters', # noqa: E501 'password': 'password', # noqa: E501 'private_key': 'privateKey', # noqa: E501 @@ -221,11 +232,13 @@ def _from_openapi_data(cls, name, schema, type, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) cache_strategy (str, none_type): Determines how the results coming from a particular datasource should be cached.. [optional] # noqa: E501 + client_id (str, none_type): The client id to use to connect to the database providing the data for the data source (for example a Databricks Service Account).. [optional] # noqa: E501 + client_secret (str, none_type): The client secret to use to connect to the database providing the data for the data source (for example a Databricks Service Account).. [optional] # noqa: E501 parameters ([JsonApiDataSourceInAttributesParametersInner], none_type): Additional parameters to be used when connecting to the database providing the data for the data source.. [optional] # noqa: E501 password (str, none_type): The password to use to connect to the database providing the data for the data source.. [optional] # noqa: E501 private_key (str, none_type): The private key to use to connect to the database providing the data for the data source.. [optional] # noqa: E501 private_key_passphrase (str, none_type): The passphrase used to encrypt the private key.. [optional] # noqa: E501 - token (str, none_type): The token to use to connect to the database providing the data for the data source (for example a BigQuery Sevice Acount).. [optional] # noqa: E501 + token (str, none_type): The token to use to connect to the database providing the data for the data source (for example a BigQuery Service Account).. [optional] # noqa: E501 url (str, none_type): The URL of the database providing the data for the data source.. [optional] # noqa: E501 username (str, none_type): The username to use to connect to the database providing the data for the data source.. [optional] # noqa: E501 """ @@ -322,11 +335,13 @@ def __init__(self, name, schema, type, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) cache_strategy (str, none_type): Determines how the results coming from a particular datasource should be cached.. [optional] # noqa: E501 + client_id (str, none_type): The client id to use to connect to the database providing the data for the data source (for example a Databricks Service Account).. [optional] # noqa: E501 + client_secret (str, none_type): The client secret to use to connect to the database providing the data for the data source (for example a Databricks Service Account).. [optional] # noqa: E501 parameters ([JsonApiDataSourceInAttributesParametersInner], none_type): Additional parameters to be used when connecting to the database providing the data for the data source.. [optional] # noqa: E501 password (str, none_type): The password to use to connect to the database providing the data for the data source.. [optional] # noqa: E501 private_key (str, none_type): The private key to use to connect to the database providing the data for the data source.. [optional] # noqa: E501 private_key_passphrase (str, none_type): The passphrase used to encrypt the private key.. [optional] # noqa: E501 - token (str, none_type): The token to use to connect to the database providing the data for the data source (for example a BigQuery Sevice Acount).. [optional] # noqa: E501 + token (str, none_type): The token to use to connect to the database providing the data for the data source (for example a BigQuery Service Account).. [optional] # noqa: E501 url (str, none_type): The URL of the database providing the data for the data source.. [optional] # noqa: E501 username (str, none_type): The username to use to connect to the database providing the data for the data source.. [optional] # noqa: E501 """ diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_data_source_out_attributes.py b/gooddata-api-client/gooddata_api_client/model/json_api_data_source_out_attributes.py index 0e966bafb..f99499c94 100644 --- a/gooddata-api-client/gooddata_api_client/model/json_api_data_source_out_attributes.py +++ b/gooddata-api-client/gooddata_api_client/model/json_api_data_source_out_attributes.py @@ -84,12 +84,14 @@ class JsonApiDataSourceOutAttributes(ModelNormal): 'SINGLESTORE': "SINGLESTORE", 'MOTHERDUCK': "MOTHERDUCK", 'FLIGHTRPC': "FLIGHTRPC", + 'FLEXCONNECT': "FLEXCONNECT", }, ('authentication_type',): { 'None': None, 'USERNAME_PASSWORD': "USERNAME_PASSWORD", 'TOKEN': "TOKEN", 'KEY_PAIR': "KEY_PAIR", + 'CLIENT_SECRET': "CLIENT_SECRET", }, ('cache_strategy',): { 'None': None, @@ -105,6 +107,9 @@ class JsonApiDataSourceOutAttributes(ModelNormal): ('schema',): { 'max_length': 255, }, + ('client_id',): { + 'max_length': 255, + }, ('url',): { 'max_length': 255, }, @@ -141,6 +146,7 @@ def openapi_types(): 'type': (str,), # noqa: E501 'authentication_type': (str, none_type,), # noqa: E501 'cache_strategy': (str, none_type,), # noqa: E501 + 'client_id': (str, none_type,), # noqa: E501 'decoded_parameters': ([JsonApiDataSourceInAttributesParametersInner], none_type,), # noqa: E501 'parameters': ([JsonApiDataSourceInAttributesParametersInner], none_type,), # noqa: E501 'url': (str, none_type,), # noqa: E501 @@ -158,6 +164,7 @@ def discriminator(): 'type': 'type', # noqa: E501 'authentication_type': 'authenticationType', # noqa: E501 'cache_strategy': 'cacheStrategy', # noqa: E501 + 'client_id': 'clientId', # noqa: E501 'decoded_parameters': 'decodedParameters', # noqa: E501 'parameters': 'parameters', # noqa: E501 'url': 'url', # noqa: E501 @@ -212,6 +219,7 @@ def _from_openapi_data(cls, name, schema, type, *args, **kwargs): # noqa: E501 _visited_composed_classes = (Animal,) authentication_type (str, none_type): Type of authentication used to connect to the database.. [optional] # noqa: E501 cache_strategy (str, none_type): Determines how the results coming from a particular datasource should be cached.. [optional] # noqa: E501 + client_id (str, none_type): The client id to use to connect to the database providing the data for the data source (for example a Databricks Service Account).. [optional] # noqa: E501 decoded_parameters ([JsonApiDataSourceInAttributesParametersInner], none_type): Decoded parameters to be used when connecting to the database providing the data for the data source.. [optional] # noqa: E501 parameters ([JsonApiDataSourceInAttributesParametersInner], none_type): Additional parameters to be used when connecting to the database providing the data for the data source.. [optional] # noqa: E501 url (str, none_type): The URL of the database providing the data for the data source.. [optional] # noqa: E501 @@ -311,6 +319,7 @@ def __init__(self, name, schema, type, *args, **kwargs): # noqa: E501 _visited_composed_classes = (Animal,) authentication_type (str, none_type): Type of authentication used to connect to the database.. [optional] # noqa: E501 cache_strategy (str, none_type): Determines how the results coming from a particular datasource should be cached.. [optional] # noqa: E501 + client_id (str, none_type): The client id to use to connect to the database providing the data for the data source (for example a Databricks Service Account).. [optional] # noqa: E501 decoded_parameters ([JsonApiDataSourceInAttributesParametersInner], none_type): Decoded parameters to be used when connecting to the database providing the data for the data source.. [optional] # noqa: E501 parameters ([JsonApiDataSourceInAttributesParametersInner], none_type): Additional parameters to be used when connecting to the database providing the data for the data source.. [optional] # noqa: E501 url (str, none_type): The URL of the database providing the data for the data source.. [optional] # noqa: E501 diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_data_source_patch_attributes.py b/gooddata-api-client/gooddata_api_client/model/json_api_data_source_patch_attributes.py index 924a6b045..0ca7e6934 100644 --- a/gooddata-api-client/gooddata_api_client/model/json_api_data_source_patch_attributes.py +++ b/gooddata-api-client/gooddata_api_client/model/json_api_data_source_patch_attributes.py @@ -89,10 +89,17 @@ class JsonApiDataSourcePatchAttributes(ModelNormal): 'SINGLESTORE': "SINGLESTORE", 'MOTHERDUCK': "MOTHERDUCK", 'FLIGHTRPC': "FLIGHTRPC", + 'FLEXCONNECT': "FLEXCONNECT", }, } validations = { + ('client_id',): { + 'max_length': 255, + }, + ('client_secret',): { + 'max_length': 255, + }, ('name',): { 'max_length': 255, }, @@ -143,6 +150,8 @@ def openapi_types(): lazy_import() return { 'cache_strategy': (str, none_type,), # noqa: E501 + 'client_id': (str, none_type,), # noqa: E501 + 'client_secret': (str, none_type,), # noqa: E501 'name': (str,), # noqa: E501 'parameters': ([JsonApiDataSourceInAttributesParametersInner], none_type,), # noqa: E501 'password': (str, none_type,), # noqa: E501 @@ -162,6 +171,8 @@ def discriminator(): attribute_map = { 'cache_strategy': 'cacheStrategy', # noqa: E501 + 'client_id': 'clientId', # noqa: E501 + 'client_secret': 'clientSecret', # noqa: E501 'name': 'name', # noqa: E501 'parameters': 'parameters', # noqa: E501 'password': 'password', # noqa: E501 @@ -216,13 +227,15 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) cache_strategy (str, none_type): Determines how the results coming from a particular datasource should be cached.. [optional] # noqa: E501 + client_id (str, none_type): The client id to use to connect to the database providing the data for the data source (for example a Databricks Service Account).. [optional] # noqa: E501 + client_secret (str, none_type): The client secret to use to connect to the database providing the data for the data source (for example a Databricks Service Account).. [optional] # noqa: E501 name (str): User-facing name of the data source.. [optional] # noqa: E501 parameters ([JsonApiDataSourceInAttributesParametersInner], none_type): Additional parameters to be used when connecting to the database providing the data for the data source.. [optional] # noqa: E501 password (str, none_type): The password to use to connect to the database providing the data for the data source.. [optional] # noqa: E501 private_key (str, none_type): The private key to use to connect to the database providing the data for the data source.. [optional] # noqa: E501 private_key_passphrase (str, none_type): The passphrase used to encrypt the private key.. [optional] # noqa: E501 schema (str): The schema to use as the root of the data for the data source.. [optional] # noqa: E501 - token (str, none_type): The token to use to connect to the database providing the data for the data source (for example a BigQuery Sevice Acount).. [optional] # noqa: E501 + token (str, none_type): The token to use to connect to the database providing the data for the data source (for example a BigQuery Service Account).. [optional] # noqa: E501 type (str): Type of the database providing the data for the data source.. [optional] # noqa: E501 url (str, none_type): The URL of the database providing the data for the data source.. [optional] # noqa: E501 username (str, none_type): The username to use to connect to the database providing the data for the data source.. [optional] # noqa: E501 @@ -312,13 +325,15 @@ def __init__(self, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) cache_strategy (str, none_type): Determines how the results coming from a particular datasource should be cached.. [optional] # noqa: E501 + client_id (str, none_type): The client id to use to connect to the database providing the data for the data source (for example a Databricks Service Account).. [optional] # noqa: E501 + client_secret (str, none_type): The client secret to use to connect to the database providing the data for the data source (for example a Databricks Service Account).. [optional] # noqa: E501 name (str): User-facing name of the data source.. [optional] # noqa: E501 parameters ([JsonApiDataSourceInAttributesParametersInner], none_type): Additional parameters to be used when connecting to the database providing the data for the data source.. [optional] # noqa: E501 password (str, none_type): The password to use to connect to the database providing the data for the data source.. [optional] # noqa: E501 private_key (str, none_type): The private key to use to connect to the database providing the data for the data source.. [optional] # noqa: E501 private_key_passphrase (str, none_type): The passphrase used to encrypt the private key.. [optional] # noqa: E501 schema (str): The schema to use as the root of the data for the data source.. [optional] # noqa: E501 - token (str, none_type): The token to use to connect to the database providing the data for the data source (for example a BigQuery Sevice Acount).. [optional] # noqa: E501 + token (str, none_type): The token to use to connect to the database providing the data for the data source (for example a BigQuery Service Account).. [optional] # noqa: E501 type (str): Type of the database providing the data for the data source.. [optional] # noqa: E501 url (str, none_type): The URL of the database providing the data for the data source.. [optional] # noqa: E501 username (str, none_type): The username to use to connect to the database providing the data for the data source.. [optional] # noqa: E501 diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_in.py b/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_in.py index e3c366fb9..150730d8e 100644 --- a/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_in.py +++ b/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_in.py @@ -96,9 +96,9 @@ def openapi_types(): """ lazy_import() return { - 'attributes': (JsonApiIdentityProviderInAttributes,), # noqa: E501 'id': (str,), # noqa: E501 'type': (str,), # noqa: E501 + 'attributes': (JsonApiIdentityProviderInAttributes,), # noqa: E501 } @cached_property @@ -107,9 +107,9 @@ def discriminator(): attribute_map = { - 'attributes': 'attributes', # noqa: E501 'id': 'id', # noqa: E501 'type': 'type', # noqa: E501 + 'attributes': 'attributes', # noqa: E501 } read_only_vars = { @@ -119,11 +119,10 @@ def discriminator(): @classmethod @convert_js_args_to_python_args - def _from_openapi_data(cls, attributes, id, *args, **kwargs): # noqa: E501 + def _from_openapi_data(cls, id, *args, **kwargs): # noqa: E501 """JsonApiIdentityProviderIn - a model defined in OpenAPI Args: - attributes (JsonApiIdentityProviderInAttributes): id (str): API identifier of an object Keyword Args: @@ -158,6 +157,7 @@ def _from_openapi_data(cls, attributes, id, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + attributes (JsonApiIdentityProviderInAttributes): [optional] # noqa: E501 """ type = kwargs.get('type', "identityProvider") @@ -190,7 +190,6 @@ def _from_openapi_data(cls, attributes, id, *args, **kwargs): # noqa: E501 self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) - self.attributes = attributes self.id = id self.type = type for var_name, var_value in kwargs.items(): @@ -213,11 +212,10 @@ def _from_openapi_data(cls, attributes, id, *args, **kwargs): # noqa: E501 ]) @convert_js_args_to_python_args - def __init__(self, attributes, id, *args, **kwargs): # noqa: E501 + def __init__(self, id, *args, **kwargs): # noqa: E501 """JsonApiIdentityProviderIn - a model defined in OpenAPI Args: - attributes (JsonApiIdentityProviderInAttributes): id (str): API identifier of an object Keyword Args: @@ -252,6 +250,7 @@ def __init__(self, attributes, id, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + attributes (JsonApiIdentityProviderInAttributes): [optional] # noqa: E501 """ type = kwargs.get('type', "identityProvider") @@ -282,7 +281,6 @@ def __init__(self, attributes, id, *args, **kwargs): # noqa: E501 self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) - self.attributes = attributes self.id = id self.type = type for var_name, var_value in kwargs.items(): diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_in_attributes.py b/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_in_attributes.py index 668b527ca..52bae5ba8 100644 --- a/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_in_attributes.py +++ b/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_in_attributes.py @@ -30,10 +30,6 @@ from gooddata_api_client.exceptions import ApiAttributeError -def lazy_import(): - from gooddata_api_client.model.json_api_identity_provider_in_attributes_specification import JsonApiIdentityProviderInAttributesSpecification - globals()['JsonApiIdentityProviderInAttributesSpecification'] = JsonApiIdentityProviderInAttributesSpecification - class JsonApiIdentityProviderInAttributes(ModelNormal): """NOTE: This class is auto generated by OpenAPI Generator. @@ -60,13 +56,26 @@ class JsonApiIdentityProviderInAttributes(ModelNormal): """ allowed_values = { - ('type',): { - 'SAML': "SAML", - 'OIDC': "OIDC", - }, } validations = { + ('custom_claim_mapping',): { + }, + ('oauth_client_id',): { + 'max_length': 255, + }, + ('oauth_client_secret',): { + 'max_length': 255, + }, + ('oauth_issuer_id',): { + 'max_length': 255, + }, + ('oauth_issuer_location',): { + 'max_length': 255, + }, + ('saml_metadata',): { + 'max_length': 15000, + }, } @cached_property @@ -75,7 +84,6 @@ def additional_properties_type(): This must be a method because a model may have properties that are of type self, this must run after the class is loaded """ - lazy_import() return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501 _nullable = False @@ -90,11 +98,14 @@ def openapi_types(): openapi_types (dict): The key is attribute name and the value is attribute type. """ - lazy_import() return { - 'specification': (JsonApiIdentityProviderInAttributesSpecification,), # noqa: E501 - 'type': (str,), # noqa: E501 + 'custom_claim_mapping': ({str: (str,)},), # noqa: E501 'identifiers': ([str],), # noqa: E501 + 'oauth_client_id': (str,), # noqa: E501 + 'oauth_client_secret': (str,), # noqa: E501 + 'oauth_issuer_id': (str,), # noqa: E501 + 'oauth_issuer_location': (str,), # noqa: E501 + 'saml_metadata': (str,), # noqa: E501 } @cached_property @@ -103,9 +114,13 @@ def discriminator(): attribute_map = { - 'specification': 'specification', # noqa: E501 - 'type': 'type', # noqa: E501 + 'custom_claim_mapping': 'customClaimMapping', # noqa: E501 'identifiers': 'identifiers', # noqa: E501 + 'oauth_client_id': 'oauthClientId', # noqa: E501 + 'oauth_client_secret': 'oauthClientSecret', # noqa: E501 + 'oauth_issuer_id': 'oauthIssuerId', # noqa: E501 + 'oauth_issuer_location': 'oauthIssuerLocation', # noqa: E501 + 'saml_metadata': 'samlMetadata', # noqa: E501 } read_only_vars = { @@ -115,13 +130,9 @@ def discriminator(): @classmethod @convert_js_args_to_python_args - def _from_openapi_data(cls, specification, type, *args, **kwargs): # noqa: E501 + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 """JsonApiIdentityProviderInAttributes - a model defined in OpenAPI - Args: - specification (JsonApiIdentityProviderInAttributesSpecification): - type (str): Type of the identity provider. - Keyword Args: _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be @@ -153,7 +164,13 @@ def _from_openapi_data(cls, specification, type, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + custom_claim_mapping ({str: (str,)}): Map of custom claim overrides. To be used when your Idp does not provide default claims (sub, email, name, given_name, family_name, urn.gooddata.user_groups [optional]). Define the key pair for the claim you wish to override, where the key is the default name of the attribute and the value is your custom name for the given attribute.. [optional] # noqa: E501 identifiers ([str]): List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory.. [optional] # noqa: E501 + oauth_client_id (str): The OAuth client id of your OIDC provider. This field is mandatory for OIDC IdP.. [optional] # noqa: E501 + oauth_client_secret (str): The OAuth client secret of your OIDC provider. This field is mandatory for OIDC IdP.. [optional] # noqa: E501 + oauth_issuer_id (str): Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider.. [optional] # noqa: E501 + oauth_issuer_location (str): The location of your OIDC provider. This field is mandatory for OIDC IdP.. [optional] # noqa: E501 + saml_metadata (str): Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider. This field is mandatory for SAML IdP.. [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -185,8 +202,6 @@ def _from_openapi_data(cls, specification, type, *args, **kwargs): # noqa: E501 self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) - self.specification = specification - self.type = type for var_name, var_value in kwargs.items(): if var_name not in self.attribute_map and \ self._configuration is not None and \ @@ -207,13 +222,9 @@ def _from_openapi_data(cls, specification, type, *args, **kwargs): # noqa: E501 ]) @convert_js_args_to_python_args - def __init__(self, specification, type, *args, **kwargs): # noqa: E501 + def __init__(self, *args, **kwargs): # noqa: E501 """JsonApiIdentityProviderInAttributes - a model defined in OpenAPI - Args: - specification (JsonApiIdentityProviderInAttributesSpecification): - type (str): Type of the identity provider. - Keyword Args: _check_type (bool): if True, values for parameters in openapi_types will be type checked and a TypeError will be @@ -245,7 +256,13 @@ def __init__(self, specification, type, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + custom_claim_mapping ({str: (str,)}): Map of custom claim overrides. To be used when your Idp does not provide default claims (sub, email, name, given_name, family_name, urn.gooddata.user_groups [optional]). Define the key pair for the claim you wish to override, where the key is the default name of the attribute and the value is your custom name for the given attribute.. [optional] # noqa: E501 identifiers ([str]): List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory.. [optional] # noqa: E501 + oauth_client_id (str): The OAuth client id of your OIDC provider. This field is mandatory for OIDC IdP.. [optional] # noqa: E501 + oauth_client_secret (str): The OAuth client secret of your OIDC provider. This field is mandatory for OIDC IdP.. [optional] # noqa: E501 + oauth_issuer_id (str): Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider.. [optional] # noqa: E501 + oauth_issuer_location (str): The location of your OIDC provider. This field is mandatory for OIDC IdP.. [optional] # noqa: E501 + saml_metadata (str): Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider. This field is mandatory for SAML IdP.. [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -275,8 +292,6 @@ def __init__(self, specification, type, *args, **kwargs): # noqa: E501 self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) - self.specification = specification - self.type = type for var_name, var_value in kwargs.items(): if var_name not in self.attribute_map and \ self._configuration is not None and \ diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_out.py b/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_out.py index 87f565c16..d5ad16172 100644 --- a/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_out.py +++ b/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_out.py @@ -31,8 +31,8 @@ def lazy_import(): - from gooddata_api_client.model.json_api_identity_provider_in_attributes import JsonApiIdentityProviderInAttributes - globals()['JsonApiIdentityProviderInAttributes'] = JsonApiIdentityProviderInAttributes + from gooddata_api_client.model.json_api_identity_provider_out_attributes import JsonApiIdentityProviderOutAttributes + globals()['JsonApiIdentityProviderOutAttributes'] = JsonApiIdentityProviderOutAttributes class JsonApiIdentityProviderOut(ModelNormal): @@ -96,9 +96,9 @@ def openapi_types(): """ lazy_import() return { - 'attributes': (JsonApiIdentityProviderInAttributes,), # noqa: E501 'id': (str,), # noqa: E501 'type': (str,), # noqa: E501 + 'attributes': (JsonApiIdentityProviderOutAttributes,), # noqa: E501 } @cached_property @@ -107,9 +107,9 @@ def discriminator(): attribute_map = { - 'attributes': 'attributes', # noqa: E501 'id': 'id', # noqa: E501 'type': 'type', # noqa: E501 + 'attributes': 'attributes', # noqa: E501 } read_only_vars = { @@ -119,11 +119,10 @@ def discriminator(): @classmethod @convert_js_args_to_python_args - def _from_openapi_data(cls, attributes, id, *args, **kwargs): # noqa: E501 + def _from_openapi_data(cls, id, *args, **kwargs): # noqa: E501 """JsonApiIdentityProviderOut - a model defined in OpenAPI Args: - attributes (JsonApiIdentityProviderInAttributes): id (str): API identifier of an object Keyword Args: @@ -158,6 +157,7 @@ def _from_openapi_data(cls, attributes, id, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + attributes (JsonApiIdentityProviderOutAttributes): [optional] # noqa: E501 """ type = kwargs.get('type', "identityProvider") @@ -190,7 +190,6 @@ def _from_openapi_data(cls, attributes, id, *args, **kwargs): # noqa: E501 self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) - self.attributes = attributes self.id = id self.type = type for var_name, var_value in kwargs.items(): @@ -213,11 +212,10 @@ def _from_openapi_data(cls, attributes, id, *args, **kwargs): # noqa: E501 ]) @convert_js_args_to_python_args - def __init__(self, attributes, id, *args, **kwargs): # noqa: E501 + def __init__(self, id, *args, **kwargs): # noqa: E501 """JsonApiIdentityProviderOut - a model defined in OpenAPI Args: - attributes (JsonApiIdentityProviderInAttributes): id (str): API identifier of an object Keyword Args: @@ -252,6 +250,7 @@ def __init__(self, attributes, id, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + attributes (JsonApiIdentityProviderOutAttributes): [optional] # noqa: E501 """ type = kwargs.get('type', "identityProvider") @@ -282,7 +281,6 @@ def __init__(self, attributes, id, *args, **kwargs): # noqa: E501 self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) - self.attributes = attributes self.id = id self.type = type for var_name, var_value in kwargs.items(): diff --git a/gooddata-api-client/gooddata_api_client/model/oidc_idp_specification.py b/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_out_attributes.py similarity index 82% rename from gooddata-api-client/gooddata_api_client/model/oidc_idp_specification.py rename to gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_out_attributes.py index c412820e7..23a4f571f 100644 --- a/gooddata-api-client/gooddata_api_client/model/oidc_idp_specification.py +++ b/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_out_attributes.py @@ -31,7 +31,7 @@ -class OidcIdpSpecification(ModelNormal): +class JsonApiIdentityProviderOutAttributes(ModelNormal): """NOTE: This class is auto generated by OpenAPI Generator. Ref: https://openapi-generator.tech @@ -59,10 +59,9 @@ class OidcIdpSpecification(ModelNormal): } validations = { - ('oauth_client_id',): { - 'max_length': 255, + ('custom_claim_mapping',): { }, - ('oauth_client_secret',): { + ('oauth_client_id',): { 'max_length': 255, }, ('oauth_issuer_id',): { @@ -71,9 +70,6 @@ class OidcIdpSpecification(ModelNormal): ('oauth_issuer_location',): { 'max_length': 255, }, - ('oauth_subject_id_claim',): { - 'max_length': 255, - }, } @cached_property @@ -97,11 +93,11 @@ def openapi_types(): and the value is attribute type. """ return { + 'custom_claim_mapping': ({str: (str,)},), # noqa: E501 + 'identifiers': ([str],), # noqa: E501 'oauth_client_id': (str,), # noqa: E501 - 'oauth_client_secret': (str,), # noqa: E501 'oauth_issuer_id': (str,), # noqa: E501 'oauth_issuer_location': (str,), # noqa: E501 - 'oauth_subject_id_claim': (str,), # noqa: E501 } @cached_property @@ -110,11 +106,11 @@ def discriminator(): attribute_map = { + 'custom_claim_mapping': 'customClaimMapping', # noqa: E501 + 'identifiers': 'identifiers', # noqa: E501 'oauth_client_id': 'oauthClientId', # noqa: E501 - 'oauth_client_secret': 'oauthClientSecret', # noqa: E501 'oauth_issuer_id': 'oauthIssuerId', # noqa: E501 'oauth_issuer_location': 'oauthIssuerLocation', # noqa: E501 - 'oauth_subject_id_claim': 'oauthSubjectIdClaim', # noqa: E501 } read_only_vars = { @@ -124,15 +120,8 @@ def discriminator(): @classmethod @convert_js_args_to_python_args - def _from_openapi_data(cls, oauth_client_id, oauth_client_secret, oauth_issuer_id, oauth_issuer_location, oauth_subject_id_claim, *args, **kwargs): # noqa: E501 - """OidcIdpSpecification - a model defined in OpenAPI - - Args: - oauth_client_id (str): - oauth_client_secret (str): - oauth_issuer_id (str): Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider. - oauth_issuer_location (str): - oauth_subject_id_claim (str): Any string identifying the claim in ID token, that should be used for user identification. The default value is 'sub'. + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """JsonApiIdentityProviderOutAttributes - a model defined in OpenAPI Keyword Args: _check_type (bool): if True, values for parameters in openapi_types @@ -165,6 +154,11 @@ def _from_openapi_data(cls, oauth_client_id, oauth_client_secret, oauth_issuer_i Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + custom_claim_mapping ({str: (str,)}): Map of custom claim overrides. To be used when your Idp does not provide default claims (sub, email, name, given_name, family_name, urn.gooddata.user_groups [optional]). Define the key pair for the claim you wish to override, where the key is the default name of the attribute and the value is your custom name for the given attribute.. [optional] # noqa: E501 + identifiers ([str]): List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory.. [optional] # noqa: E501 + oauth_client_id (str): The OAuth client id of your OIDC provider. This field is mandatory for OIDC IdP.. [optional] # noqa: E501 + oauth_issuer_id (str): Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider.. [optional] # noqa: E501 + oauth_issuer_location (str): The location of your OIDC provider. This field is mandatory for OIDC IdP.. [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -196,11 +190,6 @@ def _from_openapi_data(cls, oauth_client_id, oauth_client_secret, oauth_issuer_i self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) - self.oauth_client_id = oauth_client_id - self.oauth_client_secret = oauth_client_secret - self.oauth_issuer_id = oauth_issuer_id - self.oauth_issuer_location = oauth_issuer_location - self.oauth_subject_id_claim = oauth_subject_id_claim for var_name, var_value in kwargs.items(): if var_name not in self.attribute_map and \ self._configuration is not None and \ @@ -221,15 +210,8 @@ def _from_openapi_data(cls, oauth_client_id, oauth_client_secret, oauth_issuer_i ]) @convert_js_args_to_python_args - def __init__(self, oauth_client_id, oauth_client_secret, oauth_issuer_id, oauth_issuer_location, oauth_subject_id_claim, *args, **kwargs): # noqa: E501 - """OidcIdpSpecification - a model defined in OpenAPI - - Args: - oauth_client_id (str): - oauth_client_secret (str): - oauth_issuer_id (str): Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider. - oauth_issuer_location (str): - oauth_subject_id_claim (str): Any string identifying the claim in ID token, that should be used for user identification. The default value is 'sub'. + def __init__(self, *args, **kwargs): # noqa: E501 + """JsonApiIdentityProviderOutAttributes - a model defined in OpenAPI Keyword Args: _check_type (bool): if True, values for parameters in openapi_types @@ -262,6 +244,11 @@ def __init__(self, oauth_client_id, oauth_client_secret, oauth_issuer_id, oauth_ Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + custom_claim_mapping ({str: (str,)}): Map of custom claim overrides. To be used when your Idp does not provide default claims (sub, email, name, given_name, family_name, urn.gooddata.user_groups [optional]). Define the key pair for the claim you wish to override, where the key is the default name of the attribute and the value is your custom name for the given attribute.. [optional] # noqa: E501 + identifiers ([str]): List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory.. [optional] # noqa: E501 + oauth_client_id (str): The OAuth client id of your OIDC provider. This field is mandatory for OIDC IdP.. [optional] # noqa: E501 + oauth_issuer_id (str): Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider.. [optional] # noqa: E501 + oauth_issuer_location (str): The location of your OIDC provider. This field is mandatory for OIDC IdP.. [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -291,11 +278,6 @@ def __init__(self, oauth_client_id, oauth_client_secret, oauth_issuer_id, oauth_ self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) - self.oauth_client_id = oauth_client_id - self.oauth_client_secret = oauth_client_secret - self.oauth_issuer_id = oauth_issuer_id - self.oauth_issuer_location = oauth_issuer_location - self.oauth_subject_id_claim = oauth_subject_id_claim for var_name, var_value in kwargs.items(): if var_name not in self.attribute_map and \ self._configuration is not None and \ diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_out_with_links.py b/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_out_with_links.py index a1de95c5d..c0e5f5039 100644 --- a/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_out_with_links.py +++ b/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_out_with_links.py @@ -31,12 +31,12 @@ def lazy_import(): - from gooddata_api_client.model.json_api_identity_provider_in_attributes import JsonApiIdentityProviderInAttributes from gooddata_api_client.model.json_api_identity_provider_out import JsonApiIdentityProviderOut + from gooddata_api_client.model.json_api_identity_provider_out_attributes import JsonApiIdentityProviderOutAttributes from gooddata_api_client.model.object_links import ObjectLinks from gooddata_api_client.model.object_links_container import ObjectLinksContainer - globals()['JsonApiIdentityProviderInAttributes'] = JsonApiIdentityProviderInAttributes globals()['JsonApiIdentityProviderOut'] = JsonApiIdentityProviderOut + globals()['JsonApiIdentityProviderOutAttributes'] = JsonApiIdentityProviderOutAttributes globals()['ObjectLinks'] = ObjectLinks globals()['ObjectLinksContainer'] = ObjectLinksContainer @@ -102,9 +102,9 @@ def openapi_types(): """ lazy_import() return { - 'attributes': (JsonApiIdentityProviderInAttributes,), # noqa: E501 'id': (str,), # noqa: E501 'type': (str,), # noqa: E501 + 'attributes': (JsonApiIdentityProviderOutAttributes,), # noqa: E501 'links': (ObjectLinks,), # noqa: E501 } @@ -114,9 +114,9 @@ def discriminator(): attribute_map = { - 'attributes': 'attributes', # noqa: E501 'id': 'id', # noqa: E501 'type': 'type', # noqa: E501 + 'attributes': 'attributes', # noqa: E501 'links': 'links', # noqa: E501 } @@ -129,7 +129,6 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 """JsonApiIdentityProviderOutWithLinks - a model defined in OpenAPI Keyword Args: - attributes (JsonApiIdentityProviderInAttributes): id (str): API identifier of an object type (str): Object type. defaults to "identityProvider", must be one of ["identityProvider", ] # noqa: E501 _check_type (bool): if True, values for parameters in openapi_types @@ -162,6 +161,7 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + attributes (JsonApiIdentityProviderOutAttributes): [optional] # noqa: E501 links (ObjectLinks): [optional] # noqa: E501 """ @@ -237,7 +237,6 @@ def __init__(self, *args, **kwargs): # noqa: E501 """JsonApiIdentityProviderOutWithLinks - a model defined in OpenAPI Keyword Args: - attributes (JsonApiIdentityProviderInAttributes): id (str): API identifier of an object type (str): Object type. defaults to "identityProvider", must be one of ["identityProvider", ] # noqa: E501 _check_type (bool): if True, values for parameters in openapi_types @@ -270,6 +269,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + attributes (JsonApiIdentityProviderOutAttributes): [optional] # noqa: E501 links (ObjectLinks): [optional] # noqa: E501 """ diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_patch.py b/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_patch.py index 14e1593da..46844937b 100644 --- a/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_patch.py +++ b/gooddata-api-client/gooddata_api_client/model/json_api_identity_provider_patch.py @@ -31,8 +31,8 @@ def lazy_import(): - from gooddata_api_client.model.json_api_identity_provider_patch_attributes import JsonApiIdentityProviderPatchAttributes - globals()['JsonApiIdentityProviderPatchAttributes'] = JsonApiIdentityProviderPatchAttributes + from gooddata_api_client.model.json_api_identity_provider_in_attributes import JsonApiIdentityProviderInAttributes + globals()['JsonApiIdentityProviderInAttributes'] = JsonApiIdentityProviderInAttributes class JsonApiIdentityProviderPatch(ModelNormal): @@ -96,9 +96,9 @@ def openapi_types(): """ lazy_import() return { - 'attributes': (JsonApiIdentityProviderPatchAttributes,), # noqa: E501 'id': (str,), # noqa: E501 'type': (str,), # noqa: E501 + 'attributes': (JsonApiIdentityProviderInAttributes,), # noqa: E501 } @cached_property @@ -107,9 +107,9 @@ def discriminator(): attribute_map = { - 'attributes': 'attributes', # noqa: E501 'id': 'id', # noqa: E501 'type': 'type', # noqa: E501 + 'attributes': 'attributes', # noqa: E501 } read_only_vars = { @@ -119,11 +119,10 @@ def discriminator(): @classmethod @convert_js_args_to_python_args - def _from_openapi_data(cls, attributes, id, *args, **kwargs): # noqa: E501 + def _from_openapi_data(cls, id, *args, **kwargs): # noqa: E501 """JsonApiIdentityProviderPatch - a model defined in OpenAPI Args: - attributes (JsonApiIdentityProviderPatchAttributes): id (str): API identifier of an object Keyword Args: @@ -158,6 +157,7 @@ def _from_openapi_data(cls, attributes, id, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + attributes (JsonApiIdentityProviderInAttributes): [optional] # noqa: E501 """ type = kwargs.get('type', "identityProvider") @@ -190,7 +190,6 @@ def _from_openapi_data(cls, attributes, id, *args, **kwargs): # noqa: E501 self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) - self.attributes = attributes self.id = id self.type = type for var_name, var_value in kwargs.items(): @@ -213,11 +212,10 @@ def _from_openapi_data(cls, attributes, id, *args, **kwargs): # noqa: E501 ]) @convert_js_args_to_python_args - def __init__(self, attributes, id, *args, **kwargs): # noqa: E501 + def __init__(self, id, *args, **kwargs): # noqa: E501 """JsonApiIdentityProviderPatch - a model defined in OpenAPI Args: - attributes (JsonApiIdentityProviderPatchAttributes): id (str): API identifier of an object Keyword Args: @@ -252,6 +250,7 @@ def __init__(self, attributes, id, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + attributes (JsonApiIdentityProviderInAttributes): [optional] # noqa: E501 """ type = kwargs.get('type', "identityProvider") @@ -282,7 +281,6 @@ def __init__(self, attributes, id, *args, **kwargs): # noqa: E501 self._configuration = _configuration self._visited_composed_classes = _visited_composed_classes + (self.__class__,) - self.attributes = attributes self.id = id self.type = type for var_name, var_value in kwargs.items(): diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_notification_channel_in_attributes.py b/gooddata-api-client/gooddata_api_client/model/json_api_notification_channel_in_attributes.py index f58879d52..7cad5507a 100644 --- a/gooddata-api-client/gooddata_api_client/model/json_api_notification_channel_in_attributes.py +++ b/gooddata-api-client/gooddata_api_client/model/json_api_notification_channel_in_attributes.py @@ -69,6 +69,7 @@ class JsonApiNotificationChannelInAttributes(ModelNormal): 'WEBHOOK': "WEBHOOK", 'SMTP': "SMTP", 'DEFAULT_SMTP': "DEFAULT_SMTP", + 'IN_PLATFORM': "IN_PLATFORM", }, } diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_notification_channel_in_attributes_destination.py b/gooddata-api-client/gooddata_api_client/model/json_api_notification_channel_in_attributes_destination.py index 208e23c95..d6cc96a30 100644 --- a/gooddata-api-client/gooddata_api_client/model/json_api_notification_channel_in_attributes_destination.py +++ b/gooddata-api-client/gooddata_api_client/model/json_api_notification_channel_in_attributes_destination.py @@ -32,9 +32,11 @@ def lazy_import(): from gooddata_api_client.model.default_smtp import DefaultSmtp + from gooddata_api_client.model.in_platform import InPlatform from gooddata_api_client.model.smtp import Smtp from gooddata_api_client.model.webhook import Webhook globals()['DefaultSmtp'] = DefaultSmtp + globals()['InPlatform'] = InPlatform globals()['Smtp'] = Smtp globals()['Webhook'] = Webhook @@ -76,11 +78,6 @@ class JsonApiNotificationChannelInAttributesDestination(ModelComposed): } validations = { - ('from_email',): { - 'regex': { - 'pattern': r'(?:[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)])', # noqa: E501 - }, - }, ('token',): { 'max_length': 10000, }, @@ -185,7 +182,7 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - from_email (str): E-mail address to send notifications from.. [optional] if omitted the server will use the default value of "no-reply@gooddata.com" # noqa: E501 + from_email (str): E-mail address to send notifications from.. [optional] if omitted the server will use the default value of no-reply@gooddata.com # noqa: E501 from_email_name (str): An optional e-mail name to send notifications from.. [optional] if omitted the server will use the default value of "GoodData" # noqa: E501 host (str): The SMTP server address.. [optional] # noqa: E501 password (str): The SMTP server password.. [optional] # noqa: E501 @@ -298,7 +295,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - from_email (str): E-mail address to send notifications from.. [optional] if omitted the server will use the default value of "no-reply@gooddata.com" # noqa: E501 + from_email (str): E-mail address to send notifications from.. [optional] if omitted the server will use the default value of no-reply@gooddata.com # noqa: E501 from_email_name (str): An optional e-mail name to send notifications from.. [optional] if omitted the server will use the default value of "GoodData" # noqa: E501 host (str): The SMTP server address.. [optional] # noqa: E501 password (str): The SMTP server password.. [optional] # noqa: E501 @@ -380,6 +377,7 @@ def _composed_schemas(): ], 'oneOf': [ DefaultSmtp, + InPlatform, Smtp, Webhook, ], diff --git a/gooddata-api-client/gooddata_api_client/model/negative_attribute_filter_negative_attribute_filter.py b/gooddata-api-client/gooddata_api_client/model/negative_attribute_filter_negative_attribute_filter.py index 94a709b0d..a7eed4428 100644 --- a/gooddata-api-client/gooddata_api_client/model/negative_attribute_filter_negative_attribute_filter.py +++ b/gooddata-api-client/gooddata_api_client/model/negative_attribute_filter_negative_attribute_filter.py @@ -93,6 +93,7 @@ def openapi_types(): 'label': (AfmIdentifier,), # noqa: E501 'not_in': (AttributeFilterElements,), # noqa: E501 'apply_on_result': (bool,), # noqa: E501 + 'local_identifier': (str,), # noqa: E501 } @cached_property @@ -104,6 +105,7 @@ def discriminator(): 'label': 'label', # noqa: E501 'not_in': 'notIn', # noqa: E501 'apply_on_result': 'applyOnResult', # noqa: E501 + 'local_identifier': 'localIdentifier', # noqa: E501 } read_only_vars = { @@ -152,6 +154,7 @@ def _from_openapi_data(cls, label, not_in, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) apply_on_result (bool): [optional] # noqa: E501 + local_identifier (str): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -244,6 +247,7 @@ def __init__(self, label, not_in, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) apply_on_result (bool): [optional] # noqa: E501 + local_identifier (str): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) diff --git a/gooddata-api-client/gooddata_api_client/model/notification_channel_destination.py b/gooddata-api-client/gooddata_api_client/model/notification_channel_destination.py index 99cbdc96b..09f74e5f2 100644 --- a/gooddata-api-client/gooddata_api_client/model/notification_channel_destination.py +++ b/gooddata-api-client/gooddata_api_client/model/notification_channel_destination.py @@ -32,9 +32,11 @@ def lazy_import(): from gooddata_api_client.model.default_smtp import DefaultSmtp + from gooddata_api_client.model.in_platform import InPlatform from gooddata_api_client.model.smtp import Smtp from gooddata_api_client.model.webhook import Webhook globals()['DefaultSmtp'] = DefaultSmtp + globals()['InPlatform'] = InPlatform globals()['Smtp'] = Smtp globals()['Webhook'] = Webhook @@ -82,11 +84,6 @@ class NotificationChannelDestination(ModelComposed): 'pattern': r'https?\:\/\/.*', # noqa: E501 }, }, - ('from_email',): { - 'regex': { - 'pattern': r'(?:[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)])', # noqa: E501 - }, - }, } @cached_property @@ -186,7 +183,7 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 has_token (bool, none_type): Flag indicating if webhook has a token.. [optional] # noqa: E501 token (str, none_type): Bearer token for the webhook.. [optional] # noqa: E501 url (str): The webhook URL.. [optional] # noqa: E501 - from_email (str): E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead.. [optional] if omitted the server will use the default value of "no-reply@gooddata.com" # noqa: E501 + from_email (str): E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead.. [optional] if omitted the server will use the default value of no-reply@gooddata.com # noqa: E501 from_email_name (str): An optional e-mail name to send notifications from. Currently this does not have any effect. E-mail from name 'GoodData' is used instead.. [optional] if omitted the server will use the default value of "GoodData" # noqa: E501 host (str): The SMTP server address.. [optional] # noqa: E501 password (str): The SMTP server password.. [optional] # noqa: E501 @@ -299,7 +296,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 has_token (bool, none_type): Flag indicating if webhook has a token.. [optional] # noqa: E501 token (str, none_type): Bearer token for the webhook.. [optional] # noqa: E501 url (str): The webhook URL.. [optional] # noqa: E501 - from_email (str): E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead.. [optional] if omitted the server will use the default value of "no-reply@gooddata.com" # noqa: E501 + from_email (str): E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead.. [optional] if omitted the server will use the default value of no-reply@gooddata.com # noqa: E501 from_email_name (str): An optional e-mail name to send notifications from. Currently this does not have any effect. E-mail from name 'GoodData' is used instead.. [optional] if omitted the server will use the default value of "GoodData" # noqa: E501 host (str): The SMTP server address.. [optional] # noqa: E501 password (str): The SMTP server password.. [optional] # noqa: E501 @@ -377,6 +374,7 @@ def _composed_schemas(): ], 'oneOf': [ DefaultSmtp, + InPlatform, Smtp, Webhook, ], diff --git a/gooddata-api-client/gooddata_api_client/model/positive_attribute_filter_positive_attribute_filter.py b/gooddata-api-client/gooddata_api_client/model/positive_attribute_filter_positive_attribute_filter.py index 2a549b19c..ae53d56f8 100644 --- a/gooddata-api-client/gooddata_api_client/model/positive_attribute_filter_positive_attribute_filter.py +++ b/gooddata-api-client/gooddata_api_client/model/positive_attribute_filter_positive_attribute_filter.py @@ -93,6 +93,7 @@ def openapi_types(): '_in': (AttributeFilterElements,), # noqa: E501 'label': (AfmIdentifier,), # noqa: E501 'apply_on_result': (bool,), # noqa: E501 + 'local_identifier': (str,), # noqa: E501 } @cached_property @@ -104,6 +105,7 @@ def discriminator(): '_in': 'in', # noqa: E501 'label': 'label', # noqa: E501 'apply_on_result': 'applyOnResult', # noqa: E501 + 'local_identifier': 'localIdentifier', # noqa: E501 } read_only_vars = { @@ -152,6 +154,7 @@ def _from_openapi_data(cls, _in, label, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) apply_on_result (bool): [optional] # noqa: E501 + local_identifier (str): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -244,6 +247,7 @@ def __init__(self, _in, label, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) apply_on_result (bool): [optional] # noqa: E501 + local_identifier (str): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) diff --git a/gooddata-api-client/gooddata_api_client/model/range_measure_value_filter_range_measure_value_filter.py b/gooddata-api-client/gooddata_api_client/model/range_measure_value_filter_range_measure_value_filter.py index ec955cabf..5bf175582 100644 --- a/gooddata-api-client/gooddata_api_client/model/range_measure_value_filter_range_measure_value_filter.py +++ b/gooddata-api-client/gooddata_api_client/model/range_measure_value_filter_range_measure_value_filter.py @@ -97,6 +97,7 @@ def openapi_types(): 'operator': (str,), # noqa: E501 'to': (float,), # noqa: E501 'apply_on_result': (bool,), # noqa: E501 + 'local_identifier': (str,), # noqa: E501 'treat_null_values_as': (float,), # noqa: E501 } @@ -111,6 +112,7 @@ def discriminator(): 'operator': 'operator', # noqa: E501 'to': 'to', # noqa: E501 'apply_on_result': 'applyOnResult', # noqa: E501 + 'local_identifier': 'localIdentifier', # noqa: E501 'treat_null_values_as': 'treatNullValuesAs', # noqa: E501 } @@ -162,6 +164,7 @@ def _from_openapi_data(cls, _from, measure, operator, to, *args, **kwargs): # n through its discriminator because we passed in _visited_composed_classes = (Animal,) apply_on_result (bool): [optional] # noqa: E501 + local_identifier (str): [optional] # noqa: E501 treat_null_values_as (float): [optional] # noqa: E501 """ @@ -259,6 +262,7 @@ def __init__(self, _from, measure, operator, to, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) apply_on_result (bool): [optional] # noqa: E501 + local_identifier (str): [optional] # noqa: E501 treat_null_values_as (float): [optional] # noqa: E501 """ diff --git a/gooddata-api-client/gooddata_api_client/model/ranking_filter_ranking_filter.py b/gooddata-api-client/gooddata_api_client/model/ranking_filter_ranking_filter.py index a6e316e8e..e1c031e87 100644 --- a/gooddata-api-client/gooddata_api_client/model/ranking_filter_ranking_filter.py +++ b/gooddata-api-client/gooddata_api_client/model/ranking_filter_ranking_filter.py @@ -96,6 +96,7 @@ def openapi_types(): 'operator': (str,), # noqa: E501 'value': (int,), # noqa: E501 'apply_on_result': (bool,), # noqa: E501 + 'local_identifier': (str,), # noqa: E501 } @cached_property @@ -108,6 +109,7 @@ def discriminator(): 'operator': 'operator', # noqa: E501 'value': 'value', # noqa: E501 'apply_on_result': 'applyOnResult', # noqa: E501 + 'local_identifier': 'localIdentifier', # noqa: E501 } read_only_vars = { @@ -157,6 +159,7 @@ def _from_openapi_data(cls, measures, operator, value, *args, **kwargs): # noqa through its discriminator because we passed in _visited_composed_classes = (Animal,) apply_on_result (bool): [optional] # noqa: E501 + local_identifier (str): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -251,6 +254,7 @@ def __init__(self, measures, operator, value, *args, **kwargs): # noqa: E501 through its discriminator because we passed in _visited_composed_classes = (Animal,) apply_on_result (bool): [optional] # noqa: E501 + local_identifier (str): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) diff --git a/gooddata-api-client/gooddata_api_client/model/relative_date_filter_relative_date_filter.py b/gooddata-api-client/gooddata_api_client/model/relative_date_filter_relative_date_filter.py index 32f8d25fa..39bdfbe6f 100644 --- a/gooddata-api-client/gooddata_api_client/model/relative_date_filter_relative_date_filter.py +++ b/gooddata-api-client/gooddata_api_client/model/relative_date_filter_relative_date_filter.py @@ -110,6 +110,7 @@ def openapi_types(): 'granularity': (str,), # noqa: E501 'to': (int,), # noqa: E501 'apply_on_result': (bool,), # noqa: E501 + 'local_identifier': (str,), # noqa: E501 } @cached_property @@ -123,6 +124,7 @@ def discriminator(): 'granularity': 'granularity', # noqa: E501 'to': 'to', # noqa: E501 'apply_on_result': 'applyOnResult', # noqa: E501 + 'local_identifier': 'localIdentifier', # noqa: E501 } read_only_vars = { @@ -173,6 +175,7 @@ def _from_openapi_data(cls, dataset, _from, granularity, to, *args, **kwargs): through its discriminator because we passed in _visited_composed_classes = (Animal,) apply_on_result (bool): [optional] # noqa: E501 + local_identifier (str): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -269,6 +272,7 @@ def __init__(self, dataset, _from, granularity, to, *args, **kwargs): # noqa: E through its discriminator because we passed in _visited_composed_classes = (Animal,) apply_on_result (bool): [optional] # noqa: E501 + local_identifier (str): [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) diff --git a/gooddata-api-client/gooddata_api_client/model/route_result.py b/gooddata-api-client/gooddata_api_client/model/route_result.py index 816a95147..9d1b4607d 100644 --- a/gooddata-api-client/gooddata_api_client/model/route_result.py +++ b/gooddata-api-client/gooddata_api_client/model/route_result.py @@ -57,13 +57,12 @@ class RouteResult(ModelNormal): allowed_values = { ('use_case',): { - 'SEARCH_ALL': "SEARCH_ALL", - 'SEARCH_VISUALIZATIONS': "SEARCH_VISUALIZATIONS", - 'SEARCH_DASHBOARDS': "SEARCH_DASHBOARDS", + 'INVALID': "INVALID", + 'GENERAL': "GENERAL", + 'SEARCH': "SEARCH", 'CREATE_VISUALIZATION': "CREATE_VISUALIZATION", 'EXTEND_VISUALIZATION': "EXTEND_VISUALIZATION", - 'GENERAL': "GENERAL", - 'INVALID': "INVALID", + 'HOWTO': "HOWTO", }, } diff --git a/gooddata-api-client/gooddata_api_client/model/smtp.py b/gooddata-api-client/gooddata_api_client/model/smtp.py index eecad5b85..99f8a4e39 100644 --- a/gooddata-api-client/gooddata_api_client/model/smtp.py +++ b/gooddata-api-client/gooddata_api_client/model/smtp.py @@ -72,11 +72,6 @@ class Smtp(ModelComposed): } validations = { - ('from_email',): { - 'regex': { - 'pattern': r'(?:[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)])', # noqa: E501 - }, - }, } @cached_property @@ -166,7 +161,7 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - from_email (str): E-mail address to send notifications from.. [optional] if omitted the server will use the default value of "no-reply@gooddata.com" # noqa: E501 + from_email (str): E-mail address to send notifications from.. [optional] if omitted the server will use the default value of no-reply@gooddata.com # noqa: E501 from_email_name (str): An optional e-mail name to send notifications from.. [optional] if omitted the server will use the default value of "GoodData" # noqa: E501 host (str): The SMTP server address.. [optional] # noqa: E501 password (str): The SMTP server password.. [optional] # noqa: E501 @@ -277,7 +272,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - from_email (str): E-mail address to send notifications from.. [optional] if omitted the server will use the default value of "no-reply@gooddata.com" # noqa: E501 + from_email (str): E-mail address to send notifications from.. [optional] if omitted the server will use the default value of no-reply@gooddata.com # noqa: E501 from_email_name (str): An optional e-mail name to send notifications from.. [optional] if omitted the server will use the default value of "GoodData" # noqa: E501 host (str): The SMTP server address.. [optional] # noqa: E501 password (str): The SMTP server password.. [optional] # noqa: E501 diff --git a/gooddata-api-client/gooddata_api_client/model/smtp_all_of.py b/gooddata-api-client/gooddata_api_client/model/smtp_all_of.py index 76b372655..c074613bb 100644 --- a/gooddata-api-client/gooddata_api_client/model/smtp_all_of.py +++ b/gooddata-api-client/gooddata_api_client/model/smtp_all_of.py @@ -68,11 +68,6 @@ class SmtpAllOf(ModelNormal): } validations = { - ('from_email',): { - 'regex': { - 'pattern': r'(?:[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)])', # noqa: E501 - }, - }, } @cached_property @@ -161,7 +156,7 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - from_email (str): E-mail address to send notifications from.. [optional] if omitted the server will use the default value of "no-reply@gooddata.com" # noqa: E501 + from_email (str): E-mail address to send notifications from.. [optional] if omitted the server will use the default value of no-reply@gooddata.com # noqa: E501 from_email_name (str): An optional e-mail name to send notifications from.. [optional] if omitted the server will use the default value of "GoodData" # noqa: E501 host (str): The SMTP server address.. [optional] # noqa: E501 password (str): The SMTP server password.. [optional] # noqa: E501 @@ -253,7 +248,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - from_email (str): E-mail address to send notifications from.. [optional] if omitted the server will use the default value of "no-reply@gooddata.com" # noqa: E501 + from_email (str): E-mail address to send notifications from.. [optional] if omitted the server will use the default value of no-reply@gooddata.com # noqa: E501 from_email_name (str): An optional e-mail name to send notifications from.. [optional] if omitted the server will use the default value of "GoodData" # noqa: E501 host (str): The SMTP server address.. [optional] # noqa: E501 password (str): The SMTP server password.. [optional] # noqa: E501 diff --git a/gooddata-api-client/gooddata_api_client/model/test_definition_request.py b/gooddata-api-client/gooddata_api_client/model/test_definition_request.py index dc10b1a98..de6aac705 100644 --- a/gooddata-api-client/gooddata_api_client/model/test_definition_request.py +++ b/gooddata-api-client/gooddata_api_client/model/test_definition_request.py @@ -84,6 +84,7 @@ class TestDefinitionRequest(ModelNormal): 'SINGLESTORE': "SINGLESTORE", 'MOTHERDUCK': "MOTHERDUCK", 'FLIGHTRPC': "FLIGHTRPC", + 'FLEXCONNECT': "FLEXCONNECT", }, } @@ -114,6 +115,8 @@ def openapi_types(): lazy_import() return { 'type': (str,), # noqa: E501 + 'client_id': (str,), # noqa: E501 + 'client_secret': (str,), # noqa: E501 'parameters': ([DataSourceParameter],), # noqa: E501 'password': (str,), # noqa: E501 'private_key': (str,), # noqa: E501 @@ -131,6 +134,8 @@ def discriminator(): attribute_map = { 'type': 'type', # noqa: E501 + 'client_id': 'clientId', # noqa: E501 + 'client_secret': 'clientSecret', # noqa: E501 'parameters': 'parameters', # noqa: E501 'password': 'password', # noqa: E501 'private_key': 'privateKey', # noqa: E501 @@ -185,6 +190,8 @@ def _from_openapi_data(cls, type, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + client_id (str): Id for client based authentication for data sources which supports it.. [optional] # noqa: E501 + client_secret (str): Secret for client based authentication for data sources which supports it.. [optional] # noqa: E501 parameters ([DataSourceParameter]): [optional] # noqa: E501 password (str): Database user password.. [optional] # noqa: E501 private_key (str): Private key for data sources which supports key-pair authentication.. [optional] # noqa: E501 @@ -282,6 +289,8 @@ def __init__(self, type, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + client_id (str): Id for client based authentication for data sources which supports it.. [optional] # noqa: E501 + client_secret (str): Secret for client based authentication for data sources which supports it.. [optional] # noqa: E501 parameters ([DataSourceParameter]): [optional] # noqa: E501 password (str): Database user password.. [optional] # noqa: E501 private_key (str): Private key for data sources which supports key-pair authentication.. [optional] # noqa: E501 diff --git a/gooddata-api-client/gooddata_api_client/model/test_request.py b/gooddata-api-client/gooddata_api_client/model/test_request.py index af6b916a6..e253b31e1 100644 --- a/gooddata-api-client/gooddata_api_client/model/test_request.py +++ b/gooddata-api-client/gooddata_api_client/model/test_request.py @@ -88,6 +88,8 @@ def openapi_types(): """ lazy_import() return { + 'client_id': (str,), # noqa: E501 + 'client_secret': (str,), # noqa: E501 'parameters': ([DataSourceParameter],), # noqa: E501 'password': (str,), # noqa: E501 'private_key': (str,), # noqa: E501 @@ -104,6 +106,8 @@ def discriminator(): attribute_map = { + 'client_id': 'clientId', # noqa: E501 + 'client_secret': 'clientSecret', # noqa: E501 'parameters': 'parameters', # noqa: E501 'password': 'password', # noqa: E501 'private_key': 'privateKey', # noqa: E501 @@ -155,6 +159,8 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + client_id (str): Id for client based authentication for data sources which supports it.. [optional] # noqa: E501 + client_secret (str): Secret for client based authentication for data sources which supports it.. [optional] # noqa: E501 parameters ([DataSourceParameter]): [optional] # noqa: E501 password (str): Database user password.. [optional] # noqa: E501 private_key (str): Private key for data sources which supports key-pair authentication.. [optional] # noqa: E501 @@ -248,6 +254,8 @@ def __init__(self, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) + client_id (str): Id for client based authentication for data sources which supports it.. [optional] # noqa: E501 + client_secret (str): Secret for client based authentication for data sources which supports it.. [optional] # noqa: E501 parameters ([DataSourceParameter]): [optional] # noqa: E501 password (str): Database user password.. [optional] # noqa: E501 private_key (str): Private key for data sources which supports key-pair authentication.. [optional] # noqa: E501 diff --git a/gooddata-api-client/gooddata_api_client/models/__init__.py b/gooddata-api-client/gooddata_api_client/models/__init__.py index 7fb5f89c6..41dd9cda2 100644 --- a/gooddata-api-client/gooddata_api_client/models/__init__.py +++ b/gooddata-api-client/gooddata_api_client/models/__init__.py @@ -135,6 +135,7 @@ from gooddata_api_client.model.declarative_fact import DeclarativeFact from gooddata_api_client.model.declarative_filter_context import DeclarativeFilterContext from gooddata_api_client.model.declarative_filter_view import DeclarativeFilterView +from gooddata_api_client.model.declarative_identity_provider import DeclarativeIdentityProvider from gooddata_api_client.model.declarative_jwk import DeclarativeJwk from gooddata_api_client.model.declarative_jwk_specification import DeclarativeJwkSpecification from gooddata_api_client.model.declarative_label import DeclarativeLabel @@ -230,6 +231,8 @@ from gooddata_api_client.model.histogram_bucket import HistogramBucket from gooddata_api_client.model.histogram_properties import HistogramProperties from gooddata_api_client.model.identifier_duplications import IdentifierDuplications +from gooddata_api_client.model.in_platform import InPlatform +from gooddata_api_client.model.in_platform_all_of import InPlatformAllOf from gooddata_api_client.model.inline_filter_definition import InlineFilterDefinition from gooddata_api_client.model.inline_filter_definition_inline import InlineFilterDefinitionInline from gooddata_api_client.model.inline_measure_definition import InlineMeasureDefinition @@ -474,14 +477,13 @@ from gooddata_api_client.model.json_api_filter_view_patch_document import JsonApiFilterViewPatchDocument from gooddata_api_client.model.json_api_identity_provider_in import JsonApiIdentityProviderIn from gooddata_api_client.model.json_api_identity_provider_in_attributes import JsonApiIdentityProviderInAttributes -from gooddata_api_client.model.json_api_identity_provider_in_attributes_specification import JsonApiIdentityProviderInAttributesSpecification from gooddata_api_client.model.json_api_identity_provider_in_document import JsonApiIdentityProviderInDocument from gooddata_api_client.model.json_api_identity_provider_out import JsonApiIdentityProviderOut +from gooddata_api_client.model.json_api_identity_provider_out_attributes import JsonApiIdentityProviderOutAttributes from gooddata_api_client.model.json_api_identity_provider_out_document import JsonApiIdentityProviderOutDocument from gooddata_api_client.model.json_api_identity_provider_out_list import JsonApiIdentityProviderOutList from gooddata_api_client.model.json_api_identity_provider_out_with_links import JsonApiIdentityProviderOutWithLinks from gooddata_api_client.model.json_api_identity_provider_patch import JsonApiIdentityProviderPatch -from gooddata_api_client.model.json_api_identity_provider_patch_attributes import JsonApiIdentityProviderPatchAttributes from gooddata_api_client.model.json_api_identity_provider_patch_document import JsonApiIdentityProviderPatchDocument from gooddata_api_client.model.json_api_jwk_in import JsonApiJwkIn from gooddata_api_client.model.json_api_jwk_in_attributes import JsonApiJwkInAttributes @@ -725,7 +727,6 @@ from gooddata_api_client.model.notification_channel_destination import NotificationChannelDestination from gooddata_api_client.model.object_links import ObjectLinks from gooddata_api_client.model.object_links_container import ObjectLinksContainer -from gooddata_api_client.model.oidc_idp_specification import OidcIdpSpecification from gooddata_api_client.model.organization_permission_assignment import OrganizationPermissionAssignment from gooddata_api_client.model.page_metadata import PageMetadata from gooddata_api_client.model.paging import Paging @@ -771,7 +772,6 @@ from gooddata_api_client.model.route_result import RouteResult from gooddata_api_client.model.rsa_specification import RsaSpecification from gooddata_api_client.model.rule_permission import RulePermission -from gooddata_api_client.model.saml_idp_specification import SamlIdpSpecification from gooddata_api_client.model.scan_request import ScanRequest from gooddata_api_client.model.scan_result_pdm import ScanResultPdm from gooddata_api_client.model.scan_sql_request import ScanSqlRequest diff --git a/schemas/gooddata-afm-client.json b/schemas/gooddata-afm-client.json index ead5bfcfc..3567904ab 100644 --- a/schemas/gooddata-afm-client.json +++ b/schemas/gooddata-afm-client.json @@ -56,6 +56,9 @@ "pattern": "^\\d{4}-\\d{1,2}-\\d{1,2}( \\d{1,2}:\\d{1,2})?$", "type": "string" }, + "localIdentifier": { + "type": "string" + }, "to": { "example": "2020-07-16 23:59", "pattern": "^\\d{4}-\\d{1,2}-\\d{1,2}( \\d{1,2}:\\d{1,2})?$", @@ -739,6 +742,15 @@ "threadIdSuffix": { "description": "Chat History thread suffix appended to ID generated by backend. Enables more chat windows.", "type": "string" + }, + "userFeedback": { + "description": "User feedback.", + "enum": [ + "POSITIVE", + "NEGATIVE", + "NONE" + ], + "type": "string" } }, "required": [ @@ -784,10 +796,15 @@ "$ref": "#/components/schemas/ChatHistoryInteraction" }, "type": "array" + }, + "threadId": { + "description": "The conversation thread ID.", + "type": "string" } }, "required": [ - "interactions" + "interactions", + "threadId" ], "type": "object" }, @@ -849,6 +866,11 @@ }, "ChatResult": { "properties": { + "chatHistoryInteractionId": { + "description": "Chat History interaction ID. Unique ID for each interaction.", + "format": "int64", + "type": "integer" + }, "createdVisualizations": { "$ref": "#/components/schemas/CreatedVisualizations" }, @@ -867,9 +889,6 @@ "type": "string" } }, - "required": [ - "routing" - ], "type": "object" }, "ClusteringRequest": { @@ -955,6 +974,9 @@ "applyOnResult": { "type": "boolean" }, + "localIdentifier": { + "type": "string" + }, "measure": { "$ref": "#/components/schemas/AfmIdentifier" }, @@ -1151,6 +1173,8 @@ } ], "required": [ + "from", + "to", "using" ], "type": "object" @@ -1878,6 +1902,9 @@ }, "filter": { "type": "string" + }, + "localIdentifier": { + "type": "string" } }, "required": [ @@ -2184,6 +2211,9 @@ "label": { "$ref": "#/components/schemas/AfmIdentifier" }, + "localIdentifier": { + "type": "string" + }, "notIn": { "$ref": "#/components/schemas/AttributeFilterElements" } @@ -2344,6 +2374,9 @@ }, "label": { "$ref": "#/components/schemas/AfmIdentifier" + }, + "localIdentifier": { + "type": "string" } }, "required": [ @@ -2370,6 +2403,9 @@ "example": 100, "type": "number" }, + "localIdentifier": { + "type": "string" + }, "measure": { "$ref": "#/components/schemas/AfmIdentifier" }, @@ -2412,6 +2448,9 @@ "applyOnResult": { "type": "boolean" }, + "localIdentifier": { + "type": "string" + }, "measures": { "items": { "$ref": "#/components/schemas/AfmIdentifier" @@ -2483,6 +2522,9 @@ "example": "DAY", "type": "string" }, + "localIdentifier": { + "type": "string" + }, "to": { "description": "End of the filtering interval. Specified by number of periods (with respect to given granularity). Value 'O' is representing current time-interval (current day, week, ...).", "example": 0, @@ -2620,13 +2662,12 @@ "useCase": { "description": "Use case where LLM routed based on question.", "enum": [ - "SEARCH_ALL", - "SEARCH_VISUALIZATIONS", - "SEARCH_DASHBOARDS", + "INVALID", + "GENERAL", + "SEARCH", "CREATE_VISUALIZATION", "EXTEND_VISUALIZATION", - "GENERAL", - "INVALID" + "HOWTO" ], "type": "string" } @@ -2832,6 +2873,9 @@ ], "type": "object" }, + "ServerSentEventChatResult": { + "type": "object" + }, "SimpleMeasureDefinition": { "properties": { "measure": { @@ -3223,6 +3267,54 @@ ] } }, + "/api/v1/actions/workspaces/{workspaceId}/ai/chatStream": { + "post": { + "description": "(BETA) Combines multiple use cases such as search, create visualizations, ...", + "operationId": "aiChatStream", + "parameters": [ + { + "description": "Workspace identifier", + "in": "path", + "name": "workspaceId", + "required": true, + "schema": { + "pattern": "^(?!\\.)[.A-Za-z0-9_-]{1,255}$", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChatRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "text/event-stream": { + "schema": { + "items": { + "$ref": "#/components/schemas/ServerSentEventChatResult" + }, + "type": "array" + } + } + }, + "description": "OK" + } + }, + "summary": "(BETA) Chat with AI", + "tags": [ + "Smart Functions", + "actions" + ] + } + }, "/api/v1/actions/workspaces/{workspaceId}/ai/route": { "post": { "description": "(BETA) Uses similarity (e.g. cosine distance) to find most similar use cases.", diff --git a/schemas/gooddata-api-client.json b/schemas/gooddata-api-client.json index c9fad9d14..dbb45e1d4 100644 --- a/schemas/gooddata-api-client.json +++ b/schemas/gooddata-api-client.json @@ -101,6 +101,9 @@ "pattern": "^\\d{4}-\\d{1,2}-\\d{1,2}( \\d{1,2}:\\d{1,2})?$", "type": "string" }, + "localIdentifier": { + "type": "string" + }, "to": { "example": "2020-07-16 23:59", "pattern": "^\\d{4}-\\d{1,2}-\\d{1,2}( \\d{1,2}:\\d{1,2})?$", @@ -1065,6 +1068,15 @@ "threadIdSuffix": { "description": "Chat History thread suffix appended to ID generated by backend. Enables more chat windows.", "type": "string" + }, + "userFeedback": { + "description": "User feedback.", + "enum": [ + "POSITIVE", + "NEGATIVE", + "NONE" + ], + "type": "string" } }, "required": [ @@ -1110,10 +1122,15 @@ "$ref": "#/components/schemas/ChatHistoryInteraction" }, "type": "array" + }, + "threadId": { + "description": "The conversation thread ID.", + "type": "string" } }, "required": [ - "interactions" + "interactions", + "threadId" ], "type": "object" }, @@ -1175,6 +1192,11 @@ }, "ChatResult": { "properties": { + "chatHistoryInteractionId": { + "description": "Chat History interaction ID. Unique ID for each interaction.", + "format": "int64", + "type": "integer" + }, "createdVisualizations": { "$ref": "#/components/schemas/CreatedVisualizations" }, @@ -1193,9 +1215,6 @@ "type": "string" } }, - "required": [ - "routing" - ], "type": "object" }, "ClusteringRequest": { @@ -1482,6 +1501,9 @@ "applyOnResult": { "type": "boolean" }, + "localIdentifier": { + "type": "string" + }, "measure": { "$ref": "#/components/schemas/AfmIdentifier" }, @@ -1965,6 +1987,8 @@ } ], "required": [ + "from", + "to", "using" ], "type": "object" @@ -2743,6 +2767,17 @@ ], "type": "string" }, + "clientId": { + "description": "Id of client with permission to connect to the data source.", + "example": "client1234", + "maxLength": 255, + "type": "string" + }, + "clientSecret": { + "description": "The client secret to use to connect to the database providing the data for the data source.", + "maxLength": 255, + "type": "string" + }, "decodedParameters": { "items": { "$ref": "#/components/schemas/Parameter" @@ -2828,7 +2863,8 @@ "PINOT", "SINGLESTORE", "MOTHERDUCK", - "FLIGHTRPC" + "FLIGHTRPC", + "FLEXCONNECT" ], "example": "POSTGRESQL", "type": "string" @@ -3354,6 +3390,69 @@ ], "type": "object" }, + "DeclarativeIdentityProvider": { + "description": "Notification channels.", + "properties": { + "customClaimMapping": { + "additionalProperties": { + "description": "Map of custom claim overrides. To be used when your Idp does not provide default claims (sub, email, name, given_name, family_name, urn.gooddata.user_groups [optional]). Define the key pair for the claim you wish to override, where the key is the default name of the attribute and the value is your custom name for the given attribute.", + "maxLength": 10000, + "type": "string" + }, + "description": "Map of custom claim overrides. To be used when your Idp does not provide default claims (sub, email, name, given_name, family_name, urn.gooddata.user_groups [optional]). Define the key pair for the claim you wish to override, where the key is the default name of the attribute and the value is your custom name for the given attribute.", + "maxLength": 10000, + "type": "object" + }, + "id": { + "description": "FilterView object ID.", + "example": "filterView-1", + "pattern": "^(?!\\.)[.A-Za-z0-9_-]{1,255}$", + "type": "string" + }, + "identifiers": { + "description": "List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory.", + "example": [ + "gooddata.com" + ], + "items": { + "description": "List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory.", + "example": "[\"gooddata.com\"]", + "type": "string" + }, + "type": "array" + }, + "oauthClientId": { + "description": "The OAuth client id of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" + }, + "oauthClientSecret": { + "description": "The OAuth client secret of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" + }, + "oauthIssuerId": { + "description": "Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider.", + "example": "myOidcProvider", + "maxLength": 255, + "type": "string" + }, + "oauthIssuerLocation": { + "description": "The location of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" + }, + "samlMetadata": { + "description": "Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider. This field is mandatory for SAML IdP.", + "maxLength": 15000, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, "DeclarativeJwk": { "description": "A declarative form of the JWK.", "properties": { @@ -3584,6 +3683,9 @@ { "$ref": "#/components/schemas/DefaultSmtp" }, + { + "$ref": "#/components/schemas/InPlatform" + }, { "$ref": "#/components/schemas/Smtp" }, @@ -3596,7 +3698,8 @@ "enum": [ "WEBHOOK", "SMTP", - "DEFAULT_SMTP" + "DEFAULT_SMTP", + "IN_PLATFORM" ], "nullable": true, "readOnly": true, @@ -3668,6 +3771,12 @@ }, "type": "array" }, + "identityProviders": { + "items": { + "$ref": "#/components/schemas/DeclarativeIdentityProvider" + }, + "type": "array" + }, "jwks": { "items": { "$ref": "#/components/schemas/DeclarativeJwk" @@ -3716,6 +3825,12 @@ "DeclarativeOrganizationInfo": { "description": "Information available about an organization.", "properties": { + "allowedOrigins": { + "items": { + "type": "string" + }, + "type": "array" + }, "colorPalettes": { "description": "A list of color palettes.", "items": { @@ -4911,7 +5026,7 @@ "fromEmail": { "default": "no-reply@gooddata.com", "description": "E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead.", - "pattern": "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)])", + "format": "email", "type": "string" }, "fromEmailName": { @@ -6181,6 +6296,27 @@ ], "type": "object" }, + "InPlatform": { + "allOf": [ + { + "properties": { + "type": { + "description": "The destination type.", + "enum": [ + "IN_PLATFORM" + ], + "type": "string" + } + }, + "type": "object" + } + ], + "description": "In-platform destination for notifications.", + "required": [ + "type" + ], + "type": "object" + }, "InlineFilterDefinition": { "description": "Filter in form of direct MAQL query.", "properties": { @@ -6191,6 +6327,9 @@ }, "filter": { "type": "string" + }, + "localIdentifier": { + "type": "string" } }, "required": [ @@ -9613,7 +9752,8 @@ "PINOT", "SINGLESTORE", "MOTHERDUCK", - "FLIGHTRPC" + "FLIGHTRPC", + "FLEXCONNECT" ], "type": "string" } @@ -9728,6 +9868,18 @@ "nullable": true, "type": "string" }, + "clientId": { + "description": "The client id to use to connect to the database providing the data for the data source (for example a Databricks Service Account).", + "maxLength": 255, + "nullable": true, + "type": "string" + }, + "clientSecret": { + "description": "The client secret to use to connect to the database providing the data for the data source (for example a Databricks Service Account).", + "maxLength": 255, + "nullable": true, + "type": "string" + }, "name": { "description": "User-facing name of the data source.", "maxLength": 255, @@ -9777,7 +9929,7 @@ "type": "string" }, "token": { - "description": "The token to use to connect to the database providing the data for the data source (for example a BigQuery Sevice Acount).", + "description": "The token to use to connect to the database providing the data for the data source (for example a BigQuery Service Account).", "maxLength": 10000, "nullable": true, "type": "string" @@ -9807,7 +9959,8 @@ "PINOT", "SINGLESTORE", "MOTHERDUCK", - "FLIGHTRPC" + "FLIGHTRPC", + "FLEXCONNECT" ], "type": "string" }, @@ -9874,7 +10027,8 @@ "enum": [ "USERNAME_PASSWORD", "TOKEN", - "KEY_PAIR" + "KEY_PAIR", + "CLIENT_SECRET" ], "nullable": true, "type": "string" @@ -9888,6 +10042,12 @@ "nullable": true, "type": "string" }, + "clientId": { + "description": "The client id to use to connect to the database providing the data for the data source (for example a Databricks Service Account).", + "maxLength": 255, + "nullable": true, + "type": "string" + }, "decodedParameters": { "description": "Decoded parameters to be used when connecting to the database providing the data for the data source.", "items": { @@ -9963,7 +10123,8 @@ "PINOT", "SINGLESTORE", "MOTHERDUCK", - "FLIGHTRPC" + "FLIGHTRPC", + "FLEXCONNECT" ], "type": "string" }, @@ -10090,6 +10251,18 @@ "nullable": true, "type": "string" }, + "clientId": { + "description": "The client id to use to connect to the database providing the data for the data source (for example a Databricks Service Account).", + "maxLength": 255, + "nullable": true, + "type": "string" + }, + "clientSecret": { + "description": "The client secret to use to connect to the database providing the data for the data source (for example a Databricks Service Account).", + "maxLength": 255, + "nullable": true, + "type": "string" + }, "name": { "description": "User-facing name of the data source.", "maxLength": 255, @@ -10139,7 +10312,7 @@ "type": "string" }, "token": { - "description": "The token to use to connect to the database providing the data for the data source (for example a BigQuery Sevice Acount).", + "description": "The token to use to connect to the database providing the data for the data source (for example a BigQuery Service Account).", "maxLength": 10000, "nullable": true, "type": "string" @@ -10169,7 +10342,8 @@ "PINOT", "SINGLESTORE", "MOTHERDUCK", - "FLIGHTRPC" + "FLIGHTRPC", + "FLEXCONNECT" ], "type": "string" }, @@ -12262,6 +12436,14 @@ "properties": { "attributes": { "properties": { + "customClaimMapping": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of custom claim overrides. To be used when your Idp does not provide default claims (sub, email, name, given_name, family_name, urn.gooddata.user_groups [optional]). Define the key pair for the claim you wish to override, where the key is the default name of the attribute and the value is your custom name for the given attribute.", + "maxLength": 10000, + "type": "object" + }, "identifiers": { "description": "List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory.", "example": [ @@ -12272,32 +12454,33 @@ }, "type": "array" }, - "specification": { - "description": "Specification of the identity provider.", - "oneOf": [ - { - "$ref": "#/components/schemas/SamlIdpSpecification" - }, - { - "$ref": "#/components/schemas/OidcIdpSpecification" - } - ], - "type": "object" + "oauthClientId": { + "description": "The OAuth client id of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" }, - "type": { - "description": "Type of the identity provider.", - "enum": [ - "SAML", - "OIDC" - ], - "example": "SAML", + "oauthClientSecret": { + "description": "The OAuth client secret of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" + }, + "oauthIssuerId": { + "description": "Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider.", + "example": "myOidcProvider", + "maxLength": 255, + "type": "string" + }, + "oauthIssuerLocation": { + "description": "The location of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" + }, + "samlMetadata": { + "description": "Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider. This field is mandatory for SAML IdP.", + "maxLength": 15000, "type": "string" } }, - "required": [ - "specification", - "type" - ], "type": "object" }, "id": { @@ -12316,7 +12499,6 @@ } }, "required": [ - "attributes", "id", "type" ], @@ -12338,6 +12520,14 @@ "properties": { "attributes": { "properties": { + "customClaimMapping": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of custom claim overrides. To be used when your Idp does not provide default claims (sub, email, name, given_name, family_name, urn.gooddata.user_groups [optional]). Define the key pair for the claim you wish to override, where the key is the default name of the attribute and the value is your custom name for the given attribute.", + "maxLength": 10000, + "type": "object" + }, "identifiers": { "description": "List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory.", "example": [ @@ -12348,32 +12538,23 @@ }, "type": "array" }, - "specification": { - "description": "Specification of the identity provider.", - "oneOf": [ - { - "$ref": "#/components/schemas/SamlIdpSpecification" - }, - { - "$ref": "#/components/schemas/OidcIdpSpecification" - } - ], - "type": "object" + "oauthClientId": { + "description": "The OAuth client id of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" }, - "type": { - "description": "Type of the identity provider.", - "enum": [ - "SAML", - "OIDC" - ], - "example": "SAML", + "oauthIssuerId": { + "description": "Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider.", + "example": "myOidcProvider", + "maxLength": 255, + "type": "string" + }, + "oauthIssuerLocation": { + "description": "The location of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, "type": "string" } }, - "required": [ - "specification", - "type" - ], "type": "object" }, "id": { @@ -12392,7 +12573,6 @@ } }, "required": [ - "attributes", "id", "type" ], @@ -12454,6 +12634,14 @@ "properties": { "attributes": { "properties": { + "customClaimMapping": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of custom claim overrides. To be used when your Idp does not provide default claims (sub, email, name, given_name, family_name, urn.gooddata.user_groups [optional]). Define the key pair for the claim you wish to override, where the key is the default name of the attribute and the value is your custom name for the given attribute.", + "maxLength": 10000, + "type": "object" + }, "identifiers": { "description": "List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory.", "example": [ @@ -12464,25 +12652,30 @@ }, "type": "array" }, - "specification": { - "description": "Specification of the identity provider.", - "oneOf": [ - { - "$ref": "#/components/schemas/SamlIdpSpecification" - }, - { - "$ref": "#/components/schemas/OidcIdpSpecification" - } - ], - "type": "object" + "oauthClientId": { + "description": "The OAuth client id of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" }, - "type": { - "description": "Type of the identity provider.", - "enum": [ - "SAML", - "OIDC" - ], - "example": "SAML", + "oauthClientSecret": { + "description": "The OAuth client secret of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" + }, + "oauthIssuerId": { + "description": "Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider.", + "example": "myOidcProvider", + "maxLength": 255, + "type": "string" + }, + "oauthIssuerLocation": { + "description": "The location of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" + }, + "samlMetadata": { + "description": "Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider. This field is mandatory for SAML IdP.", + "maxLength": 15000, "type": "string" } }, @@ -12504,7 +12697,6 @@ } }, "required": [ - "attributes", "id", "type" ], @@ -13788,6 +13980,9 @@ { "$ref": "#/components/schemas/DefaultSmtp" }, + { + "$ref": "#/components/schemas/InPlatform" + }, { "$ref": "#/components/schemas/Smtp" }, @@ -13800,7 +13995,8 @@ "enum": [ "WEBHOOK", "SMTP", - "DEFAULT_SMTP" + "DEFAULT_SMTP", + "IN_PLATFORM" ], "nullable": true, "type": "string" @@ -13892,6 +14088,9 @@ { "$ref": "#/components/schemas/DefaultSmtp" }, + { + "$ref": "#/components/schemas/InPlatform" + }, { "$ref": "#/components/schemas/Smtp" }, @@ -13904,7 +14103,8 @@ "enum": [ "WEBHOOK", "SMTP", - "DEFAULT_SMTP" + "DEFAULT_SMTP", + "IN_PLATFORM" ], "nullable": true, "type": "string" @@ -14017,6 +14217,9 @@ { "$ref": "#/components/schemas/DefaultSmtp" }, + { + "$ref": "#/components/schemas/InPlatform" + }, { "$ref": "#/components/schemas/Smtp" }, @@ -14029,7 +14232,8 @@ "enum": [ "WEBHOOK", "SMTP", - "DEFAULT_SMTP" + "DEFAULT_SMTP", + "IN_PLATFORM" ], "nullable": true, "type": "string" @@ -14102,6 +14306,9 @@ { "$ref": "#/components/schemas/DefaultSmtp" }, + { + "$ref": "#/components/schemas/InPlatform" + }, { "$ref": "#/components/schemas/Smtp" }, @@ -14114,7 +14321,8 @@ "enum": [ "WEBHOOK", "SMTP", - "DEFAULT_SMTP" + "DEFAULT_SMTP", + "IN_PLATFORM" ], "nullable": true, "type": "string" @@ -18718,6 +18926,9 @@ "label": { "$ref": "#/components/schemas/AfmIdentifier" }, + "localIdentifier": { + "type": "string" + }, "notIn": { "$ref": "#/components/schemas/AttributeFilterElements" } @@ -18809,6 +19020,9 @@ }, { "$ref": "#/components/schemas/DefaultSmtp" + }, + { + "$ref": "#/components/schemas/InPlatform" } ], "properties": { @@ -18842,44 +19056,6 @@ }, "type": "object" }, - "OidcIdpSpecification": { - "description": "Specification of an OIDC identity provider", - "properties": { - "oauthClientId": { - "maxLength": 255, - "type": "string" - }, - "oauthClientSecret": { - "maxLength": 255, - "type": "string", - "writeOnly": true - }, - "oauthIssuerId": { - "description": "Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider.", - "example": "myOidcProvider", - "maxLength": 255, - "type": "string" - }, - "oauthIssuerLocation": { - "maxLength": 255, - "type": "string" - }, - "oauthSubjectIdClaim": { - "description": "Any string identifying the claim in ID token, that should be used for user identification. The default value is 'sub'.", - "example": "oid", - "maxLength": 255, - "type": "string" - } - }, - "required": [ - "oauthClientId", - "oauthClientSecret", - "oauthIssuerId", - "oauthIssuerLocation", - "oauthSubjectIdClaim" - ], - "type": "object" - }, "OrganizationPermissionAssignment": { "description": "Organization permission assignments", "properties": { @@ -19278,6 +19454,9 @@ }, "label": { "$ref": "#/components/schemas/AfmIdentifier" + }, + "localIdentifier": { + "type": "string" } }, "required": [ @@ -19331,6 +19510,9 @@ "example": 100, "type": "number" }, + "localIdentifier": { + "type": "string" + }, "measure": { "$ref": "#/components/schemas/AfmIdentifier" }, @@ -19384,6 +19566,9 @@ "applyOnResult": { "type": "boolean" }, + "localIdentifier": { + "type": "string" + }, "measures": { "items": { "$ref": "#/components/schemas/AfmIdentifier" @@ -19531,6 +19716,9 @@ "example": "DAY", "type": "string" }, + "localIdentifier": { + "type": "string" + }, "to": { "description": "End of the filtering interval. Specified by number of periods (with respect to given granularity). Value 'O' is representing current time-interval (current day, week, ...).", "example": 0, @@ -19738,13 +19926,12 @@ "useCase": { "description": "Use case where LLM routed based on question.", "enum": [ - "SEARCH_ALL", - "SEARCH_VISUALIZATIONS", - "SEARCH_DASHBOARDS", + "INVALID", + "GENERAL", + "SEARCH", "CREATE_VISUALIZATION", "EXTEND_VISUALIZATION", - "GENERAL", - "INVALID" + "HOWTO" ], "type": "string" } @@ -19830,21 +20017,6 @@ ], "type": "object" }, - "SamlIdpSpecification": { - "description": "Specification of a SAML identity provider", - "properties": { - "metadata": { - "description": "Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider.", - "maxLength": 15000, - "type": "string", - "writeOnly": true - } - }, - "required": [ - "metadata" - ], - "type": "object" - }, "ScanRequest": { "description": "A request containing all information critical to model scanning.", "properties": { @@ -20147,6 +20319,9 @@ ], "type": "object" }, + "ServerSentEventChatResult": { + "type": "object" + }, "Settings": { "description": "Additional settings.", "properties": { @@ -20282,7 +20457,7 @@ "fromEmail": { "default": "no-reply@gooddata.com", "description": "E-mail address to send notifications from.", - "pattern": "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)])", + "format": "email", "type": "string" }, "fromEmailName": { @@ -20625,6 +20800,14 @@ "TestDefinitionRequest": { "description": "A request containing all information for testing data source definition.", "properties": { + "clientId": { + "description": "Id for client based authentication for data sources which supports it.", + "type": "string" + }, + "clientSecret": { + "description": "Secret for client based authentication for data sources which supports it.", + "type": "string" + }, "parameters": { "items": { "$ref": "#/components/schemas/DataSourceParameter" @@ -20678,7 +20861,8 @@ "PINOT", "SINGLESTORE", "MOTHERDUCK", - "FLIGHTRPC" + "FLIGHTRPC", + "FLEXCONNECT" ], "example": "POSTGRESQL", "type": "string" @@ -20723,6 +20907,14 @@ "TestRequest": { "description": "A request containing all information for testing existing data source.", "properties": { + "clientId": { + "description": "Id for client based authentication for data sources which supports it.", + "type": "string" + }, + "clientSecret": { + "description": "Secret for client based authentication for data sources which supports it.", + "type": "string" + }, "parameters": { "items": { "$ref": "#/components/schemas/DataSourceParameter" @@ -21840,6 +22032,7 @@ }, "summary": "Manage Permissions for a Data Source", "tags": [ + "Manage Permissions", "Permissions", "actions" ] @@ -22922,6 +23115,54 @@ ] } }, + "/api/v1/actions/workspaces/{workspaceId}/ai/chatStream": { + "post": { + "description": "(BETA) Combines multiple use cases such as search, create visualizations, ...", + "operationId": "aiChatStream", + "parameters": [ + { + "description": "Workspace identifier", + "in": "path", + "name": "workspaceId", + "required": true, + "schema": { + "pattern": "^(?!\\.)[.A-Za-z0-9_-]{1,255}$", + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChatRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "text/event-stream": { + "schema": { + "items": { + "$ref": "#/components/schemas/ServerSentEventChatResult" + }, + "type": "array" + } + } + }, + "description": "OK" + } + }, + "summary": "(BETA) Chat with AI", + "tags": [ + "Smart Functions", + "actions" + ] + } + }, "/api/v1/actions/workspaces/{workspaceId}/ai/route": { "post": { "description": "(BETA) Uses similarity (e.g. cosine distance) to find most similar use cases.", @@ -26700,7 +26941,7 @@ "parameters": [ { "description": "Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123').", - "example": "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3", + "example": "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue", "in": "query", "name": "filter", "schema": { @@ -26805,7 +27046,7 @@ }, { "description": "Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123').", - "example": "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3", + "example": "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue", "in": "query", "name": "filter", "schema": { @@ -26839,7 +27080,7 @@ }, { "description": "Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123').", - "example": "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3", + "example": "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue", "in": "query", "name": "filter", "schema": { @@ -26874,7 +27115,7 @@ }, { "description": "Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123').", - "example": "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3", + "example": "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue", "in": "query", "name": "filter", "schema": { @@ -26925,7 +27166,7 @@ }, { "description": "Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123').", - "example": "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3", + "example": "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue", "in": "query", "name": "filter", "schema": { @@ -38549,7 +38790,8 @@ }, "summary": "Get permissions for the data source", "tags": [ - "layout" + "layout", + "Manage Permissions" ], "x-gdc-security-info": { "description": "Permissions required to manipulate permissions.", @@ -38559,7 +38801,7 @@ } }, "put": { - "description": "et data source permissions.", + "description": "set data source permissions.", "operationId": "setDataSourcePermissions", "parameters": [ { @@ -38588,7 +38830,8 @@ }, "summary": "Set data source permissions.", "tags": [ - "layout" + "layout", + "Manage Permissions" ], "x-gdc-security-info": { "description": "Permissions to modify the user data filters.", @@ -38598,6 +38841,71 @@ } } }, + "/api/v1/layout/identityProviders": { + "get": { + "description": "Gets complete layout of identity providers.", + "operationId": "getIdentityProvidersLayout", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/DeclarativeIdentityProvider" + }, + "type": "array" + } + } + }, + "description": "Retrieved layout of all identity providers." + } + }, + "summary": "Get all identity providers layout", + "tags": [ + "layout", + "Identity Providers" + ], + "x-gdc-security-info": { + "description": "Permission required to get identity providers layout.", + "permissions": [ + "MANAGE" + ] + } + }, + "put": { + "description": "Sets identity providers in organization.", + "operationId": "setIdentityProviders", + "requestBody": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/DeclarativeIdentityProvider" + }, + "type": "array" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "All identity providers set." + } + }, + "summary": "Set all identity providers", + "tags": [ + "layout", + "Identity Providers" + ], + "x-gdc-security-info": { + "description": "Permission required to set identity providers layout.", + "permissions": [ + "MANAGE" + ] + } + } + }, "/api/v1/layout/notificationChannels": { "get": { "description": "Gets complete layout of notification channels.", @@ -38616,7 +38924,8 @@ }, "summary": "Get all notification channels layout", "tags": [ - "layout" + "layout", + "Notification Channels" ], "x-gdc-security-info": { "description": "Permission required to get notification channels layout.", @@ -38645,7 +38954,8 @@ }, "summary": "Set all notification channels", "tags": [ - "layout" + "layout", + "Notification Channels" ], "x-gdc-security-info": { "description": "Permission required to set data filters layout.", diff --git a/schemas/gooddata-metadata-client.json b/schemas/gooddata-metadata-client.json index 258810f65..95b241a66 100644 --- a/schemas/gooddata-metadata-client.json +++ b/schemas/gooddata-metadata-client.json @@ -62,6 +62,9 @@ "pattern": "^\\d{4}-\\d{1,2}-\\d{1,2}( \\d{1,2}:\\d{1,2})?$", "type": "string" }, + "localIdentifier": { + "type": "string" + }, "to": { "example": "2020-07-16 23:59", "pattern": "^\\d{4}-\\d{1,2}-\\d{1,2}( \\d{1,2}:\\d{1,2})?$", @@ -722,6 +725,9 @@ "applyOnResult": { "type": "boolean" }, + "localIdentifier": { + "type": "string" + }, "measure": { "$ref": "#/components/schemas/AfmIdentifier" }, @@ -1738,6 +1744,17 @@ ], "type": "string" }, + "clientId": { + "description": "Id of client with permission to connect to the data source.", + "example": "client1234", + "maxLength": 255, + "type": "string" + }, + "clientSecret": { + "description": "The client secret to use to connect to the database providing the data for the data source.", + "maxLength": 255, + "type": "string" + }, "decodedParameters": { "items": { "$ref": "#/components/schemas/Parameter" @@ -1823,7 +1840,8 @@ "PINOT", "SINGLESTORE", "MOTHERDUCK", - "FLIGHTRPC" + "FLIGHTRPC", + "FLEXCONNECT" ], "example": "POSTGRESQL", "type": "string" @@ -2349,6 +2367,69 @@ ], "type": "object" }, + "DeclarativeIdentityProvider": { + "description": "Notification channels.", + "properties": { + "customClaimMapping": { + "additionalProperties": { + "description": "Map of custom claim overrides. To be used when your Idp does not provide default claims (sub, email, name, given_name, family_name, urn.gooddata.user_groups [optional]). Define the key pair for the claim you wish to override, where the key is the default name of the attribute and the value is your custom name for the given attribute.", + "maxLength": 10000, + "type": "string" + }, + "description": "Map of custom claim overrides. To be used when your Idp does not provide default claims (sub, email, name, given_name, family_name, urn.gooddata.user_groups [optional]). Define the key pair for the claim you wish to override, where the key is the default name of the attribute and the value is your custom name for the given attribute.", + "maxLength": 10000, + "type": "object" + }, + "id": { + "description": "FilterView object ID.", + "example": "filterView-1", + "pattern": "^(?!\\.)[.A-Za-z0-9_-]{1,255}$", + "type": "string" + }, + "identifiers": { + "description": "List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory.", + "example": [ + "gooddata.com" + ], + "items": { + "description": "List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory.", + "example": "[\"gooddata.com\"]", + "type": "string" + }, + "type": "array" + }, + "oauthClientId": { + "description": "The OAuth client id of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" + }, + "oauthClientSecret": { + "description": "The OAuth client secret of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" + }, + "oauthIssuerId": { + "description": "Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider.", + "example": "myOidcProvider", + "maxLength": 255, + "type": "string" + }, + "oauthIssuerLocation": { + "description": "The location of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" + }, + "samlMetadata": { + "description": "Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider. This field is mandatory for SAML IdP.", + "maxLength": 15000, + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, "DeclarativeJwk": { "description": "A declarative form of the JWK.", "properties": { @@ -2579,6 +2660,9 @@ { "$ref": "#/components/schemas/DefaultSmtp" }, + { + "$ref": "#/components/schemas/InPlatform" + }, { "$ref": "#/components/schemas/Smtp" }, @@ -2591,7 +2675,8 @@ "enum": [ "WEBHOOK", "SMTP", - "DEFAULT_SMTP" + "DEFAULT_SMTP", + "IN_PLATFORM" ], "nullable": true, "readOnly": true, @@ -2663,6 +2748,12 @@ }, "type": "array" }, + "identityProviders": { + "items": { + "$ref": "#/components/schemas/DeclarativeIdentityProvider" + }, + "type": "array" + }, "jwks": { "items": { "$ref": "#/components/schemas/DeclarativeJwk" @@ -2711,6 +2802,12 @@ "DeclarativeOrganizationInfo": { "description": "Information available about an organization.", "properties": { + "allowedOrigins": { + "items": { + "type": "string" + }, + "type": "array" + }, "colorPalettes": { "description": "A list of color palettes.", "items": { @@ -3890,7 +3987,7 @@ "fromEmail": { "default": "no-reply@gooddata.com", "description": "E-mail address to send notifications from. Currently this does not have any effect. E-mail 'no-reply@gooddata.com' is used instead.", - "pattern": "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)])", + "format": "email", "type": "string" }, "fromEmailName": { @@ -4452,6 +4549,27 @@ ], "type": "object" }, + "InPlatform": { + "allOf": [ + { + "properties": { + "type": { + "description": "The destination type.", + "enum": [ + "IN_PLATFORM" + ], + "type": "string" + } + }, + "type": "object" + } + ], + "description": "In-platform destination for notifications.", + "required": [ + "type" + ], + "type": "object" + }, "InlineFilterDefinition": { "description": "Filter in form of direct MAQL query.", "properties": { @@ -4462,6 +4580,9 @@ }, "filter": { "type": "string" + }, + "localIdentifier": { + "type": "string" } }, "required": [ @@ -7884,7 +8005,8 @@ "PINOT", "SINGLESTORE", "MOTHERDUCK", - "FLIGHTRPC" + "FLIGHTRPC", + "FLEXCONNECT" ], "type": "string" } @@ -7999,6 +8121,18 @@ "nullable": true, "type": "string" }, + "clientId": { + "description": "The client id to use to connect to the database providing the data for the data source (for example a Databricks Service Account).", + "maxLength": 255, + "nullable": true, + "type": "string" + }, + "clientSecret": { + "description": "The client secret to use to connect to the database providing the data for the data source (for example a Databricks Service Account).", + "maxLength": 255, + "nullable": true, + "type": "string" + }, "name": { "description": "User-facing name of the data source.", "maxLength": 255, @@ -8048,7 +8182,7 @@ "type": "string" }, "token": { - "description": "The token to use to connect to the database providing the data for the data source (for example a BigQuery Sevice Acount).", + "description": "The token to use to connect to the database providing the data for the data source (for example a BigQuery Service Account).", "maxLength": 10000, "nullable": true, "type": "string" @@ -8078,7 +8212,8 @@ "PINOT", "SINGLESTORE", "MOTHERDUCK", - "FLIGHTRPC" + "FLIGHTRPC", + "FLEXCONNECT" ], "type": "string" }, @@ -8145,7 +8280,8 @@ "enum": [ "USERNAME_PASSWORD", "TOKEN", - "KEY_PAIR" + "KEY_PAIR", + "CLIENT_SECRET" ], "nullable": true, "type": "string" @@ -8159,6 +8295,12 @@ "nullable": true, "type": "string" }, + "clientId": { + "description": "The client id to use to connect to the database providing the data for the data source (for example a Databricks Service Account).", + "maxLength": 255, + "nullable": true, + "type": "string" + }, "decodedParameters": { "description": "Decoded parameters to be used when connecting to the database providing the data for the data source.", "items": { @@ -8234,7 +8376,8 @@ "PINOT", "SINGLESTORE", "MOTHERDUCK", - "FLIGHTRPC" + "FLIGHTRPC", + "FLEXCONNECT" ], "type": "string" }, @@ -8361,6 +8504,18 @@ "nullable": true, "type": "string" }, + "clientId": { + "description": "The client id to use to connect to the database providing the data for the data source (for example a Databricks Service Account).", + "maxLength": 255, + "nullable": true, + "type": "string" + }, + "clientSecret": { + "description": "The client secret to use to connect to the database providing the data for the data source (for example a Databricks Service Account).", + "maxLength": 255, + "nullable": true, + "type": "string" + }, "name": { "description": "User-facing name of the data source.", "maxLength": 255, @@ -8410,7 +8565,7 @@ "type": "string" }, "token": { - "description": "The token to use to connect to the database providing the data for the data source (for example a BigQuery Sevice Acount).", + "description": "The token to use to connect to the database providing the data for the data source (for example a BigQuery Service Account).", "maxLength": 10000, "nullable": true, "type": "string" @@ -8440,7 +8595,8 @@ "PINOT", "SINGLESTORE", "MOTHERDUCK", - "FLIGHTRPC" + "FLIGHTRPC", + "FLEXCONNECT" ], "type": "string" }, @@ -10533,6 +10689,14 @@ "properties": { "attributes": { "properties": { + "customClaimMapping": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of custom claim overrides. To be used when your Idp does not provide default claims (sub, email, name, given_name, family_name, urn.gooddata.user_groups [optional]). Define the key pair for the claim you wish to override, where the key is the default name of the attribute and the value is your custom name for the given attribute.", + "maxLength": 10000, + "type": "object" + }, "identifiers": { "description": "List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory.", "example": [ @@ -10543,32 +10707,33 @@ }, "type": "array" }, - "specification": { - "description": "Specification of the identity provider.", - "oneOf": [ - { - "$ref": "#/components/schemas/SamlIdpSpecification" - }, - { - "$ref": "#/components/schemas/OidcIdpSpecification" - } - ], - "type": "object" + "oauthClientId": { + "description": "The OAuth client id of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" }, - "type": { - "description": "Type of the identity provider.", - "enum": [ - "SAML", - "OIDC" - ], - "example": "SAML", + "oauthClientSecret": { + "description": "The OAuth client secret of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" + }, + "oauthIssuerId": { + "description": "Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider.", + "example": "myOidcProvider", + "maxLength": 255, + "type": "string" + }, + "oauthIssuerLocation": { + "description": "The location of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" + }, + "samlMetadata": { + "description": "Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider. This field is mandatory for SAML IdP.", + "maxLength": 15000, "type": "string" } }, - "required": [ - "specification", - "type" - ], "type": "object" }, "id": { @@ -10587,7 +10752,6 @@ } }, "required": [ - "attributes", "id", "type" ], @@ -10609,6 +10773,14 @@ "properties": { "attributes": { "properties": { + "customClaimMapping": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of custom claim overrides. To be used when your Idp does not provide default claims (sub, email, name, given_name, family_name, urn.gooddata.user_groups [optional]). Define the key pair for the claim you wish to override, where the key is the default name of the attribute and the value is your custom name for the given attribute.", + "maxLength": 10000, + "type": "object" + }, "identifiers": { "description": "List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory.", "example": [ @@ -10619,32 +10791,23 @@ }, "type": "array" }, - "specification": { - "description": "Specification of the identity provider.", - "oneOf": [ - { - "$ref": "#/components/schemas/SamlIdpSpecification" - }, - { - "$ref": "#/components/schemas/OidcIdpSpecification" - } - ], - "type": "object" + "oauthClientId": { + "description": "The OAuth client id of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" }, - "type": { - "description": "Type of the identity provider.", - "enum": [ - "SAML", - "OIDC" - ], - "example": "SAML", + "oauthIssuerId": { + "description": "Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider.", + "example": "myOidcProvider", + "maxLength": 255, + "type": "string" + }, + "oauthIssuerLocation": { + "description": "The location of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, "type": "string" } }, - "required": [ - "specification", - "type" - ], "type": "object" }, "id": { @@ -10663,7 +10826,6 @@ } }, "required": [ - "attributes", "id", "type" ], @@ -10725,6 +10887,14 @@ "properties": { "attributes": { "properties": { + "customClaimMapping": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of custom claim overrides. To be used when your Idp does not provide default claims (sub, email, name, given_name, family_name, urn.gooddata.user_groups [optional]). Define the key pair for the claim you wish to override, where the key is the default name of the attribute and the value is your custom name for the given attribute.", + "maxLength": 10000, + "type": "object" + }, "identifiers": { "description": "List of identifiers for this IdP, where an identifier is a domain name. Users with email addresses belonging to these domains will be authenticated by this IdP. In multiple provider setup, this field is mandatory.", "example": [ @@ -10735,25 +10905,30 @@ }, "type": "array" }, - "specification": { - "description": "Specification of the identity provider.", - "oneOf": [ - { - "$ref": "#/components/schemas/SamlIdpSpecification" - }, - { - "$ref": "#/components/schemas/OidcIdpSpecification" - } - ], - "type": "object" + "oauthClientId": { + "description": "The OAuth client id of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" }, - "type": { - "description": "Type of the identity provider.", - "enum": [ - "SAML", - "OIDC" - ], - "example": "SAML", + "oauthClientSecret": { + "description": "The OAuth client secret of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" + }, + "oauthIssuerId": { + "description": "Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider.", + "example": "myOidcProvider", + "maxLength": 255, + "type": "string" + }, + "oauthIssuerLocation": { + "description": "The location of your OIDC provider. This field is mandatory for OIDC IdP.", + "maxLength": 255, + "type": "string" + }, + "samlMetadata": { + "description": "Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider. This field is mandatory for SAML IdP.", + "maxLength": 15000, "type": "string" } }, @@ -10775,7 +10950,6 @@ } }, "required": [ - "attributes", "id", "type" ], @@ -12059,6 +12233,9 @@ { "$ref": "#/components/schemas/DefaultSmtp" }, + { + "$ref": "#/components/schemas/InPlatform" + }, { "$ref": "#/components/schemas/Smtp" }, @@ -12071,7 +12248,8 @@ "enum": [ "WEBHOOK", "SMTP", - "DEFAULT_SMTP" + "DEFAULT_SMTP", + "IN_PLATFORM" ], "nullable": true, "type": "string" @@ -12163,6 +12341,9 @@ { "$ref": "#/components/schemas/DefaultSmtp" }, + { + "$ref": "#/components/schemas/InPlatform" + }, { "$ref": "#/components/schemas/Smtp" }, @@ -12175,7 +12356,8 @@ "enum": [ "WEBHOOK", "SMTP", - "DEFAULT_SMTP" + "DEFAULT_SMTP", + "IN_PLATFORM" ], "nullable": true, "type": "string" @@ -12288,6 +12470,9 @@ { "$ref": "#/components/schemas/DefaultSmtp" }, + { + "$ref": "#/components/schemas/InPlatform" + }, { "$ref": "#/components/schemas/Smtp" }, @@ -12300,7 +12485,8 @@ "enum": [ "WEBHOOK", "SMTP", - "DEFAULT_SMTP" + "DEFAULT_SMTP", + "IN_PLATFORM" ], "nullable": true, "type": "string" @@ -12373,6 +12559,9 @@ { "$ref": "#/components/schemas/DefaultSmtp" }, + { + "$ref": "#/components/schemas/InPlatform" + }, { "$ref": "#/components/schemas/Smtp" }, @@ -12385,7 +12574,8 @@ "enum": [ "WEBHOOK", "SMTP", - "DEFAULT_SMTP" + "DEFAULT_SMTP", + "IN_PLATFORM" ], "nullable": true, "type": "string" @@ -16774,6 +16964,9 @@ "label": { "$ref": "#/components/schemas/AfmIdentifier" }, + "localIdentifier": { + "type": "string" + }, "notIn": { "$ref": "#/components/schemas/AttributeFilterElements" } @@ -16865,6 +17058,9 @@ }, { "$ref": "#/components/schemas/DefaultSmtp" + }, + { + "$ref": "#/components/schemas/InPlatform" } ], "properties": { @@ -16898,44 +17094,6 @@ }, "type": "object" }, - "OidcIdpSpecification": { - "description": "Specification of an OIDC identity provider", - "properties": { - "oauthClientId": { - "maxLength": 255, - "type": "string" - }, - "oauthClientSecret": { - "maxLength": 255, - "type": "string", - "writeOnly": true - }, - "oauthIssuerId": { - "description": "Any string identifying the OIDC provider. This value is used as suffix for OAuth2 callback (redirect) URL. If not defined, the standard callback URL is used. This value is valid only for external OIDC providers, not for the internal DEX provider.", - "example": "myOidcProvider", - "maxLength": 255, - "type": "string" - }, - "oauthIssuerLocation": { - "maxLength": 255, - "type": "string" - }, - "oauthSubjectIdClaim": { - "description": "Any string identifying the claim in ID token, that should be used for user identification. The default value is 'sub'.", - "example": "oid", - "maxLength": 255, - "type": "string" - } - }, - "required": [ - "oauthClientId", - "oauthClientSecret", - "oauthIssuerId", - "oauthIssuerLocation", - "oauthSubjectIdClaim" - ], - "type": "object" - }, "OrganizationPermissionAssignment": { "description": "Organization permission assignments", "properties": { @@ -17300,6 +17458,9 @@ }, "label": { "$ref": "#/components/schemas/AfmIdentifier" + }, + "localIdentifier": { + "type": "string" } }, "required": [ @@ -17353,6 +17514,9 @@ "example": 100, "type": "number" }, + "localIdentifier": { + "type": "string" + }, "measure": { "$ref": "#/components/schemas/AfmIdentifier" }, @@ -17406,6 +17570,9 @@ "applyOnResult": { "type": "boolean" }, + "localIdentifier": { + "type": "string" + }, "measures": { "items": { "$ref": "#/components/schemas/AfmIdentifier" @@ -17553,6 +17720,9 @@ "example": "DAY", "type": "string" }, + "localIdentifier": { + "type": "string" + }, "to": { "description": "End of the filtering interval. Specified by number of periods (with respect to given granularity). Value 'O' is representing current time-interval (current day, week, ...).", "example": 0, @@ -17719,21 +17889,6 @@ ], "type": "object" }, - "SamlIdpSpecification": { - "description": "Specification of a SAML identity provider", - "properties": { - "metadata": { - "description": "Base64 encoded xml document with SAML metadata. This document is issued by your SAML provider. It includes the issuer's name, expiration information, and keys that can be used to validate the response from the identity provider.", - "maxLength": 15000, - "type": "string", - "writeOnly": true - } - }, - "required": [ - "metadata" - ], - "type": "object" - }, "Settings": { "description": "Additional settings.", "properties": { @@ -17858,7 +18013,7 @@ "fromEmail": { "default": "no-reply@gooddata.com", "description": "E-mail address to send notifications from.", - "pattern": "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)])", + "format": "email", "type": "string" }, "fromEmailName": { @@ -18855,6 +19010,7 @@ }, "summary": "Manage Permissions for a Data Source", "tags": [ + "Manage Permissions", "Permissions", "actions" ] @@ -21956,7 +22112,7 @@ "parameters": [ { "description": "Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123').", - "example": "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3", + "example": "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue", "in": "query", "name": "filter", "schema": { @@ -22061,7 +22217,7 @@ }, { "description": "Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123').", - "example": "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3", + "example": "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue", "in": "query", "name": "filter", "schema": { @@ -22095,7 +22251,7 @@ }, { "description": "Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123').", - "example": "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3", + "example": "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue", "in": "query", "name": "filter", "schema": { @@ -22130,7 +22286,7 @@ }, { "description": "Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123').", - "example": "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3", + "example": "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue", "in": "query", "name": "filter", "schema": { @@ -22181,7 +22337,7 @@ }, { "description": "Filtering parameter in RSQL. See https://github.com/jirutka/rsql-parser. You can specify any object parameter and parameter of related entity (for example title=='Some Title';description=='desc'). Additionally, if the entity relationship represents a polymorphic entity type, it can be casted to its subtypes (for example relatedEntity::subtype.subtypeProperty=='Value 123').", - "example": "filter=type==IdentityProviderTypeValue;identifiers==v1,v2,v3", + "example": "filter=identifiers==v1,v2,v3;customClaimMapping==MapValue", "in": "query", "name": "filter", "schema": { @@ -33805,7 +33961,8 @@ }, "summary": "Get permissions for the data source", "tags": [ - "layout" + "layout", + "Manage Permissions" ], "x-gdc-security-info": { "description": "Permissions required to manipulate permissions.", @@ -33815,7 +33972,7 @@ } }, "put": { - "description": "et data source permissions.", + "description": "set data source permissions.", "operationId": "setDataSourcePermissions", "parameters": [ { @@ -33844,7 +34001,8 @@ }, "summary": "Set data source permissions.", "tags": [ - "layout" + "layout", + "Manage Permissions" ], "x-gdc-security-info": { "description": "Permissions to modify the user data filters.", @@ -33854,6 +34012,71 @@ } } }, + "/api/v1/layout/identityProviders": { + "get": { + "description": "Gets complete layout of identity providers.", + "operationId": "getIdentityProvidersLayout", + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/DeclarativeIdentityProvider" + }, + "type": "array" + } + } + }, + "description": "Retrieved layout of all identity providers." + } + }, + "summary": "Get all identity providers layout", + "tags": [ + "layout", + "Identity Providers" + ], + "x-gdc-security-info": { + "description": "Permission required to get identity providers layout.", + "permissions": [ + "MANAGE" + ] + } + }, + "put": { + "description": "Sets identity providers in organization.", + "operationId": "setIdentityProviders", + "requestBody": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/DeclarativeIdentityProvider" + }, + "type": "array" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "All identity providers set." + } + }, + "summary": "Set all identity providers", + "tags": [ + "layout", + "Identity Providers" + ], + "x-gdc-security-info": { + "description": "Permission required to set identity providers layout.", + "permissions": [ + "MANAGE" + ] + } + } + }, "/api/v1/layout/notificationChannels": { "get": { "description": "Gets complete layout of notification channels.", @@ -33872,7 +34095,8 @@ }, "summary": "Get all notification channels layout", "tags": [ - "layout" + "layout", + "Notification Channels" ], "x-gdc-security-info": { "description": "Permission required to get notification channels layout.", @@ -33901,7 +34125,8 @@ }, "summary": "Set all notification channels", "tags": [ - "layout" + "layout", + "Notification Channels" ], "x-gdc-security-info": { "description": "Permission required to set data filters layout.", diff --git a/schemas/gooddata-scan-client.json b/schemas/gooddata-scan-client.json index 0a6d83435..30fc1e8a2 100644 --- a/schemas/gooddata-scan-client.json +++ b/schemas/gooddata-scan-client.json @@ -567,6 +567,14 @@ "TestDefinitionRequest": { "description": "A request containing all information for testing data source definition.", "properties": { + "clientId": { + "description": "Id for client based authentication for data sources which supports it.", + "type": "string" + }, + "clientSecret": { + "description": "Secret for client based authentication for data sources which supports it.", + "type": "string" + }, "parameters": { "items": { "$ref": "#/components/schemas/DataSourceParameter" @@ -620,7 +628,8 @@ "PINOT", "SINGLESTORE", "MOTHERDUCK", - "FLIGHTRPC" + "FLIGHTRPC", + "FLEXCONNECT" ], "example": "POSTGRESQL", "type": "string" @@ -665,6 +674,14 @@ "TestRequest": { "description": "A request containing all information for testing existing data source.", "properties": { + "clientId": { + "description": "Id for client based authentication for data sources which supports it.", + "type": "string" + }, + "clientSecret": { + "description": "Secret for client based authentication for data sources which supports it.", + "type": "string" + }, "parameters": { "items": { "$ref": "#/components/schemas/DataSourceParameter" From 93512ab3aaaf382f6b918deab1f419f4e85acb9c Mon Sep 17 00:00:00 2001 From: Christopher Bonilla Date: Mon, 25 Nov 2024 16:06:06 +0100 Subject: [PATCH 2/3] feat: IdP Management JIRA: LX-451, LX-404 risk: low --- .../entity_model/identity_provider.py | 88 +++ .../organization/layout/identity_provider.py | 24 + .../catalog/organization/service.py | 121 ++++- .../create_identity_provider.yaml | 326 +++++++++++ .../delete_identity_provider.yaml | 393 ++++++++++++++ .../layout_identity_providers.yaml | 370 +++++++++++++ .../organization/list_identity_providers.yaml | 504 ++++++++++++++++++ .../update_identity_provider.yaml | 427 +++++++++++++++ .../catalog/test_catalog_organization.py | 207 +++++++ 9 files changed, 2454 insertions(+), 6 deletions(-) create mode 100644 gooddata-sdk/gooddata_sdk/catalog/organization/entity_model/identity_provider.py create mode 100644 gooddata-sdk/gooddata_sdk/catalog/organization/layout/identity_provider.py create mode 100644 gooddata-sdk/tests/catalog/fixtures/organization/create_identity_provider.yaml create mode 100644 gooddata-sdk/tests/catalog/fixtures/organization/delete_identity_provider.yaml create mode 100644 gooddata-sdk/tests/catalog/fixtures/organization/layout_identity_providers.yaml create mode 100644 gooddata-sdk/tests/catalog/fixtures/organization/list_identity_providers.yaml create mode 100644 gooddata-sdk/tests/catalog/fixtures/organization/update_identity_provider.yaml diff --git a/gooddata-sdk/gooddata_sdk/catalog/organization/entity_model/identity_provider.py b/gooddata-sdk/gooddata_sdk/catalog/organization/entity_model/identity_provider.py new file mode 100644 index 000000000..5e4850271 --- /dev/null +++ b/gooddata-sdk/gooddata_sdk/catalog/organization/entity_model/identity_provider.py @@ -0,0 +1,88 @@ +# (C) 2024 GoodData Corporation +from __future__ import annotations + +from typing import Any, Optional + +import attr +from gooddata_api_client.model.json_api_identity_provider_in import JsonApiIdentityProviderIn +from gooddata_api_client.model.json_api_identity_provider_in_attributes import JsonApiIdentityProviderInAttributes +from gooddata_api_client.model.json_api_identity_provider_in_document import JsonApiIdentityProviderInDocument + +from gooddata_sdk.catalog.base import Base +from gooddata_sdk.utils import safeget + + +@attr.s(auto_attribs=True, kw_only=True) +class CatalogIdentityProviderDocument(Base): + data: CatalogIdentityProvider + + @staticmethod + def client_class() -> type[JsonApiIdentityProviderInDocument]: + return JsonApiIdentityProviderInDocument + + +@attr.s(auto_attribs=True, kw_only=True) +class CatalogIdentityProvider(Base): + id: str + attributes: Optional[CatalogIdentityProviderAttributes] = None + + @staticmethod + def client_class() -> type[JsonApiIdentityProviderIn]: + return JsonApiIdentityProviderIn + + @classmethod + def init( + cls, + identity_provider_id: str, + custom_claim_mapping: Optional[dict[str, str]] = None, + identifiers: Optional[list[str]] = None, + oauth_client_id: Optional[str] = None, + oauth_client_secret: Optional[str] = None, + oauth_issuer_id: Optional[str] = None, + oauth_issuer_location: Optional[str] = None, + saml_metadata: Optional[str] = None, + ) -> CatalogIdentityProvider: + return cls( + id=identity_provider_id, + attributes=CatalogIdentityProviderAttributes( + custom_claim_mapping=custom_claim_mapping, + identifiers=identifiers, + oauth_client_id=oauth_client_id, + oauth_client_secret=oauth_client_secret, + oauth_issuer_id=oauth_issuer_id, + oauth_issuer_location=oauth_issuer_location, + saml_metadata=saml_metadata, + ), + ) + + @classmethod + def from_api(cls, entity: dict[str, Any]) -> CatalogIdentityProvider: + ea = entity["attributes"] + attr = CatalogIdentityProviderAttributes( + custom_claim_mapping=safeget(ea, ["custom_claim_mapping"]), + identifiers=safeget(ea, ["identifiers"]), + oauth_client_id=safeget(ea, ["oauth_client_id"]), + oauth_client_secret=safeget(ea, ["oauth_client_secret"]), + oauth_issuer_id=safeget(ea, ["oauth_issuer_id"]), + oauth_issuer_location=safeget(ea, ["oauth_issuer_location"]), + saml_metadata=safeget(ea, ["saml_metadata"]), + ) + return cls( + id=entity["id"], + attributes=attr, + ) + + +@attr.s(auto_attribs=True, kw_only=True) +class CatalogIdentityProviderAttributes(Base): + custom_claim_mapping: Optional[dict[str, str]] = None + identifiers: Optional[list[str]] = None + oauth_client_id: Optional[str] = None + oauth_client_secret: Optional[str] = None + oauth_issuer_id: Optional[str] = None + oauth_issuer_location: Optional[str] = None + saml_metadata: Optional[str] = None + + @staticmethod + def client_class() -> type[JsonApiIdentityProviderInAttributes]: + return JsonApiIdentityProviderInAttributes diff --git a/gooddata-sdk/gooddata_sdk/catalog/organization/layout/identity_provider.py b/gooddata-sdk/gooddata_sdk/catalog/organization/layout/identity_provider.py new file mode 100644 index 000000000..3d338a1ca --- /dev/null +++ b/gooddata-sdk/gooddata_sdk/catalog/organization/layout/identity_provider.py @@ -0,0 +1,24 @@ +# (C) 2024 GoodData Corporation +import builtins +from typing import Optional + +import attr +from gooddata_api_client.model.declarative_identity_provider import DeclarativeIdentityProvider + +from gooddata_sdk.catalog.base import Base + + +@attr.s(auto_attribs=True, kw_only=True) +class CatalogDeclarativeIdentityProvider(Base): + id: str + custom_claim_mapping: Optional[dict[str, str]] = None + identifiers: Optional[list[str]] = None + oauth_client_id: Optional[str] = None + oauth_client_secret: Optional[str] = None + oauth_issuer_id: Optional[str] = None + oauth_issuer_location: Optional[str] = None + saml_metadata: Optional[str] = None + + @staticmethod + def client_class() -> builtins.type[DeclarativeIdentityProvider]: + return DeclarativeIdentityProvider diff --git a/gooddata-sdk/gooddata_sdk/catalog/organization/service.py b/gooddata-sdk/gooddata_sdk/catalog/organization/service.py index e7c748009..dc0548884 100644 --- a/gooddata-sdk/gooddata_sdk/catalog/organization/service.py +++ b/gooddata-sdk/gooddata_sdk/catalog/organization/service.py @@ -7,16 +7,19 @@ from gooddata_api_client.exceptions import NotFoundException from gooddata_api_client.model.declarative_notification_channels import DeclarativeNotificationChannels from gooddata_api_client.model.json_api_csp_directive_in_document import JsonApiCspDirectiveInDocument +from gooddata_api_client.model.json_api_identity_provider_in_document import JsonApiIdentityProviderInDocument from gooddata_api_client.model.json_api_organization_setting_in_document import JsonApiOrganizationSettingInDocument from gooddata_sdk.catalog.catalog_service_base import CatalogServiceBase from gooddata_sdk.catalog.organization.entity_model.directive import CatalogCspDirective +from gooddata_sdk.catalog.organization.entity_model.identity_provider import CatalogIdentityProvider from gooddata_sdk.catalog.organization.entity_model.jwk import CatalogJwk, CatalogJwkDocument from gooddata_sdk.catalog.organization.entity_model.organization import CatalogOrganizationDocument from gooddata_sdk.catalog.organization.entity_model.setting import CatalogOrganizationSetting +from gooddata_sdk.catalog.organization.layout.identity_provider import CatalogDeclarativeIdentityProvider from gooddata_sdk.catalog.organization.layout.notification_channel import CatalogDeclarativeNotificationChannel from gooddata_sdk.client import GoodDataApiClient -from gooddata_sdk.utils import load_all_entities +from gooddata_sdk.utils import load_all_entities, load_all_entities_dict class CatalogOrganizationService(CatalogServiceBase): @@ -188,7 +191,7 @@ def create_organization_setting(self, organization_setting: CatalogOrganizationS Args: organization_setting (CatalogOrganizationSettings): - A catalog organization setting an object to be created. + A catalog organization setting object to be created. Returns: None @@ -225,7 +228,7 @@ def update_organization_setting(self, organization_setting: CatalogOrganizationS Args: organization_setting (CatalogOrganizationSettings): - A catalog organization setting an object to be updated. + A catalog organization setting object to be updated. Returns: None @@ -249,7 +252,7 @@ def list_csp_directives(self) -> list[CatalogCspDirective]: """Returns a list of all csp directives in the current organization. Returns: - list[CatalogOrganizationSettings]: + list[CatalogCspDirective]: List of csp directives in the current organization. """ get_csp_directives = functools.partial( @@ -277,7 +280,7 @@ def create_csp_directive(self, csp_directive: CatalogCspDirective) -> None: Args: csp_directive (CatalogCspDirective): - A catalog csp directive an object to be created. + A catalog csp directive object to be created. Returns: None @@ -309,7 +312,7 @@ def update_csp_directive(self, csp_directive: CatalogCspDirective) -> None: Args: csp_directive (CatalogCspDirective): - A catalog csp directive an object to be updated. + A catalog csp directive object to be updated. Returns: None @@ -324,6 +327,86 @@ def update_csp_directive(self, csp_directive: CatalogCspDirective) -> None: except NotFoundException: raise ValueError(f"Can not update {csp_directive.id} csp directive. This csp directive does not exist.") + def list_identity_providers(self) -> list[CatalogIdentityProvider]: + """Returns a list of all identity providers in the current organization. + + Returns: + list[CatalogIdentityProvider]: + List of identity providers in the current organization. + """ + get_identity_providers = functools.partial( + self._entities_api.get_all_entities_identity_providers, + _check_return_type=False, + ) + identity_providers = load_all_entities_dict(get_identity_providers, camel_case=False) + return [ + CatalogIdentityProvider.from_dict(identity_provider, camel_case=False) + for identity_provider in identity_providers["data"] + ] + + def get_identity_provider(self, identity_provider_id: str) -> CatalogIdentityProvider: + """Get an individual identity provider. + + Args: + identity_provider_id (str): + Identity provider identification string e.g. "demo" + + Returns: + CatalogIdentityProvider: + Catalog identity provider object containing structure of the identity provider. + """ + identity_provider_api = self._entities_api.get_entity_identity_providers(id=identity_provider_id).data + return CatalogIdentityProvider.from_api(identity_provider_api) + + def create_identity_provider(self, identity_provider: CatalogIdentityProvider) -> None: + """Create a new identity provider. + + Args: + identity_provider (CatalogIdentityProvider): + A catalog identity provider object to be created. + + Returns: + None + """ + identity_provider_document = JsonApiIdentityProviderInDocument(data=identity_provider.to_api()) + self._entities_api.create_entity_identity_providers( + json_api_identity_provider_in_document=identity_provider_document + ) + + def delete_identity_provider(self, identity_provider_id: str) -> None: + """Delete an identity provider. + + Args: + identity_provider_id (str): + Identity provider identification string e.g. "demo" + + Returns: + None + """ + self._entities_api.delete_entity_identity_providers(identity_provider_id) + + def update_identity_provider(self, identity_provider: CatalogIdentityProvider) -> None: + """Update an identity provider. + + Args: + identity_provider (CatalogIdentityProvider): + A catalog identity provider object to be updated. + + Returns: + None + + Raises: + ValueError: + Identity provider does not exist. + """ + try: + identity_provider_document = JsonApiIdentityProviderInDocument(data=identity_provider.to_api()) + self._entities_api.update_entity_identity_providers(identity_provider.id, identity_provider_document) + except NotFoundException: + raise ValueError( + f"Can not update {identity_provider.id} identity provider. " f"This identity provider does not exist." + ) + # Layout APIs def get_declarative_notification_channels(self) -> list[CatalogDeclarativeNotificationChannel]: @@ -354,3 +437,29 @@ def put_declarative_notification_channels( """ api_ncs = [nc.to_api() for nc in notification_channels] self._layout_api.set_notification_channels(DeclarativeNotificationChannels(notification_channels=api_ncs)) + + def get_declarative_identity_providers(self) -> list[CatalogDeclarativeIdentityProvider]: + """ + Get all declarative identity providers in the current organization. + + Returns: + list[CatalogDeclarativeIdentityProvider]: + List of declarative identity providers. + """ + return [ + CatalogDeclarativeIdentityProvider.from_api(idp) for idp in self._layout_api.get_identity_providers_layout() + ] + + def put_declarative_identity_providers(self, identity_providers: list[CatalogDeclarativeIdentityProvider]) -> None: + """ + Put declarative identity providers in the current organization. + + Args: + identity_providers (list[CatalogDeclarativeIdentityProvider]): + List of declarative identity providers. + + Returns: + None + """ + api_idps = [idp.to_api() for idp in identity_providers] + self._layout_api.set_identity_providers(declarative_identity_provider=api_idps) diff --git a/gooddata-sdk/tests/catalog/fixtures/organization/create_identity_provider.yaml b/gooddata-sdk/tests/catalog/fixtures/organization/create_identity_provider.yaml new file mode 100644 index 000000000..f6a1ba33f --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/organization/create_identity_provider.yaml @@ -0,0 +1,326 @@ +# (C) 2024 GoodData Corporation +version: 1 +interactions: + - request: + method: POST + uri: http://localhost:3000/api/v1/entities/identityProviders + body: + data: + id: test_identity_provider + type: identityProvider + attributes: + customClaimMapping: + email: email + identifiers: + - goodtesting.com + oauthClientId: test_client_id + oauthClientSecret: test_client_secret + oauthIssuerId: test_issuer_id + oauthIssuerLocation: https://issuer.goodtesting.com + headers: + Accept: + - application/vnd.gooddata.api+json + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/vnd.gooddata.api+json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 201 + message: Created + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '373' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/vnd.gooddata.api+json + DATE: &id001 + - PLACEHOLDER + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:23 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: + data: + id: test_identity_provider + type: identityProvider + attributes: + identifiers: + - goodtesting.com + customClaimMapping: + email: email + oauthClientId: test_client_id + oauthIssuerLocation: https://issuer.goodtesting.com + oauthIssuerId: test_issuer_id + links: + self: http://localhost:3000/api/v1/entities/identityProviders/test_identity_provider + - request: + method: GET + uri: http://localhost:3000/api/v1/entities/identityProviders/test_identity_provider + body: null + headers: + Accept: + - application/vnd.gooddata.api+json + Accept-Encoding: + - br, gzip, deflate + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '373' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/vnd.gooddata.api+json + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:23 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: + data: + id: test_identity_provider + type: identityProvider + attributes: + identifiers: + - goodtesting.com + customClaimMapping: + email: email + oauthClientId: test_client_id + oauthIssuerLocation: https://issuer.goodtesting.com + oauthIssuerId: test_issuer_id + links: + self: http://localhost:3000/api/v1/entities/identityProviders/test_identity_provider + - request: + method: DELETE + uri: http://localhost:3000/api/v1/entities/identityProviders/test_identity_provider + body: null + headers: + Accept-Encoding: + - br, gzip, deflate + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 204 + message: No Content + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:23 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: '' + - request: + method: GET + uri: http://localhost:3000/api/v1/entities/identityProviders?page=0&size=500 + body: null + headers: + Accept: + - application/vnd.gooddata.api+json + Accept-Encoding: + - br, gzip, deflate + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '183' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/vnd.gooddata.api+json + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:23 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: + data: [] + links: + self: http://localhost:3000/api/v1/entities/identityProviders?page=0&size=500 + next: http://localhost:3000/api/v1/entities/identityProviders?page=1&size=500 diff --git a/gooddata-sdk/tests/catalog/fixtures/organization/delete_identity_provider.yaml b/gooddata-sdk/tests/catalog/fixtures/organization/delete_identity_provider.yaml new file mode 100644 index 000000000..cd6fb55f8 --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/organization/delete_identity_provider.yaml @@ -0,0 +1,393 @@ +# (C) 2024 GoodData Corporation +version: 1 +interactions: + - request: + method: POST + uri: http://localhost:3000/api/v1/entities/identityProviders + body: + data: + id: test_identity_provider + type: identityProvider + attributes: + customClaimMapping: + email: email + identifiers: + - goodtesting.com + oauthClientId: test_client_id + oauthClientSecret: test_client_secret + oauthIssuerId: test_issuer_id + oauthIssuerLocation: https://issuer.goodtesting.com + headers: + Accept: + - application/vnd.gooddata.api+json + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/vnd.gooddata.api+json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 201 + message: Created + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '373' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/vnd.gooddata.api+json + DATE: &id001 + - PLACEHOLDER + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:24 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: + data: + id: test_identity_provider + type: identityProvider + attributes: + identifiers: + - goodtesting.com + customClaimMapping: + email: email + oauthClientId: test_client_id + oauthIssuerLocation: https://issuer.goodtesting.com + oauthIssuerId: test_issuer_id + links: + self: http://localhost:3000/api/v1/entities/identityProviders/test_identity_provider + - request: + method: DELETE + uri: http://localhost:3000/api/v1/entities/identityProviders/test_identity_provider + body: null + headers: + Accept-Encoding: + - br, gzip, deflate + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 204 + message: No Content + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:24 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: '' + - request: + method: GET + uri: http://localhost:3000/api/v1/entities/identityProviders/test_identity_provider + body: null + headers: + Accept: + - application/vnd.gooddata.api+json + Accept-Encoding: + - br, gzip, deflate + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 404 + message: Not Found + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '172' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/problem+json + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:24 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: + detail: The requested endpoint does not exist or you do not have permission + to access it. + status: 404 + title: Not Found + traceId: 674490cc6c7b69e73b0d3e3e900238a4 + - request: + method: GET + uri: http://localhost:3000/api/v1/entities/identityProviders?page=0&size=500 + body: null + headers: + Accept: + - application/vnd.gooddata.api+json + Accept-Encoding: + - br, gzip, deflate + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '183' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/vnd.gooddata.api+json + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:24 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: + data: [] + links: + self: http://localhost:3000/api/v1/entities/identityProviders?page=0&size=500 + next: http://localhost:3000/api/v1/entities/identityProviders?page=1&size=500 + - request: + method: GET + uri: http://localhost:3000/api/v1/entities/identityProviders?page=0&size=500 + body: null + headers: + Accept: + - application/vnd.gooddata.api+json + Accept-Encoding: + - br, gzip, deflate + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '183' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/vnd.gooddata.api+json + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:24 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: + data: [] + links: + self: http://localhost:3000/api/v1/entities/identityProviders?page=0&size=500 + next: http://localhost:3000/api/v1/entities/identityProviders?page=1&size=500 diff --git a/gooddata-sdk/tests/catalog/fixtures/organization/layout_identity_providers.yaml b/gooddata-sdk/tests/catalog/fixtures/organization/layout_identity_providers.yaml new file mode 100644 index 000000000..68880e6b5 --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/organization/layout_identity_providers.yaml @@ -0,0 +1,370 @@ +# (C) 2024 GoodData Corporation +version: 1 +interactions: + - request: + method: GET + uri: http://localhost:3000/api/v1/layout/identityProviders + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - br, gzip, deflate + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '2' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/json + DATE: &id001 + - PLACEHOLDER + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:25 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: [] + - request: + method: PUT + uri: http://localhost:3000/api/v1/layout/identityProviders + body: + - id: test_identity_provider + customClaimMapping: + email: email + identifiers: + - goodtesting.com + oauthClientId: test_client_id + oauthClientSecret: test_client_secret + oauthIssuerId: test_issuer_id + oauthIssuerLocation: https://issuer.goodtesting.com + headers: + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 204 + message: No Content + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:25 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: '' + - request: + method: GET + uri: http://localhost:3000/api/v1/layout/identityProviders + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - br, gzip, deflate + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/json + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Transfer-Encoding: + - chunked + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + content-length: + - '227' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:25 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: + - customClaimMapping: + email: email + id: test_identity_provider + identifiers: + - goodtesting.com + oauthClientId: test_client_id + oauthIssuerId: test_issuer_id + oauthIssuerLocation: https://issuer.goodtesting.com + - request: + method: PUT + uri: http://localhost:3000/api/v1/layout/identityProviders + body: [] + headers: + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 204 + message: No Content + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:25 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: '' + - request: + method: GET + uri: http://localhost:3000/api/v1/layout/identityProviders + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - br, gzip, deflate + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '2' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/json + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:25 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: [] diff --git a/gooddata-sdk/tests/catalog/fixtures/organization/list_identity_providers.yaml b/gooddata-sdk/tests/catalog/fixtures/organization/list_identity_providers.yaml new file mode 100644 index 000000000..c521d6fb3 --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/organization/list_identity_providers.yaml @@ -0,0 +1,504 @@ +# (C) 2024 GoodData Corporation +version: 1 +interactions: + - request: + method: POST + uri: http://localhost:3000/api/v1/entities/identityProviders + body: + data: + id: test_identity_provider_1 + type: identityProvider + attributes: + customClaimMapping: + email: email + identifiers: + - goodtesting.com + oauthClientId: test_client_id_1 + oauthClientSecret: test_client_secret_1 + oauthIssuerId: test_issuer_id_1 + oauthIssuerLocation: https://issuer.goodtesting.com + headers: + Accept: + - application/vnd.gooddata.api+json + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/vnd.gooddata.api+json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 201 + message: Created + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '381' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/vnd.gooddata.api+json + DATE: &id001 + - PLACEHOLDER + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:23 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: + data: + id: test_identity_provider_1 + type: identityProvider + attributes: + identifiers: + - goodtesting.com + customClaimMapping: + email: email + oauthClientId: test_client_id_1 + oauthIssuerLocation: https://issuer.goodtesting.com + oauthIssuerId: test_issuer_id_1 + links: + self: http://localhost:3000/api/v1/entities/identityProviders/test_identity_provider_1 + - request: + method: POST + uri: http://localhost:3000/api/v1/entities/identityProviders + body: + data: + id: test_identity_provider_2 + type: identityProvider + attributes: + customClaimMapping: + email: email + identifiers: + - goodtesting.com + oauthClientId: test_client_id_2 + oauthClientSecret: test_client_secret_2 + oauthIssuerId: test_issuer_id_2 + oauthIssuerLocation: https://issuer.goodtesting.com + headers: + Accept: + - application/vnd.gooddata.api+json + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/vnd.gooddata.api+json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 201 + message: Created + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '381' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/vnd.gooddata.api+json + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:24 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: + data: + id: test_identity_provider_2 + type: identityProvider + attributes: + identifiers: + - goodtesting.com + customClaimMapping: + email: email + oauthClientId: test_client_id_2 + oauthIssuerLocation: https://issuer.goodtesting.com + oauthIssuerId: test_issuer_id_2 + links: + self: http://localhost:3000/api/v1/entities/identityProviders/test_identity_provider_2 + - request: + method: GET + uri: http://localhost:3000/api/v1/entities/identityProviders?page=0&size=500 + body: null + headers: + Accept: + - application/vnd.gooddata.api+json + Accept-Encoding: + - br, gzip, deflate + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '928' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/vnd.gooddata.api+json + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:24 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: + data: + - id: test_identity_provider_1 + type: identityProvider + attributes: + identifiers: + - goodtesting.com + customClaimMapping: + email: email + oauthClientId: test_client_id_1 + oauthIssuerLocation: https://issuer.goodtesting.com + oauthIssuerId: test_issuer_id_1 + links: + self: http://localhost:3000/api/v1/entities/identityProviders/test_identity_provider_1 + - id: test_identity_provider_2 + type: identityProvider + attributes: + identifiers: + - goodtesting.com + customClaimMapping: + email: email + oauthClientId: test_client_id_2 + oauthIssuerLocation: https://issuer.goodtesting.com + oauthIssuerId: test_issuer_id_2 + links: + self: http://localhost:3000/api/v1/entities/identityProviders/test_identity_provider_2 + links: + self: http://localhost:3000/api/v1/entities/identityProviders?page=0&size=500 + next: http://localhost:3000/api/v1/entities/identityProviders?page=1&size=500 + - request: + method: DELETE + uri: http://localhost:3000/api/v1/entities/identityProviders/test_identity_provider_1 + body: null + headers: + Accept-Encoding: + - br, gzip, deflate + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 204 + message: No Content + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:24 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: '' + - request: + method: DELETE + uri: http://localhost:3000/api/v1/entities/identityProviders/test_identity_provider_2 + body: null + headers: + Accept-Encoding: + - br, gzip, deflate + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 204 + message: No Content + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:24 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: '' + - request: + method: GET + uri: http://localhost:3000/api/v1/entities/identityProviders?page=0&size=500 + body: null + headers: + Accept: + - application/vnd.gooddata.api+json + Accept-Encoding: + - br, gzip, deflate + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '183' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/vnd.gooddata.api+json + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:24 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: + data: [] + links: + self: http://localhost:3000/api/v1/entities/identityProviders?page=0&size=500 + next: http://localhost:3000/api/v1/entities/identityProviders?page=1&size=500 diff --git a/gooddata-sdk/tests/catalog/fixtures/organization/update_identity_provider.yaml b/gooddata-sdk/tests/catalog/fixtures/organization/update_identity_provider.yaml new file mode 100644 index 000000000..bb533f591 --- /dev/null +++ b/gooddata-sdk/tests/catalog/fixtures/organization/update_identity_provider.yaml @@ -0,0 +1,427 @@ +# (C) 2024 GoodData Corporation +version: 1 +interactions: + - request: + method: POST + uri: http://localhost:3000/api/v1/entities/identityProviders + body: + data: + id: test_identity_provider + type: identityProvider + attributes: + customClaimMapping: + email: email + identifiers: + - goodtesting.com + oauthClientId: test_client_id + oauthClientSecret: test_client_secret + oauthIssuerId: test_issuer_id + oauthIssuerLocation: https://issuer.goodtesting.com + headers: + Accept: + - application/vnd.gooddata.api+json + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/vnd.gooddata.api+json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 201 + message: Created + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '373' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/vnd.gooddata.api+json + DATE: &id001 + - PLACEHOLDER + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:25 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: + data: + id: test_identity_provider + type: identityProvider + attributes: + identifiers: + - goodtesting.com + customClaimMapping: + email: email + oauthClientId: test_client_id + oauthIssuerLocation: https://issuer.goodtesting.com + oauthIssuerId: test_issuer_id + links: + self: http://localhost:3000/api/v1/entities/identityProviders/test_identity_provider + - request: + method: PUT + uri: http://localhost:3000/api/v1/entities/identityProviders/test_identity_provider + body: + data: + id: test_identity_provider + type: identityProvider + attributes: + customClaimMapping: + email: email + identifiers: + - goodtesting.com + - anotheridentifier.com + oauthClientId: test_client_id + oauthClientSecret: test_client_secret + oauthIssuerId: test_issuer_id + oauthIssuerLocation: https://issuer.goodtesting.com + headers: + Accept: + - application/vnd.gooddata.api+json + Accept-Encoding: + - br, gzip, deflate + Content-Type: + - application/vnd.gooddata.api+json + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '397' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/vnd.gooddata.api+json + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:25 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: + data: + id: test_identity_provider + type: identityProvider + attributes: + identifiers: + - goodtesting.com + - anotheridentifier.com + customClaimMapping: + email: email + oauthClientId: test_client_id + oauthIssuerLocation: https://issuer.goodtesting.com + oauthIssuerId: test_issuer_id + links: + self: http://localhost:3000/api/v1/entities/identityProviders/test_identity_provider + - request: + method: GET + uri: http://localhost:3000/api/v1/entities/identityProviders/test_identity_provider + body: null + headers: + Accept: + - application/vnd.gooddata.api+json + Accept-Encoding: + - br, gzip, deflate + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '397' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/vnd.gooddata.api+json + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:25 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: + data: + id: test_identity_provider + type: identityProvider + attributes: + identifiers: + - goodtesting.com + - anotheridentifier.com + customClaimMapping: + email: email + oauthClientId: test_client_id + oauthIssuerLocation: https://issuer.goodtesting.com + oauthIssuerId: test_issuer_id + links: + self: http://localhost:3000/api/v1/entities/identityProviders/test_identity_provider + - request: + method: DELETE + uri: http://localhost:3000/api/v1/entities/identityProviders/test_identity_provider + body: null + headers: + Accept-Encoding: + - br, gzip, deflate + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 204 + message: No Content + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:25 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: '' + - request: + method: GET + uri: http://localhost:3000/api/v1/entities/identityProviders?page=0&size=500 + body: null + headers: + Accept: + - application/vnd.gooddata.api+json + Accept-Encoding: + - br, gzip, deflate + X-GDC-VALIDATE-RELATIONS: + - 'true' + X-Requested-With: + - XMLHttpRequest + response: + status: + code: 200 + message: OK + headers: + Access-Control-Allow-Credentials: + - 'true' + Access-Control-Expose-Headers: + - Content-Disposition, Content-Length, Content-Range, Set-Cookie + Cache-Control: + - no-cache, no-store, max-age=0, must-revalidate + Connection: + - keep-alive + Content-Length: + - '183' + Content-Security-Policy: + - 'default-src ''self'' *.wistia.com *.wistia.net; script-src ''self'' ''unsafe-inline'' + ''unsafe-eval'' *.wistia.com *.wistia.net *.hsforms.net *.hsforms.com + src.litix.io matomo.anywhere.gooddata.com *.jquery.com unpkg.com cdnjs.cloudflare.com; + img-src * data: blob:; style-src ''self'' ''unsafe-inline'' fonts.googleapis.com + cdn.jsdelivr.net fast.fonts.net; font-src ''self'' data: fonts.gstatic.com + *.alicdn.com *.wistia.com cdn.jsdelivr.net info.gooddata.com; frame-src + ''self'' *.hsforms.net *.hsforms.com; object-src ''none''; worker-src + ''self'' blob:; child-src blob:; connect-src ''self'' *.tiles.mapbox.com + *.mapbox.com *.litix.io *.wistia.com *.hsforms.net *.hsforms.com embedwistia-a.akamaihd.net + matomo.anywhere.gooddata.com; media-src ''self'' blob: data: *.wistia.com + *.wistia.net embedwistia-a.akamaihd.net' + Content-Type: + - application/vnd.gooddata.api+json + DATE: *id001 + Expires: + - '0' + GoodData-Deployment: + - aio + Permission-Policy: + - geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera + 'none'; magnetometer 'none'; gyroscope 'none'; fullscreen 'none'; payment + 'none'; + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Server: + - nginx + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-XSS-Protection: + - '0' + set-cookie: + - SPRING_REDIRECT_URI=; Max-Age=0; Expires=Mon, 25 Nov 2024 14:59:25 GMT; + Path=/; HTTPOnly; SameSite=Lax + body: + string: + data: [] + links: + self: http://localhost:3000/api/v1/entities/identityProviders?page=0&size=500 + next: http://localhost:3000/api/v1/entities/identityProviders?page=1&size=500 diff --git a/gooddata-sdk/tests/catalog/test_catalog_organization.py b/gooddata-sdk/tests/catalog/test_catalog_organization.py index 02dcc2fcf..9f6b63874 100644 --- a/gooddata-sdk/tests/catalog/test_catalog_organization.py +++ b/gooddata-sdk/tests/catalog/test_catalog_organization.py @@ -14,6 +14,8 @@ CatalogWebhook, GoodDataSdk, ) +from gooddata_sdk.catalog.organization.entity_model.identity_provider import CatalogIdentityProvider +from gooddata_sdk.catalog.organization.layout.identity_provider import CatalogDeclarativeIdentityProvider from tests_support.vcrpy_utils import get_vcr gd_vcr = get_vcr() @@ -374,3 +376,208 @@ def test_layout_notification_channels(test_config): sdk.catalog_organization.put_declarative_notification_channels([]) ncs = sdk.catalog_organization.get_declarative_notification_channels() assert len(ncs) == 0 + + +@gd_vcr.use_cassette(str(_fixtures_dir / "create_identity_provider.yaml")) +def test_create_identity_provider(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + + identity_provider_id = "test_identity_provider" + custom_claim_mapping = {"email": "email"} + identifiers = ["goodtesting.com"] + oauth_client_id = "test_client_id" + oauth_client_secret = "test_client_secret" + oauth_issuer_id = "test_issuer_id" + oauth_issuer_location = "https://issuer.goodtesting.com" + + new_identity_provider = CatalogIdentityProvider.init( + identity_provider_id=identity_provider_id, + custom_claim_mapping=custom_claim_mapping, + identifiers=identifiers, + oauth_client_id=oauth_client_id, + oauth_client_secret=oauth_client_secret, + oauth_issuer_id=oauth_issuer_id, + oauth_issuer_location=oauth_issuer_location, + ) + + try: + sdk.catalog_organization.create_identity_provider(new_identity_provider) + identity_provider = sdk.catalog_organization.get_identity_provider(identity_provider_id) + assert identity_provider.id == identity_provider_id + assert identity_provider.attributes.custom_claim_mapping == custom_claim_mapping + assert identity_provider.attributes.identifiers == identifiers + assert identity_provider.attributes.oauth_client_id == oauth_client_id + assert identity_provider.attributes.oauth_client_secret is None # oauth_client_secret is not returned + assert identity_provider.attributes.oauth_issuer_id == oauth_issuer_id + assert identity_provider.attributes.oauth_issuer_location == oauth_issuer_location + finally: + sdk.catalog_organization.delete_identity_provider(identity_provider_id) + assert len(sdk.catalog_organization.list_identity_providers()) == 0 + + +@gd_vcr.use_cassette(str(_fixtures_dir / "list_identity_providers.yaml")) +def test_list_identity_providers(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + + identity_provider_id = "test_identity_provider" + custom_claim_mapping = {"email": "email"} + identifiers = ["goodtesting.com"] + oauth_client_id = "test_client_id" + oauth_client_secret = "test_client_secret" + oauth_issuer_id = "test_issuer_id" + oauth_issuer_location = "https://issuer.goodtesting.com" + + new_identity_provider_1 = CatalogIdentityProvider.init( + identity_provider_id=identity_provider_id + "_1", + custom_claim_mapping=custom_claim_mapping, + identifiers=identifiers, + oauth_client_id=oauth_client_id + "_1", + oauth_client_secret=oauth_client_secret + "_1", + oauth_issuer_id=oauth_issuer_id + "_1", + oauth_issuer_location=oauth_issuer_location, + ) + new_identity_provider_2 = CatalogIdentityProvider.init( + identity_provider_id=identity_provider_id + "_2", + custom_claim_mapping=custom_claim_mapping, + identifiers=identifiers, + oauth_client_id=oauth_client_id + "_2", + oauth_client_secret=oauth_client_secret + "_2", + oauth_issuer_id=oauth_issuer_id + "_2", + oauth_issuer_location=oauth_issuer_location, + ) + + try: + sdk.catalog_organization.create_identity_provider(new_identity_provider_1) + sdk.catalog_organization.create_identity_provider(new_identity_provider_2) + identity_providers = sdk.catalog_organization.list_identity_providers() + # oauth_client_secret is not returned + new_identity_provider_1.attributes.oauth_client_secret = None + new_identity_provider_2.attributes.oauth_client_secret = None + assert len(identity_providers) == 2 + assert new_identity_provider_1 in identity_providers + assert new_identity_provider_2 in identity_providers + finally: + sdk.catalog_organization.delete_identity_provider(new_identity_provider_1.id) + sdk.catalog_organization.delete_identity_provider(new_identity_provider_2.id) + assert len(sdk.catalog_organization.list_identity_providers()) == 0 + + +@gd_vcr.use_cassette(str(_fixtures_dir / "delete_identity_provider.yaml")) +def test_delete_identity_provider(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + + identity_provider_id = "test_identity_provider" + custom_claim_mapping = {"email": "email"} + identifiers = ["goodtesting.com"] + oauth_client_id = "test_client_id" + oauth_client_secret = "test_client_secret" + oauth_issuer_id = "test_issuer_id" + oauth_issuer_location = "https://issuer.goodtesting.com" + + new_identity_provider = CatalogIdentityProvider.init( + identity_provider_id=identity_provider_id, + custom_claim_mapping=custom_claim_mapping, + identifiers=identifiers, + oauth_client_id=oauth_client_id, + oauth_client_secret=oauth_client_secret, + oauth_issuer_id=oauth_issuer_id, + oauth_issuer_location=oauth_issuer_location, + ) + + try: + sdk.catalog_organization.create_identity_provider(new_identity_provider) + sdk.catalog_organization.delete_identity_provider(identity_provider_id) + sdk.catalog_organization.get_identity_provider(identity_provider_id) + except NotFoundException: + assert len(sdk.catalog_organization.list_identity_providers()) == 0 + finally: + assert len(sdk.catalog_organization.list_identity_providers()) == 0 + + +@gd_vcr.use_cassette(str(_fixtures_dir / "update_identity_provider.yaml")) +def test_update_identity_provider(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + + identity_provider_id = "test_identity_provider" + custom_claim_mapping = {"email": "email"} + identifiers = ["goodtesting.com"] + oauth_client_id = "test_client_id" + oauth_client_secret = "test_client_secret" + oauth_issuer_id = "test_issuer_id" + oauth_issuer_location = "https://issuer.goodtesting.com" + + new_identity_provider = CatalogIdentityProvider.init( + identity_provider_id=identity_provider_id, + custom_claim_mapping=custom_claim_mapping, + identifiers=identifiers, + oauth_client_id=oauth_client_id, + oauth_client_secret=oauth_client_secret, + oauth_issuer_id=oauth_issuer_id, + oauth_issuer_location=oauth_issuer_location, + ) + update_identity_provider = CatalogIdentityProvider.init( + identity_provider_id=identity_provider_id, + custom_claim_mapping=custom_claim_mapping, + identifiers=identifiers + ["anotheridentifier.com"], + oauth_client_id=oauth_client_id, + oauth_client_secret=oauth_client_secret, + oauth_issuer_id=oauth_issuer_id, + oauth_issuer_location=oauth_issuer_location, + ) + + try: + sdk.catalog_organization.create_identity_provider(new_identity_provider) + sdk.catalog_organization.update_identity_provider(update_identity_provider) + identity_provider = sdk.catalog_organization.get_identity_provider(identity_provider_id) + assert identity_provider.id == identity_provider_id + assert identity_provider.attributes.custom_claim_mapping == custom_claim_mapping + assert identity_provider.attributes.identifiers == identifiers + ["anotheridentifier.com"] + assert identity_provider.attributes.oauth_client_id == oauth_client_id + assert identity_provider.attributes.oauth_client_secret is None # oauth_client_secret is not returned + assert identity_provider.attributes.oauth_issuer_id == oauth_issuer_id + assert identity_provider.attributes.oauth_issuer_location == oauth_issuer_location + finally: + sdk.catalog_organization.delete_identity_provider(identity_provider_id) + assert len(sdk.catalog_organization.list_identity_providers()) == 0 + + +@gd_vcr.use_cassette(str(_fixtures_dir / "layout_identity_providers.yaml")) +def test_layout_identity_providers(test_config): + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + + idps = sdk.catalog_organization.get_declarative_identity_providers() + assert len(idps) == 0 + + try: + identity_provider_id = "test_identity_provider" + custom_claim_mapping = {"email": "email"} + identifiers = ["goodtesting.com"] + oauth_client_id = "test_client_id" + oauth_client_secret = "test_client_secret" + oauth_issuer_id = "test_issuer_id" + oauth_issuer_location = "https://issuer.goodtesting.com" + + identity_providers_e = [ + CatalogDeclarativeIdentityProvider( + id=identity_provider_id, + custom_claim_mapping=custom_claim_mapping, + identifiers=identifiers, + oauth_client_id=oauth_client_id, + oauth_client_secret=oauth_client_secret, + oauth_issuer_id=oauth_issuer_id, + oauth_issuer_location=oauth_issuer_location, + ), + ] + sdk.catalog_organization.put_declarative_identity_providers(identity_providers_e) + identity_providers_o = sdk.catalog_organization.get_declarative_identity_providers() + assert identity_providers_o[0].id == identity_providers_e[0].id + assert identity_providers_o[0].custom_claim_mapping == identity_providers_e[0].custom_claim_mapping + assert identity_providers_o[0].identifiers == identity_providers_e[0].identifiers + assert identity_providers_o[0].oauth_client_id == identity_providers_e[0].oauth_client_id + assert identity_providers_o[0].oauth_client_secret is None + assert identity_providers_o[0].oauth_issuer_id == identity_providers_o[0].oauth_issuer_id + assert identity_providers_o[0].oauth_issuer_location == identity_providers_e[0].oauth_issuer_location + finally: + sdk.catalog_organization.put_declarative_identity_providers([]) + idps = sdk.catalog_organization.get_declarative_identity_providers() + assert len(idps) == 0 From 1553ea1bad1536a3420867ef49cd611e51e799d2 Mon Sep 17 00:00:00 2001 From: Christopher Bonilla Date: Mon, 25 Nov 2024 16:06:36 +0100 Subject: [PATCH 3/3] feat: M2M (client id+secret) auth for Databricks JIRA: LX-617 risk: low --- .../en/latest/data/data-source/_index.md | 24 ++++++++++++++++--- gooddata-sdk/gooddata_sdk/__init__.py | 1 + .../declarative_model/data_source.py | 12 ++++++++++ .../data_source/entity_model/data_source.py | 2 ++ gooddata-sdk/gooddata_sdk/catalog/entity.py | 22 +++++++++++++++++ 5 files changed, 58 insertions(+), 3 deletions(-) diff --git a/docs/content/en/latest/data/data-source/_index.md b/docs/content/en/latest/data/data-source/_index.md index 14a33d005..a9066e47d 100644 --- a/docs/content/en/latest/data/data-source/_index.md +++ b/docs/content/en/latest/data/data-source/_index.md @@ -183,6 +183,7 @@ CatalogDataSourceMsSql( ### Databricks +Using Machine-to-Machine (M2M) authentication (client_id + client_secret): ```python CatalogDataSourceDatabricks( id=data_source_id, @@ -193,9 +194,26 @@ CatalogDataSourceDatabricks( ), schema=xyz, parameters=[{"name":"catalog", "value": os.environ["DATABRICKS_CATALOG"]}], - credentials=BasicCredentials( - username=os.environ["DATABRICKS_USER"], - password=os.environ["DATABRICKS_PASSWORD"], + credentials=ClientSecretCredentials( + client_id=os.environ["DATABRICKS_CLIENT_ID"], + client_secret=os.environ["DATABRICKS_CLIENT_SECRET"], + ), +) +``` + +Using personal access token authentication: +```python +CatalogDataSourceDatabricks( + id=data_source_id, + name=data_source_name, + db_specific_attributes=DatabricksAttributes( + host=os.environ["DATABRICKS_HOST"], + http_path=os.environ["DATABRICKS_HTTP_PATH"] + ), + schema=xyz, + parameters=[{"name":"catalog", "value": os.environ["DATABRICKS_CATALOG"]}], + credentials=TokenCredentials( + token=os.environ["DATABRICKS_PERSONAL_ACCESS_TOKEN"] ), ) ``` diff --git a/gooddata-sdk/gooddata_sdk/__init__.py b/gooddata-sdk/gooddata_sdk/__init__.py index e2358f71e..014062e9f 100644 --- a/gooddata-sdk/gooddata_sdk/__init__.py +++ b/gooddata-sdk/gooddata_sdk/__init__.py @@ -55,6 +55,7 @@ from gooddata_sdk.catalog.entity import ( AttrCatalogEntity, BasicCredentials, + ClientSecretCredentials, KeyPairCredentials, TokenCredentialsFromEnvVar, TokenCredentialsFromFile, diff --git a/gooddata-sdk/gooddata_sdk/catalog/data_source/declarative_model/data_source.py b/gooddata-sdk/gooddata_sdk/catalog/data_source/declarative_model/data_source.py index 1ff410c45..80cd4781f 100644 --- a/gooddata-sdk/gooddata_sdk/catalog/data_source/declarative_model/data_source.py +++ b/gooddata-sdk/gooddata_sdk/catalog/data_source/declarative_model/data_source.py @@ -111,6 +111,8 @@ def to_test_request( token: Optional[str] = None, private_key: Optional[str] = None, private_key_passphrase: Optional[str] = None, + client_id: Optional[str] = None, + client_secret: Optional[str] = None, ) -> TestDefinitionRequest: kwargs: dict[str, Any] = {"schema": self.schema} if password is not None: @@ -123,6 +125,10 @@ def to_test_request( kwargs["private_key"] = private_key if private_key_passphrase is not None: kwargs["private_key_passphrase"] = private_key + if client_id is not None: + kwargs["client_id"] = client_id + if client_secret is not None: + kwargs["client_secret"] = client_secret return TestDefinitionRequest(type=self.type, url=self.url, **kwargs) @staticmethod @@ -141,6 +147,8 @@ def to_api( token: Optional[str] = None, private_key: Optional[str] = None, private_key_passphrase: Optional[str] = None, + client_id: Optional[str] = None, + client_secret: Optional[str] = None, ) -> DeclarativeDataSource: dictionary = self._get_snake_dict() if password is not None: @@ -151,6 +159,10 @@ def to_api( dictionary["private_key"] = private_key if private_key_passphrase is not None: dictionary["private_key_passphrase"] = private_key_passphrase + if client_id is not None: + dictionary["client_id"] = client_id + if client_secret is not None: + dictionary["client_secret"] = client_secret return self.client_class().from_dict(dictionary) def store_to_disk(self, data_sources_folder: Path) -> None: diff --git a/gooddata-sdk/gooddata_sdk/catalog/data_source/entity_model/data_source.py b/gooddata-sdk/gooddata_sdk/catalog/data_source/entity_model/data_source.py index e1383fe83..73ff6ab28 100644 --- a/gooddata-sdk/gooddata_sdk/catalog/data_source/entity_model/data_source.py +++ b/gooddata-sdk/gooddata_sdk/catalog/data_source/entity_model/data_source.py @@ -16,6 +16,7 @@ from gooddata_sdk.catalog.base import Base, value_in_allowed from gooddata_sdk.catalog.entity import ( BasicCredentials, + ClientSecretCredentials, Credentials, KeyPairCredentials, TokenCredentials, @@ -34,6 +35,7 @@ def db_attrs_with_template(instance: CatalogDataSource, *args: Any) -> None: class CatalogDataSourceBase(Base): _SUPPORTED_CREDENTIALS: ClassVar[list[type[Credentials]]] = [ BasicCredentials, + ClientSecretCredentials, TokenCredentials, TokenCredentialsFromFile, KeyPairCredentials, diff --git a/gooddata-sdk/gooddata_sdk/catalog/entity.py b/gooddata-sdk/gooddata_sdk/catalog/entity.py index 453b3b0ff..6d1ef069c 100644 --- a/gooddata-sdk/gooddata_sdk/catalog/entity.py +++ b/gooddata-sdk/gooddata_sdk/catalog/entity.py @@ -121,6 +121,8 @@ class Credentials(Base): PASSWORD_KEY: ClassVar[str] = "password" PRIVATE_KEY: ClassVar[str] = "private_key" PRIVATE_KEY_PASSPHRASE: ClassVar[str] = "private_key_passphrase" + CLIENT_ID: ClassVar[str] = "client_id" + CLIENT_SECRET: ClassVar[str] = "client_secret" def to_api_args(self) -> dict[str, Any]: return attr.asdict(self) @@ -252,3 +254,23 @@ def from_api(cls, attributes: dict[str, Any]) -> KeyPairCredentials: # You have to fill it to keep it or update it private_key="", ) + + +@attr.s(auto_attribs=True, kw_only=True) +class ClientSecretCredentials(Credentials): + client_id: str + client_secret: str = attr.field(repr=lambda value: "***") + + @classmethod + def is_part_of_api(cls, entity: dict[str, Any]) -> bool: + return cls.CLIENT_ID in entity and cls.CLIENT_SECRET in entity + + @classmethod + def from_api(cls, attributes: dict[str, Any]) -> ClientSecretCredentials: + # Credentials are not returned for security reasons + return cls( + client_id=attributes[cls.CLIENT_ID], + # Client secret is not returned from API (security) + # You have to fill it to keep it or update it + client_secret="", + )