Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions gooddata-sdk/gooddata_sdk/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,7 @@
AllTimeFilter,
AttributeFilter,
Filter,
InlineFilter,
MetricValueFilter,
NegativeAttributeFilter,
PositiveAttributeFilter,
Expand Down
37 changes: 37 additions & 0 deletions gooddata-sdk/gooddata_sdk/compute/model/filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
from importlib.util import find_spec
from typing import Optional, Union

from gooddata_api_client.model.inline_filter_definition_inline import InlineFilterDefinitionInline

if find_spec("icu") is not None:
from icu import Locale, SimpleDateFormat # type: ignore[import-not-found]

Expand Down Expand Up @@ -503,3 +505,38 @@ def description(self, labels: dict[str, str], format_locale: Optional[str] = Non
return (
f"{self.operator.capitalize()} {self.value}{dimensionality_str} {labels.get(metric_ids[0], metric_ids[0])}"
)


class InlineFilter(Filter):
"""Filter using a custom MAQL expression.

Automatically decides, whether to create or update.

Args:
maql (str): The MAQL expression string that defines the filter condition.

Example:
```python
from gooddata_sdk import InlineFilter
from gooddata_pandas import GoodPandas

gp = GoodPandas.create_from_profile()
factory = gp.data_frames("demo")

filter_by = InlineFilter('{label/region} = "West"')

factory.not_indexed(columns=dict(order_amount="metric/order_amount"), filter_by=filter_by)
```
"""

def __init__(self, maql: str):
super().__init__()

self.maql = maql

def is_noop(self) -> bool:
return False

def as_api_model(self) -> afm_models.InlineFilterDefinition:
body = InlineFilterDefinitionInline(self.maql)
return afm_models.InlineFilterDefinition(body, _check_type=False)
Loading