diff --git a/OSS LICENSES/LICENSE (gooddata-flexfun).txt b/OSS LICENSES/LICENSE (gooddata-flexconnect).txt
similarity index 100%
rename from OSS LICENSES/LICENSE (gooddata-flexfun).txt
rename to OSS LICENSES/LICENSE (gooddata-flexconnect).txt
diff --git a/README.md b/README.md
index c03202c1c..520a6b154 100644
--- a/README.md
+++ b/README.md
@@ -27,6 +27,12 @@ create pandas series and data frames.
Check out the GoodData Pandas [documentation](https://gooddata-pandas.readthedocs.io/en/latest/) to learn more and get started.
+### GoodData FlexConnect
+
+The [gooddata-flexconnect](./gooddata-flexconnect) package is the foundation for writing custom FlexConnect data sources.
+
+Check out the GoodData FlexConnect [documentation](https://www.gooddata.com/docs/cloud/connect-data/create-data-sources/flexconnect/) to learn more and get started.
+
### GoodData Foreign Data Wrapper
> [!WARNING]
diff --git a/gooddata-api-client/.openapi-generator/FILES b/gooddata-api-client/.openapi-generator/FILES
index 652143d3f..f4fdf242e 100644
--- a/gooddata-api-client/.openapi-generator/FILES
+++ b/gooddata-api-client/.openapi-generator/FILES
@@ -45,7 +45,9 @@ docs/AssigneeIdentifier.md
docs/AssigneeRule.md
docs/AttributeExecutionResultHeader.md
docs/AttributeFilter.md
+docs/AttributeFilterByDate.md
docs/AttributeFilterElements.md
+docs/AttributeFilterParent.md
docs/AttributeFormat.md
docs/AttributeHeader.md
docs/AttributeHeaderAttributeHeader.md
@@ -60,6 +62,7 @@ docs/AttributesApi.md
docs/AutomationAlert.md
docs/AutomationAlertCondition.md
docs/AutomationExternalRecipient.md
+docs/AutomationImageExport.md
docs/AutomationMetadata.md
docs/AutomationNotification.md
docs/AutomationNotificationAllOf.md
@@ -75,6 +78,7 @@ docs/ChatHistoryRequest.md
docs/ChatHistoryResult.md
docs/ChatRequest.md
docs/ChatResult.md
+docs/ChatUsageResponse.md
docs/ClusteringRequest.md
docs/ClusteringResult.md
docs/ColumnLocation.md
@@ -100,9 +104,18 @@ docs/CreatedVisualizations.md
docs/CustomLabel.md
docs/CustomMetric.md
docs/CustomOverride.md
+docs/DashboardAttributeFilter.md
+docs/DashboardAttributeFilterAttributeFilter.md
+docs/DashboardAttributeFilterAttributeFilterAllOf.md
+docs/DashboardDateFilter.md
+docs/DashboardDateFilterDateFilter.md
+docs/DashboardDateFilterDateFilterAllOf.md
+docs/DashboardFilter.md
docs/DashboardPermissions.md
docs/DashboardPermissionsAssignment.md
docs/DashboardSlidesTemplate.md
+docs/DashboardTabularExportRequest.md
+docs/DashboardTabularExportRequestDashboardFiltersOverrideInner.md
docs/DashboardsApi.md
docs/DataColumnLocator.md
docs/DataColumnLocators.md
@@ -254,7 +267,7 @@ docs/FrequencyBucket.md
docs/FrequencyProperties.md
docs/GenerateLdmRequest.md
docs/GenerateLogicalDataModelApi.md
-docs/GetSlidesExport202ResponseInner.md
+docs/GetImageExport202ResponseInner.md
docs/GrainIdentifier.md
docs/GrantedPermission.md
docs/GranularitiesFormatting.md
@@ -266,6 +279,8 @@ docs/HistogramBucket.md
docs/HistogramProperties.md
docs/IdentifierDuplications.md
docs/IdentityProvidersApi.md
+docs/ImageExportApi.md
+docs/ImageExportRequest.md
docs/InPlatform.md
docs/InPlatformAllOf.md
docs/InlineFilterDefinition.md
@@ -345,6 +360,7 @@ docs/JsonApiAutomationIn.md
docs/JsonApiAutomationInAttributes.md
docs/JsonApiAutomationInAttributesAlert.md
docs/JsonApiAutomationInAttributesExternalRecipientsInner.md
+docs/JsonApiAutomationInAttributesImageExportsInner.md
docs/JsonApiAutomationInAttributesMetadata.md
docs/JsonApiAutomationInAttributesSchedule.md
docs/JsonApiAutomationInAttributesTabularExportsInner.md
@@ -778,6 +794,7 @@ docs/MeasureExecutionResultHeader.md
docs/MeasureGroupHeaders.md
docs/MeasureHeader.md
docs/MeasureItem.md
+docs/MeasureItemDefinition.md
docs/MeasureResultHeader.md
docs/MeasureValueFilter.md
docs/MetadataSyncApi.md
@@ -805,6 +822,7 @@ docs/OrganizationDeclarativeAPIsApi.md
docs/OrganizationEntityAPIsApi.md
docs/OrganizationModelControllerApi.md
docs/OrganizationPermissionAssignment.md
+docs/Over.md
docs/PageMetadata.md
docs/Paging.md
docs/Parameter.md
@@ -989,6 +1007,7 @@ gooddata_api_client/api/filter_views_api.py
gooddata_api_client/api/generate_logical_data_model_api.py
gooddata_api_client/api/hierarchy_api.py
gooddata_api_client/api/identity_providers_api.py
+gooddata_api_client/api/image_export_api.py
gooddata_api_client/api/invalidate_cache_api.py
gooddata_api_client/api/jwks_api.py
gooddata_api_client/api/labels_api.py
@@ -1076,7 +1095,9 @@ gooddata_api_client/model/assignee_identifier.py
gooddata_api_client/model/assignee_rule.py
gooddata_api_client/model/attribute_execution_result_header.py
gooddata_api_client/model/attribute_filter.py
+gooddata_api_client/model/attribute_filter_by_date.py
gooddata_api_client/model/attribute_filter_elements.py
+gooddata_api_client/model/attribute_filter_parent.py
gooddata_api_client/model/attribute_format.py
gooddata_api_client/model/attribute_header.py
gooddata_api_client/model/attribute_header_attribute_header.py
@@ -1089,6 +1110,7 @@ gooddata_api_client/model/attribute_result_header.py
gooddata_api_client/model/automation_alert.py
gooddata_api_client/model/automation_alert_condition.py
gooddata_api_client/model/automation_external_recipient.py
+gooddata_api_client/model/automation_image_export.py
gooddata_api_client/model/automation_metadata.py
gooddata_api_client/model/automation_notification.py
gooddata_api_client/model/automation_notification_all_of.py
@@ -1101,6 +1123,7 @@ gooddata_api_client/model/chat_history_request.py
gooddata_api_client/model/chat_history_result.py
gooddata_api_client/model/chat_request.py
gooddata_api_client/model/chat_result.py
+gooddata_api_client/model/chat_usage_response.py
gooddata_api_client/model/clustering_request.py
gooddata_api_client/model/clustering_result.py
gooddata_api_client/model/column_location.py
@@ -1123,9 +1146,18 @@ gooddata_api_client/model/created_visualizations.py
gooddata_api_client/model/custom_label.py
gooddata_api_client/model/custom_metric.py
gooddata_api_client/model/custom_override.py
+gooddata_api_client/model/dashboard_attribute_filter.py
+gooddata_api_client/model/dashboard_attribute_filter_attribute_filter.py
+gooddata_api_client/model/dashboard_attribute_filter_attribute_filter_all_of.py
+gooddata_api_client/model/dashboard_date_filter.py
+gooddata_api_client/model/dashboard_date_filter_date_filter.py
+gooddata_api_client/model/dashboard_date_filter_date_filter_all_of.py
+gooddata_api_client/model/dashboard_filter.py
gooddata_api_client/model/dashboard_permissions.py
gooddata_api_client/model/dashboard_permissions_assignment.py
gooddata_api_client/model/dashboard_slides_template.py
+gooddata_api_client/model/dashboard_tabular_export_request.py
+gooddata_api_client/model/dashboard_tabular_export_request_dashboard_filters_override_inner.py
gooddata_api_client/model/data_column_locator.py
gooddata_api_client/model/data_column_locators.py
gooddata_api_client/model/data_source_parameter.py
@@ -1265,7 +1297,7 @@ gooddata_api_client/model/frequency.py
gooddata_api_client/model/frequency_bucket.py
gooddata_api_client/model/frequency_properties.py
gooddata_api_client/model/generate_ldm_request.py
-gooddata_api_client/model/get_slides_export202_response_inner.py
+gooddata_api_client/model/get_image_export202_response_inner.py
gooddata_api_client/model/grain_identifier.py
gooddata_api_client/model/granted_permission.py
gooddata_api_client/model/granularities_formatting.py
@@ -1275,6 +1307,7 @@ 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/image_export_request.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
@@ -1352,6 +1385,7 @@ gooddata_api_client/model/json_api_automation_in.py
gooddata_api_client/model/json_api_automation_in_attributes.py
gooddata_api_client/model/json_api_automation_in_attributes_alert.py
gooddata_api_client/model/json_api_automation_in_attributes_external_recipients_inner.py
+gooddata_api_client/model/json_api_automation_in_attributes_image_exports_inner.py
gooddata_api_client/model/json_api_automation_in_attributes_metadata.py
gooddata_api_client/model/json_api_automation_in_attributes_schedule.py
gooddata_api_client/model/json_api_automation_in_attributes_tabular_exports_inner.py
@@ -1780,6 +1814,7 @@ gooddata_api_client/model/measure_execution_result_header.py
gooddata_api_client/model/measure_group_headers.py
gooddata_api_client/model/measure_header.py
gooddata_api_client/model/measure_item.py
+gooddata_api_client/model/measure_item_definition.py
gooddata_api_client/model/measure_result_header.py
gooddata_api_client/model/measure_value_filter.py
gooddata_api_client/model/metric.py
@@ -1799,6 +1834,7 @@ gooddata_api_client/model/notifications_meta_total.py
gooddata_api_client/model/object_links.py
gooddata_api_client/model/object_links_container.py
gooddata_api_client/model/organization_permission_assignment.py
+gooddata_api_client/model/over.py
gooddata_api_client/model/page_metadata.py
gooddata_api_client/model/paging.py
gooddata_api_client/model/parameter.py
diff --git a/gooddata-api-client/README.md b/gooddata-api-client/README.md
index 0912a8429..055a62da4 100644
--- a/gooddata-api-client/README.md
+++ b/gooddata-api-client/README.md
@@ -213,6 +213,9 @@ Class | Method | HTTP request | Description
*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
+*ImageExportApi* | [**create_image_export**](docs/ImageExportApi.md#create_image_export) | **POST** /api/v1/actions/workspaces/{workspaceId}/export/image | (EXPERIMENTAL) Create image export request
+*ImageExportApi* | [**get_image_export**](docs/ImageExportApi.md#get_image_export) | **GET** /api/v1/actions/workspaces/{workspaceId}/export/image/{exportId} | (EXPERIMENTAL) Retrieve exported files
+*ImageExportApi* | [**get_image_export_metadata**](docs/ImageExportApi.md#get_image_export_metadata) | **GET** /api/v1/actions/workspaces/{workspaceId}/export/image/{exportId}/metadata | (EXPERIMENTAL) Retrieve metadata context
*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
*JWKSApi* | [**delete_entity_jwks**](docs/JWKSApi.md#delete_entity_jwks) | **DELETE** /api/v1/entities/jwks/{id} | Delete Jwk
@@ -302,6 +305,7 @@ Class | Method | HTTP request | Description
*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_chat_usage**](docs/SmartFunctionsApi.md#ai_chat_usage) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/chatUsage | Get Chat Usage
*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
*SmartFunctionsApi* | [**anomaly_detection_result**](docs/SmartFunctionsApi.md#anomaly_detection_result) | **GET** /api/v1/actions/workspaces/{workspaceId}/execution/functions/anomalyDetection/result/{resultId} | (EXPERIMENTAL) Smart functions - Anomaly Detection Result
@@ -398,6 +402,7 @@ Class | Method | HTTP request | Description
*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_chat_usage**](docs/ActionsApi.md#ai_chat_usage) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/chatUsage | Get Chat Usage
*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.
*ActionsApi* | [**anomaly_detection**](docs/ActionsApi.md#anomaly_detection) | **POST** /api/v1/actions/workspaces/{workspaceId}/execution/functions/anomalyDetection/{resultId} | (EXPERIMENTAL) Smart functions - Anomaly Detection
@@ -414,6 +419,7 @@ Class | Method | HTTP request | Description
*ActionsApi* | [**compute_valid_descendants**](docs/ActionsApi.md#compute_valid_descendants) | **POST** /api/v1/actions/workspaces/{workspaceId}/execution/afm/computeValidDescendants | (BETA) Valid descendants
*ActionsApi* | [**compute_valid_objects**](docs/ActionsApi.md#compute_valid_objects) | **POST** /api/v1/actions/workspaces/{workspaceId}/execution/afm/computeValidObjects | Valid objects
*ActionsApi* | [**create_dashboard_export_request**](docs/ActionsApi.md#create_dashboard_export_request) | **POST** /api/v1/actions/workspaces/{workspaceId}/analyticalDashboards/{dashboardId}/export/tabular | (EXPERIMENTAL) Create dashboard tabular export request
+*ActionsApi* | [**create_image_export**](docs/ActionsApi.md#create_image_export) | **POST** /api/v1/actions/workspaces/{workspaceId}/export/image | (EXPERIMENTAL) Create image export request
*ActionsApi* | [**create_pdf_export**](docs/ActionsApi.md#create_pdf_export) | **POST** /api/v1/actions/workspaces/{workspaceId}/export/visual | Create visual - pdf export request
*ActionsApi* | [**create_raw_export**](docs/ActionsApi.md#create_raw_export) | **POST** /api/v1/actions/workspaces/{workspaceId}/export/raw | (EXPERIMENTAL) Create raw export request
*ActionsApi* | [**create_slides_export**](docs/ActionsApi.md#create_slides_export) | **POST** /api/v1/actions/workspaces/{workspaceId}/export/slides | (EXPERIMENTAL) Create slides export request
@@ -427,6 +433,8 @@ Class | Method | HTTP request | Description
*ActionsApi* | [**get_dependent_entities_graph**](docs/ActionsApi.md#get_dependent_entities_graph) | **GET** /api/v1/actions/workspaces/{workspaceId}/dependentEntitiesGraph | Computes the dependent entities graph
*ActionsApi* | [**get_dependent_entities_graph_from_entry_points**](docs/ActionsApi.md#get_dependent_entities_graph_from_entry_points) | **POST** /api/v1/actions/workspaces/{workspaceId}/dependentEntitiesGraph | Computes the dependent entities graph from given entry points
*ActionsApi* | [**get_exported_file**](docs/ActionsApi.md#get_exported_file) | **GET** /api/v1/actions/workspaces/{workspaceId}/export/visual/{exportId} | Retrieve exported files
+*ActionsApi* | [**get_image_export**](docs/ActionsApi.md#get_image_export) | **GET** /api/v1/actions/workspaces/{workspaceId}/export/image/{exportId} | (EXPERIMENTAL) Retrieve exported files
+*ActionsApi* | [**get_image_export_metadata**](docs/ActionsApi.md#get_image_export_metadata) | **GET** /api/v1/actions/workspaces/{workspaceId}/export/image/{exportId}/metadata | (EXPERIMENTAL) Retrieve metadata context
*ActionsApi* | [**get_metadata**](docs/ActionsApi.md#get_metadata) | **GET** /api/v1/actions/workspaces/{workspaceId}/export/visual/{exportId}/metadata | Retrieve metadata context
*ActionsApi* | [**get_notifications**](docs/ActionsApi.md#get_notifications) | **GET** /api/v1/actions/notifications | Get latest notifications.
*ActionsApi* | [**get_raw_export**](docs/ActionsApi.md#get_raw_export) | **GET** /api/v1/actions/workspaces/{workspaceId}/export/raw/{exportId} | (EXPERIMENTAL) Retrieve exported files
@@ -943,7 +951,9 @@ Class | Method | HTTP request | Description
- [AssigneeRule](docs/AssigneeRule.md)
- [AttributeExecutionResultHeader](docs/AttributeExecutionResultHeader.md)
- [AttributeFilter](docs/AttributeFilter.md)
+ - [AttributeFilterByDate](docs/AttributeFilterByDate.md)
- [AttributeFilterElements](docs/AttributeFilterElements.md)
+ - [AttributeFilterParent](docs/AttributeFilterParent.md)
- [AttributeFormat](docs/AttributeFormat.md)
- [AttributeHeader](docs/AttributeHeader.md)
- [AttributeHeaderAttributeHeader](docs/AttributeHeaderAttributeHeader.md)
@@ -956,6 +966,7 @@ Class | Method | HTTP request | Description
- [AutomationAlert](docs/AutomationAlert.md)
- [AutomationAlertCondition](docs/AutomationAlertCondition.md)
- [AutomationExternalRecipient](docs/AutomationExternalRecipient.md)
+ - [AutomationImageExport](docs/AutomationImageExport.md)
- [AutomationMetadata](docs/AutomationMetadata.md)
- [AutomationNotification](docs/AutomationNotification.md)
- [AutomationNotificationAllOf](docs/AutomationNotificationAllOf.md)
@@ -968,6 +979,7 @@ Class | Method | HTTP request | Description
- [ChatHistoryResult](docs/ChatHistoryResult.md)
- [ChatRequest](docs/ChatRequest.md)
- [ChatResult](docs/ChatResult.md)
+ - [ChatUsageResponse](docs/ChatUsageResponse.md)
- [ClusteringRequest](docs/ClusteringRequest.md)
- [ClusteringResult](docs/ClusteringResult.md)
- [ColumnLocation](docs/ColumnLocation.md)
@@ -990,9 +1002,18 @@ Class | Method | HTTP request | Description
- [CustomLabel](docs/CustomLabel.md)
- [CustomMetric](docs/CustomMetric.md)
- [CustomOverride](docs/CustomOverride.md)
+ - [DashboardAttributeFilter](docs/DashboardAttributeFilter.md)
+ - [DashboardAttributeFilterAttributeFilter](docs/DashboardAttributeFilterAttributeFilter.md)
+ - [DashboardAttributeFilterAttributeFilterAllOf](docs/DashboardAttributeFilterAttributeFilterAllOf.md)
+ - [DashboardDateFilter](docs/DashboardDateFilter.md)
+ - [DashboardDateFilterDateFilter](docs/DashboardDateFilterDateFilter.md)
+ - [DashboardDateFilterDateFilterAllOf](docs/DashboardDateFilterDateFilterAllOf.md)
+ - [DashboardFilter](docs/DashboardFilter.md)
- [DashboardPermissions](docs/DashboardPermissions.md)
- [DashboardPermissionsAssignment](docs/DashboardPermissionsAssignment.md)
- [DashboardSlidesTemplate](docs/DashboardSlidesTemplate.md)
+ - [DashboardTabularExportRequest](docs/DashboardTabularExportRequest.md)
+ - [DashboardTabularExportRequestDashboardFiltersOverrideInner](docs/DashboardTabularExportRequestDashboardFiltersOverrideInner.md)
- [DataColumnLocator](docs/DataColumnLocator.md)
- [DataColumnLocators](docs/DataColumnLocators.md)
- [DataSourceParameter](docs/DataSourceParameter.md)
@@ -1132,7 +1153,7 @@ Class | Method | HTTP request | Description
- [FrequencyBucket](docs/FrequencyBucket.md)
- [FrequencyProperties](docs/FrequencyProperties.md)
- [GenerateLdmRequest](docs/GenerateLdmRequest.md)
- - [GetSlidesExport202ResponseInner](docs/GetSlidesExport202ResponseInner.md)
+ - [GetImageExport202ResponseInner](docs/GetImageExport202ResponseInner.md)
- [GrainIdentifier](docs/GrainIdentifier.md)
- [GrantedPermission](docs/GrantedPermission.md)
- [GranularitiesFormatting](docs/GranularitiesFormatting.md)
@@ -1142,6 +1163,7 @@ Class | Method | HTTP request | Description
- [HistogramBucket](docs/HistogramBucket.md)
- [HistogramProperties](docs/HistogramProperties.md)
- [IdentifierDuplications](docs/IdentifierDuplications.md)
+ - [ImageExportRequest](docs/ImageExportRequest.md)
- [InPlatform](docs/InPlatform.md)
- [InPlatformAllOf](docs/InPlatformAllOf.md)
- [InlineFilterDefinition](docs/InlineFilterDefinition.md)
@@ -1219,6 +1241,7 @@ Class | Method | HTTP request | Description
- [JsonApiAutomationInAttributes](docs/JsonApiAutomationInAttributes.md)
- [JsonApiAutomationInAttributesAlert](docs/JsonApiAutomationInAttributesAlert.md)
- [JsonApiAutomationInAttributesExternalRecipientsInner](docs/JsonApiAutomationInAttributesExternalRecipientsInner.md)
+ - [JsonApiAutomationInAttributesImageExportsInner](docs/JsonApiAutomationInAttributesImageExportsInner.md)
- [JsonApiAutomationInAttributesMetadata](docs/JsonApiAutomationInAttributesMetadata.md)
- [JsonApiAutomationInAttributesSchedule](docs/JsonApiAutomationInAttributesSchedule.md)
- [JsonApiAutomationInAttributesTabularExportsInner](docs/JsonApiAutomationInAttributesTabularExportsInner.md)
@@ -1647,6 +1670,7 @@ Class | Method | HTTP request | Description
- [MeasureGroupHeaders](docs/MeasureGroupHeaders.md)
- [MeasureHeader](docs/MeasureHeader.md)
- [MeasureItem](docs/MeasureItem.md)
+ - [MeasureItemDefinition](docs/MeasureItemDefinition.md)
- [MeasureResultHeader](docs/MeasureResultHeader.md)
- [MeasureValueFilter](docs/MeasureValueFilter.md)
- [Metric](docs/Metric.md)
@@ -1666,6 +1690,7 @@ Class | Method | HTTP request | Description
- [ObjectLinks](docs/ObjectLinks.md)
- [ObjectLinksContainer](docs/ObjectLinksContainer.md)
- [OrganizationPermissionAssignment](docs/OrganizationPermissionAssignment.md)
+ - [Over](docs/Over.md)
- [PageMetadata](docs/PageMetadata.md)
- [Paging](docs/Paging.md)
- [Parameter](docs/Parameter.md)
diff --git a/gooddata-api-client/docs/ActionsApi.md b/gooddata-api-client/docs/ActionsApi.md
index 91eedea11..277fb8476 100644
--- a/gooddata-api-client/docs/ActionsApi.md
+++ b/gooddata-api-client/docs/ActionsApi.md
@@ -7,6 +7,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_chat_usage**](ActionsApi.md#ai_chat_usage) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/chatUsage | Get Chat Usage
[**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.
[**anomaly_detection**](ActionsApi.md#anomaly_detection) | **POST** /api/v1/actions/workspaces/{workspaceId}/execution/functions/anomalyDetection/{resultId} | (EXPERIMENTAL) Smart functions - Anomaly Detection
@@ -23,6 +24,7 @@ Method | HTTP request | Description
[**compute_valid_descendants**](ActionsApi.md#compute_valid_descendants) | **POST** /api/v1/actions/workspaces/{workspaceId}/execution/afm/computeValidDescendants | (BETA) Valid descendants
[**compute_valid_objects**](ActionsApi.md#compute_valid_objects) | **POST** /api/v1/actions/workspaces/{workspaceId}/execution/afm/computeValidObjects | Valid objects
[**create_dashboard_export_request**](ActionsApi.md#create_dashboard_export_request) | **POST** /api/v1/actions/workspaces/{workspaceId}/analyticalDashboards/{dashboardId}/export/tabular | (EXPERIMENTAL) Create dashboard tabular export request
+[**create_image_export**](ActionsApi.md#create_image_export) | **POST** /api/v1/actions/workspaces/{workspaceId}/export/image | (EXPERIMENTAL) Create image export request
[**create_pdf_export**](ActionsApi.md#create_pdf_export) | **POST** /api/v1/actions/workspaces/{workspaceId}/export/visual | Create visual - pdf export request
[**create_raw_export**](ActionsApi.md#create_raw_export) | **POST** /api/v1/actions/workspaces/{workspaceId}/export/raw | (EXPERIMENTAL) Create raw export request
[**create_slides_export**](ActionsApi.md#create_slides_export) | **POST** /api/v1/actions/workspaces/{workspaceId}/export/slides | (EXPERIMENTAL) Create slides export request
@@ -36,6 +38,8 @@ Method | HTTP request | Description
[**get_dependent_entities_graph**](ActionsApi.md#get_dependent_entities_graph) | **GET** /api/v1/actions/workspaces/{workspaceId}/dependentEntitiesGraph | Computes the dependent entities graph
[**get_dependent_entities_graph_from_entry_points**](ActionsApi.md#get_dependent_entities_graph_from_entry_points) | **POST** /api/v1/actions/workspaces/{workspaceId}/dependentEntitiesGraph | Computes the dependent entities graph from given entry points
[**get_exported_file**](ActionsApi.md#get_exported_file) | **GET** /api/v1/actions/workspaces/{workspaceId}/export/visual/{exportId} | Retrieve exported files
+[**get_image_export**](ActionsApi.md#get_image_export) | **GET** /api/v1/actions/workspaces/{workspaceId}/export/image/{exportId} | (EXPERIMENTAL) Retrieve exported files
+[**get_image_export_metadata**](ActionsApi.md#get_image_export_metadata) | **GET** /api/v1/actions/workspaces/{workspaceId}/export/image/{exportId}/metadata | (EXPERIMENTAL) Retrieve metadata context
[**get_metadata**](ActionsApi.md#get_metadata) | **GET** /api/v1/actions/workspaces/{workspaceId}/export/visual/{exportId}/metadata | Retrieve metadata context
[**get_notifications**](ActionsApi.md#get_notifications) | **GET** /api/v1/actions/notifications | Get latest notifications.
[**get_raw_export**](ActionsApi.md#get_raw_export) | **GET** /api/v1/actions/workspaces/{workspaceId}/export/raw/{exportId} | (EXPERIMENTAL) Retrieve exported files
@@ -321,6 +325,73 @@ No authorization required
- **Accept**: text/event-stream
+### 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_usage**
+> ChatUsageResponse ai_chat_usage(workspace_id)
+
+Get Chat Usage
+
+Returns usage statistics of chat for a user in a workspace.
+
+### Example
+
+
+```python
+import time
+import gooddata_api_client
+from gooddata_api_client.api import actions_api
+from gooddata_api_client.model.chat_usage_response import ChatUsageResponse
+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
+
+ # example passing only required values which don't have defaults set
+ try:
+ # Get Chat Usage
+ api_response = api_instance.ai_chat_usage(workspace_id)
+ pprint(api_response)
+ except gooddata_api_client.ApiException as e:
+ print("Exception when calling ActionsApi->ai_chat_usage: %s\n" % e)
+```
+
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **workspace_id** | **str**| Workspace identifier |
+
+### Return type
+
+[**ChatUsageResponse**](ChatUsageResponse.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
### HTTP response details
| Status code | Description | Response headers |
@@ -1605,7 +1676,7 @@ 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)
# **create_dashboard_export_request**
-> ExportResponse create_dashboard_export_request(workspace_id, dashboard_id)
+> ExportResponse create_dashboard_export_request(workspace_id, dashboard_id, dashboard_tabular_export_request)
(EXPERIMENTAL) Create dashboard tabular export request
@@ -1619,6 +1690,7 @@ import time
import gooddata_api_client
from gooddata_api_client.api import actions_api
from gooddata_api_client.model.export_response import ExportResponse
+from gooddata_api_client.model.dashboard_tabular_export_request import DashboardTabularExportRequest
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.
@@ -1633,11 +1705,18 @@ with gooddata_api_client.ApiClient() as api_client:
api_instance = actions_api.ActionsApi(api_client)
workspace_id = "workspaceId_example" # str |
dashboard_id = "dashboardId_example" # str |
+ dashboard_tabular_export_request = DashboardTabularExportRequest(
+ dashboard_filters_override=[
+ DashboardTabularExportRequestDashboardFiltersOverrideInner(None),
+ ],
+ file_name="result",
+ format="XLSX",
+ ) # DashboardTabularExportRequest |
# example passing only required values which don't have defaults set
try:
# (EXPERIMENTAL) Create dashboard tabular export request
- api_response = api_instance.create_dashboard_export_request(workspace_id, dashboard_id)
+ api_response = api_instance.create_dashboard_export_request(workspace_id, dashboard_id, dashboard_tabular_export_request)
pprint(api_response)
except gooddata_api_client.ApiException as e:
print("Exception when calling ActionsApi->create_dashboard_export_request: %s\n" % e)
@@ -1650,6 +1729,7 @@ Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**workspace_id** | **str**| |
**dashboard_id** | **str**| |
+ **dashboard_tabular_export_request** | [**DashboardTabularExportRequest**](DashboardTabularExportRequest.md)| |
### Return type
@@ -1661,7 +1741,7 @@ No authorization required
### HTTP request headers
- - **Content-Type**: Not defined
+ - **Content-Type**: application/json
- **Accept**: application/json
@@ -1673,6 +1753,84 @@ 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)
+# **create_image_export**
+> ExportResponse create_image_export(workspace_id, image_export_request)
+
+(EXPERIMENTAL) Create image export request
+
+Note: This API is an experimental and is going to change. Please, use it accordingly. An image export job will be created based on the export request and put to queue to be executed. The result of the operation will be an exportResult identifier that will be assembled by the client into a url that can be polled.
+
+### Example
+
+
+```python
+import time
+import gooddata_api_client
+from gooddata_api_client.api import actions_api
+from gooddata_api_client.model.export_response import ExportResponse
+from gooddata_api_client.model.image_export_request import ImageExportRequest
+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 = "workspaceId_example" # str |
+ image_export_request = ImageExportRequest(
+ dashboard_id="761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ file_name="filename",
+ format="PNG",
+ metadata=JsonNode(),
+ widget_ids=[
+ "widget_ids_example",
+ ],
+ ) # ImageExportRequest |
+
+ # example passing only required values which don't have defaults set
+ try:
+ # (EXPERIMENTAL) Create image export request
+ api_response = api_instance.create_image_export(workspace_id, image_export_request)
+ pprint(api_response)
+ except gooddata_api_client.ApiException as e:
+ print("Exception when calling ActionsApi->create_image_export: %s\n" % e)
+```
+
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **workspace_id** | **str**| |
+ **image_export_request** | [**ImageExportRequest**](ImageExportRequest.md)| |
+
+### Return type
+
+[**ExportResponse**](ExportResponse.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+### HTTP response details
+
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**201** | Image export request created successfully. | - |
+
+[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
+
# **create_pdf_export**
> ExportResponse create_pdf_export(workspace_id, visual_export_request)
@@ -1943,7 +2101,7 @@ No authorization required
| Status code | Description | Response headers |
|-------------|-------------|------------------|
-**201** | Raw export request created successfully. | - |
+**201** | Slides export request created successfully. | - |
[[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)
@@ -2840,6 +2998,142 @@ 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_image_export**
+> get_image_export(workspace_id, export_id)
+
+(EXPERIMENTAL) Retrieve exported files
+
+Note: This API is an experimental and is going to change. Please, use it accordingly. After clients creates a POST export request, the processing of it will start shortly asynchronously. To retrieve the result, client has to check periodically for the result on this endpoint. In case the result isn't ready yet, the service returns 202. If the result is ready, it returns 200 and octet stream of the result file with provided filename.
+
+### Example
+
+
+```python
+import time
+import gooddata_api_client
+from gooddata_api_client.api import actions_api
+from gooddata_api_client.model.get_image_export202_response_inner import GetImageExport202ResponseInner
+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 = "workspaceId_example" # str |
+ export_id = "exportId_example" # str |
+
+ # example passing only required values which don't have defaults set
+ try:
+ # (EXPERIMENTAL) Retrieve exported files
+ api_instance.get_image_export(workspace_id, export_id)
+ except gooddata_api_client.ApiException as e:
+ print("Exception when calling ActionsApi->get_image_export: %s\n" % e)
+```
+
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **workspace_id** | **str**| |
+ **export_id** | **str**| |
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: image/png
+
+
+### HTTP response details
+
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | Binary export result. | * Content-Disposition -
|
+**202** | Request is accepted, provided exportId exists, but export is not yet ready. | - |
+
+[[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_image_export_metadata**
+> get_image_export_metadata(workspace_id, export_id)
+
+(EXPERIMENTAL) Retrieve metadata context
+
+Note: This API is an experimental and is going to change. Please, use it accordingly. This endpoint serves as a cache for user-defined metadata of the export for the front end UI to retrieve it, if one was created using the POST ../export/image endpoint. The metadata structure is not verified.
+
+### Example
+
+
+```python
+import time
+import gooddata_api_client
+from gooddata_api_client.api import actions_api
+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 = "workspaceId_example" # str |
+ export_id = "exportId_example" # str |
+
+ # example passing only required values which don't have defaults set
+ try:
+ # (EXPERIMENTAL) Retrieve metadata context
+ api_instance.get_image_export_metadata(workspace_id, export_id)
+ except gooddata_api_client.ApiException as e:
+ print("Exception when calling ActionsApi->get_image_export_metadata: %s\n" % e)
+```
+
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **workspace_id** | **str**| |
+ **export_id** | **str**| |
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | Json metadata representation | - |
+
+[[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_metadata**
> get_metadata(workspace_id, export_id)
@@ -3067,7 +3361,7 @@ Note: This API is an experimental and is going to change. Please, use it accordi
import time
import gooddata_api_client
from gooddata_api_client.api import actions_api
-from gooddata_api_client.model.get_slides_export202_response_inner import GetSlidesExport202ResponseInner
+from gooddata_api_client.model.get_image_export202_response_inner import GetImageExport202ResponseInner
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.
@@ -5671,6 +5965,39 @@ with gooddata_api_client.ApiClient() as api_client:
workspace_id = "workspaceId_example" # str |
trigger_automation_request = TriggerAutomationRequest(
automation=AdHocAutomation(
+ alert=AutomationAlert(
+ condition=AutomationAlertCondition(None),
+ execution=AlertAfm(
+ attributes=[
+ AttributeItem(
+ label=AfmObjectIdentifierLabel(
+ identifier=AfmObjectIdentifierLabelIdentifier(
+ id="sample_item.price",
+ type="label",
+ ),
+ ),
+ local_identifier="attribute_1",
+ show_all_values=False,
+ ),
+ ],
+ aux_measures=[
+ MeasureItem(
+ definition=MeasureDefinition(),
+ local_identifier="metric_1",
+ ),
+ ],
+ filters=[
+ FilterDefinition(),
+ ],
+ measures=[
+ MeasureItem(
+ definition=MeasureDefinition(),
+ local_identifier="metric_1",
+ ),
+ ],
+ ),
+ trigger="ALWAYS",
+ ),
analytical_dashboard=DeclarativeAnalyticalDashboardIdentifier(
id="dashboard123",
type="analyticalDashboard",
@@ -5684,9 +6011,23 @@ with gooddata_api_client.ApiClient() as api_client:
email="email_example",
),
],
+ image_exports=[
+ AutomationImageExport(
+ request_payload=ImageExportRequest(
+ dashboard_id="761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ file_name="filename",
+ format="PNG",
+ metadata=JsonNode(),
+ widget_ids=[
+ "widget_ids_example",
+ ],
+ ),
+ ),
+ ],
metadata=AutomationMetadata(
visible_filters=[
VisibleFilter(
+ is_all_time_date_filter=False,
local_identifier="local_identifier_example",
title="title_example",
),
diff --git a/gooddata-api-client/docs/AdHocAutomation.md b/gooddata-api-client/docs/AdHocAutomation.md
index 880ff13ee..12a8e1e74 100644
--- a/gooddata-api-client/docs/AdHocAutomation.md
+++ b/gooddata-api-client/docs/AdHocAutomation.md
@@ -4,10 +4,12 @@
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
+**alert** | [**AutomationAlert**](AutomationAlert.md) | | [optional]
**analytical_dashboard** | [**DeclarativeAnalyticalDashboardIdentifier**](DeclarativeAnalyticalDashboardIdentifier.md) | | [optional]
**description** | **str** | | [optional]
**details** | **{str: (str,)}** | Additional details to be included in the automated message. | [optional]
**external_recipients** | [**[AutomationExternalRecipient]**](AutomationExternalRecipient.md) | External recipients of the automation action results. | [optional]
+**image_exports** | [**[AutomationImageExport]**](AutomationImageExport.md) | | [optional]
**metadata** | [**AutomationMetadata**](AutomationMetadata.md) | | [optional]
**notification_channel** | [**DeclarativeNotificationChannelIdentifier**](DeclarativeNotificationChannelIdentifier.md) | | [optional]
**recipients** | [**[DeclarativeUserIdentifier]**](DeclarativeUserIdentifier.md) | | [optional]
diff --git a/gooddata-api-client/docs/AttributeFilterByDate.md b/gooddata-api-client/docs/AttributeFilterByDate.md
new file mode 100644
index 000000000..3923f0f59
--- /dev/null
+++ b/gooddata-api-client/docs/AttributeFilterByDate.md
@@ -0,0 +1,13 @@
+# AttributeFilterByDate
+
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**filter_local_identifier** | **str** | |
+**is_common_date** | **bool** | |
+**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/AttributeFilterParent.md b/gooddata-api-client/docs/AttributeFilterParent.md
new file mode 100644
index 000000000..9678405a4
--- /dev/null
+++ b/gooddata-api-client/docs/AttributeFilterParent.md
@@ -0,0 +1,13 @@
+# AttributeFilterParent
+
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**filter_local_identifier** | **str** | |
+**over** | [**Over**](Over.md) | |
+**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/AutomationImageExport.md b/gooddata-api-client/docs/AutomationImageExport.md
new file mode 100644
index 000000000..e68769e11
--- /dev/null
+++ b/gooddata-api-client/docs/AutomationImageExport.md
@@ -0,0 +1,12 @@
+# AutomationImageExport
+
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**request_payload** | [**ImageExportRequest**](ImageExportRequest.md) | |
+**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/AutomationsApi.md b/gooddata-api-client/docs/AutomationsApi.md
index f9404f7f7..40977eb65 100644
--- a/gooddata-api-client/docs/AutomationsApi.md
+++ b/gooddata-api-client/docs/AutomationsApi.md
@@ -87,9 +87,23 @@ with gooddata_api_client.ApiClient() as api_client:
email="email_example",
),
],
+ image_exports=[
+ JsonApiAutomationInAttributesImageExportsInner(
+ request_payload=ImageExportRequest(
+ dashboard_id="761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ file_name="filename",
+ format="PNG",
+ metadata=JsonNode(),
+ widget_ids=[
+ "widget_ids_example",
+ ],
+ ),
+ ),
+ ],
metadata=JsonApiAutomationInAttributesMetadata(
visible_filters=[
VisibleFilter(
+ is_all_time_date_filter=False,
local_identifier="local_identifier_example",
title="title_example",
),
@@ -658,9 +672,23 @@ with gooddata_api_client.ApiClient() as api_client:
email="email_example",
),
],
+ image_exports=[
+ JsonApiAutomationInAttributesImageExportsInner(
+ request_payload=ImageExportRequest(
+ dashboard_id="761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ file_name="filename",
+ format="PNG",
+ metadata=JsonNode(),
+ widget_ids=[
+ "widget_ids_example",
+ ],
+ ),
+ ),
+ ],
metadata=JsonApiAutomationInAttributesMetadata(
visible_filters=[
VisibleFilter(
+ is_all_time_date_filter=False,
local_identifier="local_identifier_example",
title="title_example",
),
@@ -905,9 +933,23 @@ with gooddata_api_client.ApiClient() as api_client:
),
],
id="/6bUUGjjNSwg0_bs",
+ image_exports=[
+ AutomationImageExport(
+ request_payload=ImageExportRequest(
+ dashboard_id="761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ file_name="filename",
+ format="PNG",
+ metadata=JsonNode(),
+ widget_ids=[
+ "widget_ids_example",
+ ],
+ ),
+ ),
+ ],
metadata=AutomationMetadata(
visible_filters=[
VisibleFilter(
+ is_all_time_date_filter=False,
local_identifier="local_identifier_example",
title="title_example",
),
@@ -1065,6 +1107,39 @@ with gooddata_api_client.ApiClient() as api_client:
workspace_id = "workspaceId_example" # str |
trigger_automation_request = TriggerAutomationRequest(
automation=AdHocAutomation(
+ alert=AutomationAlert(
+ condition=AutomationAlertCondition(None),
+ execution=AlertAfm(
+ attributes=[
+ AttributeItem(
+ label=AfmObjectIdentifierLabel(
+ identifier=AfmObjectIdentifierLabelIdentifier(
+ id="sample_item.price",
+ type="label",
+ ),
+ ),
+ local_identifier="attribute_1",
+ show_all_values=False,
+ ),
+ ],
+ aux_measures=[
+ MeasureItem(
+ definition=MeasureDefinition(),
+ local_identifier="metric_1",
+ ),
+ ],
+ filters=[
+ FilterDefinition(),
+ ],
+ measures=[
+ MeasureItem(
+ definition=MeasureDefinition(),
+ local_identifier="metric_1",
+ ),
+ ],
+ ),
+ trigger="ALWAYS",
+ ),
analytical_dashboard=DeclarativeAnalyticalDashboardIdentifier(
id="dashboard123",
type="analyticalDashboard",
@@ -1078,9 +1153,23 @@ with gooddata_api_client.ApiClient() as api_client:
email="email_example",
),
],
+ image_exports=[
+ AutomationImageExport(
+ request_payload=ImageExportRequest(
+ dashboard_id="761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ file_name="filename",
+ format="PNG",
+ metadata=JsonNode(),
+ widget_ids=[
+ "widget_ids_example",
+ ],
+ ),
+ ),
+ ],
metadata=AutomationMetadata(
visible_filters=[
VisibleFilter(
+ is_all_time_date_filter=False,
local_identifier="local_identifier_example",
title="title_example",
),
@@ -1334,9 +1423,23 @@ with gooddata_api_client.ApiClient() as api_client:
email="email_example",
),
],
+ image_exports=[
+ JsonApiAutomationInAttributesImageExportsInner(
+ request_payload=ImageExportRequest(
+ dashboard_id="761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ file_name="filename",
+ format="PNG",
+ metadata=JsonNode(),
+ widget_ids=[
+ "widget_ids_example",
+ ],
+ ),
+ ),
+ ],
metadata=JsonApiAutomationInAttributesMetadata(
visible_filters=[
VisibleFilter(
+ is_all_time_date_filter=False,
local_identifier="local_identifier_example",
title="title_example",
),
diff --git a/gooddata-api-client/docs/ChatUsageResponse.md b/gooddata-api-client/docs/ChatUsageResponse.md
new file mode 100644
index 000000000..44fb6f557
--- /dev/null
+++ b/gooddata-api-client/docs/ChatUsageResponse.md
@@ -0,0 +1,13 @@
+# ChatUsageResponse
+
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**interaction_count** | **int** | Number of interactions in the time window |
+**time_window_hours** | **int** | Time window in hours |
+**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/DashboardAttributeFilter.md b/gooddata-api-client/docs/DashboardAttributeFilter.md
new file mode 100644
index 000000000..9ba0fb4b9
--- /dev/null
+++ b/gooddata-api-client/docs/DashboardAttributeFilter.md
@@ -0,0 +1,12 @@
+# DashboardAttributeFilter
+
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**attribute_filter** | [**DashboardAttributeFilterAttributeFilter**](DashboardAttributeFilterAttributeFilter.md) | |
+**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/DashboardAttributeFilterAttributeFilter.md b/gooddata-api-client/docs/DashboardAttributeFilterAttributeFilter.md
new file mode 100644
index 000000000..97f1b44f0
--- /dev/null
+++ b/gooddata-api-client/docs/DashboardAttributeFilterAttributeFilter.md
@@ -0,0 +1,20 @@
+# DashboardAttributeFilterAttributeFilter
+
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**attribute_elements** | **{str: (bool, date, datetime, dict, float, int, list, str, none_type)}** | |
+**display_form** | **str** | |
+**negative_selection** | **bool** | |
+**local_identifier** | **str** | | [optional]
+**filter_elements_by** | [**[AttributeFilterParent]**](AttributeFilterParent.md) | | [optional]
+**filter_elements_by_date** | [**[AttributeFilterByDate]**](AttributeFilterByDate.md) | | [optional]
+**selection_mode** | **str** | | [optional]
+**title** | **str** | | [optional]
+**validate_elements_by** | **[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/DashboardAttributeFilterAttributeFilterAllOf.md b/gooddata-api-client/docs/DashboardAttributeFilterAttributeFilterAllOf.md
new file mode 100644
index 000000000..449802d3d
--- /dev/null
+++ b/gooddata-api-client/docs/DashboardAttributeFilterAttributeFilterAllOf.md
@@ -0,0 +1,19 @@
+# DashboardAttributeFilterAttributeFilterAllOf
+
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**attribute_elements** | **{str: (bool, date, datetime, dict, float, int, list, str, none_type)}** | | [optional]
+**display_form** | **str** | | [optional]
+**filter_elements_by** | [**[AttributeFilterParent]**](AttributeFilterParent.md) | | [optional]
+**filter_elements_by_date** | [**[AttributeFilterByDate]**](AttributeFilterByDate.md) | | [optional]
+**negative_selection** | **bool** | | [optional]
+**selection_mode** | **str** | | [optional]
+**title** | **str** | | [optional]
+**validate_elements_by** | **[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/DashboardDateFilter.md b/gooddata-api-client/docs/DashboardDateFilter.md
new file mode 100644
index 000000000..09033a4c8
--- /dev/null
+++ b/gooddata-api-client/docs/DashboardDateFilter.md
@@ -0,0 +1,12 @@
+# DashboardDateFilter
+
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**date_filter** | [**DashboardDateFilterDateFilter**](DashboardDateFilterDateFilter.md) | |
+**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/DashboardDateFilterDateFilter.md b/gooddata-api-client/docs/DashboardDateFilterDateFilter.md
new file mode 100644
index 000000000..4cbd96275
--- /dev/null
+++ b/gooddata-api-client/docs/DashboardDateFilterDateFilter.md
@@ -0,0 +1,18 @@
+# DashboardDateFilterDateFilter
+
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**granularity** | **str** | |
+**type** | **str** | |
+**local_identifier** | **str** | | [optional]
+**attribute** | **str** | | [optional]
+**data_set** | **str** | | [optional]
+**_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/DashboardDateFilterDateFilterAllOf.md b/gooddata-api-client/docs/DashboardDateFilterDateFilterAllOf.md
new file mode 100644
index 000000000..42b948e80
--- /dev/null
+++ b/gooddata-api-client/docs/DashboardDateFilterDateFilterAllOf.md
@@ -0,0 +1,17 @@
+# DashboardDateFilterDateFilterAllOf
+
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**attribute** | **str** | | [optional]
+**data_set** | **str** | | [optional]
+**_from** | **str** | | [optional]
+**granularity** | **str** | | [optional]
+**to** | **str** | | [optional]
+**type** | **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/DashboardFilter.md b/gooddata-api-client/docs/DashboardFilter.md
new file mode 100644
index 000000000..7e3ae4e63
--- /dev/null
+++ b/gooddata-api-client/docs/DashboardFilter.md
@@ -0,0 +1,12 @@
+# DashboardFilter
+
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**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/DashboardTabularExportRequest.md b/gooddata-api-client/docs/DashboardTabularExportRequest.md
new file mode 100644
index 000000000..315a2ed80
--- /dev/null
+++ b/gooddata-api-client/docs/DashboardTabularExportRequest.md
@@ -0,0 +1,15 @@
+# DashboardTabularExportRequest
+
+Export request object describing the export properties for dashboard tabular exports.
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**file_name** | **str** | Filename of downloaded file without extension. |
+**format** | **str** | Requested tabular export type. | defaults to "XLSX"
+**dashboard_filters_override** | [**[DashboardTabularExportRequestDashboardFiltersOverrideInner]**](DashboardTabularExportRequestDashboardFiltersOverrideInner.md) | List of filters that will be used instead of the default dashboard filters. | [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/DashboardTabularExportRequestDashboardFiltersOverrideInner.md b/gooddata-api-client/docs/DashboardTabularExportRequestDashboardFiltersOverrideInner.md
new file mode 100644
index 000000000..3e5f1c495
--- /dev/null
+++ b/gooddata-api-client/docs/DashboardTabularExportRequestDashboardFiltersOverrideInner.md
@@ -0,0 +1,13 @@
+# DashboardTabularExportRequestDashboardFiltersOverrideInner
+
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**attribute_filter** | [**DashboardAttributeFilterAttributeFilter**](DashboardAttributeFilterAttributeFilter.md) | | [optional]
+**date_filter** | [**DashboardDateFilterDateFilter**](DashboardDateFilterDateFilter.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/DataSourceDeclarativeAPIsApi.md b/gooddata-api-client/docs/DataSourceDeclarativeAPIsApi.md
index 558ee3b0d..831b3c167 100644
--- a/gooddata-api-client/docs/DataSourceDeclarativeAPIsApi.md
+++ b/gooddata-api-client/docs/DataSourceDeclarativeAPIsApi.md
@@ -101,6 +101,7 @@ with gooddata_api_client.ApiClient() as api_client:
declarative_data_sources = DeclarativeDataSources(
data_sources=[
DeclarativeDataSource(
+ authentication_type="USERNAME_PASSWORD",
cache_strategy="ALWAYS",
client_id="client1234",
client_secret="client_secret_example",
diff --git a/gooddata-api-client/docs/DeclarativeAutomation.md b/gooddata-api-client/docs/DeclarativeAutomation.md
index b9483974f..4cf74fa95 100644
--- a/gooddata-api-client/docs/DeclarativeAutomation.md
+++ b/gooddata-api-client/docs/DeclarativeAutomation.md
@@ -13,6 +13,7 @@ Name | Type | Description | Notes
**details** | **{str: (str,)}** | TODO | [optional]
**export_definitions** | [**[DeclarativeExportDefinitionIdentifier]**](DeclarativeExportDefinitionIdentifier.md) | | [optional]
**external_recipients** | [**[AutomationExternalRecipient]**](AutomationExternalRecipient.md) | External recipients of the automation action results. | [optional]
+**image_exports** | [**[AutomationImageExport]**](AutomationImageExport.md) | | [optional]
**metadata** | [**AutomationMetadata**](AutomationMetadata.md) | | [optional]
**modified_at** | **str, none_type** | Time of the last entity modification. | [optional]
**modified_by** | [**DeclarativeUserIdentifier**](DeclarativeUserIdentifier.md) | | [optional]
diff --git a/gooddata-api-client/docs/DeclarativeDataSource.md b/gooddata-api-client/docs/DeclarativeDataSource.md
index 88e3b9d0c..70914dfcc 100644
--- a/gooddata-api-client/docs/DeclarativeDataSource.md
+++ b/gooddata-api-client/docs/DeclarativeDataSource.md
@@ -9,6 +9,7 @@ Name | Type | Description | Notes
**name** | **str** | Name of the data source. |
**schema** | **str** | A scheme/database with the data. |
**type** | **str** | Type of database. |
+**authentication_type** | **str, none_type** | Type of authentication used to connect to the database. | [optional]
**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]
diff --git a/gooddata-api-client/docs/EntitiesApi.md b/gooddata-api-client/docs/EntitiesApi.md
index 121a49bcb..c4366e53c 100644
--- a/gooddata-api-client/docs/EntitiesApi.md
+++ b/gooddata-api-client/docs/EntitiesApi.md
@@ -542,9 +542,23 @@ with gooddata_api_client.ApiClient() as api_client:
email="email_example",
),
],
+ image_exports=[
+ JsonApiAutomationInAttributesImageExportsInner(
+ request_payload=ImageExportRequest(
+ dashboard_id="761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ file_name="filename",
+ format="PNG",
+ metadata=JsonNode(),
+ widget_ids=[
+ "widget_ids_example",
+ ],
+ ),
+ ),
+ ],
metadata=JsonApiAutomationInAttributesMetadata(
visible_filters=[
VisibleFilter(
+ is_all_time_date_filter=False,
local_identifier="local_identifier_example",
title="title_example",
),
@@ -1794,7 +1808,6 @@ with gooddata_api_client.ApiClient() as api_client:
provider="OPENAI",
title="title_example",
token="token_example",
- workspace_ids=["demo","trial"],
),
id="id1",
type="llmEndpoint",
@@ -12000,9 +12013,23 @@ with gooddata_api_client.ApiClient() as api_client:
email="email_example",
),
],
+ image_exports=[
+ JsonApiAutomationInAttributesImageExportsInner(
+ request_payload=ImageExportRequest(
+ dashboard_id="761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ file_name="filename",
+ format="PNG",
+ metadata=JsonNode(),
+ widget_ids=[
+ "widget_ids_example",
+ ],
+ ),
+ ),
+ ],
metadata=JsonApiAutomationInAttributesMetadata(
visible_filters=[
VisibleFilter(
+ is_all_time_date_filter=False,
local_identifier="local_identifier_example",
title="title_example",
),
@@ -13409,7 +13436,6 @@ with gooddata_api_client.ApiClient() as api_client:
provider="OPENAI",
title="title_example",
token="token_example",
- workspace_ids=["demo","trial"],
),
id="id1",
type="llmEndpoint",
@@ -15040,9 +15066,23 @@ with gooddata_api_client.ApiClient() as api_client:
email="email_example",
),
],
+ image_exports=[
+ JsonApiAutomationInAttributesImageExportsInner(
+ request_payload=ImageExportRequest(
+ dashboard_id="761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ file_name="filename",
+ format="PNG",
+ metadata=JsonNode(),
+ widget_ids=[
+ "widget_ids_example",
+ ],
+ ),
+ ),
+ ],
metadata=JsonApiAutomationInAttributesMetadata(
visible_filters=[
VisibleFilter(
+ is_all_time_date_filter=False,
local_identifier="local_identifier_example",
title="title_example",
),
@@ -16449,7 +16489,6 @@ with gooddata_api_client.ApiClient() as api_client:
provider="OPENAI",
title="title_example",
token="token_example",
- workspace_ids=["demo","trial"],
),
id="id1",
type="llmEndpoint",
diff --git a/gooddata-api-client/docs/ExportResult.md b/gooddata-api-client/docs/ExportResult.md
index 7bd806095..2c76f2bc7 100644
--- a/gooddata-api-client/docs/ExportResult.md
+++ b/gooddata-api-client/docs/ExportResult.md
@@ -8,6 +8,7 @@ Name | Type | Description | Notes
**file_name** | **str** | |
**status** | **str** | |
**error_message** | **str** | | [optional]
+**expires_at** | **datetime** | | [optional]
**file_uri** | **str** | | [optional]
**trace_id** | **str** | | [optional]
**triggered_at** | **datetime** | | [optional]
diff --git a/gooddata-api-client/docs/GetSlidesExport202ResponseInner.md b/gooddata-api-client/docs/GetImageExport202ResponseInner.md
similarity index 95%
rename from gooddata-api-client/docs/GetSlidesExport202ResponseInner.md
rename to gooddata-api-client/docs/GetImageExport202ResponseInner.md
index 52cf9faf3..8a1164698 100644
--- a/gooddata-api-client/docs/GetSlidesExport202ResponseInner.md
+++ b/gooddata-api-client/docs/GetImageExport202ResponseInner.md
@@ -1,4 +1,4 @@
-# GetSlidesExport202ResponseInner
+# GetImageExport202ResponseInner
## Properties
diff --git a/gooddata-api-client/docs/ImageExportApi.md b/gooddata-api-client/docs/ImageExportApi.md
new file mode 100644
index 000000000..ccd9b7b4d
--- /dev/null
+++ b/gooddata-api-client/docs/ImageExportApi.md
@@ -0,0 +1,225 @@
+# gooddata_api_client.ImageExportApi
+
+All URIs are relative to *http://localhost*
+
+Method | HTTP request | Description
+------------- | ------------- | -------------
+[**create_image_export**](ImageExportApi.md#create_image_export) | **POST** /api/v1/actions/workspaces/{workspaceId}/export/image | (EXPERIMENTAL) Create image export request
+[**get_image_export**](ImageExportApi.md#get_image_export) | **GET** /api/v1/actions/workspaces/{workspaceId}/export/image/{exportId} | (EXPERIMENTAL) Retrieve exported files
+[**get_image_export_metadata**](ImageExportApi.md#get_image_export_metadata) | **GET** /api/v1/actions/workspaces/{workspaceId}/export/image/{exportId}/metadata | (EXPERIMENTAL) Retrieve metadata context
+
+
+# **create_image_export**
+> ExportResponse create_image_export(workspace_id, image_export_request)
+
+(EXPERIMENTAL) Create image export request
+
+Note: This API is an experimental and is going to change. Please, use it accordingly. An image export job will be created based on the export request and put to queue to be executed. The result of the operation will be an exportResult identifier that will be assembled by the client into a url that can be polled.
+
+### Example
+
+
+```python
+import time
+import gooddata_api_client
+from gooddata_api_client.api import image_export_api
+from gooddata_api_client.model.export_response import ExportResponse
+from gooddata_api_client.model.image_export_request import ImageExportRequest
+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 = image_export_api.ImageExportApi(api_client)
+ workspace_id = "workspaceId_example" # str |
+ image_export_request = ImageExportRequest(
+ dashboard_id="761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ file_name="filename",
+ format="PNG",
+ metadata=JsonNode(),
+ widget_ids=[
+ "widget_ids_example",
+ ],
+ ) # ImageExportRequest |
+
+ # example passing only required values which don't have defaults set
+ try:
+ # (EXPERIMENTAL) Create image export request
+ api_response = api_instance.create_image_export(workspace_id, image_export_request)
+ pprint(api_response)
+ except gooddata_api_client.ApiException as e:
+ print("Exception when calling ImageExportApi->create_image_export: %s\n" % e)
+```
+
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **workspace_id** | **str**| |
+ **image_export_request** | [**ImageExportRequest**](ImageExportRequest.md)| |
+
+### Return type
+
+[**ExportResponse**](ExportResponse.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: application/json
+ - **Accept**: application/json
+
+
+### HTTP response details
+
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**201** | Image export request created successfully. | - |
+
+[[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_image_export**
+> get_image_export(workspace_id, export_id)
+
+(EXPERIMENTAL) Retrieve exported files
+
+Note: This API is an experimental and is going to change. Please, use it accordingly. After clients creates a POST export request, the processing of it will start shortly asynchronously. To retrieve the result, client has to check periodically for the result on this endpoint. In case the result isn't ready yet, the service returns 202. If the result is ready, it returns 200 and octet stream of the result file with provided filename.
+
+### Example
+
+
+```python
+import time
+import gooddata_api_client
+from gooddata_api_client.api import image_export_api
+from gooddata_api_client.model.get_image_export202_response_inner import GetImageExport202ResponseInner
+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 = image_export_api.ImageExportApi(api_client)
+ workspace_id = "workspaceId_example" # str |
+ export_id = "exportId_example" # str |
+
+ # example passing only required values which don't have defaults set
+ try:
+ # (EXPERIMENTAL) Retrieve exported files
+ api_instance.get_image_export(workspace_id, export_id)
+ except gooddata_api_client.ApiException as e:
+ print("Exception when calling ImageExportApi->get_image_export: %s\n" % e)
+```
+
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **workspace_id** | **str**| |
+ **export_id** | **str**| |
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: image/png
+
+
+### HTTP response details
+
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | Binary export result. | * Content-Disposition -
|
+**202** | Request is accepted, provided exportId exists, but export is not yet ready. | - |
+
+[[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_image_export_metadata**
+> get_image_export_metadata(workspace_id, export_id)
+
+(EXPERIMENTAL) Retrieve metadata context
+
+Note: This API is an experimental and is going to change. Please, use it accordingly. This endpoint serves as a cache for user-defined metadata of the export for the front end UI to retrieve it, if one was created using the POST ../export/image endpoint. The metadata structure is not verified.
+
+### Example
+
+
+```python
+import time
+import gooddata_api_client
+from gooddata_api_client.api import image_export_api
+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 = image_export_api.ImageExportApi(api_client)
+ workspace_id = "workspaceId_example" # str |
+ export_id = "exportId_example" # str |
+
+ # example passing only required values which don't have defaults set
+ try:
+ # (EXPERIMENTAL) Retrieve metadata context
+ api_instance.get_image_export_metadata(workspace_id, export_id)
+ except gooddata_api_client.ApiException as e:
+ print("Exception when calling ImageExportApi->get_image_export_metadata: %s\n" % e)
+```
+
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **workspace_id** | **str**| |
+ **export_id** | **str**| |
+
+### Return type
+
+void (empty response body)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
+### HTTP response details
+
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+**200** | Json metadata representation | - |
+
+[[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/ImageExportRequest.md b/gooddata-api-client/docs/ImageExportRequest.md
new file mode 100644
index 000000000..8671da722
--- /dev/null
+++ b/gooddata-api-client/docs/ImageExportRequest.md
@@ -0,0 +1,17 @@
+# ImageExportRequest
+
+Export request object describing the export properties and metadata for image exports.
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**dashboard_id** | **str** | Dashboard identifier |
+**file_name** | **str** | File name to be used for retrieving the image document. |
+**format** | **str** | Requested resulting file type. | defaults to "PNG"
+**metadata** | [**JsonNode**](JsonNode.md) | | [optional]
+**widget_ids** | **[str]** | List of widget identifiers to be exported. Note that only one widget is currently supported. | [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/JsonApiAutomationInAttributes.md b/gooddata-api-client/docs/JsonApiAutomationInAttributes.md
index 591cf3957..f195b2ed5 100644
--- a/gooddata-api-client/docs/JsonApiAutomationInAttributes.md
+++ b/gooddata-api-client/docs/JsonApiAutomationInAttributes.md
@@ -9,6 +9,7 @@ Name | Type | Description | Notes
**description** | **str** | | [optional]
**details** | **bool, date, datetime, dict, float, int, list, str, none_type** | Additional details to be included in the automated message. | [optional]
**external_recipients** | [**[JsonApiAutomationInAttributesExternalRecipientsInner]**](JsonApiAutomationInAttributesExternalRecipientsInner.md) | External recipients of the automation action results. | [optional]
+**image_exports** | [**[JsonApiAutomationInAttributesImageExportsInner]**](JsonApiAutomationInAttributesImageExportsInner.md) | | [optional]
**metadata** | [**JsonApiAutomationInAttributesMetadata**](JsonApiAutomationInAttributesMetadata.md) | | [optional]
**schedule** | [**JsonApiAutomationInAttributesSchedule**](JsonApiAutomationInAttributesSchedule.md) | | [optional]
**state** | **str** | Current state of the automation. | [optional]
diff --git a/gooddata-api-client/docs/JsonApiAutomationInAttributesImageExportsInner.md b/gooddata-api-client/docs/JsonApiAutomationInAttributesImageExportsInner.md
new file mode 100644
index 000000000..fd6e6bc18
--- /dev/null
+++ b/gooddata-api-client/docs/JsonApiAutomationInAttributesImageExportsInner.md
@@ -0,0 +1,12 @@
+# JsonApiAutomationInAttributesImageExportsInner
+
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**request_payload** | [**ImageExportRequest**](ImageExportRequest.md) | |
+**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/JsonApiAutomationOutAttributes.md b/gooddata-api-client/docs/JsonApiAutomationOutAttributes.md
index 582de309c..2a91f345a 100644
--- a/gooddata-api-client/docs/JsonApiAutomationOutAttributes.md
+++ b/gooddata-api-client/docs/JsonApiAutomationOutAttributes.md
@@ -10,6 +10,7 @@ Name | Type | Description | Notes
**description** | **str** | | [optional]
**details** | **bool, date, datetime, dict, float, int, list, str, none_type** | Additional details to be included in the automated message. | [optional]
**external_recipients** | [**[JsonApiAutomationInAttributesExternalRecipientsInner]**](JsonApiAutomationInAttributesExternalRecipientsInner.md) | External recipients of the automation action results. | [optional]
+**image_exports** | [**[JsonApiAutomationInAttributesImageExportsInner]**](JsonApiAutomationInAttributesImageExportsInner.md) | | [optional]
**metadata** | [**JsonApiAutomationInAttributesMetadata**](JsonApiAutomationInAttributesMetadata.md) | | [optional]
**modified_at** | **datetime** | | [optional]
**schedule** | [**JsonApiAutomationInAttributesSchedule**](JsonApiAutomationInAttributesSchedule.md) | | [optional]
diff --git a/gooddata-api-client/docs/JsonApiLlmEndpointInAttributes.md b/gooddata-api-client/docs/JsonApiLlmEndpointInAttributes.md
index 04c2d777e..48e11a6a0 100644
--- a/gooddata-api-client/docs/JsonApiLlmEndpointInAttributes.md
+++ b/gooddata-api-client/docs/JsonApiLlmEndpointInAttributes.md
@@ -11,7 +11,6 @@ Name | Type | Description | Notes
**llm_model** | **str** | LLM Model. We provide a default model for each provider, but you can override it here. | [optional]
**llm_organization** | **str, none_type** | Organization in LLM provider. | [optional]
**provider** | **str** | LLM Provider. | [optional] if omitted the server will use the default value of "OPENAI"
-**workspace_ids** | **[str]** | List of workspace IDs for which LLM endpoint is valid. If empty, it is valid for all workspaces. | [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/JsonApiLlmEndpointOutAttributes.md b/gooddata-api-client/docs/JsonApiLlmEndpointOutAttributes.md
index 78d76b473..fb340b2a0 100644
--- a/gooddata-api-client/docs/JsonApiLlmEndpointOutAttributes.md
+++ b/gooddata-api-client/docs/JsonApiLlmEndpointOutAttributes.md
@@ -10,7 +10,6 @@ Name | Type | Description | Notes
**llm_model** | **str** | LLM Model. We provide a default model for each provider, but you can override it here. | [optional]
**llm_organization** | **str, none_type** | Organization in LLM provider. | [optional]
**provider** | **str** | LLM Provider. | [optional] if omitted the server will use the default value of "OPENAI"
-**workspace_ids** | **[str]** | List of workspace IDs for which LLM endpoint is valid. If empty, it is valid for all workspaces. | [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/JsonApiLlmEndpointPatchAttributes.md b/gooddata-api-client/docs/JsonApiLlmEndpointPatchAttributes.md
index 1d6a89a33..dc4f473cc 100644
--- a/gooddata-api-client/docs/JsonApiLlmEndpointPatchAttributes.md
+++ b/gooddata-api-client/docs/JsonApiLlmEndpointPatchAttributes.md
@@ -11,7 +11,6 @@ Name | Type | Description | Notes
**provider** | **str** | LLM Provider. | [optional] if omitted the server will use the default value of "OPENAI"
**title** | **str** | User-facing title of the LLM Provider. | [optional]
**token** | **str** | The token to use to connect to the LLM provider. | [optional]
-**workspace_ids** | **[str]** | List of workspace IDs for which LLM endpoint is valid. If empty, it is valid for all workspaces. | [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/LLMEndpointsApi.md b/gooddata-api-client/docs/LLMEndpointsApi.md
index 750b30d08..2cf88ff4b 100644
--- a/gooddata-api-client/docs/LLMEndpointsApi.md
+++ b/gooddata-api-client/docs/LLMEndpointsApi.md
@@ -48,7 +48,6 @@ with gooddata_api_client.ApiClient() as api_client:
provider="OPENAI",
title="title_example",
token="token_example",
- workspace_ids=["demo","trial"],
),
id="id1",
type="llmEndpoint",
@@ -355,7 +354,6 @@ with gooddata_api_client.ApiClient() as api_client:
provider="OPENAI",
title="title_example",
token="token_example",
- workspace_ids=["demo","trial"],
),
id="id1",
type="llmEndpoint",
@@ -449,7 +447,6 @@ with gooddata_api_client.ApiClient() as api_client:
provider="OPENAI",
title="title_example",
token="token_example",
- workspace_ids=["demo","trial"],
),
id="id1",
type="llmEndpoint",
diff --git a/gooddata-api-client/docs/LayoutApi.md b/gooddata-api-client/docs/LayoutApi.md
index c7d06731b..4c91bc9bf 100644
--- a/gooddata-api-client/docs/LayoutApi.md
+++ b/gooddata-api-client/docs/LayoutApi.md
@@ -1518,6 +1518,7 @@ with gooddata_api_client.ApiClient() as api_client:
declarative_data_sources = DeclarativeDataSources(
data_sources=[
DeclarativeDataSource(
+ authentication_type="USERNAME_PASSWORD",
cache_strategy="ALWAYS",
client_id="client1234",
client_secret="client_secret_example",
@@ -2528,9 +2529,23 @@ with gooddata_api_client.ApiClient() as api_client:
),
],
id="/6bUUGjjNSwg0_bs",
+ image_exports=[
+ AutomationImageExport(
+ request_payload=ImageExportRequest(
+ dashboard_id="761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ file_name="filename",
+ format="PNG",
+ metadata=JsonNode(),
+ widget_ids=[
+ "widget_ids_example",
+ ],
+ ),
+ ),
+ ],
metadata=AutomationMetadata(
visible_filters=[
VisibleFilter(
+ is_all_time_date_filter=False,
local_identifier="local_identifier_example",
title="title_example",
),
@@ -3351,6 +3366,7 @@ with gooddata_api_client.ApiClient() as api_client:
declarative_organization = DeclarativeOrganization(
data_sources=[
DeclarativeDataSource(
+ authentication_type="USERNAME_PASSWORD",
cache_strategy="ALWAYS",
client_id="client1234",
client_secret="client_secret_example",
@@ -3690,9 +3706,23 @@ with gooddata_api_client.ApiClient() as api_client:
),
],
id="/6bUUGjjNSwg0_bs",
+ image_exports=[
+ AutomationImageExport(
+ request_payload=ImageExportRequest(
+ dashboard_id="761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ file_name="filename",
+ format="PNG",
+ metadata=JsonNode(),
+ widget_ids=[
+ "widget_ids_example",
+ ],
+ ),
+ ),
+ ],
metadata=AutomationMetadata(
visible_filters=[
VisibleFilter(
+ is_all_time_date_filter=False,
local_identifier="local_identifier_example",
title="title_example",
),
@@ -4788,9 +4818,23 @@ with gooddata_api_client.ApiClient() as api_client:
),
],
id="/6bUUGjjNSwg0_bs",
+ image_exports=[
+ AutomationImageExport(
+ request_payload=ImageExportRequest(
+ dashboard_id="761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ file_name="filename",
+ format="PNG",
+ metadata=JsonNode(),
+ widget_ids=[
+ "widget_ids_example",
+ ],
+ ),
+ ),
+ ],
metadata=AutomationMetadata(
visible_filters=[
VisibleFilter(
+ is_all_time_date_filter=False,
local_identifier="local_identifier_example",
title="title_example",
),
diff --git a/gooddata-api-client/docs/MeasureItem.md b/gooddata-api-client/docs/MeasureItem.md
index 7e6204059..b6fd4a85b 100644
--- a/gooddata-api-client/docs/MeasureItem.md
+++ b/gooddata-api-client/docs/MeasureItem.md
@@ -5,7 +5,7 @@ Metric is a quantity that is calculated from the data.
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
-**definition** | [**MeasureDefinition**](MeasureDefinition.md) | |
+**definition** | [**MeasureItemDefinition**](MeasureItemDefinition.md) | |
**local_identifier** | **str** | Local identifier of the metric. This can be used to reference the metric in other parts of the execution definition. |
**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/MeasureItemDefinition.md b/gooddata-api-client/docs/MeasureItemDefinition.md
new file mode 100644
index 000000000..1f49e6539
--- /dev/null
+++ b/gooddata-api-client/docs/MeasureItemDefinition.md
@@ -0,0 +1,15 @@
+# MeasureItemDefinition
+
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**arithmetic_measure** | [**ArithmeticMeasureDefinitionArithmeticMeasure**](ArithmeticMeasureDefinitionArithmeticMeasure.md) | | [optional]
+**inline** | [**InlineMeasureDefinitionInline**](InlineMeasureDefinitionInline.md) | | [optional]
+**previous_period_measure** | [**PopDatasetMeasureDefinitionPreviousPeriodMeasure**](PopDatasetMeasureDefinitionPreviousPeriodMeasure.md) | | [optional]
+**over_period_measure** | [**PopDateMeasureDefinitionOverPeriodMeasure**](PopDateMeasureDefinitionOverPeriodMeasure.md) | | [optional]
+**measure** | [**SimpleMeasureDefinitionMeasure**](SimpleMeasureDefinitionMeasure.md) | | [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 0f7baac9d..986a12509 100644
--- a/gooddata-api-client/docs/OrganizationDeclarativeAPIsApi.md
+++ b/gooddata-api-client/docs/OrganizationDeclarativeAPIsApi.md
@@ -108,6 +108,7 @@ with gooddata_api_client.ApiClient() as api_client:
declarative_organization = DeclarativeOrganization(
data_sources=[
DeclarativeDataSource(
+ authentication_type="USERNAME_PASSWORD",
cache_strategy="ALWAYS",
client_id="client1234",
client_secret="client_secret_example",
@@ -447,9 +448,23 @@ with gooddata_api_client.ApiClient() as api_client:
),
],
id="/6bUUGjjNSwg0_bs",
+ image_exports=[
+ AutomationImageExport(
+ request_payload=ImageExportRequest(
+ dashboard_id="761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ file_name="filename",
+ format="PNG",
+ metadata=JsonNode(),
+ widget_ids=[
+ "widget_ids_example",
+ ],
+ ),
+ ),
+ ],
metadata=AutomationMetadata(
visible_filters=[
VisibleFilter(
+ is_all_time_date_filter=False,
local_identifier="local_identifier_example",
title="title_example",
),
diff --git a/gooddata-api-client/docs/OrganizationModelControllerApi.md b/gooddata-api-client/docs/OrganizationModelControllerApi.md
index 16734c64b..fd6765934 100644
--- a/gooddata-api-client/docs/OrganizationModelControllerApi.md
+++ b/gooddata-api-client/docs/OrganizationModelControllerApi.md
@@ -683,7 +683,6 @@ with gooddata_api_client.ApiClient() as api_client:
provider="OPENAI",
title="title_example",
token="token_example",
- workspace_ids=["demo","trial"],
),
id="id1",
type="llmEndpoint",
@@ -5420,7 +5419,6 @@ with gooddata_api_client.ApiClient() as api_client:
provider="OPENAI",
title="title_example",
token="token_example",
- workspace_ids=["demo","trial"],
),
id="id1",
type="llmEndpoint",
@@ -6725,7 +6723,6 @@ with gooddata_api_client.ApiClient() as api_client:
provider="OPENAI",
title="title_example",
token="token_example",
- workspace_ids=["demo","trial"],
),
id="id1",
type="llmEndpoint",
diff --git a/gooddata-api-client/docs/Over.md b/gooddata-api-client/docs/Over.md
new file mode 100644
index 000000000..8a2831345
--- /dev/null
+++ b/gooddata-api-client/docs/Over.md
@@ -0,0 +1,12 @@
+# Over
+
+
+## Properties
+Name | Type | Description | Notes
+------------ | ------------- | ------------- | -------------
+**attributes** | **[str]** | |
+**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/SlidesExportApi.md b/gooddata-api-client/docs/SlidesExportApi.md
index 96f7e41f6..e40039898 100644
--- a/gooddata-api-client/docs/SlidesExportApi.md
+++ b/gooddata-api-client/docs/SlidesExportApi.md
@@ -87,7 +87,7 @@ No authorization required
| Status code | Description | Response headers |
|-------------|-------------|------------------|
-**201** | Raw export request created successfully. | - |
+**201** | Slides export request created successfully. | - |
[[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)
@@ -105,7 +105,7 @@ Note: This API is an experimental and is going to change. Please, use it accordi
import time
import gooddata_api_client
from gooddata_api_client.api import slides_export_api
-from gooddata_api_client.model.get_slides_export202_response_inner import GetSlidesExport202ResponseInner
+from gooddata_api_client.model.get_image_export202_response_inner import GetImageExport202ResponseInner
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.
diff --git a/gooddata-api-client/docs/SmartFunctionsApi.md b/gooddata-api-client/docs/SmartFunctionsApi.md
index 4839f90f8..ad3387390 100644
--- a/gooddata-api-client/docs/SmartFunctionsApi.md
+++ b/gooddata-api-client/docs/SmartFunctionsApi.md
@@ -7,6 +7,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_chat_usage**](SmartFunctionsApi.md#ai_chat_usage) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/chatUsage | Get Chat Usage
[**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
[**anomaly_detection_result**](SmartFunctionsApi.md#anomaly_detection_result) | **GET** /api/v1/actions/workspaces/{workspaceId}/execution/functions/anomalyDetection/result/{resultId} | (EXPERIMENTAL) Smart functions - Anomaly Detection Result
@@ -254,6 +255,73 @@ No authorization required
- **Accept**: text/event-stream
+### 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_usage**
+> ChatUsageResponse ai_chat_usage(workspace_id)
+
+Get Chat Usage
+
+Returns usage statistics of chat for a user in a workspace.
+
+### Example
+
+
+```python
+import time
+import gooddata_api_client
+from gooddata_api_client.api import smart_functions_api
+from gooddata_api_client.model.chat_usage_response import ChatUsageResponse
+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
+
+ # example passing only required values which don't have defaults set
+ try:
+ # Get Chat Usage
+ api_response = api_instance.ai_chat_usage(workspace_id)
+ pprint(api_response)
+ except gooddata_api_client.ApiException as e:
+ print("Exception when calling SmartFunctionsApi->ai_chat_usage: %s\n" % e)
+```
+
+
+### Parameters
+
+Name | Type | Description | Notes
+------------- | ------------- | ------------- | -------------
+ **workspace_id** | **str**| Workspace identifier |
+
+### Return type
+
+[**ChatUsageResponse**](ChatUsageResponse.md)
+
+### Authorization
+
+No authorization required
+
+### HTTP request headers
+
+ - **Content-Type**: Not defined
+ - **Accept**: application/json
+
+
### HTTP response details
| Status code | Description | Response headers |
diff --git a/gooddata-api-client/docs/TabularExportApi.md b/gooddata-api-client/docs/TabularExportApi.md
index 544cc3218..2f491215f 100644
--- a/gooddata-api-client/docs/TabularExportApi.md
+++ b/gooddata-api-client/docs/TabularExportApi.md
@@ -10,7 +10,7 @@ Method | HTTP request | Description
# **create_dashboard_export_request**
-> ExportResponse create_dashboard_export_request(workspace_id, dashboard_id)
+> ExportResponse create_dashboard_export_request(workspace_id, dashboard_id, dashboard_tabular_export_request)
(EXPERIMENTAL) Create dashboard tabular export request
@@ -24,6 +24,7 @@ import time
import gooddata_api_client
from gooddata_api_client.api import tabular_export_api
from gooddata_api_client.model.export_response import ExportResponse
+from gooddata_api_client.model.dashboard_tabular_export_request import DashboardTabularExportRequest
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.
@@ -38,11 +39,18 @@ with gooddata_api_client.ApiClient() as api_client:
api_instance = tabular_export_api.TabularExportApi(api_client)
workspace_id = "workspaceId_example" # str |
dashboard_id = "dashboardId_example" # str |
+ dashboard_tabular_export_request = DashboardTabularExportRequest(
+ dashboard_filters_override=[
+ DashboardTabularExportRequestDashboardFiltersOverrideInner(None),
+ ],
+ file_name="result",
+ format="XLSX",
+ ) # DashboardTabularExportRequest |
# example passing only required values which don't have defaults set
try:
# (EXPERIMENTAL) Create dashboard tabular export request
- api_response = api_instance.create_dashboard_export_request(workspace_id, dashboard_id)
+ api_response = api_instance.create_dashboard_export_request(workspace_id, dashboard_id, dashboard_tabular_export_request)
pprint(api_response)
except gooddata_api_client.ApiException as e:
print("Exception when calling TabularExportApi->create_dashboard_export_request: %s\n" % e)
@@ -55,6 +63,7 @@ Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**workspace_id** | **str**| |
**dashboard_id** | **str**| |
+ **dashboard_tabular_export_request** | [**DashboardTabularExportRequest**](DashboardTabularExportRequest.md)| |
### Return type
@@ -66,7 +75,7 @@ No authorization required
### HTTP request headers
- - **Content-Type**: Not defined
+ - **Content-Type**: application/json
- **Accept**: application/json
diff --git a/gooddata-api-client/docs/VisibleFilter.md b/gooddata-api-client/docs/VisibleFilter.md
index de43121ce..d82654e7e 100644
--- a/gooddata-api-client/docs/VisibleFilter.md
+++ b/gooddata-api-client/docs/VisibleFilter.md
@@ -4,6 +4,7 @@
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
+**is_all_time_date_filter** | **bool** | Indicates if the filter is an all-time date filter. Such a filter is not included in report computation, so there is no filter with the same 'localIdentifier' to be found. In such cases, this flag is used to inform the server to not search for the filter in the definitions and include it anyways. | [optional] if omitted the server will use the default value of False
**local_identifier** | **str** | | [optional]
**title** | **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]
diff --git a/gooddata-api-client/docs/WebhookAutomationInfo.md b/gooddata-api-client/docs/WebhookAutomationInfo.md
index cb90da236..25fb08a49 100644
--- a/gooddata-api-client/docs/WebhookAutomationInfo.md
+++ b/gooddata-api-client/docs/WebhookAutomationInfo.md
@@ -7,6 +7,7 @@ Name | Type | Description | Notes
**dashboard_url** | **str** | |
**id** | **str** | |
**is_custom_dashboard_url** | **bool** | |
+**dashboard_title** | **str** | | [optional]
**title** | **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]
diff --git a/gooddata-api-client/docs/WebhookMessageData.md b/gooddata-api-client/docs/WebhookMessageData.md
index fc3fed6e9..cdf26bbd0 100644
--- a/gooddata-api-client/docs/WebhookMessageData.md
+++ b/gooddata-api-client/docs/WebhookMessageData.md
@@ -8,6 +8,7 @@ Name | Type | Description | Notes
**alert** | [**AlertDescription**](AlertDescription.md) | | [optional]
**details** | **{str: (str,)}** | | [optional]
**filters** | [**[NotificationFilter]**](NotificationFilter.md) | | [optional]
+**image_exports** | [**[ExportResult]**](ExportResult.md) | | [optional]
**recipients** | [**[WebhookRecipient]**](WebhookRecipient.md) | | [optional]
**remaining_action_count** | **int** | | [optional]
**tabular_exports** | [**[ExportResult]**](ExportResult.md) | | [optional]
diff --git a/gooddata-api-client/docs/WorkspaceObjectControllerApi.md b/gooddata-api-client/docs/WorkspaceObjectControllerApi.md
index 8adcbd45e..192062e01 100644
--- a/gooddata-api-client/docs/WorkspaceObjectControllerApi.md
+++ b/gooddata-api-client/docs/WorkspaceObjectControllerApi.md
@@ -367,9 +367,23 @@ with gooddata_api_client.ApiClient() as api_client:
email="email_example",
),
],
+ image_exports=[
+ JsonApiAutomationInAttributesImageExportsInner(
+ request_payload=ImageExportRequest(
+ dashboard_id="761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ file_name="filename",
+ format="PNG",
+ metadata=JsonNode(),
+ widget_ids=[
+ "widget_ids_example",
+ ],
+ ),
+ ),
+ ],
metadata=JsonApiAutomationInAttributesMetadata(
visible_filters=[
VisibleFilter(
+ is_all_time_date_filter=False,
local_identifier="local_identifier_example",
title="title_example",
),
@@ -6243,9 +6257,23 @@ with gooddata_api_client.ApiClient() as api_client:
email="email_example",
),
],
+ image_exports=[
+ JsonApiAutomationInAttributesImageExportsInner(
+ request_payload=ImageExportRequest(
+ dashboard_id="761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ file_name="filename",
+ format="PNG",
+ metadata=JsonNode(),
+ widget_ids=[
+ "widget_ids_example",
+ ],
+ ),
+ ),
+ ],
metadata=JsonApiAutomationInAttributesMetadata(
visible_filters=[
VisibleFilter(
+ is_all_time_date_filter=False,
local_identifier="local_identifier_example",
title="title_example",
),
@@ -7780,9 +7808,23 @@ with gooddata_api_client.ApiClient() as api_client:
email="email_example",
),
],
+ image_exports=[
+ JsonApiAutomationInAttributesImageExportsInner(
+ request_payload=ImageExportRequest(
+ dashboard_id="761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ file_name="filename",
+ format="PNG",
+ metadata=JsonNode(),
+ widget_ids=[
+ "widget_ids_example",
+ ],
+ ),
+ ),
+ ],
metadata=JsonApiAutomationInAttributesMetadata(
visible_filters=[
VisibleFilter(
+ is_all_time_date_filter=False,
local_identifier="local_identifier_example",
title="title_example",
),
diff --git a/gooddata-api-client/docs/WorkspacesDeclarativeAPIsApi.md b/gooddata-api-client/docs/WorkspacesDeclarativeAPIsApi.md
index ec4275f86..4940f905c 100644
--- a/gooddata-api-client/docs/WorkspacesDeclarativeAPIsApi.md
+++ b/gooddata-api-client/docs/WorkspacesDeclarativeAPIsApi.md
@@ -611,9 +611,23 @@ with gooddata_api_client.ApiClient() as api_client:
),
],
id="/6bUUGjjNSwg0_bs",
+ image_exports=[
+ AutomationImageExport(
+ request_payload=ImageExportRequest(
+ dashboard_id="761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ file_name="filename",
+ format="PNG",
+ metadata=JsonNode(),
+ widget_ids=[
+ "widget_ids_example",
+ ],
+ ),
+ ),
+ ],
metadata=AutomationMetadata(
visible_filters=[
VisibleFilter(
+ is_all_time_date_filter=False,
local_identifier="local_identifier_example",
title="title_example",
),
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 e50e55bdd..35cf5b5d6 100644
--- a/gooddata-api-client/gooddata_api_client/api/actions_api.py
+++ b/gooddata-api-client/gooddata_api_client/api/actions_api.py
@@ -37,11 +37,13 @@
from gooddata_api_client.model.chat_history_result import ChatHistoryResult
from gooddata_api_client.model.chat_request import ChatRequest
from gooddata_api_client.model.chat_result import ChatResult
+from gooddata_api_client.model.chat_usage_response import ChatUsageResponse
from gooddata_api_client.model.clustering_request import ClusteringRequest
from gooddata_api_client.model.clustering_result import ClusteringResult
from gooddata_api_client.model.column_statistics_request import ColumnStatisticsRequest
from gooddata_api_client.model.column_statistics_response import ColumnStatisticsResponse
from gooddata_api_client.model.dashboard_permissions import DashboardPermissions
+from gooddata_api_client.model.dashboard_tabular_export_request import DashboardTabularExportRequest
from gooddata_api_client.model.data_source_permission_assignment import DataSourcePermissionAssignment
from gooddata_api_client.model.data_source_schemata import DataSourceSchemata
from gooddata_api_client.model.declarative_model import DeclarativeModel
@@ -55,9 +57,10 @@
from gooddata_api_client.model.forecast_request import ForecastRequest
from gooddata_api_client.model.forecast_result import ForecastResult
from gooddata_api_client.model.generate_ldm_request import GenerateLdmRequest
-from gooddata_api_client.model.get_slides_export202_response_inner import GetSlidesExport202ResponseInner
+from gooddata_api_client.model.get_image_export202_response_inner import GetImageExport202ResponseInner
from gooddata_api_client.model.hierarchy_object_identification import HierarchyObjectIdentification
from gooddata_api_client.model.identifier_duplications import IdentifierDuplications
+from gooddata_api_client.model.image_export_request import ImageExportRequest
from gooddata_api_client.model.key_drivers_request import KeyDriversRequest
from gooddata_api_client.model.key_drivers_response import KeyDriversResponse
from gooddata_api_client.model.key_drivers_result import KeyDriversResult
@@ -292,6 +295,62 @@ def __init__(self, api_client=None):
},
api_client=api_client
)
+ self.ai_chat_usage_endpoint = _Endpoint(
+ settings={
+ 'response_type': (ChatUsageResponse,),
+ 'auth': [],
+ 'endpoint_path': '/api/v1/actions/workspaces/{workspaceId}/ai/chatUsage',
+ 'operation_id': 'ai_chat_usage',
+ 'http_method': 'GET',
+ 'servers': None,
+ },
+ params_map={
+ 'all': [
+ 'workspace_id',
+ ],
+ 'required': [
+ 'workspace_id',
+ ],
+ '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,),
+ },
+ 'attribute_map': {
+ 'workspace_id': 'workspaceId',
+ },
+ 'location_map': {
+ 'workspace_id': 'path',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/json'
+ ],
+ 'content_type': [],
+ },
+ api_client=api_client
+ )
self.ai_search_endpoint = _Endpoint(
settings={
'response_type': (SearchResult,),
@@ -1275,10 +1334,12 @@ def __init__(self, api_client=None):
'all': [
'workspace_id',
'dashboard_id',
+ 'dashboard_tabular_export_request',
],
'required': [
'workspace_id',
'dashboard_id',
+ 'dashboard_tabular_export_request',
],
'nullable': [
],
@@ -1297,6 +1358,8 @@ def __init__(self, api_client=None):
(str,),
'dashboard_id':
(str,),
+ 'dashboard_tabular_export_request':
+ (DashboardTabularExportRequest,),
},
'attribute_map': {
'workspace_id': 'workspaceId',
@@ -1305,6 +1368,7 @@ def __init__(self, api_client=None):
'location_map': {
'workspace_id': 'path',
'dashboard_id': 'path',
+ 'dashboard_tabular_export_request': 'body',
},
'collection_format_map': {
}
@@ -1313,7 +1377,65 @@ def __init__(self, api_client=None):
'accept': [
'application/json'
],
- 'content_type': [],
+ 'content_type': [
+ 'application/json'
+ ]
+ },
+ api_client=api_client
+ )
+ self.create_image_export_endpoint = _Endpoint(
+ settings={
+ 'response_type': (ExportResponse,),
+ 'auth': [],
+ 'endpoint_path': '/api/v1/actions/workspaces/{workspaceId}/export/image',
+ 'operation_id': 'create_image_export',
+ 'http_method': 'POST',
+ 'servers': None,
+ },
+ params_map={
+ 'all': [
+ 'workspace_id',
+ 'image_export_request',
+ ],
+ 'required': [
+ 'workspace_id',
+ 'image_export_request',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'workspace_id':
+ (str,),
+ 'image_export_request':
+ (ImageExportRequest,),
+ },
+ 'attribute_map': {
+ 'workspace_id': 'workspaceId',
+ },
+ 'location_map': {
+ 'workspace_id': 'path',
+ 'image_export_request': 'body',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/json'
+ ],
+ 'content_type': [
+ 'application/json'
+ ]
},
api_client=api_client
)
@@ -2099,6 +2221,116 @@ def __init__(self, api_client=None):
},
api_client=api_client
)
+ self.get_image_export_endpoint = _Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [],
+ 'endpoint_path': '/api/v1/actions/workspaces/{workspaceId}/export/image/{exportId}',
+ 'operation_id': 'get_image_export',
+ 'http_method': 'GET',
+ 'servers': None,
+ },
+ params_map={
+ 'all': [
+ 'workspace_id',
+ 'export_id',
+ ],
+ 'required': [
+ 'workspace_id',
+ 'export_id',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'workspace_id':
+ (str,),
+ 'export_id':
+ (str,),
+ },
+ 'attribute_map': {
+ 'workspace_id': 'workspaceId',
+ 'export_id': 'exportId',
+ },
+ 'location_map': {
+ 'workspace_id': 'path',
+ 'export_id': 'path',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'image/png'
+ ],
+ 'content_type': [],
+ },
+ api_client=api_client
+ )
+ self.get_image_export_metadata_endpoint = _Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [],
+ 'endpoint_path': '/api/v1/actions/workspaces/{workspaceId}/export/image/{exportId}/metadata',
+ 'operation_id': 'get_image_export_metadata',
+ 'http_method': 'GET',
+ 'servers': None,
+ },
+ params_map={
+ 'all': [
+ 'workspace_id',
+ 'export_id',
+ ],
+ 'required': [
+ 'workspace_id',
+ 'export_id',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'workspace_id':
+ (str,),
+ 'export_id':
+ (str,),
+ },
+ 'attribute_map': {
+ 'workspace_id': 'workspaceId',
+ 'export_id': 'exportId',
+ },
+ 'location_map': {
+ 'workspace_id': 'path',
+ 'export_id': 'path',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/json'
+ ],
+ 'content_type': [],
+ },
+ api_client=api_client
+ )
self.get_metadata_endpoint = _Endpoint(
settings={
'response_type': None,
@@ -4821,24 +5053,22 @@ def ai_chat_stream(
chat_request
return self.ai_chat_stream_endpoint.call_with_http_info(**kwargs)
- def ai_search(
+ def ai_chat_usage(
self,
workspace_id,
- search_request,
**kwargs
):
- """(BETA) Semantic Search in Metadata # noqa: E501
+ """Get Chat Usage # noqa: E501
- (BETA) Uses similarity (e.g. cosine distance) search to find top X most similar metadata objects. # noqa: E501
+ Returns usage statistics of chat for a user in a workspace. # 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_search(workspace_id, search_request, async_req=True)
+ >>> thread = api.ai_chat_usage(workspace_id, async_req=True)
>>> result = thread.get()
Args:
workspace_id (str): Workspace identifier
- search_request (SearchRequest):
Keyword Args:
_return_http_data_only (bool): response data without head status
@@ -4873,7 +5103,7 @@ def ai_search(
async_req (bool): execute request asynchronously
Returns:
- SearchResult
+ ChatUsageResponse
If the method is called asynchronously, returns the request
thread.
"""
@@ -4904,23 +5134,26 @@ def ai_search(
kwargs['_request_auths'] = kwargs.get('_request_auths', None)
kwargs['workspace_id'] = \
workspace_id
- kwargs['search_request'] = \
- search_request
- return self.ai_search_endpoint.call_with_http_info(**kwargs)
+ return self.ai_chat_usage_endpoint.call_with_http_info(**kwargs)
- def all_platform_usage(
+ def ai_search(
self,
+ workspace_id,
+ search_request,
**kwargs
):
- """Info about the platform usage. # noqa: E501
+ """(BETA) Semantic Search in Metadata # noqa: E501
- Provides information about platform usage, like amount of users, workspaces, ... _NOTE_: The `admin` user is always excluded from this amount. # noqa: E501
+ (BETA) Uses similarity (e.g. cosine distance) search to find top X most similar metadata objects. # noqa: E501
This method makes a synchronous HTTP request by default. To make an
asynchronous HTTP request, please pass async_req=True
- >>> thread = api.all_platform_usage(async_req=True)
+ >>> thread = api.ai_search(workspace_id, search_request, async_req=True)
>>> result = thread.get()
+ Args:
+ workspace_id (str): Workspace identifier
+ search_request (SearchRequest):
Keyword Args:
_return_http_data_only (bool): response data without head status
@@ -4955,7 +5188,7 @@ def all_platform_usage(
async_req (bool): execute request asynchronously
Returns:
- [PlatformUsage]
+ SearchResult
If the method is called asynchronously, returns the request
thread.
"""
@@ -4984,31 +5217,27 @@ def all_platform_usage(
'_content_type')
kwargs['_host_index'] = kwargs.get('_host_index')
kwargs['_request_auths'] = kwargs.get('_request_auths', None)
- return self.all_platform_usage_endpoint.call_with_http_info(**kwargs)
+ kwargs['workspace_id'] = \
+ workspace_id
+ kwargs['search_request'] = \
+ search_request
+ return self.ai_search_endpoint.call_with_http_info(**kwargs)
- def anomaly_detection(
+ def all_platform_usage(
self,
- workspace_id,
- result_id,
- anomaly_detection_request,
**kwargs
):
- """(EXPERIMENTAL) Smart functions - Anomaly Detection # noqa: E501
+ """Info about the platform usage. # noqa: E501
- (EXPERIMENTAL) Computes anomaly detection. # noqa: E501
+ Provides information about platform usage, like amount of users, workspaces, ... _NOTE_: The `admin` user is always excluded from this amount. # noqa: E501
This method makes a synchronous HTTP request by default. To make an
asynchronous HTTP request, please pass async_req=True
- >>> thread = api.anomaly_detection(workspace_id, result_id, anomaly_detection_request, async_req=True)
+ >>> thread = api.all_platform_usage(async_req=True)
>>> result = thread.get()
- Args:
- workspace_id (str): Workspace identifier
- result_id (str): Input result ID to be used in the computation
- anomaly_detection_request (AnomalyDetectionRequest):
Keyword Args:
- skip_cache (bool): Ignore all caches during execution of current request.. [optional] if omitted the server will use the default value of False
_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
@@ -5041,7 +5270,93 @@ def anomaly_detection(
async_req (bool): execute request asynchronously
Returns:
- SmartFunctionResponse
+ [PlatformUsage]
+ 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.all_platform_usage_endpoint.call_with_http_info(**kwargs)
+
+ def anomaly_detection(
+ self,
+ workspace_id,
+ result_id,
+ anomaly_detection_request,
+ **kwargs
+ ):
+ """(EXPERIMENTAL) Smart functions - Anomaly Detection # noqa: E501
+
+ (EXPERIMENTAL) Computes anomaly detection. # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+
+ >>> thread = api.anomaly_detection(workspace_id, result_id, anomaly_detection_request, async_req=True)
+ >>> result = thread.get()
+
+ Args:
+ workspace_id (str): Workspace identifier
+ result_id (str): Input result ID to be used in the computation
+ anomaly_detection_request (AnomalyDetectionRequest):
+
+ Keyword Args:
+ skip_cache (bool): Ignore all caches during execution of current request.. [optional] if omitted the server will use the default value of False
+ _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:
+ SmartFunctionResponse
If the method is called asynchronously, returns the request
thread.
"""
@@ -6139,6 +6454,7 @@ def create_dashboard_export_request(
self,
workspace_id,
dashboard_id,
+ dashboard_tabular_export_request,
**kwargs
):
"""(EXPERIMENTAL) Create dashboard tabular export request # noqa: E501
@@ -6147,12 +6463,13 @@ def create_dashboard_export_request(
This method makes a synchronous HTTP request by default. To make an
asynchronous HTTP request, please pass async_req=True
- >>> thread = api.create_dashboard_export_request(workspace_id, dashboard_id, async_req=True)
+ >>> thread = api.create_dashboard_export_request(workspace_id, dashboard_id, dashboard_tabular_export_request, async_req=True)
>>> result = thread.get()
Args:
workspace_id (str):
dashboard_id (str):
+ dashboard_tabular_export_request (DashboardTabularExportRequest):
Keyword Args:
_return_http_data_only (bool): response data without head status
@@ -6220,8 +6537,97 @@ def create_dashboard_export_request(
workspace_id
kwargs['dashboard_id'] = \
dashboard_id
+ kwargs['dashboard_tabular_export_request'] = \
+ dashboard_tabular_export_request
return self.create_dashboard_export_request_endpoint.call_with_http_info(**kwargs)
+ def create_image_export(
+ self,
+ workspace_id,
+ image_export_request,
+ **kwargs
+ ):
+ """(EXPERIMENTAL) Create image export request # noqa: E501
+
+ Note: This API is an experimental and is going to change. Please, use it accordingly. An image export job will be created based on the export request and put to queue to be executed. The result of the operation will be an exportResult identifier that will be assembled by the client into a url that can be polled. # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+
+ >>> thread = api.create_image_export(workspace_id, image_export_request, async_req=True)
+ >>> result = thread.get()
+
+ Args:
+ workspace_id (str):
+ image_export_request (ImageExportRequest):
+
+ 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:
+ ExportResponse
+ 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['image_export_request'] = \
+ image_export_request
+ return self.create_image_export_endpoint.call_with_http_info(**kwargs)
+
def create_pdf_export(
self,
workspace_id,
@@ -7352,6 +7758,180 @@ def get_exported_file(
export_id
return self.get_exported_file_endpoint.call_with_http_info(**kwargs)
+ def get_image_export(
+ self,
+ workspace_id,
+ export_id,
+ **kwargs
+ ):
+ """(EXPERIMENTAL) Retrieve exported files # noqa: E501
+
+ Note: This API is an experimental and is going to change. Please, use it accordingly. After clients creates a POST export request, the processing of it will start shortly asynchronously. To retrieve the result, client has to check periodically for the result on this endpoint. In case the result isn't ready yet, the service returns 202. If the result is ready, it returns 200 and octet stream of the result file with provided filename. # 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_image_export(workspace_id, export_id, async_req=True)
+ >>> result = thread.get()
+
+ Args:
+ workspace_id (str):
+ export_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:
+ 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['workspace_id'] = \
+ workspace_id
+ kwargs['export_id'] = \
+ export_id
+ return self.get_image_export_endpoint.call_with_http_info(**kwargs)
+
+ def get_image_export_metadata(
+ self,
+ workspace_id,
+ export_id,
+ **kwargs
+ ):
+ """(EXPERIMENTAL) Retrieve metadata context # noqa: E501
+
+ Note: This API is an experimental and is going to change. Please, use it accordingly. This endpoint serves as a cache for user-defined metadata of the export for the front end UI to retrieve it, if one was created using the POST ../export/image endpoint. The metadata structure is not verified. # 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_image_export_metadata(workspace_id, export_id, async_req=True)
+ >>> result = thread.get()
+
+ Args:
+ workspace_id (str):
+ export_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:
+ 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['workspace_id'] = \
+ workspace_id
+ kwargs['export_id'] = \
+ export_id
+ return self.get_image_export_metadata_endpoint.call_with_http_info(**kwargs)
+
def get_metadata(
self,
workspace_id,
diff --git a/gooddata-api-client/gooddata_api_client/api/image_export_api.py b/gooddata-api-client/gooddata_api_client/api/image_export_api.py
new file mode 100644
index 000000000..3621d5840
--- /dev/null
+++ b/gooddata-api-client/gooddata_api_client/api/image_export_api.py
@@ -0,0 +1,468 @@
+"""
+ 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.export_response import ExportResponse
+from gooddata_api_client.model.get_image_export202_response_inner import GetImageExport202ResponseInner
+from gooddata_api_client.model.image_export_request import ImageExportRequest
+
+
+class ImageExportApi(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.create_image_export_endpoint = _Endpoint(
+ settings={
+ 'response_type': (ExportResponse,),
+ 'auth': [],
+ 'endpoint_path': '/api/v1/actions/workspaces/{workspaceId}/export/image',
+ 'operation_id': 'create_image_export',
+ 'http_method': 'POST',
+ 'servers': None,
+ },
+ params_map={
+ 'all': [
+ 'workspace_id',
+ 'image_export_request',
+ ],
+ 'required': [
+ 'workspace_id',
+ 'image_export_request',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'workspace_id':
+ (str,),
+ 'image_export_request':
+ (ImageExportRequest,),
+ },
+ 'attribute_map': {
+ 'workspace_id': 'workspaceId',
+ },
+ 'location_map': {
+ 'workspace_id': 'path',
+ 'image_export_request': 'body',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/json'
+ ],
+ 'content_type': [
+ 'application/json'
+ ]
+ },
+ api_client=api_client
+ )
+ self.get_image_export_endpoint = _Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [],
+ 'endpoint_path': '/api/v1/actions/workspaces/{workspaceId}/export/image/{exportId}',
+ 'operation_id': 'get_image_export',
+ 'http_method': 'GET',
+ 'servers': None,
+ },
+ params_map={
+ 'all': [
+ 'workspace_id',
+ 'export_id',
+ ],
+ 'required': [
+ 'workspace_id',
+ 'export_id',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'workspace_id':
+ (str,),
+ 'export_id':
+ (str,),
+ },
+ 'attribute_map': {
+ 'workspace_id': 'workspaceId',
+ 'export_id': 'exportId',
+ },
+ 'location_map': {
+ 'workspace_id': 'path',
+ 'export_id': 'path',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'image/png'
+ ],
+ 'content_type': [],
+ },
+ api_client=api_client
+ )
+ self.get_image_export_metadata_endpoint = _Endpoint(
+ settings={
+ 'response_type': None,
+ 'auth': [],
+ 'endpoint_path': '/api/v1/actions/workspaces/{workspaceId}/export/image/{exportId}/metadata',
+ 'operation_id': 'get_image_export_metadata',
+ 'http_method': 'GET',
+ 'servers': None,
+ },
+ params_map={
+ 'all': [
+ 'workspace_id',
+ 'export_id',
+ ],
+ 'required': [
+ 'workspace_id',
+ 'export_id',
+ ],
+ 'nullable': [
+ ],
+ 'enum': [
+ ],
+ 'validation': [
+ ]
+ },
+ root_map={
+ 'validations': {
+ },
+ 'allowed_values': {
+ },
+ 'openapi_types': {
+ 'workspace_id':
+ (str,),
+ 'export_id':
+ (str,),
+ },
+ 'attribute_map': {
+ 'workspace_id': 'workspaceId',
+ 'export_id': 'exportId',
+ },
+ 'location_map': {
+ 'workspace_id': 'path',
+ 'export_id': 'path',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/json'
+ ],
+ 'content_type': [],
+ },
+ api_client=api_client
+ )
+
+ def create_image_export(
+ self,
+ workspace_id,
+ image_export_request,
+ **kwargs
+ ):
+ """(EXPERIMENTAL) Create image export request # noqa: E501
+
+ Note: This API is an experimental and is going to change. Please, use it accordingly. An image export job will be created based on the export request and put to queue to be executed. The result of the operation will be an exportResult identifier that will be assembled by the client into a url that can be polled. # noqa: E501
+ This method makes a synchronous HTTP request by default. To make an
+ asynchronous HTTP request, please pass async_req=True
+
+ >>> thread = api.create_image_export(workspace_id, image_export_request, async_req=True)
+ >>> result = thread.get()
+
+ Args:
+ workspace_id (str):
+ image_export_request (ImageExportRequest):
+
+ 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:
+ ExportResponse
+ 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['image_export_request'] = \
+ image_export_request
+ return self.create_image_export_endpoint.call_with_http_info(**kwargs)
+
+ def get_image_export(
+ self,
+ workspace_id,
+ export_id,
+ **kwargs
+ ):
+ """(EXPERIMENTAL) Retrieve exported files # noqa: E501
+
+ Note: This API is an experimental and is going to change. Please, use it accordingly. After clients creates a POST export request, the processing of it will start shortly asynchronously. To retrieve the result, client has to check periodically for the result on this endpoint. In case the result isn't ready yet, the service returns 202. If the result is ready, it returns 200 and octet stream of the result file with provided filename. # 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_image_export(workspace_id, export_id, async_req=True)
+ >>> result = thread.get()
+
+ Args:
+ workspace_id (str):
+ export_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:
+ 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['workspace_id'] = \
+ workspace_id
+ kwargs['export_id'] = \
+ export_id
+ return self.get_image_export_endpoint.call_with_http_info(**kwargs)
+
+ def get_image_export_metadata(
+ self,
+ workspace_id,
+ export_id,
+ **kwargs
+ ):
+ """(EXPERIMENTAL) Retrieve metadata context # noqa: E501
+
+ Note: This API is an experimental and is going to change. Please, use it accordingly. This endpoint serves as a cache for user-defined metadata of the export for the front end UI to retrieve it, if one was created using the POST ../export/image endpoint. The metadata structure is not verified. # 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_image_export_metadata(workspace_id, export_id, async_req=True)
+ >>> result = thread.get()
+
+ Args:
+ workspace_id (str):
+ export_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:
+ 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['workspace_id'] = \
+ workspace_id
+ kwargs['export_id'] = \
+ export_id
+ return self.get_image_export_metadata_endpoint.call_with_http_info(**kwargs)
+
diff --git a/gooddata-api-client/gooddata_api_client/api/slides_export_api.py b/gooddata-api-client/gooddata_api_client/api/slides_export_api.py
index 34f0bb56b..e789983fc 100644
--- a/gooddata-api-client/gooddata_api_client/api/slides_export_api.py
+++ b/gooddata-api-client/gooddata_api_client/api/slides_export_api.py
@@ -23,7 +23,7 @@
validate_and_convert_types
)
from gooddata_api_client.model.export_response import ExportResponse
-from gooddata_api_client.model.get_slides_export202_response_inner import GetSlidesExport202ResponseInner
+from gooddata_api_client.model.get_image_export202_response_inner import GetImageExport202ResponseInner
from gooddata_api_client.model.slides_export_request import SlidesExportRequest
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 882efcbea..d088405b5 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
@@ -28,6 +28,7 @@
from gooddata_api_client.model.chat_history_result import ChatHistoryResult
from gooddata_api_client.model.chat_request import ChatRequest
from gooddata_api_client.model.chat_result import ChatResult
+from gooddata_api_client.model.chat_usage_response import ChatUsageResponse
from gooddata_api_client.model.clustering_request import ClusteringRequest
from gooddata_api_client.model.clustering_result import ClusteringResult
from gooddata_api_client.model.forecast_request import ForecastRequest
@@ -237,6 +238,62 @@ def __init__(self, api_client=None):
},
api_client=api_client
)
+ self.ai_chat_usage_endpoint = _Endpoint(
+ settings={
+ 'response_type': (ChatUsageResponse,),
+ 'auth': [],
+ 'endpoint_path': '/api/v1/actions/workspaces/{workspaceId}/ai/chatUsage',
+ 'operation_id': 'ai_chat_usage',
+ 'http_method': 'GET',
+ 'servers': None,
+ },
+ params_map={
+ 'all': [
+ 'workspace_id',
+ ],
+ 'required': [
+ 'workspace_id',
+ ],
+ '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,),
+ },
+ 'attribute_map': {
+ 'workspace_id': 'workspaceId',
+ },
+ 'location_map': {
+ 'workspace_id': 'path',
+ },
+ 'collection_format_map': {
+ }
+ },
+ headers_map={
+ 'accept': [
+ 'application/json'
+ ],
+ 'content_type': [],
+ },
+ api_client=api_client
+ )
self.ai_search_endpoint = _Endpoint(
settings={
'response_type': (SearchResult,),
@@ -1000,6 +1057,89 @@ def ai_chat_stream(
chat_request
return self.ai_chat_stream_endpoint.call_with_http_info(**kwargs)
+ def ai_chat_usage(
+ self,
+ workspace_id,
+ **kwargs
+ ):
+ """Get Chat Usage # noqa: E501
+
+ Returns usage statistics of chat for a user in a workspace. # 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_usage(workspace_id, async_req=True)
+ >>> result = thread.get()
+
+ Args:
+ workspace_id (str): Workspace identifier
+
+ 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:
+ ChatUsageResponse
+ 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
+ return self.ai_chat_usage_endpoint.call_with_http_info(**kwargs)
+
def ai_search(
self,
workspace_id,
diff --git a/gooddata-api-client/gooddata_api_client/api/tabular_export_api.py b/gooddata-api-client/gooddata_api_client/api/tabular_export_api.py
index a8ea7f370..1c0097ad3 100644
--- a/gooddata-api-client/gooddata_api_client/api/tabular_export_api.py
+++ b/gooddata-api-client/gooddata_api_client/api/tabular_export_api.py
@@ -22,6 +22,7 @@
none_type,
validate_and_convert_types
)
+from gooddata_api_client.model.dashboard_tabular_export_request import DashboardTabularExportRequest
from gooddata_api_client.model.export_response import ExportResponse
from gooddata_api_client.model.tabular_export_request import TabularExportRequest
@@ -50,10 +51,12 @@ def __init__(self, api_client=None):
'all': [
'workspace_id',
'dashboard_id',
+ 'dashboard_tabular_export_request',
],
'required': [
'workspace_id',
'dashboard_id',
+ 'dashboard_tabular_export_request',
],
'nullable': [
],
@@ -72,6 +75,8 @@ def __init__(self, api_client=None):
(str,),
'dashboard_id':
(str,),
+ 'dashboard_tabular_export_request':
+ (DashboardTabularExportRequest,),
},
'attribute_map': {
'workspace_id': 'workspaceId',
@@ -80,6 +85,7 @@ def __init__(self, api_client=None):
'location_map': {
'workspace_id': 'path',
'dashboard_id': 'path',
+ 'dashboard_tabular_export_request': 'body',
},
'collection_format_map': {
}
@@ -88,7 +94,9 @@ def __init__(self, api_client=None):
'accept': [
'application/json'
],
- 'content_type': [],
+ 'content_type': [
+ 'application/json'
+ ]
},
api_client=api_client
)
@@ -211,6 +219,7 @@ def create_dashboard_export_request(
self,
workspace_id,
dashboard_id,
+ dashboard_tabular_export_request,
**kwargs
):
"""(EXPERIMENTAL) Create dashboard tabular export request # noqa: E501
@@ -219,12 +228,13 @@ def create_dashboard_export_request(
This method makes a synchronous HTTP request by default. To make an
asynchronous HTTP request, please pass async_req=True
- >>> thread = api.create_dashboard_export_request(workspace_id, dashboard_id, async_req=True)
+ >>> thread = api.create_dashboard_export_request(workspace_id, dashboard_id, dashboard_tabular_export_request, async_req=True)
>>> result = thread.get()
Args:
workspace_id (str):
dashboard_id (str):
+ dashboard_tabular_export_request (DashboardTabularExportRequest):
Keyword Args:
_return_http_data_only (bool): response data without head status
@@ -292,6 +302,8 @@ def create_dashboard_export_request(
workspace_id
kwargs['dashboard_id'] = \
dashboard_id
+ kwargs['dashboard_tabular_export_request'] = \
+ dashboard_tabular_export_request
return self.create_dashboard_export_request_endpoint.call_with_http_info(**kwargs)
def create_tabular_export(
diff --git a/gooddata-api-client/gooddata_api_client/apis/__init__.py b/gooddata-api-client/gooddata_api_client/apis/__init__.py
index 816f9bd5e..687fefdab 100644
--- a/gooddata-api-client/gooddata_api_client/apis/__init__.py
+++ b/gooddata-api-client/gooddata_api_client/apis/__init__.py
@@ -39,6 +39,7 @@
from gooddata_api_client.api.generate_logical_data_model_api import GenerateLogicalDataModelApi
from gooddata_api_client.api.hierarchy_api import HierarchyApi
from gooddata_api_client.api.identity_providers_api import IdentityProvidersApi
+from gooddata_api_client.api.image_export_api import ImageExportApi
from gooddata_api_client.api.invalidate_cache_api import InvalidateCacheApi
from gooddata_api_client.api.jwks_api import JWKSApi
from gooddata_api_client.api.ldm_declarative_apis_api import LDMDeclarativeAPIsApi
diff --git a/gooddata-api-client/gooddata_api_client/model/ad_hoc_automation.py b/gooddata-api-client/gooddata_api_client/model/ad_hoc_automation.py
index 443e93901..54af7c59b 100644
--- a/gooddata-api-client/gooddata_api_client/model/ad_hoc_automation.py
+++ b/gooddata-api-client/gooddata_api_client/model/ad_hoc_automation.py
@@ -31,14 +31,18 @@
def lazy_import():
+ from gooddata_api_client.model.automation_alert import AutomationAlert
from gooddata_api_client.model.automation_external_recipient import AutomationExternalRecipient
+ from gooddata_api_client.model.automation_image_export import AutomationImageExport
from gooddata_api_client.model.automation_metadata import AutomationMetadata
from gooddata_api_client.model.automation_tabular_export import AutomationTabularExport
from gooddata_api_client.model.automation_visual_export import AutomationVisualExport
from gooddata_api_client.model.declarative_analytical_dashboard_identifier import DeclarativeAnalyticalDashboardIdentifier
from gooddata_api_client.model.declarative_notification_channel_identifier import DeclarativeNotificationChannelIdentifier
from gooddata_api_client.model.declarative_user_identifier import DeclarativeUserIdentifier
+ globals()['AutomationAlert'] = AutomationAlert
globals()['AutomationExternalRecipient'] = AutomationExternalRecipient
+ globals()['AutomationImageExport'] = AutomationImageExport
globals()['AutomationMetadata'] = AutomationMetadata
globals()['AutomationTabularExport'] = AutomationTabularExport
globals()['AutomationVisualExport'] = AutomationVisualExport
@@ -82,6 +86,8 @@ class AdHocAutomation(ModelNormal):
},
('external_recipients',): {
},
+ ('image_exports',): {
+ },
('recipients',): {
},
('tabular_exports',): {
@@ -118,10 +124,12 @@ def openapi_types():
"""
lazy_import()
return {
+ 'alert': (AutomationAlert,), # noqa: E501
'analytical_dashboard': (DeclarativeAnalyticalDashboardIdentifier,), # noqa: E501
'description': (str,), # noqa: E501
'details': ({str: (str,)},), # noqa: E501
'external_recipients': ([AutomationExternalRecipient],), # noqa: E501
+ 'image_exports': ([AutomationImageExport],), # noqa: E501
'metadata': (AutomationMetadata,), # noqa: E501
'notification_channel': (DeclarativeNotificationChannelIdentifier,), # noqa: E501
'recipients': ([DeclarativeUserIdentifier],), # noqa: E501
@@ -137,10 +145,12 @@ def discriminator():
attribute_map = {
+ 'alert': 'alert', # noqa: E501
'analytical_dashboard': 'analyticalDashboard', # noqa: E501
'description': 'description', # noqa: E501
'details': 'details', # noqa: E501
'external_recipients': 'externalRecipients', # noqa: E501
+ 'image_exports': 'imageExports', # noqa: E501
'metadata': 'metadata', # noqa: E501
'notification_channel': 'notificationChannel', # noqa: E501
'recipients': 'recipients', # noqa: E501
@@ -191,10 +201,12 @@ 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,)
+ alert (AutomationAlert): [optional] # noqa: E501
analytical_dashboard (DeclarativeAnalyticalDashboardIdentifier): [optional] # noqa: E501
description (str): [optional] # noqa: E501
details ({str: (str,)}): Additional details to be included in the automated message.. [optional] # noqa: E501
external_recipients ([AutomationExternalRecipient]): External recipients of the automation action results.. [optional] # noqa: E501
+ image_exports ([AutomationImageExport]): [optional] # noqa: E501
metadata (AutomationMetadata): [optional] # noqa: E501
notification_channel (DeclarativeNotificationChannelIdentifier): [optional] # noqa: E501
recipients ([DeclarativeUserIdentifier]): [optional] # noqa: E501
@@ -287,10 +299,12 @@ 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,)
+ alert (AutomationAlert): [optional] # noqa: E501
analytical_dashboard (DeclarativeAnalyticalDashboardIdentifier): [optional] # noqa: E501
description (str): [optional] # noqa: E501
details ({str: (str,)}): Additional details to be included in the automated message.. [optional] # noqa: E501
external_recipients ([AutomationExternalRecipient]): External recipients of the automation action results.. [optional] # noqa: E501
+ image_exports ([AutomationImageExport]): [optional] # noqa: E501
metadata (AutomationMetadata): [optional] # noqa: E501
notification_channel (DeclarativeNotificationChannelIdentifier): [optional] # noqa: E501
recipients ([DeclarativeUserIdentifier]): [optional] # noqa: E501
diff --git a/gooddata-api-client/gooddata_api_client/model/attribute_filter_by_date.py b/gooddata-api-client/gooddata_api_client/model/attribute_filter_by_date.py
new file mode 100644
index 000000000..33d155c5c
--- /dev/null
+++ b/gooddata-api-client/gooddata_api_client/model/attribute_filter_by_date.py
@@ -0,0 +1,276 @@
+"""
+ 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.model_utils import ( # noqa: F401
+ ApiTypeError,
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ cached_property,
+ change_keys_js_to_python,
+ convert_js_args_to_python_args,
+ date,
+ datetime,
+ file_type,
+ none_type,
+ validate_get_composed_info,
+ OpenApiModel
+)
+from gooddata_api_client.exceptions import ApiAttributeError
+
+
+
+class AttributeFilterByDate(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ @cached_property
+ 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
+ """
+ return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501
+
+ _nullable = False
+
+ @cached_property
+ def openapi_types():
+ """
+ This must be a method because a model may have properties that are
+ of type self, this must run after the class is loaded
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'filter_local_identifier': (str,), # noqa: E501
+ 'is_common_date': (bool,), # noqa: E501
+ }
+
+ @cached_property
+ def discriminator():
+ return None
+
+
+ attribute_map = {
+ 'filter_local_identifier': 'filterLocalIdentifier', # noqa: E501
+ 'is_common_date': 'isCommonDate', # noqa: E501
+ }
+
+ read_only_vars = {
+ }
+
+ _composed_schemas = {}
+
+ @classmethod
+ @convert_js_args_to_python_args
+ def _from_openapi_data(cls, filter_local_identifier, is_common_date, *args, **kwargs): # noqa: E501
+ """AttributeFilterByDate - a model defined in OpenAPI
+
+ Args:
+ filter_local_identifier (str):
+ is_common_date (bool):
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ """
+
+ _check_type = kwargs.pop('_check_type', True)
+ _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', ())
+
+ self = super(OpenApiModel, cls).__new__(cls)
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.filter_local_identifier = filter_local_identifier
+ self.is_common_date = is_common_date
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ self.additional_properties_type is None:
+ # discard variable.
+ continue
+ setattr(self, var_name, var_value)
+ return self
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_spec_property_naming',
+ '_path_to_item',
+ '_configuration',
+ '_visited_composed_classes',
+ ])
+
+ @convert_js_args_to_python_args
+ def __init__(self, filter_local_identifier, is_common_date, *args, **kwargs): # noqa: E501
+ """AttributeFilterByDate - a model defined in OpenAPI
+
+ Args:
+ filter_local_identifier (str):
+ is_common_date (bool):
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ """
+
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.filter_local_identifier = filter_local_identifier
+ self.is_common_date = is_common_date
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ 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.")
diff --git a/gooddata-api-client/gooddata_api_client/model/attribute_filter_parent.py b/gooddata-api-client/gooddata_api_client/model/attribute_filter_parent.py
new file mode 100644
index 000000000..9b069ce24
--- /dev/null
+++ b/gooddata-api-client/gooddata_api_client/model/attribute_filter_parent.py
@@ -0,0 +1,282 @@
+"""
+ 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.model_utils import ( # noqa: F401
+ ApiTypeError,
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ cached_property,
+ change_keys_js_to_python,
+ convert_js_args_to_python_args,
+ date,
+ datetime,
+ file_type,
+ none_type,
+ validate_get_composed_info,
+ OpenApiModel
+)
+from gooddata_api_client.exceptions import ApiAttributeError
+
+
+def lazy_import():
+ from gooddata_api_client.model.over import Over
+ globals()['Over'] = Over
+
+
+class AttributeFilterParent(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ @cached_property
+ 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
+
+ @cached_property
+ def openapi_types():
+ """
+ This must be a method because a model may have properties that are
+ of type self, this must run after the class is loaded
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ lazy_import()
+ return {
+ 'filter_local_identifier': (str,), # noqa: E501
+ 'over': (Over,), # noqa: E501
+ }
+
+ @cached_property
+ def discriminator():
+ return None
+
+
+ attribute_map = {
+ 'filter_local_identifier': 'filterLocalIdentifier', # noqa: E501
+ 'over': 'over', # noqa: E501
+ }
+
+ read_only_vars = {
+ }
+
+ _composed_schemas = {}
+
+ @classmethod
+ @convert_js_args_to_python_args
+ def _from_openapi_data(cls, filter_local_identifier, over, *args, **kwargs): # noqa: E501
+ """AttributeFilterParent - a model defined in OpenAPI
+
+ Args:
+ filter_local_identifier (str):
+ over (Over):
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ """
+
+ _check_type = kwargs.pop('_check_type', True)
+ _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', ())
+
+ self = super(OpenApiModel, cls).__new__(cls)
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.filter_local_identifier = filter_local_identifier
+ self.over = over
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ self.additional_properties_type is None:
+ # discard variable.
+ continue
+ setattr(self, var_name, var_value)
+ return self
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_spec_property_naming',
+ '_path_to_item',
+ '_configuration',
+ '_visited_composed_classes',
+ ])
+
+ @convert_js_args_to_python_args
+ def __init__(self, filter_local_identifier, over, *args, **kwargs): # noqa: E501
+ """AttributeFilterParent - a model defined in OpenAPI
+
+ Args:
+ filter_local_identifier (str):
+ over (Over):
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ """
+
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.filter_local_identifier = filter_local_identifier
+ self.over = over
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ 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.")
diff --git a/gooddata-api-client/gooddata_api_client/model/automation_image_export.py b/gooddata-api-client/gooddata_api_client/model/automation_image_export.py
new file mode 100644
index 000000000..56f80eeca
--- /dev/null
+++ b/gooddata-api-client/gooddata_api_client/model/automation_image_export.py
@@ -0,0 +1,276 @@
+"""
+ 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.model_utils import ( # noqa: F401
+ ApiTypeError,
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ cached_property,
+ change_keys_js_to_python,
+ convert_js_args_to_python_args,
+ date,
+ datetime,
+ file_type,
+ none_type,
+ validate_get_composed_info,
+ OpenApiModel
+)
+from gooddata_api_client.exceptions import ApiAttributeError
+
+
+def lazy_import():
+ from gooddata_api_client.model.image_export_request import ImageExportRequest
+ globals()['ImageExportRequest'] = ImageExportRequest
+
+
+class AutomationImageExport(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ @cached_property
+ 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
+
+ @cached_property
+ def openapi_types():
+ """
+ This must be a method because a model may have properties that are
+ of type self, this must run after the class is loaded
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ lazy_import()
+ return {
+ 'request_payload': (ImageExportRequest,), # noqa: E501
+ }
+
+ @cached_property
+ def discriminator():
+ return None
+
+
+ attribute_map = {
+ 'request_payload': 'requestPayload', # noqa: E501
+ }
+
+ read_only_vars = {
+ }
+
+ _composed_schemas = {}
+
+ @classmethod
+ @convert_js_args_to_python_args
+ def _from_openapi_data(cls, request_payload, *args, **kwargs): # noqa: E501
+ """AutomationImageExport - a model defined in OpenAPI
+
+ Args:
+ request_payload (ImageExportRequest):
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ """
+
+ _check_type = kwargs.pop('_check_type', True)
+ _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', ())
+
+ self = super(OpenApiModel, cls).__new__(cls)
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.request_payload = request_payload
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ self.additional_properties_type is None:
+ # discard variable.
+ continue
+ setattr(self, var_name, var_value)
+ return self
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_spec_property_naming',
+ '_path_to_item',
+ '_configuration',
+ '_visited_composed_classes',
+ ])
+
+ @convert_js_args_to_python_args
+ def __init__(self, request_payload, *args, **kwargs): # noqa: E501
+ """AutomationImageExport - a model defined in OpenAPI
+
+ Args:
+ request_payload (ImageExportRequest):
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ """
+
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.request_payload = request_payload
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ 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.")
diff --git a/gooddata-api-client/gooddata_api_client/model/chat_usage_response.py b/gooddata-api-client/gooddata_api_client/model/chat_usage_response.py
new file mode 100644
index 000000000..0ce9830a6
--- /dev/null
+++ b/gooddata-api-client/gooddata_api_client/model/chat_usage_response.py
@@ -0,0 +1,276 @@
+"""
+ 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.model_utils import ( # noqa: F401
+ ApiTypeError,
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ cached_property,
+ change_keys_js_to_python,
+ convert_js_args_to_python_args,
+ date,
+ datetime,
+ file_type,
+ none_type,
+ validate_get_composed_info,
+ OpenApiModel
+)
+from gooddata_api_client.exceptions import ApiAttributeError
+
+
+
+class ChatUsageResponse(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ @cached_property
+ 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
+ """
+ return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501
+
+ _nullable = False
+
+ @cached_property
+ def openapi_types():
+ """
+ This must be a method because a model may have properties that are
+ of type self, this must run after the class is loaded
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'interaction_count': (int,), # noqa: E501
+ 'time_window_hours': (int,), # noqa: E501
+ }
+
+ @cached_property
+ def discriminator():
+ return None
+
+
+ attribute_map = {
+ 'interaction_count': 'interactionCount', # noqa: E501
+ 'time_window_hours': 'timeWindowHours', # noqa: E501
+ }
+
+ read_only_vars = {
+ }
+
+ _composed_schemas = {}
+
+ @classmethod
+ @convert_js_args_to_python_args
+ def _from_openapi_data(cls, interaction_count, time_window_hours, *args, **kwargs): # noqa: E501
+ """ChatUsageResponse - a model defined in OpenAPI
+
+ Args:
+ interaction_count (int): Number of interactions in the time window
+ time_window_hours (int): Time window in hours
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ """
+
+ _check_type = kwargs.pop('_check_type', True)
+ _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', ())
+
+ self = super(OpenApiModel, cls).__new__(cls)
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.interaction_count = interaction_count
+ self.time_window_hours = time_window_hours
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ self.additional_properties_type is None:
+ # discard variable.
+ continue
+ setattr(self, var_name, var_value)
+ return self
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_spec_property_naming',
+ '_path_to_item',
+ '_configuration',
+ '_visited_composed_classes',
+ ])
+
+ @convert_js_args_to_python_args
+ def __init__(self, interaction_count, time_window_hours, *args, **kwargs): # noqa: E501
+ """ChatUsageResponse - a model defined in OpenAPI
+
+ Args:
+ interaction_count (int): Number of interactions in the time window
+ time_window_hours (int): Time window in hours
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ """
+
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.interaction_count = interaction_count
+ self.time_window_hours = time_window_hours
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ 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.")
diff --git a/gooddata-api-client/gooddata_api_client/model/dashboard_attribute_filter.py b/gooddata-api-client/gooddata_api_client/model/dashboard_attribute_filter.py
new file mode 100644
index 000000000..e98689381
--- /dev/null
+++ b/gooddata-api-client/gooddata_api_client/model/dashboard_attribute_filter.py
@@ -0,0 +1,276 @@
+"""
+ 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.model_utils import ( # noqa: F401
+ ApiTypeError,
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ cached_property,
+ change_keys_js_to_python,
+ convert_js_args_to_python_args,
+ date,
+ datetime,
+ file_type,
+ none_type,
+ validate_get_composed_info,
+ OpenApiModel
+)
+from gooddata_api_client.exceptions import ApiAttributeError
+
+
+def lazy_import():
+ from gooddata_api_client.model.dashboard_attribute_filter_attribute_filter import DashboardAttributeFilterAttributeFilter
+ globals()['DashboardAttributeFilterAttributeFilter'] = DashboardAttributeFilterAttributeFilter
+
+
+class DashboardAttributeFilter(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ @cached_property
+ 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
+
+ @cached_property
+ def openapi_types():
+ """
+ This must be a method because a model may have properties that are
+ of type self, this must run after the class is loaded
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ lazy_import()
+ return {
+ 'attribute_filter': (DashboardAttributeFilterAttributeFilter,), # noqa: E501
+ }
+
+ @cached_property
+ def discriminator():
+ return None
+
+
+ attribute_map = {
+ 'attribute_filter': 'attributeFilter', # noqa: E501
+ }
+
+ read_only_vars = {
+ }
+
+ _composed_schemas = {}
+
+ @classmethod
+ @convert_js_args_to_python_args
+ def _from_openapi_data(cls, attribute_filter, *args, **kwargs): # noqa: E501
+ """DashboardAttributeFilter - a model defined in OpenAPI
+
+ Args:
+ attribute_filter (DashboardAttributeFilterAttributeFilter):
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ """
+
+ _check_type = kwargs.pop('_check_type', True)
+ _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', ())
+
+ self = super(OpenApiModel, cls).__new__(cls)
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.attribute_filter = attribute_filter
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ self.additional_properties_type is None:
+ # discard variable.
+ continue
+ setattr(self, var_name, var_value)
+ return self
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_spec_property_naming',
+ '_path_to_item',
+ '_configuration',
+ '_visited_composed_classes',
+ ])
+
+ @convert_js_args_to_python_args
+ def __init__(self, attribute_filter, *args, **kwargs): # noqa: E501
+ """DashboardAttributeFilter - a model defined in OpenAPI
+
+ Args:
+ attribute_filter (DashboardAttributeFilterAttributeFilter):
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ """
+
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.attribute_filter = attribute_filter
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ 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.")
diff --git a/gooddata-api-client/gooddata_api_client/model/dashboard_attribute_filter_attribute_filter.py b/gooddata-api-client/gooddata_api_client/model/dashboard_attribute_filter_attribute_filter.py
new file mode 100644
index 000000000..276245397
--- /dev/null
+++ b/gooddata-api-client/gooddata_api_client/model/dashboard_attribute_filter_attribute_filter.py
@@ -0,0 +1,363 @@
+"""
+ 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.model_utils import ( # noqa: F401
+ ApiTypeError,
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ cached_property,
+ change_keys_js_to_python,
+ convert_js_args_to_python_args,
+ date,
+ datetime,
+ file_type,
+ none_type,
+ validate_get_composed_info,
+ OpenApiModel
+)
+from gooddata_api_client.exceptions import ApiAttributeError
+
+
+def lazy_import():
+ from gooddata_api_client.model.attribute_filter_by_date import AttributeFilterByDate
+ from gooddata_api_client.model.attribute_filter_parent import AttributeFilterParent
+ from gooddata_api_client.model.dashboard_attribute_filter_attribute_filter_all_of import DashboardAttributeFilterAttributeFilterAllOf
+ from gooddata_api_client.model.dashboard_filter import DashboardFilter
+ globals()['AttributeFilterByDate'] = AttributeFilterByDate
+ globals()['AttributeFilterParent'] = AttributeFilterParent
+ globals()['DashboardAttributeFilterAttributeFilterAllOf'] = DashboardAttributeFilterAttributeFilterAllOf
+ globals()['DashboardFilter'] = DashboardFilter
+
+
+class DashboardAttributeFilterAttributeFilter(ModelComposed):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ ('selection_mode',): {
+ 'SINGLE': "single",
+ 'MULTI': "multi",
+ },
+ }
+
+ validations = {
+ }
+
+ @cached_property
+ 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
+
+ @cached_property
+ def openapi_types():
+ """
+ This must be a method because a model may have properties that are
+ of type self, this must run after the class is loaded
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ lazy_import()
+ return {
+ 'attribute_elements': ({str: (bool, date, datetime, dict, float, int, list, str, none_type)},), # noqa: E501
+ 'display_form': (str,), # noqa: E501
+ 'negative_selection': (bool,), # noqa: E501
+ 'local_identifier': (str,), # noqa: E501
+ 'filter_elements_by': ([AttributeFilterParent],), # noqa: E501
+ 'filter_elements_by_date': ([AttributeFilterByDate],), # noqa: E501
+ 'selection_mode': (str,), # noqa: E501
+ 'title': (str,), # noqa: E501
+ 'validate_elements_by': ([str],), # noqa: E501
+ }
+
+ @cached_property
+ def discriminator():
+ return None
+
+
+ attribute_map = {
+ 'attribute_elements': 'attributeElements', # noqa: E501
+ 'display_form': 'displayForm', # noqa: E501
+ 'negative_selection': 'negativeSelection', # noqa: E501
+ 'local_identifier': 'localIdentifier', # noqa: E501
+ 'filter_elements_by': 'filterElementsBy', # noqa: E501
+ 'filter_elements_by_date': 'filterElementsByDate', # noqa: E501
+ 'selection_mode': 'selectionMode', # noqa: E501
+ 'title': 'title', # noqa: E501
+ 'validate_elements_by': 'validateElementsBy', # noqa: E501
+ }
+
+ read_only_vars = {
+ }
+
+ @classmethod
+ @convert_js_args_to_python_args
+ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501
+ """DashboardAttributeFilterAttributeFilter - a model defined in OpenAPI
+
+ Keyword Args:
+ attribute_elements ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}):
+ display_form (str):
+ negative_selection (bool):
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ local_identifier (str): [optional] # noqa: E501
+ filter_elements_by ([AttributeFilterParent]): [optional] # noqa: E501
+ filter_elements_by_date ([AttributeFilterByDate]): [optional] # noqa: E501
+ selection_mode (str): [optional] # noqa: E501
+ title (str): [optional] # noqa: E501
+ validate_elements_by ([str]): [optional] # noqa: E501
+ """
+
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ self = super(OpenApiModel, cls).__new__(cls)
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ 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 in discarded_args and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ self._additional_properties_model_instances:
+ # discard variable.
+ continue
+ setattr(self, var_name, var_value)
+
+ return self
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_spec_property_naming',
+ '_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
+ """DashboardAttributeFilterAttributeFilter - a model defined in OpenAPI
+
+ Keyword Args:
+ attribute_elements ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}):
+ display_form (str):
+ negative_selection (bool):
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ local_identifier (str): [optional] # noqa: E501
+ filter_elements_by ([AttributeFilterParent]): [optional] # noqa: E501
+ filter_elements_by_date ([AttributeFilterByDate]): [optional] # noqa: E501
+ selection_mode (str): [optional] # noqa: E501
+ title (str): [optional] # noqa: E501
+ validate_elements_by ([str]): [optional] # noqa: E501
+ """
+
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ 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 in discarded_args and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ 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': [
+ DashboardAttributeFilterAttributeFilterAllOf,
+ DashboardFilter,
+ ],
+ 'oneOf': [
+ ],
+ }
diff --git a/gooddata-api-client/gooddata_api_client/model/dashboard_attribute_filter_attribute_filter_all_of.py b/gooddata-api-client/gooddata_api_client/model/dashboard_attribute_filter_attribute_filter_all_of.py
new file mode 100644
index 000000000..779239857
--- /dev/null
+++ b/gooddata-api-client/gooddata_api_client/model/dashboard_attribute_filter_attribute_filter_all_of.py
@@ -0,0 +1,304 @@
+"""
+ 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.model_utils import ( # noqa: F401
+ ApiTypeError,
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ cached_property,
+ change_keys_js_to_python,
+ convert_js_args_to_python_args,
+ date,
+ datetime,
+ file_type,
+ none_type,
+ validate_get_composed_info,
+ OpenApiModel
+)
+from gooddata_api_client.exceptions import ApiAttributeError
+
+
+def lazy_import():
+ from gooddata_api_client.model.attribute_filter_by_date import AttributeFilterByDate
+ from gooddata_api_client.model.attribute_filter_parent import AttributeFilterParent
+ globals()['AttributeFilterByDate'] = AttributeFilterByDate
+ globals()['AttributeFilterParent'] = AttributeFilterParent
+
+
+class DashboardAttributeFilterAttributeFilterAllOf(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ ('selection_mode',): {
+ 'SINGLE': "single",
+ 'MULTI': "multi",
+ },
+ }
+
+ validations = {
+ }
+
+ @cached_property
+ 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
+
+ @cached_property
+ def openapi_types():
+ """
+ This must be a method because a model may have properties that are
+ of type self, this must run after the class is loaded
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ lazy_import()
+ return {
+ 'attribute_elements': ({str: (bool, date, datetime, dict, float, int, list, str, none_type)},), # noqa: E501
+ 'display_form': (str,), # noqa: E501
+ 'filter_elements_by': ([AttributeFilterParent],), # noqa: E501
+ 'filter_elements_by_date': ([AttributeFilterByDate],), # noqa: E501
+ 'negative_selection': (bool,), # noqa: E501
+ 'selection_mode': (str,), # noqa: E501
+ 'title': (str,), # noqa: E501
+ 'validate_elements_by': ([str],), # noqa: E501
+ }
+
+ @cached_property
+ def discriminator():
+ return None
+
+
+ attribute_map = {
+ 'attribute_elements': 'attributeElements', # noqa: E501
+ 'display_form': 'displayForm', # noqa: E501
+ 'filter_elements_by': 'filterElementsBy', # noqa: E501
+ 'filter_elements_by_date': 'filterElementsByDate', # noqa: E501
+ 'negative_selection': 'negativeSelection', # noqa: E501
+ 'selection_mode': 'selectionMode', # noqa: E501
+ 'title': 'title', # noqa: E501
+ 'validate_elements_by': 'validateElementsBy', # noqa: E501
+ }
+
+ read_only_vars = {
+ }
+
+ _composed_schemas = {}
+
+ @classmethod
+ @convert_js_args_to_python_args
+ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501
+ """DashboardAttributeFilterAttributeFilterAllOf - a model defined in OpenAPI
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ attribute_elements ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}): [optional] # noqa: E501
+ display_form (str): [optional] # noqa: E501
+ filter_elements_by ([AttributeFilterParent]): [optional] # noqa: E501
+ filter_elements_by_date ([AttributeFilterByDate]): [optional] # noqa: E501
+ negative_selection (bool): [optional] # noqa: E501
+ selection_mode (str): [optional] # noqa: E501
+ title (str): [optional] # noqa: E501
+ validate_elements_by ([str]): [optional] # noqa: E501
+ """
+
+ _check_type = kwargs.pop('_check_type', True)
+ _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', ())
+
+ self = super(OpenApiModel, cls).__new__(cls)
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ self.additional_properties_type is None:
+ # discard variable.
+ continue
+ setattr(self, var_name, var_value)
+ return self
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_spec_property_naming',
+ '_path_to_item',
+ '_configuration',
+ '_visited_composed_classes',
+ ])
+
+ @convert_js_args_to_python_args
+ def __init__(self, *args, **kwargs): # noqa: E501
+ """DashboardAttributeFilterAttributeFilterAllOf - a model defined in OpenAPI
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ attribute_elements ({str: (bool, date, datetime, dict, float, int, list, str, none_type)}): [optional] # noqa: E501
+ display_form (str): [optional] # noqa: E501
+ filter_elements_by ([AttributeFilterParent]): [optional] # noqa: E501
+ filter_elements_by_date ([AttributeFilterByDate]): [optional] # noqa: E501
+ negative_selection (bool): [optional] # noqa: E501
+ selection_mode (str): [optional] # noqa: E501
+ title (str): [optional] # noqa: E501
+ validate_elements_by ([str]): [optional] # noqa: E501
+ """
+
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ 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.")
diff --git a/gooddata-api-client/gooddata_api_client/model/dashboard_date_filter.py b/gooddata-api-client/gooddata_api_client/model/dashboard_date_filter.py
new file mode 100644
index 000000000..078831bb2
--- /dev/null
+++ b/gooddata-api-client/gooddata_api_client/model/dashboard_date_filter.py
@@ -0,0 +1,276 @@
+"""
+ 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.model_utils import ( # noqa: F401
+ ApiTypeError,
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ cached_property,
+ change_keys_js_to_python,
+ convert_js_args_to_python_args,
+ date,
+ datetime,
+ file_type,
+ none_type,
+ validate_get_composed_info,
+ OpenApiModel
+)
+from gooddata_api_client.exceptions import ApiAttributeError
+
+
+def lazy_import():
+ from gooddata_api_client.model.dashboard_date_filter_date_filter import DashboardDateFilterDateFilter
+ globals()['DashboardDateFilterDateFilter'] = DashboardDateFilterDateFilter
+
+
+class DashboardDateFilter(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ @cached_property
+ 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
+
+ @cached_property
+ def openapi_types():
+ """
+ This must be a method because a model may have properties that are
+ of type self, this must run after the class is loaded
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ lazy_import()
+ return {
+ 'date_filter': (DashboardDateFilterDateFilter,), # noqa: E501
+ }
+
+ @cached_property
+ def discriminator():
+ return None
+
+
+ attribute_map = {
+ 'date_filter': 'dateFilter', # noqa: E501
+ }
+
+ read_only_vars = {
+ }
+
+ _composed_schemas = {}
+
+ @classmethod
+ @convert_js_args_to_python_args
+ def _from_openapi_data(cls, date_filter, *args, **kwargs): # noqa: E501
+ """DashboardDateFilter - a model defined in OpenAPI
+
+ Args:
+ date_filter (DashboardDateFilterDateFilter):
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ """
+
+ _check_type = kwargs.pop('_check_type', True)
+ _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', ())
+
+ self = super(OpenApiModel, cls).__new__(cls)
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.date_filter = date_filter
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ self.additional_properties_type is None:
+ # discard variable.
+ continue
+ setattr(self, var_name, var_value)
+ return self
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_spec_property_naming',
+ '_path_to_item',
+ '_configuration',
+ '_visited_composed_classes',
+ ])
+
+ @convert_js_args_to_python_args
+ def __init__(self, date_filter, *args, **kwargs): # noqa: E501
+ """DashboardDateFilter - a model defined in OpenAPI
+
+ Args:
+ date_filter (DashboardDateFilterDateFilter):
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ """
+
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.date_filter = date_filter
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ 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.")
diff --git a/gooddata-api-client/gooddata_api_client/model/dashboard_date_filter_date_filter.py b/gooddata-api-client/gooddata_api_client/model/dashboard_date_filter_date_filter.py
new file mode 100644
index 000000000..23e7ec84e
--- /dev/null
+++ b/gooddata-api-client/gooddata_api_client/model/dashboard_date_filter_date_filter.py
@@ -0,0 +1,376 @@
+"""
+ 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.model_utils import ( # noqa: F401
+ ApiTypeError,
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ cached_property,
+ change_keys_js_to_python,
+ convert_js_args_to_python_args,
+ date,
+ datetime,
+ file_type,
+ none_type,
+ validate_get_composed_info,
+ OpenApiModel
+)
+from gooddata_api_client.exceptions import ApiAttributeError
+
+
+def lazy_import():
+ from gooddata_api_client.model.dashboard_date_filter_date_filter_all_of import DashboardDateFilterDateFilterAllOf
+ from gooddata_api_client.model.dashboard_filter import DashboardFilter
+ globals()['DashboardDateFilterDateFilterAllOf'] = DashboardDateFilterDateFilterAllOf
+ globals()['DashboardFilter'] = DashboardFilter
+
+
+class DashboardDateFilterDateFilter(ModelComposed):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ ('granularity',): {
+ 'ALL_TIME_GRANULARITY': "ALL_TIME_GRANULARITY",
+ 'GDC.TIME.YEAR': "GDC.time.year",
+ 'GDC.TIME.WEEK_US': "GDC.time.week_us",
+ 'GDC.TIME.WEEK_IN_YEAR': "GDC.time.week_in_year",
+ 'GDC.TIME.WEEK_IN_QUARTER': "GDC.time.week_in_quarter",
+ 'GDC.TIME.WEEK': "GDC.time.week",
+ 'GDC.TIME.EUWEEK_IN_YEAR': "GDC.time.euweek_in_year",
+ 'GDC.TIME.EUWEEK_IN_QUARTER': "GDC.time.euweek_in_quarter",
+ 'GDC.TIME.QUARTER': "GDC.time.quarter",
+ 'GDC.TIME.QUARTER_IN_YEAR': "GDC.time.quarter_in_year",
+ 'GDC.TIME.MONTH': "GDC.time.month",
+ 'GDC.TIME.MONTH_IN_QUARTER': "GDC.time.month_in_quarter",
+ 'GDC.TIME.MONTH_IN_YEAR': "GDC.time.month_in_year",
+ 'GDC.TIME.DAY_IN_YEAR': "GDC.time.day_in_year",
+ 'GDC.TIME.DAY_IN_QUARTER': "GDC.time.day_in_quarter",
+ 'GDC.TIME.DAY_IN_MONTH': "GDC.time.day_in_month",
+ 'GDC.TIME.DAY_IN_WEEK': "GDC.time.day_in_week",
+ 'GDC.TIME.DAY_IN_EUWEEK': "GDC.time.day_in_euweek",
+ 'GDC.TIME.DATE': "GDC.time.date",
+ 'GDC.TIME.HOUR': "GDC.time.hour",
+ 'GDC.TIME.HOUR_IN_DAY': "GDC.time.hour_in_day",
+ 'GDC.TIME.MINUTE': "GDC.time.minute",
+ 'GDC.TIME.MINUTE_IN_HOUR': "GDC.time.minute_in_hour",
+ },
+ ('type',): {
+ 'RELATIVE': "relative",
+ 'ABSOLUTE': "absolute",
+ },
+ }
+
+ validations = {
+ }
+
+ @cached_property
+ 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
+
+ @cached_property
+ def openapi_types():
+ """
+ This must be a method because a model may have properties that are
+ of type self, this must run after the class is loaded
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ lazy_import()
+ return {
+ 'granularity': (str,), # noqa: E501
+ 'type': (str,), # noqa: E501
+ 'local_identifier': (str,), # noqa: E501
+ 'attribute': (str,), # noqa: E501
+ 'data_set': (str,), # noqa: E501
+ '_from': (str,), # noqa: E501
+ 'to': (str,), # noqa: E501
+ }
+
+ @cached_property
+ def discriminator():
+ return None
+
+
+ attribute_map = {
+ 'granularity': 'granularity', # noqa: E501
+ 'type': 'type', # noqa: E501
+ 'local_identifier': 'localIdentifier', # noqa: E501
+ 'attribute': 'attribute', # noqa: E501
+ 'data_set': 'dataSet', # noqa: E501
+ '_from': 'from', # noqa: E501
+ 'to': 'to', # noqa: E501
+ }
+
+ read_only_vars = {
+ }
+
+ @classmethod
+ @convert_js_args_to_python_args
+ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501
+ """DashboardDateFilterDateFilter - a model defined in OpenAPI
+
+ Keyword Args:
+ granularity (str):
+ type (str):
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ local_identifier (str): [optional] # noqa: E501
+ attribute (str): [optional] # noqa: E501
+ data_set (str): [optional] # noqa: E501
+ _from (str): [optional] # noqa: E501
+ to (str): [optional] # noqa: E501
+ """
+
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ self = super(OpenApiModel, cls).__new__(cls)
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ 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 in discarded_args and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ self._additional_properties_model_instances:
+ # discard variable.
+ continue
+ setattr(self, var_name, var_value)
+
+ return self
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_spec_property_naming',
+ '_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
+ """DashboardDateFilterDateFilter - a model defined in OpenAPI
+
+ Keyword Args:
+ granularity (str):
+ type (str):
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ local_identifier (str): [optional] # noqa: E501
+ attribute (str): [optional] # noqa: E501
+ data_set (str): [optional] # noqa: E501
+ _from (str): [optional] # noqa: E501
+ to (str): [optional] # noqa: E501
+ """
+
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ 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 in discarded_args and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ 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': [
+ DashboardDateFilterDateFilterAllOf,
+ DashboardFilter,
+ ],
+ 'oneOf': [
+ ],
+ }
diff --git a/gooddata-api-client/gooddata_api_client/model/dashboard_date_filter_date_filter_all_of.py b/gooddata-api-client/gooddata_api_client/model/dashboard_date_filter_date_filter_all_of.py
new file mode 100644
index 000000000..03041fb71
--- /dev/null
+++ b/gooddata-api-client/gooddata_api_client/model/dashboard_date_filter_date_filter_all_of.py
@@ -0,0 +1,313 @@
+"""
+ 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.model_utils import ( # noqa: F401
+ ApiTypeError,
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ cached_property,
+ change_keys_js_to_python,
+ convert_js_args_to_python_args,
+ date,
+ datetime,
+ file_type,
+ none_type,
+ validate_get_composed_info,
+ OpenApiModel
+)
+from gooddata_api_client.exceptions import ApiAttributeError
+
+
+
+class DashboardDateFilterDateFilterAllOf(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ ('granularity',): {
+ 'ALL_TIME_GRANULARITY': "ALL_TIME_GRANULARITY",
+ 'GDC.TIME.YEAR': "GDC.time.year",
+ 'GDC.TIME.WEEK_US': "GDC.time.week_us",
+ 'GDC.TIME.WEEK_IN_YEAR': "GDC.time.week_in_year",
+ 'GDC.TIME.WEEK_IN_QUARTER': "GDC.time.week_in_quarter",
+ 'GDC.TIME.WEEK': "GDC.time.week",
+ 'GDC.TIME.EUWEEK_IN_YEAR': "GDC.time.euweek_in_year",
+ 'GDC.TIME.EUWEEK_IN_QUARTER': "GDC.time.euweek_in_quarter",
+ 'GDC.TIME.QUARTER': "GDC.time.quarter",
+ 'GDC.TIME.QUARTER_IN_YEAR': "GDC.time.quarter_in_year",
+ 'GDC.TIME.MONTH': "GDC.time.month",
+ 'GDC.TIME.MONTH_IN_QUARTER': "GDC.time.month_in_quarter",
+ 'GDC.TIME.MONTH_IN_YEAR': "GDC.time.month_in_year",
+ 'GDC.TIME.DAY_IN_YEAR': "GDC.time.day_in_year",
+ 'GDC.TIME.DAY_IN_QUARTER': "GDC.time.day_in_quarter",
+ 'GDC.TIME.DAY_IN_MONTH': "GDC.time.day_in_month",
+ 'GDC.TIME.DAY_IN_WEEK': "GDC.time.day_in_week",
+ 'GDC.TIME.DAY_IN_EUWEEK': "GDC.time.day_in_euweek",
+ 'GDC.TIME.DATE': "GDC.time.date",
+ 'GDC.TIME.HOUR': "GDC.time.hour",
+ 'GDC.TIME.HOUR_IN_DAY': "GDC.time.hour_in_day",
+ 'GDC.TIME.MINUTE': "GDC.time.minute",
+ 'GDC.TIME.MINUTE_IN_HOUR': "GDC.time.minute_in_hour",
+ },
+ ('type',): {
+ 'RELATIVE': "relative",
+ 'ABSOLUTE': "absolute",
+ },
+ }
+
+ validations = {
+ }
+
+ @cached_property
+ 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
+ """
+ return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501
+
+ _nullable = False
+
+ @cached_property
+ def openapi_types():
+ """
+ This must be a method because a model may have properties that are
+ of type self, this must run after the class is loaded
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'attribute': (str,), # noqa: E501
+ 'data_set': (str,), # noqa: E501
+ '_from': (str,), # noqa: E501
+ 'granularity': (str,), # noqa: E501
+ 'to': (str,), # noqa: E501
+ 'type': (str,), # noqa: E501
+ }
+
+ @cached_property
+ def discriminator():
+ return None
+
+
+ attribute_map = {
+ 'attribute': 'attribute', # noqa: E501
+ 'data_set': 'dataSet', # noqa: E501
+ '_from': 'from', # noqa: E501
+ 'granularity': 'granularity', # noqa: E501
+ 'to': 'to', # 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
+ """DashboardDateFilterDateFilterAllOf - a model defined in OpenAPI
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ attribute (str): [optional] # noqa: E501
+ data_set (str): [optional] # noqa: E501
+ _from (str): [optional] # noqa: E501
+ granularity (str): [optional] # noqa: E501
+ to (str): [optional] # noqa: E501
+ type (str): [optional] # noqa: E501
+ """
+
+ _check_type = kwargs.pop('_check_type', True)
+ _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', ())
+
+ self = super(OpenApiModel, cls).__new__(cls)
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ self.additional_properties_type is None:
+ # discard variable.
+ continue
+ setattr(self, var_name, var_value)
+ return self
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_spec_property_naming',
+ '_path_to_item',
+ '_configuration',
+ '_visited_composed_classes',
+ ])
+
+ @convert_js_args_to_python_args
+ def __init__(self, *args, **kwargs): # noqa: E501
+ """DashboardDateFilterDateFilterAllOf - a model defined in OpenAPI
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ attribute (str): [optional] # noqa: E501
+ data_set (str): [optional] # noqa: E501
+ _from (str): [optional] # noqa: E501
+ granularity (str): [optional] # noqa: E501
+ to (str): [optional] # noqa: E501
+ type (str): [optional] # noqa: E501
+ """
+
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ 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.")
diff --git a/gooddata-api-client/gooddata_api_client/model/dashboard_filter.py b/gooddata-api-client/gooddata_api_client/model/dashboard_filter.py
new file mode 100644
index 000000000..98b1c299a
--- /dev/null
+++ b/gooddata-api-client/gooddata_api_client/model/dashboard_filter.py
@@ -0,0 +1,264 @@
+"""
+ 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.model_utils import ( # noqa: F401
+ ApiTypeError,
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ cached_property,
+ change_keys_js_to_python,
+ convert_js_args_to_python_args,
+ date,
+ datetime,
+ file_type,
+ none_type,
+ validate_get_composed_info,
+ OpenApiModel
+)
+from gooddata_api_client.exceptions import ApiAttributeError
+
+
+
+class DashboardFilter(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ @cached_property
+ 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
+ """
+ return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501
+
+ _nullable = False
+
+ @cached_property
+ def openapi_types():
+ """
+ This must be a method because a model may have properties that are
+ of type self, this must run after the class is loaded
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'local_identifier': (str,), # noqa: E501
+ }
+
+ @cached_property
+ def discriminator():
+ return None
+
+
+ attribute_map = {
+ 'local_identifier': 'localIdentifier', # noqa: E501
+ }
+
+ read_only_vars = {
+ }
+
+ _composed_schemas = {}
+
+ @classmethod
+ @convert_js_args_to_python_args
+ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501
+ """DashboardFilter - a model defined in OpenAPI
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ local_identifier (str): [optional] # noqa: E501
+ """
+
+ _check_type = kwargs.pop('_check_type', True)
+ _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', ())
+
+ self = super(OpenApiModel, cls).__new__(cls)
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ self.additional_properties_type is None:
+ # discard variable.
+ continue
+ setattr(self, var_name, var_value)
+ return self
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_spec_property_naming',
+ '_path_to_item',
+ '_configuration',
+ '_visited_composed_classes',
+ ])
+
+ @convert_js_args_to_python_args
+ def __init__(self, *args, **kwargs): # noqa: E501
+ """DashboardFilter - a model defined in OpenAPI
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ local_identifier (str): [optional] # noqa: E501
+ """
+
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ 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.")
diff --git a/gooddata-api-client/gooddata_api_client/model/dashboard_tabular_export_request.py b/gooddata-api-client/gooddata_api_client/model/dashboard_tabular_export_request.py
new file mode 100644
index 000000000..f75e312ed
--- /dev/null
+++ b/gooddata-api-client/gooddata_api_client/model/dashboard_tabular_export_request.py
@@ -0,0 +1,291 @@
+"""
+ 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.model_utils import ( # noqa: F401
+ ApiTypeError,
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ cached_property,
+ change_keys_js_to_python,
+ convert_js_args_to_python_args,
+ date,
+ datetime,
+ file_type,
+ none_type,
+ validate_get_composed_info,
+ OpenApiModel
+)
+from gooddata_api_client.exceptions import ApiAttributeError
+
+
+def lazy_import():
+ from gooddata_api_client.model.dashboard_tabular_export_request_dashboard_filters_override_inner import DashboardTabularExportRequestDashboardFiltersOverrideInner
+ globals()['DashboardTabularExportRequestDashboardFiltersOverrideInner'] = DashboardTabularExportRequestDashboardFiltersOverrideInner
+
+
+class DashboardTabularExportRequest(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ ('format',): {
+ 'XLSX': "XLSX",
+ },
+ }
+
+ validations = {
+ }
+
+ @cached_property
+ 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
+
+ @cached_property
+ def openapi_types():
+ """
+ This must be a method because a model may have properties that are
+ of type self, this must run after the class is loaded
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ lazy_import()
+ return {
+ 'file_name': (str,), # noqa: E501
+ 'format': (str,), # noqa: E501
+ 'dashboard_filters_override': ([DashboardTabularExportRequestDashboardFiltersOverrideInner],), # noqa: E501
+ }
+
+ @cached_property
+ def discriminator():
+ return None
+
+
+ attribute_map = {
+ 'file_name': 'fileName', # noqa: E501
+ 'format': 'format', # noqa: E501
+ 'dashboard_filters_override': 'dashboardFiltersOverride', # noqa: E501
+ }
+
+ read_only_vars = {
+ }
+
+ _composed_schemas = {}
+
+ @classmethod
+ @convert_js_args_to_python_args
+ def _from_openapi_data(cls, file_name, *args, **kwargs): # noqa: E501
+ """DashboardTabularExportRequest - a model defined in OpenAPI
+
+ Args:
+ file_name (str): Filename of downloaded file without extension.
+
+ Keyword Args:
+ format (str): Requested tabular export type.. defaults to "XLSX", must be one of ["XLSX", ] # 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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ dashboard_filters_override ([DashboardTabularExportRequestDashboardFiltersOverrideInner]): List of filters that will be used instead of the default dashboard filters.. [optional] # noqa: E501
+ """
+
+ format = kwargs.get('format', "XLSX")
+ _check_type = kwargs.pop('_check_type', True)
+ _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', ())
+
+ self = super(OpenApiModel, cls).__new__(cls)
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.file_name = file_name
+ self.format = format
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ self.additional_properties_type is None:
+ # discard variable.
+ continue
+ setattr(self, var_name, var_value)
+ return self
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_spec_property_naming',
+ '_path_to_item',
+ '_configuration',
+ '_visited_composed_classes',
+ ])
+
+ @convert_js_args_to_python_args
+ def __init__(self, file_name, *args, **kwargs): # noqa: E501
+ """DashboardTabularExportRequest - a model defined in OpenAPI
+
+ Args:
+ file_name (str): Filename of downloaded file without extension.
+
+ Keyword Args:
+ format (str): Requested tabular export type.. defaults to "XLSX", must be one of ["XLSX", ] # 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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ dashboard_filters_override ([DashboardTabularExportRequestDashboardFiltersOverrideInner]): List of filters that will be used instead of the default dashboard filters.. [optional] # noqa: E501
+ """
+
+ format = kwargs.get('format', "XLSX")
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.file_name = file_name
+ self.format = format
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ 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.")
diff --git a/gooddata-api-client/gooddata_api_client/model/dashboard_tabular_export_request_dashboard_filters_override_inner.py b/gooddata-api-client/gooddata_api_client/model/dashboard_tabular_export_request_dashboard_filters_override_inner.py
new file mode 100644
index 000000000..b8f2b6e74
--- /dev/null
+++ b/gooddata-api-client/gooddata_api_client/model/dashboard_tabular_export_request_dashboard_filters_override_inner.py
@@ -0,0 +1,331 @@
+"""
+ 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.model_utils import ( # noqa: F401
+ ApiTypeError,
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ cached_property,
+ change_keys_js_to_python,
+ convert_js_args_to_python_args,
+ date,
+ datetime,
+ file_type,
+ none_type,
+ validate_get_composed_info,
+ OpenApiModel
+)
+from gooddata_api_client.exceptions import ApiAttributeError
+
+
+def lazy_import():
+ from gooddata_api_client.model.dashboard_attribute_filter import DashboardAttributeFilter
+ from gooddata_api_client.model.dashboard_attribute_filter_attribute_filter import DashboardAttributeFilterAttributeFilter
+ from gooddata_api_client.model.dashboard_date_filter import DashboardDateFilter
+ from gooddata_api_client.model.dashboard_date_filter_date_filter import DashboardDateFilterDateFilter
+ globals()['DashboardAttributeFilter'] = DashboardAttributeFilter
+ globals()['DashboardAttributeFilterAttributeFilter'] = DashboardAttributeFilterAttributeFilter
+ globals()['DashboardDateFilter'] = DashboardDateFilter
+ globals()['DashboardDateFilterDateFilter'] = DashboardDateFilterDateFilter
+
+
+class DashboardTabularExportRequestDashboardFiltersOverrideInner(ModelComposed):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ @cached_property
+ 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
+
+ @cached_property
+ def openapi_types():
+ """
+ This must be a method because a model may have properties that are
+ of type self, this must run after the class is loaded
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ lazy_import()
+ return {
+ 'attribute_filter': (DashboardAttributeFilterAttributeFilter,), # noqa: E501
+ 'date_filter': (DashboardDateFilterDateFilter,), # noqa: E501
+ }
+
+ @cached_property
+ def discriminator():
+ return None
+
+
+ attribute_map = {
+ 'attribute_filter': 'attributeFilter', # noqa: E501
+ 'date_filter': 'dateFilter', # noqa: E501
+ }
+
+ read_only_vars = {
+ }
+
+ @classmethod
+ @convert_js_args_to_python_args
+ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501
+ """DashboardTabularExportRequestDashboardFiltersOverrideInner - a model defined in OpenAPI
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ attribute_filter (DashboardAttributeFilterAttributeFilter): [optional] # noqa: E501
+ date_filter (DashboardDateFilterDateFilter): [optional] # noqa: E501
+ """
+
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ self = super(OpenApiModel, cls).__new__(cls)
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ 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 in discarded_args and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ self._additional_properties_model_instances:
+ # discard variable.
+ continue
+ setattr(self, var_name, var_value)
+
+ return self
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_spec_property_naming',
+ '_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
+ """DashboardTabularExportRequestDashboardFiltersOverrideInner - a model defined in OpenAPI
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ attribute_filter (DashboardAttributeFilterAttributeFilter): [optional] # noqa: E501
+ date_filter (DashboardDateFilterDateFilter): [optional] # noqa: E501
+ """
+
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ 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 in discarded_args and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ 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': [
+ ],
+ 'oneOf': [
+ DashboardAttributeFilter,
+ DashboardDateFilter,
+ ],
+ }
diff --git a/gooddata-api-client/gooddata_api_client/model/declarative_automation.py b/gooddata-api-client/gooddata_api_client/model/declarative_automation.py
index 231e5de01..006840e46 100644
--- a/gooddata-api-client/gooddata_api_client/model/declarative_automation.py
+++ b/gooddata-api-client/gooddata_api_client/model/declarative_automation.py
@@ -33,6 +33,7 @@
def lazy_import():
from gooddata_api_client.model.automation_alert import AutomationAlert
from gooddata_api_client.model.automation_external_recipient import AutomationExternalRecipient
+ from gooddata_api_client.model.automation_image_export import AutomationImageExport
from gooddata_api_client.model.automation_metadata import AutomationMetadata
from gooddata_api_client.model.automation_schedule import AutomationSchedule
from gooddata_api_client.model.automation_tabular_export import AutomationTabularExport
@@ -43,6 +44,7 @@ def lazy_import():
from gooddata_api_client.model.declarative_user_identifier import DeclarativeUserIdentifier
globals()['AutomationAlert'] = AutomationAlert
globals()['AutomationExternalRecipient'] = AutomationExternalRecipient
+ globals()['AutomationImageExport'] = AutomationImageExport
globals()['AutomationMetadata'] = AutomationMetadata
globals()['AutomationSchedule'] = AutomationSchedule
globals()['AutomationTabularExport'] = AutomationTabularExport
@@ -104,6 +106,8 @@ class DeclarativeAutomation(ModelNormal):
},
('external_recipients',): {
},
+ ('image_exports',): {
+ },
('modified_at',): {
'regex': {
'pattern': r'[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}', # noqa: E501
@@ -154,6 +158,7 @@ def openapi_types():
'details': ({str: (str,)},), # noqa: E501
'export_definitions': ([DeclarativeExportDefinitionIdentifier],), # noqa: E501
'external_recipients': ([AutomationExternalRecipient],), # noqa: E501
+ 'image_exports': ([AutomationImageExport],), # noqa: E501
'metadata': (AutomationMetadata,), # noqa: E501
'modified_at': (str, none_type,), # noqa: E501
'modified_by': (DeclarativeUserIdentifier,), # noqa: E501
@@ -182,6 +187,7 @@ def discriminator():
'details': 'details', # noqa: E501
'export_definitions': 'exportDefinitions', # noqa: E501
'external_recipients': 'externalRecipients', # noqa: E501
+ 'image_exports': 'imageExports', # noqa: E501
'metadata': 'metadata', # noqa: E501
'modified_at': 'modifiedAt', # noqa: E501
'modified_by': 'modifiedBy', # noqa: E501
@@ -247,6 +253,7 @@ def _from_openapi_data(cls, id, *args, **kwargs): # noqa: E501
details ({str: (str,)}): TODO. [optional] # noqa: E501
export_definitions ([DeclarativeExportDefinitionIdentifier]): [optional] # noqa: E501
external_recipients ([AutomationExternalRecipient]): External recipients of the automation action results.. [optional] # noqa: E501
+ image_exports ([AutomationImageExport]): [optional] # noqa: E501
metadata (AutomationMetadata): [optional] # noqa: E501
modified_at (str, none_type): Time of the last entity modification.. [optional] # noqa: E501
modified_by (DeclarativeUserIdentifier): [optional] # noqa: E501
@@ -355,6 +362,7 @@ def __init__(self, id, *args, **kwargs): # noqa: E501
details ({str: (str,)}): TODO. [optional] # noqa: E501
export_definitions ([DeclarativeExportDefinitionIdentifier]): [optional] # noqa: E501
external_recipients ([AutomationExternalRecipient]): External recipients of the automation action results.. [optional] # noqa: E501
+ image_exports ([AutomationImageExport]): [optional] # noqa: E501
metadata (AutomationMetadata): [optional] # noqa: E501
modified_at (str, none_type): Time of the last entity modification.. [optional] # noqa: E501
modified_by (DeclarativeUserIdentifier): [optional] # noqa: E501
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 c78af5b03..15f2eb4b5 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
@@ -88,6 +88,14 @@ class DeclarativeDataSource(ModelNormal):
'STARROCKS': "STARROCKS",
'ATHENA': "ATHENA",
},
+ ('authentication_type',): {
+ 'None': None,
+ 'USERNAME_PASSWORD': "USERNAME_PASSWORD",
+ 'TOKEN': "TOKEN",
+ 'KEY_PAIR': "KEY_PAIR",
+ 'CLIENT_SECRET': "CLIENT_SECRET",
+ 'ACCESS_TOKEN': "ACCESS_TOKEN",
+ },
('cache_strategy',): {
'ALWAYS': "ALWAYS",
'NEVER': "NEVER",
@@ -159,6 +167,7 @@ def openapi_types():
'name': (str,), # noqa: E501
'schema': (str,), # noqa: E501
'type': (str,), # noqa: E501
+ 'authentication_type': (str, none_type,), # noqa: E501
'cache_strategy': (str,), # noqa: E501
'client_id': (str,), # noqa: E501
'client_secret': (str,), # noqa: E501
@@ -183,6 +192,7 @@ def discriminator():
'name': 'name', # noqa: E501
'schema': 'schema', # noqa: E501
'type': 'type', # noqa: E501
+ 'authentication_type': 'authenticationType', # noqa: E501
'cache_strategy': 'cacheStrategy', # noqa: E501
'client_id': 'clientId', # noqa: E501
'client_secret': 'clientSecret', # noqa: E501
@@ -244,6 +254,7 @@ def _from_openapi_data(cls, id, name, schema, type, *args, **kwargs): # noqa: E
Animal class but this time we won't travel
through its discriminator because we passed in
_visited_composed_classes = (Animal,)
+ authentication_type (str, none_type): Type of authentication used to connect to the database.. [optional] # noqa: E501
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
@@ -351,6 +362,7 @@ def __init__(self, id, name, schema, 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,)
+ authentication_type (str, none_type): Type of authentication used to connect to the database.. [optional] # noqa: E501
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
diff --git a/gooddata-api-client/gooddata_api_client/model/declarative_setting.py b/gooddata-api-client/gooddata_api_client/model/declarative_setting.py
index 87d7e0e03..58f8ed1b3 100644
--- a/gooddata-api-client/gooddata_api_client/model/declarative_setting.py
+++ b/gooddata-api-client/gooddata_api_client/model/declarative_setting.py
@@ -64,6 +64,7 @@ class DeclarativeSetting(ModelNormal):
'TIMEZONE': "TIMEZONE",
'ACTIVE_THEME': "ACTIVE_THEME",
'ACTIVE_COLOR_PALETTE': "ACTIVE_COLOR_PALETTE",
+ 'ACTIVE_LLM_ENDPOINT': "ACTIVE_LLM_ENDPOINT",
'WHITE_LABELING': "WHITE_LABELING",
'LOCALE': "LOCALE",
'METADATA_LOCALE': "METADATA_LOCALE",
@@ -81,6 +82,7 @@ class DeclarativeSetting(ModelNormal):
'JIT_PROVISIONING': "JIT_PROVISIONING",
'DASHBOARD_FILTERS_APPLY_MODE': "DASHBOARD_FILTERS_APPLY_MODE",
'ENABLE_SLIDES_EXPORT': "ENABLE_SLIDES_EXPORT",
+ 'AI_RATE_LIMIT': "AI_RATE_LIMIT",
},
}
diff --git a/gooddata-api-client/gooddata_api_client/model/export_result.py b/gooddata-api-client/gooddata_api_client/model/export_result.py
index dfcf79fd7..c732f41af 100644
--- a/gooddata-api-client/gooddata_api_client/model/export_result.py
+++ b/gooddata-api-client/gooddata_api_client/model/export_result.py
@@ -92,6 +92,7 @@ def openapi_types():
'file_name': (str,), # noqa: E501
'status': (str,), # noqa: E501
'error_message': (str,), # noqa: E501
+ 'expires_at': (datetime,), # noqa: E501
'file_uri': (str,), # noqa: E501
'trace_id': (str,), # noqa: E501
'triggered_at': (datetime,), # noqa: E501
@@ -107,6 +108,7 @@ def discriminator():
'file_name': 'fileName', # noqa: E501
'status': 'status', # noqa: E501
'error_message': 'errorMessage', # noqa: E501
+ 'expires_at': 'expiresAt', # noqa: E501
'file_uri': 'fileUri', # noqa: E501
'trace_id': 'traceId', # noqa: E501
'triggered_at': 'triggeredAt', # noqa: E501
@@ -159,6 +161,7 @@ def _from_openapi_data(cls, export_id, file_name, status, *args, **kwargs): # n
through its discriminator because we passed in
_visited_composed_classes = (Animal,)
error_message (str): [optional] # noqa: E501
+ expires_at (datetime): [optional] # noqa: E501
file_uri (str): [optional] # noqa: E501
trace_id (str): [optional] # noqa: E501
triggered_at (datetime): [optional] # noqa: E501
@@ -256,6 +259,7 @@ def __init__(self, export_id, file_name, status, *args, **kwargs): # noqa: E501
through its discriminator because we passed in
_visited_composed_classes = (Animal,)
error_message (str): [optional] # noqa: E501
+ expires_at (datetime): [optional] # noqa: E501
file_uri (str): [optional] # noqa: E501
trace_id (str): [optional] # noqa: E501
triggered_at (datetime): [optional] # noqa: E501
diff --git a/gooddata-api-client/gooddata_api_client/model/get_slides_export202_response_inner.py b/gooddata-api-client/gooddata_api_client/model/get_image_export202_response_inner.py
similarity index 98%
rename from gooddata-api-client/gooddata_api_client/model/get_slides_export202_response_inner.py
rename to gooddata-api-client/gooddata_api_client/model/get_image_export202_response_inner.py
index a7bfeb09f..b8471bc53 100644
--- a/gooddata-api-client/gooddata_api_client/model/get_slides_export202_response_inner.py
+++ b/gooddata-api-client/gooddata_api_client/model/get_image_export202_response_inner.py
@@ -31,7 +31,7 @@
-class GetSlidesExport202ResponseInner(ModelNormal):
+class GetImageExport202ResponseInner(ModelNormal):
"""NOTE: This class is auto generated by OpenAPI Generator.
Ref: https://openapi-generator.tech
@@ -116,7 +116,7 @@ def discriminator():
@classmethod
@convert_js_args_to_python_args
def _from_openapi_data(cls, *args, **kwargs): # noqa: E501
- """GetSlidesExport202ResponseInner - a model defined in OpenAPI
+ """GetImageExport202ResponseInner - a model defined in OpenAPI
Keyword Args:
_check_type (bool): if True, values for parameters in openapi_types
@@ -209,7 +209,7 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501
@convert_js_args_to_python_args
def __init__(self, *args, **kwargs): # noqa: E501
- """GetSlidesExport202ResponseInner - a model defined in OpenAPI
+ """GetImageExport202ResponseInner - a model defined in OpenAPI
Keyword Args:
_check_type (bool): if True, values for parameters in openapi_types
diff --git a/gooddata-api-client/gooddata_api_client/model/image_export_request.py b/gooddata-api-client/gooddata_api_client/model/image_export_request.py
new file mode 100644
index 000000000..d37c4a46f
--- /dev/null
+++ b/gooddata-api-client/gooddata_api_client/model/image_export_request.py
@@ -0,0 +1,304 @@
+"""
+ 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.model_utils import ( # noqa: F401
+ ApiTypeError,
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ cached_property,
+ change_keys_js_to_python,
+ convert_js_args_to_python_args,
+ date,
+ datetime,
+ file_type,
+ none_type,
+ validate_get_composed_info,
+ OpenApiModel
+)
+from gooddata_api_client.exceptions import ApiAttributeError
+
+
+def lazy_import():
+ from gooddata_api_client.model.json_node import JsonNode
+ globals()['JsonNode'] = JsonNode
+
+
+class ImageExportRequest(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ ('format',): {
+ 'PNG': "PNG",
+ },
+ }
+
+ validations = {
+ ('widget_ids',): {
+ 'max_items': 1,
+ },
+ }
+
+ @cached_property
+ 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
+
+ @cached_property
+ def openapi_types():
+ """
+ This must be a method because a model may have properties that are
+ of type self, this must run after the class is loaded
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ lazy_import()
+ return {
+ 'dashboard_id': (str,), # noqa: E501
+ 'file_name': (str,), # noqa: E501
+ 'format': (str,), # noqa: E501
+ 'metadata': (JsonNode,), # noqa: E501
+ 'widget_ids': ([str],), # noqa: E501
+ }
+
+ @cached_property
+ def discriminator():
+ return None
+
+
+ attribute_map = {
+ 'dashboard_id': 'dashboardId', # noqa: E501
+ 'file_name': 'fileName', # noqa: E501
+ 'format': 'format', # noqa: E501
+ 'metadata': 'metadata', # noqa: E501
+ 'widget_ids': 'widgetIds', # noqa: E501
+ }
+
+ read_only_vars = {
+ }
+
+ _composed_schemas = {}
+
+ @classmethod
+ @convert_js_args_to_python_args
+ def _from_openapi_data(cls, dashboard_id, file_name, *args, **kwargs): # noqa: E501
+ """ImageExportRequest - a model defined in OpenAPI
+
+ Args:
+ dashboard_id (str): Dashboard identifier
+ file_name (str): File name to be used for retrieving the image document.
+
+ Keyword Args:
+ format (str): Requested resulting file type.. defaults to "PNG", must be one of ["PNG", ] # 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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ metadata (JsonNode): [optional] # noqa: E501
+ widget_ids ([str]): List of widget identifiers to be exported. Note that only one widget is currently supported.. [optional] # noqa: E501
+ """
+
+ format = kwargs.get('format', "PNG")
+ _check_type = kwargs.pop('_check_type', True)
+ _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', ())
+
+ self = super(OpenApiModel, cls).__new__(cls)
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.dashboard_id = dashboard_id
+ self.file_name = file_name
+ self.format = format
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ self.additional_properties_type is None:
+ # discard variable.
+ continue
+ setattr(self, var_name, var_value)
+ return self
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_spec_property_naming',
+ '_path_to_item',
+ '_configuration',
+ '_visited_composed_classes',
+ ])
+
+ @convert_js_args_to_python_args
+ def __init__(self, dashboard_id, file_name, *args, **kwargs): # noqa: E501
+ """ImageExportRequest - a model defined in OpenAPI
+
+ Args:
+ dashboard_id (str): Dashboard identifier
+ file_name (str): File name to be used for retrieving the image document.
+
+ Keyword Args:
+ format (str): Requested resulting file type.. defaults to "PNG", must be one of ["PNG", ] # 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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ metadata (JsonNode): [optional] # noqa: E501
+ widget_ids ([str]): List of widget identifiers to be exported. Note that only one widget is currently supported.. [optional] # noqa: E501
+ """
+
+ format = kwargs.get('format', "PNG")
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.dashboard_id = dashboard_id
+ self.file_name = file_name
+ self.format = format
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ 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.")
diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_automation_in_attributes.py b/gooddata-api-client/gooddata_api_client/model/json_api_automation_in_attributes.py
index d42288122..380376b3f 100644
--- a/gooddata-api-client/gooddata_api_client/model/json_api_automation_in_attributes.py
+++ b/gooddata-api-client/gooddata_api_client/model/json_api_automation_in_attributes.py
@@ -33,12 +33,14 @@
def lazy_import():
from gooddata_api_client.model.json_api_automation_in_attributes_alert import JsonApiAutomationInAttributesAlert
from gooddata_api_client.model.json_api_automation_in_attributes_external_recipients_inner import JsonApiAutomationInAttributesExternalRecipientsInner
+ from gooddata_api_client.model.json_api_automation_in_attributes_image_exports_inner import JsonApiAutomationInAttributesImageExportsInner
from gooddata_api_client.model.json_api_automation_in_attributes_metadata import JsonApiAutomationInAttributesMetadata
from gooddata_api_client.model.json_api_automation_in_attributes_schedule import JsonApiAutomationInAttributesSchedule
from gooddata_api_client.model.json_api_automation_in_attributes_tabular_exports_inner import JsonApiAutomationInAttributesTabularExportsInner
from gooddata_api_client.model.json_api_automation_in_attributes_visual_exports_inner import JsonApiAutomationInAttributesVisualExportsInner
globals()['JsonApiAutomationInAttributesAlert'] = JsonApiAutomationInAttributesAlert
globals()['JsonApiAutomationInAttributesExternalRecipientsInner'] = JsonApiAutomationInAttributesExternalRecipientsInner
+ globals()['JsonApiAutomationInAttributesImageExportsInner'] = JsonApiAutomationInAttributesImageExportsInner
globals()['JsonApiAutomationInAttributesMetadata'] = JsonApiAutomationInAttributesMetadata
globals()['JsonApiAutomationInAttributesSchedule'] = JsonApiAutomationInAttributesSchedule
globals()['JsonApiAutomationInAttributesTabularExportsInner'] = JsonApiAutomationInAttributesTabularExportsInner
@@ -116,6 +118,7 @@ def openapi_types():
'description': (str,), # noqa: E501
'details': (bool, date, datetime, dict, float, int, list, str, none_type,), # noqa: E501
'external_recipients': ([JsonApiAutomationInAttributesExternalRecipientsInner],), # noqa: E501
+ 'image_exports': ([JsonApiAutomationInAttributesImageExportsInner],), # noqa: E501
'metadata': (JsonApiAutomationInAttributesMetadata,), # noqa: E501
'schedule': (JsonApiAutomationInAttributesSchedule,), # noqa: E501
'state': (str,), # noqa: E501
@@ -136,6 +139,7 @@ def discriminator():
'description': 'description', # noqa: E501
'details': 'details', # noqa: E501
'external_recipients': 'externalRecipients', # noqa: E501
+ 'image_exports': 'imageExports', # noqa: E501
'metadata': 'metadata', # noqa: E501
'schedule': 'schedule', # noqa: E501
'state': 'state', # noqa: E501
@@ -191,6 +195,7 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501
description (str): [optional] # noqa: E501
details (bool, date, datetime, dict, float, int, list, str, none_type): Additional details to be included in the automated message.. [optional] # noqa: E501
external_recipients ([JsonApiAutomationInAttributesExternalRecipientsInner]): External recipients of the automation action results.. [optional] # noqa: E501
+ image_exports ([JsonApiAutomationInAttributesImageExportsInner]): [optional] # noqa: E501
metadata (JsonApiAutomationInAttributesMetadata): [optional] # noqa: E501
schedule (JsonApiAutomationInAttributesSchedule): [optional] # noqa: E501
state (str): Current state of the automation.. [optional] # noqa: E501
@@ -288,6 +293,7 @@ def __init__(self, *args, **kwargs): # noqa: E501
description (str): [optional] # noqa: E501
details (bool, date, datetime, dict, float, int, list, str, none_type): Additional details to be included in the automated message.. [optional] # noqa: E501
external_recipients ([JsonApiAutomationInAttributesExternalRecipientsInner]): External recipients of the automation action results.. [optional] # noqa: E501
+ image_exports ([JsonApiAutomationInAttributesImageExportsInner]): [optional] # noqa: E501
metadata (JsonApiAutomationInAttributesMetadata): [optional] # noqa: E501
schedule (JsonApiAutomationInAttributesSchedule): [optional] # noqa: E501
state (str): Current state of the automation.. [optional] # noqa: E501
diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_automation_in_attributes_image_exports_inner.py b/gooddata-api-client/gooddata_api_client/model/json_api_automation_in_attributes_image_exports_inner.py
new file mode 100644
index 000000000..00b363f69
--- /dev/null
+++ b/gooddata-api-client/gooddata_api_client/model/json_api_automation_in_attributes_image_exports_inner.py
@@ -0,0 +1,276 @@
+"""
+ 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.model_utils import ( # noqa: F401
+ ApiTypeError,
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ cached_property,
+ change_keys_js_to_python,
+ convert_js_args_to_python_args,
+ date,
+ datetime,
+ file_type,
+ none_type,
+ validate_get_composed_info,
+ OpenApiModel
+)
+from gooddata_api_client.exceptions import ApiAttributeError
+
+
+def lazy_import():
+ from gooddata_api_client.model.image_export_request import ImageExportRequest
+ globals()['ImageExportRequest'] = ImageExportRequest
+
+
+class JsonApiAutomationInAttributesImageExportsInner(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ @cached_property
+ 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
+
+ @cached_property
+ def openapi_types():
+ """
+ This must be a method because a model may have properties that are
+ of type self, this must run after the class is loaded
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ lazy_import()
+ return {
+ 'request_payload': (ImageExportRequest,), # noqa: E501
+ }
+
+ @cached_property
+ def discriminator():
+ return None
+
+
+ attribute_map = {
+ 'request_payload': 'requestPayload', # noqa: E501
+ }
+
+ read_only_vars = {
+ }
+
+ _composed_schemas = {}
+
+ @classmethod
+ @convert_js_args_to_python_args
+ def _from_openapi_data(cls, request_payload, *args, **kwargs): # noqa: E501
+ """JsonApiAutomationInAttributesImageExportsInner - a model defined in OpenAPI
+
+ Args:
+ request_payload (ImageExportRequest):
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ """
+
+ _check_type = kwargs.pop('_check_type', True)
+ _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', ())
+
+ self = super(OpenApiModel, cls).__new__(cls)
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.request_payload = request_payload
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ self.additional_properties_type is None:
+ # discard variable.
+ continue
+ setattr(self, var_name, var_value)
+ return self
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_spec_property_naming',
+ '_path_to_item',
+ '_configuration',
+ '_visited_composed_classes',
+ ])
+
+ @convert_js_args_to_python_args
+ def __init__(self, request_payload, *args, **kwargs): # noqa: E501
+ """JsonApiAutomationInAttributesImageExportsInner - a model defined in OpenAPI
+
+ Args:
+ request_payload (ImageExportRequest):
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ """
+
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.request_payload = request_payload
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ 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.")
diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_automation_out_attributes.py b/gooddata-api-client/gooddata_api_client/model/json_api_automation_out_attributes.py
index a9a5005fc..b03e8475d 100644
--- a/gooddata-api-client/gooddata_api_client/model/json_api_automation_out_attributes.py
+++ b/gooddata-api-client/gooddata_api_client/model/json_api_automation_out_attributes.py
@@ -33,12 +33,14 @@
def lazy_import():
from gooddata_api_client.model.json_api_automation_in_attributes_alert import JsonApiAutomationInAttributesAlert
from gooddata_api_client.model.json_api_automation_in_attributes_external_recipients_inner import JsonApiAutomationInAttributesExternalRecipientsInner
+ from gooddata_api_client.model.json_api_automation_in_attributes_image_exports_inner import JsonApiAutomationInAttributesImageExportsInner
from gooddata_api_client.model.json_api_automation_in_attributes_metadata import JsonApiAutomationInAttributesMetadata
from gooddata_api_client.model.json_api_automation_in_attributes_schedule import JsonApiAutomationInAttributesSchedule
from gooddata_api_client.model.json_api_automation_in_attributes_tabular_exports_inner import JsonApiAutomationInAttributesTabularExportsInner
from gooddata_api_client.model.json_api_automation_in_attributes_visual_exports_inner import JsonApiAutomationInAttributesVisualExportsInner
globals()['JsonApiAutomationInAttributesAlert'] = JsonApiAutomationInAttributesAlert
globals()['JsonApiAutomationInAttributesExternalRecipientsInner'] = JsonApiAutomationInAttributesExternalRecipientsInner
+ globals()['JsonApiAutomationInAttributesImageExportsInner'] = JsonApiAutomationInAttributesImageExportsInner
globals()['JsonApiAutomationInAttributesMetadata'] = JsonApiAutomationInAttributesMetadata
globals()['JsonApiAutomationInAttributesSchedule'] = JsonApiAutomationInAttributesSchedule
globals()['JsonApiAutomationInAttributesTabularExportsInner'] = JsonApiAutomationInAttributesTabularExportsInner
@@ -117,6 +119,7 @@ def openapi_types():
'description': (str,), # noqa: E501
'details': (bool, date, datetime, dict, float, int, list, str, none_type,), # noqa: E501
'external_recipients': ([JsonApiAutomationInAttributesExternalRecipientsInner],), # noqa: E501
+ 'image_exports': ([JsonApiAutomationInAttributesImageExportsInner],), # noqa: E501
'metadata': (JsonApiAutomationInAttributesMetadata,), # noqa: E501
'modified_at': (datetime,), # noqa: E501
'schedule': (JsonApiAutomationInAttributesSchedule,), # noqa: E501
@@ -139,6 +142,7 @@ def discriminator():
'description': 'description', # noqa: E501
'details': 'details', # noqa: E501
'external_recipients': 'externalRecipients', # noqa: E501
+ 'image_exports': 'imageExports', # noqa: E501
'metadata': 'metadata', # noqa: E501
'modified_at': 'modifiedAt', # noqa: E501
'schedule': 'schedule', # noqa: E501
@@ -196,6 +200,7 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501
description (str): [optional] # noqa: E501
details (bool, date, datetime, dict, float, int, list, str, none_type): Additional details to be included in the automated message.. [optional] # noqa: E501
external_recipients ([JsonApiAutomationInAttributesExternalRecipientsInner]): External recipients of the automation action results.. [optional] # noqa: E501
+ image_exports ([JsonApiAutomationInAttributesImageExportsInner]): [optional] # noqa: E501
metadata (JsonApiAutomationInAttributesMetadata): [optional] # noqa: E501
modified_at (datetime): [optional] # noqa: E501
schedule (JsonApiAutomationInAttributesSchedule): [optional] # noqa: E501
@@ -295,6 +300,7 @@ def __init__(self, *args, **kwargs): # noqa: E501
description (str): [optional] # noqa: E501
details (bool, date, datetime, dict, float, int, list, str, none_type): Additional details to be included in the automated message.. [optional] # noqa: E501
external_recipients ([JsonApiAutomationInAttributesExternalRecipientsInner]): External recipients of the automation action results.. [optional] # noqa: E501
+ image_exports ([JsonApiAutomationInAttributesImageExportsInner]): [optional] # noqa: E501
metadata (JsonApiAutomationInAttributesMetadata): [optional] # noqa: E501
modified_at (datetime): [optional] # noqa: E501
schedule (JsonApiAutomationInAttributesSchedule): [optional] # noqa: E501
diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_llm_endpoint_in_attributes.py b/gooddata-api-client/gooddata_api_client/model/json_api_llm_endpoint_in_attributes.py
index da478912f..bb8f47f5e 100644
--- a/gooddata-api-client/gooddata_api_client/model/json_api_llm_endpoint_in_attributes.py
+++ b/gooddata-api-client/gooddata_api_client/model/json_api_llm_endpoint_in_attributes.py
@@ -110,7 +110,6 @@ def openapi_types():
'llm_model': (str,), # noqa: E501
'llm_organization': (str, none_type,), # noqa: E501
'provider': (str,), # noqa: E501
- 'workspace_ids': ([str],), # noqa: E501
}
@cached_property
@@ -126,7 +125,6 @@ def discriminator():
'llm_model': 'llmModel', # noqa: E501
'llm_organization': 'llmOrganization', # noqa: E501
'provider': 'provider', # noqa: E501
- 'workspace_ids': 'workspaceIds', # noqa: E501
}
read_only_vars = {
@@ -179,7 +177,6 @@ def _from_openapi_data(cls, title, token, *args, **kwargs): # noqa: E501
llm_model (str): LLM Model. We provide a default model for each provider, but you can override it here.. [optional] # noqa: E501
llm_organization (str, none_type): Organization in LLM provider.. [optional] # noqa: E501
provider (str): LLM Provider.. [optional] if omitted the server will use the default value of "OPENAI" # noqa: E501
- workspace_ids ([str]): List of workspace IDs for which LLM endpoint is valid. If empty, it is valid for all workspaces.. [optional] # noqa: E501
"""
_check_type = kwargs.pop('_check_type', True)
@@ -276,7 +273,6 @@ def __init__(self, title, token, *args, **kwargs): # noqa: E501
llm_model (str): LLM Model. We provide a default model for each provider, but you can override it here.. [optional] # noqa: E501
llm_organization (str, none_type): Organization in LLM provider.. [optional] # noqa: E501
provider (str): LLM Provider.. [optional] if omitted the server will use the default value of "OPENAI" # noqa: E501
- workspace_ids ([str]): List of workspace IDs for which LLM endpoint is valid. If empty, it is valid for all workspaces.. [optional] # noqa: E501
"""
_check_type = kwargs.pop('_check_type', True)
diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_llm_endpoint_out_attributes.py b/gooddata-api-client/gooddata_api_client/model/json_api_llm_endpoint_out_attributes.py
index d49cc8122..4ab0145be 100644
--- a/gooddata-api-client/gooddata_api_client/model/json_api_llm_endpoint_out_attributes.py
+++ b/gooddata-api-client/gooddata_api_client/model/json_api_llm_endpoint_out_attributes.py
@@ -106,7 +106,6 @@ def openapi_types():
'llm_model': (str,), # noqa: E501
'llm_organization': (str, none_type,), # noqa: E501
'provider': (str,), # noqa: E501
- 'workspace_ids': ([str],), # noqa: E501
}
@cached_property
@@ -121,7 +120,6 @@ def discriminator():
'llm_model': 'llmModel', # noqa: E501
'llm_organization': 'llmOrganization', # noqa: E501
'provider': 'provider', # noqa: E501
- 'workspace_ids': 'workspaceIds', # noqa: E501
}
read_only_vars = {
@@ -173,7 +171,6 @@ def _from_openapi_data(cls, title, *args, **kwargs): # noqa: E501
llm_model (str): LLM Model. We provide a default model for each provider, but you can override it here.. [optional] # noqa: E501
llm_organization (str, none_type): Organization in LLM provider.. [optional] # noqa: E501
provider (str): LLM Provider.. [optional] if omitted the server will use the default value of "OPENAI" # noqa: E501
- workspace_ids ([str]): List of workspace IDs for which LLM endpoint is valid. If empty, it is valid for all workspaces.. [optional] # noqa: E501
"""
_check_type = kwargs.pop('_check_type', True)
@@ -268,7 +265,6 @@ def __init__(self, title, *args, **kwargs): # noqa: E501
llm_model (str): LLM Model. We provide a default model for each provider, but you can override it here.. [optional] # noqa: E501
llm_organization (str, none_type): Organization in LLM provider.. [optional] # noqa: E501
provider (str): LLM Provider.. [optional] if omitted the server will use the default value of "OPENAI" # noqa: E501
- workspace_ids ([str]): List of workspace IDs for which LLM endpoint is valid. If empty, it is valid for all workspaces.. [optional] # noqa: E501
"""
_check_type = kwargs.pop('_check_type', True)
diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_llm_endpoint_patch_attributes.py b/gooddata-api-client/gooddata_api_client/model/json_api_llm_endpoint_patch_attributes.py
index f7d8af56e..9d92632de 100644
--- a/gooddata-api-client/gooddata_api_client/model/json_api_llm_endpoint_patch_attributes.py
+++ b/gooddata-api-client/gooddata_api_client/model/json_api_llm_endpoint_patch_attributes.py
@@ -110,7 +110,6 @@ def openapi_types():
'provider': (str,), # noqa: E501
'title': (str,), # noqa: E501
'token': (str,), # noqa: E501
- 'workspace_ids': ([str],), # noqa: E501
}
@cached_property
@@ -126,7 +125,6 @@ def discriminator():
'provider': 'provider', # noqa: E501
'title': 'title', # noqa: E501
'token': 'token', # noqa: E501
- 'workspace_ids': 'workspaceIds', # noqa: E501
}
read_only_vars = {
@@ -177,7 +175,6 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501
provider (str): LLM Provider.. [optional] if omitted the server will use the default value of "OPENAI" # noqa: E501
title (str): User-facing title of the LLM Provider.. [optional] # noqa: E501
token (str): The token to use to connect to the LLM provider.. [optional] # noqa: E501
- workspace_ids ([str]): List of workspace IDs for which LLM endpoint is valid. If empty, it is valid for all workspaces.. [optional] # noqa: E501
"""
_check_type = kwargs.pop('_check_type', True)
@@ -270,7 +267,6 @@ def __init__(self, *args, **kwargs): # noqa: E501
provider (str): LLM Provider.. [optional] if omitted the server will use the default value of "OPENAI" # noqa: E501
title (str): User-facing title of the LLM Provider.. [optional] # noqa: E501
token (str): The token to use to connect to the LLM provider.. [optional] # noqa: E501
- workspace_ids ([str]): List of workspace IDs for which LLM endpoint is valid. If empty, it is valid for all workspaces.. [optional] # noqa: E501
"""
_check_type = kwargs.pop('_check_type', True)
diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_organization_setting_in_attributes.py b/gooddata-api-client/gooddata_api_client/model/json_api_organization_setting_in_attributes.py
index becc7cc91..03808a090 100644
--- a/gooddata-api-client/gooddata_api_client/model/json_api_organization_setting_in_attributes.py
+++ b/gooddata-api-client/gooddata_api_client/model/json_api_organization_setting_in_attributes.py
@@ -60,6 +60,7 @@ class JsonApiOrganizationSettingInAttributes(ModelNormal):
'TIMEZONE': "TIMEZONE",
'ACTIVE_THEME': "ACTIVE_THEME",
'ACTIVE_COLOR_PALETTE': "ACTIVE_COLOR_PALETTE",
+ 'ACTIVE_LLM_ENDPOINT': "ACTIVE_LLM_ENDPOINT",
'WHITE_LABELING': "WHITE_LABELING",
'LOCALE': "LOCALE",
'METADATA_LOCALE': "METADATA_LOCALE",
@@ -77,6 +78,7 @@ class JsonApiOrganizationSettingInAttributes(ModelNormal):
'JIT_PROVISIONING': "JIT_PROVISIONING",
'DASHBOARD_FILTERS_APPLY_MODE': "DASHBOARD_FILTERS_APPLY_MODE",
'ENABLE_SLIDES_EXPORT': "ENABLE_SLIDES_EXPORT",
+ 'AI_RATE_LIMIT': "AI_RATE_LIMIT",
},
}
diff --git a/gooddata-api-client/gooddata_api_client/model/measure_item.py b/gooddata-api-client/gooddata_api_client/model/measure_item.py
index c1ff1f149..aa26f1814 100644
--- a/gooddata-api-client/gooddata_api_client/model/measure_item.py
+++ b/gooddata-api-client/gooddata_api_client/model/measure_item.py
@@ -31,8 +31,8 @@
def lazy_import():
- from gooddata_api_client.model.measure_definition import MeasureDefinition
- globals()['MeasureDefinition'] = MeasureDefinition
+ from gooddata_api_client.model.measure_item_definition import MeasureItemDefinition
+ globals()['MeasureItemDefinition'] = MeasureItemDefinition
class MeasureItem(ModelNormal):
@@ -93,7 +93,7 @@ def openapi_types():
"""
lazy_import()
return {
- 'definition': (MeasureDefinition,), # noqa: E501
+ 'definition': (MeasureItemDefinition,), # noqa: E501
'local_identifier': (str,), # noqa: E501
}
@@ -118,7 +118,7 @@ def _from_openapi_data(cls, definition, local_identifier, *args, **kwargs): # n
"""MeasureItem - a model defined in OpenAPI
Args:
- definition (MeasureDefinition):
+ definition (MeasureItemDefinition):
local_identifier (str): Local identifier of the metric. This can be used to reference the metric in other parts of the execution definition.
Keyword Args:
@@ -209,7 +209,7 @@ def __init__(self, definition, local_identifier, *args, **kwargs): # noqa: E501
"""MeasureItem - a model defined in OpenAPI
Args:
- definition (MeasureDefinition):
+ definition (MeasureItemDefinition):
local_identifier (str): Local identifier of the metric. This can be used to reference the metric in other parts of the execution definition.
Keyword Args:
diff --git a/gooddata-api-client/gooddata_api_client/model/measure_item_definition.py b/gooddata-api-client/gooddata_api_client/model/measure_item_definition.py
new file mode 100644
index 000000000..b6def417f
--- /dev/null
+++ b/gooddata-api-client/gooddata_api_client/model/measure_item_definition.py
@@ -0,0 +1,354 @@
+"""
+ 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.model_utils import ( # noqa: F401
+ ApiTypeError,
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ cached_property,
+ change_keys_js_to_python,
+ convert_js_args_to_python_args,
+ date,
+ datetime,
+ file_type,
+ none_type,
+ validate_get_composed_info,
+ OpenApiModel
+)
+from gooddata_api_client.exceptions import ApiAttributeError
+
+
+def lazy_import():
+ from gooddata_api_client.model.arithmetic_measure_definition import ArithmeticMeasureDefinition
+ from gooddata_api_client.model.arithmetic_measure_definition_arithmetic_measure import ArithmeticMeasureDefinitionArithmeticMeasure
+ from gooddata_api_client.model.inline_measure_definition import InlineMeasureDefinition
+ from gooddata_api_client.model.inline_measure_definition_inline import InlineMeasureDefinitionInline
+ from gooddata_api_client.model.pop_dataset_measure_definition import PopDatasetMeasureDefinition
+ from gooddata_api_client.model.pop_dataset_measure_definition_previous_period_measure import PopDatasetMeasureDefinitionPreviousPeriodMeasure
+ from gooddata_api_client.model.pop_date_measure_definition import PopDateMeasureDefinition
+ from gooddata_api_client.model.pop_date_measure_definition_over_period_measure import PopDateMeasureDefinitionOverPeriodMeasure
+ from gooddata_api_client.model.pop_measure_definition import PopMeasureDefinition
+ from gooddata_api_client.model.simple_measure_definition import SimpleMeasureDefinition
+ from gooddata_api_client.model.simple_measure_definition_measure import SimpleMeasureDefinitionMeasure
+ globals()['ArithmeticMeasureDefinition'] = ArithmeticMeasureDefinition
+ globals()['ArithmeticMeasureDefinitionArithmeticMeasure'] = ArithmeticMeasureDefinitionArithmeticMeasure
+ globals()['InlineMeasureDefinition'] = InlineMeasureDefinition
+ globals()['InlineMeasureDefinitionInline'] = InlineMeasureDefinitionInline
+ globals()['PopDatasetMeasureDefinition'] = PopDatasetMeasureDefinition
+ globals()['PopDatasetMeasureDefinitionPreviousPeriodMeasure'] = PopDatasetMeasureDefinitionPreviousPeriodMeasure
+ globals()['PopDateMeasureDefinition'] = PopDateMeasureDefinition
+ globals()['PopDateMeasureDefinitionOverPeriodMeasure'] = PopDateMeasureDefinitionOverPeriodMeasure
+ globals()['PopMeasureDefinition'] = PopMeasureDefinition
+ globals()['SimpleMeasureDefinition'] = SimpleMeasureDefinition
+ globals()['SimpleMeasureDefinitionMeasure'] = SimpleMeasureDefinitionMeasure
+
+
+class MeasureItemDefinition(ModelComposed):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ additional_properties_type = None
+
+ _nullable = False
+
+ @cached_property
+ def openapi_types():
+ """
+ This must be a method because a model may have properties that are
+ of type self, this must run after the class is loaded
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ lazy_import()
+ return {
+ 'arithmetic_measure': (ArithmeticMeasureDefinitionArithmeticMeasure,), # noqa: E501
+ 'inline': (InlineMeasureDefinitionInline,), # noqa: E501
+ 'previous_period_measure': (PopDatasetMeasureDefinitionPreviousPeriodMeasure,), # noqa: E501
+ 'over_period_measure': (PopDateMeasureDefinitionOverPeriodMeasure,), # noqa: E501
+ 'measure': (SimpleMeasureDefinitionMeasure,), # noqa: E501
+ }
+
+ @cached_property
+ def discriminator():
+ return None
+
+
+ attribute_map = {
+ 'arithmetic_measure': 'arithmeticMeasure', # noqa: E501
+ 'inline': 'inline', # noqa: E501
+ 'previous_period_measure': 'previousPeriodMeasure', # noqa: E501
+ 'over_period_measure': 'overPeriodMeasure', # noqa: E501
+ 'measure': 'measure', # noqa: E501
+ }
+
+ read_only_vars = {
+ }
+
+ @classmethod
+ @convert_js_args_to_python_args
+ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501
+ """MeasureItemDefinition - a model defined in OpenAPI
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ arithmetic_measure (ArithmeticMeasureDefinitionArithmeticMeasure): [optional] # noqa: E501
+ inline (InlineMeasureDefinitionInline): [optional] # noqa: E501
+ previous_period_measure (PopDatasetMeasureDefinitionPreviousPeriodMeasure): [optional] # noqa: E501
+ over_period_measure (PopDateMeasureDefinitionOverPeriodMeasure): [optional] # noqa: E501
+ measure (SimpleMeasureDefinitionMeasure): [optional] # noqa: E501
+ """
+
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ self = super(OpenApiModel, cls).__new__(cls)
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ 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 in discarded_args and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ self._additional_properties_model_instances:
+ # discard variable.
+ continue
+ setattr(self, var_name, var_value)
+
+ return self
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_spec_property_naming',
+ '_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
+ """MeasureItemDefinition - a model defined in OpenAPI
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ arithmetic_measure (ArithmeticMeasureDefinitionArithmeticMeasure): [optional] # noqa: E501
+ inline (InlineMeasureDefinitionInline): [optional] # noqa: E501
+ previous_period_measure (PopDatasetMeasureDefinitionPreviousPeriodMeasure): [optional] # noqa: E501
+ over_period_measure (PopDateMeasureDefinitionOverPeriodMeasure): [optional] # noqa: E501
+ measure (SimpleMeasureDefinitionMeasure): [optional] # noqa: E501
+ """
+
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ 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 in discarded_args and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ 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': [
+ ],
+ 'oneOf': [
+ ArithmeticMeasureDefinition,
+ InlineMeasureDefinition,
+ PopDatasetMeasureDefinition,
+ PopDateMeasureDefinition,
+ PopMeasureDefinition,
+ SimpleMeasureDefinition,
+ ],
+ }
diff --git a/gooddata-api-client/gooddata_api_client/model/over.py b/gooddata-api-client/gooddata_api_client/model/over.py
new file mode 100644
index 000000000..dc7ed1d21
--- /dev/null
+++ b/gooddata-api-client/gooddata_api_client/model/over.py
@@ -0,0 +1,270 @@
+"""
+ 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.model_utils import ( # noqa: F401
+ ApiTypeError,
+ ModelComposed,
+ ModelNormal,
+ ModelSimple,
+ cached_property,
+ change_keys_js_to_python,
+ convert_js_args_to_python_args,
+ date,
+ datetime,
+ file_type,
+ none_type,
+ validate_get_composed_info,
+ OpenApiModel
+)
+from gooddata_api_client.exceptions import ApiAttributeError
+
+
+
+class Over(ModelNormal):
+ """NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
+
+ Do not edit the class manually.
+
+ Attributes:
+ allowed_values (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ with a capitalized key describing the allowed value and an allowed
+ value. These dicts store the allowed enum values.
+ attribute_map (dict): The key is attribute name
+ and the value is json key in definition.
+ discriminator_value_class_map (dict): A dict to go from the discriminator
+ variable value to the discriminator class name.
+ validations (dict): The key is the tuple path to the attribute
+ and the for var_name this is (var_name,). The value is a dict
+ that stores validations for max_length, min_length, max_items,
+ min_items, exclusive_maximum, inclusive_maximum, exclusive_minimum,
+ inclusive_minimum, and regex.
+ additional_properties_type (tuple): A tuple of classes accepted
+ as additional properties values.
+ """
+
+ allowed_values = {
+ }
+
+ validations = {
+ }
+
+ @cached_property
+ 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
+ """
+ return (bool, date, datetime, dict, float, int, list, str, none_type,) # noqa: E501
+
+ _nullable = False
+
+ @cached_property
+ def openapi_types():
+ """
+ This must be a method because a model may have properties that are
+ of type self, this must run after the class is loaded
+
+ Returns
+ openapi_types (dict): The key is attribute name
+ and the value is attribute type.
+ """
+ return {
+ 'attributes': ([str],), # noqa: E501
+ }
+
+ @cached_property
+ def discriminator():
+ return None
+
+
+ attribute_map = {
+ 'attributes': 'attributes', # noqa: E501
+ }
+
+ read_only_vars = {
+ }
+
+ _composed_schemas = {}
+
+ @classmethod
+ @convert_js_args_to_python_args
+ def _from_openapi_data(cls, attributes, *args, **kwargs): # noqa: E501
+ """Over - a model defined in OpenAPI
+
+ Args:
+ attributes ([str]):
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ """
+
+ _check_type = kwargs.pop('_check_type', True)
+ _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', ())
+
+ self = super(OpenApiModel, cls).__new__(cls)
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.attributes = attributes
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ self.additional_properties_type is None:
+ # discard variable.
+ continue
+ setattr(self, var_name, var_value)
+ return self
+
+ required_properties = set([
+ '_data_store',
+ '_check_type',
+ '_spec_property_naming',
+ '_path_to_item',
+ '_configuration',
+ '_visited_composed_classes',
+ ])
+
+ @convert_js_args_to_python_args
+ def __init__(self, attributes, *args, **kwargs): # noqa: E501
+ """Over - a model defined in OpenAPI
+
+ Args:
+ attributes ([str]):
+
+ Keyword Args:
+ _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.
+ Defaults to True
+ _path_to_item (tuple/list): This is a list of keys or values to
+ drill down to the model in received_data
+ when deserializing a response
+ _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)
+ _configuration (Configuration): the instance to use when
+ deserializing a file_type parameter.
+ If passed, type conversion is attempted
+ If omitted no type conversion is done.
+ _visited_composed_classes (tuple): This stores a tuple of
+ classes that we have traveled through so that
+ if we see that class again we will not use its
+ discriminator again.
+ When traveling through a discriminator, the
+ composed schema that is
+ is traveled through is added to this set.
+ For example if Animal has a discriminator
+ petType and we pass in "Dog", and the class Dog
+ allOf includes Animal, we move through Animal
+ once using the discriminator, and pick Dog.
+ Then in Dog, we will make an instance of the
+ Animal class but this time we won't travel
+ through its discriminator because we passed in
+ _visited_composed_classes = (Animal,)
+ """
+
+ _check_type = kwargs.pop('_check_type', 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', ())
+
+ if args:
+ for arg in args:
+ if isinstance(arg, dict):
+ kwargs.update(arg)
+ else:
+ raise ApiTypeError(
+ "Invalid positional arguments=%s passed to %s. Remove those invalid positional arguments." % (
+ args,
+ self.__class__.__name__,
+ ),
+ path_to_item=_path_to_item,
+ valid_classes=(self.__class__,),
+ )
+
+ self._data_store = {}
+ self._check_type = _check_type
+ self._spec_property_naming = _spec_property_naming
+ self._path_to_item = _path_to_item
+ self._configuration = _configuration
+ self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
+
+ self.attributes = attributes
+ for var_name, var_value in kwargs.items():
+ if var_name not in self.attribute_map and \
+ self._configuration is not None and \
+ self._configuration.discard_unknown_keys and \
+ 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.")
diff --git a/gooddata-api-client/gooddata_api_client/model/resolved_setting.py b/gooddata-api-client/gooddata_api_client/model/resolved_setting.py
index 941f39c00..df144b751 100644
--- a/gooddata-api-client/gooddata_api_client/model/resolved_setting.py
+++ b/gooddata-api-client/gooddata_api_client/model/resolved_setting.py
@@ -64,6 +64,7 @@ class ResolvedSetting(ModelNormal):
'TIMEZONE': "TIMEZONE",
'ACTIVE_THEME': "ACTIVE_THEME",
'ACTIVE_COLOR_PALETTE': "ACTIVE_COLOR_PALETTE",
+ 'ACTIVE_LLM_ENDPOINT': "ACTIVE_LLM_ENDPOINT",
'WHITE_LABELING': "WHITE_LABELING",
'LOCALE': "LOCALE",
'METADATA_LOCALE': "METADATA_LOCALE",
@@ -81,6 +82,7 @@ class ResolvedSetting(ModelNormal):
'JIT_PROVISIONING': "JIT_PROVISIONING",
'DASHBOARD_FILTERS_APPLY_MODE': "DASHBOARD_FILTERS_APPLY_MODE",
'ENABLE_SLIDES_EXPORT': "ENABLE_SLIDES_EXPORT",
+ 'AI_RATE_LIMIT': "AI_RATE_LIMIT",
},
}
diff --git a/gooddata-api-client/gooddata_api_client/model/visible_filter.py b/gooddata-api-client/gooddata_api_client/model/visible_filter.py
index 433340a50..443df540f 100644
--- a/gooddata-api-client/gooddata_api_client/model/visible_filter.py
+++ b/gooddata-api-client/gooddata_api_client/model/visible_filter.py
@@ -82,6 +82,7 @@ def openapi_types():
and the value is attribute type.
"""
return {
+ 'is_all_time_date_filter': (bool,), # noqa: E501
'local_identifier': (str,), # noqa: E501
'title': (str,), # noqa: E501
}
@@ -92,6 +93,7 @@ def discriminator():
attribute_map = {
+ 'is_all_time_date_filter': 'isAllTimeDateFilter', # noqa: E501
'local_identifier': 'localIdentifier', # noqa: E501
'title': 'title', # noqa: E501
}
@@ -137,6 +139,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,)
+ is_all_time_date_filter (bool): Indicates if the filter is an all-time date filter. Such a filter is not included in report computation, so there is no filter with the same 'localIdentifier' to be found. In such cases, this flag is used to inform the server to not search for the filter in the definitions and include it anyways.. [optional] if omitted the server will use the default value of False # noqa: E501
local_identifier (str): [optional] # noqa: E501
title (str): [optional] # noqa: E501
"""
@@ -224,6 +227,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,)
+ is_all_time_date_filter (bool): Indicates if the filter is an all-time date filter. Such a filter is not included in report computation, so there is no filter with the same 'localIdentifier' to be found. In such cases, this flag is used to inform the server to not search for the filter in the definitions and include it anyways.. [optional] if omitted the server will use the default value of False # noqa: E501
local_identifier (str): [optional] # noqa: E501
title (str): [optional] # noqa: E501
"""
diff --git a/gooddata-api-client/gooddata_api_client/model/webhook_automation_info.py b/gooddata-api-client/gooddata_api_client/model/webhook_automation_info.py
index c9759d7cf..f30536832 100644
--- a/gooddata-api-client/gooddata_api_client/model/webhook_automation_info.py
+++ b/gooddata-api-client/gooddata_api_client/model/webhook_automation_info.py
@@ -85,6 +85,7 @@ def openapi_types():
'dashboard_url': (str,), # noqa: E501
'id': (str,), # noqa: E501
'is_custom_dashboard_url': (bool,), # noqa: E501
+ 'dashboard_title': (str,), # noqa: E501
'title': (str,), # noqa: E501
}
@@ -97,6 +98,7 @@ def discriminator():
'dashboard_url': 'dashboardURL', # noqa: E501
'id': 'id', # noqa: E501
'is_custom_dashboard_url': 'isCustomDashboardURL', # noqa: E501
+ 'dashboard_title': 'dashboardTitle', # noqa: E501
'title': 'title', # noqa: E501
}
@@ -146,6 +148,7 @@ def _from_openapi_data(cls, dashboard_url, id, is_custom_dashboard_url, *args, *
Animal class but this time we won't travel
through its discriminator because we passed in
_visited_composed_classes = (Animal,)
+ dashboard_title (str): [optional] # noqa: E501
title (str): [optional] # noqa: E501
"""
@@ -240,6 +243,7 @@ def __init__(self, dashboard_url, id, is_custom_dashboard_url, *args, **kwargs):
Animal class but this time we won't travel
through its discriminator because we passed in
_visited_composed_classes = (Animal,)
+ dashboard_title (str): [optional] # noqa: E501
title (str): [optional] # noqa: E501
"""
diff --git a/gooddata-api-client/gooddata_api_client/model/webhook_message_data.py b/gooddata-api-client/gooddata_api_client/model/webhook_message_data.py
index 66f43b575..7885944b3 100644
--- a/gooddata-api-client/gooddata_api_client/model/webhook_message_data.py
+++ b/gooddata-api-client/gooddata_api_client/model/webhook_message_data.py
@@ -100,6 +100,7 @@ def openapi_types():
'alert': (AlertDescription,), # noqa: E501
'details': ({str: (str,)},), # noqa: E501
'filters': ([NotificationFilter],), # noqa: E501
+ 'image_exports': ([ExportResult],), # noqa: E501
'recipients': ([WebhookRecipient],), # noqa: E501
'remaining_action_count': (int,), # noqa: E501
'tabular_exports': ([ExportResult],), # noqa: E501
@@ -116,6 +117,7 @@ def discriminator():
'alert': 'alert', # noqa: E501
'details': 'details', # noqa: E501
'filters': 'filters', # noqa: E501
+ 'image_exports': 'imageExports', # noqa: E501
'recipients': 'recipients', # noqa: E501
'remaining_action_count': 'remainingActionCount', # noqa: E501
'tabular_exports': 'tabularExports', # noqa: E501
@@ -169,6 +171,7 @@ def _from_openapi_data(cls, automation, *args, **kwargs): # noqa: E501
alert (AlertDescription): [optional] # noqa: E501
details ({str: (str,)}): [optional] # noqa: E501
filters ([NotificationFilter]): [optional] # noqa: E501
+ image_exports ([ExportResult]): [optional] # noqa: E501
recipients ([WebhookRecipient]): [optional] # noqa: E501
remaining_action_count (int): [optional] # noqa: E501
tabular_exports ([ExportResult]): [optional] # noqa: E501
@@ -265,6 +268,7 @@ def __init__(self, automation, *args, **kwargs): # noqa: E501
alert (AlertDescription): [optional] # noqa: E501
details ({str: (str,)}): [optional] # noqa: E501
filters ([NotificationFilter]): [optional] # noqa: E501
+ image_exports ([ExportResult]): [optional] # noqa: E501
recipients ([WebhookRecipient]): [optional] # noqa: E501
remaining_action_count (int): [optional] # noqa: E501
tabular_exports ([ExportResult]): [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 b528cf807..e5044cccf 100644
--- a/gooddata-api-client/gooddata_api_client/models/__init__.py
+++ b/gooddata-api-client/gooddata_api_client/models/__init__.py
@@ -49,7 +49,9 @@
from gooddata_api_client.model.assignee_rule import AssigneeRule
from gooddata_api_client.model.attribute_execution_result_header import AttributeExecutionResultHeader
from gooddata_api_client.model.attribute_filter import AttributeFilter
+from gooddata_api_client.model.attribute_filter_by_date import AttributeFilterByDate
from gooddata_api_client.model.attribute_filter_elements import AttributeFilterElements
+from gooddata_api_client.model.attribute_filter_parent import AttributeFilterParent
from gooddata_api_client.model.attribute_format import AttributeFormat
from gooddata_api_client.model.attribute_header import AttributeHeader
from gooddata_api_client.model.attribute_header_attribute_header import AttributeHeaderAttributeHeader
@@ -62,6 +64,7 @@
from gooddata_api_client.model.automation_alert import AutomationAlert
from gooddata_api_client.model.automation_alert_condition import AutomationAlertCondition
from gooddata_api_client.model.automation_external_recipient import AutomationExternalRecipient
+from gooddata_api_client.model.automation_image_export import AutomationImageExport
from gooddata_api_client.model.automation_metadata import AutomationMetadata
from gooddata_api_client.model.automation_notification import AutomationNotification
from gooddata_api_client.model.automation_notification_all_of import AutomationNotificationAllOf
@@ -74,6 +77,7 @@
from gooddata_api_client.model.chat_history_result import ChatHistoryResult
from gooddata_api_client.model.chat_request import ChatRequest
from gooddata_api_client.model.chat_result import ChatResult
+from gooddata_api_client.model.chat_usage_response import ChatUsageResponse
from gooddata_api_client.model.clustering_request import ClusteringRequest
from gooddata_api_client.model.clustering_result import ClusteringResult
from gooddata_api_client.model.column_location import ColumnLocation
@@ -96,9 +100,18 @@
from gooddata_api_client.model.custom_label import CustomLabel
from gooddata_api_client.model.custom_metric import CustomMetric
from gooddata_api_client.model.custom_override import CustomOverride
+from gooddata_api_client.model.dashboard_attribute_filter import DashboardAttributeFilter
+from gooddata_api_client.model.dashboard_attribute_filter_attribute_filter import DashboardAttributeFilterAttributeFilter
+from gooddata_api_client.model.dashboard_attribute_filter_attribute_filter_all_of import DashboardAttributeFilterAttributeFilterAllOf
+from gooddata_api_client.model.dashboard_date_filter import DashboardDateFilter
+from gooddata_api_client.model.dashboard_date_filter_date_filter import DashboardDateFilterDateFilter
+from gooddata_api_client.model.dashboard_date_filter_date_filter_all_of import DashboardDateFilterDateFilterAllOf
+from gooddata_api_client.model.dashboard_filter import DashboardFilter
from gooddata_api_client.model.dashboard_permissions import DashboardPermissions
from gooddata_api_client.model.dashboard_permissions_assignment import DashboardPermissionsAssignment
from gooddata_api_client.model.dashboard_slides_template import DashboardSlidesTemplate
+from gooddata_api_client.model.dashboard_tabular_export_request import DashboardTabularExportRequest
+from gooddata_api_client.model.dashboard_tabular_export_request_dashboard_filters_override_inner import DashboardTabularExportRequestDashboardFiltersOverrideInner
from gooddata_api_client.model.data_column_locator import DataColumnLocator
from gooddata_api_client.model.data_column_locators import DataColumnLocators
from gooddata_api_client.model.data_source_parameter import DataSourceParameter
@@ -238,7 +251,7 @@
from gooddata_api_client.model.frequency_bucket import FrequencyBucket
from gooddata_api_client.model.frequency_properties import FrequencyProperties
from gooddata_api_client.model.generate_ldm_request import GenerateLdmRequest
-from gooddata_api_client.model.get_slides_export202_response_inner import GetSlidesExport202ResponseInner
+from gooddata_api_client.model.get_image_export202_response_inner import GetImageExport202ResponseInner
from gooddata_api_client.model.grain_identifier import GrainIdentifier
from gooddata_api_client.model.granted_permission import GrantedPermission
from gooddata_api_client.model.granularities_formatting import GranularitiesFormatting
@@ -248,6 +261,7 @@
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.image_export_request import ImageExportRequest
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
@@ -325,6 +339,7 @@
from gooddata_api_client.model.json_api_automation_in_attributes import JsonApiAutomationInAttributes
from gooddata_api_client.model.json_api_automation_in_attributes_alert import JsonApiAutomationInAttributesAlert
from gooddata_api_client.model.json_api_automation_in_attributes_external_recipients_inner import JsonApiAutomationInAttributesExternalRecipientsInner
+from gooddata_api_client.model.json_api_automation_in_attributes_image_exports_inner import JsonApiAutomationInAttributesImageExportsInner
from gooddata_api_client.model.json_api_automation_in_attributes_metadata import JsonApiAutomationInAttributesMetadata
from gooddata_api_client.model.json_api_automation_in_attributes_schedule import JsonApiAutomationInAttributesSchedule
from gooddata_api_client.model.json_api_automation_in_attributes_tabular_exports_inner import JsonApiAutomationInAttributesTabularExportsInner
@@ -753,6 +768,7 @@
from gooddata_api_client.model.measure_group_headers import MeasureGroupHeaders
from gooddata_api_client.model.measure_header import MeasureHeader
from gooddata_api_client.model.measure_item import MeasureItem
+from gooddata_api_client.model.measure_item_definition import MeasureItemDefinition
from gooddata_api_client.model.measure_result_header import MeasureResultHeader
from gooddata_api_client.model.measure_value_filter import MeasureValueFilter
from gooddata_api_client.model.metric import Metric
@@ -772,6 +788,7 @@
from gooddata_api_client.model.object_links import ObjectLinks
from gooddata_api_client.model.object_links_container import ObjectLinksContainer
from gooddata_api_client.model.organization_permission_assignment import OrganizationPermissionAssignment
+from gooddata_api_client.model.over import Over
from gooddata_api_client.model.page_metadata import PageMetadata
from gooddata_api_client.model.paging import Paging
from gooddata_api_client.model.parameter import Parameter
diff --git a/gooddata-flexconnect/LICENSE.txt b/gooddata-flexconnect/LICENSE.txt
index bc5424ad7..f27fbe6fb 120000
--- a/gooddata-flexconnect/LICENSE.txt
+++ b/gooddata-flexconnect/LICENSE.txt
@@ -1 +1 @@
-../OSS LICENSES/LICENSE (gooddata-flexfun).txt
\ No newline at end of file
+../OSS LICENSES/LICENSE (gooddata-flexconnect).txt
\ No newline at end of file
diff --git a/gooddata-pandas/gooddata_pandas/dataframe.py b/gooddata-pandas/gooddata_pandas/dataframe.py
index 2130a17aa..8045baa92 100644
--- a/gooddata-pandas/gooddata_pandas/dataframe.py
+++ b/gooddata-pandas/gooddata_pandas/dataframe.py
@@ -183,6 +183,21 @@ def for_visualization(self, visualization_id: str, auto_index: bool = True) -> p
return self.for_items(columns, filter_by=filter_by, auto_index=auto_index)
+ def for_created_visualization(
+ self, created_visualizations_response: dict
+ ) -> tuple[pandas.DataFrame, DataFrameMetadata]:
+ """
+ Creates a data frame using a created visualization.
+
+ Args:
+ created_visualizations_response (dict): Created visualization response.
+
+ Returns:
+ pandas.DataFrame: A DataFrame instance.
+ """
+ execution_definition = self._sdk.compute.build_exec_def_from_chat_result(created_visualizations_response)
+ return self.for_exec_def(exec_def=execution_definition)
+
def result_cache_metadata_for_exec_result_id(self, result_id: str) -> ResultCacheMetadata:
"""
Retrieves result cache metadata for given :result_id:
diff --git a/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_created_visualization.yaml b/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_created_visualization.yaml
new file mode 100644
index 000000000..ccc31d0ae
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_created_visualization.yaml
@@ -0,0 +1,2500 @@
+# (C) 2025 GoodData Corporation
+version: 1
+interactions:
+ - request:
+ method: GET
+ uri: http://localhost:3000/api/v1/entities/workspaces/demo_testing?include=workspaces
+ 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:
+ Cache-Control:
+ - max-age=5, private
+ Content-Length:
+ - '172'
+ Content-Type:
+ - application/problem+json
+ DATE: &id001
+ - PLACEHOLDER
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string:
+ detail: The requested endpoint does not exist or you do not have permission
+ to access it.
+ status: 404
+ title: Not Found
+ traceId: c173d460da8c782d6634327e5ba6671a
+ - request:
+ method: GET
+ uri: http://localhost:3000/api/v1/entities/workspaces/demo_testing?include=workspaces
+ 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:
+ Cache-Control:
+ - max-age=5, private
+ Content-Length:
+ - '172'
+ Content-Type:
+ - application/problem+json
+ DATE: *id001
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string:
+ detail: The requested endpoint does not exist or you do not have permission
+ to access it.
+ status: 404
+ title: Not Found
+ traceId: 57cb93026e7801afa1da2cd2d70409bf
+ - request:
+ method: POST
+ uri: http://localhost:3000/api/v1/entities/workspaces
+ body:
+ data:
+ id: demo_testing
+ type: workspace
+ attributes:
+ name: demo_testing
+ 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:
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ Content-Length:
+ - '167'
+ Content-Type:
+ - application/vnd.gooddata.api+json
+ DATE: *id001
+ Expires:
+ - '0'
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Pragma:
+ - no-cache
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string:
+ data:
+ id: demo_testing
+ type: workspace
+ attributes:
+ name: demo_testing
+ links:
+ self: http://localhost:3000/api/v1/entities/workspaces/demo_testing
+ - request:
+ method: PUT
+ uri: http://localhost:3000/api/v1/layout/workspaces/demo_testing/logicalModel
+ body:
+ ldm:
+ datasets:
+ - grain:
+ - id: campaign_channel_id
+ type: attribute
+ id: campaign_channels
+ references:
+ - identifier:
+ id: campaigns
+ type: dataset
+ multivalue: false
+ sources:
+ - column: campaign_id
+ target:
+ id: campaign_id
+ type: attribute
+ dataType: INT
+ title: Campaign channels
+ description: Campaign channels
+ attributes:
+ - id: campaign_channel_id
+ labels: []
+ sourceColumn: campaign_channel_id
+ title: Campaign channel id
+ sourceColumnDataType: STRING
+ description: Campaign channel id
+ tags:
+ - Campaign channels
+ - id: campaign_channels.category
+ labels: []
+ sourceColumn: category
+ title: Category
+ sourceColumnDataType: STRING
+ description: Category
+ tags:
+ - Campaign channels
+ - id: type
+ labels: []
+ sourceColumn: type
+ title: Type
+ sourceColumnDataType: STRING
+ description: Type
+ tags:
+ - Campaign channels
+ facts:
+ - id: budget
+ sourceColumn: budget
+ title: Budget
+ sourceColumnDataType: NUMERIC
+ description: Budget
+ tags:
+ - Campaign channels
+ - id: spend
+ sourceColumn: spend
+ title: Spend
+ sourceColumnDataType: NUMERIC
+ description: Spend
+ tags:
+ - Campaign channels
+ dataSourceTableId:
+ dataSourceId: pg_local_docker-demo
+ id: campaign_channels
+ type: dataSource
+ path:
+ - demo_6d9051d9069a8468
+ - campaign_channels
+ tags:
+ - Campaign channels
+ - grain:
+ - id: campaign_id
+ type: attribute
+ id: campaigns
+ references: []
+ title: Campaigns
+ description: Campaigns
+ attributes:
+ - id: campaign_id
+ labels: []
+ sourceColumn: campaign_id
+ title: Campaign id
+ sourceColumnDataType: INT
+ description: Campaign id
+ tags:
+ - Campaigns
+ - id: campaign_name
+ labels: []
+ sourceColumn: campaign_name
+ title: Campaign name
+ sourceColumnDataType: STRING
+ description: Campaign name
+ tags:
+ - Campaigns
+ facts: []
+ dataSourceTableId:
+ dataSourceId: pg_local_docker-demo
+ id: campaigns
+ type: dataSource
+ path:
+ - demo_6d9051d9069a8468
+ - campaigns
+ tags:
+ - Campaigns
+ - grain:
+ - id: customer_id
+ type: attribute
+ id: customers
+ references: []
+ title: Customers
+ description: Customers
+ attributes:
+ - id: customer_id
+ labels: []
+ sourceColumn: customer_id
+ title: Customer id
+ sourceColumnDataType: INT
+ description: Customer id
+ tags:
+ - Customers
+ - id: customer_name
+ labels: []
+ sourceColumn: customer_name
+ title: Customer name
+ sourceColumnDataType: STRING
+ description: Customer name
+ tags:
+ - Customers
+ - id: region
+ labels: []
+ sourceColumn: region
+ title: Region
+ sourceColumnDataType: STRING
+ description: Region
+ tags:
+ - Customers
+ - id: state
+ labels:
+ - id: geo__state__location
+ sourceColumn: geo__state__location
+ title: Location
+ sourceColumnDataType: STRING
+ description: Location
+ tags:
+ - Customers
+ sourceColumn: state
+ title: State
+ sourceColumnDataType: STRING
+ description: State
+ tags:
+ - Customers
+ facts: []
+ dataSourceTableId:
+ dataSourceId: pg_local_docker-demo
+ id: customers
+ type: dataSource
+ path:
+ - demo_6d9051d9069a8468
+ - customers
+ tags:
+ - Customers
+ - grain:
+ - id: order_line_id
+ type: attribute
+ id: order_lines
+ references:
+ - identifier:
+ id: campaigns
+ type: dataset
+ multivalue: false
+ sources:
+ - column: campaign_id
+ target:
+ id: campaign_id
+ type: attribute
+ dataType: INT
+ - identifier:
+ id: customers
+ type: dataset
+ multivalue: false
+ sources:
+ - column: customer_id
+ target:
+ id: customer_id
+ type: attribute
+ dataType: INT
+ - identifier:
+ id: date
+ type: dataset
+ multivalue: false
+ sources:
+ - column: date
+ target:
+ id: date
+ type: date
+ dataType: DATE
+ - identifier:
+ id: products
+ type: dataset
+ multivalue: false
+ sources:
+ - column: product_id
+ target:
+ id: product_id
+ type: attribute
+ dataType: INT
+ title: Order lines
+ description: Order lines
+ attributes:
+ - id: order_id
+ labels: []
+ sourceColumn: order_id
+ title: Order id
+ sourceColumnDataType: STRING
+ description: Order id
+ tags:
+ - Order lines
+ - id: order_line_id
+ labels: []
+ sourceColumn: order_line_id
+ title: Order line id
+ sourceColumnDataType: STRING
+ description: Order line id
+ tags:
+ - Order lines
+ - id: order_status
+ labels: []
+ sourceColumn: order_status
+ title: Order status
+ sourceColumnDataType: STRING
+ description: Order status
+ tags:
+ - Order lines
+ facts:
+ - id: price
+ sourceColumn: price
+ title: Price
+ sourceColumnDataType: NUMERIC
+ description: Price
+ tags:
+ - Order lines
+ - id: quantity
+ sourceColumn: quantity
+ title: Quantity
+ sourceColumnDataType: NUMERIC
+ description: Quantity
+ tags:
+ - Order lines
+ dataSourceTableId:
+ dataSourceId: pg_local_docker-demo
+ id: order_lines
+ type: dataSource
+ path:
+ - demo_6d9051d9069a8468
+ - order_lines
+ tags:
+ - Order lines
+ workspaceDataFilterColumns:
+ - dataType: STRING
+ name: wdf__region
+ - dataType: STRING
+ name: wdf__state
+ - grain:
+ - id: product_id
+ type: attribute
+ id: products
+ references: []
+ title: Products
+ description: Products
+ attributes:
+ - id: product_id
+ labels: []
+ sourceColumn: product_id
+ title: Product id
+ sourceColumnDataType: INT
+ description: Product id
+ tags:
+ - Products
+ - id: product_name
+ labels: []
+ sourceColumn: product_name
+ title: Product name
+ sourceColumnDataType: STRING
+ description: Product name
+ tags:
+ - Products
+ - id: products.category
+ labels: []
+ sourceColumn: category
+ title: Category
+ sourceColumnDataType: STRING
+ description: Category
+ tags:
+ - Products
+ facts: []
+ dataSourceTableId:
+ dataSourceId: pg_local_docker-demo
+ id: products
+ type: dataSource
+ path:
+ - demo_6d9051d9069a8468
+ - products
+ tags:
+ - Products
+ dateInstances:
+ - granularities:
+ - DAY
+ - WEEK
+ - MONTH
+ - QUARTER
+ - YEAR
+ granularitiesFormatting:
+ titleBase: ''
+ titlePattern: '%titleBase - %granularityTitle'
+ id: date
+ title: Date
+ description: ''
+ tags:
+ - Date
+ 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:
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ DATE: *id001
+ Expires:
+ - '0'
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Pragma:
+ - no-cache
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string: ''
+ - request:
+ method: PUT
+ uri: http://localhost:3000/api/v1/layout/workspaces/demo_testing/analyticsModel
+ body:
+ analytics:
+ analyticalDashboards:
+ - content:
+ filterContextRef:
+ identifier:
+ id: 4717b786-2c2e-4596-adb5-4f8b0ab0e19a
+ type: filterContext
+ layout:
+ sections:
+ - header:
+ description: All in one description
+ title: All in one title
+ items:
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: top_10_customers
+ type: visualizationObject
+ localIdentifier: 2c7400ac-5f63-46f8-aa12-a2debe13fd14
+ properties: {}
+ title: Top 10 Customers
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: revenue_by_product
+ type: visualizationObject
+ localIdentifier: a50daab7-fb78-45eb-a2b4-d5cc8cbd89e9
+ properties: {}
+ title: Revenue by Product
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: revenue_by_category_trend
+ type: visualizationObject
+ localIdentifier: efccc783-5896-4eb6-890f-2e51ece3f159
+ properties: {}
+ title: Revenue by Category Trend
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: product_saleability
+ type: visualizationObject
+ localIdentifier: d738d85f-e935-4e2c-b8b4-a8b456f55079
+ properties: {}
+ title: Product Saleability
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: product_categories_pie_chart
+ type: visualizationObject
+ localIdentifier: 8c194c85-bad6-42da-b4e3-08d270278316
+ properties: {}
+ title: Product Categories Pie Chart
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: percentage_of_customers_by_region
+ type: visualizationObject
+ localIdentifier: 2c3307b2-581f-4bab-9252-6b5279565b24
+ properties: {}
+ title: Percentage of Customers by Region
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: customers_trend
+ type: visualizationObject
+ localIdentifier: 87505bb0-d954-4add-811d-f4e75e431660
+ properties: {}
+ title: Customers Trend
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: campaign_spend
+ type: visualizationObject
+ localIdentifier: 0cb01f6a-6ea6-4c22-bb12-ded00a9eac66
+ properties: {}
+ title: Campaign Spend
+ type: insight
+ - size:
+ xl:
+ gridWidth: 12
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: percent_revenue_per_product_by_customer_and_category
+ type: visualizationObject
+ localIdentifier: 2213d6e4-6df7-458e-806d-f02bae5ce66a
+ properties: {}
+ title: '% Revenue per Product by Customer and Category'
+ type: insight
+ type: IDashboardLayoutSection
+ type: IDashboardLayout
+ version: '2'
+ id: b2f2d436-9831-4fe0-81df-8c59fd33242b
+ title: All visualizations 1 with custom filter
+ description: ''
+ analyticalDashboardExtensions: []
+ attributeHierarchies: []
+ dashboardPlugins: []
+ filterContexts:
+ - content:
+ filters:
+ - attributeFilter:
+ attributeElements:
+ uris:
+ - Biolid
+ - ChalkTalk
+ - Compglass
+ - Elentrix
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ filterElementsBy: []
+ localIdentifier: 6b94bbb585d44c79967867719e524fae
+ negativeSelection: false
+ selectionMode: multi
+ version: '2'
+ id: 4717b786-2c2e-4596-adb5-4f8b0ab0e19a
+ title: filterContext
+ description: ''
+ - content:
+ filters:
+ - dateFilter:
+ from: '0'
+ granularity: GDC.time.year
+ to: '0'
+ type: relative
+ version: '2'
+ id: 9f2b1f37-befa-450e-a6cc-dc576845c412
+ title: filterContext
+ description: ''
+ metrics:
+ - content:
+ format: '#,##0'
+ maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id})
+ id: amount_of_active_customers
+ title: '# of Active Customers'
+ description: ''
+ - content:
+ format: '#,##0'
+ maql: SELECT COUNT({attribute/order_id})
+ id: amount_of_orders
+ title: '# of Orders'
+ description: ''
+ - content:
+ format: '#,##0'
+ maql: 'SELECT {metric/amount_of_active_customers} WHERE (SELECT {metric/revenue}
+ BY {attribute/customer_id}) > 10000 '
+ id: amount_of_top_customers
+ title: '# of Top Customers'
+ description: ''
+ - content:
+ format: '#,##0.00'
+ maql: SELECT {metric/amount_of_orders} WHERE NOT ({label/order_status}
+ IN ("null", "Returned", "Canceled"))
+ id: amount_of_valid_orders
+ title: '# of Valid Orders'
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT SUM({fact/spend})
+ id: campaign_spend
+ title: Campaign Spend
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT SUM({fact/price}*{fact/quantity})
+ id: order_amount
+ title: Order Amount
+ description: ''
+ - content:
+ format: '#,##0.0%'
+ maql: SELECT {metric/revenue} / {metric/total_revenue}
+ id: percent_revenue
+ title: '% Revenue'
+ description: ''
+ - content:
+ format: '#,##0.0%'
+ maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\
+ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}"
+ id: percent_revenue_from_top_10_customers
+ title: '% Revenue from Top 10 Customers'
+ description: ''
+ - content:
+ format: '#,##0.0%'
+ maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10_percent}\
+ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}"
+ id: percent_revenue_from_top_10_percent_customers
+ title: '% Revenue from Top 10% Customers'
+ description: ''
+ - content:
+ format: '#,##0.0%'
+ maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10_percent}\
+ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}"
+ id: percent_revenue_from_top_10_percent_products
+ title: '% Revenue from Top 10% Products'
+ description: ''
+ - content:
+ format: '#,##0.0%'
+ maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\
+ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}"
+ id: percent_revenue_from_top_10_products
+ title: '% Revenue from Top 10 Products'
+ description: ''
+ - content:
+ format: '#,##0.0%'
+ maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY {attribute/products.category},
+ ALL OTHER)
+ id: percent_revenue_in_category
+ title: '% Revenue in Category'
+ description: ''
+ - content:
+ format: '#,##0.0%'
+ maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id})
+ id: percent_revenue_per_product
+ title: '% Revenue per Product'
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT {metric/order_amount} WHERE NOT ({label/order_status}
+ IN ("null", "Returned", "Canceled"))
+ id: revenue
+ title: Revenue
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing")
+ id: revenue-clothing
+ title: Revenue (Clothing)
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} WHERE {label/products.category} IN (
+ "Electronics")
+ id: revenue-electronic
+ title: Revenue (Electronic)
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home")
+ id: revenue-home
+ title: Revenue (Home)
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor")
+ id: revenue-outdoor
+ title: Revenue (Outdoor)
+ description: ''
+ - content:
+ format: $#,##0.0
+ maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id})
+ id: revenue_per_customer
+ title: Revenue per Customer
+ description: ''
+ - content:
+ format: $#,##0.0
+ maql: SELECT {metric/revenue} / {metric/campaign_spend}
+ id: revenue_per_dollar_spent
+ title: Revenue per Dollar Spent
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue})
+ id: revenue_top_10
+ title: Revenue / Top 10
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue})
+ id: revenue_top_10_percent
+ title: Revenue / Top 10%
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} BY ALL OTHER
+ id: total_revenue
+ title: Total Revenue
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER
+ id: total_revenue-no_filters
+ title: Total Revenue (No Filters)
+ description: ''
+ visualizationObjects:
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: campaign_spend
+ type: metric
+ localIdentifier: d319bcb2d8c04442a684e3b3cd063381
+ title: Campaign Spend
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: campaign_channels.category
+ type: label
+ localIdentifier: 291c085e7df8420db84117ca49f59c49
+ localIdentifier: view
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: campaign_name
+ type: label
+ localIdentifier: d9dd143d647d4d148405a60ec2cf59bc
+ localIdentifier: segment
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: type
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: campaign_channels.category
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: campaign_name
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ legend:
+ position: bottom
+ version: '2'
+ visualizationUrl: local:treemap
+ id: campaign_spend
+ title: Campaign Spend
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ alias: Active Customers
+ definition:
+ measureDefinition:
+ computeRatio: false
+ filters: []
+ item:
+ identifier:
+ id: amount_of_active_customers
+ type: metric
+ localIdentifier: 2ba0b87b59ca41a4b1530e81a5c1d081
+ title: '# of Active Customers'
+ localIdentifier: measures
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue_per_customer
+ type: metric
+ localIdentifier: ec0606894b9f4897b7beaf1550608928
+ title: Revenue per Customer
+ localIdentifier: secondary_measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: date.month
+ type: label
+ localIdentifier: 0de7d7f08af7480aa636857a26be72b6
+ localIdentifier: view
+ filters:
+ - relativeDateFilter:
+ dataSet:
+ identifier:
+ id: date
+ type: dataset
+ from: -11
+ granularity: GDC.time.month
+ to: 0
+ properties:
+ controls:
+ colorMapping:
+ - color:
+ type: guid
+ value: '20'
+ id: 2ba0b87b59ca41a4b1530e81a5c1d081
+ - color:
+ type: guid
+ value: '4'
+ id: ec0606894b9f4897b7beaf1550608928
+ dualAxis: true
+ legend:
+ position: bottom
+ primaryChartType: column
+ secondaryChartType: line
+ secondary_yaxis:
+ measures:
+ - ec0606894b9f4897b7beaf1550608928
+ xaxis:
+ name:
+ visible: false
+ rotation: auto
+ version: '2'
+ visualizationUrl: local:combo2
+ id: customers_trend
+ title: Customers Trend
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: percent_revenue_per_product
+ type: metric
+ localIdentifier: 08d8346c1ce7438994b251991c0fbf65
+ title: '% Revenue per Product'
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: b2350c06688b4da9b3833ebcce65527f
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: customer_name
+ type: label
+ localIdentifier: 7a4045fd00ac44579f52406df679435f
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: 6a003ffd14994237ba64c4a02c488429
+ - attribute:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: 75ea396d0c8b48098e31dccf8b5801d3
+ localIdentifier: attribute
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: customer_name
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ properties:
+ sortItems:
+ - attributeSortItem:
+ attributeIdentifier: 7a4045fd00ac44579f52406df679435f
+ direction: asc
+ version: '2'
+ visualizationUrl: local:table
+ id: percent_revenue_per_product_by_customer_and_category
+ title: '% Revenue per Product by Customer and Category'
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: amount_of_active_customers
+ type: metric
+ localIdentifier: 1a14cdc1293c46e89a2e25d3e741d235
+ title: '# of Active Customers'
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: date.month
+ type: label
+ localIdentifier: c1feca1864244ec2ace7a9b9d7fda231
+ localIdentifier: view
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: region
+ type: label
+ localIdentifier: 530cddbd7ca04d039e73462d81ed44d5
+ localIdentifier: stack
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: region
+ type: label
+ notIn:
+ values: []
+ - relativeDateFilter:
+ dataSet:
+ identifier:
+ id: date
+ type: dataset
+ from: -11
+ granularity: GDC.time.month
+ to: 0
+ properties:
+ controls:
+ legend:
+ position: bottom
+ stackMeasuresToPercent: true
+ version: '2'
+ visualizationUrl: local:area
+ id: percentage_of_customers_by_region
+ title: Percentage of Customers by Region
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 590d332ef686468b8878ae41b23341c6
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: b166c71091864312a14c7ae8ff886ffe
+ localIdentifier: view
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: e920a50e0bbb49788df0aac53634c1cd
+ localIdentifier: segment
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ legend:
+ position: bottom
+ version: '2'
+ visualizationUrl: local:treemap
+ id: product_breakdown
+ title: Product Breakdown
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ computeRatio: true
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 162b857af49d45769bc12604a5c192b9
+ title: '% Revenue'
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: fe513cef1c6244a5ac21c5f49c56b108
+ localIdentifier: view
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ dataLabels:
+ visible: auto
+ legend:
+ position: bottom
+ version: '2'
+ visualizationUrl: local:donut
+ id: product_categories_pie_chart
+ title: Product Categories Pie Chart
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ alias: Previous Period
+ definition:
+ popMeasureDefinition:
+ measureIdentifier: c82e025fa2db4afea9a600a424591dbe
+ popAttribute:
+ identifier:
+ id: date.year
+ type: label
+ localIdentifier: c82e025fa2db4afea9a600a424591dbe_pop
+ - measure:
+ alias: This Period
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: c82e025fa2db4afea9a600a424591dbe
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: c804ef5ba7944a5a9f360c86a9e95e9a
+ localIdentifier: view
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ - relativeDateFilter:
+ dataSet:
+ identifier:
+ id: date
+ type: dataset
+ from: -11
+ granularity: GDC.time.month
+ to: 0
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ legend:
+ position: bottom
+ stackMeasures: false
+ xaxis:
+ name:
+ visible: false
+ yaxis:
+ name:
+ visible: false
+ version: '2'
+ visualizationUrl: local:column
+ id: product_revenue_comparison-over_previous_period
+ title: Product Revenue Comparison (over previous period)
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ alias: Number of Orders
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: amount_of_orders
+ type: metric
+ localIdentifier: aeb5d51a162d4b59aba3bd6ddebcc780
+ title: '# of Orders'
+ localIdentifier: measures
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 94b3edd3a73c4a48a4d13bbe9442cc98
+ title: Revenue
+ localIdentifier: secondary_measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: d2a991bdd123448eb2be73d79f1180c4
+ localIdentifier: attribute
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ dataLabels:
+ visible: auto
+ grid:
+ enabled: true
+ version: '2'
+ visualizationUrl: local:scatter
+ id: product_saleability
+ title: Product Saleability
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ alias: Items Sold
+ definition:
+ measureDefinition:
+ aggregation: sum
+ filters: []
+ item:
+ identifier:
+ id: quantity
+ type: fact
+ format: '#,##0.00'
+ localIdentifier: 29486504dd0e4a36a18b0b2f792d3a46
+ title: Sum of Quantity
+ - measure:
+ definition:
+ measureDefinition:
+ aggregation: avg
+ filters: []
+ item:
+ identifier:
+ id: price
+ type: fact
+ format: '#,##0.00'
+ localIdentifier: aa6391acccf1452f8011201aef9af492
+ title: Avg Price
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: percent_revenue_in_category
+ type: metric
+ localIdentifier: 2cd39539d8da46c9883e63caa3ba7cc0
+ title: '% Revenue in Category'
+ - measure:
+ alias: Total Revenue
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 9a0f08331c094c7facf2a0b4f418de0a
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: 06bc6b3b9949466494e4f594c11f1bff
+ - attribute:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: 192668bfb6a74e9ab7b5d1ce7cb68ea3
+ localIdentifier: attribute
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: customer_name
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ properties:
+ sortItems:
+ - attributeSortItem:
+ attributeIdentifier: 06bc6b3b9949466494e4f594c11f1bff
+ direction: asc
+ version: '2'
+ visualizationUrl: local:table
+ id: revenue_and_quantity_by_product_and_category
+ title: Revenue and Quantity by Product and Category
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 7df6c34387744d69b23ec92e1a5cf543
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: date.month
+ type: label
+ localIdentifier: 4bb4fc1986c546de9ad976e6ec23fed4
+ localIdentifier: trend
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: 34bddcb1cd024902a82396216b0fa9d8
+ localIdentifier: segment
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ - relativeDateFilter:
+ dataSet:
+ identifier:
+ id: date
+ type: dataset
+ granularity: GDC.time.year
+ properties:
+ controls:
+ legend:
+ position: bottom
+ version: '2'
+ visualizationUrl: local:line
+ id: revenue_by_category_trend
+ title: Revenue by Category Trend
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 4ae3401bdbba4938afe983df4ba04e1c
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: 1c8ba72dbfc84ddd913bf81dc355c427
+ localIdentifier: view
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ properties: {}
+ version: '2'
+ visualizationUrl: local:bar
+ id: revenue_by_product
+ title: Revenue by Product
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: campaign_spend
+ type: metric
+ localIdentifier: 13a50d811e474ac6808d8da7f4673b35
+ title: Campaign Spend
+ localIdentifier: measures
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue_per_dollar_spent
+ type: metric
+ localIdentifier: a0f15e82e6334280a44dbedc7d086e7c
+ title: Revenue per Dollar Spent
+ localIdentifier: secondary_measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: campaign_name
+ type: label
+ localIdentifier: 1d9fa968bafb423eb29c938dfb1207ff
+ localIdentifier: attribute
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: campaign_name
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ xaxis:
+ min: '0'
+ yaxis:
+ min: '0'
+ version: '2'
+ visualizationUrl: local:scatter
+ id: revenue_per_usd_vs_spend_by_campaign
+ title: Revenue per $ vs Spend by Campaign
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ computeRatio: false
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 60c854969a9c4c278ab596d99c222e92
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - measure:
+ alias: Number of Orders
+ definition:
+ measureDefinition:
+ computeRatio: false
+ filters: []
+ item:
+ identifier:
+ id: amount_of_orders
+ type: metric
+ localIdentifier: c2fa7ef48cc54af99f8c280eb451e051
+ title: '# of Orders'
+ localIdentifier: secondary_measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: date.month
+ type: label
+ localIdentifier: 413ac374b65648fa96826ca01d47bdda
+ localIdentifier: view
+ filters:
+ - relativeDateFilter:
+ dataSet:
+ identifier:
+ id: date
+ type: dataset
+ from: -3
+ granularity: GDC.time.quarter
+ to: 0
+ properties:
+ controls:
+ dualAxis: true
+ legend:
+ position: bottom
+ primaryChartType: column
+ secondaryChartType: line
+ secondary_yaxis:
+ measures:
+ - c2fa7ef48cc54af99f8c280eb451e051
+ xaxis:
+ name:
+ visible: false
+ rotation: auto
+ version: '2'
+ visualizationUrl: local:combo2
+ id: revenue_trend
+ title: Revenue Trend
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue_top_10
+ type: metric
+ localIdentifier: 3f127ccfe57a40399e23f9ae2a4ad810
+ title: Revenue / Top 10
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: customer_name
+ type: label
+ localIdentifier: f4e39e24f11e4827a191c30d65c89d2c
+ localIdentifier: view
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: state
+ type: label
+ localIdentifier: bbccd430176d428caed54c99afc9589e
+ localIdentifier: stack
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: customer_name
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: state
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ legend:
+ position: bottom
+ version: '2'
+ visualizationUrl: local:bar
+ id: top_10_customers
+ title: Top 10 Customers
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue_top_10
+ type: metric
+ localIdentifier: 77dc71bbac92412bac5f94284a5919df
+ title: Revenue / Top 10
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: 781952e728204dcf923142910cc22ae2
+ localIdentifier: view
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: fe513cef1c6244a5ac21c5f49c56b108
+ localIdentifier: stack
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ legend:
+ position: bottom
+ version: '2'
+ visualizationUrl: local:bar
+ id: top_10_products
+ title: Top 10 Products
+ description: ''
+ exportDefinitions: []
+ 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:
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ DATE: *id001
+ Expires:
+ - '0'
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Pragma:
+ - no-cache
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string: ''
+ - request:
+ method: POST
+ uri: http://localhost:3000/api/v1/actions/workspaces/demo_testing/ai/chat
+ body:
+ question: Display the revenue by product
+ headers:
+ Accept:
+ - application/json
+ Accept-Encoding:
+ - br, gzip, deflate
+ Content-Type:
+ - application/json
+ X-GDC-VALIDATE-RELATIONS:
+ - 'true'
+ X-Requested-With:
+ - XMLHttpRequest
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ Content-Length:
+ - '775'
+ Content-Type:
+ - application/json
+ DATE: *id001
+ Expires:
+ - '0'
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Pragma:
+ - no-cache
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string:
+ routing:
+ useCase: CREATE_VISUALIZATION
+ reasoning: Creating a new visualization ...
+ createdVisualizations:
+ objects:
+ - id: revenue_by_product
+ title: Revenue by Product
+ visualizationType: COLUMN
+ metrics:
+ - id: revenue
+ type: metric
+ title: Revenue
+ dimensionality:
+ - id: product_name
+ type: attribute
+ title: Product name
+ filters: []
+ suggestions:
+ - query: Slice by 'Category'
+ label: Slice by Category
+ - query: Switch to a table view for detailed comparison
+ label: Switch to Table View
+ reasoning: '
+
+
+
+
+
+ Here is a column chart showing the Revenue by Product grouped by Product
+ name.
+
+ - Metrics: Revenue
+
+ - Attributes: Product name
+
+ - Filter: None
+
+
+ '
+ chatHistoryInteractionId: fac7be82923f471782272343ad1a6ad1
+ - request:
+ method: POST
+ uri: http://localhost:3000/api/v1/actions/workspaces/demo_testing/execution/afm/execute
+ body:
+ execution:
+ attributes:
+ - label:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: product_name
+ filters: []
+ measures:
+ - definition:
+ measure:
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ computeRatio: false
+ filters: []
+ localIdentifier: revenue
+ resultSpec:
+ dimensions:
+ - itemIdentifiers:
+ - product_name
+ localIdentifier: dim_0
+ - itemIdentifiers:
+ - measureGroup
+ localIdentifier: dim_1
+ headers:
+ Accept:
+ - application/json
+ Accept-Encoding:
+ - br, gzip, deflate
+ Content-Type:
+ - application/json
+ X-GDC-VALIDATE-RELATIONS:
+ - 'true'
+ X-Requested-With:
+ - XMLHttpRequest
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ Content-Length:
+ - '646'
+ Content-Type:
+ - application/json
+ DATE: *id001
+ Expires:
+ - '0'
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Pragma:
+ - no-cache
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-Gdc-Cancel-Token:
+ - 66150d36-9a7f-4494-b342-8be4c10bceac
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string:
+ executionResponse:
+ dimensions:
+ - headers:
+ - attributeHeader:
+ localIdentifier: product_name
+ label:
+ id: product_name
+ type: label
+ labelName: Product name
+ attribute:
+ id: product_name
+ type: attribute
+ attributeName: Product name
+ granularity: null
+ primaryLabel:
+ id: product_name
+ type: label
+ valueType: TEXT
+ localIdentifier: dim_0
+ - headers:
+ - measureGroupHeaders:
+ - localIdentifier: revenue
+ format: $#,##0
+ name: Revenue
+ localIdentifier: dim_1
+ links:
+ executionResult: 3686f03e3a854572d385962cdf522802010cfa49:8795bd272ad09519a4d36263aad7dc9b1d9ed3cebc1e874adcbd8618d419e005
+ - request:
+ method: GET
+ uri: http://localhost:3000/api/v1/actions/workspaces/demo_testing/execution/afm/execute/result/3686f03e3a854572d385962cdf522802010cfa49%3A8795bd272ad09519a4d36263aad7dc9b1d9ed3cebc1e874adcbd8618d419e005/metadata
+ 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:
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ Content-Length:
+ - '1186'
+ Content-Type:
+ - application/json
+ DATE: *id001
+ Expires:
+ - '0'
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Pragma:
+ - no-cache
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string:
+ afm:
+ attributes:
+ - localIdentifier: product_name
+ label:
+ identifier:
+ id: product_name
+ type: label
+ showAllValues: false
+ filters: []
+ measures:
+ - localIdentifier: revenue
+ definition:
+ measure:
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ computeRatio: false
+ filters: []
+ auxMeasures: []
+ executionResponse:
+ dimensions:
+ - headers:
+ - attributeHeader:
+ localIdentifier: product_name
+ label:
+ id: product_name
+ type: label
+ labelName: Product name
+ attribute:
+ id: product_name
+ type: attribute
+ attributeName: Product name
+ granularity: null
+ primaryLabel:
+ id: product_name
+ type: label
+ valueType: TEXT
+ localIdentifier: dim_0
+ - headers:
+ - measureGroupHeaders:
+ - localIdentifier: revenue
+ format: $#,##0
+ name: Revenue
+ localIdentifier: dim_1
+ links:
+ executionResult: 3686f03e3a854572d385962cdf522802010cfa49:8795bd272ad09519a4d36263aad7dc9b1d9ed3cebc1e874adcbd8618d419e005
+ resultSpec:
+ dimensions:
+ - localIdentifier: dim_0
+ itemIdentifiers:
+ - product_name
+ sorting: []
+ - localIdentifier: dim_1
+ itemIdentifiers:
+ - measureGroup
+ sorting: []
+ totals: []
+ resultSize: 364
+ - request:
+ method: GET
+ uri: http://localhost:3000/api/v1/actions/workspaces/demo_testing/execution/afm/execute/result/3686f03e3a854572d385962cdf522802010cfa49%3A8795bd272ad09519a4d36263aad7dc9b1d9ed3cebc1e874adcbd8618d419e005?offset=0%2C0&limit=100%2C100
+ 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:
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ Content-Length:
+ - '1797'
+ Content-Type:
+ - application/json
+ DATE: *id001
+ Expires:
+ - '0'
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Pragma:
+ - no-cache
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string:
+ data:
+ - - 4725.73
+ - - 14421.37
+ - - 34697.71
+ - - 17657.35
+ - - 12995.87
+ - - 27662.09
+ - - 47766.74
+ - - 44026.52
+ - - 99440.44
+ - - 40307.76
+ - - 6408.91
+ - - 16744.48
+ - - 18841.17
+ - - 7386.15
+ - - 17431.11
+ - - 16494.89
+ - - 18469.15
+ - - 17937.49
+ dimensionHeaders:
+ - headerGroups:
+ - headers:
+ - attributeHeader:
+ labelValue: Applica
+ primaryLabelValue: Applica
+ - attributeHeader:
+ labelValue: Artego
+ primaryLabelValue: Artego
+ - attributeHeader:
+ labelValue: Biolid
+ primaryLabelValue: Biolid
+ - attributeHeader:
+ labelValue: ChalkTalk
+ primaryLabelValue: ChalkTalk
+ - attributeHeader:
+ labelValue: Compglass
+ primaryLabelValue: Compglass
+ - attributeHeader:
+ labelValue: Elentrix
+ primaryLabelValue: Elentrix
+ - attributeHeader:
+ labelValue: Integres
+ primaryLabelValue: Integres
+ - attributeHeader:
+ labelValue: Magnemo
+ primaryLabelValue: Magnemo
+ - attributeHeader:
+ labelValue: Neptide
+ primaryLabelValue: Neptide
+ - attributeHeader:
+ labelValue: Optique
+ primaryLabelValue: Optique
+ - attributeHeader:
+ labelValue: Peril
+ primaryLabelValue: Peril
+ - attributeHeader:
+ labelValue: Polo Shirt
+ primaryLabelValue: Polo Shirt
+ - attributeHeader:
+ labelValue: PortaCode
+ primaryLabelValue: PortaCode
+ - attributeHeader:
+ labelValue: Pullover
+ primaryLabelValue: Pullover
+ - attributeHeader:
+ labelValue: Shorts
+ primaryLabelValue: Shorts
+ - attributeHeader:
+ labelValue: Skirt
+ primaryLabelValue: Skirt
+ - attributeHeader:
+ labelValue: Slacks
+ primaryLabelValue: Slacks
+ - attributeHeader:
+ labelValue: T-Shirt
+ primaryLabelValue: T-Shirt
+ - headerGroups:
+ - headers:
+ - measureHeader:
+ measureIndex: 0
+ grandTotals: []
+ paging:
+ count:
+ - 18
+ - 1
+ offset:
+ - 0
+ - 0
+ total:
+ - 18
+ - 1
+ metadata:
+ dataSourceMessages: []
+ - request:
+ method: POST
+ uri: http://localhost:3000/api/v1/actions/workspaces/demo_testing/ai/chatHistory
+ body:
+ reset: true
+ headers:
+ Accept:
+ - application/json
+ Accept-Encoding:
+ - br, gzip, deflate
+ Content-Type:
+ - application/json
+ X-GDC-VALIDATE-RELATIONS:
+ - 'true'
+ X-Requested-With:
+ - XMLHttpRequest
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ Content-Length:
+ - '51'
+ Content-Type:
+ - application/json
+ DATE: *id001
+ Expires:
+ - '0'
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Pragma:
+ - no-cache
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string:
+ interactions: []
+ threadId: demo_testing.admin
+ - request:
+ method: GET
+ uri: http://localhost:3000/api/v1/entities/workspaces?include=workspaces&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:
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ Content-Length:
+ - '1274'
+ Content-Type:
+ - application/vnd.gooddata.api+json
+ DATE: *id001
+ Expires:
+ - '0'
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Pragma:
+ - no-cache
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string:
+ data:
+ - id: demo_west
+ type: workspace
+ attributes:
+ name: Demo West
+ relationships:
+ parent:
+ data:
+ id: demo
+ type: workspace
+ links:
+ self: http://localhost:3000/api/v1/entities/workspaces/demo_west
+ - id: demo_west_california
+ type: workspace
+ attributes:
+ name: Demo West California
+ relationships:
+ parent:
+ data:
+ id: demo_west
+ type: workspace
+ links:
+ self: http://localhost:3000/api/v1/entities/workspaces/demo_west_california
+ - id: demo
+ type: workspace
+ attributes:
+ name: Demo
+ links:
+ self: http://localhost:3000/api/v1/entities/workspaces/demo
+ - id: demo_testing
+ type: workspace
+ attributes:
+ name: demo_testing
+ links:
+ self: http://localhost:3000/api/v1/entities/workspaces/demo_testing
+ included:
+ - id: demo
+ type: workspace
+ attributes:
+ name: Demo
+ links:
+ self: http://localhost:3000/api/v1/entities/workspaces/demo
+ - id: demo_west
+ type: workspace
+ attributes:
+ name: Demo West
+ links:
+ self: http://localhost:3000/api/v1/entities/workspaces/demo_west
+ links:
+ self: http://localhost:3000/api/v1/entities/workspaces?include=workspaces&page=0&size=500
+ next: http://localhost:3000/api/v1/entities/workspaces?include=workspaces&page=1&size=500
+ - request:
+ method: DELETE
+ uri: http://localhost:3000/api/v1/entities/workspaces/demo_testing
+ 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:
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ DATE: *id001
+ Expires:
+ - '0'
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Pragma:
+ - no-cache
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string: ''
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/analytical_dashboards/b2f2d436-9831-4fe0-81df-8c59fd33242b.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/analytical_dashboards/b2f2d436-9831-4fe0-81df-8c59fd33242b.yaml
new file mode 100644
index 000000000..ef4dfab69
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/analytical_dashboards/b2f2d436-9831-4fe0-81df-8c59fd33242b.yaml
@@ -0,0 +1,194 @@
+# (C) 2025 GoodData Corporation
+content:
+ filterContextRef:
+ identifier:
+ id: 4717b786-2c2e-4596-adb5-4f8b0ab0e19a
+ type: filterContext
+ layout:
+ sections:
+ - header:
+ description: All in one description
+ title: All in one title
+ items:
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: top_10_customers
+ type: visualizationObject
+ localIdentifier: 2c7400ac-5f63-46f8-aa12-a2debe13fd14
+ properties: {}
+ title: Top 10 Customers
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: revenue_by_product
+ type: visualizationObject
+ localIdentifier: a50daab7-fb78-45eb-a2b4-d5cc8cbd89e9
+ properties: {}
+ title: Revenue by Product
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: revenue_by_category_trend
+ type: visualizationObject
+ localIdentifier: efccc783-5896-4eb6-890f-2e51ece3f159
+ properties: {}
+ title: Revenue by Category Trend
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: product_saleability
+ type: visualizationObject
+ localIdentifier: d738d85f-e935-4e2c-b8b4-a8b456f55079
+ properties: {}
+ title: Product Saleability
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: product_categories_pie_chart
+ type: visualizationObject
+ localIdentifier: 8c194c85-bad6-42da-b4e3-08d270278316
+ properties: {}
+ title: Product Categories Pie Chart
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: percentage_of_customers_by_region
+ type: visualizationObject
+ localIdentifier: 2c3307b2-581f-4bab-9252-6b5279565b24
+ properties: {}
+ title: Percentage of Customers by Region
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: customers_trend
+ type: visualizationObject
+ localIdentifier: 87505bb0-d954-4add-811d-f4e75e431660
+ properties: {}
+ title: Customers Trend
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: campaign_spend
+ type: visualizationObject
+ localIdentifier: 0cb01f6a-6ea6-4c22-bb12-ded00a9eac66
+ properties: {}
+ title: Campaign Spend
+ type: insight
+ - size:
+ xl:
+ gridWidth: 12
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: percent_revenue_per_product_by_customer_and_category
+ type: visualizationObject
+ localIdentifier: 2213d6e4-6df7-458e-806d-f02bae5ce66a
+ properties: {}
+ title: '% Revenue per Product by Customer and Category'
+ type: insight
+ type: IDashboardLayoutSection
+ type: IDashboardLayout
+ version: '2'
+description: ''
+id: b2f2d436-9831-4fe0-81df-8c59fd33242b
+title: All visualizations 1 with custom filter
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/filter_contexts/4717b786-2c2e-4596-adb5-4f8b0ab0e19a.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/filter_contexts/4717b786-2c2e-4596-adb5-4f8b0ab0e19a.yaml
new file mode 100644
index 000000000..852c92031
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/filter_contexts/4717b786-2c2e-4596-adb5-4f8b0ab0e19a.yaml
@@ -0,0 +1,22 @@
+# (C) 2025 GoodData Corporation
+content:
+ filters:
+ - attributeFilter:
+ attributeElements:
+ uris:
+ - Biolid
+ - ChalkTalk
+ - Compglass
+ - Elentrix
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ filterElementsBy: []
+ localIdentifier: 6b94bbb585d44c79967867719e524fae
+ negativeSelection: false
+ selectionMode: multi
+ version: '2'
+description: ''
+id: 4717b786-2c2e-4596-adb5-4f8b0ab0e19a
+title: filterContext
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/filter_contexts/9f2b1f37-befa-450e-a6cc-dc576845c412.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/filter_contexts/9f2b1f37-befa-450e-a6cc-dc576845c412.yaml
new file mode 100644
index 000000000..8ec1d3ebb
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/filter_contexts/9f2b1f37-befa-450e-a6cc-dc576845c412.yaml
@@ -0,0 +1,12 @@
+# (C) 2025 GoodData Corporation
+content:
+ filters:
+ - dateFilter:
+ from: '0'
+ granularity: GDC.time.year
+ to: '0'
+ type: relative
+ version: '2'
+description: ''
+id: 9f2b1f37-befa-450e-a6cc-dc576845c412
+title: filterContext
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/amount_of_active_customers.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/amount_of_active_customers.yaml
new file mode 100644
index 000000000..1dfb3eff8
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/amount_of_active_customers.yaml
@@ -0,0 +1,7 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: '#,##0'
+ maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id})
+description: ''
+id: amount_of_active_customers
+title: '# of Active Customers'
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/amount_of_orders.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/amount_of_orders.yaml
new file mode 100644
index 000000000..73bc6a977
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/amount_of_orders.yaml
@@ -0,0 +1,7 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: '#,##0'
+ maql: SELECT COUNT({attribute/order_id})
+description: ''
+id: amount_of_orders
+title: '# of Orders'
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/amount_of_top_customers.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/amount_of_top_customers.yaml
new file mode 100644
index 000000000..bc2547333
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/amount_of_top_customers.yaml
@@ -0,0 +1,8 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: '#,##0'
+ maql: 'SELECT {metric/amount_of_active_customers} WHERE (SELECT {metric/revenue}
+ BY {attribute/customer_id}) > 10000 '
+description: ''
+id: amount_of_top_customers
+title: '# of Top Customers'
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/amount_of_valid_orders.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/amount_of_valid_orders.yaml
new file mode 100644
index 000000000..35a719267
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/amount_of_valid_orders.yaml
@@ -0,0 +1,8 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: '#,##0.00'
+ maql: SELECT {metric/amount_of_orders} WHERE NOT ({label/order_status} IN ("null",
+ "Returned", "Canceled"))
+description: ''
+id: amount_of_valid_orders
+title: '# of Valid Orders'
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/campaign_spend.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/campaign_spend.yaml
new file mode 100644
index 000000000..93f99d910
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/campaign_spend.yaml
@@ -0,0 +1,7 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: $#,##0
+ maql: SELECT SUM({fact/spend})
+description: ''
+id: campaign_spend
+title: Campaign Spend
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/order_amount.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/order_amount.yaml
new file mode 100644
index 000000000..ca0efae86
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/order_amount.yaml
@@ -0,0 +1,7 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: $#,##0
+ maql: SELECT SUM({fact/price}*{fact/quantity})
+description: ''
+id: order_amount
+title: Order Amount
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue.yaml
new file mode 100644
index 000000000..c52541fa4
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue.yaml
@@ -0,0 +1,7 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: '#,##0.0%'
+ maql: SELECT {metric/revenue} / {metric/total_revenue}
+description: ''
+id: percent_revenue
+title: '% Revenue'
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_customers.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_customers.yaml
new file mode 100644
index 000000000..13ac3c103
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_customers.yaml
@@ -0,0 +1,8 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: '#,##0.0%'
+ maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10} BY\
+ \ {attribute/customer_id}) > 0)\n /\n {metric/revenue}"
+description: ''
+id: percent_revenue_from_top_10_customers
+title: '% Revenue from Top 10 Customers'
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_percent_customers.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_percent_customers.yaml
new file mode 100644
index 000000000..514f4e13e
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_percent_customers.yaml
@@ -0,0 +1,8 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: '#,##0.0%'
+ maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10_percent}\
+ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}"
+description: ''
+id: percent_revenue_from_top_10_percent_customers
+title: '% Revenue from Top 10% Customers'
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_percent_products.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_percent_products.yaml
new file mode 100644
index 000000000..962393d29
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_percent_products.yaml
@@ -0,0 +1,8 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: '#,##0.0%'
+ maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10_percent}\
+ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}"
+description: ''
+id: percent_revenue_from_top_10_percent_products
+title: '% Revenue from Top 10% Products'
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_products.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_products.yaml
new file mode 100644
index 000000000..4f825ef41
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_from_top_10_products.yaml
@@ -0,0 +1,8 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: '#,##0.0%'
+ maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10} BY\
+ \ {attribute/product_id}) > 0)\n /\n {metric/revenue}"
+description: ''
+id: percent_revenue_from_top_10_products
+title: '% Revenue from Top 10 Products'
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_in_category.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_in_category.yaml
new file mode 100644
index 000000000..491f870b0
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_in_category.yaml
@@ -0,0 +1,8 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: '#,##0.0%'
+ maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY {attribute/products.category},
+ ALL OTHER)
+description: ''
+id: percent_revenue_in_category
+title: '% Revenue in Category'
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_per_product.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_per_product.yaml
new file mode 100644
index 000000000..1d8d1e0fc
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/percent_revenue_per_product.yaml
@@ -0,0 +1,7 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: '#,##0.0%'
+ maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id})
+description: ''
+id: percent_revenue_per_product
+title: '% Revenue per Product'
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue-clothing.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue-clothing.yaml
new file mode 100644
index 000000000..ee50ebe45
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue-clothing.yaml
@@ -0,0 +1,7 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing")
+description: ''
+id: revenue-clothing
+title: Revenue (Clothing)
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue-electronic.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue-electronic.yaml
new file mode 100644
index 000000000..bf706b4f0
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue-electronic.yaml
@@ -0,0 +1,7 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} WHERE {label/products.category} IN ( "Electronics")
+description: ''
+id: revenue-electronic
+title: Revenue (Electronic)
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue-home.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue-home.yaml
new file mode 100644
index 000000000..6521c722d
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue-home.yaml
@@ -0,0 +1,7 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home")
+description: ''
+id: revenue-home
+title: Revenue (Home)
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue-outdoor.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue-outdoor.yaml
new file mode 100644
index 000000000..92af3b14a
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue-outdoor.yaml
@@ -0,0 +1,7 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor")
+description: ''
+id: revenue-outdoor
+title: Revenue (Outdoor)
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue.yaml
new file mode 100644
index 000000000..278fc315d
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue.yaml
@@ -0,0 +1,8 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: $#,##0
+ maql: SELECT {metric/order_amount} WHERE NOT ({label/order_status} IN ("null", "Returned",
+ "Canceled"))
+description: ''
+id: revenue
+title: Revenue
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue_per_customer.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue_per_customer.yaml
new file mode 100644
index 000000000..6815dc309
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue_per_customer.yaml
@@ -0,0 +1,7 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: $#,##0.0
+ maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id})
+description: ''
+id: revenue_per_customer
+title: Revenue per Customer
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue_per_dollar_spent.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue_per_dollar_spent.yaml
new file mode 100644
index 000000000..01c0ac775
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue_per_dollar_spent.yaml
@@ -0,0 +1,7 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: $#,##0.0
+ maql: SELECT {metric/revenue} / {metric/campaign_spend}
+description: ''
+id: revenue_per_dollar_spent
+title: Revenue per Dollar Spent
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue_top_10.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue_top_10.yaml
new file mode 100644
index 000000000..fd92065fe
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue_top_10.yaml
@@ -0,0 +1,7 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue})
+description: ''
+id: revenue_top_10
+title: Revenue / Top 10
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue_top_10_percent.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue_top_10_percent.yaml
new file mode 100644
index 000000000..ffae3797b
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/revenue_top_10_percent.yaml
@@ -0,0 +1,7 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue})
+description: ''
+id: revenue_top_10_percent
+title: Revenue / Top 10%
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/total_revenue-no_filters.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/total_revenue-no_filters.yaml
new file mode 100644
index 000000000..7b29ce6b6
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/total_revenue-no_filters.yaml
@@ -0,0 +1,7 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: $#,##0
+ maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER
+description: ''
+id: total_revenue-no_filters
+title: Total Revenue (No Filters)
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/total_revenue.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/total_revenue.yaml
new file mode 100644
index 000000000..30d1cebf0
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/metrics/total_revenue.yaml
@@ -0,0 +1,7 @@
+# (C) 2025 GoodData Corporation
+content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} BY ALL OTHER
+description: ''
+id: total_revenue
+title: Total Revenue
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/campaign_spend.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/campaign_spend.yaml
new file mode 100644
index 000000000..e4bccc985
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/campaign_spend.yaml
@@ -0,0 +1,62 @@
+# (C) 2025 GoodData Corporation
+content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: campaign_spend
+ type: metric
+ localIdentifier: d319bcb2d8c04442a684e3b3cd063381
+ title: Campaign Spend
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: campaign_channels.category
+ type: label
+ localIdentifier: 291c085e7df8420db84117ca49f59c49
+ localIdentifier: view
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: campaign_name
+ type: label
+ localIdentifier: d9dd143d647d4d148405a60ec2cf59bc
+ localIdentifier: segment
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: type
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: campaign_channels.category
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: campaign_name
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ legend:
+ position: bottom
+ version: '2'
+ visualizationUrl: local:treemap
+description: ''
+id: campaign_spend
+title: Campaign Spend
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/customers_trend.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/customers_trend.yaml
new file mode 100644
index 000000000..b74740893
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/customers_trend.yaml
@@ -0,0 +1,74 @@
+# (C) 2025 GoodData Corporation
+content:
+ buckets:
+ - items:
+ - measure:
+ alias: Active Customers
+ definition:
+ measureDefinition:
+ computeRatio: false
+ filters: []
+ item:
+ identifier:
+ id: amount_of_active_customers
+ type: metric
+ localIdentifier: 2ba0b87b59ca41a4b1530e81a5c1d081
+ title: '# of Active Customers'
+ localIdentifier: measures
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue_per_customer
+ type: metric
+ localIdentifier: ec0606894b9f4897b7beaf1550608928
+ title: Revenue per Customer
+ localIdentifier: secondary_measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: date.month
+ type: label
+ localIdentifier: 0de7d7f08af7480aa636857a26be72b6
+ localIdentifier: view
+ filters:
+ - relativeDateFilter:
+ dataSet:
+ identifier:
+ id: date
+ type: dataset
+ from: -11
+ granularity: GDC.time.month
+ to: 0
+ properties:
+ controls:
+ colorMapping:
+ - color:
+ type: guid
+ value: '20'
+ id: 2ba0b87b59ca41a4b1530e81a5c1d081
+ - color:
+ type: guid
+ value: '4'
+ id: ec0606894b9f4897b7beaf1550608928
+ dualAxis: true
+ legend:
+ position: bottom
+ primaryChartType: column
+ secondaryChartType: line
+ secondary_yaxis:
+ measures:
+ - ec0606894b9f4897b7beaf1550608928
+ xaxis:
+ name:
+ visible: false
+ rotation: auto
+ version: '2'
+ visualizationUrl: local:combo2
+description: ''
+id: customers_trend
+title: Customers Trend
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/percent_revenue_per_product_by_customer_and_category.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/percent_revenue_per_product_by_customer_and_category.yaml
new file mode 100644
index 000000000..ad33a7fca
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/percent_revenue_per_product_by_customer_and_category.yaml
@@ -0,0 +1,77 @@
+# (C) 2025 GoodData Corporation
+content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: percent_revenue_per_product
+ type: metric
+ localIdentifier: 08d8346c1ce7438994b251991c0fbf65
+ title: '% Revenue per Product'
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: b2350c06688b4da9b3833ebcce65527f
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: customer_name
+ type: label
+ localIdentifier: 7a4045fd00ac44579f52406df679435f
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: 6a003ffd14994237ba64c4a02c488429
+ - attribute:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: 75ea396d0c8b48098e31dccf8b5801d3
+ localIdentifier: attribute
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: customer_name
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ properties:
+ sortItems:
+ - attributeSortItem:
+ attributeIdentifier: 7a4045fd00ac44579f52406df679435f
+ direction: asc
+ version: '2'
+ visualizationUrl: local:table
+description: ''
+id: percent_revenue_per_product_by_customer_and_category
+title: '% Revenue per Product by Customer and Category'
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/percentage_of_customers_by_region.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/percentage_of_customers_by_region.yaml
new file mode 100644
index 000000000..6f57db4f0
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/percentage_of_customers_by_region.yaml
@@ -0,0 +1,57 @@
+# (C) 2025 GoodData Corporation
+content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: amount_of_active_customers
+ type: metric
+ localIdentifier: 1a14cdc1293c46e89a2e25d3e741d235
+ title: '# of Active Customers'
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: date.month
+ type: label
+ localIdentifier: c1feca1864244ec2ace7a9b9d7fda231
+ localIdentifier: view
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: region
+ type: label
+ localIdentifier: 530cddbd7ca04d039e73462d81ed44d5
+ localIdentifier: stack
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: region
+ type: label
+ notIn:
+ values: []
+ - relativeDateFilter:
+ dataSet:
+ identifier:
+ id: date
+ type: dataset
+ from: -11
+ granularity: GDC.time.month
+ to: 0
+ properties:
+ controls:
+ legend:
+ position: bottom
+ stackMeasuresToPercent: true
+ version: '2'
+ visualizationUrl: local:area
+description: ''
+id: percentage_of_customers_by_region
+title: Percentage of Customers by Region
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/product_breakdown.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/product_breakdown.yaml
new file mode 100644
index 000000000..214952fda
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/product_breakdown.yaml
@@ -0,0 +1,55 @@
+# (C) 2025 GoodData Corporation
+content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 590d332ef686468b8878ae41b23341c6
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: b166c71091864312a14c7ae8ff886ffe
+ localIdentifier: view
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: e920a50e0bbb49788df0aac53634c1cd
+ localIdentifier: segment
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ legend:
+ position: bottom
+ version: '2'
+ visualizationUrl: local:treemap
+description: ''
+id: product_breakdown
+title: Product Breakdown
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/product_categories_pie_chart.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/product_categories_pie_chart.yaml
new file mode 100644
index 000000000..247c8983b
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/product_categories_pie_chart.yaml
@@ -0,0 +1,50 @@
+# (C) 2025 GoodData Corporation
+content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ computeRatio: true
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 162b857af49d45769bc12604a5c192b9
+ title: '% Revenue'
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: fe513cef1c6244a5ac21c5f49c56b108
+ localIdentifier: view
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ dataLabels:
+ visible: auto
+ legend:
+ position: bottom
+ version: '2'
+ visualizationUrl: local:donut
+description: ''
+id: product_categories_pie_chart
+title: Product Categories Pie Chart
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/product_revenue_comparison-over_previous_period.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/product_revenue_comparison-over_previous_period.yaml
new file mode 100644
index 000000000..697db6ce5
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/product_revenue_comparison-over_previous_period.yaml
@@ -0,0 +1,73 @@
+# (C) 2025 GoodData Corporation
+content:
+ buckets:
+ - items:
+ - measure:
+ alias: Previous Period
+ definition:
+ popMeasureDefinition:
+ measureIdentifier: c82e025fa2db4afea9a600a424591dbe
+ popAttribute:
+ identifier:
+ id: date.year
+ type: label
+ localIdentifier: c82e025fa2db4afea9a600a424591dbe_pop
+ - measure:
+ alias: This Period
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: c82e025fa2db4afea9a600a424591dbe
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: c804ef5ba7944a5a9f360c86a9e95e9a
+ localIdentifier: view
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ - relativeDateFilter:
+ dataSet:
+ identifier:
+ id: date
+ type: dataset
+ from: -11
+ granularity: GDC.time.month
+ to: 0
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ legend:
+ position: bottom
+ stackMeasures: false
+ xaxis:
+ name:
+ visible: false
+ yaxis:
+ name:
+ visible: false
+ version: '2'
+ visualizationUrl: local:column
+description: ''
+id: product_revenue_comparison-over_previous_period
+title: Product Revenue Comparison (over previous period)
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/product_saleability.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/product_saleability.yaml
new file mode 100644
index 000000000..205996760
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/product_saleability.yaml
@@ -0,0 +1,55 @@
+# (C) 2025 GoodData Corporation
+content:
+ buckets:
+ - items:
+ - measure:
+ alias: Number of Orders
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: amount_of_orders
+ type: metric
+ localIdentifier: aeb5d51a162d4b59aba3bd6ddebcc780
+ title: '# of Orders'
+ localIdentifier: measures
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 94b3edd3a73c4a48a4d13bbe9442cc98
+ title: Revenue
+ localIdentifier: secondary_measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: d2a991bdd123448eb2be73d79f1180c4
+ localIdentifier: attribute
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ dataLabels:
+ visible: auto
+ grid:
+ enabled: true
+ version: '2'
+ visualizationUrl: local:scatter
+description: ''
+id: product_saleability
+title: Product Saleability
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_and_quantity_by_product_and_category.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_and_quantity_by_product_and_category.yaml
new file mode 100644
index 000000000..e63f146b6
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_and_quantity_by_product_and_category.yaml
@@ -0,0 +1,97 @@
+# (C) 2025 GoodData Corporation
+content:
+ buckets:
+ - items:
+ - measure:
+ alias: Items Sold
+ definition:
+ measureDefinition:
+ aggregation: sum
+ filters: []
+ item:
+ identifier:
+ id: quantity
+ type: fact
+ format: '#,##0.00'
+ localIdentifier: 29486504dd0e4a36a18b0b2f792d3a46
+ title: Sum of Quantity
+ - measure:
+ definition:
+ measureDefinition:
+ aggregation: avg
+ filters: []
+ item:
+ identifier:
+ id: price
+ type: fact
+ format: '#,##0.00'
+ localIdentifier: aa6391acccf1452f8011201aef9af492
+ title: Avg Price
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: percent_revenue_in_category
+ type: metric
+ localIdentifier: 2cd39539d8da46c9883e63caa3ba7cc0
+ title: '% Revenue in Category'
+ - measure:
+ alias: Total Revenue
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 9a0f08331c094c7facf2a0b4f418de0a
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: 06bc6b3b9949466494e4f594c11f1bff
+ - attribute:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: 192668bfb6a74e9ab7b5d1ce7cb68ea3
+ localIdentifier: attribute
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: customer_name
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ properties:
+ sortItems:
+ - attributeSortItem:
+ attributeIdentifier: 06bc6b3b9949466494e4f594c11f1bff
+ direction: asc
+ version: '2'
+ visualizationUrl: local:table
+description: ''
+id: revenue_and_quantity_by_product_and_category
+title: Revenue and Quantity by Product and Category
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_by_category_trend.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_by_category_trend.yaml
new file mode 100644
index 000000000..5c3221033
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_by_category_trend.yaml
@@ -0,0 +1,54 @@
+# (C) 2025 GoodData Corporation
+content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 7df6c34387744d69b23ec92e1a5cf543
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: date.month
+ type: label
+ localIdentifier: 4bb4fc1986c546de9ad976e6ec23fed4
+ localIdentifier: trend
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: 34bddcb1cd024902a82396216b0fa9d8
+ localIdentifier: segment
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ - relativeDateFilter:
+ dataSet:
+ identifier:
+ id: date
+ type: dataset
+ granularity: GDC.time.year
+ properties:
+ controls:
+ legend:
+ position: bottom
+ version: '2'
+ visualizationUrl: local:line
+description: ''
+id: revenue_by_category_trend
+title: Revenue by Category Trend
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_by_product.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_by_product.yaml
new file mode 100644
index 000000000..520b12972
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_by_product.yaml
@@ -0,0 +1,37 @@
+# (C) 2025 GoodData Corporation
+content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 4ae3401bdbba4938afe983df4ba04e1c
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: 1c8ba72dbfc84ddd913bf81dc355c427
+ localIdentifier: view
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ properties: {}
+ version: '2'
+ visualizationUrl: local:bar
+description: ''
+id: revenue_by_product
+title: Revenue by Product
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_per_usd_vs_spend_by_campaign.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_per_usd_vs_spend_by_campaign.yaml
new file mode 100644
index 000000000..6d0f7cbde
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_per_usd_vs_spend_by_campaign.yaml
@@ -0,0 +1,54 @@
+# (C) 2025 GoodData Corporation
+content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: campaign_spend
+ type: metric
+ localIdentifier: 13a50d811e474ac6808d8da7f4673b35
+ title: Campaign Spend
+ localIdentifier: measures
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue_per_dollar_spent
+ type: metric
+ localIdentifier: a0f15e82e6334280a44dbedc7d086e7c
+ title: Revenue per Dollar Spent
+ localIdentifier: secondary_measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: campaign_name
+ type: label
+ localIdentifier: 1d9fa968bafb423eb29c938dfb1207ff
+ localIdentifier: attribute
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: campaign_name
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ xaxis:
+ min: '0'
+ yaxis:
+ min: '0'
+ version: '2'
+ visualizationUrl: local:scatter
+description: ''
+id: revenue_per_usd_vs_spend_by_campaign
+title: Revenue per $ vs Spend by Campaign
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_trend.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_trend.yaml
new file mode 100644
index 000000000..e0ded10f3
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/revenue_trend.yaml
@@ -0,0 +1,66 @@
+# (C) 2025 GoodData Corporation
+content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ computeRatio: false
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 60c854969a9c4c278ab596d99c222e92
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - measure:
+ alias: Number of Orders
+ definition:
+ measureDefinition:
+ computeRatio: false
+ filters: []
+ item:
+ identifier:
+ id: amount_of_orders
+ type: metric
+ localIdentifier: c2fa7ef48cc54af99f8c280eb451e051
+ title: '# of Orders'
+ localIdentifier: secondary_measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: date.month
+ type: label
+ localIdentifier: 413ac374b65648fa96826ca01d47bdda
+ localIdentifier: view
+ filters:
+ - relativeDateFilter:
+ dataSet:
+ identifier:
+ id: date
+ type: dataset
+ from: -3
+ granularity: GDC.time.quarter
+ to: 0
+ properties:
+ controls:
+ dualAxis: true
+ legend:
+ position: bottom
+ primaryChartType: column
+ secondaryChartType: line
+ secondary_yaxis:
+ measures:
+ - c2fa7ef48cc54af99f8c280eb451e051
+ xaxis:
+ name:
+ visible: false
+ rotation: auto
+ version: '2'
+ visualizationUrl: local:combo2
+description: ''
+id: revenue_trend
+title: Revenue Trend
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/top_10_customers.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/top_10_customers.yaml
new file mode 100644
index 000000000..9a191a086
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/top_10_customers.yaml
@@ -0,0 +1,55 @@
+# (C) 2025 GoodData Corporation
+content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue_top_10
+ type: metric
+ localIdentifier: 3f127ccfe57a40399e23f9ae2a4ad810
+ title: Revenue / Top 10
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: customer_name
+ type: label
+ localIdentifier: f4e39e24f11e4827a191c30d65c89d2c
+ localIdentifier: view
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: state
+ type: label
+ localIdentifier: bbccd430176d428caed54c99afc9589e
+ localIdentifier: stack
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: customer_name
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: state
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ legend:
+ position: bottom
+ version: '2'
+ visualizationUrl: local:bar
+description: ''
+id: top_10_customers
+title: Top 10 Customers
diff --git a/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/top_10_products.yaml b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/top_10_products.yaml
new file mode 100644
index 000000000..c5f39d2ec
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/analytics_model/visualization_objects/top_10_products.yaml
@@ -0,0 +1,55 @@
+# (C) 2025 GoodData Corporation
+content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue_top_10
+ type: metric
+ localIdentifier: 77dc71bbac92412bac5f94284a5919df
+ title: Revenue / Top 10
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: 781952e728204dcf923142910cc22ae2
+ localIdentifier: view
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: fe513cef1c6244a5ac21c5f49c56b108
+ localIdentifier: stack
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ legend:
+ position: bottom
+ version: '2'
+ visualizationUrl: local:bar
+description: ''
+id: top_10_products
+title: Top 10 Products
diff --git a/gooddata-pandas/tests/dataframe/load/ai/ldm/datasets/campaign_channels.yaml b/gooddata-pandas/tests/dataframe/load/ai/ldm/datasets/campaign_channels.yaml
new file mode 100644
index 000000000..e97992521
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/ldm/datasets/campaign_channels.yaml
@@ -0,0 +1,67 @@
+# (C) 2025 GoodData Corporation
+attributes:
+ - description: Campaign channel id
+ id: campaign_channel_id
+ labels: []
+ sourceColumn: campaign_channel_id
+ sourceColumnDataType: STRING
+ tags:
+ - Campaign channels
+ title: Campaign channel id
+ - description: Category
+ id: campaign_channels.category
+ labels: []
+ sourceColumn: category
+ sourceColumnDataType: STRING
+ tags:
+ - Campaign channels
+ title: Category
+ - description: Type
+ id: type
+ labels: []
+ sourceColumn: type
+ sourceColumnDataType: STRING
+ tags:
+ - Campaign channels
+ title: Type
+dataSourceTableId:
+ dataSourceId: pg_local_docker-demo
+ id: campaign_channels
+ path:
+ - demo_6d9051d9069a8468
+ - campaign_channels
+ type: dataSource
+description: Campaign channels
+facts:
+ - description: Budget
+ id: budget
+ sourceColumn: budget
+ sourceColumnDataType: NUMERIC
+ tags:
+ - Campaign channels
+ title: Budget
+ - description: Spend
+ id: spend
+ sourceColumn: spend
+ sourceColumnDataType: NUMERIC
+ tags:
+ - Campaign channels
+ title: Spend
+grain:
+ - id: campaign_channel_id
+ type: attribute
+id: campaign_channels
+references:
+ - identifier:
+ id: campaigns
+ type: dataset
+ multivalue: false
+ sources:
+ - column: campaign_id
+ dataType: INT
+ target:
+ id: campaign_id
+ type: attribute
+tags:
+ - Campaign channels
+title: Campaign channels
diff --git a/gooddata-pandas/tests/dataframe/load/ai/ldm/datasets/campaigns.yaml b/gooddata-pandas/tests/dataframe/load/ai/ldm/datasets/campaigns.yaml
new file mode 100644
index 000000000..9e66fc8ff
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/ldm/datasets/campaigns.yaml
@@ -0,0 +1,35 @@
+# (C) 2025 GoodData Corporation
+attributes:
+ - description: Campaign id
+ id: campaign_id
+ labels: []
+ sourceColumn: campaign_id
+ sourceColumnDataType: INT
+ tags:
+ - Campaigns
+ title: Campaign id
+ - description: Campaign name
+ id: campaign_name
+ labels: []
+ sourceColumn: campaign_name
+ sourceColumnDataType: STRING
+ tags:
+ - Campaigns
+ title: Campaign name
+dataSourceTableId:
+ dataSourceId: pg_local_docker-demo
+ id: campaigns
+ path:
+ - demo_6d9051d9069a8468
+ - campaigns
+ type: dataSource
+description: Campaigns
+facts: []
+grain:
+ - id: campaign_id
+ type: attribute
+id: campaigns
+references: []
+tags:
+ - Campaigns
+title: Campaigns
diff --git a/gooddata-pandas/tests/dataframe/load/ai/ldm/datasets/customers.yaml b/gooddata-pandas/tests/dataframe/load/ai/ldm/datasets/customers.yaml
new file mode 100644
index 000000000..031777a44
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/ldm/datasets/customers.yaml
@@ -0,0 +1,58 @@
+# (C) 2025 GoodData Corporation
+attributes:
+ - description: Customer id
+ id: customer_id
+ labels: []
+ sourceColumn: customer_id
+ sourceColumnDataType: INT
+ tags:
+ - Customers
+ title: Customer id
+ - description: Customer name
+ id: customer_name
+ labels: []
+ sourceColumn: customer_name
+ sourceColumnDataType: STRING
+ tags:
+ - Customers
+ title: Customer name
+ - description: Region
+ id: region
+ labels: []
+ sourceColumn: region
+ sourceColumnDataType: STRING
+ tags:
+ - Customers
+ title: Region
+ - description: State
+ id: state
+ labels:
+ - description: Location
+ id: geo__state__location
+ sourceColumn: geo__state__location
+ sourceColumnDataType: STRING
+ tags:
+ - Customers
+ title: Location
+ sourceColumn: state
+ sourceColumnDataType: STRING
+ tags:
+ - Customers
+ title: State
+dataSourceTableId:
+ dataSourceId: pg_local_docker-demo
+ id: customers
+ path:
+ - demo_6d9051d9069a8468
+ - customers
+ type: dataSource
+description: Customers
+facts: []
+grain:
+ - id: customer_id
+ type: attribute
+id: customers
+references: []
+tags:
+ - Customers
+title: Customers
diff --git a/gooddata-pandas/tests/dataframe/load/ai/ldm/datasets/order_lines.yaml b/gooddata-pandas/tests/dataframe/load/ai/ldm/datasets/order_lines.yaml
new file mode 100644
index 000000000..c244ca158
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/ldm/datasets/order_lines.yaml
@@ -0,0 +1,108 @@
+# (C) 2025 GoodData Corporation
+attributes:
+ - description: Order id
+ id: order_id
+ labels: []
+ sourceColumn: order_id
+ sourceColumnDataType: STRING
+ tags:
+ - Order lines
+ title: Order id
+ - description: Order line id
+ id: order_line_id
+ labels: []
+ sourceColumn: order_line_id
+ sourceColumnDataType: STRING
+ tags:
+ - Order lines
+ title: Order line id
+ - description: Order status
+ id: order_status
+ labels: []
+ sourceColumn: order_status
+ sourceColumnDataType: STRING
+ tags:
+ - Order lines
+ title: Order status
+dataSourceTableId:
+ dataSourceId: pg_local_docker-demo
+ id: order_lines
+ path:
+ - demo_6d9051d9069a8468
+ - order_lines
+ type: dataSource
+description: Order lines
+facts:
+ - description: Price
+ id: price
+ sourceColumn: price
+ sourceColumnDataType: NUMERIC
+ tags:
+ - Order lines
+ title: Price
+ - description: Quantity
+ id: quantity
+ sourceColumn: quantity
+ sourceColumnDataType: NUMERIC
+ tags:
+ - Order lines
+ title: Quantity
+grain:
+ - id: order_line_id
+ type: attribute
+id: order_lines
+references:
+ - identifier:
+ id: campaigns
+ type: dataset
+ multivalue: false
+ sources:
+ - column: campaign_id
+ dataType: INT
+ target:
+ id: campaign_id
+ type: attribute
+ - identifier:
+ id: customers
+ type: dataset
+ multivalue: false
+ sources:
+ - column: customer_id
+ dataType: INT
+ target:
+ id: customer_id
+ type: attribute
+ - identifier:
+ id: date
+ type: dataset
+ multivalue: false
+ sources:
+ - column: date
+ dataType: DATE
+ target:
+ id: date
+ type: date
+ - identifier:
+ id: products
+ type: dataset
+ multivalue: false
+ sources:
+ - column: product_id
+ dataType: INT
+ target:
+ id: product_id
+ type: attribute
+tags:
+ - Order lines
+title: Order lines
+workspaceDataFilterColumns:
+ - dataType: STRING
+ name: wdf__region
+ - dataType: STRING
+ name: wdf__state
+workspaceDataFilterReferences:
+ - filterColumn: wdf__region
+ filterColumnDataType: STRING
+ filterId:
+ id: wdf__region
+ type: workspaceDataFilter
diff --git a/gooddata-pandas/tests/dataframe/load/ai/ldm/datasets/products.yaml b/gooddata-pandas/tests/dataframe/load/ai/ldm/datasets/products.yaml
new file mode 100644
index 000000000..2096de7ab
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/ldm/datasets/products.yaml
@@ -0,0 +1,43 @@
+# (C) 2025 GoodData Corporation
+attributes:
+ - description: Product id
+ id: product_id
+ labels: []
+ sourceColumn: product_id
+ sourceColumnDataType: INT
+ tags:
+ - Products
+ title: Product id
+ - description: Product name
+ id: product_name
+ labels: []
+ sourceColumn: product_name
+ sourceColumnDataType: STRING
+ tags:
+ - Products
+ title: Product name
+ - description: Category
+ id: products.category
+ labels: []
+ sourceColumn: category
+ sourceColumnDataType: STRING
+ tags:
+ - Products
+ title: Category
+dataSourceTableId:
+ dataSourceId: pg_local_docker-demo
+ id: products
+ path:
+ - demo_6d9051d9069a8468
+ - products
+ type: dataSource
+description: Products
+facts: []
+grain:
+ - id: product_id
+ type: attribute
+id: products
+references: []
+tags:
+ - Products
+title: Products
diff --git a/gooddata-pandas/tests/dataframe/load/ai/ldm/date_instances/date.yaml b/gooddata-pandas/tests/dataframe/load/ai/ldm/date_instances/date.yaml
new file mode 100644
index 000000000..5ba24d1a8
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/load/ai/ldm/date_instances/date.yaml
@@ -0,0 +1,15 @@
+# (C) 2025 GoodData Corporation
+description: ''
+granularities:
+ - DAY
+ - WEEK
+ - MONTH
+ - QUARTER
+ - YEAR
+granularitiesFormatting:
+ titleBase: ''
+ titlePattern: '%titleBase - %granularityTitle'
+id: date
+tags:
+ - Date
+title: Date
diff --git a/gooddata-pandas/tests/dataframe/test_dataframe_for_created_visualization.py b/gooddata-pandas/tests/dataframe/test_dataframe_for_created_visualization.py
new file mode 100644
index 000000000..121281525
--- /dev/null
+++ b/gooddata-pandas/tests/dataframe/test_dataframe_for_created_visualization.py
@@ -0,0 +1,64 @@
+# (C) 2025 GoodData Corporation
+from pathlib import Path
+
+from gooddata_pandas import DataFrameFactory
+from gooddata_sdk import CatalogWorkspace
+from gooddata_sdk.sdk import GoodDataSdk
+from tests_support.vcrpy_utils import get_vcr
+
+gd_vcr = get_vcr()
+
+_current_dir = Path(__file__).parent.absolute()
+_fixtures_dir = _current_dir / "fixtures"
+
+
+def _setup_test_workspace(sdk: GoodDataSdk, test_workspace_id: str, path: Path) -> None:
+ """Helper function to set up test workspace with required models.
+
+ Args:
+ sdk: GoodData SDK instance
+ test_workspace_id: ID of the test workspace
+ path: Path to the directory containing model files
+ """
+ # Check if workspace already exists
+ try:
+ sdk.catalog_workspace.get_workspace(test_workspace_id)
+ except Exception:
+ workspace = CatalogWorkspace(workspace_id=test_workspace_id, name=test_workspace_id)
+ sdk.catalog_workspace.create_or_update(workspace)
+
+ # Load LDM from disk and put it to the workspace
+ ldm_from_disk = sdk.catalog_workspace_content.load_ldm_from_disk(path)
+ sdk.catalog_workspace_content.put_declarative_ldm(test_workspace_id, ldm_from_disk, standalone_copy=True)
+
+ # Load Analytics Model from disk and put it to the workspace
+ am_from_disk = sdk.catalog_workspace_content.load_analytics_model_from_disk(path)
+ sdk.catalog_workspace_content.put_declarative_analytics_model(test_workspace_id, am_from_disk)
+
+
+@gd_vcr.use_cassette(str(_fixtures_dir / "dataframe_for_created_visualization.yaml"))
+def test_dataframe_for_created_visualization(test_config):
+ # To recreate the cassette, a complete local GoodData environment with gen_ai service is required.
+ # The gen_ai service cannot be included in the already available single docker image due to size constraints.
+ # Since in such cases we are interacting with an LLM, the results are not 100% deterministic.
+
+ # Get SDK instance and create test workspace
+ sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"])
+ gdf = DataFrameFactory(sdk, test_config["workspace_test"])
+ path = _current_dir / "load" / "ai"
+ test_workspace_id = test_config["workspace_test"]
+
+ try:
+ _setup_test_workspace(sdk, test_workspace_id, path)
+ response = sdk.compute.ai_chat(test_workspace_id, "Display the revenue by product")
+
+ df, df_metadata = gdf.for_created_visualization(response)
+
+ assert len(df.columns) == 1
+ assert len(df) == 18
+ assert df.columns[0] == ("Revenue",)
+ assert df.index.names[0] == "Product name"
+
+ finally:
+ sdk.compute.reset_ai_chat_history(test_workspace_id)
+ sdk.catalog_workspace.delete_workspace(test_workspace_id)
diff --git a/gooddata-pandas/tests/gd_test_config.yaml b/gooddata-pandas/tests/gd_test_config.yaml
index 92814e219..9cf73b755 100644
--- a/gooddata-pandas/tests/gd_test_config.yaml
+++ b/gooddata-pandas/tests/gd_test_config.yaml
@@ -2,4 +2,5 @@
host: "http://localhost:3000"
token: "YWRtaW46Ym9vdHN0cmFwOmFkbWluMTIz"
workspace: "demo"
+workspace_test: "demo_testing"
header_host: localhost
diff --git a/gooddata-sdk/gooddata_sdk/__init__.py b/gooddata-sdk/gooddata_sdk/__init__.py
index 266c60e65..99d091a5d 100644
--- a/gooddata-sdk/gooddata_sdk/__init__.py
+++ b/gooddata-sdk/gooddata_sdk/__init__.py
@@ -235,6 +235,7 @@
from gooddata_sdk.compute.model.base import ExecModelEntity, ObjId
from gooddata_sdk.compute.model.execution import (
BareExecutionResponse,
+ Execution,
ExecutionDefinition,
ExecutionResponse,
ExecutionResult,
diff --git a/gooddata-sdk/gooddata_sdk/catalog/organization/entity_model/llm_endpoint.py b/gooddata-sdk/gooddata_sdk/catalog/organization/entity_model/llm_endpoint.py
index 37831b537..4ac0b76c7 100644
--- a/gooddata-sdk/gooddata_sdk/catalog/organization/entity_model/llm_endpoint.py
+++ b/gooddata-sdk/gooddata_sdk/catalog/organization/entity_model/llm_endpoint.py
@@ -53,7 +53,6 @@ def init(
base_url: Optional[str] = None,
llm_organization: Optional[str] = None,
llm_model: Optional[str] = None,
- workspace_ids: Optional[list[str]] = None,
) -> CatalogLlmEndpoint:
return cls(
id=id,
@@ -65,7 +64,6 @@ def init(
base_url=base_url,
llm_organization=llm_organization,
llm_model=llm_model,
- workspace_ids=workspace_ids,
),
)
@@ -80,7 +78,6 @@ def from_api(cls, entity: dict[str, Any]) -> CatalogLlmEndpoint:
base_url=safeget(ea, ["baseUrl"]),
llm_organization=safeget(ea, ["llmOrganization"]),
llm_model=safeget(ea, ["llmModel"]),
- workspace_ids=safeget(ea, ["workspaceIds"]),
)
return cls(
id=entity["id"],
@@ -108,7 +105,6 @@ def init(
base_url: Optional[str] = None,
llm_organization: Optional[str] = None,
llm_model: Optional[str] = None,
- workspace_ids: Optional[list[str]] = None,
) -> CatalogLlmEndpointPatch:
return cls(
id=id,
@@ -120,7 +116,6 @@ def init(
base_url=base_url,
llm_organization=llm_organization,
llm_model=llm_model,
- workspace_ids=workspace_ids,
),
)
@@ -134,7 +129,6 @@ class CatalogLlmEndpointAttributes(Base):
base_url: Optional[str] = None
llm_organization: Optional[str] = None
llm_model: Optional[str] = None
- workspace_ids: Optional[list[str]] = None
@staticmethod
def client_class() -> type[JsonApiLlmEndpointInAttributes]:
@@ -150,7 +144,6 @@ class CatalogLlmEndpointPatchAttributes(Base):
base_url: Optional[str] = None
llm_organization: Optional[str] = None
llm_model: Optional[str] = None
- workspace_ids: Optional[list[str]] = None
@staticmethod
def client_class() -> type[JsonApiLlmEndpointPatchAttributes]:
diff --git a/gooddata-sdk/gooddata_sdk/catalog/organization/service.py b/gooddata-sdk/gooddata_sdk/catalog/organization/service.py
index 7b337d6f4..bde8f89c1 100644
--- a/gooddata-sdk/gooddata_sdk/catalog/organization/service.py
+++ b/gooddata-sdk/gooddata_sdk/catalog/organization/service.py
@@ -579,7 +579,6 @@ def create_llm_endpoint(
base_url: Optional[str] = None,
llm_organization: Optional[str] = None,
llm_model: Optional[str] = None,
- workspace_ids: Optional[list[str]] = None,
) -> CatalogLlmEndpoint:
"""
Create a new LLM endpoint.
@@ -593,8 +592,6 @@ def create_llm_endpoint(
base_url: Optional base URL for custom LLM endpoint
llm_organization: Optional LLM organization identifier
llm_model: Optional LLM default model override
- workspace_ids: Optional list of workspace IDs for which LLM endpoint is valid.
- If empty, it is valid for all workspaces.
Returns:
CatalogLlmEndpoint: Created LLM endpoint
@@ -608,7 +605,6 @@ def create_llm_endpoint(
base_url=base_url,
llm_organization=llm_organization,
llm_model=llm_model,
- workspace_ids=workspace_ids,
)
llm_endpoint_document = CatalogLlmEndpointDocument(data=llm_endpoint)
response = self._entities_api.create_entity_llm_endpoints(
@@ -626,7 +622,6 @@ def update_llm_endpoint(
base_url: Optional[str] = None,
llm_organization: Optional[str] = None,
llm_model: Optional[str] = None,
- workspace_ids: Optional[list[str]] = None,
) -> CatalogLlmEndpoint:
"""
Update an existing LLM endpoint.
@@ -640,8 +635,6 @@ def update_llm_endpoint(
base_url: Base URL for custom LLM endpoint
llm_organization: LLM organization identifier
llm_model: LLM default model override
- workspace_ids: List of workspace IDs for which LLM endpoint is valid.
- If empty, it is valid for all workspaces.
Returns:
CatalogLlmEndpoint: Updated LLM endpoint
@@ -655,7 +648,6 @@ def update_llm_endpoint(
base_url=base_url,
llm_organization=llm_organization,
llm_model=llm_model,
- workspace_ids=workspace_ids,
)
llm_endpoint_patch_document = CatalogLlmEndpointPatchDocument(data=llm_endpoint_patch)
response = self._entities_api.patch_entity_llm_endpoints(
diff --git a/gooddata-sdk/gooddata_sdk/compute/model/execution.py b/gooddata-sdk/gooddata_sdk/compute/model/execution.py
index b8028c474..046d49226 100644
--- a/gooddata-sdk/gooddata_sdk/compute/model/execution.py
+++ b/gooddata-sdk/gooddata_sdk/compute/model/execution.py
@@ -8,6 +8,7 @@
from attrs import define, field
from gooddata_api_client import models
from gooddata_api_client.model.afm import AFM
+from gooddata_api_client.model.afm_cancel_tokens import AfmCancelTokens
from gooddata_api_client.model.result_spec import ResultSpec
from gooddata_sdk.client import GoodDataApiClient
@@ -365,6 +366,16 @@ def read_result(self, limit: Union[int, list[int]], offset: Union[None, int, lis
)
return ExecutionResult(execution_result)
+ def cancel(self) -> None:
+ """
+ Cancels the execution backing this execution result.
+ """
+ if self.cancel_token is not None:
+ self._api_client.actions_api.cancel_executions(
+ self._workspace_id,
+ AfmCancelTokens({self.result_id: self.cancel_token}),
+ )
+
def __str__(self) -> str:
return self.__repr__()
@@ -442,6 +453,12 @@ def get_labels_and_formats(self) -> tuple[dict[str, str], dict[str, str]]:
def read_result(self, limit: Union[int, list[int]], offset: Union[None, int, list[int]] = None) -> ExecutionResult:
return self.bare_exec_response.read_result(limit, offset)
+ def cancel(self) -> None:
+ """
+ Cancels the execution.
+ """
+ self.bare_exec_response.cancel()
+
def __str__(self) -> str:
return self.__repr__()
diff --git a/gooddata-sdk/gooddata_sdk/compute/service.py b/gooddata-sdk/gooddata_sdk/compute/service.py
index 854cb9605..ba49759b7 100644
--- a/gooddata-sdk/gooddata_sdk/compute/service.py
+++ b/gooddata-sdk/gooddata_sdk/compute/service.py
@@ -16,7 +16,13 @@
from gooddata_api_client.model.search_result import SearchResult
from gooddata_sdk.client import GoodDataApiClient
-from gooddata_sdk.compute.model.execution import Execution, ExecutionDefinition, ResultCacheMetadata
+from gooddata_sdk.compute.model.execution import (
+ Execution,
+ ExecutionDefinition,
+ ResultCacheMetadata,
+ TableDimension,
+)
+from gooddata_sdk.compute.visualization_to_sdk_converter import VisualizationToSdkConverter
logger = logging.getLogger(__name__)
@@ -61,8 +67,8 @@ def retrieve_result_cache_metadata(self, workspace_id: str, result_id: str) -> R
Gets execution result's metadata from GoodData.CN workspace for given execution result ID.
Args:
- workspace_id: workspace identifier
- result_id: execution result ID
+ workspace_id (str): workspace identifier
+ result_id (str): execution result ID
Returns:
ResultCacheMetadata: execution result's metadata
"""
@@ -83,13 +89,39 @@ def retrieve_result_cache_metadata(self, workspace_id: str, result_id: str) -> R
)
return ResultCacheMetadata(result_cache_metadata=result_cache_metadata)
+ def build_exec_def_from_chat_result(self, chat_result: ChatResult) -> ExecutionDefinition:
+ """
+ Build execution definition from chat result.
+
+ Args:
+ chat_result: ChatResult object containing visualization details from AI chat response
+
+ Returns:
+ ExecutionDefinition: Execution definition built from chat result visualization
+ """
+ vis_object = chat_result.created_visualizations["objects"][0]
+ metrics_def = vis_object.get("metrics", [])
+ filters_def = vis_object.get("filters", [])
+ dimensionality_def = vis_object.get("dimensionality", [])
+
+ metrics = [VisualizationToSdkConverter.convert_metric(m) for m in metrics_def]
+ filters = [VisualizationToSdkConverter.convert_filter(f) for f in filters_def]
+ attributes = [VisualizationToSdkConverter.convert_attribute(d) for d in dimensionality_def]
+ dimensions = [
+ TableDimension(item_ids=[a.local_id for a in attributes]),
+ TableDimension(item_ids=["measureGroup"]),
+ ]
+
+ exec_def = ExecutionDefinition(dimensions=dimensions, metrics=metrics, filters=filters, attributes=attributes)
+ return exec_def
+
def ai_chat(self, workspace_id: str, question: str) -> ChatResult:
"""
Chat with AI in GoodData workspace.
Args:
- workspace_id: workspace identifier
- question: question to ask AI
+ workspace_id (str): workspace identifier
+ question (str): question for the AI
Returns:
ChatResult: Chat response
"""
@@ -113,8 +145,8 @@ def ai_chat_stream(self, workspace_id: str, question: str) -> Iterator[Any]:
Chat Stream with AI in GoodData workspace.
Args:
- workspace_id: workspace identifier
- question: question to ask AI
+ workspace_id (str): workspace identifier
+ question (str): question for the AI
Returns:
Iterator[Any]: Yields parsed JSON objects from each SSE event's data field
"""
@@ -143,9 +175,9 @@ def get_ai_chat_history(
Get chat history with AI in GoodData workspace.
Args:
- workspace_id: workspace identifier
- chat_history_interaction_id: collect history starting from this interaction id. If None, complete chat history is returned.
- thread_id_suffix: suffix to identify a specific chat thread. If provided, chat_history_interaction_id is ignored.
+ workspace_id (str): workspace identifier
+ chat_history_interaction_id (str): collect history starting from this interaction id. If None, complete chat history is returned. Defaults to "".
+ thread_id_suffix (str): suffix to identify a specific chat thread. If provided, chat_history_interaction_id is ignored. Defaults to "".
Returns:
ChatHistoryResult: Chat history response containing interactions and other metadata
"""
@@ -160,7 +192,7 @@ def reset_ai_chat_history(self, workspace_id: str) -> None:
Reset chat history with AI in GoodData workspace.
Args:
- workspace_id: workspace identifier
+ workspace_id (str): workspace identifier
"""
chat_history_request = ChatHistoryRequest(reset=True)
self._actions_api.ai_chat_history(workspace_id, chat_history_request, _check_return_type=False)
@@ -176,10 +208,10 @@ def set_ai_chat_history_feedback(
Provide feedback for a specific chat history interaction.
Args:
- workspace_id: workspace identifier
- user_feedback: feedback to provide ("POSITIVE", "NEGATIVE" or "NONE")
- chat_history_interaction_id: interaction id to provide feedback for
- thread_id_suffix: suffix to identify a specific chat thread
+ workspace_id (str): workspace identifier
+ user_feedback (str): feedback to provide ("POSITIVE", "NEGATIVE" or "NONE").
+ chat_history_interaction_id (str): interaction id to provide feedback for.
+ thread_id_suffix (str): suffix to identify a specific chat thread. Defaults to "".
"""
chat_history_request = ChatHistoryRequest(
user_feedback=user_feedback,
@@ -203,14 +235,14 @@ def search_ai(
Search for metadata objects using similarity search.
Args:
- workspace_id: workspace identifier
- question: keyword/sentence input for search
- deep_search: turn on deep search - if true, content of complex objects will be searched as well
- limit: maximum number of results to return
- object_types: list of object types to search for. Enum items: "attribute", "metric", "fact",
- "label", "date", "dataset", "visualization" and "dashboard"
- relevant_score_threshold: minimum relevance score threshold for results
- title_to_descriptor_ratio: ratio of title score to descriptor score
+ workspace_id (str): workspace identifier
+ question (str): keyword/sentence input for search
+ deep_search (bool): turn on deep search - if true, content of complex objects will be searched as well
+ limit (Optional[int]): maximum number of results to return. Defaults to None.
+ object_types (Optional[list[str]]): list of object types to search for. Enum items: "attribute", "metric", "fact",
+ "label", "date", "dataset", "visualization" and "dashboard". Defaults to None.
+ relevant_score_threshold (Optional[float]): minimum relevance score threshold for results. Defaults to None.
+ title_to_descriptor_ratio (Optional[float]): ratio of title score to descriptor score. Defaults to None.
Returns:
SearchResult: Search results
@@ -263,8 +295,8 @@ def sync_metadata(self, workspace_id: str, async_req: bool = False) -> None:
metadata synchronization becomes automatic.
Args:
- workspace_id: Workspace identifier
- async_req: If True, execute request asynchronously. Default is False.
+ workspace_id (str): Workspace identifier
+ async_req (bool): If True, execute request asynchronously. Defaults to False.
Returns:
None
diff --git a/gooddata-sdk/gooddata_sdk/compute/visualization_to_sdk_converter.py b/gooddata-sdk/gooddata_sdk/compute/visualization_to_sdk_converter.py
new file mode 100644
index 000000000..3221d395d
--- /dev/null
+++ b/gooddata-sdk/gooddata_sdk/compute/visualization_to_sdk_converter.py
@@ -0,0 +1,102 @@
+# (C) 2025 GoodData Corporation
+from typing import Any
+
+from gooddata_sdk.compute.model.attribute import Attribute
+from gooddata_sdk.compute.model.base import ObjId
+from gooddata_sdk.compute.model.filter import (
+ AbsoluteDateFilter,
+ AllTimeFilter,
+ Filter,
+ NegativeAttributeFilter,
+ PositiveAttributeFilter,
+ RelativeDateFilter,
+)
+from gooddata_sdk.compute.model.metric import Metric, SimpleMetric
+
+
+class VisualizationToSdkConverter:
+ """
+ Provides functions to convert visualization objects (dicts) to the SDK Compute model.
+ The input should be a visualization object as returned by `ai_chat`.
+ """
+
+ @staticmethod
+ def convert_attribute(attr_dict: dict[str, Any]) -> Attribute:
+ """
+ Converts a visualization attribute dict to an SDK Attribute.
+ Expects keys:
+ - id: str - The identifier of the attribute
+ - title: str - The display title/label for the attribute
+ Returns:
+ Attribute: An SDK Attribute object with local_id and label set
+ """
+ local_id = attr_dict["id"]
+ label = attr_dict["id"]
+ return Attribute(local_id=local_id, label=label)
+
+ @staticmethod
+ def convert_filter(filter_dict: dict[str, Any]) -> Filter:
+ """
+ Converts a visualization filter dict to an SDK Filter.
+ Expects keys:
+ - using: str - The identifier of the attribute/dataset to filter on
+ - include: list[str] (optional) - Values to include in positive filter
+ - exclude: list[str] (optional) - Values to exclude in negative filter
+ - from: str (optional) - Start date/shift for date filters
+ - to: str (optional) - End date/shift for date filters
+ - granularity: str (optional) - Time granularity for relative date filters
+ Returns:
+ Filter: One of:
+ - PositiveAttributeFilter: When include values specified
+ - NegativeAttributeFilter: When exclude values specified
+ - RelativeDateFilter: When granularity and from/to shifts specified
+ - AbsoluteDateFilter: When from/to dates specified
+ - AllTimeFilter: When no date range specified
+ """
+ using = filter_dict["using"]
+ include = filter_dict.get("include")
+ exclude = filter_dict.get("exclude")
+ _from = filter_dict.get("from")
+ _to = filter_dict.get("to")
+ granularity = filter_dict.get("granularity")
+
+ if include is not None:
+ return PositiveAttributeFilter(label=ObjId(using, "label"), values=include)
+ elif exclude is not None:
+ return NegativeAttributeFilter(label=ObjId(using, "label"), values=exclude)
+ elif granularity is not None and _from is not None and _to is not None:
+ return RelativeDateFilter(
+ dataset=ObjId(using, "dataset"), granularity=granularity, from_shift=_from, to_shift=_to
+ )
+ elif _from is not None and _to is not None:
+ return AbsoluteDateFilter(dataset=ObjId(using, "dataset"), from_date=_from, to_date=_to)
+ else:
+ return AllTimeFilter(dataset=ObjId(using, "dataset"))
+
+ @staticmethod
+ def convert_metric(metric_dict: dict[str, Any]) -> Metric:
+ """
+ Converts a visualization metric dict to an SDK Metric.
+ Expects keys:
+ - id: str - The identifier of the metric/fact/attribute
+ - type: str - The type of object ("metric", "fact", or "attribute")
+ - aggFunction: str (optional) - Aggregation function for facts/attributes
+ Returns:
+ Metric: One of:
+ - SimpleMetric with no aggregation for metrics
+ - SimpleMetric with aggregation for facts
+ - SimpleMetric with "count" aggregation for attributes
+ """
+ local_id = metric_dict["id"]
+ item = ObjId(metric_dict["id"], metric_dict["type"])
+
+ if metric_dict["type"] in ["metric", "fact"]:
+ aggregation = metric_dict.get("aggFunction")
+ return SimpleMetric(local_id=local_id, item=item, aggregation=aggregation)
+
+ elif metric_dict["type"] == "attribute":
+ aggregation = "count"
+ return SimpleMetric(local_id=local_id, item=item, aggregation=aggregation)
+
+ else:
+ raise ValueError(f"Unsupported metric type: {metric_dict['type']}")
diff --git a/gooddata-sdk/tests/catalog/fixtures/organization/create_llm_endpoint.yaml b/gooddata-sdk/tests/catalog/fixtures/organization/create_llm_endpoint.yaml
index 9b57ea79d..4adcfaed9 100644
--- a/gooddata-sdk/tests/catalog/fixtures/organization/create_llm_endpoint.yaml
+++ b/gooddata-sdk/tests/catalog/fixtures/organization/create_llm_endpoint.yaml
@@ -27,55 +27,35 @@ interactions:
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:
- '207'
- 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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string:
data:
@@ -100,9 +80,6 @@ interactions:
baseUrl: https://api.example.com
llmOrganization: org1
llmModel: gpt-4
- workspaceIds:
- - workspace1
- - workspace2
id: endpoint2
type: llmEndpoint
headers:
@@ -121,54 +98,34 @@ interactions:
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:
- - '312'
- 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'
+ - '269'
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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string:
data:
@@ -179,9 +136,6 @@ interactions:
baseUrl: https://api.example.com
llmOrganization: org1
llmModel: gpt-4
- workspaceIds:
- - workspace1
- - workspace2
title: Test Endpoint 2
links:
self: http://localhost:3000/api/v1/entities/llmEndpoints/endpoint2
@@ -201,50 +155,30 @@ interactions:
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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string: ''
- request:
@@ -263,49 +197,29 @@ interactions:
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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string: ''
diff --git a/gooddata-sdk/tests/catalog/fixtures/organization/delete_llm_endpoint.yaml b/gooddata-sdk/tests/catalog/fixtures/organization/delete_llm_endpoint.yaml
index d905858b6..912e04d07 100644
--- a/gooddata-sdk/tests/catalog/fixtures/organization/delete_llm_endpoint.yaml
+++ b/gooddata-sdk/tests/catalog/fixtures/organization/delete_llm_endpoint.yaml
@@ -27,55 +27,35 @@ interactions:
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:
- '207'
- 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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string:
data:
@@ -103,50 +83,30 @@ interactions:
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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string: ''
- request:
@@ -167,61 +127,41 @@ interactions:
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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string:
detail: The requested endpoint does not exist or you do not have permission
to access it.
status: 404
title: Not Found
- traceId: 681a119f51cc193fd4c5888855cceec4
+ traceId: af6c2c610c999d92ae5b97820b9370cb
- request:
method: DELETE
uri: http://localhost:3000/api/v1/entities/llmEndpoints/endpoint1
@@ -238,49 +178,29 @@ interactions:
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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string: ''
diff --git a/gooddata-sdk/tests/catalog/fixtures/organization/get_llm_endpoint.yaml b/gooddata-sdk/tests/catalog/fixtures/organization/get_llm_endpoint.yaml
index a728f5ae5..3399c4c26 100644
--- a/gooddata-sdk/tests/catalog/fixtures/organization/get_llm_endpoint.yaml
+++ b/gooddata-sdk/tests/catalog/fixtures/organization/get_llm_endpoint.yaml
@@ -27,55 +27,35 @@ interactions:
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:
- '207'
- 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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string:
data:
@@ -105,54 +85,34 @@ interactions:
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:
- '207'
- 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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string:
data:
@@ -180,49 +140,29 @@ interactions:
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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string: ''
diff --git a/gooddata-sdk/tests/catalog/fixtures/organization/list_llm_endpoints.yaml b/gooddata-sdk/tests/catalog/fixtures/organization/list_llm_endpoints.yaml
index 54ae37c6a..82c5439e8 100644
--- a/gooddata-sdk/tests/catalog/fixtures/organization/list_llm_endpoints.yaml
+++ b/gooddata-sdk/tests/catalog/fixtures/organization/list_llm_endpoints.yaml
@@ -27,55 +27,35 @@ interactions:
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:
- '209'
- 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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string:
data:
@@ -113,54 +93,34 @@ interactions:
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:
- '209'
- 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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string:
data:
@@ -190,54 +150,34 @@ interactions:
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:
- '572'
- 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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string:
data:
@@ -278,54 +218,34 @@ interactions:
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:
- '449'
- 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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string:
data:
@@ -356,50 +276,30 @@ interactions:
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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string: ''
- request:
@@ -418,49 +318,29 @@ interactions:
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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string: ''
diff --git a/gooddata-sdk/tests/catalog/fixtures/organization/update_llm_endpoint.yaml b/gooddata-sdk/tests/catalog/fixtures/organization/update_llm_endpoint.yaml
index 951e28ab6..db18ac255 100644
--- a/gooddata-sdk/tests/catalog/fixtures/organization/update_llm_endpoint.yaml
+++ b/gooddata-sdk/tests/catalog/fixtures/organization/update_llm_endpoint.yaml
@@ -27,55 +27,35 @@ interactions:
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:
- '207'
- 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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string:
data:
@@ -112,54 +92,34 @@ interactions:
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:
- '207'
- 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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string:
data:
@@ -184,8 +144,6 @@ interactions:
baseUrl: https://api.updated.com
llmOrganization: org2
llmModel: gpt-3.5
- workspaceIds:
- - workspace3
id: endpoint1
type: llmEndpoint
headers:
@@ -204,54 +162,34 @@ interactions:
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:
- - '301'
- 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'
+ - '271'
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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string:
data:
@@ -262,8 +200,6 @@ interactions:
baseUrl: https://api.updated.com
llmOrganization: org2
llmModel: gpt-3.5
- workspaceIds:
- - workspace3
title: Updated Title 2
links:
self: http://localhost:3000/api/v1/entities/llmEndpoints/endpoint1
@@ -292,54 +228,34 @@ interactions:
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:
- - '295'
- 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'
+ - '265'
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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string:
data:
@@ -350,8 +266,6 @@ interactions:
baseUrl: https://api.updated.com
llmOrganization: org2
llmModel: gpt-3.5
- workspaceIds:
- - workspace3
title: New Title
links:
self: http://localhost:3000/api/v1/entities/llmEndpoints/endpoint1
@@ -371,49 +285,29 @@ interactions:
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';
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
Pragma:
- no-cache
Referrer-Policy:
- - no-referrer
- Server:
- - nginx
+ - same-origin
Vary:
- Origin
- Access-Control-Request-Method
- Access-Control-Request-Headers
X-Content-Type-Options:
- nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
X-GDC-TRACE-ID: *id001
- X-XSS-Protection:
- - '0'
+ X-Xss-Protection:
+ - 1; mode=block
body:
string: ''
diff --git a/gooddata-sdk/tests/catalog/test_catalog_organization.py b/gooddata-sdk/tests/catalog/test_catalog_organization.py
index b69d18ed5..632ddb1ee 100644
--- a/gooddata-sdk/tests/catalog/test_catalog_organization.py
+++ b/gooddata-sdk/tests/catalog/test_catalog_organization.py
@@ -469,7 +469,6 @@ def test_create_llm_endpoint(test_config):
full_base_url = "https://api.example.com"
full_llm_org = "org1"
full_llm_model = "gpt-4"
- full_workspace_ids = ["workspace1", "workspace2"]
llm_endpoint_2 = sdk.catalog_organization.create_llm_endpoint(
id=full_id,
@@ -480,7 +479,6 @@ def test_create_llm_endpoint(test_config):
base_url=full_base_url,
llm_organization=full_llm_org,
llm_model=full_llm_model,
- workspace_ids=full_workspace_ids,
)
assert isinstance(llm_endpoint_2, CatalogLlmEndpoint)
assert llm_endpoint_2.id == full_id
@@ -493,7 +491,6 @@ def test_create_llm_endpoint(test_config):
assert llm_endpoint_2.attributes.base_url == full_base_url
assert llm_endpoint_2.attributes.llm_organization == full_llm_org
assert llm_endpoint_2.attributes.llm_model == full_llm_model
- assert llm_endpoint_2.attributes.workspace_ids == full_workspace_ids
finally:
# Cleanup
sdk.catalog_organization.delete_llm_endpoint(minimal_id)
@@ -531,7 +528,6 @@ def test_update_llm_endpoint(test_config):
full_base_url = "https://api.updated.com"
full_llm_org = "org2"
full_llm_model = "gpt-3.5"
- full_workspace_ids = ["workspace3"]
llm_endpoint_2 = sdk.catalog_organization.update_llm_endpoint(
id=initial_id,
@@ -542,7 +538,6 @@ def test_update_llm_endpoint(test_config):
base_url=full_base_url,
llm_organization=full_llm_org,
llm_model=full_llm_model,
- workspace_ids=full_workspace_ids,
)
assert isinstance(llm_endpoint_2, CatalogLlmEndpoint)
@@ -556,7 +551,6 @@ def test_update_llm_endpoint(test_config):
assert llm_endpoint_2.attributes.base_url == full_base_url
assert llm_endpoint_2.attributes.llm_organization == full_llm_org
assert llm_endpoint_2.attributes.llm_model == full_llm_model
- assert llm_endpoint_2.attributes.workspace_ids == full_workspace_ids
# Test that attributes are preserved when not provided
new_title = "New Title"
@@ -574,7 +568,6 @@ def test_update_llm_endpoint(test_config):
assert llm_endpoint_3.attributes.base_url == full_base_url
assert llm_endpoint_3.attributes.llm_organization == full_llm_org
assert llm_endpoint_3.attributes.llm_model == full_llm_model
- assert llm_endpoint_3.attributes.workspace_ids == full_workspace_ids
finally:
# Cleanup
sdk.catalog_organization.delete_llm_endpoint(initial_id)
diff --git a/gooddata-sdk/tests/compute/fixtures/build_exec_def_from_chat_result.yaml b/gooddata-sdk/tests/compute/fixtures/build_exec_def_from_chat_result.yaml
new file mode 100644
index 000000000..716fbf961
--- /dev/null
+++ b/gooddata-sdk/tests/compute/fixtures/build_exec_def_from_chat_result.yaml
@@ -0,0 +1,2252 @@
+# (C) 2025 GoodData Corporation
+version: 1
+interactions:
+ - request:
+ method: GET
+ uri: http://localhost:3000/api/v1/entities/workspaces/demo_testing?include=workspaces
+ 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:
+ Cache-Control:
+ - max-age=5, private
+ Content-Length:
+ - '172'
+ Content-Type:
+ - application/problem+json
+ DATE: &id001
+ - PLACEHOLDER
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string:
+ detail: The requested endpoint does not exist or you do not have permission
+ to access it.
+ status: 404
+ title: Not Found
+ traceId: 3078ca62b33d7fd01dc11b5be19dc230
+ - request:
+ method: GET
+ uri: http://localhost:3000/api/v1/entities/workspaces/demo_testing?include=workspaces
+ 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:
+ Cache-Control:
+ - max-age=5, private
+ Content-Length:
+ - '172'
+ Content-Type:
+ - application/problem+json
+ DATE: *id001
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string:
+ detail: The requested endpoint does not exist or you do not have permission
+ to access it.
+ status: 404
+ title: Not Found
+ traceId: df2b4b72297902bf4813ef4961090443
+ - request:
+ method: POST
+ uri: http://localhost:3000/api/v1/entities/workspaces
+ body:
+ data:
+ id: demo_testing
+ type: workspace
+ attributes:
+ name: demo_testing
+ 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:
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ Content-Length:
+ - '167'
+ Content-Type:
+ - application/vnd.gooddata.api+json
+ DATE: *id001
+ Expires:
+ - '0'
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Pragma:
+ - no-cache
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string:
+ data:
+ id: demo_testing
+ type: workspace
+ attributes:
+ name: demo_testing
+ links:
+ self: http://localhost:3000/api/v1/entities/workspaces/demo_testing
+ - request:
+ method: PUT
+ uri: http://localhost:3000/api/v1/layout/workspaces/demo_testing/logicalModel
+ body:
+ ldm:
+ datasets:
+ - grain:
+ - id: campaign_channel_id
+ type: attribute
+ id: campaign_channels
+ references:
+ - identifier:
+ id: campaigns
+ type: dataset
+ multivalue: false
+ sources:
+ - column: campaign_id
+ target:
+ id: campaign_id
+ type: attribute
+ dataType: INT
+ title: Campaign channels
+ description: Campaign channels
+ attributes:
+ - id: campaign_channel_id
+ labels: []
+ sourceColumn: campaign_channel_id
+ title: Campaign channel id
+ sourceColumnDataType: STRING
+ description: Campaign channel id
+ tags:
+ - Campaign channels
+ - id: campaign_channels.category
+ labels: []
+ sourceColumn: category
+ title: Category
+ sourceColumnDataType: STRING
+ description: Category
+ tags:
+ - Campaign channels
+ - id: type
+ labels: []
+ sourceColumn: type
+ title: Type
+ sourceColumnDataType: STRING
+ description: Type
+ tags:
+ - Campaign channels
+ facts:
+ - id: budget
+ sourceColumn: budget
+ title: Budget
+ sourceColumnDataType: NUMERIC
+ description: Budget
+ tags:
+ - Campaign channels
+ - id: spend
+ sourceColumn: spend
+ title: Spend
+ sourceColumnDataType: NUMERIC
+ description: Spend
+ tags:
+ - Campaign channels
+ dataSourceTableId:
+ dataSourceId: pg_local_docker-demo
+ id: campaign_channels
+ type: dataSource
+ path:
+ - demo_6d9051d9069a8468
+ - campaign_channels
+ tags:
+ - Campaign channels
+ - grain:
+ - id: campaign_id
+ type: attribute
+ id: campaigns
+ references: []
+ title: Campaigns
+ description: Campaigns
+ attributes:
+ - id: campaign_id
+ labels: []
+ sourceColumn: campaign_id
+ title: Campaign id
+ sourceColumnDataType: INT
+ description: Campaign id
+ tags:
+ - Campaigns
+ - id: campaign_name
+ labels: []
+ sourceColumn: campaign_name
+ title: Campaign name
+ sourceColumnDataType: STRING
+ description: Campaign name
+ tags:
+ - Campaigns
+ facts: []
+ dataSourceTableId:
+ dataSourceId: pg_local_docker-demo
+ id: campaigns
+ type: dataSource
+ path:
+ - demo_6d9051d9069a8468
+ - campaigns
+ tags:
+ - Campaigns
+ - grain:
+ - id: customer_id
+ type: attribute
+ id: customers
+ references: []
+ title: Customers
+ description: Customers
+ attributes:
+ - id: customer_id
+ labels: []
+ sourceColumn: customer_id
+ title: Customer id
+ sourceColumnDataType: INT
+ description: Customer id
+ tags:
+ - Customers
+ - id: customer_name
+ labels: []
+ sourceColumn: customer_name
+ title: Customer name
+ sourceColumnDataType: STRING
+ description: Customer name
+ tags:
+ - Customers
+ - id: region
+ labels: []
+ sourceColumn: region
+ title: Region
+ sourceColumnDataType: STRING
+ description: Region
+ tags:
+ - Customers
+ - id: state
+ labels:
+ - id: geo__state__location
+ sourceColumn: geo__state__location
+ title: Location
+ sourceColumnDataType: STRING
+ description: Location
+ tags:
+ - Customers
+ sourceColumn: state
+ title: State
+ sourceColumnDataType: STRING
+ description: State
+ tags:
+ - Customers
+ facts: []
+ dataSourceTableId:
+ dataSourceId: pg_local_docker-demo
+ id: customers
+ type: dataSource
+ path:
+ - demo_6d9051d9069a8468
+ - customers
+ tags:
+ - Customers
+ - grain:
+ - id: order_line_id
+ type: attribute
+ id: order_lines
+ references:
+ - identifier:
+ id: campaigns
+ type: dataset
+ multivalue: false
+ sources:
+ - column: campaign_id
+ target:
+ id: campaign_id
+ type: attribute
+ dataType: INT
+ - identifier:
+ id: customers
+ type: dataset
+ multivalue: false
+ sources:
+ - column: customer_id
+ target:
+ id: customer_id
+ type: attribute
+ dataType: INT
+ - identifier:
+ id: date
+ type: dataset
+ multivalue: false
+ sources:
+ - column: date
+ target:
+ id: date
+ type: date
+ dataType: DATE
+ - identifier:
+ id: products
+ type: dataset
+ multivalue: false
+ sources:
+ - column: product_id
+ target:
+ id: product_id
+ type: attribute
+ dataType: INT
+ title: Order lines
+ description: Order lines
+ attributes:
+ - id: order_id
+ labels: []
+ sourceColumn: order_id
+ title: Order id
+ sourceColumnDataType: STRING
+ description: Order id
+ tags:
+ - Order lines
+ - id: order_line_id
+ labels: []
+ sourceColumn: order_line_id
+ title: Order line id
+ sourceColumnDataType: STRING
+ description: Order line id
+ tags:
+ - Order lines
+ - id: order_status
+ labels: []
+ sourceColumn: order_status
+ title: Order status
+ sourceColumnDataType: STRING
+ description: Order status
+ tags:
+ - Order lines
+ facts:
+ - id: price
+ sourceColumn: price
+ title: Price
+ sourceColumnDataType: NUMERIC
+ description: Price
+ tags:
+ - Order lines
+ - id: quantity
+ sourceColumn: quantity
+ title: Quantity
+ sourceColumnDataType: NUMERIC
+ description: Quantity
+ tags:
+ - Order lines
+ dataSourceTableId:
+ dataSourceId: pg_local_docker-demo
+ id: order_lines
+ type: dataSource
+ path:
+ - demo_6d9051d9069a8468
+ - order_lines
+ tags:
+ - Order lines
+ workspaceDataFilterColumns:
+ - dataType: STRING
+ name: wdf__region
+ - dataType: STRING
+ name: wdf__state
+ - grain:
+ - id: product_id
+ type: attribute
+ id: products
+ references: []
+ title: Products
+ description: Products
+ attributes:
+ - id: product_id
+ labels: []
+ sourceColumn: product_id
+ title: Product id
+ sourceColumnDataType: INT
+ description: Product id
+ tags:
+ - Products
+ - id: product_name
+ labels: []
+ sourceColumn: product_name
+ title: Product name
+ sourceColumnDataType: STRING
+ description: Product name
+ tags:
+ - Products
+ - id: products.category
+ labels: []
+ sourceColumn: category
+ title: Category
+ sourceColumnDataType: STRING
+ description: Category
+ tags:
+ - Products
+ facts: []
+ dataSourceTableId:
+ dataSourceId: pg_local_docker-demo
+ id: products
+ type: dataSource
+ path:
+ - demo_6d9051d9069a8468
+ - products
+ tags:
+ - Products
+ dateInstances:
+ - granularities:
+ - DAY
+ - WEEK
+ - MONTH
+ - QUARTER
+ - YEAR
+ granularitiesFormatting:
+ titleBase: ''
+ titlePattern: '%titleBase - %granularityTitle'
+ id: date
+ title: Date
+ description: ''
+ tags:
+ - Date
+ 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:
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ DATE: *id001
+ Expires:
+ - '0'
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Pragma:
+ - no-cache
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string: ''
+ - request:
+ method: PUT
+ uri: http://localhost:3000/api/v1/layout/workspaces/demo_testing/analyticsModel
+ body:
+ analytics:
+ analyticalDashboards:
+ - content:
+ filterContextRef:
+ identifier:
+ id: 4717b786-2c2e-4596-adb5-4f8b0ab0e19a
+ type: filterContext
+ layout:
+ sections:
+ - header:
+ description: All in one description
+ title: All in one title
+ items:
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: top_10_customers
+ type: visualizationObject
+ localIdentifier: 2c7400ac-5f63-46f8-aa12-a2debe13fd14
+ properties: {}
+ title: Top 10 Customers
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: revenue_by_product
+ type: visualizationObject
+ localIdentifier: a50daab7-fb78-45eb-a2b4-d5cc8cbd89e9
+ properties: {}
+ title: Revenue by Product
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: revenue_by_category_trend
+ type: visualizationObject
+ localIdentifier: efccc783-5896-4eb6-890f-2e51ece3f159
+ properties: {}
+ title: Revenue by Category Trend
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: product_saleability
+ type: visualizationObject
+ localIdentifier: d738d85f-e935-4e2c-b8b4-a8b456f55079
+ properties: {}
+ title: Product Saleability
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: product_categories_pie_chart
+ type: visualizationObject
+ localIdentifier: 8c194c85-bad6-42da-b4e3-08d270278316
+ properties: {}
+ title: Product Categories Pie Chart
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: percentage_of_customers_by_region
+ type: visualizationObject
+ localIdentifier: 2c3307b2-581f-4bab-9252-6b5279565b24
+ properties: {}
+ title: Percentage of Customers by Region
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: customers_trend
+ type: visualizationObject
+ localIdentifier: 87505bb0-d954-4add-811d-f4e75e431660
+ properties: {}
+ title: Customers Trend
+ type: insight
+ - size:
+ xl:
+ gridWidth: 6
+ type: IDashboardLayoutItem
+ widget:
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: campaign_spend
+ type: visualizationObject
+ localIdentifier: 0cb01f6a-6ea6-4c22-bb12-ded00a9eac66
+ properties: {}
+ title: Campaign Spend
+ type: insight
+ - size:
+ xl:
+ gridWidth: 12
+ type: IDashboardLayoutItem
+ widget:
+ dateDataSet:
+ identifier:
+ id: date
+ type: dataset
+ description: ''
+ drills: []
+ ignoreDashboardFilters: []
+ insight:
+ identifier:
+ id: percent_revenue_per_product_by_customer_and_category
+ type: visualizationObject
+ localIdentifier: 2213d6e4-6df7-458e-806d-f02bae5ce66a
+ properties: {}
+ title: '% Revenue per Product by Customer and Category'
+ type: insight
+ type: IDashboardLayoutSection
+ type: IDashboardLayout
+ version: '2'
+ id: b2f2d436-9831-4fe0-81df-8c59fd33242b
+ title: All visualizations 1 with custom filter
+ description: ''
+ analyticalDashboardExtensions: []
+ attributeHierarchies: []
+ dashboardPlugins: []
+ filterContexts:
+ - content:
+ filters:
+ - attributeFilter:
+ attributeElements:
+ uris:
+ - Biolid
+ - ChalkTalk
+ - Compglass
+ - Elentrix
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ filterElementsBy: []
+ localIdentifier: 6b94bbb585d44c79967867719e524fae
+ negativeSelection: false
+ selectionMode: multi
+ version: '2'
+ id: 4717b786-2c2e-4596-adb5-4f8b0ab0e19a
+ title: filterContext
+ description: ''
+ - content:
+ filters:
+ - dateFilter:
+ from: '0'
+ granularity: GDC.time.year
+ to: '0'
+ type: relative
+ version: '2'
+ id: 9f2b1f37-befa-450e-a6cc-dc576845c412
+ title: filterContext
+ description: ''
+ metrics:
+ - content:
+ format: '#,##0'
+ maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id})
+ id: amount_of_active_customers
+ title: '# of Active Customers'
+ description: ''
+ - content:
+ format: '#,##0'
+ maql: SELECT COUNT({attribute/order_id})
+ id: amount_of_orders
+ title: '# of Orders'
+ description: ''
+ - content:
+ format: '#,##0'
+ maql: 'SELECT {metric/amount_of_active_customers} WHERE (SELECT {metric/revenue}
+ BY {attribute/customer_id}) > 10000 '
+ id: amount_of_top_customers
+ title: '# of Top Customers'
+ description: ''
+ - content:
+ format: '#,##0.00'
+ maql: SELECT {metric/amount_of_orders} WHERE NOT ({label/order_status}
+ IN ("null", "Returned", "Canceled"))
+ id: amount_of_valid_orders
+ title: '# of Valid Orders'
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT SUM({fact/spend})
+ id: campaign_spend
+ title: Campaign Spend
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT SUM({fact/price}*{fact/quantity})
+ id: order_amount
+ title: Order Amount
+ description: ''
+ - content:
+ format: '#,##0.0%'
+ maql: SELECT {metric/revenue} / {metric/total_revenue}
+ id: percent_revenue
+ title: '% Revenue'
+ description: ''
+ - content:
+ format: '#,##0.0%'
+ maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\
+ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}"
+ id: percent_revenue_from_top_10_customers
+ title: '% Revenue from Top 10 Customers'
+ description: ''
+ - content:
+ format: '#,##0.0%'
+ maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10_percent}\
+ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}"
+ id: percent_revenue_from_top_10_percent_customers
+ title: '% Revenue from Top 10% Customers'
+ description: ''
+ - content:
+ format: '#,##0.0%'
+ maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10_percent}\
+ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}"
+ id: percent_revenue_from_top_10_percent_products
+ title: '% Revenue from Top 10% Products'
+ description: ''
+ - content:
+ format: '#,##0.0%'
+ maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\
+ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}"
+ id: percent_revenue_from_top_10_products
+ title: '% Revenue from Top 10 Products'
+ description: ''
+ - content:
+ format: '#,##0.0%'
+ maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY {attribute/products.category},
+ ALL OTHER)
+ id: percent_revenue_in_category
+ title: '% Revenue in Category'
+ description: ''
+ - content:
+ format: '#,##0.0%'
+ maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id})
+ id: percent_revenue_per_product
+ title: '% Revenue per Product'
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT {metric/order_amount} WHERE NOT ({label/order_status}
+ IN ("null", "Returned", "Canceled"))
+ id: revenue
+ title: Revenue
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing")
+ id: revenue-clothing
+ title: Revenue (Clothing)
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} WHERE {label/products.category} IN (
+ "Electronics")
+ id: revenue-electronic
+ title: Revenue (Electronic)
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home")
+ id: revenue-home
+ title: Revenue (Home)
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor")
+ id: revenue-outdoor
+ title: Revenue (Outdoor)
+ description: ''
+ - content:
+ format: $#,##0.0
+ maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id})
+ id: revenue_per_customer
+ title: Revenue per Customer
+ description: ''
+ - content:
+ format: $#,##0.0
+ maql: SELECT {metric/revenue} / {metric/campaign_spend}
+ id: revenue_per_dollar_spent
+ title: Revenue per Dollar Spent
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue})
+ id: revenue_top_10
+ title: Revenue / Top 10
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue})
+ id: revenue_top_10_percent
+ title: Revenue / Top 10%
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT {metric/revenue} BY ALL OTHER
+ id: total_revenue
+ title: Total Revenue
+ description: ''
+ - content:
+ format: $#,##0
+ maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER
+ id: total_revenue-no_filters
+ title: Total Revenue (No Filters)
+ description: ''
+ visualizationObjects:
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: campaign_spend
+ type: metric
+ localIdentifier: d319bcb2d8c04442a684e3b3cd063381
+ title: Campaign Spend
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: campaign_channels.category
+ type: label
+ localIdentifier: 291c085e7df8420db84117ca49f59c49
+ localIdentifier: view
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: campaign_name
+ type: label
+ localIdentifier: d9dd143d647d4d148405a60ec2cf59bc
+ localIdentifier: segment
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: type
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: campaign_channels.category
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: campaign_name
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ legend:
+ position: bottom
+ version: '2'
+ visualizationUrl: local:treemap
+ id: campaign_spend
+ title: Campaign Spend
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ alias: Active Customers
+ definition:
+ measureDefinition:
+ computeRatio: false
+ filters: []
+ item:
+ identifier:
+ id: amount_of_active_customers
+ type: metric
+ localIdentifier: 2ba0b87b59ca41a4b1530e81a5c1d081
+ title: '# of Active Customers'
+ localIdentifier: measures
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue_per_customer
+ type: metric
+ localIdentifier: ec0606894b9f4897b7beaf1550608928
+ title: Revenue per Customer
+ localIdentifier: secondary_measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: date.month
+ type: label
+ localIdentifier: 0de7d7f08af7480aa636857a26be72b6
+ localIdentifier: view
+ filters:
+ - relativeDateFilter:
+ dataSet:
+ identifier:
+ id: date
+ type: dataset
+ from: -11
+ granularity: GDC.time.month
+ to: 0
+ properties:
+ controls:
+ colorMapping:
+ - color:
+ type: guid
+ value: '20'
+ id: 2ba0b87b59ca41a4b1530e81a5c1d081
+ - color:
+ type: guid
+ value: '4'
+ id: ec0606894b9f4897b7beaf1550608928
+ dualAxis: true
+ legend:
+ position: bottom
+ primaryChartType: column
+ secondaryChartType: line
+ secondary_yaxis:
+ measures:
+ - ec0606894b9f4897b7beaf1550608928
+ xaxis:
+ name:
+ visible: false
+ rotation: auto
+ version: '2'
+ visualizationUrl: local:combo2
+ id: customers_trend
+ title: Customers Trend
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: percent_revenue_per_product
+ type: metric
+ localIdentifier: 08d8346c1ce7438994b251991c0fbf65
+ title: '% Revenue per Product'
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: b2350c06688b4da9b3833ebcce65527f
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: customer_name
+ type: label
+ localIdentifier: 7a4045fd00ac44579f52406df679435f
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: 6a003ffd14994237ba64c4a02c488429
+ - attribute:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: 75ea396d0c8b48098e31dccf8b5801d3
+ localIdentifier: attribute
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: customer_name
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ properties:
+ sortItems:
+ - attributeSortItem:
+ attributeIdentifier: 7a4045fd00ac44579f52406df679435f
+ direction: asc
+ version: '2'
+ visualizationUrl: local:table
+ id: percent_revenue_per_product_by_customer_and_category
+ title: '% Revenue per Product by Customer and Category'
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: amount_of_active_customers
+ type: metric
+ localIdentifier: 1a14cdc1293c46e89a2e25d3e741d235
+ title: '# of Active Customers'
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: date.month
+ type: label
+ localIdentifier: c1feca1864244ec2ace7a9b9d7fda231
+ localIdentifier: view
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: region
+ type: label
+ localIdentifier: 530cddbd7ca04d039e73462d81ed44d5
+ localIdentifier: stack
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: region
+ type: label
+ notIn:
+ values: []
+ - relativeDateFilter:
+ dataSet:
+ identifier:
+ id: date
+ type: dataset
+ from: -11
+ granularity: GDC.time.month
+ to: 0
+ properties:
+ controls:
+ legend:
+ position: bottom
+ stackMeasuresToPercent: true
+ version: '2'
+ visualizationUrl: local:area
+ id: percentage_of_customers_by_region
+ title: Percentage of Customers by Region
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 590d332ef686468b8878ae41b23341c6
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: b166c71091864312a14c7ae8ff886ffe
+ localIdentifier: view
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: e920a50e0bbb49788df0aac53634c1cd
+ localIdentifier: segment
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ legend:
+ position: bottom
+ version: '2'
+ visualizationUrl: local:treemap
+ id: product_breakdown
+ title: Product Breakdown
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ computeRatio: true
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 162b857af49d45769bc12604a5c192b9
+ title: '% Revenue'
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: fe513cef1c6244a5ac21c5f49c56b108
+ localIdentifier: view
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ dataLabels:
+ visible: auto
+ legend:
+ position: bottom
+ version: '2'
+ visualizationUrl: local:donut
+ id: product_categories_pie_chart
+ title: Product Categories Pie Chart
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ alias: Previous Period
+ definition:
+ popMeasureDefinition:
+ measureIdentifier: c82e025fa2db4afea9a600a424591dbe
+ popAttribute:
+ identifier:
+ id: date.year
+ type: label
+ localIdentifier: c82e025fa2db4afea9a600a424591dbe_pop
+ - measure:
+ alias: This Period
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: c82e025fa2db4afea9a600a424591dbe
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: c804ef5ba7944a5a9f360c86a9e95e9a
+ localIdentifier: view
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ - relativeDateFilter:
+ dataSet:
+ identifier:
+ id: date
+ type: dataset
+ from: -11
+ granularity: GDC.time.month
+ to: 0
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ legend:
+ position: bottom
+ stackMeasures: false
+ xaxis:
+ name:
+ visible: false
+ yaxis:
+ name:
+ visible: false
+ version: '2'
+ visualizationUrl: local:column
+ id: product_revenue_comparison-over_previous_period
+ title: Product Revenue Comparison (over previous period)
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ alias: Number of Orders
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: amount_of_orders
+ type: metric
+ localIdentifier: aeb5d51a162d4b59aba3bd6ddebcc780
+ title: '# of Orders'
+ localIdentifier: measures
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 94b3edd3a73c4a48a4d13bbe9442cc98
+ title: Revenue
+ localIdentifier: secondary_measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: d2a991bdd123448eb2be73d79f1180c4
+ localIdentifier: attribute
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ dataLabels:
+ visible: auto
+ grid:
+ enabled: true
+ version: '2'
+ visualizationUrl: local:scatter
+ id: product_saleability
+ title: Product Saleability
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ alias: Items Sold
+ definition:
+ measureDefinition:
+ aggregation: sum
+ filters: []
+ item:
+ identifier:
+ id: quantity
+ type: fact
+ format: '#,##0.00'
+ localIdentifier: 29486504dd0e4a36a18b0b2f792d3a46
+ title: Sum of Quantity
+ - measure:
+ definition:
+ measureDefinition:
+ aggregation: avg
+ filters: []
+ item:
+ identifier:
+ id: price
+ type: fact
+ format: '#,##0.00'
+ localIdentifier: aa6391acccf1452f8011201aef9af492
+ title: Avg Price
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: percent_revenue_in_category
+ type: metric
+ localIdentifier: 2cd39539d8da46c9883e63caa3ba7cc0
+ title: '% Revenue in Category'
+ - measure:
+ alias: Total Revenue
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 9a0f08331c094c7facf2a0b4f418de0a
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: 06bc6b3b9949466494e4f594c11f1bff
+ - attribute:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: 192668bfb6a74e9ab7b5d1ce7cb68ea3
+ localIdentifier: attribute
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: customer_name
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ properties:
+ sortItems:
+ - attributeSortItem:
+ attributeIdentifier: 06bc6b3b9949466494e4f594c11f1bff
+ direction: asc
+ version: '2'
+ visualizationUrl: local:table
+ id: revenue_and_quantity_by_product_and_category
+ title: Revenue and Quantity by Product and Category
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 7df6c34387744d69b23ec92e1a5cf543
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: date.month
+ type: label
+ localIdentifier: 4bb4fc1986c546de9ad976e6ec23fed4
+ localIdentifier: trend
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: 34bddcb1cd024902a82396216b0fa9d8
+ localIdentifier: segment
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ - relativeDateFilter:
+ dataSet:
+ identifier:
+ id: date
+ type: dataset
+ granularity: GDC.time.year
+ properties:
+ controls:
+ legend:
+ position: bottom
+ version: '2'
+ visualizationUrl: local:line
+ id: revenue_by_category_trend
+ title: Revenue by Category Trend
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 4ae3401bdbba4938afe983df4ba04e1c
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: 1c8ba72dbfc84ddd913bf81dc355c427
+ localIdentifier: view
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ properties: {}
+ version: '2'
+ visualizationUrl: local:bar
+ id: revenue_by_product
+ title: Revenue by Product
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: campaign_spend
+ type: metric
+ localIdentifier: 13a50d811e474ac6808d8da7f4673b35
+ title: Campaign Spend
+ localIdentifier: measures
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue_per_dollar_spent
+ type: metric
+ localIdentifier: a0f15e82e6334280a44dbedc7d086e7c
+ title: Revenue per Dollar Spent
+ localIdentifier: secondary_measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: campaign_name
+ type: label
+ localIdentifier: 1d9fa968bafb423eb29c938dfb1207ff
+ localIdentifier: attribute
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: campaign_name
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ xaxis:
+ min: '0'
+ yaxis:
+ min: '0'
+ version: '2'
+ visualizationUrl: local:scatter
+ id: revenue_per_usd_vs_spend_by_campaign
+ title: Revenue per $ vs Spend by Campaign
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ computeRatio: false
+ filters: []
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ localIdentifier: 60c854969a9c4c278ab596d99c222e92
+ title: Revenue
+ localIdentifier: measures
+ - items:
+ - measure:
+ alias: Number of Orders
+ definition:
+ measureDefinition:
+ computeRatio: false
+ filters: []
+ item:
+ identifier:
+ id: amount_of_orders
+ type: metric
+ localIdentifier: c2fa7ef48cc54af99f8c280eb451e051
+ title: '# of Orders'
+ localIdentifier: secondary_measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: date.month
+ type: label
+ localIdentifier: 413ac374b65648fa96826ca01d47bdda
+ localIdentifier: view
+ filters:
+ - relativeDateFilter:
+ dataSet:
+ identifier:
+ id: date
+ type: dataset
+ from: -3
+ granularity: GDC.time.quarter
+ to: 0
+ properties:
+ controls:
+ dualAxis: true
+ legend:
+ position: bottom
+ primaryChartType: column
+ secondaryChartType: line
+ secondary_yaxis:
+ measures:
+ - c2fa7ef48cc54af99f8c280eb451e051
+ xaxis:
+ name:
+ visible: false
+ rotation: auto
+ version: '2'
+ visualizationUrl: local:combo2
+ id: revenue_trend
+ title: Revenue Trend
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue_top_10
+ type: metric
+ localIdentifier: 3f127ccfe57a40399e23f9ae2a4ad810
+ title: Revenue / Top 10
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: customer_name
+ type: label
+ localIdentifier: f4e39e24f11e4827a191c30d65c89d2c
+ localIdentifier: view
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: state
+ type: label
+ localIdentifier: bbccd430176d428caed54c99afc9589e
+ localIdentifier: stack
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: customer_name
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: state
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ legend:
+ position: bottom
+ version: '2'
+ visualizationUrl: local:bar
+ id: top_10_customers
+ title: Top 10 Customers
+ description: ''
+ - content:
+ buckets:
+ - items:
+ - measure:
+ definition:
+ measureDefinition:
+ filters: []
+ item:
+ identifier:
+ id: revenue_top_10
+ type: metric
+ localIdentifier: 77dc71bbac92412bac5f94284a5919df
+ title: Revenue / Top 10
+ localIdentifier: measures
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: 781952e728204dcf923142910cc22ae2
+ localIdentifier: view
+ - items:
+ - attribute:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ localIdentifier: fe513cef1c6244a5ac21c5f49c56b108
+ localIdentifier: stack
+ filters:
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: product_name
+ type: label
+ notIn:
+ values: []
+ - negativeAttributeFilter:
+ displayForm:
+ identifier:
+ id: products.category
+ type: label
+ notIn:
+ values: []
+ properties:
+ controls:
+ legend:
+ position: bottom
+ version: '2'
+ visualizationUrl: local:bar
+ id: top_10_products
+ title: Top 10 Products
+ description: ''
+ exportDefinitions: []
+ 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:
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ DATE: *id001
+ Expires:
+ - '0'
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Pragma:
+ - no-cache
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string: ''
+ - request:
+ method: POST
+ uri: http://localhost:3000/api/v1/actions/workspaces/demo_testing/ai/chat
+ body:
+ question: Display the revenue by product
+ headers:
+ Accept:
+ - application/json
+ Accept-Encoding:
+ - br, gzip, deflate
+ Content-Type:
+ - application/json
+ X-GDC-VALIDATE-RELATIONS:
+ - 'true'
+ X-Requested-With:
+ - XMLHttpRequest
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ Content-Length:
+ - '775'
+ Content-Type:
+ - application/json
+ DATE: *id001
+ Expires:
+ - '0'
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Pragma:
+ - no-cache
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string:
+ routing:
+ useCase: CREATE_VISUALIZATION
+ reasoning: Creating a new visualization ...
+ createdVisualizations:
+ objects:
+ - id: revenue_by_product
+ title: Revenue by Product
+ visualizationType: COLUMN
+ metrics:
+ - id: revenue
+ type: metric
+ title: Revenue
+ dimensionality:
+ - id: product_name
+ type: attribute
+ title: Product name
+ filters: []
+ suggestions:
+ - query: Slice by 'Category'
+ label: Slice by Category
+ - query: Switch to a table view for detailed comparison
+ label: Switch to Table View
+ reasoning: '
+
+
+
+
+
+ Here is a column chart showing the Revenue by Product grouped by Product
+ name.
+
+ - Metrics: Revenue
+
+ - Attributes: Product name
+
+ - Filter: None
+
+
+ '
+ chatHistoryInteractionId: bc34b41ff5d04e5eb658e0dffc0a3fd8
+ - request:
+ method: POST
+ uri: http://localhost:3000/api/v1/actions/workspaces/demo_testing/execution/afm/execute
+ body:
+ execution:
+ attributes:
+ - label:
+ identifier:
+ id: product_name
+ type: label
+ localIdentifier: product_name
+ filters: []
+ measures:
+ - definition:
+ measure:
+ item:
+ identifier:
+ id: revenue
+ type: metric
+ computeRatio: false
+ filters: []
+ localIdentifier: revenue
+ resultSpec:
+ dimensions:
+ - itemIdentifiers:
+ - product_name
+ localIdentifier: dim_0
+ - itemIdentifiers:
+ - measureGroup
+ localIdentifier: dim_1
+ headers:
+ Accept:
+ - application/json
+ Accept-Encoding:
+ - br, gzip, deflate
+ Content-Type:
+ - application/json
+ X-GDC-VALIDATE-RELATIONS:
+ - 'true'
+ X-Requested-With:
+ - XMLHttpRequest
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ Content-Length:
+ - '646'
+ Content-Type:
+ - application/json
+ DATE: *id001
+ Expires:
+ - '0'
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Pragma:
+ - no-cache
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-Gdc-Cancel-Token:
+ - 00d8589a-ac36-4003-91b7-4d7740c479ca
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string:
+ executionResponse:
+ dimensions:
+ - headers:
+ - attributeHeader:
+ localIdentifier: product_name
+ label:
+ id: product_name
+ type: label
+ labelName: Product name
+ attribute:
+ id: product_name
+ type: attribute
+ attributeName: Product name
+ granularity: null
+ primaryLabel:
+ id: product_name
+ type: label
+ valueType: TEXT
+ localIdentifier: dim_0
+ - headers:
+ - measureGroupHeaders:
+ - localIdentifier: revenue
+ format: $#,##0
+ name: Revenue
+ localIdentifier: dim_1
+ links:
+ executionResult: 3686f03e3a854572d385962cdf522802010cfa49:8795bd272ad09519a4d36263aad7dc9b1d9ed3cebc1e874adcbd8618d419e005
+ - request:
+ method: POST
+ uri: http://localhost:3000/api/v1/actions/workspaces/demo_testing/ai/chatHistory
+ body:
+ reset: true
+ headers:
+ Accept:
+ - application/json
+ Accept-Encoding:
+ - br, gzip, deflate
+ Content-Type:
+ - application/json
+ X-GDC-VALIDATE-RELATIONS:
+ - 'true'
+ X-Requested-With:
+ - XMLHttpRequest
+ response:
+ status:
+ code: 200
+ message: OK
+ headers:
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ Content-Length:
+ - '51'
+ Content-Type:
+ - application/json
+ DATE: *id001
+ Expires:
+ - '0'
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Pragma:
+ - no-cache
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string:
+ interactions: []
+ threadId: demo_testing.admin
+ - request:
+ method: GET
+ uri: http://localhost:3000/api/v1/entities/workspaces?include=workspaces&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:
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ Content-Length:
+ - '1274'
+ Content-Type:
+ - application/vnd.gooddata.api+json
+ DATE: *id001
+ Expires:
+ - '0'
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Pragma:
+ - no-cache
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string:
+ data:
+ - id: demo_west
+ type: workspace
+ attributes:
+ name: Demo West
+ relationships:
+ parent:
+ data:
+ id: demo
+ type: workspace
+ links:
+ self: http://localhost:3000/api/v1/entities/workspaces/demo_west
+ - id: demo_west_california
+ type: workspace
+ attributes:
+ name: Demo West California
+ relationships:
+ parent:
+ data:
+ id: demo_west
+ type: workspace
+ links:
+ self: http://localhost:3000/api/v1/entities/workspaces/demo_west_california
+ - id: demo
+ type: workspace
+ attributes:
+ name: Demo
+ links:
+ self: http://localhost:3000/api/v1/entities/workspaces/demo
+ - id: demo_testing
+ type: workspace
+ attributes:
+ name: demo_testing
+ links:
+ self: http://localhost:3000/api/v1/entities/workspaces/demo_testing
+ included:
+ - id: demo
+ type: workspace
+ attributes:
+ name: Demo
+ links:
+ self: http://localhost:3000/api/v1/entities/workspaces/demo
+ - id: demo_west
+ type: workspace
+ attributes:
+ name: Demo West
+ links:
+ self: http://localhost:3000/api/v1/entities/workspaces/demo_west
+ links:
+ self: http://localhost:3000/api/v1/entities/workspaces?include=workspaces&page=0&size=500
+ next: http://localhost:3000/api/v1/entities/workspaces?include=workspaces&page=1&size=500
+ - request:
+ method: DELETE
+ uri: http://localhost:3000/api/v1/entities/workspaces/demo_testing
+ 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:
+ Cache-Control:
+ - no-cache, no-store, max-age=0, must-revalidate
+ DATE: *id001
+ Expires:
+ - '0'
+ Featurepolicy:
+ - geolocation 'none'; midi 'none'; notifications 'none'; push 'none'; sync-xhr
+ 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope
+ 'none'; speaker 'none'; vibrate 'none'; fullscreen 'none'; payment 'none';
+ Pragma:
+ - no-cache
+ Referrer-Policy:
+ - same-origin
+ Vary:
+ - Origin
+ - Access-Control-Request-Method
+ - Access-Control-Request-Headers
+ X-Content-Type-Options:
+ - nosniff
+ X-Frame-Options:
+ - SAMEORIGIN
+ X-GDC-TRACE-ID: *id001
+ X-Xss-Protection:
+ - 1; mode=block
+ body:
+ string: ''
diff --git a/gooddata-sdk/tests/compute/test_compute_service.py b/gooddata-sdk/tests/compute/test_compute_service.py
index a2d59743b..a7ce29f53 100644
--- a/gooddata-sdk/tests/compute/test_compute_service.py
+++ b/gooddata-sdk/tests/compute/test_compute_service.py
@@ -182,3 +182,24 @@ def test_ai_chat_stream(test_config):
finally:
sdk.compute.reset_ai_chat_history(test_workspace_id)
sdk.catalog_workspace.delete_workspace(test_workspace_id)
+
+
+@gd_vcr.use_cassette(str(_fixtures_dir / "build_exec_def_from_chat_result.yaml"))
+def test_build_exec_def_from_chat_result(test_config):
+ """Test build execution definition from chat result."""
+ sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"])
+ path = _current_dir / "load" / "ai"
+ test_workspace_id = test_config["workspace_test"]
+
+ try:
+ _setup_test_workspace(sdk, test_workspace_id, path)
+ response = sdk.compute.ai_chat(test_workspace_id, "Display the revenue by product")
+ execution_definition = sdk.compute.build_exec_def_from_chat_result(response)
+ assert execution_definition is not None
+
+ execution = sdk.compute.for_exec_def(test_workspace_id, execution_definition)
+ assert execution.result_id is not None
+
+ finally:
+ sdk.compute.reset_ai_chat_history(test_workspace_id)
+ sdk.catalog_workspace.delete_workspace(test_workspace_id)
diff --git a/schemas/gooddata-afm-client.json b/schemas/gooddata-afm-client.json
index bb1119bea..a1d764f10 100644
--- a/schemas/gooddata-afm-client.json
+++ b/schemas/gooddata-afm-client.json
@@ -926,6 +926,25 @@
},
"type": "object"
},
+ "ChatUsageResponse": {
+ "properties": {
+ "interactionCount": {
+ "description": "Number of interactions in the time window",
+ "format": "int32",
+ "type": "integer"
+ },
+ "timeWindowHours": {
+ "description": "Time window in hours",
+ "format": "int32",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "interactionCount",
+ "timeWindowHours"
+ ],
+ "type": "object"
+ },
"ClusteringRequest": {
"properties": {
"numberOfClusters": {
@@ -3475,6 +3494,41 @@
]
}
},
+ "/api/v1/actions/workspaces/{workspaceId}/ai/chatUsage": {
+ "get": {
+ "description": "Returns usage statistics of chat for a user in a workspace.",
+ "operationId": "aiChatUsage",
+ "parameters": [
+ {
+ "description": "Workspace identifier",
+ "in": "path",
+ "name": "workspaceId",
+ "required": true,
+ "schema": {
+ "pattern": "^(?!\\.)[.A-Za-z0-9_-]{1,255}$",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ChatUsageResponse"
+ }
+ }
+ },
+ "description": "OK"
+ }
+ },
+ "summary": "Get Chat Usage",
+ "tags": [
+ "Smart Functions",
+ "actions"
+ ]
+ }
+ },
"/api/v1/actions/workspaces/{workspaceId}/ai/search": {
"post": {
"description": "(BETA) Uses similarity (e.g. cosine distance) search to find top X most similar metadata objects.",
diff --git a/schemas/gooddata-api-client.json b/schemas/gooddata-api-client.json
index 2d4dfc54a..00d1d064b 100644
--- a/schemas/gooddata-api-client.json
+++ b/schemas/gooddata-api-client.json
@@ -162,6 +162,9 @@
},
"AdHocAutomation": {
"properties": {
+ "alert": {
+ "$ref": "#/components/schemas/AutomationAlert"
+ },
"analyticalDashboard": {
"$ref": "#/components/schemas/DeclarativeAnalyticalDashboardIdentifier"
},
@@ -187,6 +190,13 @@
"type": "array",
"uniqueItems": true
},
+ "imageExports": {
+ "items": {
+ "$ref": "#/components/schemas/AutomationImageExport"
+ },
+ "type": "array",
+ "uniqueItems": true
+ },
"metadata": {
"$ref": "#/components/schemas/AutomationMetadata"
},
@@ -879,6 +889,9 @@
],
"type": "object"
},
+ "AttributeElements": {
+ "type": "object"
+ },
"AttributeExecutionResultHeader": {
"properties": {
"attributeHeader": {
@@ -902,6 +915,21 @@
],
"type": "object"
},
+ "AttributeFilterByDate": {
+ "properties": {
+ "filterLocalIdentifier": {
+ "type": "string"
+ },
+ "isCommonDate": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "filterLocalIdentifier",
+ "isCommonDate"
+ ],
+ "type": "object"
+ },
"AttributeFilterElements": {
"description": "Filter on specific set of label values.",
"properties": {
@@ -924,6 +952,21 @@
],
"type": "object"
},
+ "AttributeFilterParent": {
+ "properties": {
+ "filterLocalIdentifier": {
+ "type": "string"
+ },
+ "over": {
+ "$ref": "#/components/schemas/Over"
+ }
+ },
+ "required": [
+ "filterLocalIdentifier",
+ "over"
+ ],
+ "type": "object"
+ },
"AttributeFormat": {
"description": "Attribute format describes formatting information to effectively format attribute values when needed.",
"properties": {
@@ -1163,6 +1206,17 @@
],
"type": "object"
},
+ "AutomationImageExport": {
+ "properties": {
+ "requestPayload": {
+ "$ref": "#/components/schemas/ImageExportRequest"
+ }
+ },
+ "required": [
+ "requestPayload"
+ ],
+ "type": "object"
+ },
"AutomationMetadata": {
"description": "Additional information for the automation.",
"maxLength": 250000,
@@ -1463,6 +1517,25 @@
},
"type": "object"
},
+ "ChatUsageResponse": {
+ "properties": {
+ "interactionCount": {
+ "description": "Number of interactions in the time window",
+ "format": "int32",
+ "type": "integer"
+ },
+ "timeWindowHours": {
+ "description": "Time window in hours",
+ "format": "int32",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "interactionCount",
+ "timeWindowHours"
+ ],
+ "type": "object"
+ },
"ClusteringRequest": {
"properties": {
"numberOfClusters": {
@@ -2006,6 +2079,149 @@
},
"type": "object"
},
+ "DashboardAttributeFilter": {
+ "properties": {
+ "attributeFilter": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/DashboardFilter"
+ },
+ {
+ "properties": {
+ "attributeElements": {
+ "$ref": "#/components/schemas/AttributeElements"
+ },
+ "displayForm": {
+ "type": "string"
+ },
+ "filterElementsBy": {
+ "items": {
+ "$ref": "#/components/schemas/AttributeFilterParent"
+ },
+ "type": "array"
+ },
+ "filterElementsByDate": {
+ "items": {
+ "$ref": "#/components/schemas/AttributeFilterByDate"
+ },
+ "type": "array"
+ },
+ "negativeSelection": {
+ "type": "boolean"
+ },
+ "selectionMode": {
+ "enum": [
+ "single",
+ "multi"
+ ],
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "validateElementsBy": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object"
+ }
+ ],
+ "required": [
+ "attributeElements",
+ "displayForm",
+ "negativeSelection"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "attributeFilter"
+ ],
+ "type": "object"
+ },
+ "DashboardDateFilter": {
+ "properties": {
+ "dateFilter": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/DashboardFilter"
+ },
+ {
+ "properties": {
+ "attribute": {
+ "type": "string"
+ },
+ "dataSet": {
+ "type": "string"
+ },
+ "from": {
+ "type": "string"
+ },
+ "granularity": {
+ "enum": [
+ "ALL_TIME_GRANULARITY",
+ "GDC.time.year",
+ "GDC.time.week_us",
+ "GDC.time.week_in_year",
+ "GDC.time.week_in_quarter",
+ "GDC.time.week",
+ "GDC.time.euweek_in_year",
+ "GDC.time.euweek_in_quarter",
+ "GDC.time.quarter",
+ "GDC.time.quarter_in_year",
+ "GDC.time.month",
+ "GDC.time.month_in_quarter",
+ "GDC.time.month_in_year",
+ "GDC.time.day_in_year",
+ "GDC.time.day_in_quarter",
+ "GDC.time.day_in_month",
+ "GDC.time.day_in_week",
+ "GDC.time.day_in_euweek",
+ "GDC.time.date",
+ "GDC.time.hour",
+ "GDC.time.hour_in_day",
+ "GDC.time.minute",
+ "GDC.time.minute_in_hour"
+ ],
+ "type": "string"
+ },
+ "to": {
+ "type": "string"
+ },
+ "type": {
+ "enum": [
+ "relative",
+ "absolute"
+ ],
+ "type": "string"
+ }
+ },
+ "type": "object"
+ }
+ ],
+ "required": [
+ "granularity",
+ "type"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "dateFilter"
+ ],
+ "type": "object"
+ },
+ "DashboardFilter": {
+ "properties": {
+ "localIdentifier": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
"DashboardPermissions": {
"properties": {
"rules": {
@@ -2095,6 +2311,43 @@
],
"type": "object"
},
+ "DashboardTabularExportRequest": {
+ "description": "Export request object describing the export properties for dashboard tabular exports.",
+ "properties": {
+ "dashboardFiltersOverride": {
+ "description": "List of filters that will be used instead of the default dashboard filters.",
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/DashboardAttributeFilter"
+ },
+ {
+ "$ref": "#/components/schemas/DashboardDateFilter"
+ }
+ ]
+ },
+ "type": "array"
+ },
+ "fileName": {
+ "description": "Filename of downloaded file without extension.",
+ "example": "result",
+ "type": "string"
+ },
+ "format": {
+ "description": "Requested tabular export type.",
+ "enum": [
+ "XLSX"
+ ],
+ "example": "XLSX",
+ "type": "string"
+ }
+ },
+ "required": [
+ "fileName",
+ "format"
+ ],
+ "type": "object"
+ },
"DataColumnLocator": {
"description": "Mapping from dimension items (either 'localIdentifier' from 'AttributeItem', or \"measureGroup\") to their respective values. This effectively specifies the path (location) of the data column used for sorting. Therefore values for all dimension items must be specified.",
"example": {
@@ -2862,6 +3115,13 @@
"pattern": "^(?!\\.)[.A-Za-z0-9_-]{1,255}$",
"type": "string"
},
+ "imageExports": {
+ "items": {
+ "$ref": "#/components/schemas/AutomationImageExport"
+ },
+ "type": "array",
+ "uniqueItems": true
+ },
"metadata": {
"$ref": "#/components/schemas/AutomationMetadata"
},
@@ -3109,6 +3369,18 @@
"DeclarativeDataSource": {
"description": "A data source and its properties.",
"properties": {
+ "authenticationType": {
+ "description": "Type of authentication used to connect to the database.",
+ "enum": [
+ "USERNAME_PASSWORD",
+ "TOKEN",
+ "KEY_PAIR",
+ "CLIENT_SECRET",
+ "ACCESS_TOKEN"
+ ],
+ "nullable": true,
+ "type": "string"
+ },
"cacheStrategy": {
"description": "Determines how the results coming from a particular datasource should be cached.\n- ALWAYS: The results from the datasource should be cached normally (the default).\n- NEVER: The results from the datasource should never be cached.",
"enum": [
@@ -4558,6 +4830,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -4574,7 +4847,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"example": "TIMEZONE",
"type": "string"
@@ -6224,6 +6498,10 @@
"errorMessage": {
"type": "string"
},
+ "expiresAt": {
+ "format": "date-time",
+ "type": "string"
+ },
"exportId": {
"type": "string"
},
@@ -6841,6 +7119,47 @@
],
"type": "object"
},
+ "ImageExportRequest": {
+ "description": "Export request object describing the export properties and metadata for image exports.",
+ "properties": {
+ "dashboardId": {
+ "description": "Dashboard identifier",
+ "example": "761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ "type": "string"
+ },
+ "fileName": {
+ "description": "File name to be used for retrieving the image document.",
+ "example": "filename",
+ "type": "string"
+ },
+ "format": {
+ "description": "Requested resulting file type.",
+ "enum": [
+ "PNG"
+ ],
+ "example": "PNG",
+ "type": "string"
+ },
+ "metadata": {
+ "$ref": "#/components/schemas/JsonNode"
+ },
+ "widgetIds": {
+ "description": "List of widget identifiers to be exported. Note that only one widget is currently supported.",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 1,
+ "type": "array",
+ "uniqueItems": true
+ }
+ },
+ "required": [
+ "dashboardId",
+ "fileName",
+ "format"
+ ],
+ "type": "object"
+ },
"InPlatform": {
"allOf": [
{
@@ -8366,6 +8685,20 @@
},
"type": "array"
},
+ "imageExports": {
+ "items": {
+ "properties": {
+ "requestPayload": {
+ "$ref": "#/components/schemas/ImageExportRequest"
+ }
+ },
+ "required": [
+ "requestPayload"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
"metadata": {
"description": "Additional information for the automation.",
"maxLength": 250000,
@@ -8625,6 +8958,20 @@
},
"type": "array"
},
+ "imageExports": {
+ "items": {
+ "properties": {
+ "requestPayload": {
+ "$ref": "#/components/schemas/ImageExportRequest"
+ }
+ },
+ "required": [
+ "requestPayload"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
"metadata": {
"description": "Additional information for the automation.",
"maxLength": 250000,
@@ -8988,6 +9335,20 @@
},
"type": "array"
},
+ "imageExports": {
+ "items": {
+ "properties": {
+ "requestPayload": {
+ "$ref": "#/components/schemas/ImageExportRequest"
+ }
+ },
+ "required": [
+ "requestPayload"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
"metadata": {
"description": "Additional information for the automation.",
"maxLength": 250000,
@@ -14342,18 +14703,6 @@
"description": "The token to use to connect to the LLM provider.",
"maxLength": 10000,
"type": "string"
- },
- "workspaceIds": {
- "description": "List of workspace IDs for which LLM endpoint is valid. If empty, it is valid for all workspaces.",
- "example": [
- "demo",
- "trial"
- ],
- "items": {
- "maxLength": 255,
- "type": "string"
- },
- "type": "array"
}
},
"required": [
@@ -14434,18 +14783,6 @@
"description": "User-facing title of the LLM Provider.",
"maxLength": 255,
"type": "string"
- },
- "workspaceIds": {
- "description": "List of workspace IDs for which LLM endpoint is valid. If empty, it is valid for all workspaces.",
- "example": [
- "demo",
- "trial"
- ],
- "items": {
- "maxLength": 255,
- "type": "string"
- },
- "type": "array"
}
},
"required": [
@@ -14570,18 +14907,6 @@
"description": "The token to use to connect to the LLM provider.",
"maxLength": 10000,
"type": "string"
- },
- "workspaceIds": {
- "description": "List of workspace IDs for which LLM endpoint is valid. If empty, it is valid for all workspaces.",
- "example": [
- "demo",
- "trial"
- ],
- "items": {
- "maxLength": 255,
- "type": "string"
- },
- "type": "array"
}
},
"type": "object"
@@ -16036,6 +16361,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -16052,7 +16378,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"type": "string"
}
@@ -16106,6 +16433,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -16122,7 +16450,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"type": "string"
}
@@ -16216,6 +16545,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -16232,7 +16562,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"type": "string"
}
@@ -17692,6 +18023,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -17708,7 +18040,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"type": "string"
}
@@ -17762,6 +18095,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -17778,7 +18112,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"type": "string"
}
@@ -19510,6 +19845,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -19526,7 +19862,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"type": "string"
}
@@ -19580,6 +19917,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -19596,7 +19934,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"type": "string"
}
@@ -19716,6 +20055,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -19732,7 +20072,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"type": "string"
}
@@ -19786,6 +20127,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -19802,7 +20144,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"type": "string"
}
@@ -20116,7 +20459,27 @@
"description": "Metric is a quantity that is calculated from the data.",
"properties": {
"definition": {
- "$ref": "#/components/schemas/MeasureDefinition"
+ "$ref": "#/components/schemas/MeasureDefinition",
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/ArithmeticMeasureDefinition"
+ },
+ {
+ "$ref": "#/components/schemas/InlineMeasureDefinition"
+ },
+ {
+ "$ref": "#/components/schemas/PopDatasetMeasureDefinition"
+ },
+ {
+ "$ref": "#/components/schemas/PopDateMeasureDefinition"
+ },
+ {
+ "$ref": "#/components/schemas/PopMeasureDefinition"
+ },
+ {
+ "$ref": "#/components/schemas/SimpleMeasureDefinition"
+ }
+ ]
},
"localIdentifier": {
"description": "Local identifier of the metric. This can be used to reference the metric in other parts of the execution definition.",
@@ -20492,6 +20855,20 @@
],
"type": "object"
},
+ "Over": {
+ "properties": {
+ "attributes": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "attributes"
+ ],
+ "type": "object"
+ },
"PageMetadata": {
"properties": {
"number": {
@@ -21325,6 +21702,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -21341,7 +21719,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"example": "TIMEZONE",
"type": "string"
@@ -23232,6 +23611,11 @@
},
"VisibleFilter": {
"properties": {
+ "isAllTimeDateFilter": {
+ "default": false,
+ "description": "Indicates if the filter is an all-time date filter. Such a filter is not included in report computation, so there is no filter with the same 'localIdentifier' to be found. In such cases, this flag is used to inform the server to not search for the filter in the definitions and include it anyways.",
+ "type": "boolean"
+ },
"localIdentifier": {
"type": "string"
},
@@ -23342,6 +23726,9 @@
},
"WebhookAutomationInfo": {
"properties": {
+ "dashboardTitle": {
+ "type": "string"
+ },
"dashboardURL": {
"type": "string"
},
@@ -23405,6 +23792,12 @@
},
"type": "array"
},
+ "imageExports": {
+ "items": {
+ "$ref": "#/components/schemas/ExportResult"
+ },
+ "type": "array"
+ },
"recipients": {
"items": {
"$ref": "#/components/schemas/WebhookRecipient"
@@ -25342,6 +25735,41 @@
]
}
},
+ "/api/v1/actions/workspaces/{workspaceId}/ai/chatUsage": {
+ "get": {
+ "description": "Returns usage statistics of chat for a user in a workspace.",
+ "operationId": "aiChatUsage",
+ "parameters": [
+ {
+ "description": "Workspace identifier",
+ "in": "path",
+ "name": "workspaceId",
+ "required": true,
+ "schema": {
+ "pattern": "^(?!\\.)[.A-Za-z0-9_-]{1,255}$",
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ChatUsageResponse"
+ }
+ }
+ },
+ "description": "OK"
+ }
+ },
+ "summary": "Get Chat Usage",
+ "tags": [
+ "Smart Functions",
+ "actions"
+ ]
+ }
+ },
"/api/v1/actions/workspaces/{workspaceId}/ai/search": {
"post": {
"description": "(BETA) Uses similarity (e.g. cosine distance) search to find top X most similar metadata objects.",
@@ -25449,6 +25877,16 @@
}
}
],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/DashboardTabularExportRequest"
+ }
+ }
+ },
+ "required": true
+ },
"responses": {
"201": {
"content": {
@@ -26898,6 +27336,195 @@
]
}
},
+ "/api/v1/actions/workspaces/{workspaceId}/export/image": {
+ "post": {
+ "description": "Note: This API is an experimental and is going to change. Please, use it accordingly. An image export job will be created based on the export request and put to queue to be executed. The result of the operation will be an exportResult identifier that will be assembled by the client into a url that can be polled.",
+ "operationId": "createImageExport",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "workspaceId",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ImageExportRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExportResponse"
+ }
+ }
+ },
+ "description": "Image export request created successfully."
+ }
+ },
+ "summary": "(EXPERIMENTAL) Create image export request",
+ "tags": [
+ "Image export",
+ "actions"
+ ],
+ "x-gdc-security-info": {
+ "description": "Permissions required to execute image export.",
+ "permissions": [
+ "EXPORT_PDF"
+ ]
+ }
+ }
+ },
+ "/api/v1/actions/workspaces/{workspaceId}/export/image/{exportId}": {
+ "get": {
+ "description": "Note: This API is an experimental and is going to change. Please, use it accordingly. After clients creates a POST export request, the processing of it will start shortly asynchronously. To retrieve the result, client has to check periodically for the result on this endpoint. In case the result isn't ready yet, the service returns 202. If the result is ready, it returns 200 and octet stream of the result file with provided filename.",
+ "operationId": "getImageExport",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "workspaceId",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "exportId",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "image/png": {}
+ },
+ "description": "Binary export result.",
+ "headers": {
+ "Content-Disposition": {
+ "schema": {
+ "example": "attachment; filename='result.png'",
+ "pattern": "attachment; filename='[^']+'",
+ "type": "string"
+ },
+ "style": "simple"
+ }
+ }
+ },
+ "202": {
+ "content": {
+ "image/png": {
+ "schema": {
+ "items": {
+ "properties": {
+ "char": {
+ "type": "string"
+ },
+ "direct": {
+ "type": "boolean"
+ },
+ "double": {
+ "format": "double",
+ "type": "number"
+ },
+ "float": {
+ "format": "float",
+ "type": "number"
+ },
+ "int": {
+ "format": "int32",
+ "type": "integer"
+ },
+ "long": {
+ "format": "int64",
+ "type": "integer"
+ },
+ "readOnly": {
+ "type": "boolean"
+ },
+ "short": {
+ "format": "int32",
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ }
+ }
+ },
+ "description": "Request is accepted, provided exportId exists, but export is not yet ready."
+ }
+ },
+ "summary": "(EXPERIMENTAL) Retrieve exported files",
+ "tags": [
+ "Image export",
+ "actions"
+ ],
+ "x-gdc-security-info": {
+ "description": "Minimal permission required to use this endpoint.",
+ "permissions": [
+ "EXPORT_PDF"
+ ]
+ }
+ }
+ },
+ "/api/v1/actions/workspaces/{workspaceId}/export/image/{exportId}/metadata": {
+ "get": {
+ "description": "Note: This API is an experimental and is going to change. Please, use it accordingly. This endpoint serves as a cache for user-defined metadata of the export for the front end UI to retrieve it, if one was created using the POST ../export/image endpoint. The metadata structure is not verified.",
+ "operationId": "getImageExportMetadata",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "workspaceId",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "exportId",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {}
+ },
+ "description": "Json metadata representation"
+ }
+ },
+ "summary": "(EXPERIMENTAL) Retrieve metadata context",
+ "tags": [
+ "Image export",
+ "actions"
+ ],
+ "x-gdc-security-info": {
+ "description": "Minimal permission required to use this endpoint.",
+ "permissions": [
+ "EXPORT_PDF"
+ ]
+ }
+ }
+ },
"/api/v1/actions/workspaces/{workspaceId}/export/raw": {
"post": {
"description": "Note: This API is an experimental and is going to change. Please, use it accordingly.An raw export job will be created based on the export request and put to queue to be executed. The result of the operation will be an exportResult identifier that will be assembled by the client into a url that can be polled.",
@@ -27058,7 +27685,7 @@
}
}
},
- "description": "Raw export request created successfully."
+ "description": "Slides export request created successfully."
}
},
"summary": "(EXPERIMENTAL) Create slides export request",
diff --git a/schemas/gooddata-automation-client.json b/schemas/gooddata-automation-client.json
index 6f5682bff..125da9de8 100644
--- a/schemas/gooddata-automation-client.json
+++ b/schemas/gooddata-automation-client.json
@@ -1,8 +1,63 @@
{
"components": {
"schemas": {
+ "AbsoluteDateFilter": {
+ "description": "A datetime filter specifying exact from and to values.",
+ "properties": {
+ "absoluteDateFilter": {
+ "properties": {
+ "applyOnResult": {
+ "type": "boolean"
+ },
+ "dataset": {
+ "$ref": "#/components/schemas/AfmObjectIdentifierDataset"
+ },
+ "from": {
+ "example": "2020-07-01 18:23",
+ "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})?$",
+ "type": "string"
+ }
+ },
+ "required": [
+ "from",
+ "to",
+ "dataset"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "absoluteDateFilter"
+ ],
+ "type": "object"
+ },
+ "AbstractMeasureValueFilter": {
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/ComparisonMeasureValueFilter"
+ },
+ {
+ "$ref": "#/components/schemas/RangeMeasureValueFilter"
+ },
+ {
+ "$ref": "#/components/schemas/RankingFilter"
+ }
+ ],
+ "type": "object"
+ },
"AdHocAutomation": {
"properties": {
+ "alert": {
+ "$ref": "#/components/schemas/AutomationAlert"
+ },
"analyticalDashboard": {
"$ref": "#/components/schemas/DeclarativeAnalyticalDashboardIdentifier"
},
@@ -28,6 +83,13 @@
"type": "array",
"uniqueItems": true
},
+ "imageExports": {
+ "items": {
+ "$ref": "#/components/schemas/AutomationImageExport"
+ },
+ "type": "array",
+ "uniqueItems": true
+ },
"metadata": {
"$ref": "#/components/schemas/AutomationMetadata"
},
@@ -74,6 +136,255 @@
},
"type": "object"
},
+ "AfmIdentifier": {
+ "description": "Reference to the attribute label to which the filter should be applied.",
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/AfmObjectIdentifier"
+ },
+ {
+ "$ref": "#/components/schemas/AfmLocalIdentifier"
+ }
+ ],
+ "type": "object"
+ },
+ "AfmLocalIdentifier": {
+ "properties": {
+ "localIdentifier": {
+ "example": "sampleAutoGenerated0123_ID",
+ "pattern": "^[.a-zA-Z0-9_-]+$",
+ "type": "string"
+ }
+ },
+ "required": [
+ "localIdentifier"
+ ],
+ "type": "object"
+ },
+ "AfmObjectIdentifier": {
+ "description": "ObjectIdentifier with `identifier` wrapper. This serves to distinguish MD object identifiers in AFM request from local identifiers.",
+ "properties": {
+ "identifier": {
+ "properties": {
+ "id": {
+ "example": "sample_item.price",
+ "pattern": "^(?!\\.)[.A-Za-z0-9_-]{1,255}$",
+ "type": "string"
+ },
+ "type": {
+ "enum": [
+ "analyticalDashboard",
+ "attribute",
+ "dashboardPlugin",
+ "dataset",
+ "fact",
+ "label",
+ "metric",
+ "prompt",
+ "visualizationObject",
+ "filterContext"
+ ],
+ "example": "fact",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "id"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "identifier"
+ ],
+ "type": "object"
+ },
+ "AfmObjectIdentifierAttribute": {
+ "description": "Reference to the date attribute to use.",
+ "properties": {
+ "identifier": {
+ "properties": {
+ "id": {
+ "example": "sample_item.price",
+ "pattern": "^(?!\\.)[.A-Za-z0-9_-]{1,255}$",
+ "type": "string"
+ },
+ "type": {
+ "enum": [
+ "attribute"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "type"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "identifier"
+ ],
+ "type": "object"
+ },
+ "AfmObjectIdentifierCore": {
+ "description": "Reference to the metric, fact or attribute object to use for the metric.",
+ "properties": {
+ "identifier": {
+ "properties": {
+ "id": {
+ "example": "sample_item.price",
+ "pattern": "^(?!\\.)[.A-Za-z0-9_-]{1,255}$",
+ "type": "string"
+ },
+ "type": {
+ "enum": [
+ "attribute",
+ "label",
+ "fact",
+ "metric"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "type"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "identifier"
+ ],
+ "type": "object"
+ },
+ "AfmObjectIdentifierDataset": {
+ "description": "Reference to the date dataset to which the filter should be applied.",
+ "properties": {
+ "identifier": {
+ "properties": {
+ "id": {
+ "example": "sample_item.price",
+ "pattern": "^(?!\\.)[.A-Za-z0-9_-]{1,255}$",
+ "type": "string"
+ },
+ "type": {
+ "enum": [
+ "dataset"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "type"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "identifier"
+ ],
+ "type": "object"
+ },
+ "AfmObjectIdentifierLabel": {
+ "properties": {
+ "identifier": {
+ "properties": {
+ "id": {
+ "example": "sample_item.price",
+ "pattern": "^(?!\\.)[.A-Za-z0-9_-]{1,255}$",
+ "type": "string"
+ },
+ "type": {
+ "enum": [
+ "label"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "id"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "identifier"
+ ],
+ "type": "object"
+ },
+ "AlertAfm": {
+ "properties": {
+ "attributes": {
+ "description": "Attributes to be used in the computation.",
+ "items": {
+ "$ref": "#/components/schemas/AttributeItem"
+ },
+ "maximum": 1,
+ "type": "array"
+ },
+ "auxMeasures": {
+ "description": "Metrics to be referenced from other AFM objects (e.g. filters) but not included in the result.",
+ "items": {
+ "$ref": "#/components/schemas/MeasureItem"
+ },
+ "type": "array"
+ },
+ "filters": {
+ "description": "Various filter types to filter execution result.",
+ "items": {
+ "$ref": "#/components/schemas/FilterDefinition"
+ },
+ "type": "array"
+ },
+ "measures": {
+ "description": "Metrics to be computed. One metric if the alert condition is evaluated to a scalar. Two metrics when they should be evaluated to each other.",
+ "items": {
+ "$ref": "#/components/schemas/MeasureItem"
+ },
+ "maximum": 2,
+ "minimum": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "filters",
+ "measures"
+ ],
+ "type": "object"
+ },
+ "AlertCondition": {
+ "description": "Alert trigger condition.",
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/ComparisonWrapper"
+ },
+ {
+ "$ref": "#/components/schemas/RangeWrapper"
+ },
+ {
+ "$ref": "#/components/schemas/RelativeWrapper"
+ }
+ ],
+ "type": "object"
+ },
+ "AlertConditionOperand": {
+ "description": "Operand of the alert condition.",
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/LocalIdentifier"
+ },
+ {
+ "$ref": "#/components/schemas/Value"
+ }
+ ],
+ "type": "object"
+ },
"AlertDescription": {
"properties": {
"attribute": {
@@ -161,6 +472,158 @@
},
"type": "object"
},
+ "ArithmeticMeasure": {
+ "properties": {
+ "left": {
+ "$ref": "#/components/schemas/LocalIdentifier"
+ },
+ "operator": {
+ "description": "Arithmetic operator.\nDIFFERENCE - m₁−m₂ - the difference between two metrics.\nCHANGE - (m₁−m₂)÷m₂ - the relative difference between two metrics.\n",
+ "enum": [
+ "DIFFERENCE",
+ "CHANGE"
+ ],
+ "type": "string"
+ },
+ "right": {
+ "$ref": "#/components/schemas/LocalIdentifier"
+ }
+ },
+ "required": [
+ "left",
+ "operator",
+ "right"
+ ],
+ "type": "object"
+ },
+ "ArithmeticMeasureDefinition": {
+ "description": "Metric representing arithmetics between other metrics.",
+ "properties": {
+ "arithmeticMeasure": {
+ "properties": {
+ "measureIdentifiers": {
+ "description": "List of metrics to apply arithmetic operation by chosen operator.",
+ "items": {
+ "$ref": "#/components/schemas/AfmLocalIdentifier"
+ },
+ "type": "array"
+ },
+ "operator": {
+ "description": "Arithmetic operator describing operation between metrics.",
+ "enum": [
+ "SUM",
+ "DIFFERENCE",
+ "MULTIPLICATION",
+ "RATIO",
+ "CHANGE"
+ ],
+ "example": "SUM",
+ "type": "string"
+ }
+ },
+ "required": [
+ "measureIdentifiers",
+ "operator"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "arithmeticMeasure"
+ ],
+ "type": "object"
+ },
+ "AttributeFilter": {
+ "description": "Abstract filter definition type attributes",
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/NegativeAttributeFilter"
+ },
+ {
+ "$ref": "#/components/schemas/PositiveAttributeFilter"
+ }
+ ],
+ "type": "object"
+ },
+ "AttributeFilterElements": {
+ "description": "Filter on specific set of label values.",
+ "properties": {
+ "values": {
+ "description": "Set of label values.",
+ "example": [
+ "value1",
+ "value2"
+ ],
+ "items": {
+ "nullable": true,
+ "type": "string"
+ },
+ "type": "array",
+ "uniqueItems": true
+ }
+ },
+ "required": [
+ "values"
+ ],
+ "type": "object"
+ },
+ "AttributeItem": {
+ "properties": {
+ "label": {
+ "$ref": "#/components/schemas/AfmObjectIdentifierLabel"
+ },
+ "localIdentifier": {
+ "description": "Local identifier of the attribute. This can be used to reference the attribute in other parts of the execution definition.",
+ "example": "attribute_1",
+ "pattern": "^[.a-zA-Z0-9_-]+$",
+ "type": "string"
+ },
+ "showAllValues": {
+ "default": false,
+ "description": "Indicates whether to show all values of given attribute even if the data bound to those values is not available.",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "label",
+ "localIdentifier"
+ ],
+ "type": "object"
+ },
+ "AutomationAlert": {
+ "properties": {
+ "condition": {
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/ComparisonWrapper"
+ },
+ {
+ "$ref": "#/components/schemas/RangeWrapper"
+ },
+ {
+ "$ref": "#/components/schemas/RelativeWrapper"
+ }
+ ]
+ },
+ "execution": {
+ "$ref": "#/components/schemas/AlertAfm"
+ },
+ "trigger": {
+ "default": "ALWAYS",
+ "description": "Trigger behavior for the alert.\nALWAYS - alert is triggered every time the condition is met.\nONCE - alert is triggered only once when the condition is met.\n",
+ "enum": [
+ "ALWAYS",
+ "ONCE"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "condition",
+ "execution"
+ ],
+ "type": "object"
+ },
"AutomationExternalRecipient": {
"properties": {
"email": {
@@ -174,6 +637,17 @@
],
"type": "object"
},
+ "AutomationImageExport": {
+ "properties": {
+ "requestPayload": {
+ "$ref": "#/components/schemas/ImageExportRequest"
+ }
+ },
+ "required": [
+ "requestPayload"
+ ],
+ "type": "object"
+ },
"AutomationMetadata": {
"description": "Additional information for the automation.",
"maxLength": 250000,
@@ -232,6 +706,100 @@
],
"type": "object"
},
+ "Comparison": {
+ "properties": {
+ "left": {
+ "$ref": "#/components/schemas/LocalIdentifier"
+ },
+ "operator": {
+ "enum": [
+ "GREATER_THAN",
+ "GREATER_THAN_OR_EQUAL_TO",
+ "LESS_THAN",
+ "LESS_THAN_OR_EQUAL_TO",
+ "EQUAL_TO",
+ "NOT_EQUAL_TO"
+ ],
+ "type": "string"
+ },
+ "right": {
+ "$ref": "#/components/schemas/AlertConditionOperand"
+ }
+ },
+ "required": [
+ "left",
+ "operator",
+ "right"
+ ],
+ "type": "object"
+ },
+ "ComparisonMeasureValueFilter": {
+ "description": "Filter the result by comparing specified metric to given constant value, using given comparison operator.",
+ "properties": {
+ "comparisonMeasureValueFilter": {
+ "properties": {
+ "applyOnResult": {
+ "type": "boolean"
+ },
+ "dimensionality": {
+ "description": "References to the attributes to be used when filtering.",
+ "items": {
+ "$ref": "#/components/schemas/AfmIdentifier"
+ },
+ "type": "array"
+ },
+ "localIdentifier": {
+ "type": "string"
+ },
+ "measure": {
+ "$ref": "#/components/schemas/AfmIdentifier"
+ },
+ "operator": {
+ "enum": [
+ "GREATER_THAN",
+ "GREATER_THAN_OR_EQUAL_TO",
+ "LESS_THAN",
+ "LESS_THAN_OR_EQUAL_TO",
+ "EQUAL_TO",
+ "NOT_EQUAL_TO"
+ ],
+ "example": "GREATER_THAN",
+ "type": "string"
+ },
+ "treatNullValuesAs": {
+ "description": "A value that will be substituted for null values in the metric for the comparisons.",
+ "example": 0,
+ "type": "number"
+ },
+ "value": {
+ "example": 1327,
+ "type": "number"
+ }
+ },
+ "required": [
+ "operator",
+ "value",
+ "measure"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "comparisonMeasureValueFilter"
+ ],
+ "type": "object"
+ },
+ "ComparisonWrapper": {
+ "properties": {
+ "comparison": {
+ "$ref": "#/components/schemas/Comparison"
+ }
+ },
+ "required": [
+ "comparison"
+ ],
+ "type": "object"
+ },
"CustomLabel": {
"description": "Custom label object override.",
"properties": {
@@ -283,6 +851,18 @@
},
"type": "object"
},
+ "DateFilter": {
+ "description": "Abstract filter definition type for dates.",
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/AbsoluteDateFilter"
+ },
+ {
+ "$ref": "#/components/schemas/RelativeDateFilter"
+ }
+ ],
+ "type": "object"
+ },
"DeclarativeAnalyticalDashboardIdentifier": {
"description": "An analytical dashboard identifier.",
"properties": {
@@ -387,6 +967,10 @@
"errorMessage": {
"type": "string"
},
+ "expiresAt": {
+ "format": "date-time",
+ "type": "string"
+ },
"exportId": {
"type": "string"
},
@@ -420,6 +1004,89 @@
],
"type": "object"
},
+ "FilterDefinition": {
+ "description": "Abstract filter definition type",
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/InlineFilterDefinition"
+ },
+ {
+ "$ref": "#/components/schemas/RankingFilter"
+ },
+ {
+ "$ref": "#/components/schemas/ComparisonMeasureValueFilter"
+ },
+ {
+ "$ref": "#/components/schemas/RangeMeasureValueFilter"
+ },
+ {
+ "$ref": "#/components/schemas/AbsoluteDateFilter"
+ },
+ {
+ "$ref": "#/components/schemas/RelativeDateFilter"
+ },
+ {
+ "$ref": "#/components/schemas/NegativeAttributeFilter"
+ },
+ {
+ "$ref": "#/components/schemas/PositiveAttributeFilter"
+ }
+ ],
+ "type": "object"
+ },
+ "FilterDefinitionForSimpleMeasure": {
+ "description": "Abstract filter definition type for simple metric.",
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/DateFilter"
+ },
+ {
+ "$ref": "#/components/schemas/AttributeFilter"
+ }
+ ],
+ "type": "object"
+ },
+ "ImageExportRequest": {
+ "description": "Export request object describing the export properties and metadata for image exports.",
+ "properties": {
+ "dashboardId": {
+ "description": "Dashboard identifier",
+ "example": "761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ "type": "string"
+ },
+ "fileName": {
+ "description": "File name to be used for retrieving the image document.",
+ "example": "filename",
+ "type": "string"
+ },
+ "format": {
+ "description": "Requested resulting file type.",
+ "enum": [
+ "PNG"
+ ],
+ "example": "PNG",
+ "type": "string"
+ },
+ "metadata": {
+ "$ref": "#/components/schemas/JsonNode"
+ },
+ "widgetIds": {
+ "description": "List of widget identifiers to be exported. Note that only one widget is currently supported.",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 1,
+ "type": "array",
+ "uniqueItems": true
+ }
+ },
+ "required": [
+ "dashboardId",
+ "fileName",
+ "format"
+ ],
+ "type": "object"
+ },
"InPlatform": {
"description": "In-platform destination for notifications.",
"properties": {
@@ -432,15 +1099,159 @@
}
},
"required": [
- "type"
+ "type"
+ ],
+ "type": "object"
+ },
+ "InlineFilterDefinition": {
+ "description": "Filter in form of direct MAQL query.",
+ "properties": {
+ "inline": {
+ "properties": {
+ "applyOnResult": {
+ "type": "boolean"
+ },
+ "filter": {
+ "description": "MAQL query representing the filter.",
+ "type": "string"
+ },
+ "localIdentifier": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "filter"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "inline"
+ ],
+ "type": "object"
+ },
+ "InlineMeasureDefinition": {
+ "description": "Metric defined by the raw MAQL query.",
+ "properties": {
+ "inline": {
+ "properties": {
+ "maql": {
+ "description": "MAQL query defining the metric.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "maql"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "inline"
+ ],
+ "type": "object"
+ },
+ "JsonNode": {
+ "description": "Metadata definition in free-form JSON format.",
+ "example": {},
+ "maxLength": 15000,
+ "nullable": true,
+ "type": "object"
+ },
+ "LocalIdentifier": {
+ "properties": {
+ "format": {
+ "default": "#,##0.00",
+ "description": "Metric format.",
+ "example": "#,##0",
+ "maxLength": 2048,
+ "nullable": true,
+ "type": "string"
+ },
+ "localIdentifier": {
+ "description": "Local identifier of the metric to be compared.",
+ "example": "m1",
+ "type": "string"
+ },
+ "title": {
+ "description": "Metric title.",
+ "example": "Revenue",
+ "maxLength": 255,
+ "nullable": true,
+ "type": "string"
+ }
+ },
+ "required": [
+ "localIdentifier"
+ ],
+ "type": "object"
+ },
+ "MeasureDefinition": {
+ "description": "Abstract metric definition type",
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/InlineMeasureDefinition"
+ },
+ {
+ "$ref": "#/components/schemas/ArithmeticMeasureDefinition"
+ },
+ {
+ "$ref": "#/components/schemas/SimpleMeasureDefinition"
+ },
+ {
+ "$ref": "#/components/schemas/PopMeasureDefinition"
+ }
+ ],
+ "type": "object"
+ },
+ "MeasureItem": {
+ "description": "Metric is a quantity that is calculated from the data.",
+ "properties": {
+ "definition": {
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/ArithmeticMeasureDefinition"
+ },
+ {
+ "$ref": "#/components/schemas/InlineMeasureDefinition"
+ },
+ {
+ "$ref": "#/components/schemas/PopDatasetMeasureDefinition"
+ },
+ {
+ "$ref": "#/components/schemas/PopDateMeasureDefinition"
+ },
+ {
+ "$ref": "#/components/schemas/PopMeasureDefinition"
+ },
+ {
+ "$ref": "#/components/schemas/SimpleMeasureDefinition"
+ }
+ ]
+ },
+ "localIdentifier": {
+ "description": "Local identifier of the metric. This can be used to reference the metric in other parts of the execution definition.",
+ "example": "metric_1",
+ "pattern": "^[.a-zA-Z0-9_-]+$",
+ "type": "string"
+ }
+ },
+ "required": [
+ "definition",
+ "localIdentifier"
],
"type": "object"
},
- "JsonNode": {
- "description": "Metadata definition in free-form JSON format.",
- "example": {},
- "maxLength": 15000,
- "nullable": true,
+ "MeasureValueFilter": {
+ "description": "Abstract filter definition type filtering by the value of the metric.",
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/ComparisonMeasureValueFilter"
+ },
+ {
+ "$ref": "#/components/schemas/RangeMeasureValueFilter"
+ }
+ ],
"type": "object"
},
"MetricRecord": {
@@ -458,6 +1269,36 @@
],
"type": "object"
},
+ "NegativeAttributeFilter": {
+ "description": "Filter able to limit element values by label and related selected negated elements.",
+ "properties": {
+ "negativeAttributeFilter": {
+ "properties": {
+ "applyOnResult": {
+ "type": "boolean"
+ },
+ "label": {
+ "$ref": "#/components/schemas/AfmIdentifier"
+ },
+ "localIdentifier": {
+ "type": "string"
+ },
+ "notIn": {
+ "$ref": "#/components/schemas/AttributeFilterElements"
+ }
+ },
+ "required": [
+ "notIn",
+ "label"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "negativeAttributeFilter"
+ ],
+ "type": "object"
+ },
"Notification": {
"properties": {
"automationId": {
@@ -645,6 +1486,388 @@
],
"type": "object"
},
+ "PopDataset": {
+ "description": "Combination of the date data set to use and how many periods ago to calculate the previous period for.",
+ "properties": {
+ "dataset": {
+ "$ref": "#/components/schemas/AfmObjectIdentifierDataset"
+ },
+ "periodsAgo": {
+ "description": "Number of periods ago to calculate the previous period for.",
+ "example": 1,
+ "format": "int32",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "dataset",
+ "periodsAgo"
+ ],
+ "type": "object"
+ },
+ "PopDatasetMeasureDefinition": {
+ "description": "Previous period type of metric.",
+ "properties": {
+ "previousPeriodMeasure": {
+ "properties": {
+ "dateDatasets": {
+ "description": "Specification of which date data sets to use for determining the period to calculate the previous period for.",
+ "items": {
+ "$ref": "#/components/schemas/PopDataset"
+ },
+ "type": "array"
+ },
+ "measureIdentifier": {
+ "$ref": "#/components/schemas/AfmLocalIdentifier"
+ }
+ },
+ "required": [
+ "dateDatasets",
+ "measureIdentifier"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "previousPeriodMeasure"
+ ],
+ "type": "object"
+ },
+ "PopDate": {
+ "description": "Combination of the date attribute to use and how many periods ago to calculate the PoP for.",
+ "properties": {
+ "attribute": {
+ "$ref": "#/components/schemas/AfmObjectIdentifierAttribute"
+ },
+ "periodsAgo": {
+ "description": "Number of periods ago to calculate the previous period for.",
+ "example": 1,
+ "format": "int32",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "attribute",
+ "periodsAgo"
+ ],
+ "type": "object"
+ },
+ "PopDateMeasureDefinition": {
+ "description": "Period over period type of metric.",
+ "properties": {
+ "overPeriodMeasure": {
+ "properties": {
+ "dateAttributes": {
+ "description": "Attributes to use for determining the period to calculate the PoP for.",
+ "items": {
+ "$ref": "#/components/schemas/PopDate"
+ },
+ "type": "array"
+ },
+ "measureIdentifier": {
+ "$ref": "#/components/schemas/AfmLocalIdentifier"
+ }
+ },
+ "required": [
+ "dateAttributes",
+ "measureIdentifier"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "overPeriodMeasure"
+ ],
+ "type": "object"
+ },
+ "PopMeasureDefinition": {
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/PopDatasetMeasureDefinition"
+ },
+ {
+ "$ref": "#/components/schemas/PopDateMeasureDefinition"
+ }
+ ],
+ "type": "object"
+ },
+ "PositiveAttributeFilter": {
+ "description": "Filter able to limit element values by label and related selected elements.",
+ "properties": {
+ "positiveAttributeFilter": {
+ "properties": {
+ "applyOnResult": {
+ "type": "boolean"
+ },
+ "in": {
+ "$ref": "#/components/schemas/AttributeFilterElements"
+ },
+ "label": {
+ "$ref": "#/components/schemas/AfmIdentifier"
+ },
+ "localIdentifier": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "in",
+ "label"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "positiveAttributeFilter"
+ ],
+ "type": "object"
+ },
+ "Range": {
+ "properties": {
+ "from": {
+ "$ref": "#/components/schemas/Value"
+ },
+ "measure": {
+ "$ref": "#/components/schemas/LocalIdentifier"
+ },
+ "operator": {
+ "enum": [
+ "BETWEEN",
+ "NOT_BETWEEN"
+ ],
+ "type": "string"
+ },
+ "to": {
+ "$ref": "#/components/schemas/Value"
+ }
+ },
+ "required": [
+ "from",
+ "measure",
+ "operator",
+ "to"
+ ],
+ "type": "object"
+ },
+ "RangeMeasureValueFilter": {
+ "description": "Filter the result by comparing specified metric to given range of values.",
+ "properties": {
+ "rangeMeasureValueFilter": {
+ "properties": {
+ "applyOnResult": {
+ "type": "boolean"
+ },
+ "dimensionality": {
+ "description": "References to the attributes to be used when filtering.",
+ "items": {
+ "$ref": "#/components/schemas/AfmIdentifier"
+ },
+ "type": "array"
+ },
+ "from": {
+ "example": 100,
+ "type": "number"
+ },
+ "localIdentifier": {
+ "type": "string"
+ },
+ "measure": {
+ "$ref": "#/components/schemas/AfmIdentifier"
+ },
+ "operator": {
+ "enum": [
+ "BETWEEN",
+ "NOT_BETWEEN"
+ ],
+ "example": "BETWEEN",
+ "type": "string"
+ },
+ "to": {
+ "example": 999,
+ "type": "number"
+ },
+ "treatNullValuesAs": {
+ "description": "A value that will be substituted for null values in the metric for the comparisons.",
+ "example": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "from",
+ "operator",
+ "to",
+ "measure"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "rangeMeasureValueFilter"
+ ],
+ "type": "object"
+ },
+ "RangeWrapper": {
+ "properties": {
+ "range": {
+ "$ref": "#/components/schemas/Range"
+ }
+ },
+ "required": [
+ "range"
+ ],
+ "type": "object"
+ },
+ "RankingFilter": {
+ "description": "Filter the result on top/bottom N values according to given metric(s).",
+ "properties": {
+ "rankingFilter": {
+ "properties": {
+ "applyOnResult": {
+ "type": "boolean"
+ },
+ "dimensionality": {
+ "description": "References to the attributes to be used when filtering.",
+ "items": {
+ "$ref": "#/components/schemas/AfmIdentifier"
+ },
+ "type": "array"
+ },
+ "localIdentifier": {
+ "type": "string"
+ },
+ "measures": {
+ "description": "References to the metrics to be used when filtering.",
+ "items": {
+ "$ref": "#/components/schemas/AfmIdentifier"
+ },
+ "type": "array"
+ },
+ "operator": {
+ "description": "The type of ranking to use, TOP or BOTTOM.",
+ "enum": [
+ "TOP",
+ "BOTTOM"
+ ],
+ "type": "string"
+ },
+ "value": {
+ "description": "Number of top/bottom values to filter.",
+ "example": 5,
+ "format": "int32",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "measures",
+ "operator",
+ "value"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "rankingFilter"
+ ],
+ "type": "object"
+ },
+ "Relative": {
+ "properties": {
+ "measure": {
+ "$ref": "#/components/schemas/ArithmeticMeasure"
+ },
+ "operator": {
+ "description": "Relative condition operator.\nINCREASES_BY - the metric increases by the specified value.\nDECREASES_BY - the metric decreases by the specified value.\nCHANGES_BY - the metric increases or decreases by the specified value.\n",
+ "enum": [
+ "INCREASES_BY",
+ "DECREASES_BY",
+ "CHANGES_BY"
+ ],
+ "type": "string"
+ },
+ "threshold": {
+ "$ref": "#/components/schemas/Value"
+ }
+ },
+ "required": [
+ "measure",
+ "operator",
+ "threshold"
+ ],
+ "type": "object"
+ },
+ "RelativeDateFilter": {
+ "description": "A date filter specifying a time interval that is relative to the current date. For example, last week, next month, and so on. Field dataset is representing qualifier of date dimension.",
+ "properties": {
+ "relativeDateFilter": {
+ "properties": {
+ "applyOnResult": {
+ "type": "boolean"
+ },
+ "dataset": {
+ "$ref": "#/components/schemas/AfmObjectIdentifierDataset"
+ },
+ "from": {
+ "description": "Start of the filtering interval. Specified by number of periods (with respect to given granularity). Typically negative (historical time interval like -2 for '2 days/weeks, ... ago').",
+ "example": -6,
+ "format": "int32",
+ "type": "integer"
+ },
+ "granularity": {
+ "description": "Date granularity specifying particular date attribute in given dimension.",
+ "enum": [
+ "MINUTE",
+ "HOUR",
+ "DAY",
+ "WEEK",
+ "MONTH",
+ "QUARTER",
+ "YEAR",
+ "MINUTE_OF_HOUR",
+ "HOUR_OF_DAY",
+ "DAY_OF_WEEK",
+ "DAY_OF_MONTH",
+ "DAY_OF_YEAR",
+ "WEEK_OF_YEAR",
+ "MONTH_OF_YEAR",
+ "QUARTER_OF_YEAR"
+ ],
+ "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,
+ "format": "int32",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "from",
+ "granularity",
+ "to",
+ "dataset"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "relativeDateFilter"
+ ],
+ "type": "object"
+ },
+ "RelativeWrapper": {
+ "properties": {
+ "relative": {
+ "$ref": "#/components/schemas/Relative"
+ }
+ },
+ "required": [
+ "relative"
+ ],
+ "type": "object"
+ },
"Settings": {
"description": "Additional settings.",
"properties": {
@@ -694,6 +1917,54 @@
},
"type": "object"
},
+ "SimpleMeasureDefinition": {
+ "description": "Metric defined by referencing a MAQL metric or an LDM fact object with aggregation.",
+ "properties": {
+ "measure": {
+ "properties": {
+ "aggregation": {
+ "description": "Definition of aggregation type of the metric.",
+ "enum": [
+ "SUM",
+ "COUNT",
+ "AVG",
+ "MIN",
+ "MAX",
+ "MEDIAN",
+ "RUNSUM",
+ "APPROXIMATE_COUNT"
+ ],
+ "example": "SUM",
+ "type": "string"
+ },
+ "computeRatio": {
+ "default": false,
+ "description": "If true, compute the percentage of given metric values (broken down by AFM attributes) to the total (not broken down).",
+ "example": true,
+ "type": "boolean"
+ },
+ "filters": {
+ "description": "Metrics can be filtered by attribute filters with the same interface as ones for global AFM. Note that only one DateFilter is allowed.",
+ "items": {
+ "$ref": "#/components/schemas/FilterDefinitionForSimpleMeasure"
+ },
+ "type": "array"
+ },
+ "item": {
+ "$ref": "#/components/schemas/AfmObjectIdentifierCore"
+ }
+ },
+ "required": [
+ "item"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "measure"
+ ],
+ "type": "object"
+ },
"Smtp": {
"description": "Custom SMTP destination for notifications. The properties host, port, username, and password are required on create and update",
"properties": {
@@ -877,8 +2148,26 @@
],
"type": "object"
},
+ "Value": {
+ "properties": {
+ "value": {
+ "description": "Value of the alert threshold to compare the metric to.",
+ "example": 1000,
+ "type": "number"
+ }
+ },
+ "required": [
+ "value"
+ ],
+ "type": "object"
+ },
"VisibleFilter": {
"properties": {
+ "isAllTimeDateFilter": {
+ "default": false,
+ "description": "Indicates if the filter is an all-time date filter. Such a filter is not included in report computation, so there is no filter with the same 'localIdentifier' to be found. In such cases, this flag is used to inform the server to not search for the filter in the definitions and include it anyways.",
+ "type": "boolean"
+ },
"localIdentifier": {
"type": "string"
},
@@ -953,6 +2242,9 @@
},
"WebhookAutomationInfo": {
"properties": {
+ "dashboardTitle": {
+ "type": "string"
+ },
"dashboardURL": {
"type": "string"
},
@@ -1016,6 +2308,12 @@
},
"type": "array"
},
+ "imageExports": {
+ "items": {
+ "$ref": "#/components/schemas/ExportResult"
+ },
+ "type": "array"
+ },
"recipients": {
"items": {
"$ref": "#/components/schemas/WebhookRecipient"
diff --git a/schemas/gooddata-export-client.json b/schemas/gooddata-export-client.json
index 3e63c4760..deb2f6665 100644
--- a/schemas/gooddata-export-client.json
+++ b/schemas/gooddata-export-client.json
@@ -311,6 +311,9 @@
],
"type": "object"
},
+ "AttributeElements": {
+ "type": "object"
+ },
"AttributeFilter": {
"description": "Abstract filter definition type attributes",
"oneOf": [
@@ -323,6 +326,21 @@
],
"type": "object"
},
+ "AttributeFilterByDate": {
+ "properties": {
+ "filterLocalIdentifier": {
+ "type": "string"
+ },
+ "isCommonDate": {
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "filterLocalIdentifier",
+ "isCommonDate"
+ ],
+ "type": "object"
+ },
"AttributeFilterElements": {
"description": "Filter on specific set of label values.",
"properties": {
@@ -345,6 +363,21 @@
],
"type": "object"
},
+ "AttributeFilterParent": {
+ "properties": {
+ "filterLocalIdentifier": {
+ "type": "string"
+ },
+ "over": {
+ "$ref": "#/components/schemas/Over"
+ }
+ },
+ "required": [
+ "filterLocalIdentifier",
+ "over"
+ ],
+ "type": "object"
+ },
"AttributeItem": {
"properties": {
"label": {
@@ -475,6 +508,186 @@
},
"type": "object"
},
+ "DashboardAttributeFilter": {
+ "properties": {
+ "attributeFilter": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/DashboardFilter"
+ },
+ {
+ "properties": {
+ "attributeElements": {
+ "$ref": "#/components/schemas/AttributeElements"
+ },
+ "displayForm": {
+ "type": "string"
+ },
+ "filterElementsBy": {
+ "items": {
+ "$ref": "#/components/schemas/AttributeFilterParent"
+ },
+ "type": "array"
+ },
+ "filterElementsByDate": {
+ "items": {
+ "$ref": "#/components/schemas/AttributeFilterByDate"
+ },
+ "type": "array"
+ },
+ "negativeSelection": {
+ "type": "boolean"
+ },
+ "selectionMode": {
+ "enum": [
+ "single",
+ "multi"
+ ],
+ "type": "string"
+ },
+ "title": {
+ "type": "string"
+ },
+ "validateElementsBy": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "type": "object"
+ }
+ ],
+ "required": [
+ "attributeElements",
+ "displayForm",
+ "negativeSelection"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "attributeFilter"
+ ],
+ "type": "object"
+ },
+ "DashboardDateFilter": {
+ "properties": {
+ "dateFilter": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/DashboardFilter"
+ },
+ {
+ "properties": {
+ "attribute": {
+ "type": "string"
+ },
+ "dataSet": {
+ "type": "string"
+ },
+ "from": {
+ "type": "string"
+ },
+ "granularity": {
+ "enum": [
+ "ALL_TIME_GRANULARITY",
+ "GDC.time.year",
+ "GDC.time.week_us",
+ "GDC.time.week_in_year",
+ "GDC.time.week_in_quarter",
+ "GDC.time.week",
+ "GDC.time.euweek_in_year",
+ "GDC.time.euweek_in_quarter",
+ "GDC.time.quarter",
+ "GDC.time.quarter_in_year",
+ "GDC.time.month",
+ "GDC.time.month_in_quarter",
+ "GDC.time.month_in_year",
+ "GDC.time.day_in_year",
+ "GDC.time.day_in_quarter",
+ "GDC.time.day_in_month",
+ "GDC.time.day_in_week",
+ "GDC.time.day_in_euweek",
+ "GDC.time.date",
+ "GDC.time.hour",
+ "GDC.time.hour_in_day",
+ "GDC.time.minute",
+ "GDC.time.minute_in_hour"
+ ],
+ "type": "string"
+ },
+ "to": {
+ "type": "string"
+ },
+ "type": {
+ "enum": [
+ "relative",
+ "absolute"
+ ],
+ "type": "string"
+ }
+ },
+ "type": "object"
+ }
+ ],
+ "required": [
+ "granularity",
+ "type"
+ ],
+ "type": "object"
+ }
+ },
+ "required": [
+ "dateFilter"
+ ],
+ "type": "object"
+ },
+ "DashboardFilter": {
+ "properties": {
+ "localIdentifier": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "DashboardTabularExportRequest": {
+ "description": "Export request object describing the export properties for dashboard tabular exports.",
+ "properties": {
+ "dashboardFiltersOverride": {
+ "description": "List of filters that will be used instead of the default dashboard filters.",
+ "items": {
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/DashboardAttributeFilter"
+ },
+ {
+ "$ref": "#/components/schemas/DashboardDateFilter"
+ }
+ ]
+ },
+ "type": "array"
+ },
+ "fileName": {
+ "description": "Filename of downloaded file without extension.",
+ "example": "result",
+ "type": "string"
+ },
+ "format": {
+ "description": "Requested tabular export type.",
+ "enum": [
+ "XLSX"
+ ],
+ "example": "XLSX",
+ "type": "string"
+ }
+ },
+ "required": [
+ "fileName",
+ "format"
+ ],
+ "type": "object"
+ },
"DateFilter": {
"description": "Abstract filter definition type for dates.",
"oneOf": [
@@ -560,6 +773,47 @@
],
"type": "object"
},
+ "ImageExportRequest": {
+ "description": "Export request object describing the export properties and metadata for image exports.",
+ "properties": {
+ "dashboardId": {
+ "description": "Dashboard identifier",
+ "example": "761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ "type": "string"
+ },
+ "fileName": {
+ "description": "File name to be used for retrieving the image document.",
+ "example": "filename",
+ "type": "string"
+ },
+ "format": {
+ "description": "Requested resulting file type.",
+ "enum": [
+ "PNG"
+ ],
+ "example": "PNG",
+ "type": "string"
+ },
+ "metadata": {
+ "$ref": "#/components/schemas/JsonNode"
+ },
+ "widgetIds": {
+ "description": "List of widget identifiers to be exported. Note that only one widget is currently supported.",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 1,
+ "type": "array",
+ "uniqueItems": true
+ }
+ },
+ "required": [
+ "dashboardId",
+ "fileName",
+ "format"
+ ],
+ "type": "object"
+ },
"InlineFilterDefinition": {
"description": "Filter in form of direct MAQL query.",
"properties": {
@@ -694,6 +948,20 @@
],
"type": "object"
},
+ "Over": {
+ "properties": {
+ "attributes": {
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "attributes"
+ ],
+ "type": "object"
+ },
"PdfTableStyle": {
"description": "Custom CSS styles for the table. (PDF, HTML)",
"example": [
@@ -1398,6 +1666,16 @@
}
}
],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/DashboardTabularExportRequest"
+ }
+ }
+ },
+ "required": true
+ },
"responses": {
"201": {
"content": {
@@ -1423,6 +1701,195 @@
}
}
},
+ "/api/v1/actions/workspaces/{workspaceId}/export/image": {
+ "post": {
+ "description": "Note: This API is an experimental and is going to change. Please, use it accordingly. An image export job will be created based on the export request and put to queue to be executed. The result of the operation will be an exportResult identifier that will be assembled by the client into a url that can be polled.",
+ "operationId": "createImageExport",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "workspaceId",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ImageExportRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ExportResponse"
+ }
+ }
+ },
+ "description": "Image export request created successfully."
+ }
+ },
+ "summary": "(EXPERIMENTAL) Create image export request",
+ "tags": [
+ "Image export",
+ "actions"
+ ],
+ "x-gdc-security-info": {
+ "description": "Permissions required to execute image export.",
+ "permissions": [
+ "EXPORT_PDF"
+ ]
+ }
+ }
+ },
+ "/api/v1/actions/workspaces/{workspaceId}/export/image/{exportId}": {
+ "get": {
+ "description": "Note: This API is an experimental and is going to change. Please, use it accordingly. After clients creates a POST export request, the processing of it will start shortly asynchronously. To retrieve the result, client has to check periodically for the result on this endpoint. In case the result isn't ready yet, the service returns 202. If the result is ready, it returns 200 and octet stream of the result file with provided filename.",
+ "operationId": "getImageExport",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "workspaceId",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "exportId",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "image/png": {}
+ },
+ "description": "Binary export result.",
+ "headers": {
+ "Content-Disposition": {
+ "schema": {
+ "example": "attachment; filename='result.png'",
+ "pattern": "attachment; filename='[^']+'",
+ "type": "string"
+ },
+ "style": "simple"
+ }
+ }
+ },
+ "202": {
+ "content": {
+ "image/png": {
+ "schema": {
+ "items": {
+ "properties": {
+ "char": {
+ "type": "string"
+ },
+ "direct": {
+ "type": "boolean"
+ },
+ "double": {
+ "format": "double",
+ "type": "number"
+ },
+ "float": {
+ "format": "float",
+ "type": "number"
+ },
+ "int": {
+ "format": "int32",
+ "type": "integer"
+ },
+ "long": {
+ "format": "int64",
+ "type": "integer"
+ },
+ "readOnly": {
+ "type": "boolean"
+ },
+ "short": {
+ "format": "int32",
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ }
+ }
+ },
+ "description": "Request is accepted, provided exportId exists, but export is not yet ready."
+ }
+ },
+ "summary": "(EXPERIMENTAL) Retrieve exported files",
+ "tags": [
+ "Image export",
+ "actions"
+ ],
+ "x-gdc-security-info": {
+ "description": "Minimal permission required to use this endpoint.",
+ "permissions": [
+ "EXPORT_PDF"
+ ]
+ }
+ }
+ },
+ "/api/v1/actions/workspaces/{workspaceId}/export/image/{exportId}/metadata": {
+ "get": {
+ "description": "Note: This API is an experimental and is going to change. Please, use it accordingly. This endpoint serves as a cache for user-defined metadata of the export for the front end UI to retrieve it, if one was created using the POST ../export/image endpoint. The metadata structure is not verified.",
+ "operationId": "getImageExportMetadata",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "workspaceId",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "path",
+ "name": "exportId",
+ "required": true,
+ "schema": {
+ "type": "string"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {}
+ },
+ "description": "Json metadata representation"
+ }
+ },
+ "summary": "(EXPERIMENTAL) Retrieve metadata context",
+ "tags": [
+ "Image export",
+ "actions"
+ ],
+ "x-gdc-security-info": {
+ "description": "Minimal permission required to use this endpoint.",
+ "permissions": [
+ "EXPORT_PDF"
+ ]
+ }
+ }
+ },
"/api/v1/actions/workspaces/{workspaceId}/export/raw": {
"post": {
"description": "Note: This API is an experimental and is going to change. Please, use it accordingly.An raw export job will be created based on the export request and put to queue to be executed. The result of the operation will be an exportResult identifier that will be assembled by the client into a url that can be polled.",
@@ -1583,7 +2050,7 @@
}
}
},
- "description": "Raw export request created successfully."
+ "description": "Slides export request created successfully."
}
},
"summary": "(EXPERIMENTAL) Create slides export request",
diff --git a/schemas/gooddata-metadata-client.json b/schemas/gooddata-metadata-client.json
index 635433fca..feb09cf6e 100644
--- a/schemas/gooddata-metadata-client.json
+++ b/schemas/gooddata-metadata-client.json
@@ -593,6 +593,17 @@
],
"type": "object"
},
+ "AutomationImageExport": {
+ "properties": {
+ "requestPayload": {
+ "$ref": "#/components/schemas/ImageExportRequest"
+ }
+ },
+ "required": [
+ "requestPayload"
+ ],
+ "type": "object"
+ },
"AutomationMetadata": {
"description": "Additional information for the automation.",
"maxLength": 250000,
@@ -1613,6 +1624,13 @@
"pattern": "^(?!\\.)[.A-Za-z0-9_-]{1,255}$",
"type": "string"
},
+ "imageExports": {
+ "items": {
+ "$ref": "#/components/schemas/AutomationImageExport"
+ },
+ "type": "array",
+ "uniqueItems": true
+ },
"metadata": {
"$ref": "#/components/schemas/AutomationMetadata"
},
@@ -1861,6 +1879,18 @@
"DeclarativeDataSource": {
"description": "A data source and its properties.",
"properties": {
+ "authenticationType": {
+ "description": "Type of authentication used to connect to the database.",
+ "enum": [
+ "USERNAME_PASSWORD",
+ "TOKEN",
+ "KEY_PAIR",
+ "CLIENT_SECRET",
+ "ACCESS_TOKEN"
+ ],
+ "nullable": true,
+ "type": "string"
+ },
"cacheStrategy": {
"description": "Determines how the results coming from a particular datasource should be cached.\n- ALWAYS: The results from the datasource should be cached normally (the default).\n- NEVER: The results from the datasource should never be cached.",
"enum": [
@@ -3310,6 +3340,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -3326,7 +3357,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"example": "TIMEZONE",
"type": "string"
@@ -4755,6 +4787,47 @@
],
"type": "object"
},
+ "ImageExportRequest": {
+ "description": "Export request object describing the export properties and metadata for image exports.",
+ "properties": {
+ "dashboardId": {
+ "description": "Dashboard identifier",
+ "example": "761cd28b-3f57-4ac9-bbdc-1c552cc0d1d0",
+ "type": "string"
+ },
+ "fileName": {
+ "description": "File name to be used for retrieving the image document.",
+ "example": "filename",
+ "type": "string"
+ },
+ "format": {
+ "description": "Requested resulting file type.",
+ "enum": [
+ "PNG"
+ ],
+ "example": "PNG",
+ "type": "string"
+ },
+ "metadata": {
+ "$ref": "#/components/schemas/JsonNode"
+ },
+ "widgetIds": {
+ "description": "List of widget identifiers to be exported. Note that only one widget is currently supported.",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 1,
+ "type": "array",
+ "uniqueItems": true
+ }
+ },
+ "required": [
+ "dashboardId",
+ "fileName",
+ "format"
+ ],
+ "type": "object"
+ },
"InPlatform": {
"allOf": [
{
@@ -6271,6 +6344,20 @@
},
"type": "array"
},
+ "imageExports": {
+ "items": {
+ "properties": {
+ "requestPayload": {
+ "$ref": "#/components/schemas/ImageExportRequest"
+ }
+ },
+ "required": [
+ "requestPayload"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
"metadata": {
"description": "Additional information for the automation.",
"maxLength": 250000,
@@ -6530,6 +6617,20 @@
},
"type": "array"
},
+ "imageExports": {
+ "items": {
+ "properties": {
+ "requestPayload": {
+ "$ref": "#/components/schemas/ImageExportRequest"
+ }
+ },
+ "required": [
+ "requestPayload"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
"metadata": {
"description": "Additional information for the automation.",
"maxLength": 250000,
@@ -6893,6 +6994,20 @@
},
"type": "array"
},
+ "imageExports": {
+ "items": {
+ "properties": {
+ "requestPayload": {
+ "$ref": "#/components/schemas/ImageExportRequest"
+ }
+ },
+ "required": [
+ "requestPayload"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
"metadata": {
"description": "Additional information for the automation.",
"maxLength": 250000,
@@ -12247,18 +12362,6 @@
"description": "The token to use to connect to the LLM provider.",
"maxLength": 10000,
"type": "string"
- },
- "workspaceIds": {
- "description": "List of workspace IDs for which LLM endpoint is valid. If empty, it is valid for all workspaces.",
- "example": [
- "demo",
- "trial"
- ],
- "items": {
- "maxLength": 255,
- "type": "string"
- },
- "type": "array"
}
},
"required": [
@@ -12339,18 +12442,6 @@
"description": "User-facing title of the LLM Provider.",
"maxLength": 255,
"type": "string"
- },
- "workspaceIds": {
- "description": "List of workspace IDs for which LLM endpoint is valid. If empty, it is valid for all workspaces.",
- "example": [
- "demo",
- "trial"
- ],
- "items": {
- "maxLength": 255,
- "type": "string"
- },
- "type": "array"
}
},
"required": [
@@ -12475,18 +12566,6 @@
"description": "The token to use to connect to the LLM provider.",
"maxLength": 10000,
"type": "string"
- },
- "workspaceIds": {
- "description": "List of workspace IDs for which LLM endpoint is valid. If empty, it is valid for all workspaces.",
- "example": [
- "demo",
- "trial"
- ],
- "items": {
- "maxLength": 255,
- "type": "string"
- },
- "type": "array"
}
},
"type": "object"
@@ -13941,6 +14020,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -13957,7 +14037,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"type": "string"
}
@@ -14011,6 +14092,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -14027,7 +14109,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"type": "string"
}
@@ -14121,6 +14204,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -14137,7 +14221,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"type": "string"
}
@@ -15597,6 +15682,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -15613,7 +15699,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"type": "string"
}
@@ -15667,6 +15754,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -15683,7 +15771,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"type": "string"
}
@@ -17415,6 +17504,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -17431,7 +17521,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"type": "string"
}
@@ -17485,6 +17576,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -17501,7 +17593,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"type": "string"
}
@@ -17621,6 +17714,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -17637,7 +17731,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"type": "string"
}
@@ -17691,6 +17786,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -17707,7 +17803,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"type": "string"
}
@@ -18774,6 +18871,7 @@
"TIMEZONE",
"ACTIVE_THEME",
"ACTIVE_COLOR_PALETTE",
+ "ACTIVE_LLM_ENDPOINT",
"WHITE_LABELING",
"LOCALE",
"METADATA_LOCALE",
@@ -18790,7 +18888,8 @@
"DATE_FILTER_CONFIG",
"JIT_PROVISIONING",
"DASHBOARD_FILTERS_APPLY_MODE",
- "ENABLE_SLIDES_EXPORT"
+ "ENABLE_SLIDES_EXPORT",
+ "AI_RATE_LIMIT"
],
"example": "TIMEZONE",
"type": "string"
@@ -19585,6 +19684,11 @@
},
"VisibleFilter": {
"properties": {
+ "isAllTimeDateFilter": {
+ "default": false,
+ "description": "Indicates if the filter is an all-time date filter. Such a filter is not included in report computation, so there is no filter with the same 'localIdentifier' to be found. In such cases, this flag is used to inform the server to not search for the filter in the definitions and include it anyways.",
+ "type": "boolean"
+ },
"localIdentifier": {
"type": "string"
},