From 516813a551d806bdc7ec81b909b5cd8910ec4258 Mon Sep 17 00:00:00 2001 From: GoodData Automation Date: Tue, 17 Mar 2026 13:25:06 +0000 Subject: [PATCH] feat(gooddata-sdk): [AUTO] add grand_totals_position to ExportSettings Add optional `grand_totals_position` field (Literal enum: pinnedBottom, pinnedTop, bottom, top) to `ExportSettings` to expose the `grandTotalsPosition` setting added in the tabular-exporter OpenAPI spec. Export `GrandTotalsPosition` TypeAlias from the public SDK API surface. Co-Authored-By: Claude Sonnet 4.6 --- .../gooddata-sdk/src/gooddata_sdk/__init__.py | 1 + .../gooddata_sdk/catalog/export/request.py | 5 +++++ .../tests/export/test_export_service.py | 19 +++++++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/packages/gooddata-sdk/src/gooddata_sdk/__init__.py b/packages/gooddata-sdk/src/gooddata_sdk/__init__.py index fba74d7f0..d268f9ebf 100644 --- a/packages/gooddata-sdk/src/gooddata_sdk/__init__.py +++ b/packages/gooddata-sdk/src/gooddata_sdk/__init__.py @@ -76,6 +76,7 @@ ExportCustomOverride, ExportRequest, ExportSettings, + GrandTotalsPosition, SlidesExportRequest, VisualExportRequest, ) diff --git a/packages/gooddata-sdk/src/gooddata_sdk/catalog/export/request.py b/packages/gooddata-sdk/src/gooddata_sdk/catalog/export/request.py index 35ea2d6d2..7cb9cc8a2 100644 --- a/packages/gooddata-sdk/src/gooddata_sdk/catalog/export/request.py +++ b/packages/gooddata-sdk/src/gooddata_sdk/catalog/export/request.py @@ -1,4 +1,6 @@ # (C) 2023 GoodData Corporation +from __future__ import annotations + from typing import Literal from attrs import define @@ -12,6 +14,8 @@ from gooddata_sdk.catalog.base import Base +GrandTotalsPosition = Literal["pinnedBottom", "pinnedTop", "bottom", "top"] + @define(kw_only=True) class ExportCustomLabel(Base): @@ -46,6 +50,7 @@ def client_class() -> type[ApiCustomOverride]: class ExportSettings(Base): merge_headers: bool show_filters: bool + grand_totals_position: GrandTotalsPosition | None = None @staticmethod def client_class() -> type[ApiSettings]: diff --git a/packages/gooddata-sdk/tests/export/test_export_service.py b/packages/gooddata-sdk/tests/export/test_export_service.py index e0d07e3aa..bf5e96c35 100644 --- a/packages/gooddata-sdk/tests/export/test_export_service.py +++ b/packages/gooddata-sdk/tests/export/test_export_service.py @@ -6,6 +6,8 @@ import os from pathlib import Path +import pytest + from gooddata_sdk import ( Attribute, ExecutionDefinition, @@ -13,6 +15,7 @@ ExportCustomMetric, ExportCustomOverride, ExportRequest, + ExportSettings, GoodDataSdk, ObjId, SimpleMetric, @@ -89,6 +92,22 @@ def _tabular_by_visualization_id_base(test_config, export_format: str): _validate_clean(goal_path) +@pytest.mark.parametrize( + "grand_totals_position", + ["pinnedBottom", "pinnedTop", "bottom", "top"], +) +def test_export_settings_grand_totals_position(grand_totals_position): + settings = ExportSettings(merge_headers=True, show_filters=False, grand_totals_position=grand_totals_position) + assert settings.grand_totals_position == grand_totals_position + api_settings = settings.to_api() + assert api_settings.grand_totals_position == grand_totals_position + + +def test_export_settings_grand_totals_position_defaults_to_none(): + settings = ExportSettings(merge_headers=True, show_filters=False) + assert settings.grand_totals_position is None + + @gd_vcr.use_cassette(str(_fixtures_dir / "test_export_csv.yaml")) def test_export_csv(test_config): _tabular_export_base(test_config, "CSV")