diff --git a/pydruid/utils/filters.py b/pydruid/utils/filters.py index 2442304f..73e4ebc7 100644 --- a/pydruid/utils/filters.py +++ b/pydruid/utils/filters.py @@ -32,6 +32,8 @@ class Filter: "bound", "interval", "extraction", + "like", + "search", ) def __init__(self, extraction_function=None, ordering="lexicographic", **args): diff --git a/tests/utils/test_filters.py b/tests/utils/test_filters.py index 69a7c598..8b3d3508 100644 --- a/tests/utils/test_filters.py +++ b/tests/utils/test_filters.py @@ -458,9 +458,45 @@ def test_search_filter(self): } assert actual == expected + def test_search_filter_with_extraction_function(self): + extraction_fn = dimensions.RegexExtraction("([a-b])") + actual = filters.Filter.build_filter( + filters.Filter( + type="search", + dimension="dim", + value="val", + extraction_function=extraction_fn, + ) + ) + expected = { + "type": "search", + "dimension": "dim", + "query": {"type": "contains", "caseSensitive": "false", "value": "val"}, + "extractionFn": {"type": "regex", "expr": "([a-b])"}, + } + assert actual == expected + def test_like_filter(self): actual = filters.Filter.build_filter( filters.Filter(type="like", dimension="dim", pattern="%val%") ) expected = {"type": "like", "dimension": "dim", "pattern": "%val%"} assert actual == expected + + def test_like_filter_with_extraction_function(self): + extraction_fn = dimensions.RegexExtraction("([a-b])") + actual = filters.Filter.build_filter( + filters.Filter( + type="like", + dimension="dim", + pattern="%val%", + extraction_function=extraction_fn, + ) + ) + expected = { + "type": "like", + "dimension": "dim", + "pattern": "%val%", + "extractionFn": {"type": "regex", "expr": "([a-b])"}, + } + assert actual == expected