Skip to content

Commit b965c08

Browse files
committed
Add 'CONTAINS' filter type to FilterType enum and implement corresponding logic in apply_filter function. Enhance unit tests to validate behavior of the new filter type in FilterSchema.
1 parent 255bdb4 commit b965c08

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

elementary/monitor/data_monitoring/schema.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,23 @@ class ResourceType(str, Enum):
3131
class FilterType(str, Enum):
3232
IS = "is"
3333
IS_NOT = "is_not"
34+
CONTAINS = "contains"
3435

3536

3637
def apply_filter(filter_type: FilterType, value: Any, filter_value: Any) -> bool:
3738
if filter_type == FilterType.IS:
3839
return value == filter_value
3940
elif filter_type == FilterType.IS_NOT:
4041
return value != filter_value
42+
elif filter_type == FilterType.CONTAINS:
43+
return str(filter_value).lower() in str(value).lower()
4144
raise ValueError(f"Unsupported filter type: {filter_type}")
4245

4346

4447
ValueT = TypeVar("ValueT")
4548

4649

47-
ANY_OPERATORS = [FilterType.IS]
50+
ANY_OPERATORS = [FilterType.IS, FilterType.CONTAINS]
4851
ALL_OPERATORS = [FilterType.IS_NOT]
4952

5053

tests/unit/monitor/data_monitoring/test_filter_schema.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,30 @@ def test_filter_schema_apply_filter_on_values_is_not_operator():
4444
def test_filter_schema_invalid_filter_type():
4545
with pytest.raises(ValueError):
4646
FilterSchema(values=["test1"], type="invalid") # type: ignore[arg-type]
47+
48+
49+
def test_filter_schema_contains_operator():
50+
filter_schema = FilterSchema(values=["test"], type=FilterType.CONTAINS)
51+
52+
# Should match when value contains the filter value
53+
assert filter_schema.apply_filter_on_value("test123") is True
54+
assert filter_schema.apply_filter_on_value("123test") is True
55+
assert filter_schema.apply_filter_on_value("123test456") is True
56+
57+
# Should match case-insensitive
58+
assert filter_schema.apply_filter_on_value("TEST123") is True
59+
assert filter_schema.apply_filter_on_value("123TEST") is True
60+
61+
# Should not match when value doesn't contain filter value
62+
assert filter_schema.apply_filter_on_value("123") is False
63+
64+
65+
def test_filter_schema_apply_filter_on_values_contains_operator():
66+
filter_schema = FilterSchema(values=["test1", "test2"], type=FilterType.CONTAINS)
67+
68+
# Should match when any value contains any filter value
69+
assert filter_schema.apply_filter_on_values(["abc_test1_def", "xyz"]) is True
70+
assert filter_schema.apply_filter_on_values(["abc", "xyz_test2"]) is True
71+
72+
# Should not match when no values contain any filter values
73+
assert filter_schema.apply_filter_on_values(["abc", "xyz"]) is False

0 commit comments

Comments
 (0)