Skip to content

Commit b367f4e

Browse files
committed
feat: add api to gooddata-sdk for agg fact
risk: low
1 parent f7d0935 commit b367f4e

File tree

4 files changed

+75
-1
lines changed

4 files changed

+75
-1
lines changed

gooddata-sdk/gooddata_sdk/catalog/identifier.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
)
1717
from gooddata_api_client.model.declarative_user_group_identifier import DeclarativeUserGroupIdentifier
1818
from gooddata_api_client.model.declarative_user_identifier import DeclarativeUserIdentifier
19+
from gooddata_api_client.model.fact_identifier import FactIdentifier
1920
from gooddata_api_client.model.grain_identifier import GrainIdentifier
2021
from gooddata_api_client.model.label_identifier import LabelIdentifier
2122
from gooddata_api_client.model.reference_identifier import ReferenceIdentifier
@@ -82,6 +83,16 @@ def client_class() -> builtins.type[DeclarativeUserIdentifier]:
8283
return DeclarativeUserIdentifier
8384

8485

86+
@attr.s(auto_attribs=True, kw_only=True)
87+
class CatalogFactIdentifier(Base):
88+
id: str
89+
type: str = attr.field(validator=value_in_allowed)
90+
91+
@staticmethod
92+
def client_class() -> builtins.type[FactIdentifier]:
93+
return FactIdentifier
94+
95+
8596
@attr.s(auto_attribs=True, kw_only=True)
8697
class CatalogLabelIdentifier(Base):
8798
id: str

gooddata-sdk/gooddata_sdk/catalog/workspace/content_service.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from gooddata_sdk.catalog.workspace.declarative_model.workspace.logical_model.ldm import CatalogDeclarativeModel
2222
from gooddata_sdk.catalog.workspace.declarative_model.workspace.workspace import LAYOUT_WORKSPACES_DIR
2323
from gooddata_sdk.catalog.workspace.entity_model.content_objects.dataset import (
24+
CatalogAggregatedFact,
2425
CatalogAttribute,
2526
CatalogFact,
2627
CatalogLabel,
@@ -191,6 +192,24 @@ def get_facts_catalog(self, workspace_id: str) -> list[CatalogFact]:
191192
catalog_facts = [CatalogFact.from_api(fact) for fact in facts.data]
192193
return catalog_facts
193194

195+
def get_aggregated_facts_catalog(self, workspace_id: str) -> list[CatalogAggregatedFact]:
196+
"""Retrieve all aggregated facts in a given workspace.
197+
198+
Args:
199+
workspace_id (str):
200+
Workspace identification string e.g. "demo"
201+
202+
Returns:
203+
list[CatalogFact]:
204+
List of all facts in a given workspace.
205+
"""
206+
get_agg_facts = functools.partial(
207+
self._entities_api.get_all_entities_aggregated_facts, workspace_id, _check_return_type=False
208+
)
209+
agg_facts = load_all_entities(get_agg_facts)
210+
catalog_agg_facts = [CatalogAggregatedFact.from_api(agg_fact) for agg_fact in agg_facts.data]
211+
return catalog_agg_facts
212+
194213
def get_dependent_entities_graph(self, workspace_id: str) -> CatalogDependentEntitiesResponse:
195214
"""There are dependencies among all catalog objects, the chain is the following:
196215
`fact/attribute/label → dataset → metric → visualization → dashboard`

gooddata-sdk/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/dataset/dataset.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,24 @@
66

77
import attr
88
from gooddata_api_client.model.data_source_table_identifier import DataSourceTableIdentifier
9+
from gooddata_api_client.model.declarative_aggregated_fact import DeclarativeAggregatedFact
910
from gooddata_api_client.model.declarative_attribute import DeclarativeAttribute
1011
from gooddata_api_client.model.declarative_dataset import DeclarativeDataset
1112
from gooddata_api_client.model.declarative_dataset_sql import DeclarativeDatasetSql
1213
from gooddata_api_client.model.declarative_fact import DeclarativeFact
1314
from gooddata_api_client.model.declarative_label import DeclarativeLabel
1415
from gooddata_api_client.model.declarative_reference import DeclarativeReference
1516
from gooddata_api_client.model.declarative_reference_source import DeclarativeReferenceSource
17+
from gooddata_api_client.model.declarative_source_fact_reference import DeclarativeSourceFactReference
1618
from gooddata_api_client.model.declarative_workspace_data_filter_column import DeclarativeWorkspaceDataFilterColumn
1719

1820
from gooddata_sdk.catalog.base import Base
19-
from gooddata_sdk.catalog.identifier import CatalogGrainIdentifier, CatalogLabelIdentifier, CatalogReferenceIdentifier
21+
from gooddata_sdk.catalog.identifier import (
22+
CatalogFactIdentifier,
23+
CatalogGrainIdentifier,
24+
CatalogLabelIdentifier,
25+
CatalogReferenceIdentifier,
26+
)
2027
from gooddata_sdk.catalog.workspace.declarative_model.workspace.logical_model.data_filter_references import (
2128
CatalogDeclarativeWorkspaceDataFilterReferences,
2229
)
@@ -34,6 +41,7 @@ class CatalogDeclarativeDataset(Base):
3441
description: Optional[str] = None
3542
attributes: Optional[list[CatalogDeclarativeAttribute]] = None
3643
facts: Optional[list[CatalogDeclarativeFact]] = None
44+
aggregated_facts: Optional[list[CatalogDeclarativeAggregatedFact]] = None
3745
data_source_table_id: Optional[CatalogDataSourceTableIdentifier] = None
3846
sql: Optional[CatalogDeclarativeDatasetSql] = None
3947
tags: Optional[list[str]] = None
@@ -86,6 +94,30 @@ def client_class() -> type[DeclarativeFact]:
8694
return DeclarativeFact
8795

8896

97+
@attr.s(auto_attribs=True, kw_only=True)
98+
class CatalogDeclarativeSourceFactReference(Base):
99+
operation: str
100+
reference: CatalogFactIdentifier
101+
102+
@staticmethod
103+
def client_class() -> type[DeclarativeFact]:
104+
return DeclarativeSourceFactReference
105+
106+
107+
@attr.s(auto_attribs=True, kw_only=True)
108+
class CatalogDeclarativeAggregatedFact(Base):
109+
id: str
110+
source_column: str
111+
source_fact_reference: Optional[CatalogDeclarativeSourceFactReference] = None
112+
source_column_data_type: Optional[str] = None
113+
description: Optional[str] = None
114+
tags: Optional[list[str]] = None
115+
116+
@staticmethod
117+
def client_class() -> type[DeclarativeAggregatedFact]:
118+
return DeclarativeAggregatedFact
119+
120+
89121
@attr.s(auto_attribs=True, kw_only=True)
90122
class CatalogDataSourceTableIdentifier(Base):
91123
id: str

gooddata-sdk/gooddata_sdk/catalog/workspace/entity_model/content_objects/dataset.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,18 @@ def as_computable(self) -> Metric:
9999
# TODO - dataset?
100100

101101

102+
@attr.s(auto_attribs=True, kw_only=True)
103+
class CatalogAggregatedFact(AttrCatalogEntity):
104+
@staticmethod
105+
def client_class() -> Any:
106+
return JsonApiFactOut
107+
108+
def as_computable(self) -> Metric:
109+
return SimpleMetric(local_id=self.id, item=self.obj_id)
110+
111+
# TODO - dataset?
112+
113+
102114
@attr.s(auto_attribs=True, kw_only=True)
103115
class CatalogDataset(AttrCatalogEntity):
104116
@property

0 commit comments

Comments
 (0)