Skip to content

Commit acabd7d

Browse files
authored
Merge pull request #1004 from hkad98/jkd/inline-filter
feat: add InlineFilter support to PythonSDK
2 parents 3a83ea2 + 714ffab commit acabd7d

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

gooddata-sdk/gooddata_sdk/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@
231231
AllTimeFilter,
232232
AttributeFilter,
233233
Filter,
234+
InlineFilter,
234235
MetricValueFilter,
235236
NegativeAttributeFilter,
236237
PositiveAttributeFilter,

gooddata-sdk/gooddata_sdk/compute/model/filter.py

+37
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
from importlib.util import find_spec
66
from typing import Optional, Union
77

8+
from gooddata_api_client.model.inline_filter_definition_inline import InlineFilterDefinitionInline
9+
810
if find_spec("icu") is not None:
911
from icu import Locale, SimpleDateFormat # type: ignore[import-not-found]
1012

@@ -503,3 +505,38 @@ def description(self, labels: dict[str, str], format_locale: Optional[str] = Non
503505
return (
504506
f"{self.operator.capitalize()} {self.value}{dimensionality_str} {labels.get(metric_ids[0], metric_ids[0])}"
505507
)
508+
509+
510+
class InlineFilter(Filter):
511+
"""Filter using a custom MAQL expression.
512+
513+
Automatically decides, whether to create or update.
514+
515+
Args:
516+
maql (str): The MAQL expression string that defines the filter condition.
517+
518+
Example:
519+
```python
520+
from gooddata_sdk import InlineFilter
521+
from gooddata_pandas import GoodPandas
522+
523+
gp = GoodPandas.create_from_profile()
524+
factory = gp.data_frames("demo")
525+
526+
filter_by = InlineFilter('{label/region} = "West"')
527+
528+
factory.not_indexed(columns=dict(order_amount="metric/order_amount"), filter_by=filter_by)
529+
```
530+
"""
531+
532+
def __init__(self, maql: str):
533+
super().__init__()
534+
535+
self.maql = maql
536+
537+
def is_noop(self) -> bool:
538+
return False
539+
540+
def as_api_model(self) -> afm_models.InlineFilterDefinition:
541+
body = InlineFilterDefinitionInline(self.maql)
542+
return afm_models.InlineFilterDefinition(body, _check_type=False)

0 commit comments

Comments
 (0)