Skip to content

Commit 92bbdf8

Browse files
committed
feat: add support for slides export
JIRA: F1-1268 risk: low
1 parent fdf4f48 commit 92bbdf8

File tree

3 files changed

+64
-2
lines changed

3 files changed

+64
-2
lines changed

gooddata-sdk/gooddata_sdk/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
ExportCustomOverride,
6767
ExportRequest,
6868
ExportSettings,
69+
SlidesExportRequest,
6970
VisualExportRequest,
7071
)
7172
from gooddata_sdk.catalog.filter_by import CatalogFilterBy

gooddata-sdk/gooddata_sdk/catalog/export/request.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
# (C) 2023 GoodData Corporation
2-
from typing import Optional
2+
from typing import Literal, Optional
33

44
from attrs import define
55
from gooddata_api_client.model.custom_label import CustomLabel as ApiCustomLabel
66
from gooddata_api_client.model.custom_metric import CustomMetric as ApiCustomMetric
77
from gooddata_api_client.model.custom_override import CustomOverride as ApiCustomOverride
88
from gooddata_api_client.model.settings import Settings as ApiSettings
9+
from gooddata_api_client.model.slides_export_request import SlidesExportRequest as SlidesExportRequestApi
910
from gooddata_api_client.model.tabular_export_request import TabularExportRequest
1011
from gooddata_api_client.model.visual_export_request import VisualExportRequest as VisualExportRequestApi
1112

@@ -121,3 +122,31 @@ def client_class() -> type[VisualExportRequestApi]:
121122
type[TabularExportRequest]: VisualExportRequest class
122123
"""
123124
return VisualExportRequestApi
125+
126+
127+
@define(auto_attribs=True, kw_only=True)
128+
class SlidesExportRequest(Base):
129+
"""
130+
SlidesExportRequest class is used to create a slide export request in the desired format, filename, and settings.
131+
Attributes:
132+
dashboard_id (str): Dashboard identifier.
133+
file_name (str): File name to be used for retrieving the PDF document.
134+
metadata (Optional[Dict[str, bool]]): Optional dictionary containing settings for the export request.
135+
"""
136+
137+
file_name: str
138+
format: Literal["PDF", "PPTX"]
139+
dashboard_id: Optional[str] = None
140+
widget_ids: Optional[list[str]] = None
141+
visualization_ids: Optional[list[str]] = None
142+
metadata: Optional[dict] = None
143+
templateId: Optional[str] = None
144+
145+
@staticmethod
146+
def client_class() -> type[SlidesExportRequestApi]:
147+
"""
148+
Returns the appropriate client class for the visual export request.
149+
Returns:
150+
type[SlidesExportRequestApi]: SlidesExportRequestApi class
151+
"""
152+
return SlidesExportRequestApi

gooddata-sdk/gooddata_sdk/catalog/export/service.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44
from typing import Any, Callable, Optional, Union
55

66
from gooddata_api_client.exceptions import NotFoundException
7+
from gooddata_api_client.model.slides_export_request import SlidesExportRequest as SlidesExportRequestApi
78
from gooddata_api_client.model.tabular_export_request import TabularExportRequest
89
from gooddata_api_client.model.visual_export_request import VisualExportRequest
910

1011
from gooddata_sdk.catalog.catalog_service_base import CatalogServiceBase
1112
from gooddata_sdk.catalog.export.request import (
1213
ExportRequest,
1314
ExportSettings,
15+
SlidesExportRequest,
1416
)
1517
from gooddata_sdk.client import GoodDataApiClient
1618
from gooddata_sdk.visualization import VisualizationService
@@ -140,7 +142,7 @@ def _dashboard_id_exists(self, workspace_id: str, dashboard_id: str) -> bool:
140142
def _export_common(
141143
self,
142144
workspace_id: str,
143-
request: Union[VisualExportRequest, TabularExportRequest],
145+
request: Union[VisualExportRequest, TabularExportRequest, SlidesExportRequestApi],
144146
file_path: Path,
145147
create_func: Callable,
146148
get_func: Callable,
@@ -314,3 +316,33 @@ def export_tabular_by_visualization_id(
314316
retry=retry,
315317
max_retry=max_retry,
316318
)
319+
320+
def export_slides(
321+
self,
322+
workspace_id: str,
323+
request: SlidesExportRequest,
324+
store_path: Union[str, Path] = Path.cwd(),
325+
timeout: float = 60.0,
326+
retry: float = 0.2,
327+
max_retry: float = 5.0,
328+
) -> None:
329+
"""
330+
Exports slides based on slide export request.
331+
332+
Args:
333+
workspace_id (str): The workspace id from which the visualization is to be exported.
334+
request (SlidesExportRequest): The request object containing the export parameters.
335+
store_path (Union[str, Path], optional): The path to store the exported file. Default to Path.cwd().
336+
timeout (float, optional): The maximum time to wait for the export to finish. Defaults to 60.0.
337+
retry (float, optional):
338+
Initial wait time (in seconds) before retrying to get the exported content. Defaults to 0.2.
339+
max_retry (float, optional): The maximum retry wait time (in seconds). Defaults to 5.0.
340+
341+
Returns:
342+
None
343+
"""
344+
store_path = store_path if isinstance(store_path, Path) else Path(store_path)
345+
file_path = store_path / f"{request.file_name}.{request.format.lower()}"
346+
create_func = self._actions_api.create_slides_export
347+
get_func = self._actions_api.get_slides_export
348+
self._export_common(workspace_id, request.to_api(), file_path, create_func, get_func, timeout, retry, max_retry)

0 commit comments

Comments
 (0)