diff --git a/.github/workflows/staging-tests.yaml b/.github/workflows/staging-tests.yaml new file mode 100644 index 000000000..bdedb18ff --- /dev/null +++ b/.github/workflows/staging-tests.yaml @@ -0,0 +1,76 @@ +name: Staging tests + +on: + pull_request: + types: [labeled] + branches: + - master + - 'rel/**' + issue_comment: + types: [created] + workflow_dispatch: + inputs: + test_envs: + description: 'Tox test environments to run (e.g. py312)' + required: false + default: 'py314' + test_filter: + description: 'Pytest filter expression (-k flag)' + required: false + default: '' + +concurrency: + group: staging-tests + cancel-in-progress: false + +jobs: + staging-tests: + name: Staging tests + if: >- + github.event_name == 'workflow_dispatch' || + (github.event_name == 'pull_request' && github.event.label.name == 'test-staging') || + (github.event_name == 'issue_comment' && github.event.issue.pull_request && contains(github.event.comment.body, '/test-staging')) + runs-on: + group: infra1-runners-arc + labels: runners-small + steps: + - name: Get PR head SHA (comment trigger) + if: github.event_name == 'issue_comment' + id: pr + run: | + PR_DATA=$(gh api repos/${{ github.repository }}/pulls/${{ github.event.issue.number }}) + echo "sha=$(echo "$PR_DATA" | jq -r .head.sha)" >> "$GITHUB_OUTPUT" + echo "ref=$(echo "$PR_DATA" | jq -r .head.ref)" >> "$GITHUB_OUTPUT" + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Checkout + uses: actions/checkout@v4 + with: + ref: ${{ steps.pr.outputs.sha || github.event.pull_request.head.sha || github.sha }} + + - name: Set up Python + uses: astral-sh/setup-uv@v6 + with: + python-version: '3.14' + + - name: Install dependencies + run: uv sync --all-groups --locked + + - name: Clean staging environment + run: make clean-staging + env: + TOKEN: ${{ secrets.PYTHON_SDK_STG_API_KEY }} + + - name: Load staging environment + run: make load-staging + env: + TOKEN: ${{ secrets.PYTHON_SDK_STG_API_KEY }} + + - name: Run staging tests + run: | + make test-staging \ + TEST_ENVS=${{ github.event.inputs.test_envs || 'py314' }} \ + ADD_ARGS="${{ github.event.inputs.test_filter && format('-k {0}', github.event.inputs.test_filter) || '' }}" + env: + TOKEN: ${{ secrets.PYTHON_SDK_STG_API_KEY }} diff --git a/.gitignore b/.gitignore index 1268f15ab..76ba04099 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,6 @@ docs/.hugo_build.lock # Export artifacts from Docker export-controller service packages/gooddata-sdk/tests/export/exports/default/ + +# Staging test fixture backups (created by conftest.py, self-heal on next run) +*.staging-backup diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c3c2c0ea3..4528e1ea0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -292,6 +292,42 @@ docker compose --profile fdw up -d This starts a PostgreSQL instance with the gooddata-fdw extension on port 2543. +## Run staging tests + +Staging tests run against a shared GoodData staging environment instead of a local docker-compose stack. +They are useful for validating changes against a real deployment. + +### Triggers + +The staging tests workflow (`.github/workflows/staging-tests.yaml`) can be triggered in three ways: + +1. **Label** — Add the `test-staging` label to a PR targeting `master` or `rel/**`. +2. **PR comment** — Post `/test-staging` as a comment on a PR. +3. **Manual dispatch** — Trigger from the Actions tab with optional `test_envs` and `test_filter` inputs. + +Only one staging test run executes at a time (concurrency group `staging-tests`, non-cancelling). + +### Running staging tests locally + +You need a staging API token (`TOKEN`). The workflow uses the `PYTHON_SDK_STG_API_KEY` secret; locally you +pass it via the `TOKEN=` make argument: + +```bash +# 1. Clean the staging workspace (removes previous test data) +make clean-staging TOKEN= + +# 2. Load the demo layout into staging +make load-staging TOKEN= + +# 3. Run the tests +make test-staging TOKEN= + +# Optionally limit python version and test filter: +make test-staging TOKEN= TEST_ENVS=py312 ADD_ARGS="-k test_catalog" +``` + +The token is passed as a CLI argument (`--gd-test-token`) to pytest, **not** as an environment variable. + ## Run continuous integration tests Tests in pull request (PR) are executed using docker. The following is done to make test environment as close to reproducible as possible: diff --git a/Makefile b/Makefile index 809f20130..6b7d85c86 100644 --- a/Makefile +++ b/Makefile @@ -82,6 +82,21 @@ test: for project in $(NO_CLIENT_GD_PROJECTS_DIRS); do $(MAKE) -C packages/$${project} test || RESULT=$$?; done; \ exit $$RESULT +.PHONY: test-staging +test-staging: + @test -n "$(TOKEN)" || (echo "ERROR: TOKEN is required. Usage: make test-staging TOKEN=" && exit 1) + $(MAKE) -C packages/gooddata-sdk test-staging TOKEN=$(TOKEN) + +.PHONY: clean-staging +clean-staging: + @test -n "$(TOKEN)" || (echo "ERROR: TOKEN is required. Usage: make clean-staging TOKEN=" && exit 1) + cd packages/tests-support && STAGING=1 TOKEN="$(TOKEN)" python clean_staging.py + +.PHONY: load-staging +load-staging: + @test -n "$(TOKEN)" || (echo "ERROR: TOKEN is required. Usage: make load-staging TOKEN=" && exit 1) + cd packages/tests-support && STAGING=1 TOKEN="$(TOKEN)" python upload_demo_layout.py + .PHONY: release release: if [ -z "$(VERSION)" ]; then echo "Usage: 'make release VERSION=X.Y.Z'"; false; else \ diff --git a/gooddata-api-client/.openapi-generator/FILES b/gooddata-api-client/.openapi-generator/FILES index 07aa05f83..17d84c99e 100644 --- a/gooddata-api-client/.openapi-generator/FILES +++ b/gooddata-api-client/.openapi-generator/FILES @@ -384,6 +384,7 @@ docs/GeographicDataApi.md docs/GetAiLakeOperation200Response.md docs/GetImageExport202ResponseInner.md docs/GetQualityIssuesResponse.md +docs/GetServiceStatusResponse.md docs/GrainIdentifier.md docs/GrantedPermission.md docs/GranularitiesFormatting.md @@ -1014,6 +1015,9 @@ docs/ListDatabaseInstancesResponse.md docs/ListKnowledgeDocumentsResponseDto.md docs/ListLinks.md docs/ListLinksAllOf.md +docs/ListLlmProviderModelsRequest.md +docs/ListLlmProviderModelsRequestProviderConfig.md +docs/ListLlmProviderModelsResponse.md docs/ListServicesResponse.md docs/LlmModel.md docs/LlmProviderAuth.md @@ -1193,8 +1197,8 @@ docs/TabularExportRequest.md docs/TestConnectionApi.md docs/TestDefinitionRequest.md docs/TestDestinationRequest.md +docs/TestLlmProviderByIdRequest.md docs/TestLlmProviderDefinitionRequest.md -docs/TestLlmProviderDefinitionRequestProviderConfig.md docs/TestLlmProviderResponse.md docs/TestNotification.md docs/TestNotificationAllOf.md @@ -1207,6 +1211,8 @@ docs/TotalDimension.md docs/TotalExecutionResultHeader.md docs/TotalResultHeader.md docs/TranslationsApi.md +docs/TrendingObjectItem.md +docs/TrendingObjectsResult.md docs/TriggerAutomationRequest.md docs/TriggerQualityIssuesCalculationResponse.md docs/UpsertKnowledgeDocumentRequestDto.md @@ -1708,6 +1714,7 @@ gooddata_api_client/model/geo_collection_identifier.py gooddata_api_client/model/get_ai_lake_operation200_response.py gooddata_api_client/model/get_image_export202_response_inner.py gooddata_api_client/model/get_quality_issues_response.py +gooddata_api_client/model/get_service_status_response.py gooddata_api_client/model/grain_identifier.py gooddata_api_client/model/granted_permission.py gooddata_api_client/model/granularities_formatting.py @@ -2328,6 +2335,9 @@ gooddata_api_client/model/list_database_instances_response.py gooddata_api_client/model/list_knowledge_documents_response_dto.py gooddata_api_client/model/list_links.py gooddata_api_client/model/list_links_all_of.py +gooddata_api_client/model/list_llm_provider_models_request.py +gooddata_api_client/model/list_llm_provider_models_request_provider_config.py +gooddata_api_client/model/list_llm_provider_models_response.py gooddata_api_client/model/list_services_response.py gooddata_api_client/model/llm_model.py gooddata_api_client/model/llm_provider_auth.py @@ -2487,8 +2497,8 @@ gooddata_api_client/model/table_warning.py gooddata_api_client/model/tabular_export_request.py gooddata_api_client/model/test_definition_request.py gooddata_api_client/model/test_destination_request.py +gooddata_api_client/model/test_llm_provider_by_id_request.py gooddata_api_client/model/test_llm_provider_definition_request.py -gooddata_api_client/model/test_llm_provider_definition_request_provider_config.py gooddata_api_client/model/test_llm_provider_response.py gooddata_api_client/model/test_notification.py gooddata_api_client/model/test_notification_all_of.py @@ -2500,6 +2510,8 @@ gooddata_api_client/model/total.py gooddata_api_client/model/total_dimension.py gooddata_api_client/model/total_execution_result_header.py gooddata_api_client/model/total_result_header.py +gooddata_api_client/model/trending_object_item.py +gooddata_api_client/model/trending_objects_result.py gooddata_api_client/model/trigger_automation_request.py gooddata_api_client/model/trigger_quality_issues_calculation_response.py gooddata_api_client/model/upsert_knowledge_document_request_dto.py diff --git a/gooddata-api-client/README.md b/gooddata-api-client/README.md index 097ee2f03..1d1ecfaa5 100644 --- a/gooddata-api-client/README.md +++ b/gooddata-api-client/README.md @@ -106,6 +106,7 @@ Class | Method | HTTP request | Description *AILakeApi* | [**deprovision_ai_lake_database_instance**](docs/AILakeApi.md#deprovision_ai_lake_database_instance) | **DELETE** /api/v1/ailake/database/instances/{instanceId} | (BETA) Delete an existing AILake Database instance *AILakeApi* | [**get_ai_lake_database_instance**](docs/AILakeApi.md#get_ai_lake_database_instance) | **GET** /api/v1/ailake/database/instances/{instanceId} | (BETA) Get the specified AILake Database instance *AILakeApi* | [**get_ai_lake_operation**](docs/AILakeApi.md#get_ai_lake_operation) | **GET** /api/v1/ailake/operations/{operationId} | (BETA) Get Long Running Operation details +*AILakeApi* | [**get_ai_lake_service_status**](docs/AILakeApi.md#get_ai_lake_service_status) | **GET** /api/v1/ailake/services/{serviceId}/status | (BETA) Get AI Lake service status *AILakeApi* | [**list_ai_lake_database_instances**](docs/AILakeApi.md#list_ai_lake_database_instances) | **GET** /api/v1/ailake/database/instances | (BETA) List AI Lake Database instances *AILakeApi* | [**list_ai_lake_services**](docs/AILakeApi.md#list_ai_lake_services) | **GET** /api/v1/ailake/services | (BETA) List AI Lake services *AILakeApi* | [**provision_ai_lake_database_instance**](docs/AILakeApi.md#provision_ai_lake_database_instance) | **POST** /api/v1/ailake/database/instances | (BETA) Create a new AILake Database instance @@ -416,11 +417,14 @@ Class | Method | HTTP request | Description *SmartFunctionsApi* | [**generate_title**](docs/SmartFunctionsApi.md#generate_title) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/analyticsCatalog/generateTitle | Generate Title for Analytics Object *SmartFunctionsApi* | [**get_quality_issues**](docs/SmartFunctionsApi.md#get_quality_issues) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/issues | Get Quality Issues *SmartFunctionsApi* | [**get_quality_issues_calculation_status**](docs/SmartFunctionsApi.md#get_quality_issues_calculation_status) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/issues/status/{processId} | Get Quality Issues Calculation Status +*SmartFunctionsApi* | [**list_llm_provider_models**](docs/SmartFunctionsApi.md#list_llm_provider_models) | **POST** /api/v1/actions/ai/llmProvider/listModels | List LLM Provider Models +*SmartFunctionsApi* | [**list_llm_provider_models_by_id**](docs/SmartFunctionsApi.md#list_llm_provider_models_by_id) | **POST** /api/v1/actions/ai/llmProvider/{llmProviderId}/listModels | List LLM Provider Models By Id *SmartFunctionsApi* | [**memory_created_by_users**](docs/SmartFunctionsApi.md#memory_created_by_users) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/memory/createdBy | Get AI Memory CreatedBy Users *SmartFunctionsApi* | [**resolve_llm_endpoints**](docs/SmartFunctionsApi.md#resolve_llm_endpoints) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/resolveLlmEndpoints | Get Active LLM Endpoints for this workspace *SmartFunctionsApi* | [**tags**](docs/SmartFunctionsApi.md#tags) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/analyticsCatalog/tags | Get Analytics Catalog Tags *SmartFunctionsApi* | [**test_llm_provider**](docs/SmartFunctionsApi.md#test_llm_provider) | **POST** /api/v1/actions/ai/llmProvider/test | Test LLM Provider *SmartFunctionsApi* | [**test_llm_provider_by_id**](docs/SmartFunctionsApi.md#test_llm_provider_by_id) | **POST** /api/v1/actions/ai/llmProvider/{llmProviderId}/test | Test LLM Provider By Id +*SmartFunctionsApi* | [**trending_objects**](docs/SmartFunctionsApi.md#trending_objects) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/analyticsCatalog/trendingObjects | Get Trending Analytics Catalog Objects *SmartFunctionsApi* | [**trigger_quality_issues_calculation**](docs/SmartFunctionsApi.md#trigger_quality_issues_calculation) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/issues/triggerCheck | Trigger Quality Issues Calculation *SmartFunctionsApi* | [**validate_llm_endpoint**](docs/SmartFunctionsApi.md#validate_llm_endpoint) | **POST** /api/v1/actions/ai/llmEndpoint/test | Validate LLM Endpoint *SmartFunctionsApi* | [**validate_llm_endpoint_by_id**](docs/SmartFunctionsApi.md#validate_llm_endpoint_by_id) | **POST** /api/v1/actions/ai/llmEndpoint/{llmEndpointId}/test | Validate LLM Endpoint By Id @@ -577,6 +581,8 @@ Class | Method | HTTP request | Description *ActionsApi* | [**key_driver_analysis**](docs/ActionsApi.md#key_driver_analysis) | **POST** /api/v1/actions/workspaces/{workspaceId}/execution/computeKeyDrivers | (EXPERIMENTAL) Compute key driver analysis *ActionsApi* | [**key_driver_analysis_result**](docs/ActionsApi.md#key_driver_analysis_result) | **GET** /api/v1/actions/workspaces/{workspaceId}/execution/computeKeyDrivers/result/{resultId} | (EXPERIMENTAL) Get key driver analysis result *ActionsApi* | [**list_documents**](docs/ActionsApi.md#list_documents) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/knowledge/documents | +*ActionsApi* | [**list_llm_provider_models**](docs/ActionsApi.md#list_llm_provider_models) | **POST** /api/v1/actions/ai/llmProvider/listModels | List LLM Provider Models +*ActionsApi* | [**list_llm_provider_models_by_id**](docs/ActionsApi.md#list_llm_provider_models_by_id) | **POST** /api/v1/actions/ai/llmProvider/{llmProviderId}/listModels | List LLM Provider Models By Id *ActionsApi* | [**list_workspace_user_groups**](docs/ActionsApi.md#list_workspace_user_groups) | **GET** /api/v1/actions/workspaces/{workspaceId}/userGroups | *ActionsApi* | [**list_workspace_users**](docs/ActionsApi.md#list_workspace_users) | **GET** /api/v1/actions/workspaces/{workspaceId}/users | *ActionsApi* | [**manage_dashboard_permissions**](docs/ActionsApi.md#manage_dashboard_permissions) | **POST** /api/v1/actions/workspaces/{workspaceId}/analyticalDashboards/{dashboardId}/managePermissions | Manage Permissions for a Dashboard @@ -618,6 +624,7 @@ Class | Method | HTTP request | Description *ActionsApi* | [**test_llm_provider**](docs/ActionsApi.md#test_llm_provider) | **POST** /api/v1/actions/ai/llmProvider/test | Test LLM Provider *ActionsApi* | [**test_llm_provider_by_id**](docs/ActionsApi.md#test_llm_provider_by_id) | **POST** /api/v1/actions/ai/llmProvider/{llmProviderId}/test | Test LLM Provider By Id *ActionsApi* | [**test_notification_channel**](docs/ActionsApi.md#test_notification_channel) | **POST** /api/v1/actions/notificationChannels/test | Test notification channel. +*ActionsApi* | [**trending_objects**](docs/ActionsApi.md#trending_objects) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/analyticsCatalog/trendingObjects | Get Trending Analytics Catalog Objects *ActionsApi* | [**trigger_automation**](docs/ActionsApi.md#trigger_automation) | **POST** /api/v1/actions/workspaces/{workspaceId}/automations/trigger | Trigger automation. *ActionsApi* | [**trigger_existing_automation**](docs/ActionsApi.md#trigger_existing_automation) | **POST** /api/v1/actions/workspaces/{workspaceId}/automations/{automationId}/trigger | Trigger existing automation. *ActionsApi* | [**trigger_quality_issues_calculation**](docs/ActionsApi.md#trigger_quality_issues_calculation) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/issues/triggerCheck | Trigger Quality Issues Calculation @@ -1527,6 +1534,7 @@ Class | Method | HTTP request | Description - [GetAiLakeOperation200Response](docs/GetAiLakeOperation200Response.md) - [GetImageExport202ResponseInner](docs/GetImageExport202ResponseInner.md) - [GetQualityIssuesResponse](docs/GetQualityIssuesResponse.md) + - [GetServiceStatusResponse](docs/GetServiceStatusResponse.md) - [GrainIdentifier](docs/GrainIdentifier.md) - [GrantedPermission](docs/GrantedPermission.md) - [GranularitiesFormatting](docs/GranularitiesFormatting.md) @@ -2147,6 +2155,9 @@ Class | Method | HTTP request | Description - [ListKnowledgeDocumentsResponseDto](docs/ListKnowledgeDocumentsResponseDto.md) - [ListLinks](docs/ListLinks.md) - [ListLinksAllOf](docs/ListLinksAllOf.md) + - [ListLlmProviderModelsRequest](docs/ListLlmProviderModelsRequest.md) + - [ListLlmProviderModelsRequestProviderConfig](docs/ListLlmProviderModelsRequestProviderConfig.md) + - [ListLlmProviderModelsResponse](docs/ListLlmProviderModelsResponse.md) - [ListServicesResponse](docs/ListServicesResponse.md) - [LlmModel](docs/LlmModel.md) - [LlmProviderAuth](docs/LlmProviderAuth.md) @@ -2306,8 +2317,8 @@ Class | Method | HTTP request | Description - [TabularExportRequest](docs/TabularExportRequest.md) - [TestDefinitionRequest](docs/TestDefinitionRequest.md) - [TestDestinationRequest](docs/TestDestinationRequest.md) + - [TestLlmProviderByIdRequest](docs/TestLlmProviderByIdRequest.md) - [TestLlmProviderDefinitionRequest](docs/TestLlmProviderDefinitionRequest.md) - - [TestLlmProviderDefinitionRequestProviderConfig](docs/TestLlmProviderDefinitionRequestProviderConfig.md) - [TestLlmProviderResponse](docs/TestLlmProviderResponse.md) - [TestNotification](docs/TestNotification.md) - [TestNotificationAllOf](docs/TestNotificationAllOf.md) @@ -2319,6 +2330,8 @@ Class | Method | HTTP request | Description - [TotalDimension](docs/TotalDimension.md) - [TotalExecutionResultHeader](docs/TotalExecutionResultHeader.md) - [TotalResultHeader](docs/TotalResultHeader.md) + - [TrendingObjectItem](docs/TrendingObjectItem.md) + - [TrendingObjectsResult](docs/TrendingObjectsResult.md) - [TriggerAutomationRequest](docs/TriggerAutomationRequest.md) - [TriggerQualityIssuesCalculationResponse](docs/TriggerQualityIssuesCalculationResponse.md) - [UpsertKnowledgeDocumentRequestDto](docs/UpsertKnowledgeDocumentRequestDto.md) diff --git a/gooddata-api-client/docs/AILakeApi.md b/gooddata-api-client/docs/AILakeApi.md index cd4bdfad3..578129980 100644 --- a/gooddata-api-client/docs/AILakeApi.md +++ b/gooddata-api-client/docs/AILakeApi.md @@ -7,6 +7,7 @@ Method | HTTP request | Description [**deprovision_ai_lake_database_instance**](AILakeApi.md#deprovision_ai_lake_database_instance) | **DELETE** /api/v1/ailake/database/instances/{instanceId} | (BETA) Delete an existing AILake Database instance [**get_ai_lake_database_instance**](AILakeApi.md#get_ai_lake_database_instance) | **GET** /api/v1/ailake/database/instances/{instanceId} | (BETA) Get the specified AILake Database instance [**get_ai_lake_operation**](AILakeApi.md#get_ai_lake_operation) | **GET** /api/v1/ailake/operations/{operationId} | (BETA) Get Long Running Operation details +[**get_ai_lake_service_status**](AILakeApi.md#get_ai_lake_service_status) | **GET** /api/v1/ailake/services/{serviceId}/status | (BETA) Get AI Lake service status [**list_ai_lake_database_instances**](AILakeApi.md#list_ai_lake_database_instances) | **GET** /api/v1/ailake/database/instances | (BETA) List AI Lake Database instances [**list_ai_lake_services**](AILakeApi.md#list_ai_lake_services) | **GET** /api/v1/ailake/services | (BETA) List AI Lake services [**provision_ai_lake_database_instance**](AILakeApi.md#provision_ai_lake_database_instance) | **POST** /api/v1/ailake/database/instances | (BETA) Create a new AILake Database instance @@ -224,6 +225,73 @@ 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_ai_lake_service_status** +> GetServiceStatusResponse get_ai_lake_service_status(service_id) + +(BETA) Get AI Lake service status + +(BETA) Returns the status of a service in the organization's AI Lake. The status is controller-specific (e.g., available commands, readiness). + +### Example + + +```python +import time +import gooddata_api_client +from gooddata_api_client.api import ai_lake_api +from gooddata_api_client.model.get_service_status_response import GetServiceStatusResponse +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 = ai_lake_api.AILakeApi(api_client) + service_id = "serviceId_example" # str | + + # example passing only required values which don't have defaults set + try: + # (BETA) Get AI Lake service status + api_response = api_instance.get_ai_lake_service_status(service_id) + pprint(api_response) + except gooddata_api_client.ApiException as e: + print("Exception when calling AILakeApi->get_ai_lake_service_status: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **service_id** | **str**| | + +### Return type + +[**GetServiceStatusResponse**](GetServiceStatusResponse.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | AI Lake service status successfully retrieved | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **list_ai_lake_database_instances** > ListDatabaseInstancesResponse list_ai_lake_database_instances() diff --git a/gooddata-api-client/docs/ActionsApi.md b/gooddata-api-client/docs/ActionsApi.md index 00977d702..8b76cd192 100644 --- a/gooddata-api-client/docs/ActionsApi.md +++ b/gooddata-api-client/docs/ActionsApi.md @@ -65,6 +65,8 @@ Method | HTTP request | Description [**key_driver_analysis**](ActionsApi.md#key_driver_analysis) | **POST** /api/v1/actions/workspaces/{workspaceId}/execution/computeKeyDrivers | (EXPERIMENTAL) Compute key driver analysis [**key_driver_analysis_result**](ActionsApi.md#key_driver_analysis_result) | **GET** /api/v1/actions/workspaces/{workspaceId}/execution/computeKeyDrivers/result/{resultId} | (EXPERIMENTAL) Get key driver analysis result [**list_documents**](ActionsApi.md#list_documents) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/knowledge/documents | +[**list_llm_provider_models**](ActionsApi.md#list_llm_provider_models) | **POST** /api/v1/actions/ai/llmProvider/listModels | List LLM Provider Models +[**list_llm_provider_models_by_id**](ActionsApi.md#list_llm_provider_models_by_id) | **POST** /api/v1/actions/ai/llmProvider/{llmProviderId}/listModels | List LLM Provider Models By Id [**list_workspace_user_groups**](ActionsApi.md#list_workspace_user_groups) | **GET** /api/v1/actions/workspaces/{workspaceId}/userGroups | [**list_workspace_users**](ActionsApi.md#list_workspace_users) | **GET** /api/v1/actions/workspaces/{workspaceId}/users | [**manage_dashboard_permissions**](ActionsApi.md#manage_dashboard_permissions) | **POST** /api/v1/actions/workspaces/{workspaceId}/analyticalDashboards/{dashboardId}/managePermissions | Manage Permissions for a Dashboard @@ -106,6 +108,7 @@ Method | HTTP request | Description [**test_llm_provider**](ActionsApi.md#test_llm_provider) | **POST** /api/v1/actions/ai/llmProvider/test | Test LLM Provider [**test_llm_provider_by_id**](ActionsApi.md#test_llm_provider_by_id) | **POST** /api/v1/actions/ai/llmProvider/{llmProviderId}/test | Test LLM Provider By Id [**test_notification_channel**](ActionsApi.md#test_notification_channel) | **POST** /api/v1/actions/notificationChannels/test | Test notification channel. +[**trending_objects**](ActionsApi.md#trending_objects) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/analyticsCatalog/trendingObjects | Get Trending Analytics Catalog Objects [**trigger_automation**](ActionsApi.md#trigger_automation) | **POST** /api/v1/actions/workspaces/{workspaceId}/automations/trigger | Trigger automation. [**trigger_existing_automation**](ActionsApi.md#trigger_existing_automation) | **POST** /api/v1/actions/workspaces/{workspaceId}/automations/{automationId}/trigger | Trigger existing automation. [**trigger_quality_issues_calculation**](ActionsApi.md#trigger_quality_issues_calculation) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/issues/triggerCheck | Trigger Quality Issues Calculation @@ -5213,6 +5216,143 @@ No authorization required - **Accept**: application/json +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_llm_provider_models** +> ListLlmProviderModelsResponse list_llm_provider_models(list_llm_provider_models_request) + +List LLM Provider Models + +Lists models available on an LLM provider with a full definition. For Azure AI Foundry providers, the model family will be set to UNKNOWN because the endpoint does not expose the family. + +### Example + + +```python +import time +import gooddata_api_client +from gooddata_api_client.api import actions_api +from gooddata_api_client.model.list_llm_provider_models_request import ListLlmProviderModelsRequest +from gooddata_api_client.model.list_llm_provider_models_response import ListLlmProviderModelsResponse +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) + list_llm_provider_models_request = ListLlmProviderModelsRequest( + provider_config=ListLlmProviderModelsRequestProviderConfig(None), + ) # ListLlmProviderModelsRequest | + + # example passing only required values which don't have defaults set + try: + # List LLM Provider Models + api_response = api_instance.list_llm_provider_models(list_llm_provider_models_request) + pprint(api_response) + except gooddata_api_client.ApiException as e: + print("Exception when calling ActionsApi->list_llm_provider_models: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **list_llm_provider_models_request** | [**ListLlmProviderModelsRequest**](ListLlmProviderModelsRequest.md)| | + +### Return type + +[**ListLlmProviderModelsResponse**](ListLlmProviderModelsResponse.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_llm_provider_models_by_id** +> ListLlmProviderModelsResponse list_llm_provider_models_by_id(llm_provider_id) + +List LLM Provider Models By Id + +Lists models available on an existing LLM provider by its ID. For Azure AI Foundry providers, the model family will be set to UNKNOWN because the endpoint does not expose the family. + +### Example + + +```python +import time +import gooddata_api_client +from gooddata_api_client.api import actions_api +from gooddata_api_client.model.list_llm_provider_models_response import ListLlmProviderModelsResponse +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) + llm_provider_id = "llmProviderId_example" # str | + + # example passing only required values which don't have defaults set + try: + # List LLM Provider Models By Id + api_response = api_instance.list_llm_provider_models_by_id(llm_provider_id) + pprint(api_response) + except gooddata_api_client.ApiException as e: + print("Exception when calling ActionsApi->list_llm_provider_models_by_id: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **llm_provider_id** | **str**| | + +### Return type + +[**ListLlmProviderModelsResponse**](ListLlmProviderModelsResponse.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + + ### HTTP response details | Status code | Description | Response headers | @@ -8113,7 +8253,7 @@ with gooddata_api_client.ApiClient() as api_client: id="id_example", ), ], - provider_config=TestLlmProviderDefinitionRequestProviderConfig(None), + provider_config=ListLlmProviderModelsRequestProviderConfig(None), ) # TestLlmProviderDefinitionRequest | # example passing only required values which don't have defaults set @@ -8169,6 +8309,7 @@ import time import gooddata_api_client from gooddata_api_client.api import actions_api from gooddata_api_client.model.test_llm_provider_response import TestLlmProviderResponse +from gooddata_api_client.model.test_llm_provider_by_id_request import TestLlmProviderByIdRequest 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. @@ -8182,6 +8323,15 @@ with gooddata_api_client.ApiClient() as api_client: # Create an instance of the API class api_instance = actions_api.ActionsApi(api_client) llm_provider_id = "llmProviderId_example" # str | + test_llm_provider_by_id_request = TestLlmProviderByIdRequest( + models=[ + LlmModel( + family="OPENAI", + id="id_example", + ), + ], + provider_config=ListLlmProviderModelsRequestProviderConfig(None), + ) # TestLlmProviderByIdRequest | (optional) # example passing only required values which don't have defaults set try: @@ -8190,6 +8340,15 @@ with gooddata_api_client.ApiClient() as api_client: pprint(api_response) except gooddata_api_client.ApiException as e: print("Exception when calling ActionsApi->test_llm_provider_by_id: %s\n" % e) + + # example passing only required values which don't have defaults set + # and optional values + try: + # Test LLM Provider By Id + api_response = api_instance.test_llm_provider_by_id(llm_provider_id, test_llm_provider_by_id_request=test_llm_provider_by_id_request) + pprint(api_response) + except gooddata_api_client.ApiException as e: + print("Exception when calling ActionsApi->test_llm_provider_by_id: %s\n" % e) ``` @@ -8198,6 +8357,7 @@ with gooddata_api_client.ApiClient() as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **llm_provider_id** | **str**| | + **test_llm_provider_by_id_request** | [**TestLlmProviderByIdRequest**](TestLlmProviderByIdRequest.md)| | [optional] ### Return type @@ -8209,7 +8369,7 @@ No authorization required ### HTTP request headers - - **Content-Type**: Not defined + - **Content-Type**: application/json - **Accept**: application/json @@ -8296,6 +8456,73 @@ 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) +# **trending_objects** +> TrendingObjectsResult trending_objects(workspace_id) + +Get Trending Analytics Catalog Objects + +Returns a list of trending objects for this workspace + +### Example + + +```python +import time +import gooddata_api_client +from gooddata_api_client.api import actions_api +from gooddata_api_client.model.trending_objects_result import TrendingObjectsResult +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 Trending Analytics Catalog Objects + api_response = api_instance.trending_objects(workspace_id) + pprint(api_response) + except gooddata_api_client.ApiException as e: + print("Exception when calling ActionsApi->trending_objects: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **workspace_id** | **str**| Workspace identifier | + +### Return type + +[**TrendingObjectsResult**](TrendingObjectsResult.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | + +[[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) + # **trigger_automation** > trigger_automation(workspace_id, trigger_automation_request) diff --git a/gooddata-api-client/docs/AzureFoundryProviderConfig.md b/gooddata-api-client/docs/AzureFoundryProviderConfig.md index 08a6da0b6..5bc986efa 100644 --- a/gooddata-api-client/docs/AzureFoundryProviderConfig.md +++ b/gooddata-api-client/docs/AzureFoundryProviderConfig.md @@ -6,7 +6,7 @@ Configuration for Azure Foundry provider. Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **auth** | [**AzureFoundryProviderAuth**](AzureFoundryProviderAuth.md) | | -**endpoint** | **str** | Azure AI inference endpoint URL. | +**endpoint** | **str** | Azure OpenAI endpoint URL. | **type** | **str** | Provider type. | defaults to "AZURE_FOUNDRY" **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/GetServiceStatusResponse.md b/gooddata-api-client/docs/GetServiceStatusResponse.md new file mode 100644 index 000000000..efbedc255 --- /dev/null +++ b/gooddata-api-client/docs/GetServiceStatusResponse.md @@ -0,0 +1,13 @@ +# GetServiceStatusResponse + +Status of an AI Lake service + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**status** | [**JsonNode**](JsonNode.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/JsonApiLlmProviderInAttributesProviderConfig.md b/gooddata-api-client/docs/JsonApiLlmProviderInAttributesProviderConfig.md index 40e1a6639..1b2158c42 100644 --- a/gooddata-api-client/docs/JsonApiLlmProviderInAttributesProviderConfig.md +++ b/gooddata-api-client/docs/JsonApiLlmProviderInAttributesProviderConfig.md @@ -5,12 +5,12 @@ Provider-specific configuration including authentication. ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**base_url** | **str, none_type** | Custom base URL for OpenAI API. | [optional] if omitted the server will use the default value of "https://api.openai.com" +**base_url** | **str** | Custom base URL for OpenAI API. | [optional] if omitted the server will use the default value of "https://api.openai.com/v1" **organization** | **str, none_type** | OpenAI organization ID. | [optional] **auth** | [**OpenAiProviderAuth**](OpenAiProviderAuth.md) | | [optional] **region** | **str** | AWS region for Bedrock. | [optional] **type** | **str** | Provider type. | [optional] if omitted the server will use the default value of "OPENAI" -**endpoint** | **str** | Azure AI inference endpoint URL. | [optional] +**endpoint** | **str** | Azure OpenAI endpoint URL. | [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/ListLlmProviderModelsRequest.md b/gooddata-api-client/docs/ListLlmProviderModelsRequest.md new file mode 100644 index 000000000..8432da2c1 --- /dev/null +++ b/gooddata-api-client/docs/ListLlmProviderModelsRequest.md @@ -0,0 +1,12 @@ +# ListLlmProviderModelsRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**provider_config** | [**ListLlmProviderModelsRequestProviderConfig**](ListLlmProviderModelsRequestProviderConfig.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/TestLlmProviderDefinitionRequestProviderConfig.md b/gooddata-api-client/docs/ListLlmProviderModelsRequestProviderConfig.md similarity index 73% rename from gooddata-api-client/docs/TestLlmProviderDefinitionRequestProviderConfig.md rename to gooddata-api-client/docs/ListLlmProviderModelsRequestProviderConfig.md index d28dabb8d..7c86d8997 100644 --- a/gooddata-api-client/docs/TestLlmProviderDefinitionRequestProviderConfig.md +++ b/gooddata-api-client/docs/ListLlmProviderModelsRequestProviderConfig.md @@ -1,15 +1,15 @@ -# TestLlmProviderDefinitionRequestProviderConfig +# ListLlmProviderModelsRequestProviderConfig ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**base_url** | **str, none_type** | Custom base URL for OpenAI API. | [optional] if omitted the server will use the default value of "https://api.openai.com" +**base_url** | **str** | Custom base URL for OpenAI API. | [optional] if omitted the server will use the default value of "https://api.openai.com/v1" **organization** | **str, none_type** | OpenAI organization ID. | [optional] **auth** | [**OpenAiProviderAuth**](OpenAiProviderAuth.md) | | [optional] **region** | **str** | AWS region for Bedrock. | [optional] **type** | **str** | Provider type. | [optional] if omitted the server will use the default value of "OPENAI" -**endpoint** | **str** | Azure AI inference endpoint URL. | [optional] +**endpoint** | **str** | Azure OpenAI endpoint URL. | [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/ListLlmProviderModelsResponse.md b/gooddata-api-client/docs/ListLlmProviderModelsResponse.md new file mode 100644 index 000000000..b3b81a65b --- /dev/null +++ b/gooddata-api-client/docs/ListLlmProviderModelsResponse.md @@ -0,0 +1,14 @@ +# ListLlmProviderModelsResponse + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**message** | **str** | Message about the listing result. | +**models** | [**[LlmModel]**](LlmModel.md) | Available models on the provider. | +**success** | **bool** | Whether the model listing succeeded. | +**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/LlmProviderConfig.md b/gooddata-api-client/docs/LlmProviderConfig.md index 9ce5198f8..c30bbc77a 100644 --- a/gooddata-api-client/docs/LlmProviderConfig.md +++ b/gooddata-api-client/docs/LlmProviderConfig.md @@ -1,16 +1,16 @@ # LlmProviderConfig -Provider configuration to test. +Provider configuration overrides. ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**base_url** | **str, none_type** | Custom base URL for OpenAI API. | [optional] if omitted the server will use the default value of "https://api.openai.com" +**base_url** | **str** | Custom base URL for OpenAI API. | [optional] if omitted the server will use the default value of "https://api.openai.com/v1" **organization** | **str, none_type** | OpenAI organization ID. | [optional] **auth** | [**OpenAiProviderAuth**](OpenAiProviderAuth.md) | | [optional] **region** | **str** | AWS region for Bedrock. | [optional] **type** | **str** | Provider type. | [optional] if omitted the server will use the default value of "OPENAI" -**endpoint** | **str** | Azure AI inference endpoint URL. | [optional] +**endpoint** | **str** | Azure OpenAI endpoint URL. | [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/OpenAIProviderConfig.md b/gooddata-api-client/docs/OpenAIProviderConfig.md index aa6fa09ae..3afcb5513 100644 --- a/gooddata-api-client/docs/OpenAIProviderConfig.md +++ b/gooddata-api-client/docs/OpenAIProviderConfig.md @@ -7,7 +7,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **auth** | [**OpenAiProviderAuth**](OpenAiProviderAuth.md) | | **type** | **str** | Provider type. | defaults to "OPENAI" -**base_url** | **str, none_type** | Custom base URL for OpenAI API. | [optional] if omitted the server will use the default value of "https://api.openai.com" +**base_url** | **str** | Custom base URL for OpenAI API. | [optional] if omitted the server will use the default value of "https://api.openai.com/v1" **organization** | **str, none_type** | OpenAI organization ID. | [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/SmartFunctionsApi.md b/gooddata-api-client/docs/SmartFunctionsApi.md index ad6b146b9..37cfb3f84 100644 --- a/gooddata-api-client/docs/SmartFunctionsApi.md +++ b/gooddata-api-client/docs/SmartFunctionsApi.md @@ -20,11 +20,14 @@ Method | HTTP request | Description [**generate_title**](SmartFunctionsApi.md#generate_title) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/analyticsCatalog/generateTitle | Generate Title for Analytics Object [**get_quality_issues**](SmartFunctionsApi.md#get_quality_issues) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/issues | Get Quality Issues [**get_quality_issues_calculation_status**](SmartFunctionsApi.md#get_quality_issues_calculation_status) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/issues/status/{processId} | Get Quality Issues Calculation Status +[**list_llm_provider_models**](SmartFunctionsApi.md#list_llm_provider_models) | **POST** /api/v1/actions/ai/llmProvider/listModels | List LLM Provider Models +[**list_llm_provider_models_by_id**](SmartFunctionsApi.md#list_llm_provider_models_by_id) | **POST** /api/v1/actions/ai/llmProvider/{llmProviderId}/listModels | List LLM Provider Models By Id [**memory_created_by_users**](SmartFunctionsApi.md#memory_created_by_users) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/memory/createdBy | Get AI Memory CreatedBy Users [**resolve_llm_endpoints**](SmartFunctionsApi.md#resolve_llm_endpoints) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/resolveLlmEndpoints | Get Active LLM Endpoints for this workspace [**tags**](SmartFunctionsApi.md#tags) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/analyticsCatalog/tags | Get Analytics Catalog Tags [**test_llm_provider**](SmartFunctionsApi.md#test_llm_provider) | **POST** /api/v1/actions/ai/llmProvider/test | Test LLM Provider [**test_llm_provider_by_id**](SmartFunctionsApi.md#test_llm_provider_by_id) | **POST** /api/v1/actions/ai/llmProvider/{llmProviderId}/test | Test LLM Provider By Id +[**trending_objects**](SmartFunctionsApi.md#trending_objects) | **GET** /api/v1/actions/workspaces/{workspaceId}/ai/analyticsCatalog/trendingObjects | Get Trending Analytics Catalog Objects [**trigger_quality_issues_calculation**](SmartFunctionsApi.md#trigger_quality_issues_calculation) | **POST** /api/v1/actions/workspaces/{workspaceId}/ai/issues/triggerCheck | Trigger Quality Issues Calculation [**validate_llm_endpoint**](SmartFunctionsApi.md#validate_llm_endpoint) | **POST** /api/v1/actions/ai/llmEndpoint/test | Validate LLM Endpoint [**validate_llm_endpoint_by_id**](SmartFunctionsApi.md#validate_llm_endpoint_by_id) | **POST** /api/v1/actions/ai/llmEndpoint/{llmEndpointId}/test | Validate LLM Endpoint By Id @@ -1310,6 +1313,143 @@ No authorization required - **Accept**: application/json +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_llm_provider_models** +> ListLlmProviderModelsResponse list_llm_provider_models(list_llm_provider_models_request) + +List LLM Provider Models + +Lists models available on an LLM provider with a full definition. For Azure AI Foundry providers, the model family will be set to UNKNOWN because the endpoint does not expose the family. + +### Example + + +```python +import time +import gooddata_api_client +from gooddata_api_client.api import smart_functions_api +from gooddata_api_client.model.list_llm_provider_models_request import ListLlmProviderModelsRequest +from gooddata_api_client.model.list_llm_provider_models_response import ListLlmProviderModelsResponse +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) + list_llm_provider_models_request = ListLlmProviderModelsRequest( + provider_config=ListLlmProviderModelsRequestProviderConfig(None), + ) # ListLlmProviderModelsRequest | + + # example passing only required values which don't have defaults set + try: + # List LLM Provider Models + api_response = api_instance.list_llm_provider_models(list_llm_provider_models_request) + pprint(api_response) + except gooddata_api_client.ApiException as e: + print("Exception when calling SmartFunctionsApi->list_llm_provider_models: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **list_llm_provider_models_request** | [**ListLlmProviderModelsRequest**](ListLlmProviderModelsRequest.md)| | + +### Return type + +[**ListLlmProviderModelsResponse**](ListLlmProviderModelsResponse.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_llm_provider_models_by_id** +> ListLlmProviderModelsResponse list_llm_provider_models_by_id(llm_provider_id) + +List LLM Provider Models By Id + +Lists models available on an existing LLM provider by its ID. For Azure AI Foundry providers, the model family will be set to UNKNOWN because the endpoint does not expose the family. + +### Example + + +```python +import time +import gooddata_api_client +from gooddata_api_client.api import smart_functions_api +from gooddata_api_client.model.list_llm_provider_models_response import ListLlmProviderModelsResponse +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) + llm_provider_id = "llmProviderId_example" # str | + + # example passing only required values which don't have defaults set + try: + # List LLM Provider Models By Id + api_response = api_instance.list_llm_provider_models_by_id(llm_provider_id) + pprint(api_response) + except gooddata_api_client.ApiException as e: + print("Exception when calling SmartFunctionsApi->list_llm_provider_models_by_id: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **llm_provider_id** | **str**| | + +### Return type + +[**ListLlmProviderModelsResponse**](ListLlmProviderModelsResponse.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + + ### HTTP response details | Status code | Description | Response headers | @@ -1554,7 +1694,7 @@ with gooddata_api_client.ApiClient() as api_client: id="id_example", ), ], - provider_config=TestLlmProviderDefinitionRequestProviderConfig(None), + provider_config=ListLlmProviderModelsRequestProviderConfig(None), ) # TestLlmProviderDefinitionRequest | # example passing only required values which don't have defaults set @@ -1610,6 +1750,7 @@ import time import gooddata_api_client from gooddata_api_client.api import smart_functions_api from gooddata_api_client.model.test_llm_provider_response import TestLlmProviderResponse +from gooddata_api_client.model.test_llm_provider_by_id_request import TestLlmProviderByIdRequest 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. @@ -1623,6 +1764,15 @@ with gooddata_api_client.ApiClient() as api_client: # Create an instance of the API class api_instance = smart_functions_api.SmartFunctionsApi(api_client) llm_provider_id = "llmProviderId_example" # str | + test_llm_provider_by_id_request = TestLlmProviderByIdRequest( + models=[ + LlmModel( + family="OPENAI", + id="id_example", + ), + ], + provider_config=ListLlmProviderModelsRequestProviderConfig(None), + ) # TestLlmProviderByIdRequest | (optional) # example passing only required values which don't have defaults set try: @@ -1631,6 +1781,15 @@ with gooddata_api_client.ApiClient() as api_client: pprint(api_response) except gooddata_api_client.ApiException as e: print("Exception when calling SmartFunctionsApi->test_llm_provider_by_id: %s\n" % e) + + # example passing only required values which don't have defaults set + # and optional values + try: + # Test LLM Provider By Id + api_response = api_instance.test_llm_provider_by_id(llm_provider_id, test_llm_provider_by_id_request=test_llm_provider_by_id_request) + pprint(api_response) + except gooddata_api_client.ApiException as e: + print("Exception when calling SmartFunctionsApi->test_llm_provider_by_id: %s\n" % e) ``` @@ -1639,6 +1798,7 @@ with gooddata_api_client.ApiClient() as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **llm_provider_id** | **str**| | + **test_llm_provider_by_id_request** | [**TestLlmProviderByIdRequest**](TestLlmProviderByIdRequest.md)| | [optional] ### Return type @@ -1648,6 +1808,73 @@ Name | Type | Description | Notes No authorization required +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | OK | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **trending_objects** +> TrendingObjectsResult trending_objects(workspace_id) + +Get Trending Analytics Catalog Objects + +Returns a list of trending objects for this workspace + +### Example + + +```python +import time +import gooddata_api_client +from gooddata_api_client.api import smart_functions_api +from gooddata_api_client.model.trending_objects_result import TrendingObjectsResult +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 Trending Analytics Catalog Objects + api_response = api_instance.trending_objects(workspace_id) + pprint(api_response) + except gooddata_api_client.ApiException as e: + print("Exception when calling SmartFunctionsApi->trending_objects: %s\n" % e) +``` + + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **workspace_id** | **str**| Workspace identifier | + +### Return type + +[**TrendingObjectsResult**](TrendingObjectsResult.md) + +### Authorization + +No authorization required + ### HTTP request headers - **Content-Type**: Not defined diff --git a/gooddata-api-client/docs/TestLlmProviderByIdRequest.md b/gooddata-api-client/docs/TestLlmProviderByIdRequest.md new file mode 100644 index 000000000..a4b9e4929 --- /dev/null +++ b/gooddata-api-client/docs/TestLlmProviderByIdRequest.md @@ -0,0 +1,13 @@ +# TestLlmProviderByIdRequest + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**models** | [**[LlmModel]**](LlmModel.md) | Models overrides. | [optional] +**provider_config** | [**ListLlmProviderModelsRequestProviderConfig**](ListLlmProviderModelsRequestProviderConfig.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/TestLlmProviderDefinitionRequest.md b/gooddata-api-client/docs/TestLlmProviderDefinitionRequest.md index 3045f7af8..809a7d1df 100644 --- a/gooddata-api-client/docs/TestLlmProviderDefinitionRequest.md +++ b/gooddata-api-client/docs/TestLlmProviderDefinitionRequest.md @@ -4,7 +4,7 @@ ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**provider_config** | [**TestLlmProviderDefinitionRequestProviderConfig**](TestLlmProviderDefinitionRequestProviderConfig.md) | | +**provider_config** | [**ListLlmProviderModelsRequestProviderConfig**](ListLlmProviderModelsRequestProviderConfig.md) | | **models** | [**[LlmModel]**](LlmModel.md) | Models to test. | [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/TrendingObjectItem.md b/gooddata-api-client/docs/TrendingObjectItem.md new file mode 100644 index 000000000..ff577d66f --- /dev/null +++ b/gooddata-api-client/docs/TrendingObjectItem.md @@ -0,0 +1,30 @@ +# TrendingObjectItem + +Trending analytics catalog objects + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **str** | Object ID. | +**tags** | **[str]** | | +**title** | **str** | Object title. | +**type** | **str** | Object type, e.g. dashboard, visualization, metric. | +**usage_count** | **int** | Number of times this object has been used/referenced. | +**workspace_id** | **str** | Workspace ID the object belongs to. | +**created_at** | **datetime** | Timestamp when object was created. | [optional] +**created_by** | **str** | ID of the user who created the object. | [optional] +**dataset_id** | **str** | ID of the associated dataset, if applicable. | [optional] +**dataset_title** | **str** | Title of the associated dataset, if applicable. | [optional] +**dataset_type** | **str** | Type of the associated dataset, if applicable. | [optional] +**description** | **str** | Object description. | [optional] +**is_hidden** | **bool** | If true, this object is hidden from AI search results by default. | [optional] +**is_hidden_from_kda** | **bool** | If true, this object is hidden from KDA. | [optional] +**metric_type** | **str** | Type of the metric (e.g. MAQL), if applicable. | [optional] +**modified_at** | **datetime** | Timestamp when object was last modified. | [optional] +**modified_by** | **str** | ID of the user who last modified the object. | [optional] +**visualization_url** | **str** | URL of the visualization, if applicable. | [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/TrendingObjectsResult.md b/gooddata-api-client/docs/TrendingObjectsResult.md new file mode 100644 index 000000000..8c33e779f --- /dev/null +++ b/gooddata-api-client/docs/TrendingObjectsResult.md @@ -0,0 +1,12 @@ +# TrendingObjectsResult + + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**objects** | [**[TrendingObjectItem]**](TrendingObjectItem.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/gooddata_api_client/api/actions_api.py b/gooddata-api-client/gooddata_api_client/api/actions_api.py index a578be876..b88c3d4da 100644 --- a/gooddata-api-client/gooddata_api_client/api/actions_api.py +++ b/gooddata-api-client/gooddata_api_client/api/actions_api.py @@ -80,6 +80,8 @@ from gooddata_api_client.model.key_drivers_result import KeyDriversResult from gooddata_api_client.model.knowledge_document_metadata_dto import KnowledgeDocumentMetadataDto from gooddata_api_client.model.list_knowledge_documents_response_dto import ListKnowledgeDocumentsResponseDto +from gooddata_api_client.model.list_llm_provider_models_request import ListLlmProviderModelsRequest +from gooddata_api_client.model.list_llm_provider_models_response import ListLlmProviderModelsResponse from gooddata_api_client.model.locale_request import LocaleRequest from gooddata_api_client.model.manage_dashboard_permissions_request_inner import ManageDashboardPermissionsRequestInner from gooddata_api_client.model.memory_item_created_by_users import MemoryItemCreatedByUsers @@ -112,10 +114,12 @@ from gooddata_api_client.model.tabular_export_request import TabularExportRequest from gooddata_api_client.model.test_definition_request import TestDefinitionRequest from gooddata_api_client.model.test_destination_request import TestDestinationRequest +from gooddata_api_client.model.test_llm_provider_by_id_request import TestLlmProviderByIdRequest from gooddata_api_client.model.test_llm_provider_definition_request import TestLlmProviderDefinitionRequest from gooddata_api_client.model.test_llm_provider_response import TestLlmProviderResponse from gooddata_api_client.model.test_request import TestRequest from gooddata_api_client.model.test_response import TestResponse +from gooddata_api_client.model.trending_objects_result import TrendingObjectsResult from gooddata_api_client.model.trigger_automation_request import TriggerAutomationRequest from gooddata_api_client.model.trigger_quality_issues_calculation_response import TriggerQualityIssuesCalculationResponse from gooddata_api_client.model.upsert_knowledge_document_request_dto import UpsertKnowledgeDocumentRequestDto @@ -3882,6 +3886,105 @@ def __init__(self, api_client=None): }, api_client=api_client ) + self.list_llm_provider_models_endpoint = _Endpoint( + settings={ + 'response_type': (ListLlmProviderModelsResponse,), + 'auth': [], + 'endpoint_path': '/api/v1/actions/ai/llmProvider/listModels', + 'operation_id': 'list_llm_provider_models', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'list_llm_provider_models_request', + ], + 'required': [ + 'list_llm_provider_models_request', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'list_llm_provider_models_request': + (ListLlmProviderModelsRequest,), + }, + 'attribute_map': { + }, + 'location_map': { + 'list_llm_provider_models_request': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client + ) + self.list_llm_provider_models_by_id_endpoint = _Endpoint( + settings={ + 'response_type': (ListLlmProviderModelsResponse,), + 'auth': [], + 'endpoint_path': '/api/v1/actions/ai/llmProvider/{llmProviderId}/listModels', + 'operation_id': 'list_llm_provider_models_by_id', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'llm_provider_id', + ], + 'required': [ + 'llm_provider_id', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'llm_provider_id': + (str,), + }, + 'attribute_map': { + 'llm_provider_id': 'llmProviderId', + }, + 'location_map': { + 'llm_provider_id': 'path', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client + ) self.list_workspace_user_groups_endpoint = _Endpoint( settings={ 'response_type': (WorkspaceUserGroups,), @@ -6057,6 +6160,7 @@ def __init__(self, api_client=None): params_map={ 'all': [ 'llm_provider_id', + 'test_llm_provider_by_id_request', ], 'required': [ 'llm_provider_id', @@ -6076,12 +6180,15 @@ def __init__(self, api_client=None): 'openapi_types': { 'llm_provider_id': (str,), + 'test_llm_provider_by_id_request': + (TestLlmProviderByIdRequest,), }, 'attribute_map': { 'llm_provider_id': 'llmProviderId', }, 'location_map': { 'llm_provider_id': 'path', + 'test_llm_provider_by_id_request': 'body', }, 'collection_format_map': { } @@ -6090,7 +6197,9 @@ def __init__(self, api_client=None): 'accept': [ 'application/json' ], - 'content_type': [], + 'content_type': [ + 'application/json' + ] }, api_client=api_client ) @@ -6144,6 +6253,62 @@ def __init__(self, api_client=None): }, api_client=api_client ) + self.trending_objects_endpoint = _Endpoint( + settings={ + 'response_type': (TrendingObjectsResult,), + 'auth': [], + 'endpoint_path': '/api/v1/actions/workspaces/{workspaceId}/ai/analyticsCatalog/trendingObjects', + 'operation_id': 'trending_objects', + '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.trigger_automation_endpoint = _Endpoint( settings={ 'response_type': None, @@ -12221,6 +12386,172 @@ def list_documents( workspace_id return self.list_documents_endpoint.call_with_http_info(**kwargs) + def list_llm_provider_models( + self, + list_llm_provider_models_request, + **kwargs + ): + """List LLM Provider Models # noqa: E501 + + Lists models available on an LLM provider with a full definition. For Azure AI Foundry providers, the model family will be set to UNKNOWN because the endpoint does not expose the family. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_llm_provider_models(list_llm_provider_models_request, async_req=True) + >>> result = thread.get() + + Args: + list_llm_provider_models_request (ListLlmProviderModelsRequest): + + 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: + ListLlmProviderModelsResponse + 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['list_llm_provider_models_request'] = \ + list_llm_provider_models_request + return self.list_llm_provider_models_endpoint.call_with_http_info(**kwargs) + + def list_llm_provider_models_by_id( + self, + llm_provider_id, + **kwargs + ): + """List LLM Provider Models By Id # noqa: E501 + + Lists models available on an existing LLM provider by its ID. For Azure AI Foundry providers, the model family will be set to UNKNOWN because the endpoint does not expose the family. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_llm_provider_models_by_id(llm_provider_id, async_req=True) + >>> result = thread.get() + + Args: + llm_provider_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: + ListLlmProviderModelsResponse + 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['llm_provider_id'] = \ + llm_provider_id + return self.list_llm_provider_models_by_id_endpoint.call_with_http_info(**kwargs) + def list_workspace_user_groups( self, workspace_id, @@ -15536,6 +15867,7 @@ def test_llm_provider_by_id( llm_provider_id (str): Keyword Args: + test_llm_provider_by_id_request (TestLlmProviderByIdRequest): [optional] _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 @@ -15684,6 +16016,89 @@ def test_notification_channel( test_destination_request return self.test_notification_channel_endpoint.call_with_http_info(**kwargs) + def trending_objects( + self, + workspace_id, + **kwargs + ): + """Get Trending Analytics Catalog Objects # noqa: E501 + + Returns a list of trending objects for this 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.trending_objects(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: + TrendingObjectsResult + 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.trending_objects_endpoint.call_with_http_info(**kwargs) + def trigger_automation( self, workspace_id, diff --git a/gooddata-api-client/gooddata_api_client/api/ai_lake_api.py b/gooddata-api-client/gooddata_api_client/api/ai_lake_api.py index ec99b3761..43364536d 100644 --- a/gooddata-api-client/gooddata_api_client/api/ai_lake_api.py +++ b/gooddata-api-client/gooddata_api_client/api/ai_lake_api.py @@ -24,6 +24,7 @@ ) from gooddata_api_client.model.database_instance import DatabaseInstance from gooddata_api_client.model.get_ai_lake_operation200_response import GetAiLakeOperation200Response +from gooddata_api_client.model.get_service_status_response import GetServiceStatusResponse from gooddata_api_client.model.list_database_instances_response import ListDatabaseInstancesResponse from gooddata_api_client.model.list_services_response import ListServicesResponse from gooddata_api_client.model.provision_database_instance_request import ProvisionDatabaseInstanceRequest @@ -193,6 +194,55 @@ def __init__(self, api_client=None): }, api_client=api_client ) + self.get_ai_lake_service_status_endpoint = _Endpoint( + settings={ + 'response_type': (GetServiceStatusResponse,), + 'auth': [], + 'endpoint_path': '/api/v1/ailake/services/{serviceId}/status', + 'operation_id': 'get_ai_lake_service_status', + 'http_method': 'GET', + 'servers': None, + }, + params_map={ + 'all': [ + 'service_id', + ], + 'required': [ + 'service_id', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'service_id': + (str,), + }, + 'attribute_map': { + 'service_id': 'serviceId', + }, + 'location_map': { + 'service_id': 'path', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client + ) self.list_ai_lake_database_instances_endpoint = _Endpoint( settings={ 'response_type': (ListDatabaseInstancesResponse,), @@ -690,6 +740,89 @@ def get_ai_lake_operation( operation_id return self.get_ai_lake_operation_endpoint.call_with_http_info(**kwargs) + def get_ai_lake_service_status( + self, + service_id, + **kwargs + ): + """(BETA) Get AI Lake service status # noqa: E501 + + (BETA) Returns the status of a service in the organization's AI Lake. The status is controller-specific (e.g., available commands, readiness). # 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_ai_lake_service_status(service_id, async_req=True) + >>> result = thread.get() + + Args: + service_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: + GetServiceStatusResponse + 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['service_id'] = \ + service_id + return self.get_ai_lake_service_status_endpoint.call_with_http_info(**kwargs) + def list_ai_lake_database_instances( self, **kwargs 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 acd5cc343..702bf3b3b 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 @@ -40,14 +40,18 @@ from gooddata_api_client.model.generate_title_request import GenerateTitleRequest from gooddata_api_client.model.generate_title_response import GenerateTitleResponse from gooddata_api_client.model.get_quality_issues_response import GetQualityIssuesResponse +from gooddata_api_client.model.list_llm_provider_models_request import ListLlmProviderModelsRequest +from gooddata_api_client.model.list_llm_provider_models_response import ListLlmProviderModelsResponse from gooddata_api_client.model.memory_item_created_by_users import MemoryItemCreatedByUsers from gooddata_api_client.model.quality_issues_calculation_status_response import QualityIssuesCalculationStatusResponse from gooddata_api_client.model.resolved_llm_endpoints import ResolvedLlmEndpoints from gooddata_api_client.model.search_request import SearchRequest from gooddata_api_client.model.search_result import SearchResult from gooddata_api_client.model.smart_function_response import SmartFunctionResponse +from gooddata_api_client.model.test_llm_provider_by_id_request import TestLlmProviderByIdRequest from gooddata_api_client.model.test_llm_provider_definition_request import TestLlmProviderDefinitionRequest from gooddata_api_client.model.test_llm_provider_response import TestLlmProviderResponse +from gooddata_api_client.model.trending_objects_result import TrendingObjectsResult from gooddata_api_client.model.trigger_quality_issues_calculation_response import TriggerQualityIssuesCalculationResponse from gooddata_api_client.model.validate_llm_endpoint_by_id_request import ValidateLLMEndpointByIdRequest from gooddata_api_client.model.validate_llm_endpoint_request import ValidateLLMEndpointRequest @@ -1111,6 +1115,105 @@ def __init__(self, api_client=None): }, api_client=api_client ) + self.list_llm_provider_models_endpoint = _Endpoint( + settings={ + 'response_type': (ListLlmProviderModelsResponse,), + 'auth': [], + 'endpoint_path': '/api/v1/actions/ai/llmProvider/listModels', + 'operation_id': 'list_llm_provider_models', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'list_llm_provider_models_request', + ], + 'required': [ + 'list_llm_provider_models_request', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'list_llm_provider_models_request': + (ListLlmProviderModelsRequest,), + }, + 'attribute_map': { + }, + 'location_map': { + 'list_llm_provider_models_request': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client + ) + self.list_llm_provider_models_by_id_endpoint = _Endpoint( + settings={ + 'response_type': (ListLlmProviderModelsResponse,), + 'auth': [], + 'endpoint_path': '/api/v1/actions/ai/llmProvider/{llmProviderId}/listModels', + 'operation_id': 'list_llm_provider_models_by_id', + 'http_method': 'POST', + 'servers': None, + }, + params_map={ + 'all': [ + 'llm_provider_id', + ], + 'required': [ + 'llm_provider_id', + ], + 'nullable': [ + ], + 'enum': [ + ], + 'validation': [ + ] + }, + root_map={ + 'validations': { + }, + 'allowed_values': { + }, + 'openapi_types': { + 'llm_provider_id': + (str,), + }, + 'attribute_map': { + 'llm_provider_id': 'llmProviderId', + }, + 'location_map': { + 'llm_provider_id': 'path', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [], + }, + api_client=api_client + ) self.memory_created_by_users_endpoint = _Endpoint( settings={ 'response_type': (MemoryItemCreatedByUsers,), @@ -1341,6 +1444,7 @@ def __init__(self, api_client=None): params_map={ 'all': [ 'llm_provider_id', + 'test_llm_provider_by_id_request', ], 'required': [ 'llm_provider_id', @@ -1360,12 +1464,73 @@ def __init__(self, api_client=None): 'openapi_types': { 'llm_provider_id': (str,), + 'test_llm_provider_by_id_request': + (TestLlmProviderByIdRequest,), }, 'attribute_map': { 'llm_provider_id': 'llmProviderId', }, 'location_map': { 'llm_provider_id': 'path', + 'test_llm_provider_by_id_request': 'body', + }, + 'collection_format_map': { + } + }, + headers_map={ + 'accept': [ + 'application/json' + ], + 'content_type': [ + 'application/json' + ] + }, + api_client=api_client + ) + self.trending_objects_endpoint = _Endpoint( + settings={ + 'response_type': (TrendingObjectsResult,), + 'auth': [], + 'endpoint_path': '/api/v1/actions/workspaces/{workspaceId}/ai/analyticsCatalog/trendingObjects', + 'operation_id': 'trending_objects', + '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': { } @@ -2941,6 +3106,172 @@ def get_quality_issues_calculation_status( process_id return self.get_quality_issues_calculation_status_endpoint.call_with_http_info(**kwargs) + def list_llm_provider_models( + self, + list_llm_provider_models_request, + **kwargs + ): + """List LLM Provider Models # noqa: E501 + + Lists models available on an LLM provider with a full definition. For Azure AI Foundry providers, the model family will be set to UNKNOWN because the endpoint does not expose the family. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_llm_provider_models(list_llm_provider_models_request, async_req=True) + >>> result = thread.get() + + Args: + list_llm_provider_models_request (ListLlmProviderModelsRequest): + + 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: + ListLlmProviderModelsResponse + 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['list_llm_provider_models_request'] = \ + list_llm_provider_models_request + return self.list_llm_provider_models_endpoint.call_with_http_info(**kwargs) + + def list_llm_provider_models_by_id( + self, + llm_provider_id, + **kwargs + ): + """List LLM Provider Models By Id # noqa: E501 + + Lists models available on an existing LLM provider by its ID. For Azure AI Foundry providers, the model family will be set to UNKNOWN because the endpoint does not expose the family. # noqa: E501 + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + + >>> thread = api.list_llm_provider_models_by_id(llm_provider_id, async_req=True) + >>> result = thread.get() + + Args: + llm_provider_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: + ListLlmProviderModelsResponse + 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['llm_provider_id'] = \ + llm_provider_id + return self.list_llm_provider_models_by_id_endpoint.call_with_http_info(**kwargs) + def memory_created_by_users( self, workspace_id, @@ -3291,6 +3622,7 @@ def test_llm_provider_by_id( llm_provider_id (str): Keyword Args: + test_llm_provider_by_id_request (TestLlmProviderByIdRequest): [optional] _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 @@ -3356,6 +3688,89 @@ def test_llm_provider_by_id( llm_provider_id return self.test_llm_provider_by_id_endpoint.call_with_http_info(**kwargs) + def trending_objects( + self, + workspace_id, + **kwargs + ): + """Get Trending Analytics Catalog Objects # noqa: E501 + + Returns a list of trending objects for this 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.trending_objects(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: + TrendingObjectsResult + 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.trending_objects_endpoint.call_with_http_info(**kwargs) + def trigger_quality_issues_calculation( self, workspace_id, diff --git a/gooddata-api-client/gooddata_api_client/model/azure_foundry_provider_config.py b/gooddata-api-client/gooddata_api_client/model/azure_foundry_provider_config.py index aef53e2ec..5b4598daf 100644 --- a/gooddata-api-client/gooddata_api_client/model/azure_foundry_provider_config.py +++ b/gooddata-api-client/gooddata_api_client/model/azure_foundry_provider_config.py @@ -122,7 +122,7 @@ def _from_openapi_data(cls, auth, endpoint, *args, **kwargs): # noqa: E501 Args: auth (AzureFoundryProviderAuth): - endpoint (str): Azure AI inference endpoint URL. + endpoint (str): Azure OpenAI endpoint URL. Keyword Args: type (str): Provider type.. defaults to "AZURE_FOUNDRY", must be one of ["AZURE_FOUNDRY", ] # noqa: E501 @@ -216,7 +216,7 @@ def __init__(self, auth, endpoint, *args, **kwargs): # noqa: E501 Args: auth (AzureFoundryProviderAuth): - endpoint (str): Azure AI inference endpoint URL. + endpoint (str): Azure OpenAI endpoint URL. Keyword Args: type (str): Provider type.. defaults to "AZURE_FOUNDRY", must be one of ["AZURE_FOUNDRY", ] # noqa: E501 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 index 9c8cd7287..5761da616 100644 --- 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 @@ -97,9 +97,9 @@ class DashboardDateFilterDateFilter(ModelNormal): 'ABSOLUTE': "absolute", }, ('empty_value_handling',): { - 'INCLUDE': "INCLUDE", - 'EXCLUDE': "EXCLUDE", - 'ONLY': "ONLY", + 'INCLUDE': "include", + 'EXCLUDE': "exclude", + 'ONLY': "only", }, } 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 68d5cc622..2f8365bb5 100644 --- a/gooddata-api-client/gooddata_api_client/model/declarative_setting.py +++ b/gooddata-api-client/gooddata_api_client/model/declarative_setting.py @@ -102,6 +102,7 @@ class DeclarativeSetting(ModelNormal): 'EXPORT_RESULT_POLLING_TIMEOUT_SECONDS': "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", 'MAX_ZOOM_LEVEL': "MAX_ZOOM_LEVEL", 'SORT_CASE_SENSITIVE': "SORT_CASE_SENSITIVE", + 'SORT_COLLATION': "SORT_COLLATION", 'METRIC_FORMAT_OVERRIDE': "METRIC_FORMAT_OVERRIDE", 'ENABLE_AI_ON_DATA': "ENABLE_AI_ON_DATA", 'API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE': "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", diff --git a/gooddata-api-client/gooddata_api_client/model/get_service_status_response.py b/gooddata-api-client/gooddata_api_client/model/get_service_status_response.py new file mode 100644 index 000000000..369c9f76a --- /dev/null +++ b/gooddata-api-client/gooddata_api_client/model/get_service_status_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 + + +def lazy_import(): + from gooddata_api_client.model.json_node import JsonNode + globals()['JsonNode'] = JsonNode + + +class GetServiceStatusResponse(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 { + 'status': (JsonNode,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'status': 'status', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, status, *args, **kwargs): # noqa: E501 + """GetServiceStatusResponse - a model defined in OpenAPI + + Args: + status (JsonNode): + + 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.status = status + 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, status, *args, **kwargs): # noqa: E501 + """GetServiceStatusResponse - a model defined in OpenAPI + + Args: + status (JsonNode): + + 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.status = status + 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_llm_provider_in_attributes_models_inner.py b/gooddata-api-client/gooddata_api_client/model/json_api_llm_provider_in_attributes_models_inner.py index 0ff9244c7..acb64eb2c 100644 --- a/gooddata-api-client/gooddata_api_client/model/json_api_llm_provider_in_attributes_models_inner.py +++ b/gooddata-api-client/gooddata_api_client/model/json_api_llm_provider_in_attributes_models_inner.py @@ -64,6 +64,7 @@ class JsonApiLlmProviderInAttributesModelsInner(ModelNormal): 'AMAZON': "AMAZON", 'GOOGLE': "GOOGLE", 'COHERE': "COHERE", + 'UNKNOWN': "UNKNOWN", }, } diff --git a/gooddata-api-client/gooddata_api_client/model/json_api_llm_provider_in_attributes_provider_config.py b/gooddata-api-client/gooddata_api_client/model/json_api_llm_provider_in_attributes_provider_config.py index 949c97b2a..4478799e9 100644 --- a/gooddata-api-client/gooddata_api_client/model/json_api_llm_provider_in_attributes_provider_config.py +++ b/gooddata-api-client/gooddata_api_client/model/json_api_llm_provider_in_attributes_provider_config.py @@ -109,7 +109,7 @@ def openapi_types(): """ lazy_import() return { - 'base_url': (str, none_type,), # noqa: E501 + 'base_url': (str,), # noqa: E501 'organization': (str, none_type,), # noqa: E501 'auth': (OpenAiProviderAuth,), # noqa: E501 'region': (str,), # noqa: E501 @@ -170,12 +170,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,) - base_url (str, none_type): Custom base URL for OpenAI API.. [optional] if omitted the server will use the default value of "https://api.openai.com" # noqa: E501 + base_url (str): Custom base URL for OpenAI API.. [optional] if omitted the server will use the default value of "https://api.openai.com/v1" # noqa: E501 organization (str, none_type): OpenAI organization ID.. [optional] # noqa: E501 auth (OpenAiProviderAuth): [optional] # noqa: E501 region (str): AWS region for Bedrock.. [optional] # noqa: E501 type (str): Provider type.. [optional] if omitted the server will use the default value of "OPENAI" # noqa: E501 - endpoint (str): Azure AI inference endpoint URL.. [optional] # noqa: E501 + endpoint (str): Azure OpenAI endpoint URL.. [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -279,12 +279,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,) - base_url (str, none_type): Custom base URL for OpenAI API.. [optional] if omitted the server will use the default value of "https://api.openai.com" # noqa: E501 + base_url (str): Custom base URL for OpenAI API.. [optional] if omitted the server will use the default value of "https://api.openai.com/v1" # noqa: E501 organization (str, none_type): OpenAI organization ID.. [optional] # noqa: E501 auth (OpenAiProviderAuth): [optional] # noqa: E501 region (str): AWS region for Bedrock.. [optional] # noqa: E501 type (str): Provider type.. [optional] if omitted the server will use the default value of "OPENAI" # noqa: E501 - endpoint (str): Azure AI inference endpoint URL.. [optional] # noqa: E501 + endpoint (str): Azure OpenAI endpoint URL.. [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 d431d8652..558000880 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 @@ -98,6 +98,7 @@ class JsonApiOrganizationSettingInAttributes(ModelNormal): 'EXPORT_RESULT_POLLING_TIMEOUT_SECONDS': "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", 'MAX_ZOOM_LEVEL': "MAX_ZOOM_LEVEL", 'SORT_CASE_SENSITIVE': "SORT_CASE_SENSITIVE", + 'SORT_COLLATION': "SORT_COLLATION", 'METRIC_FORMAT_OVERRIDE': "METRIC_FORMAT_OVERRIDE", 'ENABLE_AI_ON_DATA': "ENABLE_AI_ON_DATA", 'API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE': "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", diff --git a/gooddata-api-client/gooddata_api_client/model/list_llm_provider_models_request.py b/gooddata-api-client/gooddata_api_client/model/list_llm_provider_models_request.py new file mode 100644 index 000000000..c5e8668a1 --- /dev/null +++ b/gooddata-api-client/gooddata_api_client/model/list_llm_provider_models_request.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.list_llm_provider_models_request_provider_config import ListLlmProviderModelsRequestProviderConfig + globals()['ListLlmProviderModelsRequestProviderConfig'] = ListLlmProviderModelsRequestProviderConfig + + +class ListLlmProviderModelsRequest(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 { + 'provider_config': (ListLlmProviderModelsRequestProviderConfig,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'provider_config': 'providerConfig', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, provider_config, *args, **kwargs): # noqa: E501 + """ListLlmProviderModelsRequest - a model defined in OpenAPI + + Args: + provider_config (ListLlmProviderModelsRequestProviderConfig): + + 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.provider_config = provider_config + 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, provider_config, *args, **kwargs): # noqa: E501 + """ListLlmProviderModelsRequest - a model defined in OpenAPI + + Args: + provider_config (ListLlmProviderModelsRequestProviderConfig): + + 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.provider_config = provider_config + 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/test_llm_provider_definition_request_provider_config.py b/gooddata-api-client/gooddata_api_client/model/list_llm_provider_models_request_provider_config.py similarity index 94% rename from gooddata-api-client/gooddata_api_client/model/test_llm_provider_definition_request_provider_config.py rename to gooddata-api-client/gooddata_api_client/model/list_llm_provider_models_request_provider_config.py index e93080b2c..21d26004d 100644 --- a/gooddata-api-client/gooddata_api_client/model/test_llm_provider_definition_request_provider_config.py +++ b/gooddata-api-client/gooddata_api_client/model/list_llm_provider_models_request_provider_config.py @@ -41,7 +41,7 @@ def lazy_import(): globals()['OpenAiProviderAuth'] = OpenAiProviderAuth -class TestLlmProviderDefinitionRequestProviderConfig(ModelComposed): +class ListLlmProviderModelsRequestProviderConfig(ModelComposed): """NOTE: This class is auto generated by OpenAPI Generator. Ref: https://openapi-generator.tech @@ -109,7 +109,7 @@ def openapi_types(): """ lazy_import() return { - 'base_url': (str, none_type,), # noqa: E501 + 'base_url': (str,), # noqa: E501 'organization': (str, none_type,), # noqa: E501 'auth': (OpenAiProviderAuth,), # noqa: E501 'region': (str,), # noqa: E501 @@ -137,7 +137,7 @@ def discriminator(): @classmethod @convert_js_args_to_python_args def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 - """TestLlmProviderDefinitionRequestProviderConfig - a model defined in OpenAPI + """ListLlmProviderModelsRequestProviderConfig - a model defined in OpenAPI Keyword Args: _check_type (bool): if True, values for parameters in openapi_types @@ -170,12 +170,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,) - base_url (str, none_type): Custom base URL for OpenAI API.. [optional] if omitted the server will use the default value of "https://api.openai.com" # noqa: E501 + base_url (str): Custom base URL for OpenAI API.. [optional] if omitted the server will use the default value of "https://api.openai.com/v1" # noqa: E501 organization (str, none_type): OpenAI organization ID.. [optional] # noqa: E501 auth (OpenAiProviderAuth): [optional] # noqa: E501 region (str): AWS region for Bedrock.. [optional] # noqa: E501 type (str): Provider type.. [optional] if omitted the server will use the default value of "OPENAI" # noqa: E501 - endpoint (str): Azure AI inference endpoint URL.. [optional] # noqa: E501 + endpoint (str): Azure OpenAI endpoint URL.. [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -246,7 +246,7 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 @convert_js_args_to_python_args def __init__(self, *args, **kwargs): # noqa: E501 - """TestLlmProviderDefinitionRequestProviderConfig - a model defined in OpenAPI + """ListLlmProviderModelsRequestProviderConfig - a model defined in OpenAPI Keyword Args: _check_type (bool): if True, values for parameters in openapi_types @@ -279,12 +279,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,) - base_url (str, none_type): Custom base URL for OpenAI API.. [optional] if omitted the server will use the default value of "https://api.openai.com" # noqa: E501 + base_url (str): Custom base URL for OpenAI API.. [optional] if omitted the server will use the default value of "https://api.openai.com/v1" # noqa: E501 organization (str, none_type): OpenAI organization ID.. [optional] # noqa: E501 auth (OpenAiProviderAuth): [optional] # noqa: E501 region (str): AWS region for Bedrock.. [optional] # noqa: E501 type (str): Provider type.. [optional] if omitted the server will use the default value of "OPENAI" # noqa: E501 - endpoint (str): Azure AI inference endpoint URL.. [optional] # noqa: E501 + endpoint (str): Azure OpenAI endpoint URL.. [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) diff --git a/gooddata-api-client/gooddata_api_client/model/list_llm_provider_models_response.py b/gooddata-api-client/gooddata_api_client/model/list_llm_provider_models_response.py new file mode 100644 index 000000000..1a96206e6 --- /dev/null +++ b/gooddata-api-client/gooddata_api_client/model/list_llm_provider_models_response.py @@ -0,0 +1,288 @@ +""" + 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.llm_model import LlmModel + globals()['LlmModel'] = LlmModel + + +class ListLlmProviderModelsResponse(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 { + 'message': (str,), # noqa: E501 + 'models': ([LlmModel],), # noqa: E501 + 'success': (bool,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'message': 'message', # noqa: E501 + 'models': 'models', # noqa: E501 + 'success': 'success', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, message, models, success, *args, **kwargs): # noqa: E501 + """ListLlmProviderModelsResponse - a model defined in OpenAPI + + Args: + message (str): Message about the listing result. + models ([LlmModel]): Available models on the provider. + success (bool): Whether the model listing succeeded. + + 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.message = message + self.models = models + self.success = success + 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, message, models, success, *args, **kwargs): # noqa: E501 + """ListLlmProviderModelsResponse - a model defined in OpenAPI + + Args: + message (str): Message about the listing result. + models ([LlmModel]): Available models on the provider. + success (bool): Whether the model listing succeeded. + + 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.message = message + self.models = models + self.success = success + 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/llm_model.py b/gooddata-api-client/gooddata_api_client/model/llm_model.py index 575dd8d68..c5e9b848f 100644 --- a/gooddata-api-client/gooddata_api_client/model/llm_model.py +++ b/gooddata-api-client/gooddata_api_client/model/llm_model.py @@ -64,6 +64,7 @@ class LlmModel(ModelNormal): 'AMAZON': "AMAZON", 'GOOGLE': "GOOGLE", 'COHERE': "COHERE", + 'UNKNOWN': "UNKNOWN", }, } diff --git a/gooddata-api-client/gooddata_api_client/model/llm_provider_config.py b/gooddata-api-client/gooddata_api_client/model/llm_provider_config.py index e18d277f1..2ed845ed4 100644 --- a/gooddata-api-client/gooddata_api_client/model/llm_provider_config.py +++ b/gooddata-api-client/gooddata_api_client/model/llm_provider_config.py @@ -109,7 +109,7 @@ def openapi_types(): """ lazy_import() return { - 'base_url': (str, none_type,), # noqa: E501 + 'base_url': (str,), # noqa: E501 'organization': (str, none_type,), # noqa: E501 'auth': (OpenAiProviderAuth,), # noqa: E501 'region': (str,), # noqa: E501 @@ -170,12 +170,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,) - base_url (str, none_type): Custom base URL for OpenAI API.. [optional] if omitted the server will use the default value of "https://api.openai.com" # noqa: E501 + base_url (str): Custom base URL for OpenAI API.. [optional] if omitted the server will use the default value of "https://api.openai.com/v1" # noqa: E501 organization (str, none_type): OpenAI organization ID.. [optional] # noqa: E501 auth (OpenAiProviderAuth): [optional] # noqa: E501 region (str): AWS region for Bedrock.. [optional] # noqa: E501 type (str): Provider type.. [optional] if omitted the server will use the default value of "OPENAI" # noqa: E501 - endpoint (str): Azure AI inference endpoint URL.. [optional] # noqa: E501 + endpoint (str): Azure OpenAI endpoint URL.. [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) @@ -279,12 +279,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,) - base_url (str, none_type): Custom base URL for OpenAI API.. [optional] if omitted the server will use the default value of "https://api.openai.com" # noqa: E501 + base_url (str): Custom base URL for OpenAI API.. [optional] if omitted the server will use the default value of "https://api.openai.com/v1" # noqa: E501 organization (str, none_type): OpenAI organization ID.. [optional] # noqa: E501 auth (OpenAiProviderAuth): [optional] # noqa: E501 region (str): AWS region for Bedrock.. [optional] # noqa: E501 type (str): Provider type.. [optional] if omitted the server will use the default value of "OPENAI" # noqa: E501 - endpoint (str): Azure AI inference endpoint URL.. [optional] # noqa: E501 + endpoint (str): Azure OpenAI endpoint URL.. [optional] # noqa: E501 """ _check_type = kwargs.pop('_check_type', True) diff --git a/gooddata-api-client/gooddata_api_client/model/open_ai_provider_config.py b/gooddata-api-client/gooddata_api_client/model/open_ai_provider_config.py index a1532e10d..34992608a 100644 --- a/gooddata-api-client/gooddata_api_client/model/open_ai_provider_config.py +++ b/gooddata-api-client/gooddata_api_client/model/open_ai_provider_config.py @@ -99,7 +99,7 @@ def openapi_types(): return { 'auth': (OpenAiProviderAuth,), # noqa: E501 'type': (str,), # noqa: E501 - 'base_url': (str, none_type,), # noqa: E501 + 'base_url': (str,), # noqa: E501 'organization': (str, none_type,), # noqa: E501 } @@ -160,7 +160,7 @@ def _from_openapi_data(cls, auth, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - base_url (str, none_type): Custom base URL for OpenAI API.. [optional] if omitted the server will use the default value of "https://api.openai.com" # noqa: E501 + base_url (str): Custom base URL for OpenAI API.. [optional] if omitted the server will use the default value of "https://api.openai.com/v1" # noqa: E501 organization (str, none_type): OpenAI organization ID.. [optional] # noqa: E501 """ @@ -254,7 +254,7 @@ def __init__(self, auth, *args, **kwargs): # noqa: E501 Animal class but this time we won't travel through its discriminator because we passed in _visited_composed_classes = (Animal,) - base_url (str, none_type): Custom base URL for OpenAI API.. [optional] if omitted the server will use the default value of "https://api.openai.com" # noqa: E501 + base_url (str): Custom base URL for OpenAI API.. [optional] if omitted the server will use the default value of "https://api.openai.com/v1" # noqa: E501 organization (str, none_type): OpenAI organization ID.. [optional] # noqa: E501 """ 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 a5b88bc0a..16a2903c0 100644 --- a/gooddata-api-client/gooddata_api_client/model/resolved_setting.py +++ b/gooddata-api-client/gooddata_api_client/model/resolved_setting.py @@ -102,6 +102,7 @@ class ResolvedSetting(ModelNormal): 'EXPORT_RESULT_POLLING_TIMEOUT_SECONDS': "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", 'MAX_ZOOM_LEVEL': "MAX_ZOOM_LEVEL", 'SORT_CASE_SENSITIVE': "SORT_CASE_SENSITIVE", + 'SORT_COLLATION': "SORT_COLLATION", 'METRIC_FORMAT_OVERRIDE': "METRIC_FORMAT_OVERRIDE", 'ENABLE_AI_ON_DATA': "ENABLE_AI_ON_DATA", 'API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE': "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", diff --git a/gooddata-api-client/gooddata_api_client/model/test_llm_provider_by_id_request.py b/gooddata-api-client/gooddata_api_client/model/test_llm_provider_by_id_request.py new file mode 100644 index 000000000..1cd1a741f --- /dev/null +++ b/gooddata-api-client/gooddata_api_client/model/test_llm_provider_by_id_request.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.list_llm_provider_models_request_provider_config import ListLlmProviderModelsRequestProviderConfig + from gooddata_api_client.model.llm_model import LlmModel + globals()['ListLlmProviderModelsRequestProviderConfig'] = ListLlmProviderModelsRequestProviderConfig + globals()['LlmModel'] = LlmModel + + +class TestLlmProviderByIdRequest(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 { + 'models': ([LlmModel],), # noqa: E501 + 'provider_config': (ListLlmProviderModelsRequestProviderConfig,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'models': 'models', # noqa: E501 + 'provider_config': 'providerConfig', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 + """TestLlmProviderByIdRequest - 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,) + models ([LlmModel]): Models overrides.. [optional] # noqa: E501 + provider_config (ListLlmProviderModelsRequestProviderConfig): [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 + """TestLlmProviderByIdRequest - 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,) + models ([LlmModel]): Models overrides.. [optional] # noqa: E501 + provider_config (ListLlmProviderModelsRequestProviderConfig): [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/test_llm_provider_definition_request.py b/gooddata-api-client/gooddata_api_client/model/test_llm_provider_definition_request.py index d1ebb7f5f..72ffbb70c 100644 --- a/gooddata-api-client/gooddata_api_client/model/test_llm_provider_definition_request.py +++ b/gooddata-api-client/gooddata_api_client/model/test_llm_provider_definition_request.py @@ -31,10 +31,10 @@ def lazy_import(): + from gooddata_api_client.model.list_llm_provider_models_request_provider_config import ListLlmProviderModelsRequestProviderConfig from gooddata_api_client.model.llm_model import LlmModel - from gooddata_api_client.model.test_llm_provider_definition_request_provider_config import TestLlmProviderDefinitionRequestProviderConfig + globals()['ListLlmProviderModelsRequestProviderConfig'] = ListLlmProviderModelsRequestProviderConfig globals()['LlmModel'] = LlmModel - globals()['TestLlmProviderDefinitionRequestProviderConfig'] = TestLlmProviderDefinitionRequestProviderConfig class TestLlmProviderDefinitionRequest(ModelNormal): @@ -90,7 +90,7 @@ def openapi_types(): """ lazy_import() return { - 'provider_config': (TestLlmProviderDefinitionRequestProviderConfig,), # noqa: E501 + 'provider_config': (ListLlmProviderModelsRequestProviderConfig,), # noqa: E501 'models': ([LlmModel],), # noqa: E501 } @@ -115,7 +115,7 @@ def _from_openapi_data(cls, provider_config, *args, **kwargs): # noqa: E501 """TestLlmProviderDefinitionRequest - a model defined in OpenAPI Args: - provider_config (TestLlmProviderDefinitionRequestProviderConfig): + provider_config (ListLlmProviderModelsRequestProviderConfig): Keyword Args: _check_type (bool): if True, values for parameters in openapi_types @@ -205,7 +205,7 @@ def __init__(self, provider_config, *args, **kwargs): # noqa: E501 """TestLlmProviderDefinitionRequest - a model defined in OpenAPI Args: - provider_config (TestLlmProviderDefinitionRequestProviderConfig): + provider_config (ListLlmProviderModelsRequestProviderConfig): Keyword Args: _check_type (bool): if True, values for parameters in openapi_types diff --git a/gooddata-api-client/gooddata_api_client/model/trending_object_item.py b/gooddata-api-client/gooddata_api_client/model/trending_object_item.py new file mode 100644 index 000000000..8b6f7ccfc --- /dev/null +++ b/gooddata-api-client/gooddata_api_client/model/trending_object_item.py @@ -0,0 +1,348 @@ +""" + 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 TrendingObjectItem(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 { + 'id': (str,), # noqa: E501 + 'tags': ([str],), # noqa: E501 + 'title': (str,), # noqa: E501 + 'type': (str,), # noqa: E501 + 'usage_count': (int,), # noqa: E501 + 'workspace_id': (str,), # noqa: E501 + 'created_at': (datetime,), # noqa: E501 + 'created_by': (str,), # noqa: E501 + 'dataset_id': (str,), # noqa: E501 + 'dataset_title': (str,), # noqa: E501 + 'dataset_type': (str,), # noqa: E501 + 'description': (str,), # noqa: E501 + 'is_hidden': (bool,), # noqa: E501 + 'is_hidden_from_kda': (bool,), # noqa: E501 + 'metric_type': (str,), # noqa: E501 + 'modified_at': (datetime,), # noqa: E501 + 'modified_by': (str,), # noqa: E501 + 'visualization_url': (str,), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'id': 'id', # noqa: E501 + 'tags': 'tags', # noqa: E501 + 'title': 'title', # noqa: E501 + 'type': 'type', # noqa: E501 + 'usage_count': 'usageCount', # noqa: E501 + 'workspace_id': 'workspaceId', # noqa: E501 + 'created_at': 'createdAt', # noqa: E501 + 'created_by': 'createdBy', # noqa: E501 + 'dataset_id': 'datasetId', # noqa: E501 + 'dataset_title': 'datasetTitle', # noqa: E501 + 'dataset_type': 'datasetType', # noqa: E501 + 'description': 'description', # noqa: E501 + 'is_hidden': 'isHidden', # noqa: E501 + 'is_hidden_from_kda': 'isHiddenFromKda', # noqa: E501 + 'metric_type': 'metricType', # noqa: E501 + 'modified_at': 'modifiedAt', # noqa: E501 + 'modified_by': 'modifiedBy', # noqa: E501 + 'visualization_url': 'visualizationUrl', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, id, tags, title, type, usage_count, workspace_id, *args, **kwargs): # noqa: E501 + """TrendingObjectItem - a model defined in OpenAPI + + Args: + id (str): Object ID. + tags ([str]): + title (str): Object title. + type (str): Object type, e.g. dashboard, visualization, metric. + usage_count (int): Number of times this object has been used/referenced. + workspace_id (str): Workspace ID the object belongs to. + + 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,) + created_at (datetime): Timestamp when object was created.. [optional] # noqa: E501 + created_by (str): ID of the user who created the object.. [optional] # noqa: E501 + dataset_id (str): ID of the associated dataset, if applicable.. [optional] # noqa: E501 + dataset_title (str): Title of the associated dataset, if applicable.. [optional] # noqa: E501 + dataset_type (str): Type of the associated dataset, if applicable.. [optional] # noqa: E501 + description (str): Object description.. [optional] # noqa: E501 + is_hidden (bool): If true, this object is hidden from AI search results by default.. [optional] # noqa: E501 + is_hidden_from_kda (bool): If true, this object is hidden from KDA.. [optional] # noqa: E501 + metric_type (str): Type of the metric (e.g. MAQL), if applicable.. [optional] # noqa: E501 + modified_at (datetime): Timestamp when object was last modified.. [optional] # noqa: E501 + modified_by (str): ID of the user who last modified the object.. [optional] # noqa: E501 + visualization_url (str): URL of the visualization, if applicable.. [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__,) + + self.id = id + self.tags = tags + self.title = title + self.type = type + self.usage_count = usage_count + self.workspace_id = workspace_id + 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, id, tags, title, type, usage_count, workspace_id, *args, **kwargs): # noqa: E501 + """TrendingObjectItem - a model defined in OpenAPI + + Args: + id (str): Object ID. + tags ([str]): + title (str): Object title. + type (str): Object type, e.g. dashboard, visualization, metric. + usage_count (int): Number of times this object has been used/referenced. + workspace_id (str): Workspace ID the object belongs to. + + 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,) + created_at (datetime): Timestamp when object was created.. [optional] # noqa: E501 + created_by (str): ID of the user who created the object.. [optional] # noqa: E501 + dataset_id (str): ID of the associated dataset, if applicable.. [optional] # noqa: E501 + dataset_title (str): Title of the associated dataset, if applicable.. [optional] # noqa: E501 + dataset_type (str): Type of the associated dataset, if applicable.. [optional] # noqa: E501 + description (str): Object description.. [optional] # noqa: E501 + is_hidden (bool): If true, this object is hidden from AI search results by default.. [optional] # noqa: E501 + is_hidden_from_kda (bool): If true, this object is hidden from KDA.. [optional] # noqa: E501 + metric_type (str): Type of the metric (e.g. MAQL), if applicable.. [optional] # noqa: E501 + modified_at (datetime): Timestamp when object was last modified.. [optional] # noqa: E501 + modified_by (str): ID of the user who last modified the object.. [optional] # noqa: E501 + visualization_url (str): URL of the visualization, if applicable.. [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__,) + + self.id = id + self.tags = tags + self.title = title + self.type = type + self.usage_count = usage_count + self.workspace_id = workspace_id + 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/trending_objects_result.py b/gooddata-api-client/gooddata_api_client/model/trending_objects_result.py new file mode 100644 index 000000000..1154733fa --- /dev/null +++ b/gooddata-api-client/gooddata_api_client/model/trending_objects_result.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.trending_object_item import TrendingObjectItem + globals()['TrendingObjectItem'] = TrendingObjectItem + + +class TrendingObjectsResult(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 { + 'objects': ([TrendingObjectItem],), # noqa: E501 + } + + @cached_property + def discriminator(): + return None + + + attribute_map = { + 'objects': 'objects', # noqa: E501 + } + + read_only_vars = { + } + + _composed_schemas = {} + + @classmethod + @convert_js_args_to_python_args + def _from_openapi_data(cls, objects, *args, **kwargs): # noqa: E501 + """TrendingObjectsResult - a model defined in OpenAPI + + Args: + objects ([TrendingObjectItem]): + + 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.objects = objects + 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, objects, *args, **kwargs): # noqa: E501 + """TrendingObjectsResult - a model defined in OpenAPI + + Args: + objects ([TrendingObjectItem]): + + 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.objects = objects + 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/models/__init__.py b/gooddata-api-client/gooddata_api_client/models/__init__.py index 29f009645..2dc0d9b5c 100644 --- a/gooddata-api-client/gooddata_api_client/models/__init__.py +++ b/gooddata-api-client/gooddata_api_client/models/__init__.py @@ -360,6 +360,7 @@ from gooddata_api_client.model.get_ai_lake_operation200_response import GetAiLakeOperation200Response from gooddata_api_client.model.get_image_export202_response_inner import GetImageExport202ResponseInner from gooddata_api_client.model.get_quality_issues_response import GetQualityIssuesResponse +from gooddata_api_client.model.get_service_status_response import GetServiceStatusResponse 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 @@ -980,6 +981,9 @@ from gooddata_api_client.model.list_knowledge_documents_response_dto import ListKnowledgeDocumentsResponseDto from gooddata_api_client.model.list_links import ListLinks from gooddata_api_client.model.list_links_all_of import ListLinksAllOf +from gooddata_api_client.model.list_llm_provider_models_request import ListLlmProviderModelsRequest +from gooddata_api_client.model.list_llm_provider_models_request_provider_config import ListLlmProviderModelsRequestProviderConfig +from gooddata_api_client.model.list_llm_provider_models_response import ListLlmProviderModelsResponse from gooddata_api_client.model.list_services_response import ListServicesResponse from gooddata_api_client.model.llm_model import LlmModel from gooddata_api_client.model.llm_provider_auth import LlmProviderAuth @@ -1139,8 +1143,8 @@ from gooddata_api_client.model.tabular_export_request import TabularExportRequest from gooddata_api_client.model.test_definition_request import TestDefinitionRequest from gooddata_api_client.model.test_destination_request import TestDestinationRequest +from gooddata_api_client.model.test_llm_provider_by_id_request import TestLlmProviderByIdRequest from gooddata_api_client.model.test_llm_provider_definition_request import TestLlmProviderDefinitionRequest -from gooddata_api_client.model.test_llm_provider_definition_request_provider_config import TestLlmProviderDefinitionRequestProviderConfig from gooddata_api_client.model.test_llm_provider_response import TestLlmProviderResponse from gooddata_api_client.model.test_notification import TestNotification from gooddata_api_client.model.test_notification_all_of import TestNotificationAllOf @@ -1152,6 +1156,8 @@ from gooddata_api_client.model.total_dimension import TotalDimension from gooddata_api_client.model.total_execution_result_header import TotalExecutionResultHeader from gooddata_api_client.model.total_result_header import TotalResultHeader +from gooddata_api_client.model.trending_object_item import TrendingObjectItem +from gooddata_api_client.model.trending_objects_result import TrendingObjectsResult from gooddata_api_client.model.trigger_automation_request import TriggerAutomationRequest from gooddata_api_client.model.trigger_quality_issues_calculation_response import TriggerQualityIssuesCalculationResponse from gooddata_api_client.model.upsert_knowledge_document_request_dto import UpsertKnowledgeDocumentRequestDto diff --git a/packages/gooddata-fdw/tests/execute/fixtures/execute_compute_table_all_columns.yaml b/packages/gooddata-fdw/tests/execute/fixtures/execute_compute_table_all_columns.yaml index 21e95062c..8589a54eb 100644 --- a/packages/gooddata-fdw/tests/execute/fixtures/execute_compute_table_all_columns.yaml +++ b/packages/gooddata-fdw/tests/execute/fixtures/execute_compute_table_all_columns.yaml @@ -103,7 +103,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 75ebf79c-8b57-413e-8905-8f87c275d7c7 + - b4d35991-802b-408c-9700-4ca9e7bc5f70 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -155,10 +155,10 @@ interactions: name: Revenue localIdentifier: dim_1 links: - executionResult: d60b337013fca31600abb3d636b0552824481d3d:3b1a7fd80969c75386d4191687e7aac6411e48e74da9eaa0c44699c8b65e5771 + executionResult: e1a2e0faf75c8d24622d01af1751f7cad0c1d3ba:55c0e3d150b52799a81e34e88af1362523efc9d05ed085d9b32a5b7ad5ee9813 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/d60b337013fca31600abb3d636b0552824481d3d%3A3b1a7fd80969c75386d4191687e7aac6411e48e74da9eaa0c44699c8b65e5771?offset=0%2C0&limit=512%2C256 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/e1a2e0faf75c8d24622d01af1751f7cad0c1d3ba%3A55c0e3d150b52799a81e34e88af1362523efc9d05ed085d9b32a5b7ad5ee9813?offset=0%2C0&limit=512%2C256 body: null headers: Accept: diff --git a/packages/gooddata-fdw/tests/execute/fixtures/execute_compute_table_metrics_only.yaml b/packages/gooddata-fdw/tests/execute/fixtures/execute_compute_table_metrics_only.yaml index 200c1a247..84bd26631 100644 --- a/packages/gooddata-fdw/tests/execute/fixtures/execute_compute_table_metrics_only.yaml +++ b/packages/gooddata-fdw/tests/execute/fixtures/execute_compute_table_metrics_only.yaml @@ -89,7 +89,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 89bdbce1-989f-4d02-a05b-c4651acb16f1 + - a7f0232a-fb82-4173-bb10-ed1220a3dc77 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -109,10 +109,10 @@ interactions: name: Revenue localIdentifier: dim_0 links: - executionResult: 0f6e8c819d2076d126957770f4de7c7cfdbe94f2:b9fb86afba4a0826554e9283de0216a56182a625b327e2f2086007c84261356b + executionResult: 334e4d8e44a5f3e9f08be3db7113fbf10d3857e2:ab9839706f0a11d10772a80cbae034830571606e4fea3403a5be88b07240e7ba - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/0f6e8c819d2076d126957770f4de7c7cfdbe94f2%3Ab9fb86afba4a0826554e9283de0216a56182a625b327e2f2086007c84261356b?offset=0&limit=256 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/334e4d8e44a5f3e9f08be3db7113fbf10d3857e2%3Aab9839706f0a11d10772a80cbae034830571606e4fea3403a5be88b07240e7ba?offset=0&limit=256 body: null headers: Accept: diff --git a/packages/gooddata-fdw/tests/execute/fixtures/execute_compute_table_with_reduced_granularity.yaml b/packages/gooddata-fdw/tests/execute/fixtures/execute_compute_table_with_reduced_granularity.yaml index 360f0f705..2ba331180 100644 --- a/packages/gooddata-fdw/tests/execute/fixtures/execute_compute_table_with_reduced_granularity.yaml +++ b/packages/gooddata-fdw/tests/execute/fixtures/execute_compute_table_with_reduced_granularity.yaml @@ -78,7 +78,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 3faa3be7-abe9-4ea1-970b-9e4ea6761c55 + - 1256857e-c305-4512-98be-145c8110d7ba X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -111,10 +111,10 @@ interactions: name: Revenue localIdentifier: dim_1 links: - executionResult: 8fc634415680e148db8133f5bcd7246f5e0a3c66:660c43f4d90efd070912c98150124c6fdf8549fed14b6eb512a830ff17d7f8b3 + executionResult: 92a1e3514ec1752ac38403d033a79fbb68d73e18:051d8c231b8f8e279b9333f8381bf314b9ed78d8e5c0a3cdef9645d7ffea5abb - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/8fc634415680e148db8133f5bcd7246f5e0a3c66%3A660c43f4d90efd070912c98150124c6fdf8549fed14b6eb512a830ff17d7f8b3?offset=0%2C0&limit=512%2C256 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/92a1e3514ec1752ac38403d033a79fbb68d73e18%3A051d8c231b8f8e279b9333f8381bf314b9ed78d8e5c0a3cdef9645d7ffea5abb?offset=0%2C0&limit=512%2C256 body: null headers: Accept: diff --git a/packages/gooddata-fdw/tests/execute/fixtures/execute_insight_all_columns.yaml b/packages/gooddata-fdw/tests/execute/fixtures/execute_insight_all_columns.yaml index 4382e5bf1..79dfa0eb1 100644 --- a/packages/gooddata-fdw/tests/execute/fixtures/execute_insight_all_columns.yaml +++ b/packages/gooddata-fdw/tests/execute/fixtures/execute_insight_all_columns.yaml @@ -375,7 +375,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 9773d1f6-996c-41d2-bf00-605307ab0284 + - c858d9a3-c3a3-4511-817c-80bdbc276c45 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -427,10 +427,10 @@ interactions: name: Revenue localIdentifier: dim_1 links: - executionResult: b83f490bb62cdbf7c4775031d6be518ec4b6c922:87b0990eecc60e2913654ddb0e0bab5a51cfc352ae558cbc0e55a0f98fdb2e37 + executionResult: 3c5ca12d82a6d9ddc9170f4f0610f43ed5094cf8:8a0b7353a7459f177fc2def327fbde2aa8d2a495ff1fb6c4dbbcdf803d100328 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b83f490bb62cdbf7c4775031d6be518ec4b6c922%3A87b0990eecc60e2913654ddb0e0bab5a51cfc352ae558cbc0e55a0f98fdb2e37?offset=0%2C0&limit=512%2C256 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/3c5ca12d82a6d9ddc9170f4f0610f43ed5094cf8%3A8a0b7353a7459f177fc2def327fbde2aa8d2a495ff1fb6c4dbbcdf803d100328?offset=0%2C0&limit=512%2C256 body: null headers: Accept: diff --git a/packages/gooddata-fdw/tests/execute/fixtures/execute_insight_some_columns.yaml b/packages/gooddata-fdw/tests/execute/fixtures/execute_insight_some_columns.yaml index d357e032e..776102ffe 100644 --- a/packages/gooddata-fdw/tests/execute/fixtures/execute_insight_some_columns.yaml +++ b/packages/gooddata-fdw/tests/execute/fixtures/execute_insight_some_columns.yaml @@ -375,7 +375,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 66d702d3-4533-4a10-91db-ea0e4c97625c + - 5979298a-dd35-4a48-b183-bbe2a18f7a57 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -427,10 +427,10 @@ interactions: name: Revenue localIdentifier: dim_1 links: - executionResult: b83f490bb62cdbf7c4775031d6be518ec4b6c922:87b0990eecc60e2913654ddb0e0bab5a51cfc352ae558cbc0e55a0f98fdb2e37 + executionResult: 3c5ca12d82a6d9ddc9170f4f0610f43ed5094cf8:8a0b7353a7459f177fc2def327fbde2aa8d2a495ff1fb6c4dbbcdf803d100328 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b83f490bb62cdbf7c4775031d6be518ec4b6c922%3A87b0990eecc60e2913654ddb0e0bab5a51cfc352ae558cbc0e55a0f98fdb2e37?offset=0%2C0&limit=512%2C256 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/3c5ca12d82a6d9ddc9170f4f0610f43ed5094cf8%3A8a0b7353a7459f177fc2def327fbde2aa8d2a495ff1fb6c4dbbcdf803d100328?offset=0%2C0&limit=512%2C256 body: null headers: Accept: diff --git a/packages/gooddata-fdw/tests/import_foreign_schema/fixtures/import_compute_without_restrictions.yaml b/packages/gooddata-fdw/tests/import_foreign_schema/fixtures/import_compute_without_restrictions.yaml index c64380d32..de2ba8fd1 100644 --- a/packages/gooddata-fdw/tests/import_foreign_schema/fixtures/import_compute_without_restrictions.yaml +++ b/packages/gooddata-fdw/tests/import_foreign_schema/fixtures/import_compute_without_restrictions.yaml @@ -600,57 +600,57 @@ interactions: type: attribute referenceProperties: - identifier: - id: campaigns + id: customers type: dataset multivalue: false sources: - - column: campaign_id + - column: customer_id dataType: INT target: - id: campaign_id + id: customer_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: products + id: campaigns type: dataset multivalue: false sources: - - column: product_id + - column: campaign_id dataType: INT target: - id: product_id + id: campaign_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: customers + id: date type: dataset multivalue: false sources: - - column: customer_id - dataType: INT + - column: date + dataType: DATE target: - id: customer_id - type: attribute + id: date + type: date isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: date + id: products type: dataset multivalue: false sources: - - column: date - dataType: DATE + - column: product_id + dataType: INT target: - id: date - type: date + id: product_id + type: attribute isNullable: null nullValue: null sourceColumns: null @@ -1262,57 +1262,57 @@ interactions: type: attribute referenceProperties: - identifier: - id: campaigns + id: customers type: dataset multivalue: false sources: - - column: campaign_id + - column: customer_id dataType: INT target: - id: campaign_id + id: customer_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: products + id: campaigns type: dataset multivalue: false sources: - - column: product_id + - column: campaign_id dataType: INT target: - id: product_id + id: campaign_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: customers + id: date type: dataset multivalue: false sources: - - column: customer_id - dataType: INT + - column: date + dataType: DATE target: - id: customer_id - type: attribute + id: date + type: date isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: date + id: products type: dataset multivalue: false sources: - - column: date - dataType: DATE + - column: product_id + dataType: INT target: - id: date - type: date + id: product_id + type: attribute isNullable: null nullValue: null sourceColumns: null diff --git a/packages/gooddata-fdw/tests/import_foreign_schema/fixtures/import_insights_without_restrictions.yaml b/packages/gooddata-fdw/tests/import_foreign_schema/fixtures/import_insights_without_restrictions.yaml index ed8ef08c4..0b3dab07b 100644 --- a/packages/gooddata-fdw/tests/import_foreign_schema/fixtures/import_insights_without_restrictions.yaml +++ b/packages/gooddata-fdw/tests/import_foreign_schema/fixtures/import_insights_without_restrictions.yaml @@ -600,57 +600,57 @@ interactions: type: attribute referenceProperties: - identifier: - id: campaigns + id: customers type: dataset multivalue: false sources: - - column: campaign_id + - column: customer_id dataType: INT target: - id: campaign_id + id: customer_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: products + id: campaigns type: dataset multivalue: false sources: - - column: product_id + - column: campaign_id dataType: INT target: - id: product_id + id: campaign_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: customers + id: date type: dataset multivalue: false sources: - - column: customer_id - dataType: INT + - column: date + dataType: DATE target: - id: customer_id - type: attribute + id: date + type: date isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: date + id: products type: dataset multivalue: false sources: - - column: date - dataType: DATE + - column: product_id + dataType: INT target: - id: date - type: date + id: product_id + type: attribute isNullable: null nullValue: null sourceColumns: null @@ -1262,57 +1262,57 @@ interactions: type: attribute referenceProperties: - identifier: - id: campaigns + id: customers type: dataset multivalue: false sources: - - column: campaign_id + - column: customer_id dataType: INT target: - id: campaign_id + id: customer_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: products + id: campaigns type: dataset multivalue: false sources: - - column: product_id + - column: campaign_id dataType: INT target: - id: product_id + id: campaign_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: customers + id: date type: dataset multivalue: false sources: - - column: customer_id - dataType: INT + - column: date + dataType: DATE target: - id: customer_id - type: attribute + id: date + type: date isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: date + id: products type: dataset multivalue: false sources: - - column: date - dataType: DATE + - column: product_id + dataType: INT target: - id: date - type: date + id: product_id + type: attribute isNullable: null nullValue: null sourceColumns: null diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_bytes_limits_failure.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_bytes_limits_failure.yaml index 8813fb8e8..752e9937f 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_bytes_limits_failure.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_bytes_limits_failure.yaml @@ -90,7 +90,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 6690b141-0765-4d58-bcf0-8b9ad41dd709 + - 419360eb-abb9-44f1-bd2f-9bbf03752a5f X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -153,10 +153,10 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: 4d70b2f5dc82de826023bd64a95a9b6cece1fc90:727263b01ce1783fb5c523537135e11e675307f8552f0094ccebb2e30d794188 + executionResult: b08cc19b914df75302212d9fd22047afaa261a71:7090161623657c2301331a438f48a251f0fe28cfea941727802b0fd223053426 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/4d70b2f5dc82de826023bd64a95a9b6cece1fc90%3A727263b01ce1783fb5c523537135e11e675307f8552f0094ccebb2e30d794188/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b08cc19b914df75302212d9fd22047afaa261a71%3A7090161623657c2301331a438f48a251f0fe28cfea941727802b0fd223053426/metadata body: null headers: Accept: @@ -296,7 +296,7 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: 4d70b2f5dc82de826023bd64a95a9b6cece1fc90:727263b01ce1783fb5c523537135e11e675307f8552f0094ccebb2e30d794188 + executionResult: b08cc19b914df75302212d9fd22047afaa261a71:7090161623657c2301331a438f48a251f0fe28cfea941727802b0fd223053426 resultSpec: dimensions: - localIdentifier: dim_0 @@ -313,7 +313,7 @@ interactions: resultSize: 4625 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/4d70b2f5dc82de826023bd64a95a9b6cece1fc90%3A727263b01ce1783fb5c523537135e11e675307f8552f0094ccebb2e30d794188?offset=0%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b08cc19b914df75302212d9fd22047afaa261a71%3A7090161623657c2301331a438f48a251f0fe28cfea941727802b0fd223053426?offset=0%2C0&limit=100%2C100 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_dimensions_limits_failure.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_dimensions_limits_failure.yaml index e4cdc8a8f..fac0b4a94 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_dimensions_limits_failure.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_dimensions_limits_failure.yaml @@ -90,7 +90,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - bfe7b4db-22ff-43c8-b410-9fb379db63bd + - a485d01b-4478-40e6-b7c8-e0003fab6225 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -153,10 +153,10 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: 4d70b2f5dc82de826023bd64a95a9b6cece1fc90:727263b01ce1783fb5c523537135e11e675307f8552f0094ccebb2e30d794188 + executionResult: b08cc19b914df75302212d9fd22047afaa261a71:7090161623657c2301331a438f48a251f0fe28cfea941727802b0fd223053426 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/4d70b2f5dc82de826023bd64a95a9b6cece1fc90%3A727263b01ce1783fb5c523537135e11e675307f8552f0094ccebb2e30d794188/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b08cc19b914df75302212d9fd22047afaa261a71%3A7090161623657c2301331a438f48a251f0fe28cfea941727802b0fd223053426/metadata body: null headers: Accept: @@ -296,7 +296,7 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: 4d70b2f5dc82de826023bd64a95a9b6cece1fc90:727263b01ce1783fb5c523537135e11e675307f8552f0094ccebb2e30d794188 + executionResult: b08cc19b914df75302212d9fd22047afaa261a71:7090161623657c2301331a438f48a251f0fe28cfea941727802b0fd223053426 resultSpec: dimensions: - localIdentifier: dim_0 @@ -313,7 +313,7 @@ interactions: resultSize: 4625 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/4d70b2f5dc82de826023bd64a95a9b6cece1fc90%3A727263b01ce1783fb5c523537135e11e675307f8552f0094ccebb2e30d794188?offset=0%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b08cc19b914df75302212d9fd22047afaa261a71%3A7090161623657c2301331a438f48a251f0fe28cfea941727802b0fd223053426?offset=0%2C0&limit=100%2C100 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_one_dim1.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_one_dim1.yaml index 16fbc0e20..32e639ec9 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_one_dim1.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_one_dim1.yaml @@ -88,7 +88,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 3f8fe115-98ee-4631-acbf-1c9db9f90101 + - e78b71b0-94ec-4b58-8036-d3442c25d23b X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -149,10 +149,10 @@ interactions: name: Order Amount localIdentifier: dim_0 links: - executionResult: b0e84dd140b6265a314bb63b5600a6112e7384bf:eea1279f0cabd5c4b86e25cf171a14cbc24832cd798b605bd6bd105e55743bd3 + executionResult: ffc9d9229139c1d628dc13a168c5923eb6d4437b:a9fda29d5010a8b6c291e31690a84cef6e3bb7f4d9ca94630e0400bcc3dcdaf4 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b0e84dd140b6265a314bb63b5600a6112e7384bf%3Aeea1279f0cabd5c4b86e25cf171a14cbc24832cd798b605bd6bd105e55743bd3/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/ffc9d9229139c1d628dc13a168c5923eb6d4437b%3Aa9fda29d5010a8b6c291e31690a84cef6e3bb7f4d9ca94630e0400bcc3dcdaf4/metadata body: null headers: Accept: @@ -290,7 +290,7 @@ interactions: name: Order Amount localIdentifier: dim_0 links: - executionResult: b0e84dd140b6265a314bb63b5600a6112e7384bf:eea1279f0cabd5c4b86e25cf171a14cbc24832cd798b605bd6bd105e55743bd3 + executionResult: ffc9d9229139c1d628dc13a168c5923eb6d4437b:a9fda29d5010a8b6c291e31690a84cef6e3bb7f4d9ca94630e0400bcc3dcdaf4 resultSpec: dimensions: - localIdentifier: dim_0 @@ -304,7 +304,7 @@ interactions: resultSize: 2913 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b0e84dd140b6265a314bb63b5600a6112e7384bf%3Aeea1279f0cabd5c4b86e25cf171a14cbc24832cd798b605bd6bd105e55743bd3?offset=0&limit=500 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/ffc9d9229139c1d628dc13a168c5923eb6d4437b%3Aa9fda29d5010a8b6c291e31690a84cef6e3bb7f4d9ca94630e0400bcc3dcdaf4?offset=0&limit=500 body: null headers: Accept: @@ -4731,7 +4731,7 @@ interactions: dataSourceMessages: [] - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b0e84dd140b6265a314bb63b5600a6112e7384bf%3Aeea1279f0cabd5c4b86e25cf171a14cbc24832cd798b605bd6bd105e55743bd3/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/ffc9d9229139c1d628dc13a168c5923eb6d4437b%3Aa9fda29d5010a8b6c291e31690a84cef6e3bb7f4d9ca94630e0400bcc3dcdaf4/metadata body: null headers: Accept: @@ -4869,7 +4869,7 @@ interactions: name: Order Amount localIdentifier: dim_0 links: - executionResult: b0e84dd140b6265a314bb63b5600a6112e7384bf:eea1279f0cabd5c4b86e25cf171a14cbc24832cd798b605bd6bd105e55743bd3 + executionResult: ffc9d9229139c1d628dc13a168c5923eb6d4437b:a9fda29d5010a8b6c291e31690a84cef6e3bb7f4d9ca94630e0400bcc3dcdaf4 resultSpec: dimensions: - localIdentifier: dim_0 @@ -4883,7 +4883,7 @@ interactions: resultSize: 2913 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b0e84dd140b6265a314bb63b5600a6112e7384bf%3Aeea1279f0cabd5c4b86e25cf171a14cbc24832cd798b605bd6bd105e55743bd3?offset=0&limit=500 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/ffc9d9229139c1d628dc13a168c5923eb6d4437b%3Aa9fda29d5010a8b6c291e31690a84cef6e3bb7f4d9ca94630e0400bcc3dcdaf4?offset=0&limit=500 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_one_dim2.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_one_dim2.yaml index ded33907a..63a89fdcf 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_one_dim2.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_one_dim2.yaml @@ -90,7 +90,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 6242ae60-4690-4043-8b6d-d83c74848669 + - 133aa0a9-cc20-4e90-a201-cc1c2c9b6e6c X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -153,10 +153,10 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: ae0fc31feddaa602e7933b502c0d55072af0ef29:91a4d8ef1b7237a17610d817f46db301d7c3767dace3e99bf412ecdcce93ae09 + executionResult: 5bb87aeba9572b7e0e7fde2246b42bea0d8cf072:cce01ada0af37e0ed6b7ecc764fcc1300ef0285e8898ca82a42e732d2cd9c9df - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/ae0fc31feddaa602e7933b502c0d55072af0ef29%3A91a4d8ef1b7237a17610d817f46db301d7c3767dace3e99bf412ecdcce93ae09/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5bb87aeba9572b7e0e7fde2246b42bea0d8cf072%3Acce01ada0af37e0ed6b7ecc764fcc1300ef0285e8898ca82a42e732d2cd9c9df/metadata body: null headers: Accept: @@ -296,7 +296,7 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: ae0fc31feddaa602e7933b502c0d55072af0ef29:91a4d8ef1b7237a17610d817f46db301d7c3767dace3e99bf412ecdcce93ae09 + executionResult: 5bb87aeba9572b7e0e7fde2246b42bea0d8cf072:cce01ada0af37e0ed6b7ecc764fcc1300ef0285e8898ca82a42e732d2cd9c9df resultSpec: dimensions: - localIdentifier: dim_0 @@ -313,7 +313,7 @@ interactions: resultSize: 2913 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/ae0fc31feddaa602e7933b502c0d55072af0ef29%3A91a4d8ef1b7237a17610d817f46db301d7c3767dace3e99bf412ecdcce93ae09?offset=0%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5bb87aeba9572b7e0e7fde2246b42bea0d8cf072%3Acce01ada0af37e0ed6b7ecc764fcc1300ef0285e8898ca82a42e732d2cd9c9df?offset=0%2C0&limit=100%2C100 body: null headers: Accept: @@ -1576,7 +1576,7 @@ interactions: dataSourceMessages: [] - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/ae0fc31feddaa602e7933b502c0d55072af0ef29%3A91a4d8ef1b7237a17610d817f46db301d7c3767dace3e99bf412ecdcce93ae09?offset=0%2C100&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5bb87aeba9572b7e0e7fde2246b42bea0d8cf072%3Acce01ada0af37e0ed6b7ecc764fcc1300ef0285e8898ca82a42e732d2cd9c9df?offset=0%2C100&limit=100%2C100 body: null headers: Accept: @@ -2839,7 +2839,7 @@ interactions: dataSourceMessages: [] - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/ae0fc31feddaa602e7933b502c0d55072af0ef29%3A91a4d8ef1b7237a17610d817f46db301d7c3767dace3e99bf412ecdcce93ae09?offset=0%2C200&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5bb87aeba9572b7e0e7fde2246b42bea0d8cf072%3Acce01ada0af37e0ed6b7ecc764fcc1300ef0285e8898ca82a42e732d2cd9c9df?offset=0%2C200&limit=100%2C100 body: null headers: Accept: @@ -4102,7 +4102,7 @@ interactions: dataSourceMessages: [] - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/ae0fc31feddaa602e7933b502c0d55072af0ef29%3A91a4d8ef1b7237a17610d817f46db301d7c3767dace3e99bf412ecdcce93ae09?offset=0%2C300&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5bb87aeba9572b7e0e7fde2246b42bea0d8cf072%3Acce01ada0af37e0ed6b7ecc764fcc1300ef0285e8898ca82a42e732d2cd9c9df?offset=0%2C300&limit=100%2C100 body: null headers: Accept: @@ -4933,7 +4933,7 @@ interactions: dataSourceMessages: [] - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/ae0fc31feddaa602e7933b502c0d55072af0ef29%3A91a4d8ef1b7237a17610d817f46db301d7c3767dace3e99bf412ecdcce93ae09/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5bb87aeba9572b7e0e7fde2246b42bea0d8cf072%3Acce01ada0af37e0ed6b7ecc764fcc1300ef0285e8898ca82a42e732d2cd9c9df/metadata body: null headers: Accept: @@ -5073,7 +5073,7 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: ae0fc31feddaa602e7933b502c0d55072af0ef29:91a4d8ef1b7237a17610d817f46db301d7c3767dace3e99bf412ecdcce93ae09 + executionResult: 5bb87aeba9572b7e0e7fde2246b42bea0d8cf072:cce01ada0af37e0ed6b7ecc764fcc1300ef0285e8898ca82a42e732d2cd9c9df resultSpec: dimensions: - localIdentifier: dim_0 @@ -5090,7 +5090,7 @@ interactions: resultSize: 2913 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/ae0fc31feddaa602e7933b502c0d55072af0ef29%3A91a4d8ef1b7237a17610d817f46db301d7c3767dace3e99bf412ecdcce93ae09?offset=0%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5bb87aeba9572b7e0e7fde2246b42bea0d8cf072%3Acce01ada0af37e0ed6b7ecc764fcc1300ef0285e8898ca82a42e732d2cd9c9df?offset=0%2C0&limit=100%2C100 body: null headers: Accept: @@ -6353,7 +6353,7 @@ interactions: dataSourceMessages: [] - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/ae0fc31feddaa602e7933b502c0d55072af0ef29%3A91a4d8ef1b7237a17610d817f46db301d7c3767dace3e99bf412ecdcce93ae09?offset=0%2C100&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5bb87aeba9572b7e0e7fde2246b42bea0d8cf072%3Acce01ada0af37e0ed6b7ecc764fcc1300ef0285e8898ca82a42e732d2cd9c9df?offset=0%2C100&limit=100%2C100 body: null headers: Accept: @@ -7616,7 +7616,7 @@ interactions: dataSourceMessages: [] - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/ae0fc31feddaa602e7933b502c0d55072af0ef29%3A91a4d8ef1b7237a17610d817f46db301d7c3767dace3e99bf412ecdcce93ae09?offset=0%2C200&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5bb87aeba9572b7e0e7fde2246b42bea0d8cf072%3Acce01ada0af37e0ed6b7ecc764fcc1300ef0285e8898ca82a42e732d2cd9c9df?offset=0%2C200&limit=100%2C100 body: null headers: Accept: @@ -8879,7 +8879,7 @@ interactions: dataSourceMessages: [] - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/ae0fc31feddaa602e7933b502c0d55072af0ef29%3A91a4d8ef1b7237a17610d817f46db301d7c3767dace3e99bf412ecdcce93ae09?offset=0%2C300&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5bb87aeba9572b7e0e7fde2246b42bea0d8cf072%3Acce01ada0af37e0ed6b7ecc764fcc1300ef0285e8898ca82a42e732d2cd9c9df?offset=0%2C300&limit=100%2C100 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_totals1.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_totals1.yaml index 3f131ccb0..dd5035473 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_totals1.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_totals1.yaml @@ -109,7 +109,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 7cd21243-8142-4a2a-a3c1-b275fad3aa2a + - 7b630c89-9884-45fa-8e49-7a513a994d54 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -172,10 +172,10 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: deeb8e99f85a5b336773174ee39c10412c67ba31:bf35ea462f194cd6365f2b0c30420d46ce89103703613f5d19f66702047f3eab + executionResult: d738e65cf69420dce60ec63848237cb5748ab00f:ea81d8b98510d8f0472b8ca5c9e500a05b3627a7e5efede38d3352514db17df0 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/deeb8e99f85a5b336773174ee39c10412c67ba31%3Abf35ea462f194cd6365f2b0c30420d46ce89103703613f5d19f66702047f3eab/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/d738e65cf69420dce60ec63848237cb5748ab00f%3Aea81d8b98510d8f0472b8ca5c9e500a05b3627a7e5efede38d3352514db17df0/metadata body: null headers: Accept: @@ -315,7 +315,7 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: deeb8e99f85a5b336773174ee39c10412c67ba31:bf35ea462f194cd6365f2b0c30420d46ce89103703613f5d19f66702047f3eab + executionResult: d738e65cf69420dce60ec63848237cb5748ab00f:ea81d8b98510d8f0472b8ca5c9e500a05b3627a7e5efede38d3352514db17df0 resultSpec: dimensions: - localIdentifier: dim_0 @@ -350,7 +350,7 @@ interactions: resultSize: 4794 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/deeb8e99f85a5b336773174ee39c10412c67ba31%3Abf35ea462f194cd6365f2b0c30420d46ce89103703613f5d19f66702047f3eab?offset=0%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/d738e65cf69420dce60ec63848237cb5748ab00f%3Aea81d8b98510d8f0472b8ca5c9e500a05b3627a7e5efede38d3352514db17df0?offset=0%2C0&limit=100%2C100 body: null headers: Accept: @@ -1779,7 +1779,7 @@ interactions: dataSourceMessages: [] - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/deeb8e99f85a5b336773174ee39c10412c67ba31%3Abf35ea462f194cd6365f2b0c30420d46ce89103703613f5d19f66702047f3eab/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/d738e65cf69420dce60ec63848237cb5748ab00f%3Aea81d8b98510d8f0472b8ca5c9e500a05b3627a7e5efede38d3352514db17df0/metadata body: null headers: Accept: @@ -1919,7 +1919,7 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: deeb8e99f85a5b336773174ee39c10412c67ba31:bf35ea462f194cd6365f2b0c30420d46ce89103703613f5d19f66702047f3eab + executionResult: d738e65cf69420dce60ec63848237cb5748ab00f:ea81d8b98510d8f0472b8ca5c9e500a05b3627a7e5efede38d3352514db17df0 resultSpec: dimensions: - localIdentifier: dim_0 @@ -1954,7 +1954,7 @@ interactions: resultSize: 4794 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/deeb8e99f85a5b336773174ee39c10412c67ba31%3Abf35ea462f194cd6365f2b0c30420d46ce89103703613f5d19f66702047f3eab?offset=0%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/d738e65cf69420dce60ec63848237cb5748ab00f%3Aea81d8b98510d8f0472b8ca5c9e500a05b3627a7e5efede38d3352514db17df0?offset=0%2C0&limit=100%2C100 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_totals2.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_totals2.yaml index 1991a16c1..3152bd9fc 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_totals2.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_totals2.yaml @@ -107,7 +107,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - b360039b-d18e-493a-813f-54554b305928 + - 6fbf5720-80c3-418b-9e0d-d7a56a8afbd5 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -170,10 +170,10 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: fcc025cee3f6a3055ec68950c4d2e86df0eef669:1b87704d500353651747722261fd400cfebdaba0aba827056ea202458f6e5dcf + executionResult: cf22367d5996b2396ccf482f9156efa1efbc0755:30ef8e6082b249aeb07be0700e95d18309ec882ca99d2a8a3a36b5635a4ec581 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/fcc025cee3f6a3055ec68950c4d2e86df0eef669%3A1b87704d500353651747722261fd400cfebdaba0aba827056ea202458f6e5dcf/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/cf22367d5996b2396ccf482f9156efa1efbc0755%3A30ef8e6082b249aeb07be0700e95d18309ec882ca99d2a8a3a36b5635a4ec581/metadata body: null headers: Accept: @@ -313,7 +313,7 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: fcc025cee3f6a3055ec68950c4d2e86df0eef669:1b87704d500353651747722261fd400cfebdaba0aba827056ea202458f6e5dcf + executionResult: cf22367d5996b2396ccf482f9156efa1efbc0755:30ef8e6082b249aeb07be0700e95d18309ec882ca99d2a8a3a36b5635a4ec581 resultSpec: dimensions: - localIdentifier: dim_0 @@ -346,7 +346,7 @@ interactions: resultSize: 15444 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/fcc025cee3f6a3055ec68950c4d2e86df0eef669%3A1b87704d500353651747722261fd400cfebdaba0aba827056ea202458f6e5dcf?offset=0%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/cf22367d5996b2396ccf482f9156efa1efbc0755%3A30ef8e6082b249aeb07be0700e95d18309ec882ca99d2a8a3a36b5635a4ec581?offset=0%2C0&limit=100%2C100 body: null headers: Accept: @@ -2830,7 +2830,7 @@ interactions: dataSourceMessages: [] - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/fcc025cee3f6a3055ec68950c4d2e86df0eef669%3A1b87704d500353651747722261fd400cfebdaba0aba827056ea202458f6e5dcf/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/cf22367d5996b2396ccf482f9156efa1efbc0755%3A30ef8e6082b249aeb07be0700e95d18309ec882ca99d2a8a3a36b5635a4ec581/metadata body: null headers: Accept: @@ -2970,7 +2970,7 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: fcc025cee3f6a3055ec68950c4d2e86df0eef669:1b87704d500353651747722261fd400cfebdaba0aba827056ea202458f6e5dcf + executionResult: cf22367d5996b2396ccf482f9156efa1efbc0755:30ef8e6082b249aeb07be0700e95d18309ec882ca99d2a8a3a36b5635a4ec581 resultSpec: dimensions: - localIdentifier: dim_0 @@ -3003,7 +3003,7 @@ interactions: resultSize: 15444 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/fcc025cee3f6a3055ec68950c4d2e86df0eef669%3A1b87704d500353651747722261fd400cfebdaba0aba827056ea202458f6e5dcf?offset=0%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/cf22367d5996b2396ccf482f9156efa1efbc0755%3A30ef8e6082b249aeb07be0700e95d18309ec882ca99d2a8a3a36b5635a4ec581?offset=0%2C0&limit=100%2C100 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_totals3.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_totals3.yaml index b9604c1e1..6567f6456 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_totals3.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_totals3.yaml @@ -109,7 +109,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 06939ee4-fcd5-4916-9e45-6300a875aaa5 + - bdb35682-fc47-4f9d-9319-5cf6f6b10c7d X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -172,10 +172,10 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: dad7aacf6991cfb72e16325c54dd456e5e8501fb:feada44cb6bf18355e52dab6fb6aa4edd1c414165ab7d913afc1a205fec871b2 + executionResult: 69311887276a9ffbd2f6b650ff1921b91df53dbc:e573f84c7eed387b3913cb0154cb9d98da8dcb86004509a72969b5d90b45a047 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/dad7aacf6991cfb72e16325c54dd456e5e8501fb%3Afeada44cb6bf18355e52dab6fb6aa4edd1c414165ab7d913afc1a205fec871b2/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/69311887276a9ffbd2f6b650ff1921b91df53dbc%3Ae573f84c7eed387b3913cb0154cb9d98da8dcb86004509a72969b5d90b45a047/metadata body: null headers: Accept: @@ -315,7 +315,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: dad7aacf6991cfb72e16325c54dd456e5e8501fb:feada44cb6bf18355e52dab6fb6aa4edd1c414165ab7d913afc1a205fec871b2 + executionResult: 69311887276a9ffbd2f6b650ff1921b91df53dbc:e573f84c7eed387b3913cb0154cb9d98da8dcb86004509a72969b5d90b45a047 resultSpec: dimensions: - localIdentifier: dim_0 @@ -350,7 +350,7 @@ interactions: resultSize: 4794 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/dad7aacf6991cfb72e16325c54dd456e5e8501fb%3Afeada44cb6bf18355e52dab6fb6aa4edd1c414165ab7d913afc1a205fec871b2?offset=0%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/69311887276a9ffbd2f6b650ff1921b91df53dbc%3Ae573f84c7eed387b3913cb0154cb9d98da8dcb86004509a72969b5d90b45a047?offset=0%2C0&limit=100%2C100 body: null headers: Accept: @@ -1779,7 +1779,7 @@ interactions: dataSourceMessages: [] - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/dad7aacf6991cfb72e16325c54dd456e5e8501fb%3Afeada44cb6bf18355e52dab6fb6aa4edd1c414165ab7d913afc1a205fec871b2/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/69311887276a9ffbd2f6b650ff1921b91df53dbc%3Ae573f84c7eed387b3913cb0154cb9d98da8dcb86004509a72969b5d90b45a047/metadata body: null headers: Accept: @@ -1919,7 +1919,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: dad7aacf6991cfb72e16325c54dd456e5e8501fb:feada44cb6bf18355e52dab6fb6aa4edd1c414165ab7d913afc1a205fec871b2 + executionResult: 69311887276a9ffbd2f6b650ff1921b91df53dbc:e573f84c7eed387b3913cb0154cb9d98da8dcb86004509a72969b5d90b45a047 resultSpec: dimensions: - localIdentifier: dim_0 @@ -1954,7 +1954,7 @@ interactions: resultSize: 4794 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/dad7aacf6991cfb72e16325c54dd456e5e8501fb%3Afeada44cb6bf18355e52dab6fb6aa4edd1c414165ab7d913afc1a205fec871b2?offset=0%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/69311887276a9ffbd2f6b650ff1921b91df53dbc%3Ae573f84c7eed387b3913cb0154cb9d98da8dcb86004509a72969b5d90b45a047?offset=0%2C0&limit=100%2C100 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_totals4.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_totals4.yaml index b482387d3..29352cb4b 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_totals4.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_totals4.yaml @@ -107,7 +107,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 0297b085-27b4-4fea-9b6b-7323acf0ca6c + - af80b5bf-228f-4681-ab61-74c31a8f1320 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -170,10 +170,10 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 5f2924bed6bbd4d2ef6c6e5ddf87d0c0b14af08d:1a68011bef797ddebccd73d1c35929710bd7fe9fd02207919208129b1a5028e7 + executionResult: b33465fff4fca52835d6c75b970895c7d52e99b9:33e3aa71f8128de9df92ef3c5381a8194253f0995401d27c8ddb06153ff4e015 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5f2924bed6bbd4d2ef6c6e5ddf87d0c0b14af08d%3A1a68011bef797ddebccd73d1c35929710bd7fe9fd02207919208129b1a5028e7/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b33465fff4fca52835d6c75b970895c7d52e99b9%3A33e3aa71f8128de9df92ef3c5381a8194253f0995401d27c8ddb06153ff4e015/metadata body: null headers: Accept: @@ -313,7 +313,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 5f2924bed6bbd4d2ef6c6e5ddf87d0c0b14af08d:1a68011bef797ddebccd73d1c35929710bd7fe9fd02207919208129b1a5028e7 + executionResult: b33465fff4fca52835d6c75b970895c7d52e99b9:33e3aa71f8128de9df92ef3c5381a8194253f0995401d27c8ddb06153ff4e015 resultSpec: dimensions: - localIdentifier: dim_0 @@ -346,7 +346,7 @@ interactions: resultSize: 15444 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5f2924bed6bbd4d2ef6c6e5ddf87d0c0b14af08d%3A1a68011bef797ddebccd73d1c35929710bd7fe9fd02207919208129b1a5028e7?offset=0%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b33465fff4fca52835d6c75b970895c7d52e99b9%3A33e3aa71f8128de9df92ef3c5381a8194253f0995401d27c8ddb06153ff4e015?offset=0%2C0&limit=100%2C100 body: null headers: Accept: @@ -2830,7 +2830,7 @@ interactions: dataSourceMessages: [] - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5f2924bed6bbd4d2ef6c6e5ddf87d0c0b14af08d%3A1a68011bef797ddebccd73d1c35929710bd7fe9fd02207919208129b1a5028e7/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b33465fff4fca52835d6c75b970895c7d52e99b9%3A33e3aa71f8128de9df92ef3c5381a8194253f0995401d27c8ddb06153ff4e015/metadata body: null headers: Accept: @@ -2970,7 +2970,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 5f2924bed6bbd4d2ef6c6e5ddf87d0c0b14af08d:1a68011bef797ddebccd73d1c35929710bd7fe9fd02207919208129b1a5028e7 + executionResult: b33465fff4fca52835d6c75b970895c7d52e99b9:33e3aa71f8128de9df92ef3c5381a8194253f0995401d27c8ddb06153ff4e015 resultSpec: dimensions: - localIdentifier: dim_0 @@ -3003,7 +3003,7 @@ interactions: resultSize: 15444 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5f2924bed6bbd4d2ef6c6e5ddf87d0c0b14af08d%3A1a68011bef797ddebccd73d1c35929710bd7fe9fd02207919208129b1a5028e7?offset=0%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b33465fff4fca52835d6c75b970895c7d52e99b9%3A33e3aa71f8128de9df92ef3c5381a8194253f0995401d27c8ddb06153ff4e015?offset=0%2C0&limit=100%2C100 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim1.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim1.yaml index 60b09e12b..9f62e7b5d 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim1.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim1.yaml @@ -90,7 +90,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - e719d792-cc45-43d3-bbfe-3f699caec6ac + - 809faecd-30bf-478b-9543-3d21766d5379 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -153,10 +153,10 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: 4d70b2f5dc82de826023bd64a95a9b6cece1fc90:727263b01ce1783fb5c523537135e11e675307f8552f0094ccebb2e30d794188 + executionResult: b08cc19b914df75302212d9fd22047afaa261a71:7090161623657c2301331a438f48a251f0fe28cfea941727802b0fd223053426 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/4d70b2f5dc82de826023bd64a95a9b6cece1fc90%3A727263b01ce1783fb5c523537135e11e675307f8552f0094ccebb2e30d794188/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b08cc19b914df75302212d9fd22047afaa261a71%3A7090161623657c2301331a438f48a251f0fe28cfea941727802b0fd223053426/metadata body: null headers: Accept: @@ -296,7 +296,7 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: 4d70b2f5dc82de826023bd64a95a9b6cece1fc90:727263b01ce1783fb5c523537135e11e675307f8552f0094ccebb2e30d794188 + executionResult: b08cc19b914df75302212d9fd22047afaa261a71:7090161623657c2301331a438f48a251f0fe28cfea941727802b0fd223053426 resultSpec: dimensions: - localIdentifier: dim_0 @@ -313,7 +313,7 @@ interactions: resultSize: 4625 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/4d70b2f5dc82de826023bd64a95a9b6cece1fc90%3A727263b01ce1783fb5c523537135e11e675307f8552f0094ccebb2e30d794188?offset=0%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b08cc19b914df75302212d9fd22047afaa261a71%3A7090161623657c2301331a438f48a251f0fe28cfea941727802b0fd223053426?offset=0%2C0&limit=100%2C100 body: null headers: Accept: @@ -1088,7 +1088,7 @@ interactions: dataSourceMessages: [] - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/4d70b2f5dc82de826023bd64a95a9b6cece1fc90%3A727263b01ce1783fb5c523537135e11e675307f8552f0094ccebb2e30d794188/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b08cc19b914df75302212d9fd22047afaa261a71%3A7090161623657c2301331a438f48a251f0fe28cfea941727802b0fd223053426/metadata body: null headers: Accept: @@ -1228,7 +1228,7 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: 4d70b2f5dc82de826023bd64a95a9b6cece1fc90:727263b01ce1783fb5c523537135e11e675307f8552f0094ccebb2e30d794188 + executionResult: b08cc19b914df75302212d9fd22047afaa261a71:7090161623657c2301331a438f48a251f0fe28cfea941727802b0fd223053426 resultSpec: dimensions: - localIdentifier: dim_0 @@ -1245,7 +1245,7 @@ interactions: resultSize: 4625 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/4d70b2f5dc82de826023bd64a95a9b6cece1fc90%3A727263b01ce1783fb5c523537135e11e675307f8552f0094ccebb2e30d794188?offset=0%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b08cc19b914df75302212d9fd22047afaa261a71%3A7090161623657c2301331a438f48a251f0fe28cfea941727802b0fd223053426?offset=0%2C0&limit=100%2C100 body: null headers: Accept: @@ -2020,7 +2020,7 @@ interactions: dataSourceMessages: [] - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/4d70b2f5dc82de826023bd64a95a9b6cece1fc90%3A727263b01ce1783fb5c523537135e11e675307f8552f0094ccebb2e30d794188/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b08cc19b914df75302212d9fd22047afaa261a71%3A7090161623657c2301331a438f48a251f0fe28cfea941727802b0fd223053426/metadata body: null headers: Accept: @@ -2160,7 +2160,7 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: 4d70b2f5dc82de826023bd64a95a9b6cece1fc90:727263b01ce1783fb5c523537135e11e675307f8552f0094ccebb2e30d794188 + executionResult: b08cc19b914df75302212d9fd22047afaa261a71:7090161623657c2301331a438f48a251f0fe28cfea941727802b0fd223053426 resultSpec: dimensions: - localIdentifier: dim_0 @@ -2177,7 +2177,7 @@ interactions: resultSize: 4625 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/4d70b2f5dc82de826023bd64a95a9b6cece1fc90%3A727263b01ce1783fb5c523537135e11e675307f8552f0094ccebb2e30d794188?offset=0%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b08cc19b914df75302212d9fd22047afaa261a71%3A7090161623657c2301331a438f48a251f0fe28cfea941727802b0fd223053426?offset=0%2C0&limit=100%2C100 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim2.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim2.yaml index 1f83502c9..13288f735 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim2.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim2.yaml @@ -90,7 +90,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - d25f2bd6-cf60-49a8-9a28-26d1d6743695 + - b9795598-f232-4f1b-bf1c-2dad62ead197 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -153,10 +153,10 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: 5da80bb6e45a200962ed00c7429eedd42c71a629:652e0bb712e711141d6155d8ca23758c2b2ef5752a25f730de27f2b52a8e1d95 + executionResult: c7ee135368c79fc0ed685485c5e6dd75d72b5e02:e310dc6b36859d61f5bf0db8eb4c3b21becbf670a0c3e606946e310ac166a9cc - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5da80bb6e45a200962ed00c7429eedd42c71a629%3A652e0bb712e711141d6155d8ca23758c2b2ef5752a25f730de27f2b52a8e1d95/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/c7ee135368c79fc0ed685485c5e6dd75d72b5e02%3Ae310dc6b36859d61f5bf0db8eb4c3b21becbf670a0c3e606946e310ac166a9cc/metadata body: null headers: Accept: @@ -296,7 +296,7 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: 5da80bb6e45a200962ed00c7429eedd42c71a629:652e0bb712e711141d6155d8ca23758c2b2ef5752a25f730de27f2b52a8e1d95 + executionResult: c7ee135368c79fc0ed685485c5e6dd75d72b5e02:e310dc6b36859d61f5bf0db8eb4c3b21becbf670a0c3e606946e310ac166a9cc resultSpec: dimensions: - localIdentifier: dim_0 @@ -313,7 +313,7 @@ interactions: resultSize: 11457 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5da80bb6e45a200962ed00c7429eedd42c71a629%3A652e0bb712e711141d6155d8ca23758c2b2ef5752a25f730de27f2b52a8e1d95?offset=0%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/c7ee135368c79fc0ed685485c5e6dd75d72b5e02%3Ae310dc6b36859d61f5bf0db8eb4c3b21becbf670a0c3e606946e310ac166a9cc?offset=0%2C0&limit=100%2C100 body: null headers: Accept: @@ -1480,7 +1480,7 @@ interactions: dataSourceMessages: [] - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5da80bb6e45a200962ed00c7429eedd42c71a629%3A652e0bb712e711141d6155d8ca23758c2b2ef5752a25f730de27f2b52a8e1d95?offset=100%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/c7ee135368c79fc0ed685485c5e6dd75d72b5e02%3Ae310dc6b36859d61f5bf0db8eb4c3b21becbf670a0c3e606946e310ac166a9cc?offset=100%2C0&limit=100%2C100 body: null headers: Accept: @@ -2449,7 +2449,7 @@ interactions: dataSourceMessages: [] - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5da80bb6e45a200962ed00c7429eedd42c71a629%3A652e0bb712e711141d6155d8ca23758c2b2ef5752a25f730de27f2b52a8e1d95/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/c7ee135368c79fc0ed685485c5e6dd75d72b5e02%3Ae310dc6b36859d61f5bf0db8eb4c3b21becbf670a0c3e606946e310ac166a9cc/metadata body: null headers: Accept: @@ -2589,7 +2589,7 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: 5da80bb6e45a200962ed00c7429eedd42c71a629:652e0bb712e711141d6155d8ca23758c2b2ef5752a25f730de27f2b52a8e1d95 + executionResult: c7ee135368c79fc0ed685485c5e6dd75d72b5e02:e310dc6b36859d61f5bf0db8eb4c3b21becbf670a0c3e606946e310ac166a9cc resultSpec: dimensions: - localIdentifier: dim_0 @@ -2606,7 +2606,7 @@ interactions: resultSize: 11457 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5da80bb6e45a200962ed00c7429eedd42c71a629%3A652e0bb712e711141d6155d8ca23758c2b2ef5752a25f730de27f2b52a8e1d95?offset=0%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/c7ee135368c79fc0ed685485c5e6dd75d72b5e02%3Ae310dc6b36859d61f5bf0db8eb4c3b21becbf670a0c3e606946e310ac166a9cc?offset=0%2C0&limit=100%2C100 body: null headers: Accept: @@ -3773,7 +3773,7 @@ interactions: dataSourceMessages: [] - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5da80bb6e45a200962ed00c7429eedd42c71a629%3A652e0bb712e711141d6155d8ca23758c2b2ef5752a25f730de27f2b52a8e1d95?offset=100%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/c7ee135368c79fc0ed685485c5e6dd75d72b5e02%3Ae310dc6b36859d61f5bf0db8eb4c3b21becbf670a0c3e606946e310ac166a9cc?offset=100%2C0&limit=100%2C100 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim3.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim3.yaml index a6de97d20..b7bdc35e0 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim3.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_exec_def_two_dim3.yaml @@ -90,7 +90,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 94edfd58-a6d9-4b7e-b615-37d7d4e73e9b + - 6f8c0bbc-8587-4326-83aa-9128f8851532 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -153,10 +153,10 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: f787654fc28ef09f1bdd10028d8f9341b10fd4bf:daa410610a6a9bcfc4b973edf393a1c372627046a05ea69e199891fda0b946ae + executionResult: f054ff5939cf2a5aaf9ee2d0d7678b386e4123d6:c590ba475078f344c9f0a8807f50e59ad26a4b9a31a6b1c646a3f14058e1625a - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/f787654fc28ef09f1bdd10028d8f9341b10fd4bf%3Adaa410610a6a9bcfc4b973edf393a1c372627046a05ea69e199891fda0b946ae/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/f054ff5939cf2a5aaf9ee2d0d7678b386e4123d6%3Ac590ba475078f344c9f0a8807f50e59ad26a4b9a31a6b1c646a3f14058e1625a/metadata body: null headers: Accept: @@ -296,7 +296,7 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: f787654fc28ef09f1bdd10028d8f9341b10fd4bf:daa410610a6a9bcfc4b973edf393a1c372627046a05ea69e199891fda0b946ae + executionResult: f054ff5939cf2a5aaf9ee2d0d7678b386e4123d6:c590ba475078f344c9f0a8807f50e59ad26a4b9a31a6b1c646a3f14058e1625a resultSpec: dimensions: - localIdentifier: dim_0 @@ -313,7 +313,7 @@ interactions: resultSize: 3152 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/f787654fc28ef09f1bdd10028d8f9341b10fd4bf%3Adaa410610a6a9bcfc4b973edf393a1c372627046a05ea69e199891fda0b946ae?offset=0%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/f054ff5939cf2a5aaf9ee2d0d7678b386e4123d6%3Ac590ba475078f344c9f0a8807f50e59ad26a4b9a31a6b1c646a3f14058e1625a?offset=0%2C0&limit=100%2C100 body: null headers: Accept: @@ -1540,7 +1540,7 @@ interactions: dataSourceMessages: [] - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/f787654fc28ef09f1bdd10028d8f9341b10fd4bf%3Adaa410610a6a9bcfc4b973edf393a1c372627046a05ea69e199891fda0b946ae/metadata + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/f054ff5939cf2a5aaf9ee2d0d7678b386e4123d6%3Ac590ba475078f344c9f0a8807f50e59ad26a4b9a31a6b1c646a3f14058e1625a/metadata body: null headers: Accept: @@ -1680,7 +1680,7 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: f787654fc28ef09f1bdd10028d8f9341b10fd4bf:daa410610a6a9bcfc4b973edf393a1c372627046a05ea69e199891fda0b946ae + executionResult: f054ff5939cf2a5aaf9ee2d0d7678b386e4123d6:c590ba475078f344c9f0a8807f50e59ad26a4b9a31a6b1c646a3f14058e1625a resultSpec: dimensions: - localIdentifier: dim_0 @@ -1697,7 +1697,7 @@ interactions: resultSize: 3152 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/f787654fc28ef09f1bdd10028d8f9341b10fd4bf%3Adaa410610a6a9bcfc4b973edf393a1c372627046a05ea69e199891fda0b946ae?offset=0%2C0&limit=100%2C100 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/f054ff5939cf2a5aaf9ee2d0d7678b386e4123d6%3Ac590ba475078f344c9f0a8807f50e59ad26a4b9a31a6b1c646a3f14058e1625a?offset=0%2C0&limit=100%2C100 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_items.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_items.yaml index 2abf8abd1..c15d791d3 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_items.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_items.yaml @@ -84,7 +84,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - a73d8ffc-b520-434f-b66d-9127666295d3 + - b3ca3aba-8eae-4080-ad3a-ec6057c4f7ec X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -132,7 +132,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 84b31dfcb81d4c41ee2e69867ad64a9293aa4549:37bf78a80daff74a94963d9f1cc1753b94f332e7ba30b5e8e48a2f887ad811b5 + executionResult: 9b9f6bdf1aba60e55a942d9bbd548edb7da0e573:f13e99776c8b4c21d6590b79b4e6325b3ad5636c3b0d5c2075b0b581960fc457 - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28region%2Cproducts.category%29&page=0&size=500 @@ -296,7 +296,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28%27region%27%2C%27products.category%27%29&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/84b31dfcb81d4c41ee2e69867ad64a9293aa4549%3A37bf78a80daff74a94963d9f1cc1753b94f332e7ba30b5e8e48a2f887ad811b5?offset=0%2C0&limit=2%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/9b9f6bdf1aba60e55a942d9bbd548edb7da0e573%3Af13e99776c8b4c21d6590b79b4e6325b3ad5636c3b0d5c2075b0b581960fc457?offset=0%2C0&limit=2%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_items_no_index.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_items_no_index.yaml index 2f2e74295..25398e94f 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_items_no_index.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_items_no_index.yaml @@ -84,7 +84,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 6c88e57a-b463-472f-a00f-e31327a582fc + - 6d5b4fc8-bd9f-486c-879e-dd98fb8948e9 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -132,7 +132,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 84b31dfcb81d4c41ee2e69867ad64a9293aa4549:37bf78a80daff74a94963d9f1cc1753b94f332e7ba30b5e8e48a2f887ad811b5 + executionResult: 9b9f6bdf1aba60e55a942d9bbd548edb7da0e573:f13e99776c8b4c21d6590b79b4e6325b3ad5636c3b0d5c2075b0b581960fc457 - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28region%2Cproducts.category%29&page=0&size=500 @@ -296,7 +296,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28%27region%27%2C%27products.category%27%29&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/84b31dfcb81d4c41ee2e69867ad64a9293aa4549%3A37bf78a80daff74a94963d9f1cc1753b94f332e7ba30b5e8e48a2f887ad811b5?offset=0%2C0&limit=2%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/9b9f6bdf1aba60e55a942d9bbd548edb7da0e573%3Af13e99776c8b4c21d6590b79b4e6325b3ad5636c3b0d5c2075b0b581960fc457?offset=0%2C0&limit=2%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_visualization.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_visualization.yaml index 8fdc20960..dd781573f 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_visualization.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_visualization.yaml @@ -371,7 +371,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 471f16c5-44ea-439f-b956-325908244960 + - e1a707ea-e574-428a-bede-8767e6d723e8 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -423,7 +423,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: e4fa78ce51c011ade31101b9f168e0d6401d09a5:aaf07d03576c1613b9fb1030a735fac4e76974f03e4c6c1abd964dd63c031e1a + executionResult: 05acd24e64426690f8f69704f94c5f47e469b041:134ec8afb7b652d4b0082e31e1757e11af37ed7000f20041a234951bd2af6f91 - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28products.category%2Cproduct_name%29&page=0&size=500 @@ -570,7 +570,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28%27products.category%27%2C%27product_name%27%29&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/e4fa78ce51c011ade31101b9f168e0d6401d09a5%3Aaaf07d03576c1613b9fb1030a735fac4e76974f03e4c6c1abd964dd63c031e1a?offset=0%2C0&limit=4%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/05acd24e64426690f8f69704f94c5f47e469b041%3A134ec8afb7b652d4b0082e31e1757e11af37ed7000f20041a234951bd2af6f91?offset=0%2C0&limit=4%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_visualization_date.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_visualization_date.yaml index 44ea39be2..31a3e5b7b 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_visualization_date.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_visualization_date.yaml @@ -276,7 +276,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 024dabbb-dd5b-4362-a818-888c575c0dec + - 7deadd8d-41f2-4680-ad8d-f30e3ab6c288 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -315,7 +315,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 9d4fdf9fa59ba79605909bac62ea3b584bae4306:0a212a77329fb901b3fe2f044edc35f89d1b6cee34aa6eda57e05a850238e7b9 + executionResult: b8f9edf404b4f155cafa77a3d6ea9cc4af243555:1689c60ae65f4a19caf0cbc8a4e0d042e5e6fec257795849efa454482dcbc953 - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28date.month%29&page=0&size=500 @@ -410,7 +410,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3D%3D%27date.month%27&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/9d4fdf9fa59ba79605909bac62ea3b584bae4306%3A0a212a77329fb901b3fe2f044edc35f89d1b6cee34aa6eda57e05a850238e7b9?offset=0%2C0&limit=2%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b8f9edf404b4f155cafa77a3d6ea9cc4af243555%3A1689c60ae65f4a19caf0cbc8a4e0d042e5e6fec257795849efa454482dcbc953?offset=0%2C0&limit=2%2C1000 body: null headers: Accept: @@ -429,7 +429,7 @@ interactions: Cache-Control: - no-cache, no-store, max-age=0, must-revalidate Content-Length: - - '1413' + - '1403' Content-Type: - application/json DATE: *id001 @@ -451,8 +451,7 @@ interactions: body: string: data: - - - 57 - - 62 + - - 62 - 60 - 51 - 60 @@ -463,8 +462,8 @@ interactions: - 56 - 90 - 60 - - - 197.37653846153847 - - 93.78964285714285 + - 64 + - - 93.78964285714285 - 115.96454545454546 - 241.92872340425532 - 270.91346938775513 @@ -475,6 +474,7 @@ interactions: - 160.19469387755103 - 178.3658536585366 - 185.4194 + - 146.6475 dimensionHeaders: - headerGroups: - headers: @@ -484,9 +484,6 @@ interactions: measureIndex: 1 - headerGroups: - headers: - - attributeHeader: - labelValue: 2025-02 - primaryLabelValue: 2025-02 - attributeHeader: labelValue: 2025-03 primaryLabelValue: 2025-03 @@ -520,6 +517,9 @@ interactions: - attributeHeader: labelValue: 2026-01 primaryLabelValue: 2026-01 + - attributeHeader: + labelValue: 2026-02 + primaryLabelValue: 2026-02 grandTotals: [] paging: count: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_visualization_no_index.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_visualization_no_index.yaml index c8a66ca92..322ab2695 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_visualization_no_index.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/dataframe_for_visualization_no_index.yaml @@ -371,7 +371,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 5bcfa15e-0eb1-43c4-9ad1-e1577ad937a4 + - d82c7803-1510-469e-9761-e56996108ed1 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -423,7 +423,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: e4fa78ce51c011ade31101b9f168e0d6401d09a5:aaf07d03576c1613b9fb1030a735fac4e76974f03e4c6c1abd964dd63c031e1a + executionResult: 05acd24e64426690f8f69704f94c5f47e469b041:134ec8afb7b652d4b0082e31e1757e11af37ed7000f20041a234951bd2af6f91 - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28products.category%2Cproduct_name%29&page=0&size=500 @@ -570,7 +570,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28%27products.category%27%2C%27product_name%27%29&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/e4fa78ce51c011ade31101b9f168e0d6401d09a5%3Aaaf07d03576c1613b9fb1030a735fac4e76974f03e4c6c1abd964dd63c031e1a?offset=0%2C0&limit=4%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/05acd24e64426690f8f69704f94c5f47e469b041%3A134ec8afb7b652d4b0082e31e1757e11af37ed7000f20041a234951bd2af6f91?offset=0%2C0&limit=4%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/empty_indexed_dataframe.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/empty_indexed_dataframe.yaml index 1e4601074..dccd39888 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/empty_indexed_dataframe.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/empty_indexed_dataframe.yaml @@ -77,7 +77,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - fdf00d9e-0433-436d-9f52-23a062bcae8c + - 42ae7a12-743c-484e-84ab-ef1c3d639b74 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -112,7 +112,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 9f9773fef7c75cf03baf8f0f54fc176df011cdab:6292e6de07a100badd1c83e8415ca23954eee9b57e921df8b5d30874c5d671ab + executionResult: 673569b978b1429f36b961f8184f4e8a62fadad8:77d2dd30c0a270bf3c341f05644c04cc4866aa357f7196e80dd530324f3bde1e - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28product_name%29&page=0&size=500 @@ -219,7 +219,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3D%3D%27product_name%27&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/9f9773fef7c75cf03baf8f0f54fc176df011cdab%3A6292e6de07a100badd1c83e8415ca23954eee9b57e921df8b5d30874c5d671ab?offset=0%2C0&limit=2%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/673569b978b1429f36b961f8184f4e8a62fadad8%3A77d2dd30c0a270bf3c341f05644c04cc4866aa357f7196e80dd530324f3bde1e?offset=0%2C0&limit=2%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/empty_not_indexed_dataframe.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/empty_not_indexed_dataframe.yaml index 999611813..a85aa0201 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/empty_not_indexed_dataframe.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/empty_not_indexed_dataframe.yaml @@ -77,7 +77,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - ebef8814-1e5e-43cb-95e1-4c59024a9ac3 + - be329ba7-e47a-4c4d-aab4-c863238a3f94 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -112,7 +112,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 9f9773fef7c75cf03baf8f0f54fc176df011cdab:6292e6de07a100badd1c83e8415ca23954eee9b57e921df8b5d30874c5d671ab + executionResult: 673569b978b1429f36b961f8184f4e8a62fadad8:77d2dd30c0a270bf3c341f05644c04cc4866aa357f7196e80dd530324f3bde1e - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28product_name%29&page=0&size=500 @@ -219,7 +219,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3D%3D%27product_name%27&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/9f9773fef7c75cf03baf8f0f54fc176df011cdab%3A6292e6de07a100badd1c83e8415ca23954eee9b57e921df8b5d30874c5d671ab?offset=0%2C0&limit=2%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/673569b978b1429f36b961f8184f4e8a62fadad8%3A77d2dd30c0a270bf3c341f05644c04cc4866aa357f7196e80dd530324f3bde1e?offset=0%2C0&limit=2%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/filtered_empty_df.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/filtered_empty_df.yaml index 10c94dd7d..55a4422f9 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/filtered_empty_df.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/filtered_empty_df.yaml @@ -68,7 +68,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 374aae05-a2b2-407d-ae48-89f5c621eda7 + - 8dc1b36d-8da5-4199-8ac8-4e958acfe68b X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -83,10 +83,10 @@ interactions: name: Revenue localIdentifier: dim_0 links: - executionResult: cf77f69345043b940d6645120620d3a4fa345b7b:9fe6390637bcf60e0aa0ccd421baa63e26917bc128de62364b13d5e5990c4f54 + executionResult: a4e1654a14604baf3ff3cd4432288355e5793aa0:a13f8d6dd5ecc1f5ded47246230bdaaf83124a921495dfcfb780499c414390e1 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/cf77f69345043b940d6645120620d3a4fa345b7b%3A9fe6390637bcf60e0aa0ccd421baa63e26917bc128de62364b13d5e5990c4f54?offset=0&limit=1 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/a4e1654a14604baf3ff3cd4432288355e5793aa0%3Aa13f8d6dd5ecc1f5ded47246230bdaaf83124a921495dfcfb780499c414390e1?offset=0&limit=1 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label.yaml index d29992378..35e873453 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label.yaml @@ -102,7 +102,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 6ad792bf-85de-46ab-bc57-ed9f18fc1d65 + - c8646405-9e2a-4809-97c1-06f181e6c988 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -167,7 +167,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 2c02040f096d0e4af41a99c58598b77fc4fc6ea5:477d985e1a894544e188dc092c4916bc2df89035678ca0bdbfac7fc737752401 + executionResult: 55944cc3c9c711a00fd558c7d6484d50d36fda36:dc79e77ba71c8fcabcb0dff5f1a7f1810b69ec62fc887a527ff5715741d57471 - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28state%2Cregion%2Cproducts.category%29&page=0&size=500 @@ -391,7 +391,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28%27state%27%2C%27region%27%2C%27products.category%27%29&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/2c02040f096d0e4af41a99c58598b77fc4fc6ea5%3A477d985e1a894544e188dc092c4916bc2df89035678ca0bdbfac7fc737752401?offset=0%2C0&limit=2%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/55944cc3c9c711a00fd558c7d6484d50d36fda36%3Adc79e77ba71c8fcabcb0dff5f1a7f1810b69ec62fc887a527ff5715741d57471?offset=0%2C0&limit=2%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label_reuse.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label_reuse.yaml index eeb6a58ec..9efb863d6 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label_reuse.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_filtered_metrics_and_label_reuse.yaml @@ -91,7 +91,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 59666652-1ff9-451b-a86f-57b84bc0a3da + - 4567cbbb-9cd6-454b-8815-c9e88a7e53fb X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -141,7 +141,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 1f8a3ac9a9075fdea2175a4ccfd1f7b50427fea5:51193f1bd2e11e748057d292c2859e46983abfb45eb910276a43e08c1438263e + executionResult: d105da84a1b85c9d51cec0490026299aadc9469f:7fb6a97209d83a05df6c430af1772be7bdac3c356915d57a67096de2a9f3332f - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28region%2Cproducts.category%29&page=0&size=500 @@ -305,7 +305,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28%27region%27%2C%27products.category%27%29&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/1f8a3ac9a9075fdea2175a4ccfd1f7b50427fea5%3A51193f1bd2e11e748057d292c2859e46983abfb45eb910276a43e08c1438263e?offset=0%2C0&limit=2%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/d105da84a1b85c9d51cec0490026299aadc9469f%3A7fb6a97209d83a05df6c430af1772be7bdac3c356915d57a67096de2a9f3332f?offset=0%2C0&limit=2%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_metrics.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_metrics.yaml index 5c20f2691..d720391d5 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_metrics.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_metrics.yaml @@ -83,7 +83,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 6463f639-2477-42f6-b8b1-4bf955f2033b + - beac304b-a6b0-4f5c-9e6e-3ad1dc94158b X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -133,7 +133,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 05f8944478156fffc0e091c069d9288c5ac25a28:b16707cce31b7dc93a39fb22cb40c9f53d4df6088f4cce2ac95b3789a501db92 + executionResult: eaa328b1a8055cbd75f07e14c946107fb3903bd2:a0c0c5e19d72544bf32240aa5f7ead36c24fe9368fc2a5a0b474c6ead9735a8e - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28region%2Cproducts.category%29&page=0&size=500 @@ -297,7 +297,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28%27region%27%2C%27products.category%27%29&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/05f8944478156fffc0e091c069d9288c5ac25a28%3Ab16707cce31b7dc93a39fb22cb40c9f53d4df6088f4cce2ac95b3789a501db92?offset=0%2C0&limit=2%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/eaa328b1a8055cbd75f07e14c946107fb3903bd2%3Aa0c0c5e19d72544bf32240aa5f7ead36c24fe9368fc2a5a0b474c6ead9735a8e?offset=0%2C0&limit=2%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_metrics_and_label.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_metrics_and_label.yaml index 4386ab518..b782d9fb6 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_metrics_and_label.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/multi_index_metrics_and_label.yaml @@ -89,7 +89,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 9fc42477-8765-4a63-a0cd-a4d42e6d49c9 + - e2e3730c-e79f-48dd-b5c1-8900236c5634 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -154,7 +154,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 7a6b16f3e2806f27ebd8611bcb3a061a94a4dfb1:2484456eac3644131f3d7d434e2a8b831634fe7b96c713ed0de2d6bdb0aa3862 + executionResult: 8071fbaa27da6c7873391ceeef6d2e94d0492201:6ab7393f5b6b786cf55c0603c68fb404cd0f2f4a632eade44adf051d13c85416 - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28state%2Cregion%2Cproducts.category%29&page=0&size=500 @@ -378,7 +378,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28%27state%27%2C%27region%27%2C%27products.category%27%29&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/7a6b16f3e2806f27ebd8611bcb3a061a94a4dfb1%3A2484456eac3644131f3d7d434e2a8b831634fe7b96c713ed0de2d6bdb0aa3862?offset=0%2C0&limit=2%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/8071fbaa27da6c7873391ceeef6d2e94d0492201%3A6ab7393f5b6b786cf55c0603c68fb404cd0f2f4a632eade44adf051d13c85416?offset=0%2C0&limit=2%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/not_indexed_filtered_metrics_and_labels.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/not_indexed_filtered_metrics_and_labels.yaml index 300d6b162..8b762f0d9 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/not_indexed_filtered_metrics_and_labels.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/not_indexed_filtered_metrics_and_labels.yaml @@ -85,7 +85,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 9ae3d46c-ce4f-4647-b31c-47279d11a961 + - ed5cd1a3-0956-45b8-9540-0ccf0560cdef X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -120,7 +120,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 509a554f4b8d4a03e7bf47f091040b9e239b0f11:d1ddf33a20f776455c9bd4b5ce541a8252dd11fb4dd077dc936aaf2d243d88b9 + executionResult: b43cb6f0d635808f32bb23f2409b612ce25b10e6:43e45f1893ba53e908bfad81c7176e7493cfa21d838efdf42cbe5f993e6b271a - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28region%29&page=0&size=500 @@ -227,7 +227,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3D%3D%27region%27&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/509a554f4b8d4a03e7bf47f091040b9e239b0f11%3Ad1ddf33a20f776455c9bd4b5ce541a8252dd11fb4dd077dc936aaf2d243d88b9?offset=0%2C0&limit=2%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b43cb6f0d635808f32bb23f2409b612ce25b10e6%3A43e45f1893ba53e908bfad81c7176e7493cfa21d838efdf42cbe5f993e6b271a?offset=0%2C0&limit=2%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/not_indexed_metrics.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/not_indexed_metrics.yaml index ebd92daf4..e4b496bb4 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/not_indexed_metrics.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/not_indexed_metrics.yaml @@ -69,7 +69,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - ef16ff95-f2ca-44b4-a742-788fe19a2920 + - 4b683bd5-954f-4f49-ad23-160abf36d239 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -87,10 +87,10 @@ interactions: name: '# of Orders' localIdentifier: dim_0 links: - executionResult: ac3fa8d126a0ff1220c62bff1393bdfc07553ff3:5c7758f55fe50e9e23e93815333d5a62e5a977c8cd4960e9ab4dc46826cfc75e + executionResult: 8980c0d00c31c065249375b7a8eeab2a50e7c183:b7223cadae1ae10f3708db766704f11446ec64227a4f6a0d57e54e2831d30eb1 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/ac3fa8d126a0ff1220c62bff1393bdfc07553ff3%3A5c7758f55fe50e9e23e93815333d5a62e5a977c8cd4960e9ab4dc46826cfc75e?offset=0&limit=2 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/8980c0d00c31c065249375b7a8eeab2a50e7c183%3Ab7223cadae1ae10f3708db766704f11446ec64227a4f6a0d57e54e2831d30eb1?offset=0&limit=2 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/not_indexed_metrics_and_labels.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/not_indexed_metrics_and_labels.yaml index 9bb976442..5d22214ee 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/not_indexed_metrics_and_labels.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/not_indexed_metrics_and_labels.yaml @@ -77,7 +77,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 00c326ed-7c57-4f61-917a-429fd247a08d + - 84445355-2c73-4bff-b1eb-15baa570eda6 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -112,7 +112,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 4bddf4939359ca3d7c332ceae6d33c3f633e33b2:075bc4be3642052156348ec4c30522c7780ceff82625bf7ff5e1a31e42818b3d + executionResult: 0f26e8137ec74c0f229e3f84a5d893b6885ddf9e:515baa54447f60e61a52361dad5eefe4402c67b61189d0e9e442dbe63bbbe133 - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28region%29&page=0&size=500 @@ -219,7 +219,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3D%3D%27region%27&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/4bddf4939359ca3d7c332ceae6d33c3f633e33b2%3A075bc4be3642052156348ec4c30522c7780ceff82625bf7ff5e1a31e42818b3d?offset=0%2C0&limit=2%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/0f26e8137ec74c0f229e3f84a5d893b6885ddf9e%3A515baa54447f60e61a52361dad5eefe4402c67b61189d0e9e442dbe63bbbe133?offset=0%2C0&limit=2%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/simple_index_filtered_metrics_and_label.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/simple_index_filtered_metrics_and_label.yaml index 2ad712eb2..7317d2e0e 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/simple_index_filtered_metrics_and_label.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/simple_index_filtered_metrics_and_label.yaml @@ -122,7 +122,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 7442dd5c-dad3-4546-b76b-d51b88e06832 + - 78e9acb9-e936-44b0-a031-a196126c9ffd X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -168,7 +168,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 16a6b4b766c98c408ffca790f2cb0c2401c86564:26cdda60eccd31ea530ae9c822cce7ab940d1f12e998a4a143166f676758114d + executionResult: 136081cd55528c2796cff400652e9f631e6a55fa:a6f0e6c3f79836b9d9bb738927b4c9e116e5b8233d7486d118f2b390cdf570b9 - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28products.category%2Cregion%29&page=0&size=500 @@ -332,7 +332,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28%27products.category%27%2C%27region%27%29&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/16a6b4b766c98c408ffca790f2cb0c2401c86564%3A26cdda60eccd31ea530ae9c822cce7ab940d1f12e998a4a143166f676758114d?offset=0%2C0&limit=2%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/136081cd55528c2796cff400652e9f631e6a55fa%3Aa6f0e6c3f79836b9d9bb738927b4c9e116e5b8233d7486d118f2b390cdf570b9?offset=0%2C0&limit=2%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/simple_index_metrics.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/simple_index_metrics.yaml index 2f73298e7..e5a559505 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/simple_index_metrics.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/simple_index_metrics.yaml @@ -75,7 +75,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 33317aa8-8fd3-4754-ba33-6a52b2d6c3b9 + - 52bfb731-b0f5-4384-a3d4-70b6244c968f X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -120,7 +120,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 61f4421c6062670bcb644d23be49da3f27796cc8:8327ebaf42a3816bf2d74be9359c3c2c39325c6b16a932e2620ae8ac351325c2 + executionResult: 276a088985a4168494b79699e379b6d1c552b61a:2607e565c9fe0a96c944954ff6a6b1599724f9c3a483c7dd38e8030a992e5a1b - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28region%2Cproducts.category%29&page=0&size=500 @@ -284,7 +284,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28%27region%27%2C%27products.category%27%29&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/61f4421c6062670bcb644d23be49da3f27796cc8%3A8327ebaf42a3816bf2d74be9359c3c2c39325c6b16a932e2620ae8ac351325c2?offset=0%2C0&limit=1%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/276a088985a4168494b79699e379b6d1c552b61a%3A2607e565c9fe0a96c944954ff6a6b1599724f9c3a483c7dd38e8030a992e5a1b?offset=0%2C0&limit=1%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/simple_index_metrics_and_label.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/simple_index_metrics_and_label.yaml index 431e905a5..80d925ce1 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/simple_index_metrics_and_label.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/simple_index_metrics_and_label.yaml @@ -79,7 +79,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - ea0479bb-1fd0-41a5-92f0-10bd781614a3 + - c6d62cbc-5db3-4e8c-b0f8-49421a8a12dc X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -110,7 +110,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 91cbface659a3577c2c5a2449c46f4332dac93f1:f108ffba5514baff4c6974c00ce8ce6e3d91ff18f1fd7fc3d9251edc1cb42524 + executionResult: 54c8ff7cfa604de78cfb8734a2dd91fa79ef34ea:20bb42799da8f654146113a5d03dc9a1904acddddbf35be960dafcab6d758ee5 - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28region%29&page=0&size=500 @@ -217,7 +217,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3D%3D%27region%27&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/91cbface659a3577c2c5a2449c46f4332dac93f1%3Af108ffba5514baff4c6974c00ce8ce6e3d91ff18f1fd7fc3d9251edc1cb42524?offset=0%2C0&limit=2%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/54c8ff7cfa604de78cfb8734a2dd91fa79ef34ea%3A20bb42799da8f654146113a5d03dc9a1904acddddbf35be960dafcab6d758ee5?offset=0%2C0&limit=2%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/dataframe/fixtures/simple_index_metrics_no_duplicate.yaml b/packages/gooddata-pandas/tests/dataframe/fixtures/simple_index_metrics_no_duplicate.yaml index 3e9c03f80..2084d7939 100644 --- a/packages/gooddata-pandas/tests/dataframe/fixtures/simple_index_metrics_no_duplicate.yaml +++ b/packages/gooddata-pandas/tests/dataframe/fixtures/simple_index_metrics_no_duplicate.yaml @@ -79,7 +79,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 2f8324a4-bc69-4c4f-b8be-d2b132984481 + - 2fe6b00a-4a10-499d-8246-32059b710f35 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -110,7 +110,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 91cbface659a3577c2c5a2449c46f4332dac93f1:f108ffba5514baff4c6974c00ce8ce6e3d91ff18f1fd7fc3d9251edc1cb42524 + executionResult: 54c8ff7cfa604de78cfb8734a2dd91fa79ef34ea:20bb42799da8f654146113a5d03dc9a1904acddddbf35be960dafcab6d758ee5 - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28region%29&page=0&size=500 @@ -217,7 +217,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3D%3D%27region%27&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/91cbface659a3577c2c5a2449c46f4332dac93f1%3Af108ffba5514baff4c6974c00ce8ce6e3d91ff18f1fd7fc3d9251edc1cb42524?offset=0%2C0&limit=2%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/54c8ff7cfa604de78cfb8734a2dd91fa79ef34ea%3A20bb42799da8f654146113a5d03dc9a1904acddddbf35be960dafcab6d758ee5?offset=0%2C0&limit=2%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/series/fixtures/multi_index_filtered_series.yaml b/packages/gooddata-pandas/tests/series/fixtures/multi_index_filtered_series.yaml index 9f3e2ecfa..abacfb98a 100644 --- a/packages/gooddata-pandas/tests/series/fixtures/multi_index_filtered_series.yaml +++ b/packages/gooddata-pandas/tests/series/fixtures/multi_index_filtered_series.yaml @@ -83,7 +83,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 2d2c438a-6407-43ed-9ace-06b3003c429f + - 946f1aad-bdb9-401f-bb20-be40f3ba3876 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -128,7 +128,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 0f91f5ef07da2bd92ecd487a78304eb1463d2e7f:ee1f8db666140aa48911224ecc5b5c513a18e854b1ad0948f8021566275902c9 + executionResult: 26db4115f3cf336cc7c93e7940cf8e1bd09391c4:a6a45efb9208473b2dc473b9d180d692c68ee44d305af68a1ee8a02fb2b6ba2d - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28region%2Cproducts.category%29&page=0&size=500 @@ -292,7 +292,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28%27region%27%2C%27products.category%27%29&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/0f91f5ef07da2bd92ecd487a78304eb1463d2e7f%3Aee1f8db666140aa48911224ecc5b5c513a18e854b1ad0948f8021566275902c9?offset=0%2C0&limit=1%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/26db4115f3cf336cc7c93e7940cf8e1bd09391c4%3Aa6a45efb9208473b2dc473b9d180d692c68ee44d305af68a1ee8a02fb2b6ba2d?offset=0%2C0&limit=1%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/series/fixtures/multi_index_metric_series.yaml b/packages/gooddata-pandas/tests/series/fixtures/multi_index_metric_series.yaml index 9de896641..c74e6661d 100644 --- a/packages/gooddata-pandas/tests/series/fixtures/multi_index_metric_series.yaml +++ b/packages/gooddata-pandas/tests/series/fixtures/multi_index_metric_series.yaml @@ -75,7 +75,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - a0c75617-88f6-457b-9b66-1aed2e0e9aaf + - c3fb0cdc-a881-4a8a-bd79-2681e64bdb68 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -120,7 +120,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 61f4421c6062670bcb644d23be49da3f27796cc8:8327ebaf42a3816bf2d74be9359c3c2c39325c6b16a932e2620ae8ac351325c2 + executionResult: 276a088985a4168494b79699e379b6d1c552b61a:2607e565c9fe0a96c944954ff6a6b1599724f9c3a483c7dd38e8030a992e5a1b - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28region%2Cproducts.category%29&page=0&size=500 @@ -284,7 +284,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28%27region%27%2C%27products.category%27%29&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/61f4421c6062670bcb644d23be49da3f27796cc8%3A8327ebaf42a3816bf2d74be9359c3c2c39325c6b16a932e2620ae8ac351325c2?offset=0%2C0&limit=1%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/276a088985a4168494b79699e379b6d1c552b61a%3A2607e565c9fe0a96c944954ff6a6b1599724f9c3a483c7dd38e8030a992e5a1b?offset=0%2C0&limit=1%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/series/fixtures/not_indexed_filtered_metric_series.yaml b/packages/gooddata-pandas/tests/series/fixtures/not_indexed_filtered_metric_series.yaml index 38cd6ef86..3479800f5 100644 --- a/packages/gooddata-pandas/tests/series/fixtures/not_indexed_filtered_metric_series.yaml +++ b/packages/gooddata-pandas/tests/series/fixtures/not_indexed_filtered_metric_series.yaml @@ -61,7 +61,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 319bc2be-f73c-4564-bcea-230046ae733e + - 7f0d93e0-cefc-4ba9-9abc-9ab90c2fccf3 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -74,10 +74,10 @@ interactions: - localIdentifier: 27c4b665b9d047b1a66a149714f1c596 localIdentifier: dim_0 links: - executionResult: a2034e393829055d312ff607a69301be9fd4d4d6:7f257f50c4e2cfa4de3856acc8f3e80bc44acab5d6448843b08980638d557b8a + executionResult: 7745196c76e2b9968c351487a7f4429d31916d7f:a231f72aa9f3b057f726e41b5bdfb8b23b780f5ad6a598fa07e7cd08563b620e - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/a2034e393829055d312ff607a69301be9fd4d4d6%3A7f257f50c4e2cfa4de3856acc8f3e80bc44acab5d6448843b08980638d557b8a?offset=0&limit=1 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/7745196c76e2b9968c351487a7f4429d31916d7f%3Aa231f72aa9f3b057f726e41b5bdfb8b23b780f5ad6a598fa07e7cd08563b620e?offset=0&limit=1 body: null headers: Accept: @@ -201,7 +201,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - c02afbac-3063-45b0-b22f-77b275d793ac + - 3d29439e-d3dd-4a8e-8d19-70bbee9080af X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -214,10 +214,10 @@ interactions: - localIdentifier: 27c4b665b9d047b1a66a149714f1c596 localIdentifier: dim_0 links: - executionResult: ca59a1fde6013f5b54b7a3c291e811d2a740f192:12edb01d02a503eb1b6346638ada3fd6477ad4770680a9ee719636e47170bdd9 + executionResult: 5148685816465fc0574a6b27714afda40b588f37:3d06b12ce6f7984c4805af01c73c846a152e5d8bfa75c49a2df5808edd9b5c9d - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/ca59a1fde6013f5b54b7a3c291e811d2a740f192%3A12edb01d02a503eb1b6346638ada3fd6477ad4770680a9ee719636e47170bdd9?offset=0&limit=1 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5148685816465fc0574a6b27714afda40b588f37%3A3d06b12ce6f7984c4805af01c73c846a152e5d8bfa75c49a2df5808edd9b5c9d?offset=0&limit=1 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/series/fixtures/not_indexed_label_series.yaml b/packages/gooddata-pandas/tests/series/fixtures/not_indexed_label_series.yaml index e0522fb35..c600b8c22 100644 --- a/packages/gooddata-pandas/tests/series/fixtures/not_indexed_label_series.yaml +++ b/packages/gooddata-pandas/tests/series/fixtures/not_indexed_label_series.yaml @@ -56,7 +56,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 311ba5f1-708f-4f58-8d85-da55322ca690 + - f73b0a2b-7b7f-4324-982e-3c7a71ef8c2b X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -82,7 +82,7 @@ interactions: valueType: TEXT localIdentifier: dim_0 links: - executionResult: c03f39fe5f6c40dbc81a91af7c76a5dcaf1e498a:33b9380572c8766c601adfa7fa7c2c5247ac7a3334f666ebecc3156e3ad4687e + executionResult: 1cf6329143668556262d7025763a563718633a50:f27e54ec340fd88469781fd681e0f8c894779f69653a5e3bac65545fb1b528a0 - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28region%29&page=0&size=500 @@ -189,7 +189,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3D%3D%27region%27&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/c03f39fe5f6c40dbc81a91af7c76a5dcaf1e498a%3A33b9380572c8766c601adfa7fa7c2c5247ac7a3334f666ebecc3156e3ad4687e?offset=0&limit=1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/1cf6329143668556262d7025763a563718633a50%3Af27e54ec340fd88469781fd681e0f8c894779f69653a5e3bac65545fb1b528a0?offset=0&limit=1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/series/fixtures/not_indexed_label_series_with_granularity.yaml b/packages/gooddata-pandas/tests/series/fixtures/not_indexed_label_series_with_granularity.yaml index efbf969ec..b433afe69 100644 --- a/packages/gooddata-pandas/tests/series/fixtures/not_indexed_label_series_with_granularity.yaml +++ b/packages/gooddata-pandas/tests/series/fixtures/not_indexed_label_series_with_granularity.yaml @@ -62,7 +62,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - efb0bea0-3c7a-4c02-8e7b-eda54bcddbed + - bae20d4e-c84d-412f-b3c7-3d94439492eb X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -103,7 +103,7 @@ interactions: valueType: TEXT localIdentifier: dim_0 links: - executionResult: a3d9c6d4693d8831dab062c8985a19e2daba76cc:da4f7da0daeb19f4cbd6305a94815fe7df0154a0fff89133988a7276dedd9235 + executionResult: 0fc92ad2d19b5c62f230e72fdb721934c0f7ad2b:e0669c25c6781b58057a7f15b9d13b5b3f6c1f3f500d2f9ee440bc2faa0a6d4f - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28products.category%2Cregion%29&page=0&size=500 @@ -267,7 +267,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28%27products.category%27%2C%27region%27%29&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/a3d9c6d4693d8831dab062c8985a19e2daba76cc%3Ada4f7da0daeb19f4cbd6305a94815fe7df0154a0fff89133988a7276dedd9235?offset=0&limit=1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/0fc92ad2d19b5c62f230e72fdb721934c0f7ad2b%3Ae0669c25c6781b58057a7f15b9d13b5b3f6c1f3f500d2f9ee440bc2faa0a6d4f?offset=0&limit=1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/series/fixtures/not_indexed_metric_series.yaml b/packages/gooddata-pandas/tests/series/fixtures/not_indexed_metric_series.yaml index c478ef4a4..8332f2e2f 100644 --- a/packages/gooddata-pandas/tests/series/fixtures/not_indexed_metric_series.yaml +++ b/packages/gooddata-pandas/tests/series/fixtures/not_indexed_metric_series.yaml @@ -61,7 +61,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - da3dd688-dc0b-4289-bd25-0d1bf3c39da6 + - 79fbbb93-cbf5-4a53-b85b-5f12dd7ca7d4 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -74,10 +74,10 @@ interactions: - localIdentifier: 27c4b665b9d047b1a66a149714f1c596 localIdentifier: dim_0 links: - executionResult: a2034e393829055d312ff607a69301be9fd4d4d6:7f257f50c4e2cfa4de3856acc8f3e80bc44acab5d6448843b08980638d557b8a + executionResult: 7745196c76e2b9968c351487a7f4429d31916d7f:a231f72aa9f3b057f726e41b5bdfb8b23b780f5ad6a598fa07e7cd08563b620e - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/a2034e393829055d312ff607a69301be9fd4d4d6%3A7f257f50c4e2cfa4de3856acc8f3e80bc44acab5d6448843b08980638d557b8a?offset=0&limit=1 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/7745196c76e2b9968c351487a7f4429d31916d7f%3Aa231f72aa9f3b057f726e41b5bdfb8b23b780f5ad6a598fa07e7cd08563b620e?offset=0&limit=1 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/series/fixtures/not_indexed_metric_series_with_granularity.yaml b/packages/gooddata-pandas/tests/series/fixtures/not_indexed_metric_series_with_granularity.yaml index 2d51a425e..73909cce9 100644 --- a/packages/gooddata-pandas/tests/series/fixtures/not_indexed_metric_series_with_granularity.yaml +++ b/packages/gooddata-pandas/tests/series/fixtures/not_indexed_metric_series_with_granularity.yaml @@ -69,7 +69,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 80d6fe33-7703-4ea4-ae41-3ab2aedc7c87 + - 85023570-c25d-43b9-850b-32f4d30a99a4 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -99,7 +99,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 53d8df5e0f57bb3778fa52e09a5dbf3fe0d20593:411320e1b32e088701f9b07028c6d9022db8b9c332e7446b7c7088eb2dfe1e50 + executionResult: 0a18715ec1529a746e33a316c34d9a3abfbf03d0:00f52eef8cb1dcf875c76e8ef586342c660aa11664f7734d8cab7896dcb26ea9 - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28region%29&page=0&size=500 @@ -206,7 +206,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3D%3D%27region%27&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/53d8df5e0f57bb3778fa52e09a5dbf3fe0d20593%3A411320e1b32e088701f9b07028c6d9022db8b9c332e7446b7c7088eb2dfe1e50?offset=0%2C0&limit=1%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/0a18715ec1529a746e33a316c34d9a3abfbf03d0%3A00f52eef8cb1dcf875c76e8ef586342c660aa11664f7734d8cab7896dcb26ea9?offset=0%2C0&limit=1%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/series/fixtures/simple_index_filtered_series.yaml b/packages/gooddata-pandas/tests/series/fixtures/simple_index_filtered_series.yaml index 2185f6062..0ada91e5f 100644 --- a/packages/gooddata-pandas/tests/series/fixtures/simple_index_filtered_series.yaml +++ b/packages/gooddata-pandas/tests/series/fixtures/simple_index_filtered_series.yaml @@ -78,7 +78,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 600573ec-101c-459e-9ffc-c6b52620f0f8 + - 4444fc8e-b7bd-488c-9184-b9bc0f8da73d X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -119,7 +119,7 @@ interactions: valueType: TEXT localIdentifier: dim_0 links: - executionResult: 9f9d3b1b81d7485abba2e04baf35d6881c5d49ef:993db9220c07fe0207339ea9f23514f593b996448937880b2f355ba3a21a022b + executionResult: 056a2abdd2f0fb02aef374628559c2664ae1e8e2:246b24e44f830f2348404f4cebd8cf46523ee356941b6e298cf44bd51647fd29 - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28products.category%2Cregion%29&page=0&size=500 @@ -283,7 +283,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28%27products.category%27%2C%27region%27%29&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/9f9d3b1b81d7485abba2e04baf35d6881c5d49ef%3A993db9220c07fe0207339ea9f23514f593b996448937880b2f355ba3a21a022b?offset=0&limit=1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/056a2abdd2f0fb02aef374628559c2664ae1e8e2%3A246b24e44f830f2348404f4cebd8cf46523ee356941b6e298cf44bd51647fd29?offset=0&limit=1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/series/fixtures/simple_index_label_series.yaml b/packages/gooddata-pandas/tests/series/fixtures/simple_index_label_series.yaml index 082282d4e..f4ba1c482 100644 --- a/packages/gooddata-pandas/tests/series/fixtures/simple_index_label_series.yaml +++ b/packages/gooddata-pandas/tests/series/fixtures/simple_index_label_series.yaml @@ -56,7 +56,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - d8474362-39e0-4433-babb-ac28a29bf37c + - e994576b-f8e7-4b67-8c41-552747fc2273 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -82,7 +82,7 @@ interactions: valueType: TEXT localIdentifier: dim_0 links: - executionResult: c03f39fe5f6c40dbc81a91af7c76a5dcaf1e498a:33b9380572c8766c601adfa7fa7c2c5247ac7a3334f666ebecc3156e3ad4687e + executionResult: 1cf6329143668556262d7025763a563718633a50:f27e54ec340fd88469781fd681e0f8c894779f69653a5e3bac65545fb1b528a0 - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28region%29&page=0&size=500 @@ -189,7 +189,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3D%3D%27region%27&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/c03f39fe5f6c40dbc81a91af7c76a5dcaf1e498a%3A33b9380572c8766c601adfa7fa7c2c5247ac7a3334f666ebecc3156e3ad4687e?offset=0&limit=1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/1cf6329143668556262d7025763a563718633a50%3Af27e54ec340fd88469781fd681e0f8c894779f69653a5e3bac65545fb1b528a0?offset=0&limit=1000 body: null headers: Accept: diff --git a/packages/gooddata-pandas/tests/series/fixtures/simple_index_metric_series.yaml b/packages/gooddata-pandas/tests/series/fixtures/simple_index_metric_series.yaml index 6efa0fc9e..3b85a7efb 100644 --- a/packages/gooddata-pandas/tests/series/fixtures/simple_index_metric_series.yaml +++ b/packages/gooddata-pandas/tests/series/fixtures/simple_index_metric_series.yaml @@ -69,7 +69,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 8b0916e4-0b85-4980-8302-de72b6c25561 + - 3cbe82ac-3bf9-4529-ad94-c213af1cbc63 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -99,7 +99,7 @@ interactions: valueType: TEXT localIdentifier: dim_1 links: - executionResult: 53d8df5e0f57bb3778fa52e09a5dbf3fe0d20593:411320e1b32e088701f9b07028c6d9022db8b9c332e7446b7c7088eb2dfe1e50 + executionResult: 0a18715ec1529a746e33a316c34d9a3abfbf03d0:00f52eef8cb1dcf875c76e8ef586342c660aa11664f7734d8cab7896dcb26ea9 - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3Din%3D%28region%29&page=0&size=500 @@ -206,7 +206,7 @@ interactions: next: http://localhost:3000/api/v1/entities/workspaces/demo/attributes?include=labels%2Cdatasets&filter=labels.id%3D%3D%27region%27&page=1&size=500 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/53d8df5e0f57bb3778fa52e09a5dbf3fe0d20593%3A411320e1b32e088701f9b07028c6d9022db8b9c332e7446b7c7088eb2dfe1e50?offset=0%2C0&limit=1%2C1000 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/0a18715ec1529a746e33a316c34d9a3abfbf03d0%3A00f52eef8cb1dcf875c76e8ef586342c660aa11664f7734d8cab7896dcb26ea9?offset=0%2C0&limit=1%2C1000 body: null headers: Accept: diff --git a/packages/gooddata-sdk/tests/catalog/conftest.py b/packages/gooddata-sdk/tests/catalog/conftest.py new file mode 100644 index 000000000..52d714397 --- /dev/null +++ b/packages/gooddata-sdk/tests/catalog/conftest.py @@ -0,0 +1,224 @@ +# (C) 2024 GoodData Corporation +""" +Shared test fixtures for catalog tests. + +Provides: +- safe_delete: cleanup utility that swallows exceptions +- sdk: session-scoped GoodDataSdk instance +- Snapshot/restore fixtures for staging-safe testing +""" + +from __future__ import annotations + +import logging +from pathlib import Path +from typing import Any, Callable + +import pytest +from gooddata_sdk import GoodDataSdk + +logger = logging.getLogger(__name__) + +_current_dir = Path(__file__).parent.absolute() +_credentials_path = _current_dir / "load" / "data_source_credentials" / "data_sources_credentials.yaml" + + +def _capture_workspace_permissions(sdk: GoodDataSdk, workspaces: list) -> dict: + """Capture permissions for all workspaces, skipping failures.""" + ws_permissions: dict = {} + for ws in workspaces: + try: + ws_permissions[ws.id] = sdk.catalog_permission.get_declarative_permissions(ws.id) + except Exception as e: # noqa: PERF203 + logger.warning(f"Could not capture permissions for workspace {ws.id}: {e}") + return ws_permissions + + +def _restore_workspace_permissions(sdk: GoodDataSdk, ws_permissions: dict) -> None: + """Restore permissions for all workspaces, logging failures.""" + for ws_id, perms in ws_permissions.items(): + try: + sdk.catalog_permission.put_declarative_permissions(ws_id, perms) + except Exception as e: # noqa: PERF203 + logger.warning(f"RESTORE FAILED [permissions for {ws_id}]: {e}") + + +def safe_delete(func: Callable, *args: Any, **kwargs: Any) -> None: + """Call a cleanup function, swallowing any exception so it doesn't mask test failures. + + Use this in `finally` blocks instead of bare cleanup calls. + """ + try: + func(*args, **kwargs) + except Exception as e: + logger.warning(f"Cleanup failed (ignored): {type(e).__name__}: {e}") + + +@pytest.fixture(scope="session") +def sdk(test_config): + """Session-scoped GoodDataSdk instance.""" + return GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + + +# --------------------------------------------------------------------------- +# Snapshot/restore fixtures +# +# Each fixture captures the current live state via GET before the test runs, +# yields it for the test to use, then restores via PUT in teardown. +# This is environment-agnostic: works against Docker, staging, or anything else. +# --------------------------------------------------------------------------- + + +@pytest.fixture() +def snapshot_workspaces(sdk): + """Capture all workspaces, restore after test. + + Silently yields None if the server is unreachable (VCR replay mode). + """ + try: + original = sdk.catalog_workspace.get_declarative_workspaces(exclude=["ACTIVITY_INFO"]) + except Exception as e: + logger.debug(f"snapshot_workspaces: server unreachable, skipping ({e})") + yield None + return + yield original + try: + sdk.catalog_workspace.put_declarative_workspaces(original) + except Exception as e: + logger.error(f"RESTORE FAILED [workspaces]: {e}") + + +@pytest.fixture() +def snapshot_workspace_data_filters(sdk): + """Capture workspace data filters, restore after test. + + Silently yields None if the server is unreachable (VCR replay mode). + """ + try: + original = sdk.catalog_workspace.get_declarative_workspace_data_filters() + except Exception as e: + logger.debug(f"snapshot_workspace_data_filters: server unreachable, skipping ({e})") + yield None + return + yield original + try: + sdk.catalog_workspace.put_declarative_workspace_data_filters(original) + except Exception as e: + logger.error(f"RESTORE FAILED [workspace_data_filters]: {e}") + + +@pytest.fixture() +def snapshot_data_sources(sdk): + """Capture all data sources, restore after test. + + Silently yields None if the server is unreachable (VCR replay mode). + """ + try: + original = sdk.catalog_data_source.get_declarative_data_sources() + except Exception as e: + logger.debug(f"snapshot_data_sources: server unreachable, skipping ({e})") + yield None + return + yield original + try: + sdk.catalog_data_source.put_declarative_data_sources(original, _credentials_path) + except Exception as e: + logger.error(f"RESTORE FAILED [data_sources]: {e}") + + +@pytest.fixture() +def snapshot_notification_channels(sdk): + """Capture notification channels, restore after test. + + Silently yields None if the server is unreachable (VCR replay mode). + """ + try: + original = sdk.catalog_organization.get_declarative_notification_channels() + except Exception as e: + logger.debug(f"snapshot_notification_channels: server unreachable, skipping ({e})") + yield None + return + yield original + try: + sdk.catalog_organization.put_declarative_notification_channels(original) + except Exception as e: + logger.error(f"RESTORE FAILED [notification_channels]: {e}") + + +@pytest.fixture() +def snapshot_org_permissions(sdk): + """Capture organization permissions, restore after test. + + Silently yields None if the server is unreachable (VCR replay mode). + """ + try: + original = sdk.catalog_permission.get_declarative_organization_permissions() + except Exception as e: + logger.debug(f"snapshot_org_permissions: server unreachable, skipping ({e})") + yield None + return + yield original + try: + sdk.catalog_permission.put_declarative_organization_permissions(original) + except Exception as e: + logger.error(f"RESTORE FAILED [org_permissions]: {e}") + + +@pytest.fixture() +def snapshot_permissions(sdk, test_config): + """Capture workspace permissions for the test workspace, restore after test. + + Silently yields None if the server is unreachable (VCR replay mode). + """ + ws_id = test_config["workspace"] + try: + original = sdk.catalog_permission.get_declarative_permissions(ws_id) + except Exception as e: + logger.debug(f"snapshot_permissions: server unreachable, skipping ({e})") + yield None + return + yield original + try: + sdk.catalog_permission.put_declarative_permissions(ws_id, original) + except Exception as e: + logger.error(f"RESTORE FAILED [permissions for {ws_id}]: {e}") + + +@pytest.fixture() +def snapshot_full_user_context(sdk): + """Capture users, groups, AND their permission references. + + Needed for tests that nuke users/groups, because deleting a user + cascade-deletes permissions referencing that user. + + Restores in correct order: users/groups first, then workspace permissions. + Silently yields None if the server is unreachable (VCR replay mode). + """ + try: + users_groups = sdk.catalog_user.get_declarative_users_user_groups() + except Exception as e: + logger.debug(f"snapshot_full_user_context: server unreachable, skipping ({e})") + yield None + return + + workspaces = sdk.catalog_workspace.list_workspaces() + ws_permissions = _capture_workspace_permissions(sdk, workspaces) + + data_sources = sdk.catalog_data_source.get_declarative_data_sources() + + yield users_groups + + # Restore users and groups first + try: + sdk.catalog_user.put_declarative_users_user_groups(users_groups) + except Exception as e: + logger.error(f"RESTORE FAILED [users_user_groups]: {e}") + + # Restore data sources (includes DS-level permissions) + try: + sdk.catalog_data_source.put_declarative_data_sources(data_sources, _credentials_path) + except Exception as e: + logger.error(f"RESTORE FAILED [data_sources]: {e}") + + # Restore workspace permissions + _restore_workspace_permissions(sdk, ws_permissions) diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/bigquery.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/bigquery.yaml index 19402c99d..78f71d628 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/bigquery.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/bigquery.yaml @@ -48,7 +48,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: d90b939488c0002afa6049595a44c1b6 + traceId: a0a1b11d20b1c925b8b8059b5fe70fae - request: method: POST uri: http://localhost:3000/api/v1/entities/dataSources diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_data_sources_list.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_data_sources_list.yaml index 75712194c..820bd7c86 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_data_sources_list.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_data_sources_list.yaml @@ -22,7 +22,7 @@ interactions: Cache-Control: - no-cache, no-store, max-age=0, must-revalidate Content-Length: - - '491' + - '533' Content-Type: - application/json DATE: &id001 @@ -49,6 +49,7 @@ interactions: url: jdbc:postgresql://postgres:5432/tiger?sslmode=prefer username: postgres authenticationType: USERNAME_PASSWORD + alternativeDataSourceId: ds-put-abc-id type: POSTGRESQL name: demo-test-ds schema: demo diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_put_declarative_data_sources_connection.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_put_declarative_data_sources_connection.yaml index 7391f96ad..b95de3c95 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_put_declarative_data_sources_connection.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_put_declarative_data_sources_connection.yaml @@ -113,7 +113,7 @@ interactions: string: queryDurationMillis: createCacheTable: 0 - simpleSelect: 13 + simpleSelect: 10 successful: true - request: method: PUT diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_register_upload_notification.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_register_upload_notification.yaml index 92995645e..c87a83e61 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_register_upload_notification.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_register_upload_notification.yaml @@ -481,7 +481,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - e34222b2-f408-4fab-83bd-f3e0c76320b4 + - ce750eda-293e-46b0-92cf-98684ab740b2 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -496,7 +496,7 @@ interactions: name: '# of Active Customers' localIdentifier: dim_0 links: - executionResult: 4c0ed2507a2ed0cdbd1c339e840fc87ebbbbb513:4f9dd40adf4f1c0c5cd39016efd25c02e2024ce88dc05c56aa69649d1086fe05 + executionResult: 9b386646453090ebd28ee2797094b34a671f32d3:ac91d341b725ff450894562300b9151ca173bd4aeb2c5f87d666573370b0573d - request: method: POST uri: http://localhost:3000/api/v1/actions/dataSources/demo-test-ds/uploadNotification @@ -593,7 +593,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - dca56864-8aa0-40a3-8369-bebd91f47375 + - 0816e508-750a-4ab3-93df-0b341123c9e9 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -608,4 +608,4 @@ interactions: name: '# of Active Customers' localIdentifier: dim_0 links: - executionResult: ba73679655f46ccf86e63851e6d4489f8f1bcfdd:d99c949238d57882d207dd94dd1733c4a322843c450244a1e64e21a43ba6d013 + executionResult: a5025714bb219898dcd9d25a59db0ac449c07466:b0addae07d6d39e54aeca7ff1d1601b653c1c8f74517e919b1fa93a1cf156c7b diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_test_declarative_data_sources.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_test_declarative_data_sources.yaml index 408091fe3..f89052f6e 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_test_declarative_data_sources.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/demo_test_declarative_data_sources.yaml @@ -166,5 +166,5 @@ interactions: string: queryDurationMillis: createCacheTable: 0 - simpleSelect: 5 + simpleSelect: 3 successful: true diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/dremio.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/dremio.yaml index 681939df5..424ee518c 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/dremio.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/dremio.yaml @@ -48,7 +48,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: b63978defa31c68ca546c1ab343a448d + traceId: 4066b91c570b68c86df85ef79332723c - request: method: POST uri: http://localhost:3000/api/v1/entities/dataSources diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/patch.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/patch.yaml index 562cf508b..5fec26126 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/patch.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/patch.yaml @@ -22,7 +22,7 @@ interactions: Cache-Control: - no-cache, no-store, max-age=0, must-revalidate Content-Length: - - '491' + - '533' Content-Type: - application/json DATE: &id001 @@ -49,6 +49,7 @@ interactions: url: jdbc:postgresql://postgres:5432/tiger?sslmode=prefer username: postgres authenticationType: USERNAME_PASSWORD + alternativeDataSourceId: ds-put-abc-id type: POSTGRESQL name: demo-test-ds schema: demo @@ -105,7 +106,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: f86c79144f9a36d6f9348cbacfb8db41 + traceId: ee3e99796da9ee4b1a6076e3d3b4ecce - request: method: POST uri: http://localhost:3000/api/v1/entities/dataSources diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/redshift.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/redshift.yaml index 4599d9f01..120c80735 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/redshift.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/redshift.yaml @@ -48,7 +48,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 324c02acf3782a683f008bd594d4b384 + traceId: ff18bcfef496addadf7828decf9f7d78 - request: method: POST uri: http://localhost:3000/api/v1/entities/dataSources diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/snowflake.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/snowflake.yaml index 38cb0a061..2e7585168 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/snowflake.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/snowflake.yaml @@ -48,7 +48,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 4cf75552de66e723c0f7c68c17035293 + traceId: 35591e82b5e5c0bda3203025c2b05504 - request: method: POST uri: http://localhost:3000/api/v1/entities/dataSources @@ -253,7 +253,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: e09194bf37bb65497db2e23dca921296 + traceId: ae8e7e2ffaf963091a42327fb579761b - request: method: POST uri: http://localhost:3000/api/v1/entities/dataSources diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/test_create_update.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/test_create_update.yaml index bce766be1..ce9a201a3 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/test_create_update.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/test_create_update.yaml @@ -22,7 +22,7 @@ interactions: Cache-Control: - no-cache, no-store, max-age=0, must-revalidate Content-Length: - - '491' + - '533' Content-Type: - application/json DATE: &id001 @@ -49,6 +49,7 @@ interactions: url: jdbc:postgresql://postgres:5432/tiger?sslmode=prefer username: postgres authenticationType: USERNAME_PASSWORD + alternativeDataSourceId: ds-put-abc-id type: POSTGRESQL name: demo-test-ds schema: demo @@ -105,7 +106,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: d61e83e698c733efd8f092e18379bea6 + traceId: 6fc115c7cd5d5200d4b094f0ca3c7b41 - request: method: POST uri: http://localhost:3000/api/v1/entities/dataSources @@ -367,7 +368,7 @@ interactions: Cache-Control: - no-cache, no-store, max-age=0, must-revalidate Content-Length: - - '804' + - '846' Content-Type: - application/json DATE: *id001 @@ -393,6 +394,7 @@ interactions: url: jdbc:postgresql://postgres:5432/tiger?sslmode=prefer username: postgres authenticationType: USERNAME_PASSWORD + alternativeDataSourceId: ds-put-abc-id type: POSTGRESQL name: demo-test-ds schema: demo @@ -452,60 +454,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/dataSources?page=0&size=500 - 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: - - '491' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: - - attributes: - url: jdbc:postgresql://postgres:5432/tiger?sslmode=prefer - username: postgres - authenticationType: USERNAME_PASSWORD - type: POSTGRESQL - name: demo-test-ds - schema: demo - id: demo-test-ds - links: - self: http://localhost:3000/api/v1/entities/dataSources/demo-test-ds - type: dataSource - links: - self: http://localhost:3000/api/v1/entities/dataSources?page=0&size=500 - next: http://localhost:3000/api/v1/entities/dataSources?page=1&size=500 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/vertica.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/vertica.yaml index 077f62c11..0f5900b71 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/vertica.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/data_sources/vertica.yaml @@ -48,7 +48,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 50ab98fc73169db1e16211918da0afee + traceId: 72dcbc863378258516e656d9b78baed0 - request: method: POST uri: http://localhost:3000/api/v1/entities/dataSources diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/create_csp_directive.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/create_csp_directive.yaml index 946166393..508df60a1 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/create_csp_directive.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/create_csp_directive.yaml @@ -148,49 +148,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/cspDirectives?page=0&size=500 - 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: - - '175' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/cspDirectives?page=0&size=500 - next: http://localhost:3000/api/v1/entities/cspDirectives?page=1&size=500 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/create_jwk.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/create_jwk.yaml index c9b46fe79..84f9891a3 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/create_jwk.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/create_jwk.yaml @@ -48,7 +48,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 5765adf5c8a130e2ff955b2dbd5b081a + traceId: 687af424ab25847ddb795ab8b396e1af - request: method: POST uri: http://localhost:3000/api/v1/entities/jwks @@ -219,49 +219,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/jwks?page=0&size=500 - 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: - - '157' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/jwks?page=0&size=500 - next: http://localhost:3000/api/v1/entities/jwks?page=1&size=500 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/create_organization_setting.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/create_organization_setting.yaml index 367d918a3..43ffb91e6 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/create_organization_setting.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/create_organization_setting.yaml @@ -151,49 +151,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/organizationSettings?page=0&size=500 - 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: - - '189' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/organizationSettings?page=0&size=500 - next: http://localhost:3000/api/v1/entities/organizationSettings?page=1&size=500 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/delete_csp_directive.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/delete_csp_directive.yaml index 6c1fe1cc4..5d9ac78dd 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/delete_csp_directive.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/delete_csp_directive.yaml @@ -144,60 +144,12 @@ interactions: to access it. status: 404 title: Not Found - traceId: f264d2d766bbd7ae60058e329dfa5090 + traceId: fddd8a21b30f8b832ce5223ab6f0def8 - request: - method: GET - uri: http://localhost:3000/api/v1/entities/cspDirectives?page=0&size=500 - 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: - - '175' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/cspDirectives?page=0&size=500 - next: http://localhost:3000/api/v1/entities/cspDirectives?page=1&size=500 - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/cspDirectives?page=0&size=500 + method: DELETE + uri: http://localhost:3000/api/v1/entities/cspDirectives/font-src body: null headers: - Accept: - - application/json Accept-Encoding: - br, gzip, deflate X-GDC-VALIDATE-RELATIONS: @@ -206,15 +158,13 @@ interactions: - XMLHttpRequest response: status: - code: 200 - message: OK + code: 204 + message: No Content headers: Cache-Control: - no-cache, no-store, max-age=0, must-revalidate - Content-Length: - - '175' Content-Type: - - application/json + - application/vnd.gooddata.api+json DATE: *id001 Expires: - '0' @@ -232,8 +182,4 @@ interactions: X-Xss-Protection: - '0' body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/cspDirectives?page=0&size=500 - next: http://localhost:3000/api/v1/entities/cspDirectives?page=1&size=500 + string: '' diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/delete_jwk.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/delete_jwk.yaml index f685dd91c..042b5a55d 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/delete_jwk.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/delete_jwk.yaml @@ -48,7 +48,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 26e86c74c00dbadaa3c0d26e9b4cacaa + traceId: b00dc9dc775b9e9ade0044118e3070f2 - request: method: POST uri: http://localhost:3000/api/v1/entities/jwks @@ -207,60 +207,12 @@ interactions: to access it. status: 404 title: Not Found - traceId: b4d1eb921615509c521767c5d3c6fe68 + traceId: fed11234fc13a98c5ab6349e6a026dc7 - request: - method: GET - uri: http://localhost:3000/api/v1/entities/jwks?page=0&size=500 - 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: - - '157' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/jwks?page=0&size=500 - next: http://localhost:3000/api/v1/entities/jwks?page=1&size=500 - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/jwks?page=0&size=500 + method: DELETE + uri: http://localhost:3000/api/v1/entities/jwks/demoJwk body: null headers: - Accept: - - application/json Accept-Encoding: - br, gzip, deflate X-GDC-VALIDATE-RELATIONS: @@ -269,15 +221,13 @@ interactions: - XMLHttpRequest response: status: - code: 200 - message: OK + code: 204 + message: No Content headers: Cache-Control: - no-cache, no-store, max-age=0, must-revalidate - Content-Length: - - '157' Content-Type: - - application/json + - application/vnd.gooddata.api+json DATE: *id001 Expires: - '0' @@ -295,8 +245,4 @@ interactions: X-Xss-Protection: - '0' body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/jwks?page=0&size=500 - next: http://localhost:3000/api/v1/entities/jwks?page=1&size=500 + string: '' diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/delete_llm_endpoint.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/delete_llm_endpoint.yaml index a32451130..9cbe793d1 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/delete_llm_endpoint.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/delete_llm_endpoint.yaml @@ -145,7 +145,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: c657d9dc47cadc6183b4ac712f500926 + traceId: 1e27e65ad582c88b2859d661913183c7 - request: method: DELETE uri: http://localhost:3000/api/v1/entities/llmEndpoints/endpoint1 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/delete_organization_setting.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/delete_organization_setting.yaml index 801937047..0c99854d7 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/delete_organization_setting.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/delete_organization_setting.yaml @@ -146,60 +146,12 @@ interactions: to access it. status: 404 title: Not Found - traceId: eade9edee77e4a2059b1fb6d59d2ace8 + traceId: f43a63b0ce32a7ee8a5bf8c62c3244f0 - request: - method: GET - uri: http://localhost:3000/api/v1/entities/organizationSettings?page=0&size=500 - 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: - - '189' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/organizationSettings?page=0&size=500 - next: http://localhost:3000/api/v1/entities/organizationSettings?page=1&size=500 - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/organizationSettings?page=0&size=500 + method: DELETE + uri: http://localhost:3000/api/v1/entities/organizationSettings/test_setting body: null headers: - Accept: - - application/json Accept-Encoding: - br, gzip, deflate X-GDC-VALIDATE-RELATIONS: @@ -208,15 +160,13 @@ interactions: - XMLHttpRequest response: status: - code: 200 - message: OK + code: 204 + message: No Content headers: Cache-Control: - no-cache, no-store, max-age=0, must-revalidate - Content-Length: - - '189' Content-Type: - - application/json + - application/vnd.gooddata.api+json DATE: *id001 Expires: - '0' @@ -234,8 +184,4 @@ interactions: X-Xss-Protection: - '0' body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/organizationSettings?page=0&size=500 - next: http://localhost:3000/api/v1/entities/organizationSettings?page=1&size=500 + string: '' diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/layout_notification_channels.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/layout_notification_channels.yaml index 816c3470b..abb34f795 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/layout_notification_channels.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/layout_notification_channels.yaml @@ -1,50 +1,6 @@ # (C) 2026 GoodData Corporation version: 1 interactions: - - request: - method: GET - uri: http://localhost:3000/api/v1/layout/notificationChannels - 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: - - '27' - Content-Type: - - application/json - DATE: &id001 - - PLACEHOLDER - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - notificationChannels: [] - request: method: PUT uri: http://localhost:3000/api/v1/layout/notificationChannels @@ -74,7 +30,8 @@ interactions: headers: Cache-Control: - no-cache, no-store, max-age=0, must-revalidate - DATE: *id001 + DATE: &id001 + - PLACEHOLDER Expires: - '0' Pragma: @@ -147,85 +104,3 @@ interactions: id: webhook inPlatformNotification: DISABLED name: Webhook - - request: - method: PUT - uri: http://localhost:3000/api/v1/layout/notificationChannels - body: - notificationChannels: [] - 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' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/layout/notificationChannels - 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: - - '27' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - notificationChannels: [] diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/list_csp_directives.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/list_csp_directives.yaml index 29f8e6451..e218054e0 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/list_csp_directives.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/list_csp_directives.yaml @@ -1,6 +1,53 @@ # (C) 2026 GoodData Corporation version: 1 interactions: + - request: + method: GET + uri: http://localhost:3000/api/v1/entities/cspDirectives?page=0&size=500 + 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: + - '175' + Content-Type: + - application/json + DATE: &id001 + - PLACEHOLDER + Expires: + - '0' + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-Xss-Protection: + - '0' + body: + string: + data: [] + links: + self: http://localhost:3000/api/v1/entities/cspDirectives?page=0&size=500 + next: http://localhost:3000/api/v1/entities/cspDirectives?page=1&size=500 - request: method: POST uri: http://localhost:3000/api/v1/entities/cspDirectives @@ -33,8 +80,7 @@ interactions: - '174' Content-Type: - application/json - DATE: &id001 - - PLACEHOLDER + DATE: *id001 Expires: - '0' Pragma: @@ -254,49 +300,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/cspDirectives?page=0&size=500 - 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: - - '175' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/cspDirectives?page=0&size=500 - next: http://localhost:3000/api/v1/entities/cspDirectives?page=1&size=500 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/list_jwk.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/list_jwk.yaml index 09250ac3f..2fae6eac1 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/list_jwk.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/list_jwk.yaml @@ -1,6 +1,53 @@ # (C) 2026 GoodData Corporation version: 1 interactions: + - request: + method: GET + uri: http://localhost:3000/api/v1/entities/jwks?page=0&size=500 + 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: + - '157' + Content-Type: + - application/json + DATE: &id001 + - PLACEHOLDER + Expires: + - '0' + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-Xss-Protection: + - '0' + body: + string: + data: [] + links: + self: http://localhost:3000/api/v1/entities/jwks?page=0&size=500 + next: http://localhost:3000/api/v1/entities/jwks?page=1&size=500 - request: method: GET uri: http://localhost:3000/api/v1/entities/jwks/demoJwk1 @@ -25,8 +72,7 @@ interactions: - '172' Content-Type: - application/problem+json - DATE: &id001 - - PLACEHOLDER + DATE: *id001 Expires: - '0' Pragma: @@ -48,7 +94,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 5805bf88897de31c2cd224c06156e025 + traceId: 03fad7a981cf606cb253b3bc15035cff - request: method: POST uri: http://localhost:3000/api/v1/entities/jwks @@ -169,7 +215,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 3bc666007e4300f5486c292095721e20 + traceId: d3d54f5a0bd08ac15d56584fea5948fe - request: method: POST uri: http://localhost:3000/api/v1/entities/jwks @@ -396,49 +442,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/jwks?page=0&size=500 - 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: - - '157' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/jwks?page=0&size=500 - next: http://localhost:3000/api/v1/entities/jwks?page=1&size=500 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/list_llm_endpoints.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/list_llm_endpoints.yaml index 7a491246e..f41aaf317 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/list_llm_endpoints.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/list_llm_endpoints.yaml @@ -1,6 +1,53 @@ # (C) 2026 GoodData Corporation version: 1 interactions: + - request: + method: GET + uri: http://localhost:3000/api/v1/entities/llmEndpoints + 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: + - '171' + Content-Type: + - application/json + DATE: &id001 + - PLACEHOLDER + Expires: + - '0' + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-Xss-Protection: + - '0' + body: + string: + data: [] + links: + self: http://localhost:3000/api/v1/entities/llmEndpoints?page=0&size=20 + next: http://localhost:3000/api/v1/entities/llmEndpoints?page=1&size=20 - request: method: POST uri: http://localhost:3000/api/v1/entities/llmEndpoints @@ -33,8 +80,7 @@ interactions: - '209' Content-Type: - application/json - DATE: &id001 - - PLACEHOLDER + DATE: *id001 Expires: - '0' Pragma: diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/list_organization_settings.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/list_organization_settings.yaml index 69ae23680..41de7b288 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/list_organization_settings.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/list_organization_settings.yaml @@ -1,6 +1,53 @@ # (C) 2026 GoodData Corporation version: 1 interactions: + - request: + method: GET + uri: http://localhost:3000/api/v1/entities/organizationSettings?page=0&size=500 + 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: + - '189' + Content-Type: + - application/json + DATE: &id001 + - PLACEHOLDER + Expires: + - '0' + Pragma: + - no-cache + Referrer-Policy: + - no-referrer + Vary: + - Origin + - Access-Control-Request-Method + - Access-Control-Request-Headers + X-Content-Type-Options: + - nosniff + X-GDC-TRACE-ID: *id001 + X-Xss-Protection: + - '0' + body: + string: + data: [] + links: + self: http://localhost:3000/api/v1/entities/organizationSettings?page=0&size=500 + next: http://localhost:3000/api/v1/entities/organizationSettings?page=1&size=500 - request: method: POST uri: http://localhost:3000/api/v1/entities/organizationSettings @@ -34,8 +81,7 @@ interactions: - '213' Content-Type: - application/json - DATE: &id001 - - PLACEHOLDER + DATE: *id001 Expires: - '0' Pragma: @@ -260,49 +306,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/organizationSettings?page=0&size=500 - 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: - - '189' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/organizationSettings?page=0&size=500 - next: http://localhost:3000/api/v1/entities/organizationSettings?page=1&size=500 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_allowed_origins.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_allowed_origins.yaml index b9fd9a7c4..a50ae9795 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_allowed_origins.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_allowed_origins.yaml @@ -103,40 +103,32 @@ interactions: links: self: http://localhost:3000/api/v1/entities/admin/organizations/default - request: - method: PATCH - uri: http://localhost:3000/api/v1/entities/admin/organizations/default - body: - data: - id: default - type: organization - attributes: - allowedOrigins: - - https://test.com + method: GET + uri: http://localhost:3000/api/v1/entities/organization + body: null 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 + code: 302 + message: Found headers: Cache-Control: - no-cache, no-store, max-age=0, must-revalidate Content-Length: - - '468' + - '0' Content-Type: - - application/json + - application/vnd.gooddata.api+json DATE: *id001 Expires: - '0' + Location: + - /api/v1/entities/admin/organizations/default Pragma: - no-cache Referrer-Policy: @@ -151,30 +143,10 @@ interactions: X-Xss-Protection: - '0' body: - string: - data: - attributes: - name: Default Organization - hostname: localhost - allowedOrigins: - - https://test.com - earlyAccess: enableAlerting - earlyAccessValues: - - enableAlerting - - enableSmtp - - enablePreAggregationDatasets - - enableScheduling - - enableCompositeGrain - - enableUserManagement - - enableRawExports - - enableFlexibleDashboardLayout - id: default - type: organization - links: - self: http://localhost:3000/api/v1/entities/admin/organizations/default + string: '' - request: method: GET - uri: http://localhost:3000/api/v1/entities/organization + uri: http://localhost:3000/api/v1/entities/admin/organizations/default body: null headers: Accept-Encoding: @@ -185,20 +157,18 @@ interactions: - XMLHttpRequest response: status: - code: 302 - message: Found + code: 200 + message: OK headers: Cache-Control: - no-cache, no-store, max-age=0, must-revalidate Content-Length: - - '0' + - '430' Content-Type: - application/vnd.gooddata.api+json DATE: *id001 Expires: - '0' - Location: - - /api/v1/entities/admin/organizations/default Pragma: - no-cache Referrer-Policy: @@ -213,14 +183,42 @@ interactions: X-Xss-Protection: - '0' body: - string: '' + string: + data: + attributes: + name: Default Organization + hostname: localhost + earlyAccess: enableAlerting + earlyAccessValues: + - enableAlerting + - enableSmtp + - enablePreAggregationDatasets + - enableScheduling + - enableCompositeGrain + - enableUserManagement + - enableRawExports + - enableFlexibleDashboardLayout + id: default + type: organization + links: + self: http://localhost:3000/api/v1/entities/admin/organizations/default - request: - method: GET + method: PATCH uri: http://localhost:3000/api/v1/entities/admin/organizations/default - body: null + body: + data: + id: default + type: organization + attributes: + allowedOrigins: + - https://test.com headers: + Accept: + - application/json Accept-Encoding: - br, gzip, deflate + Content-Type: + - application/json X-GDC-VALIDATE-RELATIONS: - 'true' X-Requested-With: @@ -235,7 +233,7 @@ interactions: Content-Length: - '468' Content-Type: - - application/vnd.gooddata.api+json + - application/json DATE: *id001 Expires: - '0' @@ -377,39 +375,32 @@ interactions: links: self: http://localhost:3000/api/v1/entities/admin/organizations/default - request: - method: PATCH - uri: http://localhost:3000/api/v1/entities/admin/organizations/default - body: - data: - id: default - type: organization - attributes: - allowedOrigins: [] + method: GET + uri: http://localhost:3000/api/v1/entities/organization + body: null 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 + code: 302 + message: Found headers: Cache-Control: - no-cache, no-store, max-age=0, must-revalidate Content-Length: - - '450' + - '0' Content-Type: - - application/json + - application/vnd.gooddata.api+json DATE: *id001 Expires: - '0' + Location: + - /api/v1/entities/admin/organizations/default Pragma: - no-cache Referrer-Policy: @@ -424,29 +415,10 @@ interactions: X-Xss-Protection: - '0' body: - string: - data: - attributes: - name: Default Organization - hostname: localhost - allowedOrigins: [] - earlyAccess: enableAlerting - earlyAccessValues: - - enableAlerting - - enableSmtp - - enablePreAggregationDatasets - - enableScheduling - - enableCompositeGrain - - enableUserManagement - - enableRawExports - - enableFlexibleDashboardLayout - id: default - type: organization - links: - self: http://localhost:3000/api/v1/entities/admin/organizations/default + string: '' - request: method: GET - uri: http://localhost:3000/api/v1/entities/organization + uri: http://localhost:3000/api/v1/entities/admin/organizations/default body: null headers: Accept-Encoding: @@ -457,20 +429,18 @@ interactions: - XMLHttpRequest response: status: - code: 302 - message: Found + code: 200 + message: OK headers: Cache-Control: - no-cache, no-store, max-age=0, must-revalidate Content-Length: - - '0' + - '468' Content-Type: - application/vnd.gooddata.api+json DATE: *id001 Expires: - '0' - Location: - - /api/v1/entities/admin/organizations/default Pragma: - no-cache Referrer-Policy: @@ -485,14 +455,43 @@ interactions: X-Xss-Protection: - '0' body: - string: '' + string: + data: + attributes: + name: Default Organization + hostname: localhost + allowedOrigins: + - https://test.com + earlyAccess: enableAlerting + earlyAccessValues: + - enableAlerting + - enableSmtp + - enablePreAggregationDatasets + - enableScheduling + - enableCompositeGrain + - enableUserManagement + - enableRawExports + - enableFlexibleDashboardLayout + id: default + type: organization + links: + self: http://localhost:3000/api/v1/entities/admin/organizations/default - request: - method: GET + method: PATCH uri: http://localhost:3000/api/v1/entities/admin/organizations/default - body: null + body: + data: + id: default + type: organization + attributes: + allowedOrigins: [] headers: + Accept: + - application/json Accept-Encoding: - br, gzip, deflate + Content-Type: + - application/json X-GDC-VALIDATE-RELATIONS: - 'true' X-Requested-With: @@ -507,7 +506,7 @@ interactions: Content-Length: - '450' Content-Type: - - application/vnd.gooddata.api+json + - application/json DATE: *id001 Expires: - '0' diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_csp_directive.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_csp_directive.yaml index 2349014a9..8f40c92e5 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_csp_directive.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_csp_directive.yaml @@ -206,49 +206,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/cspDirectives?page=0&size=500 - 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: - - '175' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/cspDirectives?page=0&size=500 - next: http://localhost:3000/api/v1/entities/cspDirectives?page=1&size=500 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_jwk.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_jwk.yaml index 9bec41d53..e7e445e42 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_jwk.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_jwk.yaml @@ -48,7 +48,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: cf3452051f6c79a977b915ae0b35d9b5 + traceId: 181ec136d63b80382819b664fd8610df - request: method: POST uri: http://localhost:3000/api/v1/entities/jwks @@ -351,49 +351,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/jwks?page=0&size=500 - 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: - - '157' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/jwks?page=0&size=500 - next: http://localhost:3000/api/v1/entities/jwks?page=1&size=500 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_name.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_name.yaml index 3e993735e..a6aec949f 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_name.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_name.yaml @@ -536,103 +536,3 @@ interactions: type: organization links: self: http://localhost:3000/api/v1/entities/admin/organizations/default - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/organization - body: null - headers: - Accept-Encoding: - - br, gzip, deflate - X-GDC-VALIDATE-RELATIONS: - - 'true' - X-Requested-With: - - XMLHttpRequest - response: - status: - code: 302 - message: Found - headers: - Cache-Control: - - no-cache, no-store, max-age=0, must-revalidate - Content-Length: - - '0' - Content-Type: - - application/vnd.gooddata.api+json - DATE: *id001 - Expires: - - '0' - Location: - - /api/v1/entities/admin/organizations/default - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/admin/organizations/default - body: null - headers: - 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: - - '430' - Content-Type: - - application/vnd.gooddata.api+json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: - attributes: - name: Default Organization - hostname: localhost - earlyAccess: enableAlerting - earlyAccessValues: - - enableAlerting - - enableSmtp - - enablePreAggregationDatasets - - enableScheduling - - enableCompositeGrain - - enableUserManagement - - enableRawExports - - enableFlexibleDashboardLayout - id: default - type: organization - links: - self: http://localhost:3000/api/v1/entities/admin/organizations/default diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_organization_setting.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_organization_setting.yaml index 82f7d0781..ace5979e0 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_organization_setting.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/organization/update_organization_setting.yaml @@ -211,49 +211,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/organizationSettings?page=0&size=500 - 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: - - '189' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/organizationSettings?page=0&size=500 - next: http://localhost:3000/api/v1/entities/organizationSettings?page=1&size=500 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/permissions/list_dashboard_permissions.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/permissions/list_dashboard_permissions.yaml index d9d7d8b39..a19aaee60 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/permissions/list_dashboard_permissions.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/permissions/list_dashboard_permissions.yaml @@ -148,48 +148,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/analyticalDashboards/campaign/permissions - 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: - - '39' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - rules: [] - userGroups: [] - users: [] diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/permissions/manage_dashboard_permissions_declarative_workspace.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/permissions/manage_dashboard_permissions_declarative_workspace.yaml index 9c32fb233..d26adc6ab 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/permissions/manage_dashboard_permissions_declarative_workspace.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/permissions/manage_dashboard_permissions_declarative_workspace.yaml @@ -2076,48 +2076,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/analyticalDashboards/campaign/permissions - 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: - - '39' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - rules: [] - userGroups: [] - users: [] diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/permissions/manage_organization_permissions.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/permissions/manage_organization_permissions.yaml index 5ed4b41be..f46403828 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/permissions/manage_organization_permissions.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/permissions/manage_organization_permissions.yaml @@ -138,49 +138,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/layout/organization/permissions - 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: - - '69' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - - assignee: - id: adminGroup - type: userGroup - name: MANAGE diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/permissions/put_declarative_organization_permissions.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/permissions/put_declarative_organization_permissions.yaml index 4b61efd6b..2b08bb92a 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/permissions/put_declarative_organization_permissions.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/permissions/put_declarative_organization_permissions.yaml @@ -140,49 +140,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/layout/organization/permissions - 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: - - '69' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - - assignee: - id: adminGroup - type: userGroup - name: MANAGE diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/permissions/put_declarative_permissions.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/permissions/put_declarative_permissions.yaml index 86cd2ebe9..5b8d6d58d 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/permissions/put_declarative_permissions.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/permissions/put_declarative_permissions.yaml @@ -202,47 +202,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/layout/workspaces/demo_west/permissions - 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: - - '44' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - hierarchyPermissions: [] - permissions: [] diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/create_delete_user.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/create_delete_user.yaml index 8a4220b35..70c70e504 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/create_delete_user.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/create_delete_user.yaml @@ -56,7 +56,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authenticationId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs firstname: Demo lastname: User email: demo@example.com @@ -70,7 +70,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authenticationId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 links: self: http://localhost:3000/api/v1/entities/users/demo2 @@ -141,7 +141,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 30520e29be2971de33a559438b57fc3c + traceId: b5049c32ff257f7675d6be967e9fc856 - request: method: POST uri: http://localhost:3000/api/v1/entities/users @@ -327,7 +327,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authenticationId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs firstname: Demo lastname: User email: demo@example.com @@ -341,7 +341,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authenticationId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 links: self: http://localhost:3000/api/v1/entities/users/demo2 @@ -418,96 +418,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/users?include=userGroups&page=0&size=500 - 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: - - '1302' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: - - attributes: {} - id: admin - links: - self: http://localhost:3000/api/v1/entities/users/admin - relationships: - userGroups: - data: - - id: adminGroup - type: userGroup - type: user - - attributes: - authenticationId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs - firstname: Demo - lastname: User - email: demo@example.com - id: demo - links: - self: http://localhost:3000/api/v1/entities/users/demo - relationships: - userGroups: - data: - - id: adminGroup - type: userGroup - type: user - - attributes: - authenticationId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs - id: demo2 - links: - self: http://localhost:3000/api/v1/entities/users/demo2 - relationships: - userGroups: - data: - - id: demoGroup - type: userGroup - type: user - included: - - attributes: {} - id: adminGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups/adminGroup - type: userGroup - - attributes: - name: demo group - id: demoGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups/demoGroup - type: userGroup - links: - self: http://localhost:3000/api/v1/entities/users?include=userGroups&page=0&size=500 - next: http://localhost:3000/api/v1/entities/users?include=userGroups&page=1&size=500 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/create_delete_user_group.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/create_delete_user_group.yaml index 203852666..1bf723cc3 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/create_delete_user_group.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/create_delete_user_group.yaml @@ -138,7 +138,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 834a429917d4ee64a936a957b20b4a1e + traceId: 9d1af99eedd07ae2a9d6e5c886ce53e5 - request: method: POST uri: http://localhost:3000/api/v1/entities/userGroups @@ -400,93 +400,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/userGroups?include=userGroups&page=0&size=500 - 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: - - '1241' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: - - attributes: {} - id: adminGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups/adminGroup - type: userGroup - - attributes: {} - id: adminQA1Group - links: - self: http://localhost:3000/api/v1/entities/userGroups/adminQA1Group - relationships: - parents: - data: - - id: adminGroup - type: userGroup - type: userGroup - - attributes: - name: demo group - id: demoGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups/demoGroup - type: userGroup - - attributes: - name: visitors - id: visitorsGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups/visitorsGroup - relationships: - parents: - data: - - id: demoGroup - type: userGroup - type: userGroup - included: - - attributes: {} - id: adminGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups/adminGroup - type: userGroup - - attributes: - name: demo group - id: demoGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups/demoGroup - type: userGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups?include=userGroups&page=0&size=500 - next: http://localhost:3000/api/v1/entities/userGroups?include=userGroups&page=1&size=500 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/get_declarative_users.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/get_declarative_users.yaml index c5743111d..bdf8d9c34 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/get_declarative_users.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/get_declarative_users.yaml @@ -51,7 +51,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + - authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs email: demo@example.com firstname: Demo id: demo @@ -61,7 +61,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + - authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 permissions: [] settings: [] @@ -117,7 +117,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + - authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs email: demo@example.com firstname: Demo id: demo @@ -127,7 +127,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + - authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 permissions: [] settings: [] diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/get_declarative_users_user_groups.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/get_declarative_users_user_groups.yaml index 7b1f5abcd..348197346 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/get_declarative_users_user_groups.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/get_declarative_users_user_groups.yaml @@ -68,7 +68,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + - authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs email: demo@example.com firstname: Demo id: demo @@ -78,7 +78,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + - authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 permissions: [] settings: [] @@ -151,7 +151,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + - authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs email: demo@example.com firstname: Demo id: demo @@ -161,7 +161,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + - authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 permissions: [] settings: [] diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/get_user.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/get_user.yaml index bd98a7951..61eecf187 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/get_user.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/get_user.yaml @@ -46,7 +46,7 @@ interactions: string: data: attributes: - authenticationId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authenticationId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 relationships: userGroups: diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/list_users.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/list_users.yaml index d8df3cccd..4057741cb 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/list_users.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/list_users.yaml @@ -56,7 +56,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authenticationId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs firstname: Demo lastname: User email: demo@example.com @@ -70,7 +70,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authenticationId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 links: self: http://localhost:3000/api/v1/entities/users/demo2 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_user_groups.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_user_groups.yaml index f3e1b711c..5681b25a1 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_user_groups.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_user_groups.yaml @@ -51,7 +51,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + - authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs email: demo@example.com firstname: Demo id: demo @@ -61,7 +61,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + - authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 permissions: [] settings: [] @@ -181,7 +181,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authenticationId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs firstname: Demo lastname: User email: demo@example.com @@ -195,7 +195,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authenticationId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 links: self: http://localhost:3000/api/v1/entities/users/demo2 @@ -485,14 +485,14 @@ interactions: userGroups: - id: adminGroup permissions: [] - - id: demoGroup - name: demo group - permissions: [] - id: adminQA1Group parents: - id: adminGroup type: userGroup permissions: [] + - id: demoGroup + name: demo group + permissions: [] - id: visitorsGroup name: visitors parents: @@ -548,14 +548,14 @@ interactions: email: demo@example.com firstname: Demo lastname: User - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs userGroups: - id: adminGroup type: userGroup settings: [] permissions: [] - id: demo2 - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs userGroups: - id: demoGroup type: userGroup diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_users.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_users.yaml index cd353c345..67b7b4221 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_users.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_users.yaml @@ -51,7 +51,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + - authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs email: demo@example.com firstname: Demo id: demo @@ -61,7 +61,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + - authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 permissions: [] settings: [] @@ -122,7 +122,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authenticationId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs firstname: Demo lastname: User email: demo@example.com @@ -136,7 +136,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authenticationId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 links: self: http://localhost:3000/api/v1/entities/users/demo2 @@ -399,14 +399,14 @@ interactions: email: demo@example.com firstname: Demo lastname: User - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs userGroups: - id: adminGroup type: userGroup settings: [] permissions: [] - id: demo2 - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs userGroups: - id: demoGroup type: userGroup diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_users_user_groups.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_users_user_groups.yaml index be83e403c..d498c6129 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_users_user_groups.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/load_and_put_declarative_users_user_groups.yaml @@ -68,7 +68,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + - authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs email: demo@example.com firstname: Demo id: demo @@ -78,7 +78,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + - authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 permissions: [] settings: [] @@ -139,7 +139,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authenticationId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs firstname: Demo lastname: User email: demo@example.com @@ -153,7 +153,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authenticationId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 links: self: http://localhost:3000/api/v1/entities/users/demo2 @@ -510,14 +510,14 @@ interactions: email: demo@example.com firstname: Demo lastname: User - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs userGroups: - id: adminGroup type: userGroup settings: [] permissions: [] - id: demo2 - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs userGroups: - id: demoGroup type: userGroup diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/put_declarative_user_groups.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/put_declarative_user_groups.yaml index 30471d558..cc0bc9bdc 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/put_declarative_user_groups.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/put_declarative_user_groups.yaml @@ -110,7 +110,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + - authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs email: demo@example.com firstname: Demo id: demo @@ -120,7 +120,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + - authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 permissions: [] settings: [] @@ -181,7 +181,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authenticationId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs firstname: Demo lastname: User email: demo@example.com @@ -195,7 +195,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authenticationId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 links: self: http://localhost:3000/api/v1/entities/users/demo2 @@ -384,14 +384,14 @@ interactions: userGroups: - id: adminGroup permissions: [] - - id: demoGroup - name: demo group - permissions: [] - id: adminQA1Group parents: - id: adminGroup type: userGroup permissions: [] + - id: demoGroup + name: demo group + permissions: [] - id: visitorsGroup name: visitors parents: @@ -447,14 +447,14 @@ interactions: email: demo@example.com firstname: Demo lastname: User - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs userGroups: - id: adminGroup type: userGroup settings: [] permissions: [] - id: demo2 - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs userGroups: - id: demoGroup type: userGroup diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/put_declarative_users.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/put_declarative_users.yaml index 299c7030f..6ce16dec8 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/put_declarative_users.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/put_declarative_users.yaml @@ -51,7 +51,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + - authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs email: demo@example.com firstname: Demo id: demo @@ -61,7 +61,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + - authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 permissions: [] settings: [] @@ -122,7 +122,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authenticationId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs firstname: Demo lastname: User email: demo@example.com @@ -136,7 +136,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authenticationId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 links: self: http://localhost:3000/api/v1/entities/users/demo2 @@ -176,14 +176,14 @@ interactions: email: demo@example.com firstname: Demo lastname: User - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs userGroups: - id: adminGroup type: userGroup settings: [] permissions: [] - id: demo2 - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs userGroups: - id: demoGroup type: userGroup @@ -272,7 +272,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + - authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs email: demo@example.com firstname: Demo id: demo @@ -282,7 +282,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + - authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 permissions: [] settings: [] @@ -304,14 +304,14 @@ interactions: email: demo@example.com firstname: Demo lastname: User - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs userGroups: - id: adminGroup type: userGroup settings: [] permissions: [] - id: demo2 - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs userGroups: - id: demoGroup type: userGroup diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/put_declarative_users_user_groups.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/put_declarative_users_user_groups.yaml index 52707c9fa..7a9df561a 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/put_declarative_users_user_groups.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/put_declarative_users_user_groups.yaml @@ -68,7 +68,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + - authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs email: demo@example.com firstname: Demo id: demo @@ -78,7 +78,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + - authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 permissions: [] settings: [] @@ -139,7 +139,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authenticationId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs firstname: Demo lastname: User email: demo@example.com @@ -153,7 +153,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authenticationId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 links: self: http://localhost:3000/api/v1/entities/users/demo2 @@ -253,14 +253,14 @@ interactions: email: demo@example.com firstname: Demo lastname: User - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs userGroups: - id: adminGroup type: userGroup settings: [] permissions: [] - id: demo2 - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs userGroups: - id: demoGroup type: userGroup @@ -366,7 +366,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + - authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs email: demo@example.com firstname: Demo id: demo @@ -376,7 +376,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + - authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 permissions: [] settings: [] @@ -415,14 +415,14 @@ interactions: email: demo@example.com firstname: Demo lastname: User - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs userGroups: - id: adminGroup type: userGroup settings: [] permissions: [] - id: demo2 - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs userGroups: - id: demoGroup type: userGroup diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/store_declarative_users.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/store_declarative_users.yaml index 0ee66f3ae..50c15eb01 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/store_declarative_users.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/store_declarative_users.yaml @@ -51,7 +51,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + - authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs email: demo@example.com firstname: Demo id: demo @@ -61,7 +61,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + - authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 permissions: [] settings: [] @@ -117,7 +117,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + - authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs email: demo@example.com firstname: Demo id: demo @@ -127,7 +127,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + - authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 permissions: [] settings: [] diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/store_declarative_users_user_groups.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/store_declarative_users_user_groups.yaml index b9e338ceb..a0d88e82f 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/store_declarative_users_user_groups.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/store_declarative_users_user_groups.yaml @@ -68,7 +68,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + - authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs email: demo@example.com firstname: Demo id: demo @@ -78,7 +78,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + - authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 permissions: [] settings: [] @@ -151,7 +151,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + - authId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs email: demo@example.com firstname: Demo id: demo @@ -161,7 +161,7 @@ interactions: userGroups: - id: adminGroup type: userGroup - - authId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + - authId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 permissions: [] settings: [] diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/test_api_tokens.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/test_api_tokens.yaml index 5c57f5d2b..723e48648 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/test_api_tokens.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/test_api_tokens.yaml @@ -97,7 +97,7 @@ interactions: string: data: attributes: - bearerToken: ZGVtbzp0ZXN0X3Rva2VuOjV1eXBzMGpLZjUxRXplS3psREFuNkkxTVpSYzVBVnZ2 + bearerToken: ZGVtbzp0ZXN0X3Rva2VuOm9HWkJIODhUOE9RZGxyY2lxZDdrbHY2UmM4N1pYQnhC id: test_token type: apiToken links: @@ -239,49 +239,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/users/demo/apiTokens?page=0&size=500 - 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: - - '189' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/users/demo/apiTokens?page=0&size=500 - next: http://localhost:3000/api/v1/entities/users/demo/apiTokens?page=1&size=500 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/test_user_add_user_group.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/test_user_add_user_group.yaml index bd98a7951..61eecf187 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/test_user_add_user_group.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/test_user_add_user_group.yaml @@ -46,7 +46,7 @@ interactions: string: data: attributes: - authenticationId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authenticationId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 relationships: userGroups: diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/test_user_add_user_groups.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/test_user_add_user_groups.yaml index bd98a7951..61eecf187 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/test_user_add_user_groups.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/test_user_add_user_groups.yaml @@ -46,7 +46,7 @@ interactions: string: data: attributes: - authenticationId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authenticationId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 relationships: userGroups: diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/test_user_remove_user_groups.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/test_user_remove_user_groups.yaml index bd98a7951..61eecf187 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/test_user_remove_user_groups.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/test_user_remove_user_groups.yaml @@ -46,7 +46,7 @@ interactions: string: data: attributes: - authenticationId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authenticationId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 relationships: userGroups: diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/test_user_replace_user_groups.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/test_user_replace_user_groups.yaml index bd98a7951..61eecf187 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/test_user_replace_user_groups.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/test_user_replace_user_groups.yaml @@ -46,7 +46,7 @@ interactions: string: data: attributes: - authenticationId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authenticationId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 relationships: userGroups: diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/update_user.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/update_user.yaml index eef07972e..31a85349b 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/update_user.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/update_user.yaml @@ -56,7 +56,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authenticationId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs firstname: Demo lastname: User email: demo@example.com @@ -70,7 +70,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authenticationId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 links: self: http://localhost:3000/api/v1/entities/users/demo2 @@ -141,7 +141,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: bdb819a99f0f28ae77afd955be1673dc + traceId: 24d905bd80b116cd9bfce301d933e23f - request: method: POST uri: http://localhost:3000/api/v1/entities/users @@ -263,7 +263,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authenticationId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs firstname: Demo lastname: User email: demo@example.com @@ -277,7 +277,7 @@ interactions: type: userGroup type: user - attributes: - authenticationId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs + authenticationId: CiRjOTVhNDA1Zi1iODRiLTRkZjItOTUyNi00YjQ4N2VmOTA0MjESBWxvY2Fs id: demo2 links: self: http://localhost:3000/api/v1/entities/users/demo2 @@ -559,96 +559,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/users?include=userGroups&page=0&size=500 - 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: - - '1302' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: - - attributes: {} - id: admin - links: - self: http://localhost:3000/api/v1/entities/users/admin - relationships: - userGroups: - data: - - id: adminGroup - type: userGroup - type: user - - attributes: - authenticationId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs - firstname: Demo - lastname: User - email: demo@example.com - id: demo - links: - self: http://localhost:3000/api/v1/entities/users/demo - relationships: - userGroups: - data: - - id: adminGroup - type: userGroup - type: user - - attributes: - authenticationId: CiQxNzQyNzBmZC0wZjlkLTRkMTctYjU5Ni01OThhNzkzMDU3ODkSBWxvY2Fs - id: demo2 - links: - self: http://localhost:3000/api/v1/entities/users/demo2 - relationships: - userGroups: - data: - - id: demoGroup - type: userGroup - type: user - included: - - attributes: {} - id: adminGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups/adminGroup - type: userGroup - - attributes: - name: demo group - id: demoGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups/demoGroup - type: userGroup - links: - self: http://localhost:3000/api/v1/entities/users?include=userGroups&page=0&size=500 - next: http://localhost:3000/api/v1/entities/users?include=userGroups&page=1&size=500 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/users/update_user_group.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/users/update_user_group.yaml index 1547b426f..55581a044 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/users/update_user_group.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/users/update_user_group.yaml @@ -51,96 +51,6 @@ interactions: type: userGroup links: self: http://localhost:3000/api/v1/entities/userGroups/demoGroup?include=ALL - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/userGroups?include=userGroups&page=0&size=500 - 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: - - '1241' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: - - attributes: {} - id: adminGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups/adminGroup - type: userGroup - - attributes: {} - id: adminQA1Group - links: - self: http://localhost:3000/api/v1/entities/userGroups/adminQA1Group - relationships: - parents: - data: - - id: adminGroup - type: userGroup - type: userGroup - - attributes: - name: demo group - id: demoGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups/demoGroup - type: userGroup - - attributes: - name: visitors - id: visitorsGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups/visitorsGroup - relationships: - parents: - data: - - id: demoGroup - type: userGroup - type: userGroup - included: - - attributes: {} - id: adminGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups/adminGroup - type: userGroup - - attributes: - name: demo group - id: demoGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups/demoGroup - type: userGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups?include=userGroups&page=0&size=500 - next: http://localhost:3000/api/v1/entities/userGroups?include=userGroups&page=1&size=500 - request: method: GET uri: http://localhost:3000/api/v1/entities/userGroups/demoGroup?include=ALL @@ -403,93 +313,3 @@ interactions: type: userGroup links: self: http://localhost:3000/api/v1/entities/userGroups/demoGroup - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/userGroups?include=userGroups&page=0&size=500 - 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: - - '1241' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: - - attributes: {} - id: adminGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups/adminGroup - type: userGroup - - attributes: {} - id: adminQA1Group - links: - self: http://localhost:3000/api/v1/entities/userGroups/adminQA1Group - relationships: - parents: - data: - - id: adminGroup - type: userGroup - type: userGroup - - attributes: - name: demo group - id: demoGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups/demoGroup - type: userGroup - - attributes: - name: visitors - id: visitorsGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups/visitorsGroup - relationships: - parents: - data: - - id: demoGroup - type: userGroup - type: userGroup - included: - - attributes: {} - id: adminGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups/adminGroup - type: userGroup - - attributes: - name: demo group - id: demoGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups/demoGroup - type: userGroup - links: - self: http://localhost:3000/api/v1/entities/userGroups?include=userGroups&page=0&size=500 - next: http://localhost:3000/api/v1/entities/userGroups?include=userGroups&page=1&size=500 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/analytics_store_load.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/analytics_store_load.yaml index 017b1a28e..94f62af04 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/analytics_store_load.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/analytics_store_load.yaml @@ -94,7 +94,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -137,7 +137,7 @@ interactions: type: dashboardPlugin version: '2' version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -287,7 +287,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -299,7 +299,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -309,7 +309,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -360,7 +360,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -369,7 +369,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/order_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -379,7 +379,7 @@ interactions: format: '#,##0' maql: 'SELECT {metric/amount_of_active_customers} WHERE (SELECT {metric/revenue} BY {attribute/customer_id}) > 10000 ' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -389,7 +389,7 @@ interactions: format: '#,##0.00' maql: SELECT {metric/amount_of_orders} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -399,7 +399,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/spend}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -408,7 +408,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/price}*{fact/quantity}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -417,7 +417,7 @@ interactions: - content: format: '#,##0.0%' maql: SELECT {metric/revenue} / {metric/total_revenue} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -427,7 +427,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -437,7 +437,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -447,7 +447,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -457,7 +457,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -467,7 +467,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY {attribute/products.category}, ALL OTHER) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -477,7 +477,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -487,7 +487,7 @@ interactions: format: $#,##0 maql: SELECT {metric/order_amount} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -498,7 +498,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -508,7 +508,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ( "Electronics") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -518,7 +518,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -528,7 +528,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -537,7 +537,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -546,7 +546,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT {metric/revenue} / {metric/campaign_spend} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -555,7 +555,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -564,7 +564,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -573,7 +573,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} BY ALL OTHER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -582,7 +582,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -647,7 +647,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -723,7 +723,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -802,7 +802,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -861,7 +861,7 @@ interactions: stackMeasuresToPercent: true version: '2' visualizationUrl: local:area - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -918,7 +918,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -971,7 +971,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:donut - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1046,7 +1046,7 @@ interactions: visible: false version: '2' visualizationUrl: local:column - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1103,7 +1103,7 @@ interactions: enabled: true version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1202,7 +1202,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1258,7 +1258,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:line - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1297,7 +1297,7 @@ interactions: properties: {} version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1353,7 +1353,7 @@ interactions: min: '0' version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1421,7 +1421,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1478,7 +1478,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1535,7 +1535,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1633,7 +1633,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1676,7 +1676,7 @@ interactions: type: dashboardPlugin version: '2' version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1826,7 +1826,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1838,7 +1838,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1848,7 +1848,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1899,7 +1899,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1908,7 +1908,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/order_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1918,7 +1918,7 @@ interactions: format: '#,##0' maql: 'SELECT {metric/amount_of_active_customers} WHERE (SELECT {metric/revenue} BY {attribute/customer_id}) > 10000 ' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1928,7 +1928,7 @@ interactions: format: '#,##0.00' maql: SELECT {metric/amount_of_orders} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1938,7 +1938,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/spend}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1947,7 +1947,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/price}*{fact/quantity}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1956,7 +1956,7 @@ interactions: - content: format: '#,##0.0%' maql: SELECT {metric/revenue} / {metric/total_revenue} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1966,7 +1966,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1976,7 +1976,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1986,7 +1986,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -1996,7 +1996,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2006,7 +2006,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY {attribute/products.category}, ALL OTHER) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2016,7 +2016,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2026,7 +2026,7 @@ interactions: format: $#,##0 maql: SELECT {metric/order_amount} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2037,7 +2037,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2047,7 +2047,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ( "Electronics") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2057,7 +2057,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2067,7 +2067,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2076,7 +2076,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2085,7 +2085,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT {metric/revenue} / {metric/campaign_spend} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2094,7 +2094,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2103,7 +2103,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2112,7 +2112,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} BY ALL OTHER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2121,7 +2121,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2186,7 +2186,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2262,7 +2262,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2341,7 +2341,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2400,7 +2400,7 @@ interactions: stackMeasuresToPercent: true version: '2' visualizationUrl: local:area - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2457,7 +2457,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2510,7 +2510,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:donut - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2585,7 +2585,7 @@ interactions: visible: false version: '2' visualizationUrl: local:column - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2642,7 +2642,7 @@ interactions: enabled: true version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2741,7 +2741,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2797,7 +2797,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:line - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2836,7 +2836,7 @@ interactions: properties: {} version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2892,7 +2892,7 @@ interactions: min: '0' version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -2960,7 +2960,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -3017,7 +3017,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user @@ -3074,7 +3074,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 createdBy: id: admin type: user diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog.yaml index 686f10868..3f4c580b7 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog.yaml @@ -583,57 +583,57 @@ interactions: type: attribute referenceProperties: - identifier: - id: campaigns + id: customers type: dataset multivalue: false sources: - - column: campaign_id + - column: customer_id dataType: INT target: - id: campaign_id + id: customer_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: products + id: campaigns type: dataset multivalue: false sources: - - column: product_id + - column: campaign_id dataType: INT target: - id: product_id + id: campaign_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: customers + id: date type: dataset multivalue: false sources: - - column: customer_id - dataType: INT + - column: date + dataType: DATE target: - id: customer_id - type: attribute + id: date + type: date isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: date + id: products type: dataset multivalue: false sources: - - column: date - dataType: DATE + - column: product_id + dataType: INT target: - id: date - type: date + id: product_id + type: attribute isNullable: null nullValue: null sourceColumns: null @@ -1184,14 +1184,14 @@ interactions: relationships: attributes: data: - - id: region - type: attribute - - id: state - type: attribute - id: customer_id type: attribute - id: customer_name type: attribute + - id: region + type: attribute + - id: state + type: attribute type: dataset - attributes: title: Date @@ -1231,57 +1231,57 @@ interactions: type: attribute referenceProperties: - identifier: - id: campaigns + id: customers type: dataset multivalue: false sources: - - column: campaign_id + - column: customer_id dataType: INT target: - id: campaign_id + id: customer_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: products + id: campaigns type: dataset multivalue: false sources: - - column: product_id + - column: campaign_id dataType: INT target: - id: product_id + id: campaign_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: customers + id: date type: dataset multivalue: false sources: - - column: customer_id - dataType: INT + - column: date + dataType: DATE target: - id: customer_id - type: attribute + id: date + type: date isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: date + id: products type: dataset multivalue: false sources: - - column: date - dataType: DATE + - column: product_id + dataType: INT target: - id: date - type: date + id: product_id + type: attribute isNullable: null nullValue: null sourceColumns: null @@ -1685,7 +1685,7 @@ interactions: content: format: '#,##0' maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: amount_of_active_customers links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/amount_of_active_customers @@ -1700,7 +1700,7 @@ interactions: content: format: '#,##0' maql: SELECT COUNT({attribute/order_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: amount_of_orders links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/amount_of_orders @@ -1716,7 +1716,7 @@ interactions: format: '#,##0' maql: 'SELECT {metric/amount_of_active_customers} WHERE (SELECT {metric/revenue} BY {attribute/customer_id}) > 10000 ' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: amount_of_top_customers links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/amount_of_top_customers @@ -1733,7 +1733,7 @@ interactions: format: '#,##0.00' maql: SELECT {metric/amount_of_orders} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: amount_of_valid_orders links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/amount_of_valid_orders @@ -1748,7 +1748,7 @@ interactions: content: format: $#,##0 maql: SELECT SUM({fact/spend}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: campaign_spend links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/campaign_spend @@ -1763,7 +1763,7 @@ interactions: content: format: $#,##0 maql: SELECT SUM({fact/price}*{fact/quantity}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: order_amount links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/order_amount @@ -1778,7 +1778,7 @@ interactions: content: format: '#,##0.0%' maql: SELECT {metric/revenue} / {metric/total_revenue} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue @@ -1794,7 +1794,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue_from_top_10_customers links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_from_top_10_customers @@ -1810,7 +1810,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue_from_top_10_percent_customers links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_from_top_10_percent_customers @@ -1826,7 +1826,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue_from_top_10_percent_products links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_from_top_10_percent_products @@ -1842,7 +1842,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue_from_top_10_products links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_from_top_10_products @@ -1858,7 +1858,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY {attribute/products.category}, ALL OTHER) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue_in_category links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_in_category @@ -1874,7 +1874,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue_per_product links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_per_product @@ -1891,7 +1891,7 @@ interactions: format: $#,##0 maql: SELECT {metric/order_amount} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue @@ -1907,7 +1907,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue-clothing links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue-clothing @@ -1923,7 +1923,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ( "Electronics") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue-electronic links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue-electronic @@ -1939,7 +1939,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue-home links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue-home @@ -1955,7 +1955,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue-outdoor links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue-outdoor @@ -1970,7 +1970,7 @@ interactions: content: format: $#,##0.0 maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue_per_customer links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue_per_customer @@ -1985,7 +1985,7 @@ interactions: content: format: $#,##0.0 maql: SELECT {metric/revenue} / {metric/campaign_spend} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue_per_dollar_spent links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue_per_dollar_spent @@ -2000,7 +2000,7 @@ interactions: content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue_top_10 links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue_top_10 @@ -2015,7 +2015,7 @@ interactions: content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue_top_10_percent links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue_top_10_percent @@ -2030,7 +2030,7 @@ interactions: content: format: $#,##0 maql: SELECT {metric/revenue} BY ALL OTHER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: total_revenue links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/total_revenue @@ -2045,7 +2045,7 @@ interactions: content: format: $#,##0 maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: total_revenue-no_filters links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/total_revenue-no_filters diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog_availability.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog_availability.yaml index 273e93a13..127f93d04 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog_availability.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog_availability.yaml @@ -583,57 +583,57 @@ interactions: type: attribute referenceProperties: - identifier: - id: campaigns + id: customers type: dataset multivalue: false sources: - - column: campaign_id + - column: customer_id dataType: INT target: - id: campaign_id + id: customer_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: products + id: campaigns type: dataset multivalue: false sources: - - column: product_id + - column: campaign_id dataType: INT target: - id: product_id + id: campaign_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: customers + id: date type: dataset multivalue: false sources: - - column: customer_id - dataType: INT + - column: date + dataType: DATE target: - id: customer_id - type: attribute + id: date + type: date isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: date + id: products type: dataset multivalue: false sources: - - column: date - dataType: DATE + - column: product_id + dataType: INT target: - id: date - type: date + id: product_id + type: attribute isNullable: null nullValue: null sourceColumns: null @@ -1184,14 +1184,14 @@ interactions: relationships: attributes: data: - - id: region - type: attribute - - id: state - type: attribute - id: customer_id type: attribute - id: customer_name type: attribute + - id: region + type: attribute + - id: state + type: attribute type: dataset - attributes: title: Date @@ -1231,57 +1231,57 @@ interactions: type: attribute referenceProperties: - identifier: - id: campaigns + id: customers type: dataset multivalue: false sources: - - column: campaign_id + - column: customer_id dataType: INT target: - id: campaign_id + id: customer_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: products + id: campaigns type: dataset multivalue: false sources: - - column: product_id + - column: campaign_id dataType: INT target: - id: product_id + id: campaign_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: customers + id: date type: dataset multivalue: false sources: - - column: customer_id - dataType: INT + - column: date + dataType: DATE target: - id: customer_id - type: attribute + id: date + type: date isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: date + id: products type: dataset multivalue: false sources: - - column: date - dataType: DATE + - column: product_id + dataType: INT target: - id: date - type: date + id: product_id + type: attribute isNullable: null nullValue: null sourceColumns: null @@ -1685,7 +1685,7 @@ interactions: content: format: '#,##0' maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: amount_of_active_customers links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/amount_of_active_customers @@ -1700,7 +1700,7 @@ interactions: content: format: '#,##0' maql: SELECT COUNT({attribute/order_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: amount_of_orders links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/amount_of_orders @@ -1716,7 +1716,7 @@ interactions: format: '#,##0' maql: 'SELECT {metric/amount_of_active_customers} WHERE (SELECT {metric/revenue} BY {attribute/customer_id}) > 10000 ' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: amount_of_top_customers links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/amount_of_top_customers @@ -1733,7 +1733,7 @@ interactions: format: '#,##0.00' maql: SELECT {metric/amount_of_orders} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: amount_of_valid_orders links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/amount_of_valid_orders @@ -1748,7 +1748,7 @@ interactions: content: format: $#,##0 maql: SELECT SUM({fact/spend}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: campaign_spend links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/campaign_spend @@ -1763,7 +1763,7 @@ interactions: content: format: $#,##0 maql: SELECT SUM({fact/price}*{fact/quantity}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: order_amount links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/order_amount @@ -1778,7 +1778,7 @@ interactions: content: format: '#,##0.0%' maql: SELECT {metric/revenue} / {metric/total_revenue} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue @@ -1794,7 +1794,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue_from_top_10_customers links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_from_top_10_customers @@ -1810,7 +1810,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue_from_top_10_percent_customers links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_from_top_10_percent_customers @@ -1826,7 +1826,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue_from_top_10_percent_products links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_from_top_10_percent_products @@ -1842,7 +1842,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue_from_top_10_products links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_from_top_10_products @@ -1858,7 +1858,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY {attribute/products.category}, ALL OTHER) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue_in_category links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_in_category @@ -1874,7 +1874,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue_per_product links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_per_product @@ -1891,7 +1891,7 @@ interactions: format: $#,##0 maql: SELECT {metric/order_amount} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue @@ -1907,7 +1907,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue-clothing links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue-clothing @@ -1923,7 +1923,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ( "Electronics") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue-electronic links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue-electronic @@ -1939,7 +1939,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue-home links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue-home @@ -1955,7 +1955,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue-outdoor links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue-outdoor @@ -1970,7 +1970,7 @@ interactions: content: format: $#,##0.0 maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue_per_customer links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue_per_customer @@ -1985,7 +1985,7 @@ interactions: content: format: $#,##0.0 maql: SELECT {metric/revenue} / {metric/campaign_spend} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue_per_dollar_spent links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue_per_dollar_spent @@ -2000,7 +2000,7 @@ interactions: content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue_top_10 links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue_top_10 @@ -2015,7 +2015,7 @@ interactions: content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue_top_10_percent links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue_top_10_percent @@ -2030,7 +2030,7 @@ interactions: content: format: $#,##0 maql: SELECT {metric/revenue} BY ALL OTHER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: total_revenue links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/total_revenue @@ -2045,7 +2045,7 @@ interactions: content: format: $#,##0 maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: total_revenue-no_filters links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/total_revenue-no_filters diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog_list_metrics.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog_list_metrics.yaml index 429c51788..52cfe0efe 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog_list_metrics.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_catalog_list_metrics.yaml @@ -51,7 +51,7 @@ interactions: content: format: '#,##0' maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: amount_of_active_customers links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/amount_of_active_customers @@ -66,7 +66,7 @@ interactions: content: format: '#,##0' maql: SELECT COUNT({attribute/order_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: amount_of_orders links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/amount_of_orders @@ -82,7 +82,7 @@ interactions: format: '#,##0' maql: 'SELECT {metric/amount_of_active_customers} WHERE (SELECT {metric/revenue} BY {attribute/customer_id}) > 10000 ' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: amount_of_top_customers links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/amount_of_top_customers @@ -99,7 +99,7 @@ interactions: format: '#,##0.00' maql: SELECT {metric/amount_of_orders} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: amount_of_valid_orders links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/amount_of_valid_orders @@ -114,7 +114,7 @@ interactions: content: format: $#,##0 maql: SELECT SUM({fact/spend}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: campaign_spend links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/campaign_spend @@ -129,7 +129,7 @@ interactions: content: format: $#,##0 maql: SELECT SUM({fact/price}*{fact/quantity}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: order_amount links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/order_amount @@ -144,7 +144,7 @@ interactions: content: format: '#,##0.0%' maql: SELECT {metric/revenue} / {metric/total_revenue} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: percent_revenue links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue @@ -160,7 +160,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: percent_revenue_from_top_10_customers links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_from_top_10_customers @@ -176,7 +176,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: percent_revenue_from_top_10_percent_customers links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_from_top_10_percent_customers @@ -192,7 +192,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: percent_revenue_from_top_10_percent_products links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_from_top_10_percent_products @@ -208,7 +208,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: percent_revenue_from_top_10_products links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_from_top_10_products @@ -224,7 +224,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY {attribute/products.category}, ALL OTHER) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: percent_revenue_in_category links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_in_category @@ -240,7 +240,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: percent_revenue_per_product links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_per_product @@ -257,7 +257,7 @@ interactions: format: $#,##0 maql: SELECT {metric/order_amount} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: revenue links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue @@ -273,7 +273,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: revenue-clothing links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue-clothing @@ -289,7 +289,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ( "Electronics") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: revenue-electronic links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue-electronic @@ -305,7 +305,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: revenue-home links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue-home @@ -321,7 +321,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: revenue-outdoor links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue-outdoor @@ -336,7 +336,7 @@ interactions: content: format: $#,##0.0 maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: revenue_per_customer links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue_per_customer @@ -351,7 +351,7 @@ interactions: content: format: $#,##0.0 maql: SELECT {metric/revenue} / {metric/campaign_spend} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: revenue_per_dollar_spent links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue_per_dollar_spent @@ -366,7 +366,7 @@ interactions: content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: revenue_top_10 links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue_top_10 @@ -381,7 +381,7 @@ interactions: content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: revenue_top_10_percent links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue_top_10_percent @@ -396,7 +396,7 @@ interactions: content: format: $#,##0 maql: SELECT {metric/revenue} BY ALL OTHER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: total_revenue links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/total_revenue @@ -411,7 +411,7 @@ interactions: content: format: $#,##0 maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 id: total_revenue-no_filters links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/total_revenue-no_filters diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_get_dependent_entities_graph.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_get_dependent_entities_graph.yaml index 301ceb9d3..1032a9a38 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_get_dependent_entities_graph.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_get_dependent_entities_graph.yaml @@ -64,15 +64,11 @@ interactions: type: dataset - - id: customer_id type: attribute - - id: customers - type: dataset - - - id: customer_id - type: attribute - - id: revenue_per_customer + - id: percent_revenue_from_top_10_customers type: metric - - id: customer_id type: attribute - - id: percent_revenue_from_top_10_customers + - id: amount_of_active_customers type: metric - - id: customer_id type: attribute @@ -80,11 +76,15 @@ interactions: type: metric - - id: customer_id type: attribute - - id: amount_of_active_customers + - id: amount_of_top_customers type: metric - - id: customer_id type: attribute - - id: amount_of_top_customers + - id: customers + type: dataset + - - id: customer_id + type: attribute + - id: revenue_per_customer type: metric - - id: customer_name type: attribute @@ -106,23 +106,19 @@ interactions: type: attribute - id: date type: dataset - - - id: date.year - type: attribute - - id: date - type: dataset - - id: date.year type: attribute - id: product_revenue_comparison-over_previous_period type: visualizationObject - - - id: order_id + - - id: date.year type: attribute - - id: order_lines + - id: date type: dataset - - id: order_id type: attribute - id: amount_of_orders type: metric - - - id: order_line_id + - - id: order_id type: attribute - id: order_lines type: dataset @@ -130,26 +126,30 @@ interactions: type: attribute - id: amount_of_active_customers type: metric + - - id: order_line_id + type: attribute + - id: order_lines + type: dataset - - id: order_status type: attribute - id: order_lines type: dataset - - id: product_id type: attribute - - id: percent_revenue_per_product + - id: percent_revenue_from_top_10_percent_products type: metric - - - id: product_id - type: attribute - - id: products - type: dataset - - id: product_id type: attribute - id: percent_revenue_from_top_10_products type: metric - - id: product_id type: attribute - - id: percent_revenue_from_top_10_percent_products + - id: percent_revenue_per_product type: metric + - - id: product_id + type: attribute + - id: products + type: dataset - - id: product_name type: attribute - id: products @@ -194,10 +194,6 @@ interactions: type: dataset - id: order_lines type: dataset - - - id: date - type: dataset - - id: order_lines - type: dataset - - id: date type: dataset - id: revenue_by_category_trend @@ -212,16 +208,20 @@ interactions: type: visualizationObject - - id: date type: dataset - - id: product_and_category - type: analyticalDashboard + - id: revenue_trend + type: visualizationObject + - - id: date + type: dataset + - id: order_lines + type: dataset - - id: date type: dataset - id: customers_trend type: visualizationObject - - id: date type: dataset - - id: revenue_trend - type: visualizationObject + - id: product_and_category + type: analyticalDashboard - - id: products type: dataset - id: order_lines @@ -232,72 +232,76 @@ interactions: type: dataset - - id: price type: fact - - id: order_lines - type: dataset + - id: revenue_and_quantity_by_product_and_category + type: visualizationObject - - id: price type: fact - id: order_amount type: metric - - id: price type: fact - - id: revenue_and_quantity_by_product_and_category - type: visualizationObject - - - id: quantity - type: fact - id: order_lines type: dataset + - - id: quantity + type: fact + - id: revenue_and_quantity_by_product_and_category + type: visualizationObject - - id: quantity type: fact - id: order_amount type: metric - - id: quantity type: fact - - id: revenue_and_quantity_by_product_and_category - type: visualizationObject - - - id: spend - type: fact - - id: campaign_channels + - id: order_lines type: dataset - - id: spend type: fact - id: campaign_spend type: metric + - - id: spend + type: fact + - id: campaign_channels + type: dataset - - id: campaign_channel_id type: label - id: campaign_channel_id type: attribute - - - id: campaign_channels.category - type: label - - id: campaign_spend - type: visualizationObject - - id: campaign_channels.category type: label - id: campaign_channels.category type: attribute + - - id: campaign_channels.category + type: label + - id: campaign_spend + type: visualizationObject - - id: campaign_id type: label - id: campaign_id type: attribute - - - id: campaign_name - type: label - - id: revenue_per_usd_vs_spend_by_campaign - type: visualizationObject - - id: campaign_name type: label - id: campaign_name type: attribute + - - id: campaign_name + type: label + - id: campaign_name_filter + type: filterContext - - id: campaign_name type: label - id: campaign_spend type: visualizationObject - - id: campaign_name type: label - - id: campaign_name_filter - type: filterContext + - id: revenue_per_usd_vs_spend_by_campaign + type: visualizationObject - - id: customer_id type: label - id: customer_id type: attribute + - - id: customer_name + type: label + - id: percent_revenue_per_product_by_customer_and_category + type: visualizationObject - - id: customer_name type: label - id: revenue_and_quantity_by_product_and_category @@ -310,10 +314,6 @@ interactions: type: label - id: customer_name type: attribute - - - id: customer_name - type: label - - id: percent_revenue_per_product_by_customer_and_category - type: visualizationObject - - id: date.day type: label - id: date.day @@ -322,6 +322,10 @@ interactions: type: label - id: percentage_of_customers_by_region type: visualizationObject + - - id: date.month + type: label + - id: revenue_trend + type: visualizationObject - - id: date.month type: label - id: date.month @@ -334,10 +338,6 @@ interactions: type: label - id: revenue_by_category_trend type: visualizationObject - - - id: date.month - type: label - - id: revenue_trend - type: visualizationObject - - id: date.quarter type: label - id: date.quarter @@ -362,14 +362,14 @@ interactions: type: label - id: order_line_id type: attribute - - - id: order_status - type: label - - id: order_status - type: attribute - - id: order_status type: label - id: amount_of_valid_orders type: metric + - - id: order_status + type: label + - id: order_status + type: attribute - - id: order_status type: label - id: revenue @@ -380,20 +380,20 @@ interactions: type: attribute - - id: product_name type: label - - id: top_10_products + - id: percent_revenue_per_product_by_customer_and_category type: visualizationObject - - id: product_name type: label - - id: product_breakdown + - id: product_categories_pie_chart type: visualizationObject - - id: product_name type: label - - id: product_categories_pie_chart + - id: product_breakdown type: visualizationObject - - id: product_name type: label - - id: product_name - type: attribute + - id: top_10_products + type: visualizationObject - - id: product_name type: label - id: product_revenue_comparison-over_previous_period @@ -404,27 +404,27 @@ interactions: type: visualizationObject - - id: product_name type: label - - id: revenue_and_quantity_by_product_and_category - type: visualizationObject + - id: product_name + type: attribute - - id: product_name type: label - - id: percent_revenue_per_product_by_customer_and_category + - id: product_saleability type: visualizationObject - - id: product_name type: label - - id: product_saleability + - id: revenue_and_quantity_by_product_and_category type: visualizationObject - - id: products.category type: label - - id: top_10_products + - id: percent_revenue_per_product_by_customer_and_category type: visualizationObject - - id: products.category type: label - - id: revenue-electronic - type: metric + - id: product_categories_pie_chart + type: visualizationObject - - id: products.category type: label - - id: revenue-clothing + - id: revenue-home type: metric - - id: products.category type: label @@ -436,16 +436,12 @@ interactions: type: visualizationObject - - id: products.category type: label - - id: product_categories_pie_chart - type: visualizationObject - - - id: products.category - type: label - - id: revenue-home + - id: revenue-clothing type: metric - - id: products.category type: label - - id: revenue-outdoor - type: metric + - id: top_10_products + type: visualizationObject - - id: products.category type: label - id: product_revenue_comparison-over_previous_period @@ -460,7 +456,15 @@ interactions: type: visualizationObject - - id: products.category type: label - - id: percent_revenue_per_product_by_customer_and_category + - id: revenue-electronic + type: metric + - - id: products.category + type: label + - id: revenue-outdoor + type: metric + - - id: region + type: label + - id: percentage_of_customers_by_region type: visualizationObject - - id: region type: label @@ -470,10 +474,6 @@ interactions: type: label - id: region type: attribute - - - id: region - type: label - - id: percentage_of_customers_by_region - type: visualizationObject - - id: state type: label - id: top_10_customers @@ -482,41 +482,37 @@ interactions: type: label - id: state type: attribute - - - id: type - type: label - - id: campaign_spend - type: visualizationObject - - id: type type: label - id: type type: attribute - - - id: amount_of_active_customers - type: metric - - id: percentage_of_customers_by_region + - - id: type + type: label + - id: campaign_spend type: visualizationObject - - id: amount_of_active_customers type: metric - - id: customers_trend + - id: percentage_of_customers_by_region type: visualizationObject - - id: amount_of_active_customers type: metric - id: amount_of_top_customers type: metric - - - id: amount_of_orders + - - id: amount_of_active_customers type: metric - - id: revenue_trend + - id: customers_trend type: visualizationObject + - - id: amount_of_orders + type: metric + - id: amount_of_valid_orders + type: metric - - id: amount_of_orders type: metric - id: product_saleability type: visualizationObject - - id: amount_of_orders type: metric - - id: amount_of_valid_orders - type: metric - - - id: campaign_spend - type: metric - - id: revenue_per_usd_vs_spend_by_campaign + - id: revenue_trend type: visualizationObject - - id: campaign_spend type: metric @@ -526,6 +522,10 @@ interactions: type: metric - id: campaign_spend type: visualizationObject + - - id: campaign_spend + type: metric + - id: revenue_per_usd_vs_spend_by_campaign + type: visualizationObject - - id: order_amount type: metric - id: revenue @@ -540,47 +540,55 @@ interactions: type: visualizationObject - - id: revenue type: metric - - id: revenue-clothing + - id: percent_revenue_from_top_10_customers type: metric - - id: revenue type: metric - - id: product_breakdown + - id: percent_revenue_per_product_by_customer_and_category type: visualizationObject - - id: revenue type: metric - - id: revenue_by_category_trend - type: visualizationObject + - id: percent_revenue_in_category + type: metric - - id: revenue type: metric - - id: product_categories_pie_chart - type: visualizationObject + - id: percent_revenue_per_product + type: metric - - id: revenue type: metric - - id: percent_revenue_in_category + - id: revenue-clothing + type: metric + - - id: revenue type: metric + - id: product_revenue_comparison-over_previous_period + type: visualizationObject - - id: revenue type: metric - id: revenue_top_10 type: metric - - id: revenue type: metric - - id: percent_revenue_per_product + - id: revenue_by_product + type: visualizationObject + - - id: revenue type: metric + - id: revenue_trend + type: visualizationObject - - id: revenue type: metric - - id: revenue-outdoor + - id: amount_of_top_customers type: metric - - id: revenue type: metric - - id: revenue_per_customer - type: metric + - id: product_saleability + type: visualizationObject - - id: revenue type: metric - - id: percent_revenue_from_top_10_customers + - id: revenue_per_dollar_spent type: metric - - id: revenue type: metric - - id: revenue_and_quantity_by_product_and_category + - id: product_categories_pie_chart type: visualizationObject - - id: revenue type: metric @@ -588,60 +596,52 @@ interactions: type: metric - - id: revenue type: metric - - id: revenue_top_10_percent + - id: percent_revenue_from_top_10_products type: metric - - id: revenue type: metric - - id: percent_revenue + - id: revenue-home type: metric - - id: revenue type: metric - - id: total_revenue - type: metric + - id: product_breakdown + type: visualizationObject - - id: revenue type: metric - - id: revenue-electronic - type: metric + - id: revenue_by_category_trend + type: visualizationObject - - id: revenue type: metric - id: percent_revenue_from_top_10_percent_customers type: metric - - id: revenue type: metric - - id: percent_revenue_from_top_10_products + - id: percent_revenue type: metric - - id: revenue type: metric - - id: revenue_per_dollar_spent + - id: total_revenue type: metric - - id: revenue type: metric - - id: revenue-home + - id: revenue_top_10_percent type: metric - - id: revenue type: metric - - id: product_revenue_comparison-over_previous_period + - id: revenue_and_quantity_by_product_and_category type: visualizationObject - - id: revenue type: metric - - id: revenue_by_product - type: visualizationObject - - - id: revenue + - id: revenue-electronic type: metric - - id: revenue_trend - type: visualizationObject - - id: revenue type: metric - - id: amount_of_top_customers + - id: revenue-outdoor type: metric - - id: revenue type: metric - - id: percent_revenue_per_product_by_customer_and_category - type: visualizationObject - - - id: revenue + - id: revenue_per_customer type: metric - - id: product_saleability - type: visualizationObject - - id: revenue_per_customer type: metric - id: customers_trend @@ -650,21 +650,21 @@ interactions: type: metric - id: revenue_per_usd_vs_spend_by_campaign type: visualizationObject - - - id: revenue_top_10 - type: metric - - id: top_10_products - type: visualizationObject - - id: revenue_top_10 type: metric - id: percent_revenue_from_top_10_customers type: metric + - - id: revenue_top_10 + type: metric + - id: top_10_customers + type: visualizationObject - - id: revenue_top_10 type: metric - id: percent_revenue_from_top_10_products type: metric - - id: revenue_top_10 type: metric - - id: top_10_customers + - id: top_10_products type: visualizationObject - - id: revenue_top_10_percent type: metric diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_load_and_modify_ds_and_put_declarative_ldm.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_load_and_modify_ds_and_put_declarative_ldm.yaml index b77a44e2e..8ef38cbf6 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_load_and_modify_ds_and_put_declarative_ldm.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_load_and_modify_ds_and_put_declarative_ldm.yaml @@ -44,7 +44,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 673fd5f14dd7d3ae0d362c0982d29b02 + traceId: 1ead8aaa54b9dfd33ebc9850002fa354 - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_load_and_put_declarative_analytics_model.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_load_and_put_declarative_analytics_model.yaml index 142ad4112..a442a8364 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_load_and_put_declarative_analytics_model.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_load_and_put_declarative_analytics_model.yaml @@ -44,7 +44,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: d9de430d2325b6b53c5f219dc401ece7 + traceId: b9449f3cf0c96c0fdf652d094c529e26 - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_load_and_put_declarative_ldm.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_load_and_put_declarative_ldm.yaml index fdbb8a25a..dc76e9d89 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_load_and_put_declarative_ldm.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_load_and_put_declarative_ldm.yaml @@ -44,7 +44,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: f566f715ce07a6469e9445ff7b5be24f + traceId: b8007bbb929afe53452b920b94780270 - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_put_declarative_analytics_model.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_put_declarative_analytics_model.yaml index b998d1e3a..5d8d9b29b 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_put_declarative_analytics_model.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_put_declarative_analytics_model.yaml @@ -33,7 +33,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 70430583981660c2cd4974a166a50292 + traceId: 0fc178cadf488c76119f7b68a7cc7571 - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_put_declarative_ldm.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_put_declarative_ldm.yaml index e07df2fd8..e88d66c97 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_put_declarative_ldm.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_put_declarative_ldm.yaml @@ -33,7 +33,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 99ab8b8998cae5573820bda78ff4e02a + traceId: 248a692a6227c11bb01070ef6e686962 - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_store_declarative_analytics_model.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_store_declarative_analytics_model.yaml index 24ffcb84e..fefbf601a 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_store_declarative_analytics_model.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/demo_store_declarative_analytics_model.yaml @@ -94,7 +94,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -137,7 +137,7 @@ interactions: type: dashboardPlugin version: '2' version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -287,7 +287,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -299,7 +299,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -309,7 +309,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -360,7 +360,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -369,7 +369,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/order_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -379,7 +379,7 @@ interactions: format: '#,##0' maql: 'SELECT {metric/amount_of_active_customers} WHERE (SELECT {metric/revenue} BY {attribute/customer_id}) > 10000 ' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -389,7 +389,7 @@ interactions: format: '#,##0.00' maql: SELECT {metric/amount_of_orders} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -399,7 +399,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/spend}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -408,7 +408,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/price}*{fact/quantity}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -417,7 +417,7 @@ interactions: - content: format: '#,##0.0%' maql: SELECT {metric/revenue} / {metric/total_revenue} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -427,7 +427,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -437,7 +437,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -447,7 +447,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -457,7 +457,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -467,7 +467,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY {attribute/products.category}, ALL OTHER) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -477,7 +477,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -487,7 +487,7 @@ interactions: format: $#,##0 maql: SELECT {metric/order_amount} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -498,7 +498,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -508,7 +508,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ( "Electronics") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -518,7 +518,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -528,7 +528,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -537,7 +537,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -546,7 +546,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT {metric/revenue} / {metric/campaign_spend} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -555,7 +555,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -564,7 +564,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -573,7 +573,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} BY ALL OTHER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -582,7 +582,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -647,7 +647,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -723,7 +723,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -802,7 +802,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -861,7 +861,7 @@ interactions: stackMeasuresToPercent: true version: '2' visualizationUrl: local:area - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -918,7 +918,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -971,7 +971,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:donut - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1046,7 +1046,7 @@ interactions: visible: false version: '2' visualizationUrl: local:column - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1103,7 +1103,7 @@ interactions: enabled: true version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1202,7 +1202,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1258,7 +1258,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:line - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1297,7 +1297,7 @@ interactions: properties: {} version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1353,7 +1353,7 @@ interactions: min: '0' version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1421,7 +1421,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1478,7 +1478,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1535,7 +1535,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1734,7 +1734,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1777,7 +1777,7 @@ interactions: type: dashboardPlugin version: '2' version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1927,7 +1927,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1939,7 +1939,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1949,7 +1949,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2000,7 +2000,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2009,7 +2009,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/order_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2019,7 +2019,7 @@ interactions: format: '#,##0' maql: 'SELECT {metric/amount_of_active_customers} WHERE (SELECT {metric/revenue} BY {attribute/customer_id}) > 10000 ' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2029,7 +2029,7 @@ interactions: format: '#,##0.00' maql: SELECT {metric/amount_of_orders} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2039,7 +2039,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/spend}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2048,7 +2048,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/price}*{fact/quantity}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2057,7 +2057,7 @@ interactions: - content: format: '#,##0.0%' maql: SELECT {metric/revenue} / {metric/total_revenue} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2067,7 +2067,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2077,7 +2077,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2087,7 +2087,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2097,7 +2097,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2107,7 +2107,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY {attribute/products.category}, ALL OTHER) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2117,7 +2117,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2127,7 +2127,7 @@ interactions: format: $#,##0 maql: SELECT {metric/order_amount} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2138,7 +2138,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2148,7 +2148,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ( "Electronics") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2158,7 +2158,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2168,7 +2168,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2177,7 +2177,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2186,7 +2186,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT {metric/revenue} / {metric/campaign_spend} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2195,7 +2195,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2204,7 +2204,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2213,7 +2213,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} BY ALL OTHER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2222,7 +2222,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2287,7 +2287,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2363,7 +2363,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2442,7 +2442,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2501,7 +2501,7 @@ interactions: stackMeasuresToPercent: true version: '2' visualizationUrl: local:area - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2558,7 +2558,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2611,7 +2611,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:donut - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2686,7 +2686,7 @@ interactions: visible: false version: '2' visualizationUrl: local:column - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2743,7 +2743,7 @@ interactions: enabled: true version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2842,7 +2842,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2898,7 +2898,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:line - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2937,7 +2937,7 @@ interactions: properties: {} version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2993,7 +2993,7 @@ interactions: min: '0' version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3061,7 +3061,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3118,7 +3118,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3175,7 +3175,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/explicit_workspace_data_filter.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/explicit_workspace_data_filter.yaml index 42d76ea77..4e9c908a9 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/explicit_workspace_data_filter.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/explicit_workspace_data_filter.yaml @@ -1812,57 +1812,57 @@ interactions: type: attribute referenceProperties: - identifier: - id: campaigns + id: customers type: dataset multivalue: false sources: - - column: campaign_id + - column: customer_id dataType: INT target: - id: campaign_id + id: customer_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: products + id: campaigns type: dataset multivalue: false sources: - - column: product_id + - column: campaign_id dataType: INT target: - id: product_id + id: campaign_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: customers + id: date type: dataset multivalue: false sources: - - column: customer_id - dataType: INT + - column: date + dataType: DATE target: - id: customer_id - type: attribute + id: date + type: date isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: date + id: products type: dataset multivalue: false sources: - - column: date - dataType: DATE + - column: product_id + dataType: INT target: - id: date - type: date + id: product_id + type: attribute isNullable: null nullValue: null sourceColumns: null @@ -2472,57 +2472,57 @@ interactions: type: attribute referenceProperties: - identifier: - id: campaigns + id: customers type: dataset multivalue: false sources: - - column: campaign_id + - column: customer_id dataType: INT target: - id: campaign_id + id: customer_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: products + id: campaigns type: dataset multivalue: false sources: - - column: product_id + - column: campaign_id dataType: INT target: - id: product_id + id: campaign_id type: attribute isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: customers + id: date type: dataset multivalue: false sources: - - column: customer_id - dataType: INT + - column: date + dataType: DATE target: - id: customer_id - type: attribute + id: date + type: date isNullable: null nullValue: null sourceColumns: null sourceColumnDataTypes: null - identifier: - id: date + id: products type: dataset multivalue: false sources: - - column: date - dataType: DATE + - column: product_id + dataType: INT target: - id: date - type: date + id: product_id + type: attribute isNullable: null nullValue: null sourceColumns: null @@ -2926,7 +2926,7 @@ interactions: content: format: '#,##0' maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: amount_of_active_customers links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/amount_of_active_customers @@ -2941,7 +2941,7 @@ interactions: content: format: '#,##0' maql: SELECT COUNT({attribute/order_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: amount_of_orders links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/amount_of_orders @@ -2957,7 +2957,7 @@ interactions: format: '#,##0' maql: 'SELECT {metric/amount_of_active_customers} WHERE (SELECT {metric/revenue} BY {attribute/customer_id}) > 10000 ' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: amount_of_top_customers links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/amount_of_top_customers @@ -2974,7 +2974,7 @@ interactions: format: '#,##0.00' maql: SELECT {metric/amount_of_orders} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: amount_of_valid_orders links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/amount_of_valid_orders @@ -2989,7 +2989,7 @@ interactions: content: format: $#,##0 maql: SELECT SUM({fact/spend}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: campaign_spend links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/campaign_spend @@ -3004,7 +3004,7 @@ interactions: content: format: $#,##0 maql: SELECT SUM({fact/price}*{fact/quantity}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: order_amount links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/order_amount @@ -3019,7 +3019,7 @@ interactions: content: format: '#,##0.0%' maql: SELECT {metric/revenue} / {metric/total_revenue} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue @@ -3035,7 +3035,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue_from_top_10_customers links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_from_top_10_customers @@ -3051,7 +3051,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue_from_top_10_percent_customers links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_from_top_10_percent_customers @@ -3067,7 +3067,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue_from_top_10_percent_products links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_from_top_10_percent_products @@ -3083,7 +3083,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue_from_top_10_products links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_from_top_10_products @@ -3099,7 +3099,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY {attribute/products.category}, ALL OTHER) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue_in_category links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_in_category @@ -3115,7 +3115,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: percent_revenue_per_product links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/percent_revenue_per_product @@ -3132,7 +3132,7 @@ interactions: format: $#,##0 maql: SELECT {metric/order_amount} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue @@ -3148,7 +3148,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue-clothing links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue-clothing @@ -3164,7 +3164,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ( "Electronics") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue-electronic links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue-electronic @@ -3180,7 +3180,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue-home links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue-home @@ -3196,7 +3196,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue-outdoor links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue-outdoor @@ -3211,7 +3211,7 @@ interactions: content: format: $#,##0.0 maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue_per_customer links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue_per_customer @@ -3226,7 +3226,7 @@ interactions: content: format: $#,##0.0 maql: SELECT {metric/revenue} / {metric/campaign_spend} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue_per_dollar_spent links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue_per_dollar_spent @@ -3241,7 +3241,7 @@ interactions: content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue_top_10 links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue_top_10 @@ -3256,7 +3256,7 @@ interactions: content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: revenue_top_10_percent links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue_top_10_percent @@ -3271,7 +3271,7 @@ interactions: content: format: $#,##0 maql: SELECT {metric/revenue} BY ALL OTHER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: total_revenue links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/total_revenue @@ -3286,7 +3286,7 @@ interactions: content: format: $#,##0 maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:53 id: total_revenue-no_filters links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/total_revenue-no_filters diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/label_elements.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/label_elements.yaml index 4f16b0c43..bba061692 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/label_elements.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspace_content/label_elements.yaml @@ -67,7 +67,7 @@ interactions: count: 2 offset: 0 next: null - cacheId: afaa082b7a6dcdeb3ea43c44f98c1a77 + cacheId: 0f0cd04729fed34614d8485c0955989a - request: method: POST uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/collectLabelElements @@ -128,7 +128,7 @@ interactions: count: 1 offset: 0 next: null - cacheId: 2adf55d333ec2770665bbf26a33fc9ad + cacheId: 652af74ceb463ea1e5f3b6b84261c05e - request: method: POST uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/collectLabelElements @@ -191,7 +191,7 @@ interactions: count: 3 offset: 0 next: null - cacheId: 326d9540a84e4e8fa6f67c938770761c + cacheId: a8aedd0be130af5c1d9b9a68645f5bf5 - request: method: POST uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/collectLabelElements @@ -256,7 +256,7 @@ interactions: count: 0 offset: 0 next: null - cacheId: 7c7152263d38734d1ca25594e82109a3 + cacheId: 82e941c12ff1f213e353041729b9958a - request: method: POST uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/collectLabelElements @@ -322,7 +322,7 @@ interactions: count: 0 offset: 0 next: null - cacheId: 48a38845fa9b3f60e32eae87ff0be520 + cacheId: e0f9d4e25249bfaa78ebcddc5358d495 - request: method: POST uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/collectLabelElements @@ -388,7 +388,7 @@ interactions: count: 2 offset: 0 next: null - cacheId: afaa082b7a6dcdeb3ea43c44f98c1a77 + cacheId: 0f0cd04729fed34614d8485c0955989a - request: method: POST uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/collectLabelElements @@ -448,7 +448,7 @@ interactions: count: 1 offset: 0 next: null - cacheId: f3e06f30e63d96c757d05e289ce18905 + cacheId: 9ad5132e152c70fd339373a2961b0bfe - request: method: POST uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/collectLabelElements @@ -511,7 +511,7 @@ interactions: count: 2 offset: 0 next: null - cacheId: b219514f64a898f9b3e6b01ac3f7440e + cacheId: 46a539e2c84934f1c771df3bf767c802 - request: method: POST uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/collectLabelElements @@ -575,7 +575,7 @@ interactions: count: 3 offset: 0 next: null - cacheId: a2735bd6b9ee9604e7b0848679734a1a + cacheId: 2605933d8ad282c2f24355b5d6297652 - request: method: POST uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/collectLabelElements?offset=1&limit=1 @@ -634,4 +634,4 @@ interactions: count: 1 offset: 1 next: http://localhost:3000/api/v1/actions/workspaces/demo/execution/collectLabelElements?limit=1&offset=2 - cacheId: 326d9540a84e4e8fa6f67c938770761c + cacheId: a8aedd0be130af5c1d9b9a68645f5bf5 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/create_workspace_setting.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/create_workspace_setting.yaml index 2aa80a0b9..d168bceba 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/create_workspace_setting.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/create_workspace_setting.yaml @@ -48,7 +48,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 043771a03ca393a7698749acd60f3f77 + traceId: e6c10404b99e5855438e55a02433cc56 - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces/demo/workspaceSettings @@ -206,49 +206,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/workspaces/demo/workspaceSettings?page=0&size=500 - 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: - - '215' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/workspaces/demo/workspaceSettings?page=0&size=500 - next: http://localhost:3000/api/v1/entities/workspaces/demo/workspaceSettings?page=1&size=500 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/delete_workspace_setting.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/delete_workspace_setting.yaml index a218772ca..31bfe6b94 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/delete_workspace_setting.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/delete_workspace_setting.yaml @@ -48,7 +48,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 3262cf80f46e0fb3d2edc35a704dcbcb + traceId: 269246f6d3da02d79f03deeaf7d92ee6 - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces/demo/workspaceSettings @@ -290,49 +290,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/workspaces/demo/workspaceSettings?page=0&size=500 - 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: - - '215' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/workspaces/demo/workspaceSettings?page=0&size=500 - next: http://localhost:3000/api/v1/entities/workspaces/demo/workspaceSettings?page=1&size=500 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_clone_workspace.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_clone_workspace.yaml index d2c3863e1..2680665e1 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_clone_workspace.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_clone_workspace.yaml @@ -48,7 +48,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: e23f07de963a3316a70e073d7fe39162 + traceId: da24efb67e0a74a7e36794f5af58c583 - request: method: POST uri: http://localhost:3000/api/v1/entities/dataSources @@ -207,7 +207,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -250,7 +250,7 @@ interactions: type: dashboardPlugin version: '2' version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -400,7 +400,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -412,7 +412,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -422,7 +422,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -473,7 +473,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -482,7 +482,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/order_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -492,7 +492,7 @@ interactions: format: '#,##0' maql: 'SELECT {metric/amount_of_active_customers} WHERE (SELECT {metric/revenue} BY {attribute/customer_id}) > 10000 ' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -502,7 +502,7 @@ interactions: format: '#,##0.00' maql: SELECT {metric/amount_of_orders} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -512,7 +512,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/spend}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -521,7 +521,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/price}*{fact/quantity}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -530,7 +530,7 @@ interactions: - content: format: '#,##0.0%' maql: SELECT {metric/revenue} / {metric/total_revenue} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -540,7 +540,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -550,7 +550,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -560,7 +560,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -570,7 +570,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -580,7 +580,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY {attribute/products.category}, ALL OTHER) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -590,7 +590,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -600,7 +600,7 @@ interactions: format: $#,##0 maql: SELECT {metric/order_amount} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -611,7 +611,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -621,7 +621,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ( "Electronics") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -631,7 +631,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -641,7 +641,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -650,7 +650,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -659,7 +659,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT {metric/revenue} / {metric/campaign_spend} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -668,7 +668,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -677,7 +677,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -686,7 +686,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} BY ALL OTHER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -695,7 +695,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -760,7 +760,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -836,7 +836,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -915,7 +915,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -974,7 +974,7 @@ interactions: stackMeasuresToPercent: true version: '2' visualizationUrl: local:area - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1031,7 +1031,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1084,7 +1084,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:donut - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1159,7 +1159,7 @@ interactions: visible: false version: '2' visualizationUrl: local:column - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1216,7 +1216,7 @@ interactions: enabled: true version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1315,7 +1315,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1371,7 +1371,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:line - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1410,7 +1410,7 @@ interactions: properties: {} version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1466,7 +1466,7 @@ interactions: min: '0' version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1534,7 +1534,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1591,7 +1591,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1648,7 +1648,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2095,7 +2095,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: c0269bf8ae237c9d90e40e9ea3a26b21 + traceId: 2c9d69c217117edea9083aab76b88cc4 - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo_clone?include=workspaces @@ -2127,7 +2127,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 4486f9c0d871a3e559dd977079fc7340 + traceId: 29feedbf7edabb224be53282bb60344e - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces @@ -2749,7 +2749,7 @@ interactions: version: '2' id: campaign title: Campaign - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2792,7 +2792,7 @@ interactions: version: '2' id: dashboard_plugin title: Dashboard plugin - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2942,7 +2942,7 @@ interactions: version: '2' id: product_and_category title: Product & Category - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2955,7 +2955,7 @@ interactions: version: '2' id: dashboard_plugin_1 title: dashboard_plugin_1 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2965,7 +2965,7 @@ interactions: version: '2' id: dashboard_plugin_2 title: dashboard_plugin_2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3014,7 +3014,7 @@ interactions: maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) id: amount_of_active_customers title: '# of Active Customers' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3023,7 +3023,7 @@ interactions: maql: SELECT COUNT({attribute/order_id}) id: amount_of_orders title: '# of Orders' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3033,7 +3033,7 @@ interactions: BY {attribute/customer_id}) > 10000 ' id: amount_of_top_customers title: '# of Top Customers' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3043,7 +3043,7 @@ interactions: IN ("Returned", "Canceled")) id: amount_of_valid_orders title: '# of Valid Orders' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3053,7 +3053,7 @@ interactions: maql: SELECT SUM({fact/spend}) id: campaign_spend title: Campaign Spend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3062,7 +3062,7 @@ interactions: maql: SELECT SUM({fact/price}*{fact/quantity}) id: order_amount title: Order Amount - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3071,7 +3071,7 @@ interactions: maql: SELECT {metric/revenue} / {metric/total_revenue} id: percent_revenue title: '% Revenue' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3081,7 +3081,7 @@ interactions: \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" id: percent_revenue_from_top_10_customers title: '% Revenue from Top 10 Customers' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3091,7 +3091,7 @@ interactions: \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" id: percent_revenue_from_top_10_percent_customers title: '% Revenue from Top 10% Customers' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3101,7 +3101,7 @@ interactions: \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" id: percent_revenue_from_top_10_percent_products title: '% Revenue from Top 10% Products' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3111,7 +3111,7 @@ interactions: \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" id: percent_revenue_from_top_10_products title: '% Revenue from Top 10 Products' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3121,7 +3121,7 @@ interactions: ALL OTHER) id: percent_revenue_in_category title: '% Revenue in Category' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3130,7 +3130,7 @@ interactions: maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) id: percent_revenue_per_product title: '% Revenue per Product' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3140,7 +3140,7 @@ interactions: IN ("Returned", "Canceled")) id: revenue title: Revenue - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3150,7 +3150,7 @@ interactions: maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") id: revenue-clothing title: Revenue (Clothing) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3160,7 +3160,7 @@ interactions: "Electronics") id: revenue-electronic title: Revenue (Electronic) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3169,7 +3169,7 @@ interactions: maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") id: revenue-home title: Revenue (Home) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3178,7 +3178,7 @@ interactions: maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") id: revenue-outdoor title: Revenue (Outdoor) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3187,7 +3187,7 @@ interactions: maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) id: revenue_per_customer title: Revenue per Customer - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3196,7 +3196,7 @@ interactions: maql: SELECT {metric/revenue} / {metric/campaign_spend} id: revenue_per_dollar_spent title: Revenue per Dollar Spent - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3205,7 +3205,7 @@ interactions: maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) id: revenue_top_10 title: Revenue / Top 10 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3214,7 +3214,7 @@ interactions: maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) id: revenue_top_10_percent title: Revenue / Top 10% - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3223,7 +3223,7 @@ interactions: maql: SELECT {metric/revenue} BY ALL OTHER id: total_revenue title: Total Revenue - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3232,7 +3232,7 @@ interactions: maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER id: total_revenue-no_filters title: Total Revenue (No Filters) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3297,7 +3297,7 @@ interactions: visualizationUrl: local:treemap id: campaign_spend title: Campaign Spend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3373,7 +3373,7 @@ interactions: visualizationUrl: local:combo2 id: customers_trend title: Customers Trend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3452,7 +3452,7 @@ interactions: visualizationUrl: local:table id: percent_revenue_per_product_by_customer_and_category title: '% Revenue per Product by Customer and Category' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3511,7 +3511,7 @@ interactions: visualizationUrl: local:area id: percentage_of_customers_by_region title: Percentage of Customers by Region - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3568,7 +3568,7 @@ interactions: visualizationUrl: local:treemap id: product_breakdown title: Product Breakdown - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3621,7 +3621,7 @@ interactions: visualizationUrl: local:donut id: product_categories_pie_chart title: Product Categories Pie Chart - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3696,7 +3696,7 @@ interactions: visualizationUrl: local:column id: product_revenue_comparison-over_previous_period title: Product Revenue Comparison (over previous period) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3753,7 +3753,7 @@ interactions: visualizationUrl: local:scatter id: product_saleability title: Product Saleability - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3852,7 +3852,7 @@ interactions: visualizationUrl: local:table id: revenue_and_quantity_by_product_and_category title: Revenue and Quantity by Product and Category - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3908,7 +3908,7 @@ interactions: visualizationUrl: local:line id: revenue_by_category_trend title: Revenue by Category Trend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3947,7 +3947,7 @@ interactions: visualizationUrl: local:bar id: revenue_by_product title: Revenue by Product - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4003,7 +4003,7 @@ interactions: visualizationUrl: local:scatter id: revenue_per_usd_vs_spend_by_campaign title: Revenue per $ vs Spend by Campaign - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4071,7 +4071,7 @@ interactions: visualizationUrl: local:combo2 id: revenue_trend title: Revenue Trend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4128,7 +4128,7 @@ interactions: visualizationUrl: local:bar id: top_10_customers title: Top 10 Customers - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4185,7 +4185,7 @@ interactions: visualizationUrl: local:bar id: top_10_products title: Top 10 Products - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4478,7 +4478,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4521,7 +4521,7 @@ interactions: type: dashboardPlugin version: '2' version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4671,7 +4671,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4683,7 +4683,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4693,7 +4693,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4744,7 +4744,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4753,7 +4753,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/order_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4763,7 +4763,7 @@ interactions: format: '#,##0' maql: 'SELECT {metric/amount_of_active_customers} WHERE (SELECT {metric/revenue} BY {attribute/customer_id}) > 10000 ' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4773,7 +4773,7 @@ interactions: format: '#,##0.00' maql: SELECT {metric/amount_of_orders} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4783,7 +4783,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/spend}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4792,7 +4792,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/price}*{fact/quantity}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4801,7 +4801,7 @@ interactions: - content: format: '#,##0.0%' maql: SELECT {metric/revenue} / {metric/total_revenue} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4811,7 +4811,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4821,7 +4821,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4831,7 +4831,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4841,7 +4841,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4851,7 +4851,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY {attribute/products.category}, ALL OTHER) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4861,7 +4861,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4871,7 +4871,7 @@ interactions: format: $#,##0 maql: SELECT {metric/order_amount} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4882,7 +4882,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4892,7 +4892,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ( "Electronics") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4902,7 +4902,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4912,7 +4912,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4921,7 +4921,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4930,7 +4930,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT {metric/revenue} / {metric/campaign_spend} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4939,7 +4939,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4948,7 +4948,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4957,7 +4957,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} BY ALL OTHER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4966,7 +4966,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5031,7 +5031,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5107,7 +5107,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5186,7 +5186,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5245,7 +5245,7 @@ interactions: stackMeasuresToPercent: true version: '2' visualizationUrl: local:area - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5302,7 +5302,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5355,7 +5355,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:donut - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5430,7 +5430,7 @@ interactions: visible: false version: '2' visualizationUrl: local:column - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5487,7 +5487,7 @@ interactions: enabled: true version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5586,7 +5586,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5642,7 +5642,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:line - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5681,7 +5681,7 @@ interactions: properties: {} version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5737,7 +5737,7 @@ interactions: min: '0' version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5805,7 +5805,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5862,7 +5862,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5919,7 +5919,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6382,7 +6382,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6425,7 +6425,7 @@ interactions: type: dashboardPlugin version: '2' version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6575,7 +6575,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6587,7 +6587,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6597,7 +6597,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6648,7 +6648,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6657,7 +6657,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/order_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6667,7 +6667,7 @@ interactions: format: '#,##0' maql: 'SELECT {metric/amount_of_active_customers} WHERE (SELECT {metric/revenue} BY {attribute/customer_id}) > 10000 ' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6677,7 +6677,7 @@ interactions: format: '#,##0.00' maql: SELECT {metric/amount_of_orders} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6687,7 +6687,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/spend}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6696,7 +6696,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/price}*{fact/quantity}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6705,7 +6705,7 @@ interactions: - content: format: '#,##0.0%' maql: SELECT {metric/revenue} / {metric/total_revenue} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6715,7 +6715,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6725,7 +6725,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6735,7 +6735,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6745,7 +6745,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6755,7 +6755,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY {attribute/products.category}, ALL OTHER) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6765,7 +6765,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6775,7 +6775,7 @@ interactions: format: $#,##0 maql: SELECT {metric/order_amount} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6786,7 +6786,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6796,7 +6796,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ( "Electronics") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6806,7 +6806,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6816,7 +6816,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6825,7 +6825,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6834,7 +6834,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT {metric/revenue} / {metric/campaign_spend} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6843,7 +6843,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6852,7 +6852,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6861,7 +6861,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} BY ALL OTHER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6870,7 +6870,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6935,7 +6935,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -7011,7 +7011,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -7090,7 +7090,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -7149,7 +7149,7 @@ interactions: stackMeasuresToPercent: true version: '2' visualizationUrl: local:area - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -7206,7 +7206,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -7259,7 +7259,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:donut - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -7334,7 +7334,7 @@ interactions: visible: false version: '2' visualizationUrl: local:column - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -7391,7 +7391,7 @@ interactions: enabled: true version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -7490,7 +7490,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -7546,7 +7546,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:line - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -7585,7 +7585,7 @@ interactions: properties: {} version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -7641,7 +7641,7 @@ interactions: min: '0' version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -7709,7 +7709,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -7766,7 +7766,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -7823,7 +7823,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -8270,7 +8270,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 2d063a5fb90276040ae01af823ac5ae4 + traceId: 97b08cc57f6faf2ff9d9af816bd51f06 - request: method: GET uri: http://localhost:3000/api/v1/entities/workspaces/demo_jacek?include=workspaces @@ -8302,7 +8302,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: e3bbf07b80110df58a2050af71948090 + traceId: 8d60976620dc069c52720c51909732dc - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces @@ -8938,7 +8938,7 @@ interactions: version: '2' id: campaign title: Campaign - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -8981,7 +8981,7 @@ interactions: version: '2' id: dashboard_plugin title: Dashboard plugin - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9131,7 +9131,7 @@ interactions: version: '2' id: product_and_category title: Product & Category - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9144,7 +9144,7 @@ interactions: version: '2' id: dashboard_plugin_1 title: dashboard_plugin_1 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9154,7 +9154,7 @@ interactions: version: '2' id: dashboard_plugin_2 title: dashboard_plugin_2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9203,7 +9203,7 @@ interactions: maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) id: amount_of_active_customers title: '# of Active Customers' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9212,7 +9212,7 @@ interactions: maql: SELECT COUNT({attribute/order_id}) id: amount_of_orders title: '# of Orders' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9222,7 +9222,7 @@ interactions: BY {attribute/customer_id}) > 10000 ' id: amount_of_top_customers title: '# of Top Customers' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9232,7 +9232,7 @@ interactions: IN ("Returned", "Canceled")) id: amount_of_valid_orders title: '# of Valid Orders' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9242,7 +9242,7 @@ interactions: maql: SELECT SUM({fact/spend}) id: campaign_spend title: Campaign Spend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9251,7 +9251,7 @@ interactions: maql: SELECT SUM({fact/price}*{fact/quantity}) id: order_amount title: Order Amount - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9260,7 +9260,7 @@ interactions: maql: SELECT {metric/revenue} / {metric/total_revenue} id: percent_revenue title: '% Revenue' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9270,7 +9270,7 @@ interactions: \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" id: percent_revenue_from_top_10_customers title: '% Revenue from Top 10 Customers' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9280,7 +9280,7 @@ interactions: \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" id: percent_revenue_from_top_10_percent_customers title: '% Revenue from Top 10% Customers' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9290,7 +9290,7 @@ interactions: \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" id: percent_revenue_from_top_10_percent_products title: '% Revenue from Top 10% Products' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9300,7 +9300,7 @@ interactions: \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" id: percent_revenue_from_top_10_products title: '% Revenue from Top 10 Products' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9310,7 +9310,7 @@ interactions: ALL OTHER) id: percent_revenue_in_category title: '% Revenue in Category' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9319,7 +9319,7 @@ interactions: maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) id: percent_revenue_per_product title: '% Revenue per Product' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9329,7 +9329,7 @@ interactions: IN ("Returned", "Canceled")) id: revenue title: Revenue - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9339,7 +9339,7 @@ interactions: maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") id: revenue-clothing title: Revenue (Clothing) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9349,7 +9349,7 @@ interactions: "Electronics") id: revenue-electronic title: Revenue (Electronic) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9358,7 +9358,7 @@ interactions: maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") id: revenue-home title: Revenue (Home) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9367,7 +9367,7 @@ interactions: maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") id: revenue-outdoor title: Revenue (Outdoor) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9376,7 +9376,7 @@ interactions: maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) id: revenue_per_customer title: Revenue per Customer - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9385,7 +9385,7 @@ interactions: maql: SELECT {metric/revenue} / {metric/campaign_spend} id: revenue_per_dollar_spent title: Revenue per Dollar Spent - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9394,7 +9394,7 @@ interactions: maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) id: revenue_top_10 title: Revenue / Top 10 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9403,7 +9403,7 @@ interactions: maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) id: revenue_top_10_percent title: Revenue / Top 10% - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9412,7 +9412,7 @@ interactions: maql: SELECT {metric/revenue} BY ALL OTHER id: total_revenue title: Total Revenue - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9421,7 +9421,7 @@ interactions: maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER id: total_revenue-no_filters title: Total Revenue (No Filters) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9486,7 +9486,7 @@ interactions: visualizationUrl: local:treemap id: campaign_spend title: Campaign Spend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9562,7 +9562,7 @@ interactions: visualizationUrl: local:combo2 id: customers_trend title: Customers Trend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9641,7 +9641,7 @@ interactions: visualizationUrl: local:table id: percent_revenue_per_product_by_customer_and_category title: '% Revenue per Product by Customer and Category' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9700,7 +9700,7 @@ interactions: visualizationUrl: local:area id: percentage_of_customers_by_region title: Percentage of Customers by Region - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9757,7 +9757,7 @@ interactions: visualizationUrl: local:treemap id: product_breakdown title: Product Breakdown - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9810,7 +9810,7 @@ interactions: visualizationUrl: local:donut id: product_categories_pie_chart title: Product Categories Pie Chart - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9885,7 +9885,7 @@ interactions: visualizationUrl: local:column id: product_revenue_comparison-over_previous_period title: Product Revenue Comparison (over previous period) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -9942,7 +9942,7 @@ interactions: visualizationUrl: local:scatter id: product_saleability title: Product Saleability - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -10041,7 +10041,7 @@ interactions: visualizationUrl: local:table id: revenue_and_quantity_by_product_and_category title: Revenue and Quantity by Product and Category - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -10097,7 +10097,7 @@ interactions: visualizationUrl: local:line id: revenue_by_category_trend title: Revenue by Category Trend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -10136,7 +10136,7 @@ interactions: visualizationUrl: local:bar id: revenue_by_product title: Revenue by Product - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -10192,7 +10192,7 @@ interactions: visualizationUrl: local:scatter id: revenue_per_usd_vs_spend_by_campaign title: Revenue per $ vs Spend by Campaign - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -10260,7 +10260,7 @@ interactions: visualizationUrl: local:combo2 id: revenue_trend title: Revenue Trend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -10317,7 +10317,7 @@ interactions: visualizationUrl: local:bar id: top_10_customers title: Top 10 Customers - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -10374,7 +10374,7 @@ interactions: visualizationUrl: local:bar id: top_10_products title: Top 10 Products - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -10787,7 +10787,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -10830,7 +10830,7 @@ interactions: type: dashboardPlugin version: '2' version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -10980,7 +10980,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -10992,7 +10992,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11002,7 +11002,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11053,7 +11053,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11062,7 +11062,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/order_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11072,7 +11072,7 @@ interactions: format: '#,##0' maql: 'SELECT {metric/amount_of_active_customers} WHERE (SELECT {metric/revenue} BY {attribute/customer_id}) > 10000 ' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11082,7 +11082,7 @@ interactions: format: '#,##0.00' maql: SELECT {metric/amount_of_orders} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11092,7 +11092,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/spend}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11101,7 +11101,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/price}*{fact/quantity}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11110,7 +11110,7 @@ interactions: - content: format: '#,##0.0%' maql: SELECT {metric/revenue} / {metric/total_revenue} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11120,7 +11120,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11130,7 +11130,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11140,7 +11140,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11150,7 +11150,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11160,7 +11160,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY {attribute/products.category}, ALL OTHER) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11170,7 +11170,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11180,7 +11180,7 @@ interactions: format: $#,##0 maql: SELECT {metric/order_amount} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11191,7 +11191,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11201,7 +11201,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ( "Electronics") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11211,7 +11211,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11221,7 +11221,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11230,7 +11230,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11239,7 +11239,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT {metric/revenue} / {metric/campaign_spend} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11248,7 +11248,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11257,7 +11257,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11266,7 +11266,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} BY ALL OTHER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11275,7 +11275,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11340,7 +11340,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11416,7 +11416,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11495,7 +11495,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11554,7 +11554,7 @@ interactions: stackMeasuresToPercent: true version: '2' visualizationUrl: local:area - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11611,7 +11611,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11664,7 +11664,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:donut - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11739,7 +11739,7 @@ interactions: visible: false version: '2' visualizationUrl: local:column - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11796,7 +11796,7 @@ interactions: enabled: true version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11895,7 +11895,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11951,7 +11951,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:line - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -11990,7 +11990,7 @@ interactions: properties: {} version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -12046,7 +12046,7 @@ interactions: min: '0' version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -12114,7 +12114,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -12171,7 +12171,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -12228,7 +12228,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -12868,7 +12868,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 0c596765e7a1a0ee3510757ba97b9a45 + traceId: df853a4ae54c92add213a5edefc60263 - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces @@ -13504,7 +13504,7 @@ interactions: version: '2' id: campaign title: Campaign - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13547,7 +13547,7 @@ interactions: version: '2' id: dashboard_plugin title: Dashboard plugin - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13697,7 +13697,7 @@ interactions: version: '2' id: product_and_category title: Product & Category - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13710,7 +13710,7 @@ interactions: version: '2' id: dashboard_plugin_1 title: dashboard_plugin_1 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13720,7 +13720,7 @@ interactions: version: '2' id: dashboard_plugin_2 title: dashboard_plugin_2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13769,7 +13769,7 @@ interactions: maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) id: amount_of_active_customers title: '# of Active Customers' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13778,7 +13778,7 @@ interactions: maql: SELECT COUNT({attribute/order_id}) id: amount_of_orders title: '# of Orders' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13788,7 +13788,7 @@ interactions: BY {attribute/customer_id}) > 10000 ' id: amount_of_top_customers title: '# of Top Customers' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13798,7 +13798,7 @@ interactions: IN ("Returned", "Canceled")) id: amount_of_valid_orders title: '# of Valid Orders' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13808,7 +13808,7 @@ interactions: maql: SELECT SUM({fact/spend}) id: campaign_spend title: Campaign Spend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13817,7 +13817,7 @@ interactions: maql: SELECT SUM({fact/price}*{fact/quantity}) id: order_amount title: Order Amount - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13826,7 +13826,7 @@ interactions: maql: SELECT {metric/revenue} / {metric/total_revenue} id: percent_revenue title: '% Revenue' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13836,7 +13836,7 @@ interactions: \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" id: percent_revenue_from_top_10_customers title: '% Revenue from Top 10 Customers' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13846,7 +13846,7 @@ interactions: \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" id: percent_revenue_from_top_10_percent_customers title: '% Revenue from Top 10% Customers' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13856,7 +13856,7 @@ interactions: \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" id: percent_revenue_from_top_10_percent_products title: '% Revenue from Top 10% Products' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13866,7 +13866,7 @@ interactions: \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" id: percent_revenue_from_top_10_products title: '% Revenue from Top 10 Products' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13876,7 +13876,7 @@ interactions: ALL OTHER) id: percent_revenue_in_category title: '% Revenue in Category' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13885,7 +13885,7 @@ interactions: maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) id: percent_revenue_per_product title: '% Revenue per Product' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13895,7 +13895,7 @@ interactions: IN ("Returned", "Canceled")) id: revenue title: Revenue - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13905,7 +13905,7 @@ interactions: maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") id: revenue-clothing title: Revenue (Clothing) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13915,7 +13915,7 @@ interactions: "Electronics") id: revenue-electronic title: Revenue (Electronic) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13924,7 +13924,7 @@ interactions: maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") id: revenue-home title: Revenue (Home) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13933,7 +13933,7 @@ interactions: maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") id: revenue-outdoor title: Revenue (Outdoor) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13942,7 +13942,7 @@ interactions: maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) id: revenue_per_customer title: Revenue per Customer - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13951,7 +13951,7 @@ interactions: maql: SELECT {metric/revenue} / {metric/campaign_spend} id: revenue_per_dollar_spent title: Revenue per Dollar Spent - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13960,7 +13960,7 @@ interactions: maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) id: revenue_top_10 title: Revenue / Top 10 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13969,7 +13969,7 @@ interactions: maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) id: revenue_top_10_percent title: Revenue / Top 10% - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13978,7 +13978,7 @@ interactions: maql: SELECT {metric/revenue} BY ALL OTHER id: total_revenue title: Total Revenue - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -13987,7 +13987,7 @@ interactions: maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER id: total_revenue-no_filters title: Total Revenue (No Filters) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -14052,7 +14052,7 @@ interactions: visualizationUrl: local:treemap id: campaign_spend title: Campaign Spend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -14128,7 +14128,7 @@ interactions: visualizationUrl: local:combo2 id: customers_trend title: Customers Trend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -14207,7 +14207,7 @@ interactions: visualizationUrl: local:table id: percent_revenue_per_product_by_customer_and_category title: '% Revenue per Product by Customer and Category' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -14266,7 +14266,7 @@ interactions: visualizationUrl: local:area id: percentage_of_customers_by_region title: Percentage of Customers by Region - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -14323,7 +14323,7 @@ interactions: visualizationUrl: local:treemap id: product_breakdown title: Product Breakdown - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -14376,7 +14376,7 @@ interactions: visualizationUrl: local:donut id: product_categories_pie_chart title: Product Categories Pie Chart - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -14451,7 +14451,7 @@ interactions: visualizationUrl: local:column id: product_revenue_comparison-over_previous_period title: Product Revenue Comparison (over previous period) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -14508,7 +14508,7 @@ interactions: visualizationUrl: local:scatter id: product_saleability title: Product Saleability - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -14607,7 +14607,7 @@ interactions: visualizationUrl: local:table id: revenue_and_quantity_by_product_and_category title: Revenue and Quantity by Product and Category - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -14663,7 +14663,7 @@ interactions: visualizationUrl: local:line id: revenue_by_category_trend title: Revenue by Category Trend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -14702,7 +14702,7 @@ interactions: visualizationUrl: local:bar id: revenue_by_product title: Revenue by Product - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -14758,7 +14758,7 @@ interactions: visualizationUrl: local:scatter id: revenue_per_usd_vs_spend_by_campaign title: Revenue per $ vs Spend by Campaign - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -14826,7 +14826,7 @@ interactions: visualizationUrl: local:combo2 id: revenue_trend title: Revenue Trend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -14883,7 +14883,7 @@ interactions: visualizationUrl: local:bar id: top_10_customers title: Top 10 Customers - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -14940,7 +14940,7 @@ interactions: visualizationUrl: local:bar id: top_10_products title: Top 10 Products - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_create_workspace.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_create_workspace.yaml index 14904c554..bd3a2dc33 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_create_workspace.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_create_workspace.yaml @@ -120,7 +120,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: f41e843d52459fbc6c2fd95dd8dcec0e + traceId: 374b1fc29ba7d10d849f9652e8bf73b2 - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_put_declarative_workspace.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_put_declarative_workspace.yaml index 954d8fc73..57f6cd81d 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_put_declarative_workspace.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_put_declarative_workspace.yaml @@ -33,7 +33,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 53534ca64c975eabed68e35bf7310ddf + traceId: dcdaa73d09ff9dc16c02754373afdffc - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_store_declarative_workspaces.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_store_declarative_workspaces.yaml index 915632c9c..1db2de3cb 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_store_declarative_workspaces.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_store_declarative_workspaces.yaml @@ -138,7 +138,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -181,7 +181,7 @@ interactions: type: dashboardPlugin version: '2' version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -332,7 +332,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -344,7 +344,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -354,7 +354,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -405,7 +405,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -414,7 +414,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/order_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -424,7 +424,7 @@ interactions: format: '#,##0' maql: 'SELECT {metric/amount_of_active_customers} WHERE (SELECT {metric/revenue} BY {attribute/customer_id}) > 10000 ' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -434,7 +434,7 @@ interactions: format: '#,##0.00' maql: SELECT {metric/amount_of_orders} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -444,7 +444,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/spend}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -453,7 +453,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/price}*{fact/quantity}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -462,7 +462,7 @@ interactions: - content: format: '#,##0.0%' maql: SELECT {metric/revenue} / {metric/total_revenue} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -472,7 +472,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -482,7 +482,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -492,7 +492,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -502,7 +502,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -512,7 +512,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY {attribute/products.category}, ALL OTHER) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -522,7 +522,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -532,7 +532,7 @@ interactions: format: $#,##0 maql: SELECT {metric/order_amount} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -543,7 +543,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -553,7 +553,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ( "Electronics") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -563,7 +563,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -573,7 +573,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -582,7 +582,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -591,7 +591,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT {metric/revenue} / {metric/campaign_spend} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -600,7 +600,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -609,7 +609,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -618,7 +618,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} BY ALL OTHER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -627,7 +627,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -692,7 +692,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -768,7 +768,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -847,7 +847,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -906,7 +906,7 @@ interactions: stackMeasuresToPercent: true version: '2' visualizationUrl: local:area - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -963,7 +963,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1016,7 +1016,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:donut - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1091,7 +1091,7 @@ interactions: visible: false version: '2' visualizationUrl: local:column - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1148,7 +1148,7 @@ interactions: enabled: true version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1247,7 +1247,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1303,7 +1303,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:line - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1342,7 +1342,7 @@ interactions: properties: {} version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1398,7 +1398,7 @@ interactions: min: '0' version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1466,7 +1466,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1523,7 +1523,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1580,7 +1580,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2164,7 +2164,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2207,7 +2207,7 @@ interactions: type: dashboardPlugin version: '2' version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2358,7 +2358,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2370,7 +2370,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2380,7 +2380,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2431,7 +2431,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2440,7 +2440,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/order_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2450,7 +2450,7 @@ interactions: format: '#,##0' maql: 'SELECT {metric/amount_of_active_customers} WHERE (SELECT {metric/revenue} BY {attribute/customer_id}) > 10000 ' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2460,7 +2460,7 @@ interactions: format: '#,##0.00' maql: SELECT {metric/amount_of_orders} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2470,7 +2470,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/spend}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2479,7 +2479,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/price}*{fact/quantity}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2488,7 +2488,7 @@ interactions: - content: format: '#,##0.0%' maql: SELECT {metric/revenue} / {metric/total_revenue} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2498,7 +2498,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2508,7 +2508,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2518,7 +2518,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2528,7 +2528,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2538,7 +2538,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY {attribute/products.category}, ALL OTHER) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2548,7 +2548,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2558,7 +2558,7 @@ interactions: format: $#,##0 maql: SELECT {metric/order_amount} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2569,7 +2569,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2579,7 +2579,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ( "Electronics") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2589,7 +2589,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2599,7 +2599,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2608,7 +2608,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2617,7 +2617,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT {metric/revenue} / {metric/campaign_spend} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2626,7 +2626,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2635,7 +2635,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2644,7 +2644,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} BY ALL OTHER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2653,7 +2653,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2718,7 +2718,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2794,7 +2794,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2873,7 +2873,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2932,7 +2932,7 @@ interactions: stackMeasuresToPercent: true version: '2' visualizationUrl: local:area - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2989,7 +2989,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3042,7 +3042,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:donut - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3117,7 +3117,7 @@ interactions: visible: false version: '2' visualizationUrl: local:column - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3174,7 +3174,7 @@ interactions: enabled: true version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3273,7 +3273,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3329,7 +3329,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:line - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3368,7 +3368,7 @@ interactions: properties: {} version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3424,7 +3424,7 @@ interactions: min: '0' version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3492,7 +3492,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3549,7 +3549,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3606,7 +3606,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_translate_workspace.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_translate_workspace.yaml index faec28805..f4e639ec4 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_translate_workspace.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/demo_translate_workspace.yaml @@ -139,7 +139,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -182,7 +182,7 @@ interactions: type: dashboardPlugin version: '2' version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -332,7 +332,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -344,7 +344,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -354,7 +354,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -405,7 +405,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -414,7 +414,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/order_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -424,7 +424,7 @@ interactions: format: '#,##0' maql: 'SELECT {metric/amount_of_active_customers} WHERE (SELECT {metric/revenue} BY {attribute/customer_id}) > 10000 ' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -434,7 +434,7 @@ interactions: format: '#,##0.00' maql: SELECT {metric/amount_of_orders} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -444,7 +444,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/spend}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -453,7 +453,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/price}*{fact/quantity}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -462,7 +462,7 @@ interactions: - content: format: '#,##0.0%' maql: SELECT {metric/revenue} / {metric/total_revenue} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -472,7 +472,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -482,7 +482,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -492,7 +492,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -502,7 +502,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -512,7 +512,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY {attribute/products.category}, ALL OTHER) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -522,7 +522,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -532,7 +532,7 @@ interactions: format: $#,##0 maql: SELECT {metric/order_amount} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -543,7 +543,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -553,7 +553,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ( "Electronics") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -563,7 +563,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -573,7 +573,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -582,7 +582,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -591,7 +591,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT {metric/revenue} / {metric/campaign_spend} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -600,7 +600,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -609,7 +609,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -618,7 +618,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} BY ALL OTHER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -627,7 +627,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -692,7 +692,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -768,7 +768,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -847,7 +847,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -906,7 +906,7 @@ interactions: stackMeasuresToPercent: true version: '2' visualizationUrl: local:area - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -963,7 +963,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1016,7 +1016,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:donut - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1091,7 +1091,7 @@ interactions: visible: false version: '2' visualizationUrl: local:column - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1148,7 +1148,7 @@ interactions: enabled: true version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1247,7 +1247,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1303,7 +1303,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:line - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1342,7 +1342,7 @@ interactions: properties: {} version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1398,7 +1398,7 @@ interactions: min: '0' version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1466,7 +1466,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1523,7 +1523,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -1580,7 +1580,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2189,7 +2189,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2232,7 +2232,7 @@ interactions: type: dashboardPlugin version: '2' version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2382,7 +2382,7 @@ interactions: drills: [] properties: {} version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2394,7 +2394,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2404,7 +2404,7 @@ interactions: - content: url: https://www.example.com version: '2' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2455,7 +2455,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2464,7 +2464,7 @@ interactions: - content: format: '#,##0' maql: SELECT COUNT({attribute/order_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2474,7 +2474,7 @@ interactions: format: '#,##0' maql: 'SELECT {metric/amount_of_active_customers} WHERE (SELECT {metric/revenue} BY {attribute/customer_id}) > 10000 ' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2484,7 +2484,7 @@ interactions: format: '#,##0.00' maql: SELECT {metric/amount_of_orders} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2494,7 +2494,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/spend}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2503,7 +2503,7 @@ interactions: - content: format: $#,##0 maql: SELECT SUM({fact/price}*{fact/quantity}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2512,7 +2512,7 @@ interactions: - content: format: '#,##0.0%' maql: SELECT {metric/revenue} / {metric/total_revenue} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2522,7 +2522,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2532,7 +2532,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2542,7 +2542,7 @@ interactions: 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}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2552,7 +2552,7 @@ interactions: format: '#,##0.0%' maql: "SELECT\n (SELECT {metric/revenue} WHERE (SELECT {metric/revenue_top_10}\ \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2562,7 +2562,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY {attribute/products.category}, ALL OTHER) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2572,7 +2572,7 @@ interactions: format: '#,##0.0%' maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2582,7 +2582,7 @@ interactions: format: $#,##0 maql: SELECT {metric/order_amount} WHERE NOT ({label/order_status} IN ("Returned", "Canceled")) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2593,7 +2593,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2603,7 +2603,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ( "Electronics") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2613,7 +2613,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2623,7 +2623,7 @@ interactions: format: $#,##0 maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2632,7 +2632,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2641,7 +2641,7 @@ interactions: - content: format: $#,##0.0 maql: SELECT {metric/revenue} / {metric/campaign_spend} - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2650,7 +2650,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2659,7 +2659,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2668,7 +2668,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/revenue} BY ALL OTHER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2677,7 +2677,7 @@ interactions: - content: format: $#,##0 maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2742,7 +2742,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2818,7 +2818,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2897,7 +2897,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -2956,7 +2956,7 @@ interactions: stackMeasuresToPercent: true version: '2' visualizationUrl: local:area - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3013,7 +3013,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:treemap - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3066,7 +3066,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:donut - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3141,7 +3141,7 @@ interactions: visible: false version: '2' visualizationUrl: local:column - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3198,7 +3198,7 @@ interactions: enabled: true version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3297,7 +3297,7 @@ interactions: direction: asc version: '2' visualizationUrl: local:table - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3353,7 +3353,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:line - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3392,7 +3392,7 @@ interactions: properties: {} version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3448,7 +3448,7 @@ interactions: min: '0' version: '2' visualizationUrl: local:scatter - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3516,7 +3516,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3573,7 +3573,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -3630,7 +3630,7 @@ interactions: position: bottom version: '2' visualizationUrl: local:bar - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4032,7 +4032,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 6cbf44a67a3c1838eb72526254e4e595 + traceId: 2bad2ee037a6668b7c0f3de543c6dfbf - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces @@ -4654,7 +4654,7 @@ interactions: version: '2' id: campaign title: Campaign - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4697,7 +4697,7 @@ interactions: version: '2' id: dashboard_plugin title: Dashboard plugin - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4847,7 +4847,7 @@ interactions: version: '2' id: product_and_category title: Product & Category - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4860,7 +4860,7 @@ interactions: version: '2' id: dashboard_plugin_1 title: dashboard_plugin_1 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4870,7 +4870,7 @@ interactions: version: '2' id: dashboard_plugin_2 title: dashboard_plugin_2 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4919,7 +4919,7 @@ interactions: maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) id: amount_of_active_customers title: '# of Active Customers' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4928,7 +4928,7 @@ interactions: maql: SELECT COUNT({attribute/order_id}) id: amount_of_orders title: '# of Orders' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4938,7 +4938,7 @@ interactions: BY {attribute/customer_id}) > 10000 ' id: amount_of_top_customers title: '# of Top Customers' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4948,7 +4948,7 @@ interactions: IN ("Returned", "Canceled")) id: amount_of_valid_orders title: '# of Valid Orders' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4958,7 +4958,7 @@ interactions: maql: SELECT SUM({fact/spend}) id: campaign_spend title: Campaign Spend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4967,7 +4967,7 @@ interactions: maql: SELECT SUM({fact/price}*{fact/quantity}) id: order_amount title: Order Amount - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4976,7 +4976,7 @@ interactions: maql: SELECT {metric/revenue} / {metric/total_revenue} id: percent_revenue title: '% Revenue' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4986,7 +4986,7 @@ interactions: \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" id: percent_revenue_from_top_10_customers title: '% Revenue from Top 10 Customers' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -4996,7 +4996,7 @@ interactions: \ BY {attribute/customer_id}) > 0)\n /\n {metric/revenue}" id: percent_revenue_from_top_10_percent_customers title: '% Revenue from Top 10% Customers' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5006,7 +5006,7 @@ interactions: \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" id: percent_revenue_from_top_10_percent_products title: '% Revenue from Top 10% Products' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5016,7 +5016,7 @@ interactions: \ BY {attribute/product_id}) > 0)\n /\n {metric/revenue}" id: percent_revenue_from_top_10_products title: '% Revenue from Top 10 Products' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5026,7 +5026,7 @@ interactions: ALL OTHER) id: percent_revenue_in_category title: '% Revenue in Category' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5035,7 +5035,7 @@ interactions: maql: SELECT {metric/revenue} / (SELECT {metric/revenue} BY ALL {attribute/product_id}) id: percent_revenue_per_product title: '% Revenue per Product' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5045,7 +5045,7 @@ interactions: IN ("Returned", "Canceled")) id: revenue title: Revenue - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5055,7 +5055,7 @@ interactions: maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Clothing") id: revenue-clothing title: Revenue (Clothing) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5065,7 +5065,7 @@ interactions: "Electronics") id: revenue-electronic title: Revenue (Electronic) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5074,7 +5074,7 @@ interactions: maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Home") id: revenue-home title: Revenue (Home) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5083,7 +5083,7 @@ interactions: maql: SELECT {metric/revenue} WHERE {label/products.category} IN ("Outdoor") id: revenue-outdoor title: Revenue (Outdoor) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5092,7 +5092,7 @@ interactions: maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) id: revenue_per_customer title: Revenue per Customer - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5101,7 +5101,7 @@ interactions: maql: SELECT {metric/revenue} / {metric/campaign_spend} id: revenue_per_dollar_spent title: Revenue per Dollar Spent - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5110,7 +5110,7 @@ interactions: maql: SELECT {metric/revenue} WHERE TOP(10) OF ({metric/revenue}) id: revenue_top_10 title: Revenue / Top 10 - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5119,7 +5119,7 @@ interactions: maql: SELECT {metric/revenue} WHERE TOP(10%) OF ({metric/revenue}) id: revenue_top_10_percent title: Revenue / Top 10% - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5128,7 +5128,7 @@ interactions: maql: SELECT {metric/revenue} BY ALL OTHER id: total_revenue title: Total Revenue - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5137,7 +5137,7 @@ interactions: maql: SELECT {metric/total_revenue} WITHOUT PARENT FILTER id: total_revenue-no_filters title: Total Revenue (No Filters) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5202,7 +5202,7 @@ interactions: visualizationUrl: local:treemap id: campaign_spend title: Campaign Spend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5278,7 +5278,7 @@ interactions: visualizationUrl: local:combo2 id: customers_trend title: Customers Trend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5357,7 +5357,7 @@ interactions: visualizationUrl: local:table id: percent_revenue_per_product_by_customer_and_category title: '% Revenue per Product by Customer and Category' - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5416,7 +5416,7 @@ interactions: visualizationUrl: local:area id: percentage_of_customers_by_region title: Percentage of Customers by Region - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5473,7 +5473,7 @@ interactions: visualizationUrl: local:treemap id: product_breakdown title: Product Breakdown - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5526,7 +5526,7 @@ interactions: visualizationUrl: local:donut id: product_categories_pie_chart title: Product Categories Pie Chart - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5601,7 +5601,7 @@ interactions: visualizationUrl: local:column id: product_revenue_comparison-over_previous_period title: Product Revenue Comparison (over previous period) - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5658,7 +5658,7 @@ interactions: visualizationUrl: local:scatter id: product_saleability title: Product Saleability - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5757,7 +5757,7 @@ interactions: visualizationUrl: local:table id: revenue_and_quantity_by_product_and_category title: Revenue and Quantity by Product and Category - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5813,7 +5813,7 @@ interactions: visualizationUrl: local:line id: revenue_by_category_trend title: Revenue by Category Trend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5852,7 +5852,7 @@ interactions: visualizationUrl: local:bar id: revenue_by_product title: Revenue by Product - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5908,7 +5908,7 @@ interactions: visualizationUrl: local:scatter id: revenue_per_usd_vs_spend_by_campaign title: Revenue per $ vs Spend by Campaign - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -5976,7 +5976,7 @@ interactions: visualizationUrl: local:combo2 id: revenue_trend title: Revenue Trend - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6033,7 +6033,7 @@ interactions: visualizationUrl: local:bar id: top_10_customers title: Top 10 Customers - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6090,7 +6090,7 @@ interactions: visualizationUrl: local:bar id: top_10_products title: Top 10 Products - createdAt: 2026-02-26 14:23 + createdAt: 2026-03-06 13:52 createdBy: id: admin type: user @@ -6252,7 +6252,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: e70e0f1560f5f1ebc2acd245491cf4a0 + traceId: 1ad0f388f74d1514b7c52807233bb46f - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces/demo_cs/workspaceSettings @@ -6363,7 +6363,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 61810ec0b6a95fd85336d2a746a2fa1c + traceId: ffc2c0720d1aec8bfd686f6bf64c37ac - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces/demo_cs/workspaceSettings diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/layout_automations.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/layout_automations.yaml index 11d49c386..3bd269165 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/layout_automations.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/layout_automations.yaml @@ -232,48 +232,6 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/layout/workspaces/demo/automations - 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: - - '2' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: [] - request: method: PUT uri: http://localhost:3000/api/v1/layout/notificationChannels diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/layout_filter_views.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/layout_filter_views.yaml index ed3f99405..365e0e45e 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/layout_filter_views.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/layout_filter_views.yaml @@ -226,45 +226,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/layout/workspaces/demo/filterViews - 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: - - '2' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: [] diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/list_workspace_settings.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/list_workspace_settings.yaml index 2e0b73c39..f4777f799 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/list_workspace_settings.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/list_workspace_settings.yaml @@ -48,7 +48,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 77a234cff959c567efed4b4640d2ef51 + traceId: e23d114ca275af3ff00d08bc39561aff - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces/demo/workspaceSettings @@ -159,7 +159,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 6c04b8eab6b6ec5198f44f75191762ad + traceId: a5f25605e21d2042056d70c38f4b3dce - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces/demo/workspaceSettings @@ -370,49 +370,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/workspaces/demo/workspaceSettings?page=0&size=500 - 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: - - '215' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/workspaces/demo/workspaceSettings?page=0&size=500 - next: http://localhost:3000/api/v1/entities/workspaces/demo/workspaceSettings?page=1&size=500 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/update_workspace_setting.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/update_workspace_setting.yaml index 487e785cf..2ede2d3fe 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/update_workspace_setting.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/update_workspace_setting.yaml @@ -48,7 +48,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 947e356e00188dcd8fd17c679b788deb + traceId: e41e2c576b334aed939bb426cb3fadc0 - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces/demo/workspaceSettings @@ -380,49 +380,3 @@ interactions: - '0' body: string: '' - - request: - method: GET - uri: http://localhost:3000/api/v1/entities/workspaces/demo/workspaceSettings?page=0&size=500 - 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: - - '215' - Content-Type: - - application/json - DATE: *id001 - Expires: - - '0' - Pragma: - - no-cache - Referrer-Policy: - - no-referrer - Vary: - - Origin - - Access-Control-Request-Method - - Access-Control-Request-Headers - X-Content-Type-Options: - - nosniff - X-GDC-TRACE-ID: *id001 - X-Xss-Protection: - - '0' - body: - string: - data: [] - links: - self: http://localhost:3000/api/v1/entities/workspaces/demo/workspaceSettings?page=0&size=500 - next: http://localhost:3000/api/v1/entities/workspaces/demo/workspaceSettings?page=1&size=500 diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/user_data_filters_for_user_group.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/user_data_filters_for_user_group.yaml index b98658c09..4980b588d 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/user_data_filters_for_user_group.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/user_data_filters_for_user_group.yaml @@ -94,7 +94,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 69424a2036b3dbe4867c83089020b91d + traceId: 0e47537eaa711f304b7510a06571a77b - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces/demo/userDataFilters diff --git a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/user_data_filters_life_cycle.yaml b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/user_data_filters_life_cycle.yaml index 9cd707dac..cfe85be1b 100644 --- a/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/user_data_filters_life_cycle.yaml +++ b/packages/gooddata-sdk/tests/catalog/fixtures/workspaces/user_data_filters_life_cycle.yaml @@ -94,7 +94,7 @@ interactions: to access it. status: 404 title: Not Found - traceId: 5bc1bfa22f7612e5eb1c8c3e78133d6e + traceId: 6e7489d7ae19ffa6542b74ea44052831 - request: method: POST uri: http://localhost:3000/api/v1/entities/workspaces/demo/userDataFilters @@ -241,7 +241,7 @@ interactions: self: http://localhost:3000/api/v1/entities/workspaces/demo/labels/order_status type: label - attributes: - authenticationId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authenticationId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs firstname: Demo lastname: User email: demo@example.com @@ -316,7 +316,7 @@ interactions: type: userDataFilter included: - attributes: - authenticationId: CiRhNzhmZjA0Zi0xYjU1LTQwY2MtODQ0OS1jMmQzNGE4MGVjMzkSBWxvY2Fs + authenticationId: CiQ0ODhkODhkNi1hZDQ2LTRiMzQtYmQ4Ni1iMWFmZGVjYjUyMDkSBWxvY2Fs firstname: Demo lastname: User email: demo@example.com diff --git a/packages/gooddata-sdk/tests/catalog/test_catalog_data_source.py b/packages/gooddata-sdk/tests/catalog/test_catalog_data_source.py index 67f9f42d0..c1684ee05 100644 --- a/packages/gooddata-sdk/tests/catalog/test_catalog_data_source.py +++ b/packages/gooddata-sdk/tests/catalog/test_catalog_data_source.py @@ -48,6 +48,8 @@ from tests_support.file_utils import load_json from tests_support.vcrpy_utils import get_vcr +from .conftest import safe_delete + gd_vcr = get_vcr() _current_dir = Path(__file__).parent.absolute() @@ -231,8 +233,8 @@ def test_catalog_list_data_sources(test_config): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) data_sources = sdk.catalog_data_source.list_data_sources() - assert len(data_sources) == 1 - assert data_sources[0].id == test_config["data_source"] + assert len(data_sources) >= 1 + assert any(ds.id == test_config["data_source"] for ds in data_sources) def _create_default_data_source(sdk: GoodDataSdk, data_source_id: str = "test"): @@ -263,9 +265,9 @@ def _get_data_source(data_sources: list[CatalogDataSource], data_source_id: str) def test_catalog_create_update_list_data_source(test_config): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) try: - data_sources = sdk.catalog_data_source.list_data_sources() - assert len(data_sources) == 1 - assert data_sources[0].id == test_config["data_source"] + data_sources_before = sdk.catalog_data_source.list_data_sources() + initial_count = len(data_sources_before) + assert any(ds.id == test_config["data_source"] for ds in data_sources_before) _create_default_data_source(sdk) @@ -284,7 +286,7 @@ def test_catalog_create_update_list_data_source(test_config): sdk.catalog_data_source.create_or_update_data_source(updated_data_source) data_sources = sdk.catalog_data_source.list_data_sources() - assert len(data_sources) == 2 + assert len(data_sources) == initial_count + 1 demo_ds = _get_data_source(data_sources, test_config["data_source"]) assert demo_ds assert demo_ds.id == test_config["data_source"] @@ -292,9 +294,7 @@ def test_catalog_create_update_list_data_source(test_config): assert updated_data_source == test_ds finally: # Cleanup every time - sdk.catalog_data_source.delete_data_source("test") - data_sources = sdk.catalog_data_source.list_data_sources() - assert len(data_sources) == 1 + safe_delete(sdk.catalog_data_source.delete_data_source, "test") def _create_delete_ds(sdk, data_source: CatalogDataSource): @@ -303,7 +303,7 @@ def _create_delete_ds(sdk, data_source: CatalogDataSource): created_ds = sdk.catalog_data_source.get_data_source(data_source.id) assert data_source == created_ds finally: - sdk.catalog_data_source.delete_data_source(data_source.id) + safe_delete(sdk.catalog_data_source.delete_data_source, data_source.id) @gd_vcr.use_cassette(str(_fixtures_dir / "redshift.yaml")) @@ -383,6 +383,8 @@ def test_catalog_create_data_source_snowflake_spec(test_config): @gd_vcr.use_cassette(str(_fixtures_dir / "bigquery.yaml")) def test_catalog_create_data_source_bigquery_spec(test_config): + if test_config.get("staging", False) and not test_config.get("bigquery_token_file"): + pytest.skip("BigQuery credentials not available on staging") sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) with mock.patch("builtins.open", mock.mock_open(read_data=test_config["bigquery_token_file"].encode("utf-8"))): _create_delete_ds( @@ -423,9 +425,8 @@ def test_catalog_create_data_source_dremio_spec(test_config): def test_catalog_patch_data_source(test_config): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) try: - data_sources = sdk.catalog_data_source.list_data_sources() - assert len(data_sources) == 1 - assert data_sources[0].id == test_config["data_source"] + data_sources_before = sdk.catalog_data_source.list_data_sources() + assert any(ds.id == test_config["data_source"] for ds in data_sources_before) _create_default_data_source(sdk) @@ -440,11 +441,11 @@ def test_catalog_patch_data_source(test_config): assert patched_data_source.name == "Test2" assert patched_data_source.alternative_data_source_id == "ds-patch-abc-id" finally: - sdk.catalog_data_source.delete_data_source("test") + safe_delete(sdk.catalog_data_source.delete_data_source, "test") @gd_vcr.use_cassette(str(_fixtures_dir / "demo_delete_declarative_data_sources.yaml")) -def test_delete_declarative_data_sources(test_config): +def test_delete_declarative_data_sources(test_config, snapshot_data_sources): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) credentials_path = _current_dir / "load" / "data_source_credentials" / "data_sources_credentials.yaml" expected_json_path = _current_dir / "expected" / "declarative_data_sources.json" @@ -468,7 +469,8 @@ def token_from_file_side_effect(file_path: Union[str, Path], base64_encode: bool assert len(data_sources_o.data_sources) == 0 finally: data_sources_o = CatalogDeclarativeDataSources.from_dict(load_json(expected_json_path)) - sdk.catalog_data_source.put_declarative_data_sources(data_sources_o, credentials_path) + safe_delete(sdk.catalog_data_source.put_declarative_data_sources, data_sources_o, credentials_path) + # snapshot_data_sources fixture also restores in teardown @gd_vcr.use_cassette(str(_fixtures_dir / "demo_store_declarative_data_sources.yaml")) @@ -485,7 +487,12 @@ def test_store_declarative_data_sources(test_config): @gd_vcr.use_cassette(str(_fixtures_dir / "demo_load_and_put_declarative_data_sources.yaml")) -def test_load_and_put_declarative_data_sources(test_config): +def test_load_and_put_declarative_data_sources(test_config, snapshot_data_sources): + if test_config.get("staging", False): + # load_and_put loads ALL data sources from the layout directory in a single PUT, + # including bigquery/databricks with dummy credentials. Staging validates credential + # formats and rejects them (400). Can't exclude individual data sources from the PUT. + pytest.skip("Staging server validates credential formats; this test uses mocked dummy credentials") load_folder = _current_dir / "load" sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) credentials_path = _current_dir / "load" / "data_source_credentials" / "data_sources_credentials.yaml" @@ -527,11 +534,12 @@ def token_from_file_side_effect(file_path: Union[str, Path], base64_encode: bool finally: data_sources_o = CatalogDeclarativeDataSources.from_dict(load_json(expected_json_path)) sdk2 = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) - sdk2.catalog_data_source.put_declarative_data_sources(data_sources_o, credentials_path) + safe_delete(sdk2.catalog_data_source.put_declarative_data_sources, data_sources_o, credentials_path) + # snapshot_data_sources fixture also restores in teardown @gd_vcr.use_cassette(str(_fixtures_dir / "demo_put_declarative_data_sources_connection.yaml")) -def test_put_declarative_data_sources_connection(test_config): +def test_put_declarative_data_sources_connection(test_config, snapshot_data_sources): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) path = _current_dir / "expected" / "declarative_data_sources.json" credentials_path = _current_dir / "load" / "data_source_credentials" / "data_sources_credentials.yaml" @@ -559,11 +567,12 @@ def token_from_file_side_effect(file_path: Union[str, Path], base64_encode: bool assert data_sources_e.to_dict(camel_case=True) == data_sources_o.to_dict(camel_case=True) finally: data_sources_o = CatalogDeclarativeDataSources.from_dict(load_json(path)) - sdk.catalog_data_source.put_declarative_data_sources(data_sources_o, credentials_path) + safe_delete(sdk.catalog_data_source.put_declarative_data_sources, data_sources_o, credentials_path) + # snapshot_data_sources fixture also restores in teardown @gd_vcr.use_cassette(str(_fixtures_dir / "demo_put_declarative_data_sources.yaml")) -def test_put_declarative_data_sources(test_config): +def test_put_declarative_data_sources(test_config, snapshot_data_sources): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) path = _current_dir / "expected" / "declarative_data_sources.json" credentials_path = _current_dir / "load" / "data_source_credentials" / "data_sources_credentials.yaml" @@ -576,7 +585,8 @@ def test_put_declarative_data_sources(test_config): assert data_sources_e.to_dict(camel_case=True) == data_sources_o.to_dict(camel_case=True) finally: data_sources_o = CatalogDeclarativeDataSources.from_dict(load_json(path)) - sdk.catalog_data_source.put_declarative_data_sources(data_sources_o, credentials_path) + safe_delete(sdk.catalog_data_source.put_declarative_data_sources, data_sources_o, credentials_path) + # snapshot_data_sources fixture also restores in teardown @gd_vcr.use_cassette(str(_fixtures_dir / "demo_test_declarative_data_sources.yaml")) @@ -632,7 +642,7 @@ def test_declarative_data_sources_databricks_token(test_config): @gd_vcr.use_cassette(str(_fixtures_dir / "demo_cache_strategy.yaml")) -def test_cache_strategy(test_config: dict): +def test_cache_strategy(test_config: dict, snapshot_data_sources): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) data_source_id = test_config["data_source"] path = _current_dir / "expected" / "declarative_data_sources.json" @@ -657,7 +667,8 @@ def token_from_file_side_effect(file_path: Union[str, Path], base64_encode: bool assert updated.cache_strategy == "NEVER" finally: data_sources_o = CatalogDeclarativeDataSources.from_dict(load_json(path)) - sdk.catalog_data_source.put_declarative_data_sources(data_sources_o, credentials_path) + safe_delete(sdk.catalog_data_source.put_declarative_data_sources, data_sources_o, credentials_path) + # snapshot_data_sources fixture also restores in teardown @gd_vcr.use_cassette(str(_fixtures_dir / "demo_test_scan_model.yaml")) diff --git a/packages/gooddata-sdk/tests/catalog/test_catalog_organization.py b/packages/gooddata-sdk/tests/catalog/test_catalog_organization.py index 58d4d2b66..48051dc4f 100644 --- a/packages/gooddata-sdk/tests/catalog/test_catalog_organization.py +++ b/packages/gooddata-sdk/tests/catalog/test_catalog_organization.py @@ -17,6 +17,8 @@ ) from tests_support.vcrpy_utils import get_vcr +from .conftest import safe_delete + gd_vcr = get_vcr() _default_jwk_id = "demoJwk" @@ -24,10 +26,16 @@ _fixtures_dir = _current_dir / "fixtures" / "organization" -def _default_organization_check(organization: CatalogOrganization): - assert organization.id == "default" - assert organization.attributes.name == "Default Organization" - assert organization.attributes.hostname == "localhost" +def _default_organization_check(organization: CatalogOrganization, test_config: dict | None = None): + if test_config and test_config.get("staging", False): + # On staging, org ID and hostname differ from local Docker + assert organization.id is not None + assert organization.attributes.name is not None + assert organization.attributes.hostname is not None + else: + assert organization.id == "default" + assert organization.attributes.name == "Default Organization" + assert organization.attributes.hostname == "localhost" def _default_jwk(jwk_id=_default_jwk_id, alg=None, kid=None): @@ -64,14 +72,14 @@ def _default_jwk(jwk_id=_default_jwk_id, alg=None, kid=None): def test_get_organization(test_config): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) organization = sdk.catalog_organization.get_organization() - _default_organization_check(organization) + _default_organization_check(organization, test_config) @gd_vcr.use_cassette(str(_fixtures_dir / "update_name.yaml")) def test_update_name(test_config): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) organization = sdk.catalog_organization.get_organization() - _default_organization_check(organization) + _default_organization_check(organization, test_config) default_name = organization.attributes.name new_name = "test_organization" @@ -82,9 +90,7 @@ def test_update_name(test_config): assert updated_organization.attributes.name == new_name assert updated_organization.attributes.hostname == organization.attributes.hostname finally: - sdk.catalog_organization.update_name(default_name) - organization = sdk.catalog_organization.get_organization() - _default_organization_check(organization) + safe_delete(sdk.catalog_organization.update_name, default_name) @gd_vcr.use_cassette(str(_fixtures_dir / "create_jwk.yaml")) @@ -97,8 +103,7 @@ def test_create_jwk(test_config): assert new_jwk.id == created_jwk.id assert new_jwk.attributes == created_jwk.attributes finally: - sdk.catalog_organization.delete_jwk("demoJwk") - assert len(sdk.catalog_organization.list_jwks()) == 0 + safe_delete(sdk.catalog_organization.delete_jwk, "demoJwk") @gd_vcr.use_cassette(str(_fixtures_dir / "update_jwk.yaml")) @@ -112,8 +117,7 @@ def test_update_jwk(test_config): updated_jwk = sdk.catalog_organization.get_jwk("demoJwk") assert update_jwk.attributes.content.alg == updated_jwk.attributes.content.alg finally: - sdk.catalog_organization.delete_jwk("demoJwk") - assert len(sdk.catalog_organization.list_jwks()) == 0 + safe_delete(sdk.catalog_organization.delete_jwk, "demoJwk") @gd_vcr.use_cassette(str(_fixtures_dir / "delete_jwk.yaml")) @@ -125,9 +129,9 @@ def test_delete_jwk(test_config): sdk.catalog_organization.delete_jwk(jwk.id) sdk.catalog_organization.get_jwk(jwk.id) except NotFoundException: - assert len(sdk.catalog_organization.list_jwks()) == 0 + pass # Expected: jwk was deleted successfully finally: - assert len(sdk.catalog_organization.list_jwks()) == 0 + safe_delete(sdk.catalog_organization.delete_jwk, jwk.id) @gd_vcr.use_cassette(str(_fixtures_dir / "list_jwk.yaml")) @@ -135,14 +139,15 @@ def test_list_jwk(test_config): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) jwk1 = _default_jwk(jwk_id="demoJwk1", kid="kid1") jwk2 = _default_jwk(jwk_id="demoJwk2", kid="kid2") + jwks_before = sdk.catalog_organization.list_jwks() try: sdk.catalog_organization.create_or_update_jwk(jwk1) sdk.catalog_organization.create_or_update_jwk(jwk2) - assert len(sdk.catalog_organization.list_jwks()) == 2 + jwks_after = sdk.catalog_organization.list_jwks() + assert len(jwks_after) == len(jwks_before) + 2 finally: - sdk.catalog_organization.delete_jwk(jwk1.id) - sdk.catalog_organization.delete_jwk(jwk2.id) - assert len(sdk.catalog_organization.list_jwks()) == 0 + safe_delete(sdk.catalog_organization.delete_jwk, jwk1.id) + safe_delete(sdk.catalog_organization.delete_jwk, jwk2.id) @gd_vcr.use_cassette(str(_fixtures_dir / "create_organization_setting.yaml")) @@ -160,8 +165,7 @@ def test_create_organization_setting(test_config): assert setting.attributes.type == setting_type assert setting.attributes.content == content finally: - sdk.catalog_organization.delete_organization_setting(setting_id) - assert len(sdk.catalog_organization.list_organization_settings()) == 0 + safe_delete(sdk.catalog_organization.delete_organization_setting, setting_id) @gd_vcr.use_cassette(str(_fixtures_dir / "list_organization_settings.yaml")) @@ -173,17 +177,17 @@ def test_list_organization_settings(test_config): new_setting_1 = CatalogOrganizationSetting.init(setting_id_1, "LOCALE", {"value": "fr-FR"}) new_setting_2 = CatalogOrganizationSetting.init(setting_id_2, "FORMAT_LOCALE", {"value": "en-GB"}) + settings_before = sdk.catalog_organization.list_organization_settings() try: sdk.catalog_organization.create_organization_setting(new_setting_1) sdk.catalog_organization.create_organization_setting(new_setting_2) organization_settings = sdk.catalog_organization.list_organization_settings() - assert len(organization_settings) == 2 + assert len(organization_settings) == len(settings_before) + 2 assert new_setting_1 in organization_settings assert new_setting_2 in organization_settings finally: - sdk.catalog_organization.delete_organization_setting(setting_id_1) - sdk.catalog_organization.delete_organization_setting(setting_id_2) - assert len(sdk.catalog_organization.list_organization_settings()) == 0 + safe_delete(sdk.catalog_organization.delete_organization_setting, setting_id_1) + safe_delete(sdk.catalog_organization.delete_organization_setting, setting_id_2) @gd_vcr.use_cassette(str(_fixtures_dir / "delete_organization_setting.yaml")) @@ -198,9 +202,9 @@ def test_delete_organization_setting(test_config): sdk.catalog_organization.delete_organization_setting(setting_id) sdk.catalog_organization.get_organization_setting(setting_id) except NotFoundException: - assert len(sdk.catalog_organization.list_organization_settings()) == 0 + pass # Expected: setting was deleted successfully finally: - assert len(sdk.catalog_organization.list_organization_settings()) == 0 + safe_delete(sdk.catalog_organization.delete_organization_setting, setting_id) @gd_vcr.use_cassette(str(_fixtures_dir / "update_organization_setting.yaml")) @@ -219,8 +223,7 @@ def test_update_organization_setting(test_config): assert setting.attributes.type == "LOCALE" assert setting.attributes.content == {"value": "en-GB"} finally: - sdk.catalog_organization.delete_organization_setting(setting_id) - assert len(sdk.catalog_organization.list_organization_settings()) == 0 + safe_delete(sdk.catalog_organization.delete_organization_setting, setting_id) @gd_vcr.use_cassette(str(_fixtures_dir / "create_csp_directive.yaml")) @@ -237,8 +240,7 @@ def test_create_csp_directive(test_config): assert csp_directive.id == directive_id assert csp_directive.attributes.sources == sources finally: - sdk.catalog_organization.delete_csp_directive(directive_id) - assert len(sdk.catalog_organization.list_csp_directives()) == 0 + safe_delete(sdk.catalog_organization.delete_csp_directive, directive_id) @gd_vcr.use_cassette(str(_fixtures_dir / "list_csp_directives.yaml")) @@ -250,17 +252,17 @@ def test_list_csp_directives(test_config): new_csp_directive_1 = CatalogCspDirective.init(directive_id_1, ["https://test.com"]) new_csp_directive_2 = CatalogCspDirective.init(directive_id_2, ["https://test2.com"]) + directives_before = sdk.catalog_organization.list_csp_directives() try: sdk.catalog_organization.create_csp_directive(new_csp_directive_1) sdk.catalog_organization.create_csp_directive(new_csp_directive_2) csp_directives = sdk.catalog_organization.list_csp_directives() - assert len(csp_directives) == 2 + assert len(csp_directives) == len(directives_before) + 2 assert new_csp_directive_1 in csp_directives assert new_csp_directive_2 in csp_directives finally: - sdk.catalog_organization.delete_csp_directive(directive_id_1) - sdk.catalog_organization.delete_csp_directive(directive_id_2) - assert len(sdk.catalog_organization.list_csp_directives()) == 0 + safe_delete(sdk.catalog_organization.delete_csp_directive, directive_id_1) + safe_delete(sdk.catalog_organization.delete_csp_directive, directive_id_2) @gd_vcr.use_cassette(str(_fixtures_dir / "delete_csp_directive.yaml")) @@ -275,9 +277,9 @@ def test_delete_csp_directive(test_config): sdk.catalog_organization.delete_csp_directive(directive_id) sdk.catalog_organization.get_csp_directive(directive_id) except NotFoundException: - assert len(sdk.catalog_organization.list_csp_directives()) == 0 + pass # Expected: directive was deleted successfully finally: - assert len(sdk.catalog_organization.list_csp_directives()) == 0 + safe_delete(sdk.catalog_organization.delete_csp_directive, directive_id) @gd_vcr.use_cassette(str(_fixtures_dir / "update_csp_directive.yaml")) @@ -295,14 +297,15 @@ def test_update_csp_directive(test_config): assert csp_directive.id == directive_id assert csp_directive.attributes.sources == ["https://test2.com"] finally: - sdk.catalog_organization.delete_csp_directive(directive_id) - assert len(sdk.catalog_organization.list_csp_directives()) == 0 + safe_delete(sdk.catalog_organization.delete_csp_directive, directive_id) @gd_vcr.use_cassette(str(_fixtures_dir / "update_allowed_origins.yaml")) def test_update_allowed_origins(test_config): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + organization_before = sdk.catalog_organization.get_organization() + original_origins = organization_before.attributes.allowed_origins or [] allowed_origins = ["https://test.com"] try: @@ -310,39 +313,30 @@ def test_update_allowed_origins(test_config): organization = sdk.catalog_organization.get_organization() assert organization.attributes.allowed_origins == allowed_origins finally: - sdk.catalog_organization.update_allowed_origins([]) - organization = sdk.catalog_organization.get_organization() - assert organization.attributes.allowed_origins == [] + safe_delete(sdk.catalog_organization.update_allowed_origins, original_origins) @gd_vcr.use_cassette(str(_fixtures_dir / "layout_notification_channels.yaml")) -def test_layout_notification_channels(test_config): +def test_layout_notification_channels(test_config, snapshot_notification_channels): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) - ncs = sdk.catalog_organization.get_declarative_notification_channels() - assert len(ncs) == 0 - - try: - notification_channels_e = [ - CatalogDeclarativeNotificationChannel( - id="webhook", - name="Webhook", - destination=CatalogWebhook(url="https://webhook.site", token="123"), - custom_dashboard_url="https://dashboard.site", - allowed_recipients="CREATOR", - ), - ] - sdk.catalog_organization.put_declarative_notification_channels(notification_channels_e) - notification_channels_o = sdk.catalog_organization.get_declarative_notification_channels() - assert notification_channels_e[0].id == notification_channels_o[0].id - assert notification_channels_e[0].name == notification_channels_o[0].name - assert notification_channels_e[0].destination == notification_channels_o[0].destination - assert notification_channels_e[0].custom_dashboard_url == notification_channels_o[0].custom_dashboard_url - assert notification_channels_e[0].allowed_recipients == notification_channels_o[0].allowed_recipients - finally: - sdk.catalog_organization.put_declarative_notification_channels([]) - ncs = sdk.catalog_organization.get_declarative_notification_channels() - assert len(ncs) == 0 + notification_channels_e = [ + CatalogDeclarativeNotificationChannel( + id="webhook", + name="Webhook", + destination=CatalogWebhook(url="https://webhook.site", token="123"), + custom_dashboard_url="https://dashboard.site", + allowed_recipients="CREATOR", + ), + ] + sdk.catalog_organization.put_declarative_notification_channels(notification_channels_e) + notification_channels_o = sdk.catalog_organization.get_declarative_notification_channels() + assert notification_channels_e[0].id == notification_channels_o[0].id + assert notification_channels_e[0].name == notification_channels_o[0].name + assert notification_channels_e[0].destination == notification_channels_o[0].destination + assert notification_channels_e[0].custom_dashboard_url == notification_channels_o[0].custom_dashboard_url + assert notification_channels_e[0].allowed_recipients == notification_channels_o[0].allowed_recipients + # snapshot_notification_channels fixture restores original state in teardown @gd_vcr.use_cassette(str(_fixtures_dir / "get_llm_endpoint.yaml")) @@ -365,35 +359,35 @@ def test_get_llm_endpoint(test_config): assert not retrieved_endpoint.attributes.token # Token not returned for security finally: - # Clean up - sdk.catalog_organization.delete_llm_endpoint(test_id) + safe_delete(sdk.catalog_organization.delete_llm_endpoint, test_id) @gd_vcr.use_cassette(str(_fixtures_dir / "list_llm_endpoints.yaml")) def test_list_llm_endpoints(test_config): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + test_id1 = "endpoint1" + test_id2 = "endpoint2" + try: - # Create test endpoints first - test_id1 = "endpoint1" test_title1 = "Test Endpoint 1" test_token1 = "secret-token-1" - test_id2 = "endpoint2" test_title2 = "Test Endpoint 2" test_token2 = "secret-token-2" - sdk.catalog_organization.create_llm_endpoint(id=test_id1, title=test_title1, token=test_token1) + endpoints_before = sdk.catalog_organization.list_llm_endpoints() + sdk.catalog_organization.create_llm_endpoint(id=test_id1, title=test_title1, token=test_token1) sdk.catalog_organization.create_llm_endpoint(id=test_id2, title=test_title2, token=test_token2) - # Get and verify the endpoints list endpoints = sdk.catalog_organization.list_llm_endpoints() assert isinstance(endpoints, list) - assert len(endpoints) == 2 + assert len(endpoints) == len(endpoints_before) + 2 assert all(isinstance(endpoint, CatalogLlmEndpoint) for endpoint in endpoints) - assert {endpoint.id for endpoint in endpoints} == {test_id1, test_id2} - assert {endpoint.attributes.title for endpoint in endpoints} == {test_title1, test_title2} + endpoint_ids = {endpoint.id for endpoint in endpoints} + assert test_id1 in endpoint_ids + assert test_id2 in endpoint_ids # Test with optional parameters filtered_endpoints = sdk.catalog_organization.list_llm_endpoints(filter="title=='Test Endpoint 1'", size=1) @@ -403,9 +397,8 @@ def test_list_llm_endpoints(test_config): assert filtered_endpoints[0].attributes.title == test_title1 finally: - # Clean up - sdk.catalog_organization.delete_llm_endpoint(test_id1) - sdk.catalog_organization.delete_llm_endpoint(test_id2) + safe_delete(sdk.catalog_organization.delete_llm_endpoint, test_id1) + safe_delete(sdk.catalog_organization.delete_llm_endpoint, test_id2) @gd_vcr.use_cassette(str(_fixtures_dir / "create_llm_endpoint.yaml")) @@ -456,9 +449,8 @@ def test_create_llm_endpoint(test_config): assert llm_endpoint_2.attributes.llm_organization == full_llm_org assert llm_endpoint_2.attributes.llm_model == full_llm_model finally: - # Cleanup - sdk.catalog_organization.delete_llm_endpoint(minimal_id) - sdk.catalog_organization.delete_llm_endpoint(full_id) + safe_delete(sdk.catalog_organization.delete_llm_endpoint, minimal_id) + safe_delete(sdk.catalog_organization.delete_llm_endpoint, full_id) @gd_vcr.use_cassette(str(_fixtures_dir / "update_llm_endpoint.yaml")) @@ -527,8 +519,7 @@ def test_update_llm_endpoint(test_config): assert llm_endpoint_3.attributes.llm_organization == full_llm_org assert llm_endpoint_3.attributes.llm_model == full_llm_model finally: - # Cleanup - sdk.catalog_organization.delete_llm_endpoint(initial_id) + safe_delete(sdk.catalog_organization.delete_llm_endpoint, initial_id) @gd_vcr.use_cassette(str(_fixtures_dir / "delete_llm_endpoint.yaml")) @@ -549,11 +540,7 @@ def test_delete_llm_endpoint(test_config): except NotFoundException: pass finally: - # Ensure cleanup - try: - sdk.catalog_organization.delete_llm_endpoint("endpoint1") - except NotFoundException: - pass + safe_delete(sdk.catalog_organization.delete_llm_endpoint, "endpoint1") # diff --git a/packages/gooddata-sdk/tests/catalog/test_catalog_permission.py b/packages/gooddata-sdk/tests/catalog/test_catalog_permission.py index 66381bb61..b6b3ce4a3 100644 --- a/packages/gooddata-sdk/tests/catalog/test_catalog_permission.py +++ b/packages/gooddata-sdk/tests/catalog/test_catalog_permission.py @@ -22,6 +22,8 @@ ) from tests_support.vcrpy_utils import get_vcr +from .conftest import safe_delete + gd_vcr = get_vcr() _current_dir = Path(__file__).parent.absolute() @@ -33,9 +35,6 @@ def _empty_permissions(sdk: GoodDataSdk, workspace_id: str) -> None: sdk.catalog_permission.put_declarative_permissions( workspace_id=workspace_id, declarative_workspace_permissions=empty_permissions_e ) - empty_permissions_o = sdk.catalog_permission.get_declarative_permissions(workspace_id=workspace_id) - assert empty_permissions_e == empty_permissions_o - assert empty_permissions_e.to_dict(camel_case=True) == empty_permissions_o.to_dict(camel_case=True) def _assert_default_permissions(catalog_declarative_permissions: CatalogDeclarativeWorkspacePermissions) -> None: @@ -68,11 +67,6 @@ def _default_organization_permissions(sdk: GoodDataSdk) -> None: sdk.catalog_permission.put_declarative_organization_permissions([default_catalog_organization_permission]) - catalog_permissions = sdk.catalog_permission.get_declarative_organization_permissions() - assert len(catalog_permissions) == 1 - _assert_organization_permissions_id(catalog_permissions) - assert set(org_permission.name for org_permission in catalog_permissions) == {"MANAGE"} - def _validation_helper(class_type, attribute_name: str): client_class = class_type.client_class() @@ -122,11 +116,6 @@ def _rollback_dashboard_permissions(sdk: GoodDataSdk) -> None: ), ], ) - # check that it was properly removed - dashboard_permissions = sdk.catalog_permission.list_dashboard_permissions("demo", "campaign") - assert len(dashboard_permissions.user_groups) == 0 - assert len(dashboard_permissions.users) == 0 - assert len(dashboard_permissions.rules) == 0 def test_single_workspace_permission_validation(test_config): @@ -154,7 +143,7 @@ def test_get_declarative_permissions(test_config): @gd_vcr.use_cassette(str(_fixtures_dir / "put_declarative_permissions.yaml")) -def test_put_declarative_permissions(test_config): +def test_put_declarative_permissions(test_config, snapshot_permissions): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) expected_json_path = _current_dir / "expected" / "declarative_workspace_permissions.json" workspace_id = test_config["workspace_with_parent"] @@ -174,7 +163,7 @@ def test_put_declarative_permissions(test_config): declarative_permissions_o = sdk.catalog_permission.get_declarative_permissions(workspace_id=workspace_id) _assert_default_permissions(declarative_permissions_o) finally: - _empty_permissions(sdk, workspace_id) + safe_delete(_empty_permissions, sdk, workspace_id) @gd_vcr.use_cassette(str(_fixtures_dir / "list_available_assignees.yaml")) @@ -190,11 +179,11 @@ def test_list_dashboard_permissions(test_config): try: _add_dashboard_permissions(sdk) finally: - _rollback_dashboard_permissions(sdk) + safe_delete(_rollback_dashboard_permissions, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "put_declarative_organization_permissions.yaml")) -def test_put_and_get_declarative_organization_permissions(test_config): +def test_put_and_get_declarative_organization_permissions(test_config, snapshot_org_permissions): expected_json_path = _current_dir / "expected" / "declarative_organization_permissions.json" sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) @@ -216,11 +205,11 @@ def test_put_and_get_declarative_organization_permissions(test_config): "SELF_CREATE_TOKEN", } finally: - _default_organization_permissions(sdk) + safe_delete(_default_organization_permissions, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "manage_organization_permissions.yaml")) -def test_manage_organization_permissions(test_config): +def test_manage_organization_permissions(test_config, snapshot_org_permissions): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) # assign permissions to adminGroup @@ -241,7 +230,7 @@ def test_manage_organization_permissions(test_config): "SELF_CREATE_TOKEN", } finally: - _default_organization_permissions(sdk) + safe_delete(_default_organization_permissions, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "manage_dashboard_permissions_declarative_workspace.yaml")) @@ -251,4 +240,4 @@ def test_manage_dashboard_permissions_declarative_workspace(test_config): _add_dashboard_permissions(sdk) sdk.catalog_workspace.get_declarative_workspace(workspace_id="demo") finally: - _rollback_dashboard_permissions(sdk) + safe_delete(_rollback_dashboard_permissions, sdk) diff --git a/packages/gooddata-sdk/tests/catalog/test_catalog_user_service.py b/packages/gooddata-sdk/tests/catalog/test_catalog_user_service.py index 21ba01cd9..5e4f113e2 100644 --- a/packages/gooddata-sdk/tests/catalog/test_catalog_user_service.py +++ b/packages/gooddata-sdk/tests/catalog/test_catalog_user_service.py @@ -41,6 +41,8 @@ from gooddata_sdk.utils import recreate_directory from tests_support.vcrpy_utils import get_vcr +from .conftest import safe_delete + gd_vcr = get_vcr() _current_dir = Path(__file__).parent.absolute() @@ -54,8 +56,14 @@ def test_list_users(test_config): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) users = sdk.catalog_user.list_users() - assert len(users) == 3 - assert set(user.id for user in users) == {"demo2", "admin", "demo"} + user_ids = {user.id for user in users} + if test_config.get("staging", False): + assert len(users) >= 2 + assert "admin" in user_ids + assert test_config["test_user"] in user_ids + else: + assert len(users) >= 3 + assert {"demo2", "admin", "demo"}.issubset(user_ids) @gd_vcr.use_cassette(str(_fixtures_dir / "get_user.yaml")) @@ -76,8 +84,8 @@ def test_create_delete_user(test_config): authentication_id = f"{user_id}_auth_id" user_group_ids = [test_config["test_user_group"]] + initial_count = len(sdk.catalog_user.list_users()) try: - assert len(sdk.catalog_user.list_users()) == 3 user_e = CatalogUser.init( user_id=user_id, firstname=firstname, @@ -88,7 +96,7 @@ def test_create_delete_user(test_config): ) sdk.catalog_user.create_or_update_user(user_e) user = sdk.catalog_user.get_user(user_id) - assert len(sdk.catalog_user.list_users()) == 4 + assert len(sdk.catalog_user.list_users()) == initial_count + 1 assert user.id == user_id assert [i.id for i in user.user_groups] == user_group_ids assert user.attributes.firstname == firstname @@ -96,8 +104,7 @@ def test_create_delete_user(test_config): assert user.attributes.email == email assert user.attributes.authentication_id == authentication_id finally: - sdk.catalog_user.delete_user(user_id) - assert len(sdk.catalog_user.list_users()) == 3 + safe_delete(sdk.catalog_user.delete_user, user_id) @gd_vcr.use_cassette(str(_fixtures_dir / "update_user.yaml")) @@ -172,13 +179,7 @@ def test_update_user(test_config): assert set([i.id for i in updated_user.user_groups]) == set(new_user_group_ids) finally: - # Clean up: Delete temporary user (no cascade issues since it has no permissions) - try: - sdk.catalog_user.delete_user(temp_user_id) - except Exception: - pass # User may not exist if creation failed - # Verify we're back to original user count - assert len(sdk.catalog_user.list_users()) == initial_user_count + safe_delete(sdk.catalog_user.delete_user, temp_user_id) def _restore_demo2_permissions(sdk: GoodDataSdk, test_config: dict) -> None: @@ -226,14 +227,9 @@ def _restore_demo2_permissions(sdk: GoodDataSdk, test_config: dict) -> None: def test_list_user_groups(test_config): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) user_groups = sdk.catalog_user.list_user_groups() - assert len(user_groups) == 4 - assert set(user_group.id for user_group in user_groups) == { - "adminGroup", - "demoGroup", - "adminQA1Group", - "visitorsGroup", - } - assert set(user_group.name for user_group in user_groups) == {"demo group", "visitors", None} + assert len(user_groups) >= 4 + expected_ids = {"adminGroup", "demoGroup", "adminQA1Group", "visitorsGroup"} + assert expected_ids.issubset(set(user_group.id for user_group in user_groups)) @gd_vcr.use_cassette(str(_fixtures_dir / "get_user_group.yaml")) @@ -249,10 +245,8 @@ def test_create_delete_user_group(test_config): user_group_id = test_config["test_new_user_group"] user_group_parent_ids = [test_config["test_user_group"]] + initial_count = len(sdk.catalog_user.list_user_groups()) try: - current_user_groups = sdk.catalog_user.list_user_groups() - assert len(current_user_groups) == 4 - assert set(ug.name for ug in current_user_groups) == {"demo group", "visitors", None} user_group_e = CatalogUserGroup.init( user_group_id=user_group_id, user_group_name=user_group_id.upper(), @@ -260,13 +254,12 @@ def test_create_delete_user_group(test_config): ) sdk.catalog_user.create_or_update_user_group(user_group_e) user_group = sdk.catalog_user.get_user_group(user_group_id) - assert len(sdk.catalog_user.list_user_groups()) == 5 + assert len(sdk.catalog_user.list_user_groups()) == initial_count + 1 assert user_group.id == user_group_id assert user_group.name == user_group_id.upper() assert [p.id for p in user_group.relationships.parents.data] == user_group_parent_ids finally: - sdk.catalog_user.delete_user_group(user_group_id) - assert len(sdk.catalog_user.list_user_groups()) == 4 + safe_delete(sdk.catalog_user.delete_user_group, user_group_id) @gd_vcr.use_cassette(str(_fixtures_dir / "update_user_group.yaml")) @@ -276,7 +269,6 @@ def test_update_user_group(test_config): user_group = sdk.catalog_user.get_user_group(user_group_id) user_group_parent_ids = [] new_user_group_name = "test_update_user_group" - assert len(sdk.catalog_user.list_user_groups()) == 4 try: user_group_e = CatalogUserGroup.init( @@ -292,8 +284,7 @@ def test_update_user_group(test_config): assert len(updated_user_group.get_parents) == len(user_group_parent_ids) assert set(updated_user_group.get_parents) == set(user_group_parent_ids) finally: - sdk.catalog_user.create_or_update_user_group(user_group) - assert len(sdk.catalog_user.list_user_groups()) == 4 + safe_delete(sdk.catalog_user.create_or_update_user_group, user_group) # DECLARATIVE USERS @@ -307,7 +298,7 @@ def test_get_declarative_users(test_config): users = sdk.catalog_user.get_declarative_users() - _assert_users_default(users.users) + _assert_users_default(users.users, test_config) assert users.to_dict(camel_case=True) == layout_api.get_users_layout().to_dict(camel_case=True) @@ -318,7 +309,7 @@ def test_store_declarative_users(test_config): recreate_directory(path) users_e = sdk.catalog_user.get_declarative_users() - _assert_users_default(users_e.users) + _assert_users_default(users_e.users, test_config) sdk.catalog_user.store_declarative_users(path) users_o = sdk.catalog_user.load_declarative_users(path) @@ -328,38 +319,43 @@ def test_store_declarative_users(test_config): @gd_vcr.use_cassette(str(_fixtures_dir / "put_declarative_users.yaml")) -def test_put_declarative_users(test_config): +def test_put_declarative_users(test_config, snapshot_full_user_context): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) users_e = sdk.catalog_user.get_declarative_users() - _assert_users_default(users_e.users) + _assert_users_default(users_e.users, test_config) try: - _clear_users(sdk) + _clear_users(sdk, test_config) sdk.catalog_user.put_declarative_users(users_e) users_o = sdk.catalog_user.get_declarative_users() assert users_e == users_o assert users_e.to_dict(camel_case=True) == users_o.to_dict(camel_case=True) finally: - sdk.catalog_user.put_declarative_users(users_e) + safe_delete(sdk.catalog_user.put_declarative_users, users_e) @gd_vcr.use_cassette(str(_fixtures_dir / "load_and_put_declarative_users.yaml")) -def test_load_and_put_declarative_users(test_config): +def test_load_and_put_declarative_users(test_config, snapshot_full_user_context): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) path = _current_dir / "load" users_e = sdk.catalog_user.get_declarative_users() - _assert_users_default(users_e.users) + _assert_users_default(users_e.users, test_config) try: - _clear_users(sdk) + _clear_users(sdk, test_config) sdk.catalog_user.load_and_put_declarative_users(path) users_o = sdk.catalog_user.get_declarative_users() - assert set(user.id for user in users_e.users) == set(user.id for user in users_o.users) - assert [user.user_groups for user in users_e.users] == [user.user_groups for user in users_o.users] + expected_ids = {"admin", test_config["demo_user"], test_config["test_user"]} + actual_ids = set(user.id for user in users_o.users) + assert expected_ids.issubset(actual_ids), f"Expected users {expected_ids} not found in {actual_ids}" + # Verify user group assignments for the expected users + expected_groups = {u.id: u.user_groups for u in users_e.users if u.id in expected_ids} + actual_groups = {u.id: u.user_groups for u in users_o.users if u.id in expected_ids} + assert expected_groups == actual_groups finally: - sdk.catalog_user.put_declarative_users(users_e) + safe_delete(sdk.catalog_user.put_declarative_users, users_e) # DECLARATIVE USER GROUPS @@ -373,7 +369,7 @@ def test_get_declarative_user_groups(test_config): user_groups = sdk.catalog_user.get_declarative_user_groups() - _assert_user_groups_default(user_groups.user_groups) + _assert_user_groups_default(user_groups.user_groups, test_config) assert user_groups.to_dict(camel_case=True) == layout_api.get_user_groups_layout().to_dict(camel_case=True) @@ -384,7 +380,7 @@ def test_store_declarative_user_groups(test_config): recreate_directory(path) user_groups_e = sdk.catalog_user.get_declarative_user_groups() - _assert_user_groups_default(user_groups_e.user_groups) + _assert_user_groups_default(user_groups_e.user_groups, test_config) sdk.catalog_user.store_declarative_user_groups(path) user_groups_o = sdk.catalog_user.load_declarative_user_groups(path) @@ -394,58 +390,48 @@ def test_store_declarative_user_groups(test_config): @gd_vcr.use_cassette(str(_fixtures_dir / "put_declarative_user_groups.yaml")) -def test_put_declarative_user_groups(test_config): +def test_put_declarative_user_groups(test_config, snapshot_full_user_context): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) - user_groups_path = _current_dir / "expected" / "declarative_user_groups.json" user_groups_e = sdk.catalog_user.get_declarative_user_groups() users_e = sdk.catalog_user.get_declarative_users() - _assert_user_groups_default(user_groups_e.user_groups) - _assert_users_default(users_e.users) + _assert_user_groups_default(user_groups_e.user_groups, test_config) + _assert_users_default(users_e.users, test_config) try: - _clear_users(sdk) - _clear_user_groups(sdk) + _clear_users(sdk, test_config) + _clear_user_groups(sdk, test_config) sdk.catalog_user.put_declarative_user_groups(user_groups_e) user_groups_o = sdk.catalog_user.get_declarative_user_groups() assert user_groups_e == user_groups_o assert user_groups_e.to_dict(camel_case=True) == user_groups_o.to_dict(camel_case=True) finally: - with open(user_groups_path) as f: - data = json.load(f) - user_groups_o = CatalogDeclarativeUserGroups.from_dict(data, camel_case=True) - sdk.catalog_user.put_declarative_user_groups(user_groups_o) - - sdk.catalog_user.put_declarative_users(users_e) + safe_delete(sdk.catalog_user.put_declarative_user_groups, user_groups_e) + safe_delete(sdk.catalog_user.put_declarative_users, users_e) @gd_vcr.use_cassette(str(_fixtures_dir / "load_and_put_declarative_user_groups.yaml")) -def test_load_and_put_declarative_user_groups(test_config): +def test_load_and_put_declarative_user_groups(test_config, snapshot_full_user_context): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) path = _current_dir / "load" - expected_json_path = _current_dir / "expected" / "declarative_user_groups.json" users_e = sdk.catalog_user.get_declarative_users() user_groups_e = sdk.catalog_user.get_declarative_user_groups() - _assert_user_groups_default(user_groups_e.user_groups) - _assert_users_default(users_e.users) + _assert_user_groups_default(user_groups_e.user_groups, test_config) + _assert_users_default(users_e.users, test_config) try: - _clear_users(sdk) - _clear_user_groups(sdk) + _clear_users(sdk, test_config) + _clear_user_groups(sdk, test_config) sdk.catalog_user.load_and_put_declarative_user_groups(path) user_groups_o = sdk.catalog_user.get_declarative_user_groups() assert user_groups_e == user_groups_o assert user_groups_e.to_dict(camel_case=True) == user_groups_o.to_dict(camel_case=True) finally: - with open(expected_json_path) as f: - data = json.load(f) - user_groups_o = CatalogDeclarativeUserGroups.from_dict(data, camel_case=True) - sdk.catalog_user.put_declarative_user_groups(user_groups_o) - - sdk.catalog_user.put_declarative_users(users_e) + safe_delete(sdk.catalog_user.put_declarative_user_groups, user_groups_e) + safe_delete(sdk.catalog_user.put_declarative_users, users_e) # DECLARATIVE USERS AND USER GROUPS @@ -457,7 +443,7 @@ def test_get_declarative_users_user_groups(test_config): users_user_groups = sdk.catalog_user.get_declarative_users_user_groups() - _assert_users_user_groups_default(users_user_groups) + _assert_users_user_groups_default(users_user_groups, test_config) assert users_user_groups.to_dict(camel_case=True) == layout_api.get_users_user_groups_layout().to_dict( camel_case=True ) @@ -470,7 +456,7 @@ def test_store_declarative_users_user_groups(test_config): recreate_directory(path) users_user_groups_e = sdk.catalog_user.get_declarative_users_user_groups() - _assert_users_user_groups_default(users_user_groups_e) + _assert_users_user_groups_default(users_user_groups_e, test_config) sdk.catalog_user.store_declarative_users_user_groups(path) users_user_groups_o = sdk.catalog_user.load_declarative_users_user_groups(path) @@ -480,39 +466,39 @@ def test_store_declarative_users_user_groups(test_config): @gd_vcr.use_cassette(str(_fixtures_dir / "put_declarative_users_user_groups.yaml")) -def test_put_declarative_users_user_groups(test_config): +def test_put_declarative_users_user_groups(test_config, snapshot_full_user_context): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) users_user_groups_e = sdk.catalog_user.get_declarative_users_user_groups() - _assert_users_user_groups_default(users_user_groups_e) + _assert_users_user_groups_default(users_user_groups_e, test_config) try: - _clear_users(sdk) - _clear_user_groups(sdk) + _clear_users(sdk, test_config) + _clear_user_groups(sdk, test_config) sdk.catalog_user.put_declarative_users_user_groups(users_user_groups_e) users_user_groups_o = sdk.catalog_user.get_declarative_users_user_groups() assert users_user_groups_e == users_user_groups_o assert users_user_groups_e.to_dict(camel_case=True) == users_user_groups_o.to_dict(camel_case=True) finally: - sdk.catalog_user.put_declarative_users_user_groups(users_user_groups_e) + safe_delete(sdk.catalog_user.put_declarative_users_user_groups, users_user_groups_e) @gd_vcr.use_cassette(str(_fixtures_dir / "load_and_put_declarative_users_user_groups.yaml")) -def test_load_and_put_declarative_users_user_groups(test_config): +def test_load_and_put_declarative_users_user_groups(test_config, snapshot_full_user_context): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) path = _current_dir / "load" users_user_groups_e = sdk.catalog_user.get_declarative_users_user_groups() - _assert_users_user_groups_default(users_user_groups_e) + _assert_users_user_groups_default(users_user_groups_e, test_config) try: - _clear_users(sdk) - _clear_user_groups(sdk) + _clear_users(sdk, test_config) + _clear_user_groups(sdk, test_config) sdk.catalog_user.load_and_put_declarative_users_user_groups(path) users_user_groups_o = sdk.catalog_user.get_declarative_users_user_groups() - _assert_users_user_groups_default(users_user_groups_o) + _assert_users_user_groups_default(users_user_groups_o, test_config) finally: - sdk.catalog_user.put_declarative_users_user_groups(users_user_groups_e) + safe_delete(sdk.catalog_user.put_declarative_users_user_groups, users_user_groups_e) @gd_vcr.use_cassette(str(_fixtures_dir / "test_user_add_user_group.yaml")) @@ -666,7 +652,7 @@ def test_manage_user_permissions(test_config): assert updated_permissions.workspaces[0].permissions == ["MANAGE"] assert updated_permissions.workspaces[0].hierarchy_permissions == ["MANAGE"] finally: - sdk.catalog_user.manage_user_permissions(user_id, origin_permissions) + safe_delete(sdk.catalog_user.manage_user_permissions, user_id, origin_permissions) @pytest.mark.dependency(name="test_get_user_group_permissions") @@ -722,7 +708,7 @@ def test_manage_user_group_permissions(test_config): assert updated_permissions.workspaces[0].permissions == ["VIEW"] assert updated_permissions.workspaces[0].hierarchy_permissions == ["ANALYZE"] finally: - sdk.catalog_user.manage_user_group_permissions(group_id, origin_permissions) + safe_delete(sdk.catalog_user.manage_user_group_permissions, group_id, origin_permissions) @gd_vcr.use_cassette(str(_fixtures_dir / "test_assign_permissions_bulk.yaml")) @@ -753,8 +739,8 @@ def test_assign_permissions_bulk(test_config): assert new_group_permissions.data_sources == new_user_permissions.data_sources finally: - sdk.catalog_user.manage_user_permissions(user_id, origin_permissions_user) - sdk.catalog_user.manage_user_group_permissions(group_id, origin_permissions_user_group) + safe_delete(sdk.catalog_user.manage_user_permissions, user_id, origin_permissions_user) + safe_delete(sdk.catalog_user.manage_user_group_permissions, group_id, origin_permissions_user_group) @gd_vcr.use_cassette(str(_fixtures_dir / "test_revoke_permissions_bulk.yaml")) @@ -775,14 +761,16 @@ def test_revoke_permissions_bulk(test_config): assert len(permissions.workspaces) == 0 assert len(permissions.data_sources) == 0 finally: - sdk.catalog_user.manage_user_permissions(user_id, origin_permissions) + safe_delete(sdk.catalog_user.manage_user_permissions, user_id, origin_permissions) @gd_vcr.use_cassette(str(_fixtures_dir / "test_api_tokens.yaml")) def test_api_tokens(test_config): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) - tokens = sdk.catalog_user.list_user_api_tokens(test_config["demo_user"]) - assert len(tokens) == 0 + initial_tokens = sdk.catalog_user.list_user_api_tokens(test_config["demo_user"]) + initial_count = len(initial_tokens) + if not test_config.get("staging", False): + assert initial_count == 0 token_id = "test_token" try: @@ -795,81 +783,89 @@ def test_api_tokens(test_config): assert token.bearer_token is None tokens = sdk.catalog_user.list_user_api_tokens(test_config["demo_user"]) - assert len(tokens) == 1 - assert tokens[0].id == token_id - assert tokens[0].bearer_token is None + assert len(tokens) == initial_count + 1 + assert any(t.id == token_id for t in tokens) finally: - sdk.catalog_user.delete_user_api_token(test_config["demo_user"], token_id) - tokens = sdk.catalog_user.list_user_api_tokens(test_config["demo_user"]) - assert len(tokens) == 0 + safe_delete(sdk.catalog_user.delete_user_api_token, test_config["demo_user"], token_id) # Help functions -def _assert_users_default(users: list[CatalogDeclarativeUser]): - assert len(users) == 3 - assert [user.id for user in users] == ["admin", "demo", "demo2"] - - -def _assert_user_groups_default(user_groups: list[CatalogDeclarativeUserGroup]): - assert len(user_groups) == 4 - assert set(user_group.id for user_group in user_groups) == { - "adminGroup", - "demoGroup", - "adminQA1Group", - "visitorsGroup", - } - assert set(user_group.name for user_group in user_groups) == {"demo group", "visitors", None} - - -def _assert_users_user_groups_default(users_user_groups: CatalogDeclarativeUsersUserGroups): - _assert_users_default(users_user_groups.users) - _assert_user_groups_default(users_user_groups.user_groups) - - -def _clear_users(sdk: GoodDataSdk) -> None: - """Remove all users except admin, demo, and demo2. - - WARNING: This function intentionally preserves demo2 because: - 1. Deleting demo2 cascade-deletes data source permissions referencing it - 2. Deleting demo2 cascade-deletes workspace permissions referencing it - 3. These cascade deletes break subsequent permission tests (test_get_user_permissions, etc.) - - If you need to delete demo2, ensure you call _restore_demo2_permissions() afterward - to restore the expected permission state. +def _assert_users_default(users: list[CatalogDeclarativeUser], test_config: dict | None = None): + if test_config and test_config.get("staging", False): + # On staging with DEX, user IDs are dynamic (e.g. python.demo.). + # Check that expected users exist by config values rather than hardcoded IDs. + user_ids = {user.id for user in users} + assert len(users) >= 2, f"Expected at least 2 users, got {len(users)}: {user_ids}" + assert "admin" in user_ids, f"'admin' user missing, got: {user_ids}" + assert test_config["test_user"] in user_ids, f"test_user '{test_config['test_user']}' missing, got: {user_ids}" + else: + assert len(users) == 3 + assert [user.id for user in users] == ["admin", "demo", "demo2"] + + +def _assert_user_groups_default(user_groups: list[CatalogDeclarativeUserGroup], test_config: dict | None = None): + if test_config and test_config.get("staging", False): + group_ids = {ug.id for ug in user_groups} + assert len(user_groups) >= 4, f"Expected at least 4 user groups, got {len(user_groups)}: {group_ids}" + for expected in ["adminGroup", "demoGroup", "adminQA1Group", "visitorsGroup"]: + assert expected in group_ids, f"'{expected}' group missing, got: {group_ids}" + else: + assert len(user_groups) == 4 + assert set(user_group.id for user_group in user_groups) == { + "adminGroup", + "demoGroup", + "adminQA1Group", + "visitorsGroup", + } + assert set(user_group.name for user_group in user_groups) == {"demo group", "visitors", None} + + +def _assert_users_user_groups_default( + users_user_groups: CatalogDeclarativeUsersUserGroups, test_config: dict | None = None +): + _assert_users_default(users_user_groups.users, test_config) + _assert_user_groups_default(users_user_groups.user_groups, test_config) + + +def _clear_users(sdk: GoodDataSdk, test_config: dict) -> None: + """Remove all users except admin and those referenced by test_config. + + WARNING: This function intentionally preserves demo_user and test_user because: + 1. Deleting them cascade-deletes data source permissions referencing them + 2. Deleting them cascade-deletes workspace permissions referencing them + 3. These cascade deletes break subsequent permission tests Protected users: - admin: System administrator - - demo: Default demo user - - demo2: Test user with permission references (test_config["test_user"]) + - test_config["demo_user"]: Default demo user + - test_config["test_user"]: Test user with permission references """ + protected = {"admin", test_config["demo_user"], test_config["test_user"]} users = sdk.catalog_user.list_users() for user in users: - if user.id not in ["admin", "demo", "demo2"]: + if user.id not in protected: sdk.catalog_user.delete_user(user.id) -def _clear_user_groups(sdk: GoodDataSdk) -> None: - """Remove all user groups except adminGroup and demoGroup. - - WARNING: This function intentionally preserves demoGroup because: - 1. Deleting demoGroup cascade-deletes data source permissions referencing it - 2. Deleting demoGroup cascade-deletes workspace permissions referencing it - 3. These cascade deletes break subsequent permission tests (test_get_user_group_permissions, etc.) +def _clear_user_groups(sdk: GoodDataSdk, test_config: dict) -> None: + """Remove all user groups except those referenced by test_config. - If you need to delete demoGroup, ensure you call _restore_demo2_permissions() afterward - to restore the expected permission state. + WARNING: This function intentionally preserves admin and test user groups because: + 1. Deleting them cascade-deletes data source permissions referencing them + 2. Deleting them cascade-deletes workspace permissions referencing them + 3. These cascade deletes break subsequent permission tests Protected user groups: - - adminGroup: Admin group - - demoGroup: Test user group with permission references (test_config["test_user_group"]) + - test_config["admin_user_group"]: Admin group + - test_config["test_user_group"]: Test user group with permission references """ sdk.catalog_user.put_declarative_user_groups( CatalogDeclarativeUserGroups( user_groups=[ - CatalogDeclarativeUserGroup(id="adminGroup"), - CatalogDeclarativeUserGroup(id="demoGroup"), + CatalogDeclarativeUserGroup(id=test_config["admin_user_group"]), + CatalogDeclarativeUserGroup(id=test_config["test_user_group"]), ] ) ) diff --git a/packages/gooddata-sdk/tests/catalog/test_catalog_workspace.py b/packages/gooddata-sdk/tests/catalog/test_catalog_workspace.py index d0eff5401..b5323de38 100644 --- a/packages/gooddata-sdk/tests/catalog/test_catalog_workspace.py +++ b/packages/gooddata-sdk/tests/catalog/test_catalog_workspace.py @@ -39,6 +39,8 @@ from tests.catalog.utils import _refresh_workspaces +from .conftest import safe_delete + gd_vcr = get_vcr() _current_dir = Path(__file__).parent.absolute() @@ -108,7 +110,7 @@ def test_load_and_put_declarative_workspaces(test_config): assert deep_eq(workspaces_e, workspaces_o) assert deep_eq(workspaces_e.to_dict(camel_case=True), workspaces_o.to_dict(camel_case=True)) finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "demo_store_declarative_workspaces.yaml")) @@ -138,7 +140,7 @@ def test_put_declarative_workspaces(test_config): assert workspaces_e == workspaces_o assert workspaces_e.to_dict(camel_case=True) == workspaces_o.to_dict(camel_case=True) finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "demo_get_declarative_workspaces_snake_case.yaml")) @@ -180,9 +182,12 @@ def test_declarative_workspaces(test_config): workspaces_o = sdk.catalog_workspace.get_declarative_workspaces(exclude=["ACTIVITY_INFO"]) - assert len(workspaces_o.workspaces) == 3 - assert len(workspaces_o.workspace_data_filters) == 2 - assert [workspace.id for workspace in workspaces_o.workspaces] == ["demo", "demo_west", "demo_west_california"] + assert len(workspaces_o.workspaces) >= 3 + assert len(workspaces_o.workspace_data_filters) >= 2 + workspace_ids = [workspace.id for workspace in workspaces_o.workspaces] + assert "demo" in workspace_ids + assert "demo_west" in workspace_ids + assert "demo_west_california" in workspace_ids assert workspaces_o.to_dict(camel_case=True) == layout_api.get_workspaces_layout(exclude=["ACTIVITY_INFO"]).to_dict( camel_case=True ) @@ -197,7 +202,7 @@ def test_update_workspace_invalid(test_config): workspace = sdk.catalog_workspace.get_workspace(test_config["workspace_with_parent"]) workspaces = sdk.catalog_workspace.list_workspaces() - assert len(workspaces) == 3 + initial_count = len(workspaces) assert workspace.id in [w.id for w in workspaces] assert workspace_new_parent not in [w.id for w in workspaces] assert workspace.parent_id is not None @@ -208,7 +213,7 @@ def test_update_workspace_invalid(test_config): # Update workspace parent is not allowed. workspaces = sdk.catalog_workspace.list_workspaces() workspace_o = sdk.catalog_workspace.get_workspace(workspace.id) - assert len(workspaces) == 3 + assert len(workspaces) == initial_count assert workspace == workspace_o @@ -224,7 +229,7 @@ def test_update_workspace_valid(test_config): new_workspace = CatalogWorkspace(workspace.id, workspace_new_name, workspace.parent_id) workspaces = sdk.catalog_workspace.list_workspaces() - assert len(workspaces) == 3 + initial_count = len(workspaces) assert workspace.id in [w.id for w in workspaces] assert workspace.parent_id is not None @@ -233,10 +238,10 @@ def test_update_workspace_valid(test_config): sdk.catalog_workspace.create_or_update(new_workspace) workspaces = sdk.catalog_workspace.list_workspaces() workspace_o = sdk.catalog_workspace.get_workspace(workspace.id) - assert len(workspaces) == 3 + assert len(workspaces) == initial_count assert workspace_o == new_workspace finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "demo_delete_workspace.yaml")) @@ -245,16 +250,16 @@ def test_delete_workspace(test_config): workspace_id = "demo_west_california" workspaces = sdk.catalog_workspace.list_workspaces() - assert len(workspaces) == 3 + initial_count = len(workspaces) assert workspace_id in [w.id for w in workspaces] try: sdk.catalog_workspace.delete_workspace(workspace_id) workspaces = sdk.catalog_workspace.list_workspaces() - assert len(workspaces) == 2 + assert len(workspaces) == initial_count - 1 assert workspace_id not in [w.id for w in workspaces] finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "demo_delete_non_existing_workspace.yaml")) @@ -263,7 +268,7 @@ def test_delete_non_existing_workspace(test_config): workspace_id = "non_existing_workspace" workspaces = sdk.catalog_workspace.list_workspaces() - assert len(workspaces) == 3 + initial_count = len(workspaces) assert workspace_id not in [w.id for w in workspaces] try: @@ -271,21 +276,21 @@ def test_delete_non_existing_workspace(test_config): except ValueError: # Trying to delete not existing workspace should not be executed and an exception should be raised. workspaces = sdk.catalog_workspace.list_workspaces() - assert len(workspaces) == 3 + assert len(workspaces) == initial_count @gd_vcr.use_cassette(str(_fixtures_dir / "demo_delete_parent_workspace.yaml")) def test_delete_parent_workspace(test_config): sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) workspaces = sdk.catalog_workspace.list_workspaces() - assert len(workspaces) == 3 + initial_count = len(workspaces) try: sdk.catalog_workspace.delete_workspace(test_config["workspace"]) except ValueError: # Delete of workspace, which has children should not be executed and an exception should be raised. workspaces = sdk.catalog_workspace.list_workspaces() - assert len(workspaces) == 3 + assert len(workspaces) == initial_count @gd_vcr.use_cassette(str(_fixtures_dir / "demo_create_workspace.yaml")) @@ -298,17 +303,17 @@ def test_create_workspace(test_config): workspace = CatalogWorkspace(workspace_id, workspace_name, workspace_parent) workspaces = sdk.catalog_workspace.list_workspaces() - assert len(workspaces) == 3 + initial_count = len(workspaces) assert workspace_id not in [w.id for w in workspaces] try: sdk.catalog_workspace.create_or_update(workspace) workspaces = sdk.catalog_workspace.list_workspaces() workspace_o = sdk.catalog_workspace.get_workspace(workspace_id) - assert len(workspaces) == 4 + assert len(workspaces) == initial_count + 1 assert workspace_o == workspace finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "demo_get_workspace.yaml")) @@ -336,19 +341,19 @@ def test_workspace_list(test_config): parents = [None, "demo", "demo_west"] workspaces = sdk.catalog_workspace.list_workspaces() - assert len(workspaces) == 3 + assert len(workspaces) >= 3 workspaces_id = [w.id for w in workspaces] - workspaces_id.sort() - assert ids == workspaces_id + for expected_id in ids: + assert expected_id in workspaces_id workspaces_name = [w.name for w in workspaces] - workspaces_name.sort() - assert names == workspaces_name + for expected_name in names: + assert expected_name in workspaces_name workspaces_parent = {w.id: w.parent_id for w in workspaces} - workspaces_parent_l = [workspaces_parent[workspace_id] for workspace_id in workspaces_id] - assert parents == workspaces_parent_l + for ws_id, expected_parent in zip(ids, parents): + assert workspaces_parent[ws_id] == expected_parent @gd_vcr.use_cassette(str(_fixtures_dir / "demo_get_declarative_workspace_data_filters.yaml")) @@ -360,11 +365,10 @@ def test_get_declarative_workspace_data_filters(test_config): declarative_workspace_data_filters = sdk.catalog_workspace.get_declarative_workspace_data_filters() workspace_data_filters = declarative_workspace_data_filters.workspace_data_filters - assert len(workspace_data_filters) == 2 - assert set(workspace_data_filter.id for workspace_data_filter in workspace_data_filters) == { - "wdf__region", - "wdf__state", - } + assert len(workspace_data_filters) >= 2 + wdf_ids = {workspace_data_filter.id for workspace_data_filter in workspace_data_filters} + assert "wdf__region" in wdf_ids + assert "wdf__state" in wdf_ids assert declarative_workspace_data_filters.to_dict( camel_case=True @@ -401,7 +405,7 @@ def test_load_and_put_declarative_workspace_data_filters(test_config): assert workspace_data_filters_e == workspace_data_filters_o assert workspace_data_filters_e.to_dict(camel_case=True) == workspace_data_filters_o.to_dict(camel_case=True) finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "demo_put_declarative_workspace_data_filters.yaml")) @@ -419,7 +423,7 @@ def test_put_declarative_workspace_data_filters(test_config): camel_case=True ) == declarative_workspace_data_filters_o.to_dict(camel_case=True) finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "user_data_filters_life_cycle.yaml")) @@ -457,7 +461,7 @@ def test_user_data_filters_life_cycle(test_config): _are_user_data_filters_empty(sdk, test_config["workspace"]) finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "user_data_filters_for_user_group.yaml")) @@ -495,7 +499,7 @@ def test_user_data_filters_for_user_group(test_config): _are_user_data_filters_empty(sdk, test_config["workspace"]) finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "demo_get_declarative_user_data_filters.yaml")) @@ -545,7 +549,7 @@ def test_load_and_put_declarative_user_data_filters(test_config): assert user_data_filters_e == user_data_filters_o assert user_data_filters_e.to_dict(camel_case=True) == user_data_filters_o.to_dict(camel_case=True) finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "demo_put_declarative_user_data_filters.yaml")) @@ -558,7 +562,7 @@ def test_put_declarative_user_data_filters(test_config): id="user_data_filter", title="youwillnotsee", maql="FALSE", - user=CatalogUserIdentifier(id="demo", type="user"), + user=CatalogUserIdentifier(id=test_config["demo_user"], type="user"), ) ] ) @@ -570,7 +574,7 @@ def test_put_declarative_user_data_filters(test_config): assert user_data_filters_e == user_data_filters_o assert user_data_filters_e.to_dict() == user_data_filters_o.to_dict() finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "demo_get_declarative_workspace.yaml")) @@ -618,7 +622,7 @@ def test_put_declarative_workspace(test_config): assert deep_eq(workspace_e, workspace_o) assert deep_eq(workspace_e.to_dict(), workspace_o.to_dict()) finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "demo_store_declarative_workspace.yaml")) @@ -661,7 +665,7 @@ def test_load_and_put_declarative_workspace(test_config): assert deep_eq(workspace_e, workspace_o) assert deep_eq(workspace_e.to_dict(camel_case=True), workspace_o.to_dict(camel_case=True)) finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) def create_second_data_source(sdk: GoodDataSdk, ds_id: str) -> None: @@ -722,8 +726,8 @@ def test_clone_workspace(test_config): source_ws_id, data_source_mapping=data_source_mapping, upper_case=True, overwrite_existing=True ) finally: - _refresh_workspaces(sdk) - delete_data_source(sdk, test_config["data_source2"]) + safe_delete(_refresh_workspaces, sdk) + safe_delete(delete_data_source, sdk, test_config["data_source2"]) def _translate_batch(to_translate: list[str]) -> list[str]: @@ -771,7 +775,7 @@ def test_translate_workspace(test_config): layout_root_path=path_to_layouts, ) finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "create_workspace_setting.yaml")) @@ -787,8 +791,7 @@ def test_create_workspace_setting(test_config): setting_o = sdk.catalog_workspace.get_workspace_setting(test_config["workspace"], setting_id) assert setting_o == setting finally: - sdk.catalog_workspace.delete_workspace_setting(test_config["workspace"], setting_id) - assert len(sdk.catalog_workspace.list_workspace_settings(test_config["workspace"])) == 0 + safe_delete(sdk.catalog_workspace.delete_workspace_setting, test_config["workspace"], setting_id) @gd_vcr.use_cassette(str(_fixtures_dir / "list_workspace_settings.yaml")) @@ -813,9 +816,8 @@ def test_list_workspace_settings(test_config): assert new_setting_1 in workspace_settings assert new_setting_2 in workspace_settings finally: - sdk.catalog_workspace.delete_workspace_setting(test_config["workspace"], setting_id_1) - sdk.catalog_workspace.delete_workspace_setting(test_config["workspace"], setting_id_2) - assert len(sdk.catalog_workspace.list_workspace_settings(test_config["workspace"])) == 0 + safe_delete(sdk.catalog_workspace.delete_workspace_setting, test_config["workspace"], setting_id_1) + safe_delete(sdk.catalog_workspace.delete_workspace_setting, test_config["workspace"], setting_id_2) @gd_vcr.use_cassette(str(_fixtures_dir / "delete_workspace_setting.yaml")) @@ -834,8 +836,7 @@ def test_delete_workspace_setting(test_config): settings = sdk.catalog_workspace.list_workspace_settings(test_config["workspace"]) assert len(settings) == 0 finally: - sdk.catalog_workspace.delete_workspace_setting(test_config["workspace"], setting_id) - assert len(sdk.catalog_workspace.list_workspace_settings(test_config["workspace"])) == 0 + safe_delete(sdk.catalog_workspace.delete_workspace_setting, test_config["workspace"], setting_id) @gd_vcr.use_cassette(str(_fixtures_dir / "update_workspace_setting.yaml")) @@ -856,8 +857,7 @@ def test_update_workspace_setting(test_config): setting_o = sdk.catalog_workspace.get_workspace_setting(test_config["workspace"], setting_id) assert setting_o == setting finally: - sdk.catalog_workspace.delete_workspace_setting(test_config["workspace"], setting_id) - assert len(sdk.catalog_workspace.list_workspace_settings(test_config["workspace"])) == 0 + safe_delete(sdk.catalog_workspace.delete_workspace_setting, test_config["workspace"], setting_id) @gd_vcr.use_cassette(str(_fixtures_dir / "get_metadata_localization.yaml")) @@ -968,10 +968,8 @@ def test_layout_automations(test_config): automations_o = sdk.catalog_workspace.get_declarative_automations(workspace_id) assert automations_expected == automations_o finally: - sdk.catalog_workspace.put_declarative_automations(workspace_id, []) - automations = sdk.catalog_workspace.get_declarative_automations(workspace_id) - assert len(automations) == 0 - sdk.catalog_organization.put_declarative_notification_channels([]) + safe_delete(sdk.catalog_workspace.put_declarative_automations, workspace_id, []) + safe_delete(sdk.catalog_organization.put_declarative_notification_channels, []) @gd_vcr.use_cassette(str(_fixtures_dir / "layout_filter_views.yaml")) @@ -1025,7 +1023,7 @@ def test_layout_filter_views(test_config): is_default=True, description="Filter View", tags=["tag1", "tag2"], - user=CatalogUserIdentifier(id="demo", type="user"), + user=CatalogUserIdentifier(id=test_config["demo_user"], type="user"), analytical_dashboard=CatalogDeclarativeAnalyticalDashboardIdentifier( id="campaign", type="analyticalDashboard" ), @@ -1036,6 +1034,4 @@ def test_layout_filter_views(test_config): filter_views_o = sdk.catalog_workspace.get_declarative_filter_views(workspace_id) assert filter_views_expected == filter_views_o finally: - sdk.catalog_workspace.put_declarative_filter_views(workspace_id, []) - filter_views = sdk.catalog_workspace.get_declarative_filter_views(workspace_id) - assert len(filter_views) == 0 + safe_delete(sdk.catalog_workspace.put_declarative_filter_views, workspace_id, []) diff --git a/packages/gooddata-sdk/tests/catalog/test_catalog_workspace_content.py b/packages/gooddata-sdk/tests/catalog/test_catalog_workspace_content.py index a3dbeec6c..312088e9f 100644 --- a/packages/gooddata-sdk/tests/catalog/test_catalog_workspace_content.py +++ b/packages/gooddata-sdk/tests/catalog/test_catalog_workspace_content.py @@ -29,6 +29,7 @@ from tests_support.compare_utils import deep_eq from tests_support.vcrpy_utils import get_vcr +from tests.catalog.conftest import safe_delete from tests.catalog.utils import _refresh_workspaces gd_vcr = get_vcr() @@ -114,7 +115,7 @@ def test_load_and_put_declarative_ldm(test_config): assert deep_eq(ldm_e, ldm_o) assert deep_eq(ldm_e.to_api().to_dict(), ldm_o.to_api().to_dict()) finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "demo_load_and_modify_ds_and_put_declarative_ldm.yaml")) @@ -149,7 +150,7 @@ def test_load_and_modify_ds_and_put_declarative_ldm(test_config): ds_o = list(set([d.data_source_table_id.data_source_id for d in ldm_o.ldm.datasets if d.data_source_table_id])) assert ds_o == [test_config["data_source"]] finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "demo_load_ldm_and_modify_tables_columns_case.yaml")) @@ -218,7 +219,7 @@ def test_load_and_put_declarative_analytics_model(test_config): assert deep_eq(analytics_model_e, analytics_model_o) assert deep_eq(analytics_model_e.to_api().to_dict(), analytics_model_o.to_api().to_dict()) finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "demo_put_declarative_analytics_model.yaml")) @@ -235,7 +236,7 @@ def test_put_declarative_analytics_model(test_config): assert deep_eq(analytics_model_e, analytics_model_o) assert deep_eq(analytics_model_e.to_api().to_dict(), analytics_model_o.to_api().to_dict()) finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "demo_put_declarative_ldm.yaml")) @@ -254,7 +255,7 @@ def test_put_declarative_ldm(test_config): assert deep_eq(ldm_e, ldm_o) assert deep_eq(ldm_e.to_api().to_dict(), ldm_o.to_api().to_dict()) finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "demo_get_declarative_analytics_model.yaml")) @@ -477,7 +478,7 @@ def test_explicit_workspace_data_filter(test_config): ) assert len(dataset.workspace_data_filter_references) == 1 finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) @gd_vcr.use_cassette(str(_fixtures_dir / "export_definition_analytics_layout.yaml")) @@ -500,4 +501,4 @@ def test_export_definition_analytics_layout(test_config): ) assert deep_eq(analytics_o.analytics.export_definitions, analytics_e.analytics.export_definitions) finally: - _refresh_workspaces(sdk) + safe_delete(_refresh_workspaces, sdk) diff --git a/packages/gooddata-sdk/tests/conftest.py b/packages/gooddata-sdk/tests/conftest.py index d030cd203..7ebfc39ed 100644 --- a/packages/gooddata-sdk/tests/conftest.py +++ b/packages/gooddata-sdk/tests/conftest.py @@ -1,4 +1,5 @@ # (C) 2022 GoodData Corporation +import logging import os from pathlib import Path from unittest import mock @@ -6,6 +7,33 @@ import pytest import yaml +logger = logging.getLogger(__name__) + +_current_dir = Path(__file__).parent.absolute() +_credentials_path = _current_dir / "catalog" / "load" / "data_source_credentials" / "data_sources_credentials.yaml" + +# --------------------------------------------------------------------------- +# Staging data source connection overrides +# Local Docker: jdbc:postgresql://postgres:5432/tiger, user=postgres +# Staging k8s: jdbc:postgresql://cnpg-cluster-pooler:5432/tiger, user=tiger +# --------------------------------------------------------------------------- +_LOCAL_DS_URL = "jdbc:postgresql://postgres:5432/tiger?sslmode=prefer" +_LOCAL_DS_USERNAME = "postgres" +_STAGING_DS_URL = "jdbc:postgresql://cnpg-cluster-pooler:5432/tiger?sslmode=prefer" +_STAGING_DS_USERNAME = "tiger" + +# --------------------------------------------------------------------------- +# Failure tracker — used by session snapshot to decide whether to restore +# --------------------------------------------------------------------------- +_session_has_failures = False + + +def pytest_runtest_makereport(item, call): + """Track whether any test has failed during the session.""" + global _session_has_failures + if call.excinfo is not None: + _session_has_failures = True + def pytest_addoption(parser): default_config_path = Path(__file__).parent / "gd_test_config.yaml" @@ -23,6 +51,12 @@ def test_config(request): with open(config_path) as f: config = yaml.safe_load(f) + # Override token from TOKEN env var (set by make test-staging TOKEN=...) + if config.get("staging", False): + env_token = os.environ.get("TOKEN") + if env_token: + config["token"] = env_token + return config @@ -33,3 +67,361 @@ def setenvvar(monkeypatch): for k, v in envvars.items(): monkeypatch.setenv(k, v) yield + + +# --------------------------------------------------------------------------- +# Staging preflight — validates connectivity and required resources +# --------------------------------------------------------------------------- + + +@pytest.fixture(scope="session", autouse=True) +def staging_preflight(test_config): + """When staging: true, verify connectivity and that required resources exist. + + Calls pytest.exit() on failure so the session stops immediately with a clear + diagnostic instead of cascading into hundreds of confusing errors. + """ + if not test_config.get("staging", False): + yield + return + + from gooddata_sdk import GoodDataSdk + + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + + # 1. Connectivity check + try: + if not sdk.support.is_available: + pytest.exit("PREFLIGHT FAILED: server responded but is_available returned False") + except Exception as e: + pytest.exit(f"PREFLIGHT FAILED: cannot reach {test_config['host']} — {type(e).__name__}: {e}") + + # 2. Required resources check + missing = [] + user_ids = set() + + # Workspaces + try: + workspace_ids = {ws.id for ws in sdk.catalog_workspace.list_workspaces()} + for ws_id in [test_config["workspace"], test_config["workspace_with_parent"]]: + if ws_id not in workspace_ids: + missing.append(f"workspace '{ws_id}'") # noqa: PERF401 + except Exception as e: + missing.append(f"workspaces (list failed: {e})") + + # Data source + try: + ds_ids = {ds.id for ds in sdk.catalog_data_source.list_data_sources()} + if test_config["data_source"] not in ds_ids: + missing.append(f"data_source '{test_config['data_source']}'") + except Exception as e: + missing.append(f"data_sources (list failed: {e})") + + # Users (reuse list from auto-discovery if available) + if user_ids: + for uid in [test_config["demo_user"], test_config["test_user"]]: + if uid not in user_ids: + missing.append(f"user '{uid}'") # noqa: PERF401 + else: + try: + user_ids = {u.id for u in sdk.catalog_user.list_users()} + for uid in [test_config["demo_user"], test_config["test_user"]]: + if uid not in user_ids: + missing.append(f"user '{uid}'") # noqa: PERF401 + except Exception as e: + missing.append(f"users (list failed: {e})") + + # User groups + try: + group_ids = {g.id for g in sdk.catalog_user.list_user_groups()} + for gid in [test_config["admin_user_group"], test_config["test_user_group"]]: + if gid not in group_ids: + missing.append(f"user_group '{gid}'") # noqa: PERF401 + except Exception as e: + missing.append(f"user_groups (list failed: {e})") + + if missing: + report = "\n - ".join(missing) + pytest.exit(f"PREFLIGHT FAILED: required resources missing:\n - {report}") + + logger.info("Staging preflight passed — all resources present") + yield + + +# --------------------------------------------------------------------------- +# Staging fixture rewriting — patch JDBC URLs in test layout files +# --------------------------------------------------------------------------- + +# Files that contain PostgreSQL JDBC connection strings and need patching +_STAGING_PATCH_FILES = [ + _current_dir + / "catalog" + / "load" + / "gooddata_layouts" + / "default" + / "data_sources" + / "demo-test-ds" + / "demo-test-ds.yaml", + _current_dir + / "catalog" + / "load_with_locale" + / "gooddata_layouts" + / "default" + / "data_sources" + / "demo-test-ds" + / "demo-test-ds.yaml", + _current_dir / "catalog" / "expected" / "declarative_data_sources.json", +] + + +_STAGING_BACKUP_SUFFIX = ".staging-backup" + + +def _backup_path(file_path: Path) -> Path: + return file_path.with_suffix(file_path.suffix + _STAGING_BACKUP_SUFFIX) + + +def _restore_from_backup(file_path: Path) -> None: + """Restore a file from its backup (left over from a previous interrupted run).""" + backup = _backup_path(file_path) + if backup.exists(): + file_path.write_text(backup.read_text()) + backup.unlink() + logger.info(f"Restored from stale backup: {file_path}") + + +def _patch_file_for_staging(file_path: Path) -> bool: + """Replace local JDBC URL/username with staging values. Writes backup to disk for crash safety.""" + if not file_path.exists(): + return False + original = file_path.read_text() + patched = original.replace(_LOCAL_DS_URL, _STAGING_DS_URL).replace( + f"username: {_LOCAL_DS_USERNAME}", f"username: {_STAGING_DS_USERNAME}" + ) + # Also handle JSON format (username as a JSON field) + patched = patched.replace(f'"username": "{_LOCAL_DS_USERNAME}"', f'"username": "{_STAGING_DS_USERNAME}"') + if patched != original: + _backup_path(file_path).write_text(original) + file_path.write_text(patched) + logger.info(f"Patched for staging: {file_path}") + return True + return False + + +def _restore_patched_file(file_path: Path) -> None: + """Restore a file from its backup and remove the backup.""" + backup = _backup_path(file_path) + if backup.exists(): + file_path.write_text(backup.read_text()) + backup.unlink() + logger.info(f"Restored original: {file_path}") + + +def _find_gooddata_layouts_dirs() -> list[Path]: + """Find all gooddata_layouts directories under the test tree.""" + catalog_dir = _current_dir / "catalog" + return sorted(catalog_dir.rglob("gooddata_layouts")) + + +def _create_org_layout_copies(org_id: str) -> list[Path]: + """Copy default/ -> / in gooddata_layouts dirs that have 'default'. + + Always removes existing directories first to avoid stale/incomplete + copies from previous runs. + + Uses shutil.copytree for cross-platform reliability (Windows CI, Docker, worktrees). + Also safe for store/translate tests that write into the org directory. + + Returns list of created directories for cleanup. + """ + import shutil + + created: list[Path] = [] + for layouts_dir in _find_gooddata_layouts_dirs(): + default_dir = layouts_dir / "default" + org_dir = layouts_dir / org_id + if default_dir.is_dir(): + if org_dir.exists(): + shutil.rmtree(org_dir) + logger.info(f"Removed stale layout dir: {org_dir}") + shutil.copytree(default_dir, org_dir) + logger.info(f"Copied layout dir: {default_dir} -> {org_dir}") + created.append(org_dir) + return created + + +@pytest.fixture(scope="session", autouse=True) +def staging_patch_fixtures(test_config, staging_preflight): + """When staging: true, patch test fixtures for the staging environment. + + - Rewrites JDBC connection strings in fixture files + - Copies gooddata_layouts/default/ -> gooddata_layouts// so the SDK + can find layout files (it uses the org ID as the directory name) + + Uses on-disk backups so that interrupted runs self-heal on the next start. + """ + # Always restore leftover backups from a previous interrupted run + for fpath in _STAGING_PATCH_FILES: + _restore_from_backup(fpath) + + if not test_config.get("staging", False): + yield + return + + import shutil + + # 1. Patch JDBC connection strings in fixture files + patched_files = [fpath for fpath in _STAGING_PATCH_FILES if _patch_file_for_staging(fpath)] + logger.info(f"Patched {len(patched_files)} fixture files for staging") + + # 2. Copy layout dirs (gooddata_layouts/default -> gooddata_layouts/) + from gooddata_sdk import GoodDataSdk + + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + org_id = sdk.catalog_organization.get_organization().id + copied_dirs = _create_org_layout_copies(org_id) + logger.info(f"Created {len(copied_dirs)} layout copies for org '{org_id}'") + + yield + + # Restore patched files from backups + for fpath in patched_files: + _restore_patched_file(fpath) + + # Remove copied directories + for d in copied_dirs: + if d.is_dir(): + shutil.rmtree(d) + logger.info(f"Removed layout copy: {d}") + + +# --------------------------------------------------------------------------- +# Session-level snapshot/restore — safety net for staging +# --------------------------------------------------------------------------- + + +@pytest.fixture(scope="session", autouse=True) +def staging_session_snapshot(test_config, staging_preflight): + """When staging: true, capture full environment state before tests run. + + On teardown, if any test failed, restore everything to the captured state. + This is the last line of defense — per-test snapshot fixtures are the first. + """ + if not test_config.get("staging", False): + yield + return + + from gooddata_sdk import GoodDataSdk + + sdk = GoodDataSdk.create(host_=test_config["host"], token_=test_config["token"]) + + # --- Capture --- + snapshot = {} + logger.info("Capturing session snapshot...") + + try: + snapshot["users_groups"] = sdk.catalog_user.get_declarative_users_user_groups() + except Exception as e: + logger.error(f"Snapshot capture failed [users_groups]: {e}") + + try: + snapshot["data_sources"] = sdk.catalog_data_source.get_declarative_data_sources() + except Exception as e: + logger.error(f"Snapshot capture failed [data_sources]: {e}") + + try: + snapshot["workspaces"] = sdk.catalog_workspace.get_declarative_workspaces(exclude=["ACTIVITY_INFO"]) + except Exception as e: + logger.error(f"Snapshot capture failed [workspaces]: {e}") + + try: + snapshot["workspace_data_filters"] = sdk.catalog_workspace.get_declarative_workspace_data_filters() + except Exception as e: + logger.error(f"Snapshot capture failed [workspace_data_filters]: {e}") + + try: + snapshot["org_permissions"] = sdk.catalog_permission.get_declarative_organization_permissions() + except Exception as e: + logger.error(f"Snapshot capture failed [org_permissions]: {e}") + + try: + snapshot["notification_channels"] = sdk.catalog_organization.get_declarative_notification_channels() + except Exception as e: + logger.error(f"Snapshot capture failed [notification_channels]: {e}") + + # Per-workspace permissions + ws_permissions = {} + try: + for ws in sdk.catalog_workspace.list_workspaces(): + try: + ws_permissions[ws.id] = sdk.catalog_permission.get_declarative_permissions(ws.id) + except Exception as e: # noqa: PERF203 + logger.warning(f"Could not capture permissions for workspace {ws.id}: {e}") + except Exception as e: + logger.error(f"Snapshot capture failed [workspace list for permissions]: {e}") + snapshot["ws_permissions"] = ws_permissions + + logger.info("Session snapshot captured") + + # --- Tests run --- + yield snapshot + + # --- Restore (only if failures) --- + if not _session_has_failures: + logger.info("All tests passed — skipping session restore") + return + + logger.warning("Test failures detected — restoring session snapshot...") + + # Restore order matters: users/groups → data sources → workspaces → + # workspace data filters → org permissions → notification channels → + # per-workspace permissions + + if "users_groups" in snapshot: + try: + sdk.catalog_user.put_declarative_users_user_groups(snapshot["users_groups"]) + logger.info("Restored [users_groups]") + except Exception as e: + logger.error(f"RESTORE FAILED [users_groups]: {e}") + + if "data_sources" in snapshot: + try: + sdk.catalog_data_source.put_declarative_data_sources(snapshot["data_sources"], _credentials_path) + logger.info("Restored [data_sources]") + except Exception as e: + logger.error(f"RESTORE FAILED [data_sources]: {e}") + + if "workspaces" in snapshot: + try: + sdk.catalog_workspace.put_declarative_workspaces(snapshot["workspaces"]) + logger.info("Restored [workspaces]") + except Exception as e: + logger.error(f"RESTORE FAILED [workspaces]: {e}") + + if "workspace_data_filters" in snapshot: + try: + sdk.catalog_workspace.put_declarative_workspace_data_filters(snapshot["workspace_data_filters"]) + logger.info("Restored [workspace_data_filters]") + except Exception as e: + logger.error(f"RESTORE FAILED [workspace_data_filters]: {e}") + + if "org_permissions" in snapshot: + try: + sdk.catalog_permission.put_declarative_organization_permissions(snapshot["org_permissions"]) + logger.info("Restored [org_permissions]") + except Exception as e: + logger.error(f"RESTORE FAILED [org_permissions]: {e}") + + if "notification_channels" in snapshot: + try: + sdk.catalog_organization.put_declarative_notification_channels(snapshot["notification_channels"]) + logger.info("Restored [notification_channels]") + except Exception as e: + logger.error(f"RESTORE FAILED [notification_channels]: {e}") + + for ws_id, perms in snapshot.get("ws_permissions", {}).items(): + try: + sdk.catalog_permission.put_declarative_permissions(ws_id, perms) + logger.info(f"Restored [permissions for {ws_id}]") + except Exception as e: # noqa: PERF203 + logger.warning(f"RESTORE FAILED [permissions for {ws_id}]: {e}") diff --git a/packages/gooddata-sdk/tests/export/fixtures/test_export_csv.yaml b/packages/gooddata-sdk/tests/export/fixtures/test_export_csv.yaml index 3fbe30cf1..90c832dc3 100644 --- a/packages/gooddata-sdk/tests/export/fixtures/test_export_csv.yaml +++ b/packages/gooddata-sdk/tests/export/fixtures/test_export_csv.yaml @@ -84,7 +84,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - c6d93c83-ed12-4860-a01b-7f8bcfd633e5 + - f7197d4a-6991-4b91-97e6-a294969aa2a2 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -132,14 +132,14 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: 9151cbd44692e856f1a90661f20f72d0d42ba5be:c3bd249f57588be348ec7c86a6a67989103c703c7fb70a57782d54a8c03627d8 + executionResult: fc69bb38862598a30f9c61e7c1a2d126be0f15f6:634294be099a561c44cbbfb386a17d374825dd4c8b7272798c159a665124c3b1 - request: method: POST uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular body: fileName: test_csv format: CSV - executionResult: 9151cbd44692e856f1a90661f20f72d0d42ba5be:c3bd249f57588be348ec7c86a6a67989103c703c7fb70a57782d54a8c03627d8 + executionResult: fc69bb38862598a30f9c61e7c1a2d126be0f15f6:634294be099a561c44cbbfb386a17d374825dd4c8b7272798c159a665124c3b1 customOverride: labels: region: @@ -191,10 +191,10 @@ interactions: - '0' body: string: - exportResult: e9604de6a155ca02a481ed7aa53328605752a756 + exportResult: aaba03c51ebb7c402b680bd3ecc2cbfc166a2197 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/e9604de6a155ca02a481ed7aa53328605752a756 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/aaba03c51ebb7c402b680bd3ecc2cbfc166a2197 body: null headers: Accept: @@ -235,7 +235,7 @@ interactions: string: '' - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/e9604de6a155ca02a481ed7aa53328605752a756 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/aaba03c51ebb7c402b680bd3ecc2cbfc166a2197 body: null headers: Accept: @@ -276,7 +276,7 @@ interactions: string: '' - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/e9604de6a155ca02a481ed7aa53328605752a756 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/aaba03c51ebb7c402b680bd3ecc2cbfc166a2197 body: null headers: Accept: diff --git a/packages/gooddata-sdk/tests/export/fixtures/test_export_csv_by_visualization_id.yaml b/packages/gooddata-sdk/tests/export/fixtures/test_export_csv_by_visualization_id.yaml index bb9b97ee6..ecc8cf954 100644 --- a/packages/gooddata-sdk/tests/export/fixtures/test_export_csv_by_visualization_id.yaml +++ b/packages/gooddata-sdk/tests/export/fixtures/test_export_csv_by_visualization_id.yaml @@ -118,7 +118,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:24 + createdAt: 2026-03-06 13:53 id: customers_trend meta: origin: @@ -165,7 +165,7 @@ interactions: content: format: '#,##0' maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) - createdAt: 2026-02-26 14:24 + createdAt: 2026-03-06 13:53 id: amount_of_active_customers links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/amount_of_active_customers @@ -175,7 +175,7 @@ interactions: content: format: $#,##0.0 maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) - createdAt: 2026-02-26 14:24 + createdAt: 2026-03-06 13:53 id: revenue_per_customer links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue_per_customer @@ -240,10 +240,10 @@ interactions: - '0' body: string: - exportResult: f72fe98cbe1d5cda22c6ae92f56a0e80e1af9878 + exportResult: ecd11a8de81e18b14cf0efabf5ea37c6268d5f6f - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/f72fe98cbe1d5cda22c6ae92f56a0e80e1af9878 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/ecd11a8de81e18b14cf0efabf5ea37c6268d5f6f body: null headers: Accept: @@ -284,7 +284,7 @@ interactions: string: '' - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/f72fe98cbe1d5cda22c6ae92f56a0e80e1af9878 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/ecd11a8de81e18b14cf0efabf5ea37c6268d5f6f body: null headers: Accept: @@ -325,7 +325,7 @@ interactions: string: '' - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/f72fe98cbe1d5cda22c6ae92f56a0e80e1af9878 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/ecd11a8de81e18b14cf0efabf5ea37c6268d5f6f body: null headers: Accept: @@ -366,7 +366,7 @@ interactions: string: '' - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/f72fe98cbe1d5cda22c6ae92f56a0e80e1af9878 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/ecd11a8de81e18b14cf0efabf5ea37c6268d5f6f body: null headers: Accept: @@ -407,7 +407,7 @@ interactions: string: '' - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/f72fe98cbe1d5cda22c6ae92f56a0e80e1af9878 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/ecd11a8de81e18b14cf0efabf5ea37c6268d5f6f body: null headers: Accept: @@ -429,7 +429,7 @@ interactions: Content-Disposition: - attachment; filename="=?UTF-8?Q?Customers_Trend.csv?="; filename*=UTF-8''Customers%20Trend.csv Content-Length: - - '403' + - '404' Content-Type: - text/csv DATE: *id001 @@ -449,7 +449,7 @@ interactions: X-Xss-Protection: - '0' body: - string: "\uFEFF\"Date - Month/Year\",\"2025-03\",\"2025-04\",\"2025-05\",\"\ - 2025-06\",\"2025-07\",\"2025-08\",\"2025-09\",\"2025-10\",\"2025-11\",\"\ - 2025-12\",\"2026-01\",\"2026-02\"\n\"Active Customers\",62,60,51,60,55,86,89,72,56,90,60,64\n\ - \"Revenue per Customer\",93.78964285714285,115.96454545454546,241.92872340425532,270.91346938775513,92.0542,251.6236842105263,204.48873417721518,187.41,160.19469387755103,178.3658536585366,185.4194,146.6475\n" + string: "\uFEFF\"Date - Month/Year\",\"2025-04\",\"2025-05\",\"2025-06\",\"\ + 2025-07\",\"2025-08\",\"2025-09\",\"2025-10\",\"2025-11\",\"2025-12\",\"\ + 2026-01\",\"2026-02\",\"2026-03\"\n\"Active Customers\",60,51,60,55,86,89,72,56,90,60,64,65\n\ + \"Revenue per Customer\",115.96454545454546,241.92872340425532,270.91346938775513,92.0542,251.6236842105263,204.48873417721518,187.41,160.19469387755103,178.3658536585366,185.4194,146.6475,111.88542372881356\n" diff --git a/packages/gooddata-sdk/tests/export/fixtures/test_export_excel.yaml b/packages/gooddata-sdk/tests/export/fixtures/test_export_excel.yaml index 144f87b0b..20b16947b 100644 --- a/packages/gooddata-sdk/tests/export/fixtures/test_export_excel.yaml +++ b/packages/gooddata-sdk/tests/export/fixtures/test_export_excel.yaml @@ -84,7 +84,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 59b1c274-c2d4-45d8-a42a-96dad3b883bb + - ef72c93e-cbb1-46ee-b433-9b7f728836c7 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -132,14 +132,14 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: 9151cbd44692e856f1a90661f20f72d0d42ba5be:c3bd249f57588be348ec7c86a6a67989103c703c7fb70a57782d54a8c03627d8 + executionResult: fc69bb38862598a30f9c61e7c1a2d126be0f15f6:634294be099a561c44cbbfb386a17d374825dd4c8b7272798c159a665124c3b1 - request: method: POST uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular body: fileName: test_xlsx format: XLSX - executionResult: 9151cbd44692e856f1a90661f20f72d0d42ba5be:c3bd249f57588be348ec7c86a6a67989103c703c7fb70a57782d54a8c03627d8 + executionResult: fc69bb38862598a30f9c61e7c1a2d126be0f15f6:634294be099a561c44cbbfb386a17d374825dd4c8b7272798c159a665124c3b1 customOverride: labels: region: @@ -191,10 +191,10 @@ interactions: - '0' body: string: - exportResult: 2eecd57b1ed835d915fe1e0648c8b1a42c55597b + exportResult: 9674024f2e612afe72c40632cc572fe904619474 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/2eecd57b1ed835d915fe1e0648c8b1a42c55597b + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/9674024f2e612afe72c40632cc572fe904619474 body: null headers: Accept: @@ -235,7 +235,7 @@ interactions: string: '' - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/2eecd57b1ed835d915fe1e0648c8b1a42c55597b + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/9674024f2e612afe72c40632cc572fe904619474 body: null headers: Accept: @@ -257,7 +257,7 @@ interactions: Content-Disposition: - attachment; filename="=?UTF-8?Q?test=5Fxlsx.xlsx?="; filename*=UTF-8''test_xlsx.xlsx Content-Length: - - '7540' + - '7541' Content-Type: - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet DATE: *id001 @@ -385,29 +385,29 @@ interactions: dr6GmVPXn68zRmWfmasr0+J3SI4IG2TV28zst1A06yalI3Lc6aDZpuoahv3/8OTjrph8zh4PFoLc 88wirtb0tUfBxtupcM5Hbd1scd1b+1GbwuEDZV/QuKnw2WK+HfADiD6aT5QIEvFSqyy/+eYQdG5p xmWs/tkxahGC1op4X+TwqTm7scLZZ4t7c2d7Bl97Z7vaXi5RWzvI5KulP5748D7I3oGD0oQpWbxN - egBHze7sLwPgYy9It/4GUEsDBBQAAAAIAAAAPwCbjXcWJAEAAFACAAARAAAAZG9jUHJvcHMvY29y - ZS54bWydkstqwzAQRff9CqO9LdsJIQjbgbZk1UChKS3dCWmSiFoPJLVO/r7yMwl41eXo3jlzZ1Cx - Ocs6+gXrhFYlypIURaCY5kIdS/S+38ZrFDlPFae1VlCiCzi0qR4KZgjTFl6tNmC9ABcFkHKEmRKd - vDcEY8dOIKlLgkMF8aCtpD6U9ogNZd/0CDhP0xWW4CmnnuIWGJuJiAYkZxPS/Ni6A3CGoQYJyjuc - JRm+ej1Y6WYbOuXGKYW/GJi1juLkPjsxGZumSZpFZw35M/y5e3nrVo2Fak/FAFUFZ4RZoF7bqsC3 - RThcTZ3fhRMfBPDHS9Bn3oZF+j7gUQhA+rij8rF4et5vUZWn+SpO8zhf7bMlyZckW3+1I+/6r0A5 - DPk3cQT0ue8/QfUHUEsDBBQAAAAIAAAAPwAEcUVjewEAABMDAAAQAAAAZG9jUHJvcHMvYXBwLnht - bJ1SwU7jMBC98xWR79RptVqhyjFalV31sIhKLXBcGWfSWHVsyzNEKV+Pk6ohhT3h05s3T8/PMxa3 - XWOzFiIa7wo2n+UsA6d9ady+YI+7P9c3LENSrlTWOyjYEZDdyiuxiT5AJAOYJQeHBauJwpJz1DU0 - Cmep7VKn8rFRlMq4576qjIY7r18bcMQXef6TQ0fgSiivw2jITo7Llr5rWnrd58On3TEkPyl+hWCN - VpQeKe+Njh59RdnvToMVfNoUyWgL+jUaOspc8GkptlpZWCVjWSmLIPgHIdag+pltlIkoRUvLFjT5 - mKF5S1NbsOxFIfRxCtaqaJQjdpKdigHbgBTls48HrAEIBR/JAU61U2x+yPkgSOBSyMcgCV9G3Bmy - gA/VRkX6T+L5NPGQgU0yEiD96yx2XyKeL/tkv/JNUC7NkI/or3EHfAw7f6cIzhO9JMW2VhHKtIRx - 4iMh1ilatL1+VSu3h/Ks+dro9/90+uNyvpjl6QxrP3OCf3xn+Q5QSwECFAMUAAAACAAAAD8AYV1J - Ok8BAACPBAAAEwAAAAAAAAAAAAAAgIEAAAAAW0NvbnRlbnRfVHlwZXNdLnhtbFBLAQIUAxQAAAAI - AAAAPwDyn0na6QAAAEsCAAALAAAAAAAAAAAAAACAgYABAABfcmVscy8ucmVsc1BLAQIUAxQAAAAI - AAAAPwBEdVvw6AAAALkCAAAaAAAAAAAAAAAAAACAgZICAAB4bC9fcmVscy93b3JrYm9vay54bWwu - cmVsc1BLAQIUAxQAAAAIAAAAPwAMmNAMUgcAACAjAAAYAAAAAAAAAAAAAACAgbIDAAB4bC93b3Jr - c2hlZXRzL3NoZWV0MS54bWxQSwECFAMUAAAACAAAAD8ACOLM+UwBAAApAgAADwAAAAAAAAAAAAAA - gIE6CwAAeGwvd29ya2Jvb2sueG1sUEsBAhQDFAAAAAgAAAA/AHVXf6gSAgAAMAYAABQAAAAAAAAA - AAAAAICBswwAAHhsL3NoYXJlZFN0cmluZ3MueG1sUEsBAhQDFAAAAAgAAAA/AF2fOjTfAgAAjA8A - AA0AAAAAAAAAAAAAAICB9w4AAHhsL3N0eWxlcy54bWxQSwECFAMUAAAACAAAAD8AGPpGVLAFAABS - GwAAEwAAAAAAAAAAAAAAgIEBEgAAeGwvdGhlbWUvdGhlbWUxLnhtbFBLAQIUAxQAAAAIAAAAPwCb - jXcWJAEAAFACAAARAAAAAAAAAAAAAACAgeIXAABkb2NQcm9wcy9jb3JlLnhtbFBLAQIUAxQAAAAI - AAAAPwAEcUVjewEAABMDAAAQAAAAAAAAAAAAAACAgTUZAABkb2NQcm9wcy9hcHAueG1sUEsFBgAA - AAAKAAoAgAIAAN4aAAAAAA== + egBHze7sLwPgYy9It/4GUEsDBBQAAAAIAAAAPwCrM0V2JQEAAFACAAARAAAAZG9jUHJvcHMvY29y + ZS54bWydkstqwzAQRff9CqO9LTumoRW2A23JqoFCXVqyE9IkEbUeSGqd/H0Vv5KAV12O7p0zdwYV + q6Nsol+wTmhVoixJUQSKaS7UvkQf9Tp+QJHzVHHaaAUlOoFDq+quYIYwbeHNagPWC3BRAClHmCnR + wXtDMHbsAJK6JDhUEHfaSupDaffYUPZN94AXabrEEjzl1FN8BsZmIqIBydmEND+26QCcYWhAgvIO + Z0mGL14PVrrZhk65ckrhTwZmraM4uY9OTMa2bZM276whf4a/Nq/v3aqxUOdTMUBVwRlhFqjXtirw + dREO11DnN+HEOwH86RT0mbdhkb4PeBQCkD7uqHzmzy/1GlWLdLGM0zxOl3WWk/uc5I/b88ib/gtQ + DkP+TRwBfe7bT1D9AVBLAwQUAAAACAAAAD8ABHFFY3sBAAATAwAAEAAAAGRvY1Byb3BzL2FwcC54 + bWydUsFO4zAQvfMVke/UabVaocoxWpVd9bCISi1wXBln0lh1bMszRClfj5OqIYU94dObN0/PzzMW + t11jsxYiGu8KNp/lLAOnfWncvmCPuz/XNyxDUq5U1jso2BGQ3corsYk+QCQDmCUHhwWricKSc9Q1 + NApnqe1Sp/KxUZTKuOe+qoyGO69fG3DEF3n+k0NH4Eoor8NoyE6Oy5a+a1p63efDp90xJD8pfoVg + jVaUHinvjY4efUXZ706DFXzaFMloC/o1GjrKXPBpKbZaWVglY1kpiyD4ByHWoPqZbZSJKEVLyxY0 + +ZiheUtTW7DsRSH0cQrWqmiUI3aSnYoB24AU5bOPB6wBCAUfyQFOtVNsfsj5IEjgUsjHIAlfRtwZ + soAP1UZF+k/i+TTxkIFNMhIg/essdl8ini/7ZL/yTVAuzZCP6K9xB3wMO3+nCM4TvSTFtlYRyrSE + ceIjIdYpWrS9flUrt4fyrPna6Pf/dPrjcr6Y5ekMaz9zgn98Z/kOUEsBAhQDFAAAAAgAAAA/AGFd + STpPAQAAjwQAABMAAAAAAAAAAAAAAICBAAAAAFtDb250ZW50X1R5cGVzXS54bWxQSwECFAMUAAAA + CAAAAD8A8p9J2ukAAABLAgAACwAAAAAAAAAAAAAAgIGAAQAAX3JlbHMvLnJlbHNQSwECFAMUAAAA + CAAAAD8ARHVb8OgAAAC5AgAAGgAAAAAAAAAAAAAAgIGSAgAAeGwvX3JlbHMvd29ya2Jvb2sueG1s + LnJlbHNQSwECFAMUAAAACAAAAD8ADJjQDFIHAAAgIwAAGAAAAAAAAAAAAAAAgIGyAwAAeGwvd29y + a3NoZWV0cy9zaGVldDEueG1sUEsBAhQDFAAAAAgAAAA/AAjizPlMAQAAKQIAAA8AAAAAAAAAAAAA + AICBOgsAAHhsL3dvcmtib29rLnhtbFBLAQIUAxQAAAAIAAAAPwB1V3+oEgIAADAGAAAUAAAAAAAA + AAAAAACAgbMMAAB4bC9zaGFyZWRTdHJpbmdzLnhtbFBLAQIUAxQAAAAIAAAAPwBdnzo03wIAAIwP + AAANAAAAAAAAAAAAAACAgfcOAAB4bC9zdHlsZXMueG1sUEsBAhQDFAAAAAgAAAA/ABj6RlSwBQAA + UhsAABMAAAAAAAAAAAAAAICBARIAAHhsL3RoZW1lL3RoZW1lMS54bWxQSwECFAMUAAAACAAAAD8A + qzNFdiUBAABQAgAAEQAAAAAAAAAAAAAAgIHiFwAAZG9jUHJvcHMvY29yZS54bWxQSwECFAMUAAAA + CAAAAD8ABHFFY3sBAAATAwAAEAAAAAAAAAAAAAAAgIE2GQAAZG9jUHJvcHMvYXBwLnhtbFBLBQYA + AAAACgAKAIACAADfGgAAAAA= diff --git a/packages/gooddata-sdk/tests/export/fixtures/test_export_excel_by_visualization_id.yaml b/packages/gooddata-sdk/tests/export/fixtures/test_export_excel_by_visualization_id.yaml index 2a8f348dc..e30338c48 100644 --- a/packages/gooddata-sdk/tests/export/fixtures/test_export_excel_by_visualization_id.yaml +++ b/packages/gooddata-sdk/tests/export/fixtures/test_export_excel_by_visualization_id.yaml @@ -118,7 +118,7 @@ interactions: rotation: auto version: '2' visualizationUrl: local:combo2 - createdAt: 2026-02-26 14:24 + createdAt: 2026-03-06 13:53 id: customers_trend meta: origin: @@ -165,7 +165,7 @@ interactions: content: format: '#,##0' maql: SELECT COUNT({attribute/customer_id},{attribute/order_line_id}) - createdAt: 2026-02-26 14:24 + createdAt: 2026-03-06 13:53 id: amount_of_active_customers links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/amount_of_active_customers @@ -175,7 +175,7 @@ interactions: content: format: $#,##0.0 maql: SELECT AVG(SELECT {metric/revenue} BY {attribute/customer_id}) - createdAt: 2026-02-26 14:24 + createdAt: 2026-03-06 13:53 id: revenue_per_customer links: self: http://localhost:3000/api/v1/entities/workspaces/demo/metrics/revenue_per_customer @@ -240,10 +240,10 @@ interactions: - '0' body: string: - exportResult: c0b1c1d11725985f94c2f27d4de90a3fac3196d0 + exportResult: 0b42791403123b13888e6ca78f3d339bee1f6fc1 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/c0b1c1d11725985f94c2f27d4de90a3fac3196d0 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/0b42791403123b13888e6ca78f3d339bee1f6fc1 body: null headers: Accept: @@ -284,7 +284,7 @@ interactions: string: '' - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/c0b1c1d11725985f94c2f27d4de90a3fac3196d0 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/0b42791403123b13888e6ca78f3d339bee1f6fc1 body: null headers: Accept: @@ -325,7 +325,7 @@ interactions: string: '' - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/c0b1c1d11725985f94c2f27d4de90a3fac3196d0 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/0b42791403123b13888e6ca78f3d339bee1f6fc1 body: null headers: Accept: @@ -366,7 +366,7 @@ interactions: string: '' - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/c0b1c1d11725985f94c2f27d4de90a3fac3196d0 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/0b42791403123b13888e6ca78f3d339bee1f6fc1 body: null headers: Accept: @@ -407,7 +407,7 @@ interactions: string: '' - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/c0b1c1d11725985f94c2f27d4de90a3fac3196d0 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/0b42791403123b13888e6ca78f3d339bee1f6fc1 body: null headers: Accept: @@ -448,7 +448,7 @@ interactions: string: '' - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/c0b1c1d11725985f94c2f27d4de90a3fac3196d0 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/export/tabular/0b42791403123b13888e6ca78f3d339bee1f6fc1 body: null headers: Accept: @@ -470,7 +470,7 @@ interactions: Content-Disposition: - attachment; filename="=?UTF-8?Q?Customers_Trend.xlsx?="; filename*=UTF-8''Customers%20Trend.xlsx Content-Length: - - '6033' + - '6035' Content-Type: - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet DATE: *id001 @@ -507,93 +507,93 @@ interactions: tLZMbElot2n99xEJTR0IoQefxIzYmQe7683P0IsDJuqCV1AVJQj0JtjOtwo+d2+PzyCItbe6Dx4V jEiwqR/W79hrzjPkukgih3hS4Jjji5RkHA6aihDR558mpEFzlqmVUZu9blEuyvJJpmkG1FeZYmsV pK2tQOzGiP/JDk3TGXwN5mtAzzcq5HdIe3KInEN1apEVXCySp6cqcirI2zCLOWE4z+IfyEmezbsM - yzkZiMc+L/QCcdb36lez1jud0H5wytc2pZjavzDy6uLqI1BLAwQUAAAACAAAAD8ARU63DrECAADj - BwAAGAAAAHhsL3dvcmtzaGVldHMvc2hlZXQxLnhtbI2VW2/aMBiG7/crotzPic8OAqq2lJW2SNOO - 1ykYiJrEKHZL9+/nJIXFXw8aSJbt5zvZr2OPz56rMnrSjS1MPYkxSuNI1yuzLurtJP75Y/5ZxZF1 - eb3OS1PrSfxH2/hs+ml8MM2D3WntIh+gtpN459x+lCR2tdNVbpHZ69qTjWmq3Plhs03svtH5unOq - yoSkqUiqvKjjPsKo+Z8YZrMpVnpmVo+Vrl0fpNFl7nz5dlfsbTwdrwvP2vVEjd5M4nM8WtI4mY67 - zL8KfbCDfuTy+++61Cun1379cdQu7N6YhxYu/FTauiavfOddUV+baK03+WPpvpnDtS62O+eD8NZl - ZUrbtVFV1F3kKn/uMxRrt/M9ibhMKSY8jlaP1pnq9wt4ce8dydGR/vMUiBEu1TuuSZ+6K3OWu3w6 - bswharrcdp+3YuGRD+eTtLPn7XQHfe3t/j1N03Hy1MZ5sbjoLUjHGJdYhvwScKZCPgNcAn4VcpVm - IZ8DTgH/ArgE9V+HPEtxyBeAU8BvABck5LeAZ4DfBVykhIZ8CThnJ5546U76kbf1I503HegH6r/o - LVjHYPGXAQQ7NxtCDsJefeQ5Dzw5EGwIlQBqBRBIvRhCCZZyE+QEYW+HMAPV3n20lGUPeQ/f0Ya+ - rQ19pQ2o+aK3EH1ZFEmVCUaU/8jaFkg1tMWYI2/Kj39gOxvaEoZRRpQklKX+5uDg/F0FtjJFGaZM - ZFRJyaHo86BegvxhxdnpB2QO4nKMBKFCMYJTTgSo4TqwTRliSknKsJQEc7Bni2AflEQMfrCBgUgR - zt5bz21gKhWigiv+0oAjdBfm5T5vxsBZ6U1kb8IEEkxycGKSwc28z7d6mTfborZRqTf+lKRIxlHT - vyRd35l91/N3/b1x/q4/jnb+NdVNO/JJN8a446B9A07v8/QvUEsDBBQAAAAIAAAAPwDvbfqrTwEA - AC8CAAAPAAAAeGwvd29ya2Jvb2sueG1sjVHLTsMwELzzFZbvNA8lEa2aVKKAqISAQ2nPJt40Vv2I - bIe0f886VQrcOHlndnc0s16uTkqSL7BOGF3SZBZTAro2XOhDST+2T7d3lDjPNGfSaCjpGRxdVTfL - wdjjpzFHgvvalbT1vltEkatbUMzNTAcaO42xinmE9hC5zgLjrgXwSkZpHBeRYkLTi8LC/kfDNI2o - 4cHUvQLtLyIWJPPo3rWic7RaNkLC7hKIsK57ZQptnyQlkjn/yIUHXtIMoRngD2H77r4XMoA8zmlU - XUO+W8KhYb30W7Q2qeO50ixNizAZpnYCBvezFCA57YXmZihpmuFlzxNKckqGsd4L7lskinh+5Z5B - HFpf0nlRxEE8+qU+3m96iR7DrXvnjUJTZGtBc/yw0NxgkARTLQQWdsOTUWrar5msMVZ4xsE0y5M5 - JU0v5Rq5N/1i2CgQlqZI1TdQSwMEFAAAAAgAAAA/AO3EgiO6AAAABAEAABQAAAB4bC9zaGFyZWRT - dHJpbmdzLnhtbF2PMUsEMRBGe3/FMP3drAoikuSQEzsb0cIy7I63gc1kzUwW/fdGRAXLx3tf8bnD - e15g46qpiMfz/YDAMpYpycnj89P97hpBLcoUlyLs8YMVD+HMqRr0qajH2Wy9IdJx5hx1X1aWbl5L - zdE61hPpWjlOOjNbXuhiGK4oxyQIY2liHi8RmqS3xscfDk5TcBbuojHs4KGIzfTCsTqy4OhLfge3 - o6WN4djUSu43/vtH3lgaw8r1N/prqN8In1BLAwQUAAAACAAAAD8Ar2acSe8CAACwDQAADQAAAHhs - L3N0eWxlcy54bWzNV11v0zAUfedXWB7iCZZ+rFWBphNMioQEE9IG4tWNndTCH8Fxpna/nms7bdKR - tls3bbQPtm/OPff4XucmmZ4vpUA3zJRcqxj3T3sYMZVqylUe4x/XybsJRqUlihKhFYvxipX4fPZq - WtqVYFcLxiwCBlXGeGFt8SGKynTBJClPdcEUXMm0kcTC0uRRWRhGaOmcpIgGvd44koQrPJuqSibS - lijVlbIxHm5MKAxfKGgbn2EU6C40BSlSSrSCH4460aNt9Mnbk5PeDuh4G/rmT6Xtx9dh8H6n3jOq - Zc6mmVaN2jMcDLNpeYtuiADGvoOnWmiDLKQDOL1FEckC4oIIPjfcGTMiuVgF88AZfAZrnORKGx87 - RNiOMzkU5iczlCjSGeYQo8nnMU6SSc/9n5w2/B5M6wdXAC7EdgHAMJsWxFpmVAILVM+vVwXkRcHh - DTQedwCdG7LqD0b3dyi14NSpyC+6czevL3BF2ZLBoYPD7NhbjI+MlfTc/6Gx/AD5nGtDoQmsMzrG - a9NsKlhmwd3wfOFGqwsXQ1urJUwoJ7lWRLgAa48uT+QbRoztgqe/8fowkMrq+tBGHrbNf9gp4I6S - ofDOk35/Lf+6PkLRUYnZt41jtVACTZoeENOpoQ0FzF69T17HF9ZZT+BuSpkQV47pV7a5pfrAt8xa - j52ee+iozRTuw3oaaMLC8bfZAneLdnIULVpmG/5d3v0d3v3GG5GiEKtEh/2F1WcPbNafBM+VZOsU - kPUSLbTht+DqWrwrLXavIZanbg0l8VtfZnf01S8BQeFgh8LBXYWXlZwzk/hHfKPsOXW38jpsVA/a - qof78+radpfauxWsX3z21/Ds2TLk78N2ilJAMLOruvfQPvpftY87tQ8fnfddlX/RnRxVhWfYSVT3 - x1YT3mrBGyty750xvnSCRWsz84oLy1VH+wVOumw6r79qyRw+g7aiAAdlGamEvd5cjHEz/8Yor+T7 - Deo7v9G2RjXzr26f/bFX0Hxrzf4CUEsDBBQAAAAIAAAAPwAY+kZUsAUAAFIbAAATAAAAeGwvdGhl - bWUvdGhlbWUxLnhtbO1ZTY/bRBi+8ytGvreOEzvNrpqtNtmkhe22q920qMeJPbGnGXusmcluc0Pt - EQkJURAXJG4cEFCplbiUX7NQBEXqX+D1R5LxZrLNtosAtTkknvHzfn/4HefqtQcxQ0dESMqTtuVc - rlmIJD4PaBK2rTuD/qWWhaTCSYAZT0jbmhJpXdv64CreVBGJCQLyRG7ithUplW7atvRhG8vLPCUJ - 3BtxEWMFSxHagcDHwDZmdr1Wa9oxpomFEhwD19ujEfUJGmQsra0Z8x6Dr0TJbMNn4tDPJeoUOTYY - O9mPnMouE+gIs7YFcgJ+PCAPlIUYlgputK1a/rHsrav2nIipFbQaXT//lHQlQTCu53QiHM4Jnb67 - cWVnzr9e8F/G9Xq9bs+Z88sB2PfBUmcJ6/ZbTmfGUwMVl8u8uzWv5lbxGv/GEn6j0+l4GxV8Y4F3 - l/CtWtPdrlfw7gLvLevf2e52mxW8t8A3l/D9KxtNt4rPQRGjyXgJncVzHpk5ZMTZDSO8BfDWLAEW - KFvLroI+UatyLcb3uegDIA8uVjRBapqSEfYB18XxUFCcCcCbBGt3ii1fLm1lspD0BU1V2/ooxVAR - C8ir5z+8ev4UvXr+5OThs5OHP588enTy8CcD4Q2chDrhy+8+/+ubT9CfT799+fhLM17q+N9+/PTX - X74wA5UOfPHVk9+fPXnx9Wd/fP/YAN8WeKjDBzQmEt0ix+iAx2CbQQAZivNRDCJMKxQ4AqQB2FNR - BXhripkJ1yFV590V0ABMwOuT+xVdDyMxUdQA3I3iCnCPc9bhwmjObiZLN2eShGbhYqLjDjA+Msnu - ngptb5JCJlMTy25EKmruM4g2DklCFMru8TEhBrJ7lFb8ukd9wSUfKXSPog6mRpcM6FCZiW7QGOIy - NSkIoa74Zu8u6nBmYr9DjqpIKAjMTCwJq7jxOp4oHBs1xjHTkTexikxKHk6FX3G4VBDpkDCOegGR - 0kRzW0wr6u5i6ETGsO+xaVxFCkXHJuRNzLmO3OHjboTj1KgzTSId+6EcQ4pitM+VUQlerZBsDXHA - ycpw36VEna+s79AwMidIdmciyq5d6b8xTc5qxoxCN37fjGfwbXg0mUridAtehfsfNt4dPEn2CeT6 - +777vu++i313VS2v220XDdbW5+KcX7xySB5Rxg7VlJGbMm/NEpQO+rCZL3Ki+UyeRnBZiqvgQoHz - ayS4+piq6DDCKYhxcgmhLFmHEqVcwknAWsk7P05SMD7f82ZnQEBjtceDYruhnw3nbPJVKHVBjYzB - usIaV95OmFMA15TmeGZp3pnSbM2bUA0IZwd/p1kvREPGYEaCzO8Fg1lYLjxEMsIBKWPkGA1xGmu6 - rfV6r2nSNhpvJ22dIOni3BXivAuIUm0pSvZyObKkukLHoJVX9yzk47RtjWCSgss4BX4ya0CYhUnb - 8lVpymuL+bTB5rR0aisNrohIhVQ7WEYFVX5r9uokWehf99zMDxdjgKEbradFo+X8i1rYp0NLRiPi - qxU7i2V5j08UEYdRcIyGbCIOMOjtFtkVUAnPjPpsIaBC3TLxqpVfVsHpVzRldWCWRrjsSS0t9gU8 - v57rkK809ewVur+hKY0LNMV7d03JMhfG1kaQH6hgDBAYZTnatrhQEYculEbU7wsYHHJZoBeCsshU - Qix735zpSo4WfavgUTS5MFIHNESCQqdTkSBkX5V2voaZU9efrzNGZZ+ZqyvT4ndIjggbZNXbzOy3 - UDTrJqUjctzpoNmm6hqG/f/w5OOumHzOHg8WgtzzzCKu1vS1R8HG26lwzkdt3Wxx3Vv7UZvC4QNl - X9C4qfDZYr4d8AOIPppPlAgS8VKrLL/55hB0bmnGZaz+2TFqEYLWinhf5PCpObuxwtlni3tzZ3sG - X3tnu9peLlFbO8jkq6U/nvjwPsjegYPShClZvE16AEfN7uwvA+BjL0i3/gZQSwMEFAAAAAgAAAA/ - AAm+2D8kAQAAUAIAABEAAABkb2NQcm9wcy9jb3JlLnhtbJ2Sy2rDMBBF9/0Ko70t2ymmGNuBtmTV - QKEuLd0JaeKIWg8ktY7/vvIjTgJeFbSR7p0zdwYV25Nog18wlitZoiSKUQCSKsZlU6L3ehc+oMA6 - IhlplYQS9WDRtrorqM6pMvBqlAbjONjAg6TNqS7R0TmdY2zpEQSxkXdILx6UEcT5q2mwJvSbNIDT - OM6wAEcYcQQPwFAvRDQjGV2Q+se0I4BRDC0IkM7iJErwxevACLtaMCpXTsFdr2HVehYX98nyxdh1 - XdRtRqvPn+DP/cvbOGrI5bAqCqgqGM2pAeKUqQp8ffGLa4l1e7/iAwf22Ht95W0eZKoDFvgA+RT3 - rHxsnp7rHarSOM3COA3TrE7u89Sf7GtoeVN/AYq5yb+JZ8CU+/YTVH9QSwMEFAAAAAgAAAA/ALLA - Mkd+AQAAGQMAABAAAABkb2NQcm9wcy9hcHAueG1snVLBTuswELzzFZHv1GmF0FPlGKEC4sDTq9QA - Z+NsGgvHtrzbqH1fj5OqIQVO5DQ7OxpPdlfc7FubdRDReFew+SxnGTjtK+O2BXsuHy7/sAxJuUpZ - 76BgB0B2Iy/EOvoAkQxglhwcFqwhCkvOUTfQKpyltkud2sdWUSrjlvu6NhruvN614Igv8vyaw57A - VVBdhtGQHR2XHf3WtPK6z4cv5SEkPyluQ7BGK0o/Kf8aHT36mrL7vQYr+LQpktEG9C4aOshc8Gkp - NlpZWCVjWSuLIPgnIR5B9TNbKxNRio6WHWjyMUPzP01twbI3hdDHKVinolGO2FF2LAZsA1KUrz6+ - YwNAKPhIDnCqnWJzJeeDIIFzIR+DJHwesTRkAf/VaxXph8TzaeIhA5tkXO2QfJuuJitjWt+3oKcn - vzyy8m1QLk2Sj+jJuHd8DqW/UwSnuZ6TYtOoCFVaxTj3kRCPKWC0vX7VKLeF6qT53uiv4OV46XK+ - mOXpG5Z/4gT/PGr5AVBLAQIUAxQAAAAIAAAAPwBhXUk6TwEAAI8EAAATAAAAAAAAAAAAAACAgQAA - AABbQ29udGVudF9UeXBlc10ueG1sUEsBAhQDFAAAAAgAAAA/APKfSdrpAAAASwIAAAsAAAAAAAAA - AAAAAICBgAEAAF9yZWxzLy5yZWxzUEsBAhQDFAAAAAgAAAA/AER1W/DoAAAAuQIAABoAAAAAAAAA - AAAAAICBkgIAAHhsL19yZWxzL3dvcmtib29rLnhtbC5yZWxzUEsBAhQDFAAAAAgAAAA/AEVOtw6x - AgAA4wcAABgAAAAAAAAAAAAAAICBsgMAAHhsL3dvcmtzaGVldHMvc2hlZXQxLnhtbFBLAQIUAxQA - AAAIAAAAPwDvbfqrTwEAAC8CAAAPAAAAAAAAAAAAAACAgZkGAAB4bC93b3JrYm9vay54bWxQSwEC - FAMUAAAACAAAAD8A7cSCI7oAAAAEAQAAFAAAAAAAAAAAAAAAgIEVCAAAeGwvc2hhcmVkU3RyaW5n - cy54bWxQSwECFAMUAAAACAAAAD8Ar2acSe8CAACwDQAADQAAAAAAAAAAAAAAgIEBCQAAeGwvc3R5 - bGVzLnhtbFBLAQIUAxQAAAAIAAAAPwAY+kZUsAUAAFIbAAATAAAAAAAAAAAAAACAgRsMAAB4bC90 - aGVtZS90aGVtZTEueG1sUEsBAhQDFAAAAAgAAAA/AAm+2D8kAQAAUAIAABEAAAAAAAAAAAAAAICB - /BEAAGRvY1Byb3BzL2NvcmUueG1sUEsBAhQDFAAAAAgAAAA/ALLAMkd+AQAAGQMAABAAAAAAAAAA - AAAAAICBTxMAAGRvY1Byb3BzL2FwcC54bWxQSwUGAAAAAAoACgCAAgAA+xQAAAAA + yzkZiMc+L/QCcdb36lez1jud0H5wytc2pZjavzDy6uLqI1BLAwQUAAAACAAAAD8Akm+CGrICAADj + BwAAGAAAAHhsL3dvcmtzaGVldHMvc2hlZXQxLnhtbI2V2W6jMBSG7+cpEPdjvNtESaq2aZsukUaz + XtPESVABR+A2nbcfA0mLTxdNIiGb76z+jT0+eS6L6MnUTW6rSUwQjiNTLe0qrzaT+NfPy686jhqX + VaussJWZxH9NE59Mv4z3tn5otsa4yAeomkm8dW43SpJmuTVl1iC7M5Una1uXmfPTepM0u9pkq86p + LBKKsUzKLK/iPsKo/p8Ydr3Ol2Zml4+lqVwfpDZF5nz5zTbfNfF0vMo9a/uJarOexKdktGBxMh13 + mX/nZt8MxpHL7n+YwiydWfn+46ht7N7ahxZe+1e4dU3e+F52RX2ro5VZZ4+F+273c5Nvts4HEa3L + 0hZN94zKvOoil9lznyFfua0fKSQUZoSKOFo+Ns6Wfw7g4N470qMje/WUiFOh9AeuSZ+6K3OWuWw6 + ru0+qrvczS5rxSIjH84nad+etq876Gtv1+9pisfJUxvnYHHWW9COcaG4Dvk54ArwWcg1TkN+ATgD + /BJwBeq7CnmKScjngDPArwGXNOQ3gKeA3wZcYspCfge44CFfAK5f4ydeuhf96Pv60c6bDfQD/Z31 + FrxjEize+RAK4Dn7zPMi8BRAsyHUEggWQKD2fAgVWOrrICcIezOEKaj29rNW7gII5emh6KF4Xxv2 + vjbsjTagobPeQva6EYFSycXxD9b0fGhLOUEp1Yoyjv1pIMCemwW2CqOUMC5TppUSUOWLoW1Kkd+g + JH35AV2DuIIgSZnUnBIsqAQ1XAW2mCOutWKcKEWJAOswD9ZBK8ThRxoYSIxI+lE/N4Gp0ohJocXh + AfbMbZhX+Lwp0P8uMOESSa6AMoveRB1UJEhrwSlTVGvCJNgxyeBk3mUbs8jqTV41UWHWfpdgpOKo + 7m+Sbuzsrhv5s/7eOn/WH2dbf5uaup357Gtr3XHS3gEv9/P0H1BLAwQUAAAACAAAAD8A7236q08B + AAAvAgAADwAAAHhsL3dvcmtib29rLnhtbI1Ry07DMBC88xWW7zQPJRGtmlSigKiEgENpzybeNFb9 + iGyHtH/POlUK3Dh5Z3Z3NLNerk5Kki+wThhd0mQWUwK6NlzoQ0k/tk+3d5Q4zzRn0mgo6RkcXVU3 + y8HY46cxR4L72pW09b5bRJGrW1DMzUwHGjuNsYp5hPYQuc4C464F8EpGaRwXkWJC04vCwv5HwzSN + qOHB1L0C7S8iFiTz6N61onO0WjZCwu4SiLCue2UKbZ8kJZI5/8iFB17SDKEZ4A9h++6+FzKAPM5p + VF1DvlvCoWG99Fu0NqnjudIsTYswGaZ2Agb3sxQgOe2F5mYoaZrhZc8TSnJKhrHeC+5bJIp4fuWe + QRxaX9J5UcRBPPqlPt5veokew617541CU2RrQXP8sNDcYJAEUy0EFnbDk1Fq2q+ZrDFWeMbBNMuT + OSVNL+UauTf9YtgoEJamSNU3UEsDBBQAAAAIAAAAPwDtxIIjugAAAAQBAAAUAAAAeGwvc2hhcmVk + U3RyaW5ncy54bWxdjzFLBDEQRnt/xTD93awKIpLkkBM7G9HCMuyOt4HNZM1MFv33RkQFy8d7X/G5 + w3teYOOqqYjH8/2AwDKWKcnJ4/PT/e4aQS3KFJci7PGDFQ/hzKka9Kmox9lsvSHSceYcdV9Wlm5e + S83ROtYT6Vo5TjozW17oYhiuKMckCGNpYh4vEZqkt8bHHw5OU3AW7qIx7OChiM30wrE6suDoS34H + t6OljeHY1EruN/77R95YGsPK9Tf6a6jfCJ9QSwMEFAAAAAgAAAA/AK9mnEnvAgAAsA0AAA0AAAB4 + bC9zdHlsZXMueG1szVddb9MwFH3nV1ge4gmWfqxVgaYTTIqEBBPSBuLVjZ3Uwh/BcaZ2v55rO23S + kbZbN220D7Zvzj33+F7nJpmeL6VAN8yUXKsY9097GDGVaspVHuMf18m7CUalJYoSoRWL8YqV+Hz2 + alralWBXC8YsAgZVxnhhbfEhisp0wSQpT3XBFFzJtJHEwtLkUVkYRmjpnKSIBr3eOJKEKzybqkom + 0pYo1ZWyMR5uTCgMXyhoG59hFOguNAUpUkq0gh+OOtGjbfTJ25OT3g7oeBv65k+l7cfXYfB+p94z + qmXOpplWjdozHAyzaXmLbogAxr6Dp1pogyykAzi9RRHJAuKCCD433BkzIrlYBfPAGXwGa5zkShsf + O0TYjjM5FOYnM5Qo0hnmEKPJ5zFOkknP/Z+cNvweTOsHVwAuxHYBwDCbFsRaZlQCC1TPr1cF5EXB + 4Q00HncAnRuy6g9G93coteDUqcgvunM3ry9wRdmSwaGDw+zYW4yPjJX03P+hsfwA+ZxrQ6EJrDM6 + xmvTbCpYZsHd8HzhRqsLF0NbqyVMKCe5VkS4AGuPLk/kG0aM7YKnv/H6MJDK6vrQRh62zX/YKeCO + kqHwzpN+fy3/uj5C0VGJ2beNY7VQAk2aHhDTqaENBcxevU9exxfWWU/gbkqZEFeO6Ve2uaX6wLfM + Wo+dnnvoqM0U7sN6GmjCwvG32QJ3i3ZyFC1aZhv+Xd79Hd79xhuRohCrRIf9hdVnD2zWnwTPlWTr + FJD1Ei204bfg6lq8Ky12ryGWp24NJfFbX2Z39NUvAUHhYIfCwV2Fl5WcM5P4R3yj7Dl1t/I6bFQP + 2qqH+/Pq2naX2rsVrF989tfw7Nky5O/DdopSQDCzq7r30D76X7WPO7UPH533XZV/0Z0cVYVn2ElU + 98dWE95qwRsrcu+dMb50gkVrM/OKC8tVR/sFTrpsOq+/askcPoO2ogAHZRmphL3eXIxxM//GKK/k + +w3qO7/RtkY1869un/2xV9B8a83+AlBLAwQUAAAACAAAAD8AGPpGVLAFAABSGwAAEwAAAHhsL3Ro + ZW1lL3RoZW1lMS54bWztWU2P20QYvvMrRr63jhM7za6arTbZpIXttqvdtKjHiT2xpxl7rJnJbnND + 7REJCVEQFyRuHBBQqZW4lF+zUARF6l/g9UeS8WayzbaLALU5JJ7x835/+B3n6rUHMUNHREjKk7bl + XK5ZiCQ+D2gStq07g/6lloWkwkmAGU9I25oSaV3b+uAq3lQRiQkC8kRu4rYVKZVu2rb0YRvLyzwl + CdwbcRFjBUsR2oHAx8A2Zna9VmvaMaaJhRIcA9fboxH1CRpkLK2tGfMeg69EyWzDZ+LQzyXqFDk2 + GDvZj5zKLhPoCLO2BXICfjwgD5SFGJYKbrStWv6x7K2r9pyIqRW0Gl0//5R0JUEwrud0IhzOCZ2+ + u3FlZ86/XvBfxvV6vW7PmfPLAdj3wVJnCev2W05nxlMDFZfLvLs1r+ZW8Rr/xhJ+o9PpeBsVfGOB + d5fwrVrT3a5X8O4C7y3r39nudpsVvLfAN5fw/SsbTbeKz0ERo8l4CZ3Fcx6ZOWTE2Q0jvAXw1iwB + Fihby66CPlGrci3G97noAyAPLlY0QWqakhH2AdfF8VBQnAnAmwRrd4otXy5tZbKQ9AVNVdv6KMVQ + EQvIq+c/vHr+FL16/uTk4bOThz+fPHp08vAnA+ENnIQ64cvvPv/rm0/Qn0+/ffn4SzNe6vjffvz0 + 11++MAOVDnzx1ZPfnz158fVnf3z/2ADfFniowwc0JhLdIsfogMdgm0EAGYrzUQwiTCsUOAKkAdhT + UQV4a4qZCdchVefdFdAATMDrk/sVXQ8jMVHUANyN4gpwj3PW4cJozm4mSzdnkoRm4WKi4w4wPjLJ + 7p4KbW+SQiZTE8tuRCpq7jOINg5JQhTK7vExIQaye5RW/LpHfcElHyl0j6IOpkaXDOhQmYlu0Bji + MjUpCKGu+GbvLupwZmK/Q46qSCgIzEwsCau48TqeKBwbNcYx05E3sYpMSh5OhV9xuFQQ6ZAwjnoB + kdJEc1tMK+ruYuhExrDvsWlcRQpFxybkTcy5jtzh426E49SoM00iHfuhHEOKYrTPlVEJXq2QbA1x + wMnKcN+lRJ2vrO/QMDInSHZnIsquXem/MU3OasaMQjd+34xn8G14NJlK4nQLXoX7HzbeHTxJ9gnk + +vu++77vvot9d1Utr9ttFw3W1ufinF+8ckgeUcYO1ZSRmzJvzRKUDvqwmS9yovlMnkZwWYqr4EKB + 82skuPqYqugwwimIcXIJoSxZhxKlXMJJwFrJOz9OUjA+3/NmZ0BAY7XHg2K7oZ8N52zyVSh1QY2M + wbrCGlfeTphTANeU5nhmad6Z0mzNm1ANCGcHf6dZL0RDxmBGgszvBYNZWC48RDLCASlj5BgNcRpr + uq31eq9p0jYabydtnSDp4twV4rwLiFJtKUr2cjmypLpCx6CVV/cs5OO0bY1gkoLLOAV+MmtAmIVJ + 2/JVacpri/m0wea0dGorDa6ISIVUO1hGBVV+a/bqJFnoX/fczA8XY4ChG62nRaPl/Ita2KdDS0Yj + 4qsVO4tleY9PFBGHUXCMhmwiDjDo7RbZFVAJz4z6bCGgQt0y8aqVX1bB6Vc0ZXVglka47EktLfYF + PL+e65CvNPXsFbq/oSmNCzTFe3dNyTIXxtZGkB+oYAwQGGU52ra4UBGHLpRG1O8LGBxyWaAXgrLI + VEIse9+c6UqOFn2r4FE0uTBSBzREgkKnU5EgZF+Vdr6GmVPXn68zRmWfmasr0+J3SI4IG2TV28zs + t1A06yalI3Lc6aDZpuoahv3/8OTjrph8zh4PFoLc88wirtb0tUfBxtupcM5Hbd1scd1b+1GbwuED + ZV/QuKnw2WK+HfADiD6aT5QIEvFSqyy/+eYQdG5pxmWs/tkxahGC1op4X+TwqTm7scLZZ4t7c2d7 + Bl97Z7vaXi5RWzvI5KulP5748D7I3oGD0oQpWbxNegBHze7sLwPgYy9It/4GUEsDBBQAAAAIAAAA + PwBX9fW9JQEAAFACAAARAAAAZG9jUHJvcHMvY29yZS54bWydkstOwzAQRfd8ReR94qSBgqwklQB1 + RSUkgkDsLHvaWsQP2Ya0f4+bV1spK5bje+fMnZGL1UE20S9YJ7QqUZakKALFNBdqV6L3eh0/oMh5 + qjhttIISHcGhVXVTMEOYtvBqtQHrBbgogJQjzJRo770hGDu2B0ldEhwqiFttJfWhtDtsKPumO8CL + NF1iCZ5y6ik+AWMzEdGA5GxCmh/bdADOMDQgQXmHsyTDZ68HK91sQ6dcOKXwRwOz1lGc3AcnJmPb + tkmbd9aQP8Ofm5e3btVYqNOpGKCq4IwwC9RrWxX4sgiHa6jzm3DirQD+eAz6zNuwSN8HPAoBSB93 + VD7yp+d6japFuljGaR6nyzrLyV1Obu+/TiOv+s9AOQz5N3EE9LmvP0H1B1BLAwQUAAAACAAAAD8A + ssAyR34BAAAZAwAAEAAAAGRvY1Byb3BzL2FwcC54bWydUsFO6zAQvPMVke/UaYXQU+UYoQLiwNOr + 1ABn42waC8e2vNuofV+Pk6ohBU7kNDs7Gk92V9zsW5t1ENF4V7D5LGcZOO0r47YFey4fLv+wDEm5 + SlnvoGAHQHYjL8Q6+gCRDGCWHBwWrCEKS85RN9AqnKW2S53ax1ZRKuOW+7o2Gu683rXgiC/y/JrD + nsBVUF2G0ZAdHZcd/da08rrPhy/lISQ/KW5DsEYrSj8p/xodPfqasvu9Biv4tCmS0Qb0Lho6yFzw + aSk2WllYJWNZK4sg+CchHkH1M1srE1GKjpYdaPIxQ/M/TW3BsjeF0McpWKeiUY7YUXYsBmwDUpSv + Pr5jA0Ao+EgOcKqdYnMl54MggXMhH4MkfB6xNGQB/9VrFemHxPNp4iEDm2Rc7ZB8m64mK2Na37eg + pye/PLLybVAuTZKP6Mm4d3wOpb9TBKe5npNi06gIVVrFOPeREI8pYLS9ftUot4XqpPne6K/g5Xjp + cr6Y5ekbln/iBP88avkBUEsBAhQDFAAAAAgAAAA/AGFdSTpPAQAAjwQAABMAAAAAAAAAAAAAAICB + AAAAAFtDb250ZW50X1R5cGVzXS54bWxQSwECFAMUAAAACAAAAD8A8p9J2ukAAABLAgAACwAAAAAA + AAAAAAAAgIGAAQAAX3JlbHMvLnJlbHNQSwECFAMUAAAACAAAAD8ARHVb8OgAAAC5AgAAGgAAAAAA + AAAAAAAAgIGSAgAAeGwvX3JlbHMvd29ya2Jvb2sueG1sLnJlbHNQSwECFAMUAAAACAAAAD8Akm+C + GrICAADjBwAAGAAAAAAAAAAAAAAAgIGyAwAAeGwvd29ya3NoZWV0cy9zaGVldDEueG1sUEsBAhQD + FAAAAAgAAAA/AO9t+qtPAQAALwIAAA8AAAAAAAAAAAAAAICBmgYAAHhsL3dvcmtib29rLnhtbFBL + AQIUAxQAAAAIAAAAPwDtxIIjugAAAAQBAAAUAAAAAAAAAAAAAACAgRYIAAB4bC9zaGFyZWRTdHJp + bmdzLnhtbFBLAQIUAxQAAAAIAAAAPwCvZpxJ7wIAALANAAANAAAAAAAAAAAAAACAgQIJAAB4bC9z + dHlsZXMueG1sUEsBAhQDFAAAAAgAAAA/ABj6RlSwBQAAUhsAABMAAAAAAAAAAAAAAICBHAwAAHhs + L3RoZW1lL3RoZW1lMS54bWxQSwECFAMUAAAACAAAAD8AV/X1vSUBAABQAgAAEQAAAAAAAAAAAAAA + gIH9EQAAZG9jUHJvcHMvY29yZS54bWxQSwECFAMUAAAACAAAAD8AssAyR34BAAAZAwAAEAAAAAAA + AAAAAAAAgIFREwAAZG9jUHJvcHMvYXBwLnhtbFBLBQYAAAAACgAKAIACAAD9FAAAAAA= diff --git a/packages/gooddata-sdk/tests/gd_test_config_staging.yaml b/packages/gooddata-sdk/tests/gd_test_config_staging.yaml new file mode 100644 index 000000000..ec3127c50 --- /dev/null +++ b/packages/gooddata-sdk/tests/gd_test_config_staging.yaml @@ -0,0 +1,32 @@ +# (C) 2024 GoodData Corporation +# Staging test configuration. +# Token is passed via TOKEN env var from make test-staging TOKEN=... (see conftest.py). +staging: true +host: "https://python-sdk-dex.dev-latest.stg11.panther.intgdc.com" +token: "" +workspace: "demo" +workspace_name: "Demo" +workspace_with_parent: "demo_west" +workspace_with_parent_name: "Demo West" +header_host: python-sdk-dex.dev-latest.stg11.panther.intgdc.com +data_source: "demo-test-ds" +data_source2: "demo-bigquery-ds" +workspace_test: "demo_testing" +test_user: "demo2" +test_user_group: "demoGroup" +test_new_user: "newUser" +test_new_user_group: "newUserGroup" +test_new_user_data_filter: "newUserDataFilter" +demo_user: "demo" +admin_user_group: "adminGroup" +bigquery_token: "dummy-bigquery-token" +bigquery_token_file: "" +visualization_id: "customers_trend" +visualization_name: "Customers Trend" +databricks_client_secret: "dummy-databricks-secret" +databricks_token: "dummy-databricks-token" +# Staging PostgreSQL connection (used by fixture patching in conftest.py) +# Local Docker uses postgres:5432 with user=postgres +# Staging k8s uses cnpg-cluster-pooler:5432 with user=tiger +staging_ds_url: "jdbc:postgresql://cnpg-cluster-pooler:5432/tiger?sslmode=prefer" +staging_ds_username: "tiger" diff --git a/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_and_metric.yaml b/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_and_metric.yaml index 10113baeb..e4ce9140a 100644 --- a/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_and_metric.yaml +++ b/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_and_metric.yaml @@ -68,7 +68,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - f6586eb9-0798-4623-bddd-e72a70c02302 + - f86b39ea-2200-44f8-9b7e-60e953d18acd X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -100,10 +100,10 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: 5408f1f655c4875c281f1c3e6e71d40bb3ee0477:7b04404d9ea1df6fc812822821541706442f5cd24dff799e5ba0fc2cc1d4bcfc + executionResult: e301183df2fb38b64608aa432486be82d78cb859:44d1d5c70c2a2b2a091372769c4cdedb8ada675fe91d89d1b42be106211f5974 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/5408f1f655c4875c281f1c3e6e71d40bb3ee0477%3A7b04404d9ea1df6fc812822821541706442f5cd24dff799e5ba0fc2cc1d4bcfc?offset=0%2C0&limit=512%2C256 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/e301183df2fb38b64608aa432486be82d78cb859%3A44d1d5c70c2a2b2a091372769c4cdedb8ada675fe91d89d1b42be106211f5974?offset=0%2C0&limit=512%2C256 body: null headers: Accept: diff --git a/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_metric_and_filter.yaml b/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_metric_and_filter.yaml index dcb245b0f..a11c2720b 100644 --- a/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_metric_and_filter.yaml +++ b/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_metric_and_filter.yaml @@ -75,7 +75,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 5d44bc61-7fcb-4db7-a0fe-ae153ca48f76 + - 57e998fc-961e-448c-9d34-6a3f57cd5dbd X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -107,10 +107,10 @@ interactions: name: Order Amount localIdentifier: dim_1 links: - executionResult: e2985459cb131f7c7d356b4094b5665e0dd68310:3a5aa5b3fc57c1f72de41866b00d2cc1add75bc752e001b6dc78d1c74a55a901 + executionResult: 3a5c7b65af98f48afdec7bc790e3e3e17e2b16f7:8849813b3750d740faebb1fd06c32dae29c8ad5b00b092caacdc304c71a375f3 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/e2985459cb131f7c7d356b4094b5665e0dd68310%3A3a5aa5b3fc57c1f72de41866b00d2cc1add75bc752e001b6dc78d1c74a55a901?offset=0%2C0&limit=512%2C256 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/3a5c7b65af98f48afdec7bc790e3e3e17e2b16f7%3A8849813b3750d740faebb1fd06c32dae29c8ad5b00b092caacdc304c71a375f3?offset=0%2C0&limit=512%2C256 body: null headers: Accept: diff --git a/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_show_all_values.yaml b/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_show_all_values.yaml index d7528e2c9..6e8762798 100644 --- a/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_show_all_values.yaml +++ b/packages/gooddata-sdk/tests/table/fixtures/table_with_attribute_show_all_values.yaml @@ -69,7 +69,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 7956b8b4-e13c-4e69-b4e0-797a1b53f200 + - ea226103-4678-480a-a143-277507b3b46e X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -103,10 +103,10 @@ interactions: - localIdentifier: metric1 localIdentifier: dim_1 links: - executionResult: 91be15b027fa02f3119d9968d8820a1170609db3:716c66898addd719ebe544fd4202ce2548cc58249a7b9dd58975bf1362609525 + executionResult: 6495fe3e3adc58a7edd151a760cb3d9adada9d0c:978bd9e49c527913f2d9c4ba583d35711ca127a2ead8a538797ed19b1c5d7516 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/91be15b027fa02f3119d9968d8820a1170609db3%3A716c66898addd719ebe544fd4202ce2548cc58249a7b9dd58975bf1362609525?offset=0%2C0&limit=512%2C256 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/6495fe3e3adc58a7edd151a760cb3d9adada9d0c%3A978bd9e49c527913f2d9c4ba583d35711ca127a2ead8a538797ed19b1c5d7516?offset=0%2C0&limit=512%2C256 body: null headers: Accept: @@ -447,7 +447,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 46323b5f-3f34-437a-bbd3-dc1875e9f410 + - 15f3ae35-cbbc-4347-8f76-56123d33de8d X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -481,10 +481,10 @@ interactions: - localIdentifier: metric1 localIdentifier: dim_1 links: - executionResult: b2f5e5bf97c867c22ae31ca478470adcc129c906:640997b31b142e80bea09ef6193940820a4ada24dbbe02005cf6911eed5c9de2 + executionResult: d145ebac631db7505bc011155383bae23d146a2a:2362a50190e83c8b6f089139d7c0c7ceb1c11ba1492a0087727c98fa7eedf774 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/b2f5e5bf97c867c22ae31ca478470adcc129c906%3A640997b31b142e80bea09ef6193940820a4ada24dbbe02005cf6911eed5c9de2?offset=0%2C0&limit=512%2C256 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/d145ebac631db7505bc011155383bae23d146a2a%3A2362a50190e83c8b6f089139d7c0c7ceb1c11ba1492a0087727c98fa7eedf774?offset=0%2C0&limit=512%2C256 body: null headers: Accept: @@ -821,7 +821,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 99abd273-f953-4a94-a602-f4d2dd293fb5 + - f30f97a2-0563-4819-9ba7-5325ce8a3244 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -855,10 +855,10 @@ interactions: - localIdentifier: metric1 localIdentifier: dim_1 links: - executionResult: 39858c7efb40851b8f50bc9a3012c03c348d3a0a:c881753c77047679f9da7f39ea7b75f2a473178d0ee998c265cf0028dc5dd9ac + executionResult: f10fd0c98a838bd065c2ccc144e5b6dd349a3fc7:db22e719282c2cb45f1a4e2dbfaa8136a722a3e84f908aca93ed82b2aa059a6b - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/39858c7efb40851b8f50bc9a3012c03c348d3a0a%3Ac881753c77047679f9da7f39ea7b75f2a473178d0ee998c265cf0028dc5dd9ac?offset=0%2C0&limit=512%2C256 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/f10fd0c98a838bd065c2ccc144e5b6dd349a3fc7%3Adb22e719282c2cb45f1a4e2dbfaa8136a722a3e84f908aca93ed82b2aa059a6b?offset=0%2C0&limit=512%2C256 body: null headers: Accept: diff --git a/packages/gooddata-sdk/tests/table/fixtures/table_with_just_attribute.yaml b/packages/gooddata-sdk/tests/table/fixtures/table_with_just_attribute.yaml index 5c88b9dda..e3adb74ba 100644 --- a/packages/gooddata-sdk/tests/table/fixtures/table_with_just_attribute.yaml +++ b/packages/gooddata-sdk/tests/table/fixtures/table_with_just_attribute.yaml @@ -56,7 +56,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - 14358f29-e283-4119-a3d9-566d812d2b6f + - 43338155-d57d-419e-abf2-7153bea9b8e7 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -82,10 +82,10 @@ interactions: valueType: TEXT localIdentifier: dim_0 links: - executionResult: fc08106481e859ba38823a0d1fce0f2841ee96b1:4dbe3689160c97cb36b7a28309cae6b279e30d8eddb03c17b326d6941effcd8e + executionResult: 36f321e87aaa443328ef3da4d2631048555b489f:bee73fe986acc70a4112acbdea973c9ebdc5678df6fc54cee121c1faee00a000 - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/fc08106481e859ba38823a0d1fce0f2841ee96b1%3A4dbe3689160c97cb36b7a28309cae6b279e30d8eddb03c17b326d6941effcd8e?offset=0&limit=512 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/36f321e87aaa443328ef3da4d2631048555b489f%3Abee73fe986acc70a4112acbdea973c9ebdc5678df6fc54cee121c1faee00a000?offset=0&limit=512 body: null headers: Accept: diff --git a/packages/gooddata-sdk/tests/table/fixtures/table_with_just_metric.yaml b/packages/gooddata-sdk/tests/table/fixtures/table_with_just_metric.yaml index 68a9b7d52..b9041ad80 100644 --- a/packages/gooddata-sdk/tests/table/fixtures/table_with_just_metric.yaml +++ b/packages/gooddata-sdk/tests/table/fixtures/table_with_just_metric.yaml @@ -60,7 +60,7 @@ interactions: X-Content-Type-Options: - nosniff X-Gdc-Cancel-Token: - - b5bca899-13f2-4bc3-a895-238fcd14786d + - b910360e-d116-4a77-b900-f232c08ea3b1 X-GDC-TRACE-ID: *id001 X-Xss-Protection: - '0' @@ -75,10 +75,10 @@ interactions: name: Order Amount localIdentifier: dim_0 links: - executionResult: 992af09d979e4fe9eb8da5a84b06c74e498c846d:b76292e2bc7789ad2d66956c84fbecaa20596d78cc3dbd8cf94605ee186c466c + executionResult: 79b16b23cf25957a8c91f54cf5ec884d00b7aed8:365c4473df05ffb46515e5e86e5c2252d90e273f68d83502be2304112218ef3a - request: method: GET - uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/992af09d979e4fe9eb8da5a84b06c74e498c846d%3Ab76292e2bc7789ad2d66956c84fbecaa20596d78cc3dbd8cf94605ee186c466c?offset=0&limit=256 + uri: http://localhost:3000/api/v1/actions/workspaces/demo/execution/afm/execute/result/79b16b23cf25957a8c91f54cf5ec884d00b7aed8%3A365c4473df05ffb46515e5e86e5c2252d90e273f68d83502be2304112218ef3a?offset=0&limit=256 body: null headers: Accept: diff --git a/packages/gooddata-sdk/tox.ini b/packages/gooddata-sdk/tox.ini index e009c4d9a..aeaa31d03 100644 --- a/packages/gooddata-sdk/tox.ini +++ b/packages/gooddata-sdk/tox.ini @@ -8,6 +8,9 @@ package = wheel wheel_build_env = .pkg dependency_groups = test +pass_env = + OVERWRITE + TOKEN setenv = COVERAGE_CORE=sysmon commands = diff --git a/packages/tests-support/clean_staging.py b/packages/tests-support/clean_staging.py new file mode 100644 index 000000000..3521873f0 --- /dev/null +++ b/packages/tests-support/clean_staging.py @@ -0,0 +1,74 @@ +# (C) 2024 GoodData Corporation +"""Wipe all user-created resources from a staging environment. + +Run `load-staging` afterward to restore the expected test state. +""" + +import os + +import requests + +staging = os.environ.get("STAGING", "").lower() in ("1", "true", "yes") + +_STAGING_HOST = "https://python-sdk-dex.dev-latest.stg11.panther.intgdc.com" +_STAGING_HEADER_HOST = "python-sdk-dex.dev-latest.stg11.panther.intgdc.com" + +if staging: + host = os.environ.get("HOST", _STAGING_HOST) + token = os.environ["TOKEN"] + header_host = os.environ.get("HEADER_HOST", _STAGING_HEADER_HOST) +else: + host = os.environ.get("HOST", "http://localhost:3000") + token = os.environ.get("TOKEN", "YWRtaW46Ym9vdHN0cmFwOmFkbWluMTIz") + header_host = os.environ.get("HEADER_HOST", None) + +api_version = "v1" + + +def rest_op(method, url_path, data=None): + all_headers = { + "Authorization": f"Bearer {token}", + "Content-Type": "application/json", + } + if header_host: + all_headers["Host"] = header_host + url = f"{host}/api/{api_version}/{url_path}" + resp = getattr(requests, method)(url=url, headers=all_headers, json=data) + if resp.status_code >= 300: + print(f" WARNING: {method.upper()} {url_path} returned {resp.status_code}: {resp.text[:200]}") + else: + print(f" OK: {method.upper()} {url_path}") + + +def clean(): + mode = "STAGING" if staging else "LOCAL" + print(f"=== Cleaning environment ({mode}) ===", flush=True) + + # Order matters: permissions reference users/groups, workspaces reference data sources. + # 1. Remove workspace permissions first + print("Removing workspace permissions...", flush=True) + rest_op("put", "layout/workspaces/demo/permissions", {"hierarchyPermissions": [], "permissions": []}) + + # 2. Remove workspaces (removes all workspace content) + print("Removing workspaces...", flush=True) + rest_op("put", "layout/workspaces", {"workspaces": [], "workspaceDataFilters": []}) + + # 3. Remove data sources + print("Removing data sources...", flush=True) + rest_op("put", "layout/dataSources", {"dataSources": []}) + + # 4. Remove non-admin users (keep admin) + print("Removing users (keeping admin)...", flush=True) + rest_op( + "put", "layout/users", {"users": [{"id": "admin", "userGroups": [{"id": "adminGroup", "type": "userGroup"}]}]} + ) + + # 5. Remove non-admin user groups (keep adminGroup) + print("Removing user groups (keeping adminGroup)...", flush=True) + rest_op("put", "layout/userGroups", {"userGroups": [{"id": "adminGroup"}]}) + + print("=== Clean complete ===", flush=True) + + +if __name__ == "__main__": + clean() diff --git a/packages/tests-support/fixtures/demo_data_sources.json b/packages/tests-support/fixtures/demo_data_sources.json index 0e443d2c5..0fc0c51ee 100644 --- a/packages/tests-support/fixtures/demo_data_sources.json +++ b/packages/tests-support/fixtures/demo_data_sources.json @@ -8,6 +8,7 @@ "url": "jdbc:postgresql://postgres:5432/tiger?sslmode=prefer", "username": "postgres", "password": "passw0rd", + "alternativeDataSourceId": "ds-put-abc-id", "permissions": [ { "assignee": { diff --git a/packages/tests-support/fixtures/demo_user.json b/packages/tests-support/fixtures/demo_user.json new file mode 100644 index 000000000..694be6bdc --- /dev/null +++ b/packages/tests-support/fixtures/demo_user.json @@ -0,0 +1,19 @@ +{ + "data": { + "id": "demo", + "type": "user", + "attributes": { + "authenticationId": "" + }, + "relationships": { + "userGroups": { + "data": [ + { + "id": "adminGroup", + "type": "userGroup" + } + ] + } + } + } +} diff --git a/packages/tests-support/fixtures/demo_user_auth.json b/packages/tests-support/fixtures/demo_user_auth.json new file mode 100644 index 000000000..dd85f7186 --- /dev/null +++ b/packages/tests-support/fixtures/demo_user_auth.json @@ -0,0 +1,5 @@ +{ + "email": "demo@gooddata.com", + "password": "demo123", + "displayName": "Demo" +} diff --git a/packages/tests-support/upload_demo_layout.py b/packages/tests-support/upload_demo_layout.py index 2beadb2f5..1dcb4ebd5 100644 --- a/packages/tests-support/upload_demo_layout.py +++ b/packages/tests-support/upload_demo_layout.py @@ -7,14 +7,32 @@ import requests fixtures_dir = Path(os.environ.get("FIXTURES_DIR", Path(os.path.curdir) / "fixtures")) -host = os.environ.get("HOST", "http://localhost:3000") -token = os.environ.get("TOKEN", "YWRtaW46Ym9vdHN0cmFwOmFkbWluMTIz") -header_host = os.environ.get("HEADER_HOST", None) +staging = os.environ.get("STAGING", "").lower() in ("1", "true", "yes") + +# Staging defaults — only TOKEN must be provided via env var +_STAGING_HOST = "https://python-sdk-dex.dev-latest.stg11.panther.intgdc.com" +_STAGING_HEADER_HOST = "python-sdk-dex.dev-latest.stg11.panther.intgdc.com" + +if staging: + host = os.environ.get("HOST", _STAGING_HOST) + token = os.environ["TOKEN"] # required — no default for staging tokens + header_host = os.environ.get("HEADER_HOST", _STAGING_HEADER_HOST) +else: + host = os.environ.get("HOST", "http://localhost:3000") + token = os.environ.get("TOKEN", "YWRtaW46Ym9vdHN0cmFwOmFkbWluMTIz") + header_host = os.environ.get("HEADER_HOST", None) content_type_jsonapi = "application/vnd.gooddata.api+json" content_type_default = "application/json" headers = {"Host": header_host} api_version = "v1" +# Staging overrides for data source connection +# Local Docker: postgres:5432, user=postgres +# Staging k8s: cnpg-cluster-pooler:5432, user=tiger +STAGING_DS_URL = "jdbc:postgresql://cnpg-cluster-pooler:5432/tiger?sslmode=prefer" +STAGING_DS_USERNAME = "tiger" +STAGING_DS_PASSWORD = "passw0rd" + def rest_op(op, url_path, data=None, raise_ex=True): all_headers = { @@ -60,12 +78,24 @@ def rest_op_default(op, url_path, data_json_path=None, raise_ex=True): return rest_op(op, url_path, data_json_path, raise_ex) +def get_org_id(): + """Return the organization ID — 'default' for local Docker, auto-discovered for staging.""" + if not staging: + return "default" + # On staging, org ID matches the hostname prefix (e.g. python-sdk-dex) + org_id = os.environ.get("ORG_ID", "") + if not org_id and header_host: + org_id = header_host.split(".")[0] + return org_id or "default" + + def wait_platform_up(): # wait till GoodData is up and ready to receive requests - print("Waiting till GoodData is up", flush=True) + org_id = get_org_id() + print(f"Waiting till GoodData is up (org={org_id})", flush=True) while True: try: - result = rest_op_jsonapi("get", f"api/{api_version}/entities/admin/organizations/default", raise_ex=False) + result = rest_op_jsonapi("get", f"api/{api_version}/entities/admin/organizations/{org_id}", raise_ex=False) if result is not None: print("GoodData is up", flush=True) break @@ -85,14 +115,35 @@ def create_entity(entity_id, entity_data, entity_type, api_path, action): return result +def patch_data_sources_for_staging(data_sources): + """Patch data source fixtures with staging PostgreSQL connection details.""" + for ds in data_sources.get("dataSources", []): + ds["url"] = STAGING_DS_URL + ds["username"] = STAGING_DS_USERNAME + ds["password"] = STAGING_DS_PASSWORD + print(f" Patched DS '{ds['id']}': url={ds['url']}, username={ds['username']}", flush=True) + return data_sources + + def update_layout(): + org_id = get_org_id() + mode = "STAGING" if staging else "LOCAL" + print(f"=== Running in {mode} mode (org={org_id}) ===", flush=True) + user_groups = read_data_from_file(fixtures_dir / "user_groups.json") - user_auth = read_data_from_file(fixtures_dir / "user_auth.json") - user = read_data_from_file(fixtures_dir / "user.json") + demo_user_auth = read_data_from_file(fixtures_dir / "demo_user_auth.json") + demo_user = read_data_from_file(fixtures_dir / "demo_user.json") + demo2_user_auth = read_data_from_file(fixtures_dir / "user_auth.json") + demo2_user = read_data_from_file(fixtures_dir / "user.json") data_sources = read_data_from_file(fixtures_dir / "demo_data_sources.json") hierarchy = read_data_from_file(fixtures_dir / "demo_declarative_hierarchy.json") permissions = read_data_from_file(fixtures_dir / "workspace_permissions.json") + # Patch data source connection for staging + if staging: + print("Patching data sources for staging...", flush=True) + data_sources = patch_data_sources_for_staging(data_sources) + # TODO: use python-sdk support wait_platform_up() @@ -102,7 +153,7 @@ def update_layout(): print("Enabling feature flags on organization...", flush=True) org_update = { "data": { - "id": "default", + "id": org_id, "type": "organization", "attributes": { "earlyAccessValues": [ @@ -118,16 +169,33 @@ def update_layout(): }, } } - rest_op_jsonapi("patch", f"api/{api_version}/entities/admin/organizations/default", org_update) + rest_op_jsonapi("patch", f"api/{api_version}/entities/admin/organizations/{org_id}", org_update) print("Uploading userGroups", flush=True) rest_op_default("put", f"api/{api_version}/layout/userGroups", user_groups) - response = create_entity( - user_auth["email"], user_auth, "user auth", f"api/{api_version}/auth/users", rest_op_default - ) - user["data"]["attributes"]["authenticationId"] = response["authenticationId"] - create_entity(user["data"]["id"], user, "user", f"api/{api_version}/entities/users", rest_op_jsonapi) + users_to_create = [ + ("demo", demo_user_auth, demo_user), + ("demo2", demo2_user_auth, demo2_user), + ] + for user_label, user_auth, user in users_to_create: + if staging: + # On staging with DEX, user creation may not work (DEX manages auth). + # Try anyway but don't fail the entire upload. + try: + response = create_entity( + user_auth["email"], user_auth, "user auth", f"api/{api_version}/auth/users", rest_op_default + ) + user["data"]["attributes"]["authenticationId"] = response["authenticationId"] + create_entity(user["data"]["id"], user, "user", f"api/{api_version}/entities/users", rest_op_jsonapi) + except Exception as e: + print(f"WARNING: User '{user_label}' creation failed on staging (expected with DEX): {e}", flush=True) + else: + response = create_entity( + user_auth["email"], user_auth, "user auth", f"api/{api_version}/auth/users", rest_op_default + ) + user["data"]["attributes"]["authenticationId"] = response["authenticationId"] + create_entity(user["data"]["id"], user, "user", f"api/{api_version}/entities/users", rest_op_jsonapi) print("Uploading test DS with physical model for demo", flush=True) rest_op_default("put", f"api/{api_version}/layout/dataSources", data_sources) diff --git a/project_common.mk b/project_common.mk index 762243b3e..f2d92f4ee 100644 --- a/project_common.mk +++ b/project_common.mk @@ -66,6 +66,11 @@ test-ci: TEST_CI_PROJECT=$(CURR_DIR_BASE_NAME) $(MAKE) -C ../.. -f ci_tests.mk test-ci +.PHONY: test-staging +test-staging: + @test -n "$(TOKEN)" || (echo "ERROR: TOKEN is required. Usage: make test-staging TOKEN=" && exit 1) + TOKEN=$(TOKEN) STAGING=1 uv run tox -v $(TOX_FLAGS) $(LOCAL_TEST_ENVS) -- --gd-test-config=tests/gd_test_config_staging.yaml $(LOCAL_ADD_ARGS) + # this is effective for gooddata-sdk only now - it should be part of test fixtures # remove this target once implemented in pytest global fixture .PHONY: remove-store-data diff --git a/schemas/gooddata-afm-client.json b/schemas/gooddata-afm-client.json index f7d41eb58..b6bf407aa 100644 --- a/schemas/gooddata-afm-client.json +++ b/schemas/gooddata-afm-client.json @@ -1066,8 +1066,8 @@ "$ref": "#/components/schemas/AzureFoundryProviderAuth" }, "endpoint": { - "description": "Azure AI inference endpoint URL.", - "example": "https://my-resource.services.ai.azure.com/models", + "description": "Azure OpenAI endpoint URL.", + "example": "https://my-resource.openai.azure.com", "maxLength": 255, "type": "string" }, @@ -3075,6 +3075,18 @@ ], "type": "object" }, + "GetServiceStatusResponse": { + "description": "Status of an AI Lake service", + "properties": { + "status": { + "$ref": "#/components/schemas/JsonNode" + } + }, + "required": [ + "status" + ], + "type": "object" + }, "HeaderGroup": { "description": "Contains the information specific for a group of headers. These groups correlate to attributes and metric groups.", "properties": { @@ -3403,6 +3415,52 @@ ], "type": "object" }, + "ListLlmProviderModelsRequest": { + "properties": { + "providerConfig": { + "oneOf": [ + { + "$ref": "#/components/schemas/AwsBedrockProviderConfig" + }, + { + "$ref": "#/components/schemas/AzureFoundryProviderConfig" + }, + { + "$ref": "#/components/schemas/OpenAIProviderConfig" + } + ] + } + }, + "required": [ + "providerConfig" + ], + "type": "object" + }, + "ListLlmProviderModelsResponse": { + "properties": { + "message": { + "description": "Message about the listing result.", + "type": "string" + }, + "models": { + "description": "Available models on the provider.", + "items": { + "$ref": "#/components/schemas/LlmModel" + }, + "type": "array" + }, + "success": { + "description": "Whether the model listing succeeded.", + "type": "boolean" + } + }, + "required": [ + "message", + "models", + "success" + ], + "type": "object" + }, "ListServicesResponse": { "description": "Paged response for listing AI Lake services", "properties": { @@ -3436,7 +3494,8 @@ "MISTRAL", "AMAZON", "GOOGLE", - "COHERE" + "COHERE", + "UNKNOWN" ], "type": "string" }, @@ -3453,7 +3512,7 @@ "type": "object" }, "LlmProviderConfig": { - "description": "Provider configuration to test.", + "description": "Provider configuration overrides.", "oneOf": [ { "$ref": "#/components/schemas/AwsBedrockProviderConfig" @@ -3872,10 +3931,9 @@ "$ref": "#/components/schemas/OpenAiProviderAuth" }, "baseUrl": { - "default": "https://api.openai.com", + "default": "https://api.openai.com/v1", "description": "Custom base URL for OpenAI API.", "maxLength": 255, - "nullable": true, "type": "string" }, "organization": { @@ -5404,6 +5462,31 @@ ], "type": "object" }, + "TestLlmProviderByIdRequest": { + "properties": { + "models": { + "description": "Models overrides.", + "items": { + "$ref": "#/components/schemas/LlmModel" + }, + "type": "array" + }, + "providerConfig": { + "oneOf": [ + { + "$ref": "#/components/schemas/AwsBedrockProviderConfig" + }, + { + "$ref": "#/components/schemas/AzureFoundryProviderConfig" + }, + { + "$ref": "#/components/schemas/OpenAIProviderConfig" + } + ] + } + }, + "type": "object" + }, "TestLlmProviderDefinitionRequest": { "properties": { "models": { @@ -5560,6 +5643,112 @@ ], "type": "object" }, + "TrendingObjectItem": { + "description": "Trending analytics catalog objects", + "properties": { + "createdAt": { + "description": "Timestamp when object was created.", + "format": "date-time", + "type": "string" + }, + "createdBy": { + "description": "ID of the user who created the object.", + "type": "string" + }, + "datasetId": { + "description": "ID of the associated dataset, if applicable.", + "type": "string" + }, + "datasetTitle": { + "description": "Title of the associated dataset, if applicable.", + "type": "string" + }, + "datasetType": { + "description": "Type of the associated dataset, if applicable.", + "type": "string" + }, + "description": { + "description": "Object description.", + "type": "string" + }, + "id": { + "description": "Object ID.", + "type": "string" + }, + "isHidden": { + "description": "If true, this object is hidden from AI search results by default.", + "type": "boolean" + }, + "isHiddenFromKda": { + "description": "If true, this object is hidden from KDA.", + "type": "boolean" + }, + "metricType": { + "description": "Type of the metric (e.g. MAQL), if applicable.", + "type": "string" + }, + "modifiedAt": { + "description": "Timestamp when object was last modified.", + "format": "date-time", + "type": "string" + }, + "modifiedBy": { + "description": "ID of the user who last modified the object.", + "type": "string" + }, + "tags": { + "items": { + "description": "Tags assigned to the object.", + "type": "string" + }, + "type": "array" + }, + "title": { + "description": "Object title.", + "type": "string" + }, + "type": { + "description": "Object type, e.g. dashboard, visualization, metric.", + "type": "string" + }, + "usageCount": { + "description": "Number of times this object has been used/referenced.", + "format": "int32", + "type": "integer" + }, + "visualizationUrl": { + "description": "URL of the visualization, if applicable.", + "type": "string" + }, + "workspaceId": { + "description": "Workspace ID the object belongs to.", + "type": "string" + } + }, + "required": [ + "id", + "tags", + "title", + "type", + "usageCount", + "workspaceId" + ], + "type": "object" + }, + "TrendingObjectsResult": { + "properties": { + "objects": { + "items": { + "$ref": "#/components/schemas/TrendingObjectItem" + }, + "type": "array" + } + }, + "required": [ + "objects" + ], + "type": "object" + }, "TriggerQualityIssuesCalculationResponse": { "properties": { "processId": { @@ -5910,6 +6099,39 @@ ] } }, + "/api/v1/actions/ai/llmProvider/listModels": { + "post": { + "description": "Lists models available on an LLM provider with a full definition. For Azure AI Foundry providers, the model family will be set to UNKNOWN because the endpoint does not expose the family.", + "operationId": "listLlmProviderModels", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListLlmProviderModelsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListLlmProviderModelsResponse" + } + } + }, + "description": "OK" + } + }, + "summary": "List LLM Provider Models", + "tags": [ + "Smart Functions", + "actions" + ] + } + }, "/api/v1/actions/ai/llmProvider/test": { "post": { "description": "Tests LLM provider connectivity with a full definition.", @@ -5943,6 +6165,39 @@ ] } }, + "/api/v1/actions/ai/llmProvider/{llmProviderId}/listModels": { + "post": { + "description": "Lists models available on an existing LLM provider by its ID. For Azure AI Foundry providers, the model family will be set to UNKNOWN because the endpoint does not expose the family.", + "operationId": "listLlmProviderModelsById", + "parameters": [ + { + "in": "path", + "name": "llmProviderId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListLlmProviderModelsResponse" + } + } + }, + "description": "OK" + } + }, + "summary": "List LLM Provider Models By Id", + "tags": [ + "Smart Functions", + "actions" + ] + } + }, "/api/v1/actions/ai/llmProvider/{llmProviderId}/test": { "post": { "description": "Tests an existing LLM provider connectivity by its ID.", @@ -5957,6 +6212,15 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TestLlmProviderByIdRequest" + } + } + } + }, "responses": { "200": { "content": { @@ -6136,6 +6400,41 @@ ] } }, + "/api/v1/actions/workspaces/{workspaceId}/ai/analyticsCatalog/trendingObjects": { + "get": { + "description": "Returns a list of trending objects for this workspace", + "operationId": "trendingObjects", + "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/TrendingObjectsResult" + } + } + }, + "description": "OK" + } + }, + "summary": "Get Trending Analytics Catalog Objects", + "tags": [ + "Smart Functions", + "actions" + ] + } + }, "/api/v1/actions/workspaces/{workspaceId}/ai/chat": { "post": { "description": "(BETA) Combines multiple use cases such as search, create visualizations, ...", @@ -8578,6 +8877,44 @@ ] } } + }, + "/api/v1/ailake/services/{serviceId}/status": { + "get": { + "description": "(BETA) Returns the status of a service in the organization's AI Lake. The status is controller-specific (e.g., available commands, readiness).", + "operationId": "getAiLakeServiceStatus", + "parameters": [ + { + "in": "path", + "name": "serviceId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetServiceStatusResponse" + } + } + }, + "description": "AI Lake service status successfully retrieved" + } + }, + "summary": "(BETA) Get AI Lake service status", + "tags": [ + "AI Lake" + ], + "x-gdc-security-info": { + "description": "Permissions required to get AI Lake service status.", + "permissions": [ + "MANAGE" + ] + } + } } }, "servers": [ diff --git a/schemas/gooddata-api-client.json b/schemas/gooddata-api-client.json index d3c38d784..b4dc9a400 100644 --- a/schemas/gooddata-api-client.json +++ b/schemas/gooddata-api-client.json @@ -6201,8 +6201,8 @@ "$ref": "#/components/schemas/AzureFoundryProviderAuth" }, "endpoint": { - "description": "Azure AI inference endpoint URL.", - "example": "https://my-resource.services.ai.azure.com/models", + "description": "Azure OpenAI endpoint URL.", + "example": "https://my-resource.openai.azure.com", "maxLength": 255, "type": "string" }, @@ -7510,9 +7510,9 @@ }, "emptyValueHandling": { "enum": [ - "INCLUDE", - "EXCLUDE", - "ONLY" + "include", + "exclude", + "only" ], "type": "string" }, @@ -10874,6 +10874,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -13333,6 +13334,18 @@ ], "type": "object" }, + "GetServiceStatusResponse": { + "description": "Status of an AI Lake service", + "properties": { + "status": { + "$ref": "#/components/schemas/JsonNode" + } + }, + "required": [ + "status" + ], + "type": "object" + }, "GrainIdentifier": { "description": "A grain identifier.", "example": { @@ -23567,7 +23580,8 @@ "MISTRAL", "AMAZON", "GOOGLE", - "COHERE" + "COHERE", + "UNKNOWN" ], "type": "string" }, @@ -23676,7 +23690,8 @@ "MISTRAL", "AMAZON", "GOOGLE", - "COHERE" + "COHERE", + "UNKNOWN" ], "type": "string" }, @@ -23825,7 +23840,8 @@ "MISTRAL", "AMAZON", "GOOGLE", - "COHERE" + "COHERE", + "UNKNOWN" ], "type": "string" }, @@ -26000,6 +26016,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -26099,6 +26116,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -26238,6 +26256,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -27743,6 +27762,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -27842,6 +27862,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -30097,6 +30118,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -30196,6 +30218,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -30361,6 +30384,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -30460,6 +30484,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -30821,6 +30846,52 @@ } ] }, + "ListLlmProviderModelsRequest": { + "properties": { + "providerConfig": { + "oneOf": [ + { + "$ref": "#/components/schemas/AwsBedrockProviderConfig" + }, + { + "$ref": "#/components/schemas/AzureFoundryProviderConfig" + }, + { + "$ref": "#/components/schemas/OpenAIProviderConfig" + } + ] + } + }, + "required": [ + "providerConfig" + ], + "type": "object" + }, + "ListLlmProviderModelsResponse": { + "properties": { + "message": { + "description": "Message about the listing result.", + "type": "string" + }, + "models": { + "description": "Available models on the provider.", + "items": { + "$ref": "#/components/schemas/LlmModel" + }, + "type": "array" + }, + "success": { + "description": "Whether the model listing succeeded.", + "type": "boolean" + } + }, + "required": [ + "message", + "models", + "success" + ], + "type": "object" + }, "ListServicesResponse": { "description": "Paged response for listing AI Lake services", "properties": { @@ -30854,7 +30925,8 @@ "MISTRAL", "AMAZON", "GOOGLE", - "COHERE" + "COHERE", + "UNKNOWN" ], "type": "string" }, @@ -30882,7 +30954,7 @@ "type": "object" }, "LlmProviderConfig": { - "description": "Provider configuration to test.", + "description": "Provider configuration overrides.", "oneOf": [ { "$ref": "#/components/schemas/AwsBedrockProviderConfig" @@ -31578,10 +31650,9 @@ "$ref": "#/components/schemas/OpenAiProviderAuth" }, "baseUrl": { - "default": "https://api.openai.com", + "default": "https://api.openai.com/v1", "description": "Custom base URL for OpenAI API.", "maxLength": 255, - "nullable": true, "type": "string" }, "organization": { @@ -33143,6 +33214,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -34663,6 +34735,31 @@ ], "type": "object" }, + "TestLlmProviderByIdRequest": { + "properties": { + "models": { + "description": "Models overrides.", + "items": { + "$ref": "#/components/schemas/LlmModel" + }, + "type": "array" + }, + "providerConfig": { + "oneOf": [ + { + "$ref": "#/components/schemas/AwsBedrockProviderConfig" + }, + { + "$ref": "#/components/schemas/AzureFoundryProviderConfig" + }, + { + "$ref": "#/components/schemas/OpenAIProviderConfig" + } + ] + } + }, + "type": "object" + }, "TestLlmProviderDefinitionRequest": { "properties": { "models": { @@ -34933,6 +35030,112 @@ ], "type": "object" }, + "TrendingObjectItem": { + "description": "Trending analytics catalog objects", + "properties": { + "createdAt": { + "description": "Timestamp when object was created.", + "format": "date-time", + "type": "string" + }, + "createdBy": { + "description": "ID of the user who created the object.", + "type": "string" + }, + "datasetId": { + "description": "ID of the associated dataset, if applicable.", + "type": "string" + }, + "datasetTitle": { + "description": "Title of the associated dataset, if applicable.", + "type": "string" + }, + "datasetType": { + "description": "Type of the associated dataset, if applicable.", + "type": "string" + }, + "description": { + "description": "Object description.", + "type": "string" + }, + "id": { + "description": "Object ID.", + "type": "string" + }, + "isHidden": { + "description": "If true, this object is hidden from AI search results by default.", + "type": "boolean" + }, + "isHiddenFromKda": { + "description": "If true, this object is hidden from KDA.", + "type": "boolean" + }, + "metricType": { + "description": "Type of the metric (e.g. MAQL), if applicable.", + "type": "string" + }, + "modifiedAt": { + "description": "Timestamp when object was last modified.", + "format": "date-time", + "type": "string" + }, + "modifiedBy": { + "description": "ID of the user who last modified the object.", + "type": "string" + }, + "tags": { + "items": { + "description": "Tags assigned to the object.", + "type": "string" + }, + "type": "array" + }, + "title": { + "description": "Object title.", + "type": "string" + }, + "type": { + "description": "Object type, e.g. dashboard, visualization, metric.", + "type": "string" + }, + "usageCount": { + "description": "Number of times this object has been used/referenced.", + "format": "int32", + "type": "integer" + }, + "visualizationUrl": { + "description": "URL of the visualization, if applicable.", + "type": "string" + }, + "workspaceId": { + "description": "Workspace ID the object belongs to.", + "type": "string" + } + }, + "required": [ + "id", + "tags", + "title", + "type", + "usageCount", + "workspaceId" + ], + "type": "object" + }, + "TrendingObjectsResult": { + "properties": { + "objects": { + "items": { + "$ref": "#/components/schemas/TrendingObjectItem" + }, + "type": "array" + } + }, + "required": [ + "objects" + ], + "type": "object" + }, "TriggerAutomationRequest": { "properties": { "automation": { @@ -36406,6 +36609,39 @@ ] } }, + "/api/v1/actions/ai/llmProvider/listModels": { + "post": { + "description": "Lists models available on an LLM provider with a full definition. For Azure AI Foundry providers, the model family will be set to UNKNOWN because the endpoint does not expose the family.", + "operationId": "listLlmProviderModels", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListLlmProviderModelsRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListLlmProviderModelsResponse" + } + } + }, + "description": "OK" + } + }, + "summary": "List LLM Provider Models", + "tags": [ + "Smart Functions", + "actions" + ] + } + }, "/api/v1/actions/ai/llmProvider/test": { "post": { "description": "Tests LLM provider connectivity with a full definition.", @@ -36439,6 +36675,39 @@ ] } }, + "/api/v1/actions/ai/llmProvider/{llmProviderId}/listModels": { + "post": { + "description": "Lists models available on an existing LLM provider by its ID. For Azure AI Foundry providers, the model family will be set to UNKNOWN because the endpoint does not expose the family.", + "operationId": "listLlmProviderModelsById", + "parameters": [ + { + "in": "path", + "name": "llmProviderId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListLlmProviderModelsResponse" + } + } + }, + "description": "OK" + } + }, + "summary": "List LLM Provider Models By Id", + "tags": [ + "Smart Functions", + "actions" + ] + } + }, "/api/v1/actions/ai/llmProvider/{llmProviderId}/test": { "post": { "description": "Tests an existing LLM provider connectivity by its ID.", @@ -36453,6 +36722,15 @@ } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TestLlmProviderByIdRequest" + } + } + } + }, "responses": { "200": { "content": { @@ -38344,6 +38622,41 @@ ] } }, + "/api/v1/actions/workspaces/{workspaceId}/ai/analyticsCatalog/trendingObjects": { + "get": { + "description": "Returns a list of trending objects for this workspace", + "operationId": "trendingObjects", + "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/TrendingObjectsResult" + } + } + }, + "description": "OK" + } + }, + "summary": "Get Trending Analytics Catalog Objects", + "tags": [ + "Smart Functions", + "actions" + ] + } + }, "/api/v1/actions/workspaces/{workspaceId}/ai/chat": { "post": { "description": "(BETA) Combines multiple use cases such as search, create visualizations, ...", @@ -42982,6 +43295,44 @@ } } }, + "/api/v1/ailake/services/{serviceId}/status": { + "get": { + "description": "(BETA) Returns the status of a service in the organization's AI Lake. The status is controller-specific (e.g., available commands, readiness).", + "operationId": "getAiLakeServiceStatus", + "parameters": [ + { + "in": "path", + "name": "serviceId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetServiceStatusResponse" + } + } + }, + "description": "AI Lake service status successfully retrieved" + } + }, + "summary": "(BETA) Get AI Lake service status", + "tags": [ + "AI Lake" + ], + "x-gdc-security-info": { + "description": "Permissions required to get AI Lake service status.", + "permissions": [ + "MANAGE" + ] + } + } + }, "/api/v1/entities/admin/cookieSecurityConfigurations/{id}": { "get": { "operationId": "getEntity@CookieSecurityConfigurations", diff --git a/schemas/gooddata-automation-client.json b/schemas/gooddata-automation-client.json index cb4e6ec33..29b8da5eb 100644 --- a/schemas/gooddata-automation-client.json +++ b/schemas/gooddata-automation-client.json @@ -1383,9 +1383,9 @@ }, "emptyValueHandling": { "enum": [ - "INCLUDE", - "EXCLUDE", - "ONLY" + "include", + "exclude", + "only" ], "type": "string" }, diff --git a/schemas/gooddata-export-client.json b/schemas/gooddata-export-client.json index 59f86d5ed..b7af02e16 100644 --- a/schemas/gooddata-export-client.json +++ b/schemas/gooddata-export-client.json @@ -836,9 +836,9 @@ }, "emptyValueHandling": { "enum": [ - "INCLUDE", - "EXCLUDE", - "ONLY" + "include", + "exclude", + "only" ], "type": "string" }, diff --git a/schemas/gooddata-metadata-client.json b/schemas/gooddata-metadata-client.json index baaa8cc58..1a4725d43 100644 --- a/schemas/gooddata-metadata-client.json +++ b/schemas/gooddata-metadata-client.json @@ -5479,8 +5479,8 @@ "$ref": "#/components/schemas/AzureFoundryProviderAuth" }, "endpoint": { - "description": "Azure AI inference endpoint URL.", - "example": "https://my-resource.services.ai.azure.com/models", + "description": "Azure OpenAI endpoint URL.", + "example": "https://my-resource.openai.azure.com", "maxLength": 255, "type": "string" }, @@ -5938,9 +5938,9 @@ }, "emptyValueHandling": { "enum": [ - "INCLUDE", - "EXCLUDE", - "ONLY" + "include", + "exclude", + "only" ], "type": "string" }, @@ -9061,6 +9061,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -20746,7 +20747,8 @@ "MISTRAL", "AMAZON", "GOOGLE", - "COHERE" + "COHERE", + "UNKNOWN" ], "type": "string" }, @@ -20855,7 +20857,8 @@ "MISTRAL", "AMAZON", "GOOGLE", - "COHERE" + "COHERE", + "UNKNOWN" ], "type": "string" }, @@ -21004,7 +21007,8 @@ "MISTRAL", "AMAZON", "GOOGLE", - "COHERE" + "COHERE", + "UNKNOWN" ], "type": "string" }, @@ -23179,6 +23183,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -23278,6 +23283,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -23417,6 +23423,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -24922,6 +24929,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -25021,6 +25029,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -27276,6 +27285,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -27375,6 +27385,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -27540,6 +27551,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -27639,6 +27651,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE", @@ -28050,10 +28063,9 @@ "$ref": "#/components/schemas/OpenAiProviderAuth" }, "baseUrl": { - "default": "https://api.openai.com", + "default": "https://api.openai.com/v1", "description": "Custom base URL for OpenAI API.", "maxLength": 255, - "nullable": true, "type": "string" }, "organization": { @@ -29132,6 +29144,7 @@ "EXPORT_RESULT_POLLING_TIMEOUT_SECONDS", "MAX_ZOOM_LEVEL", "SORT_CASE_SENSITIVE", + "SORT_COLLATION", "METRIC_FORMAT_OVERRIDE", "ENABLE_AI_ON_DATA", "API_ENTITIES_DEFAULT_CONTENT_MEDIA_TYPE",