Skip to content

Commit 56e68f3

Browse files
feat: refactor logical filters and add tests (#17)
1 parent 4a3d123 commit 56e68f3

File tree

2 files changed

+24
-11
lines changed

2 files changed

+24
-11
lines changed

nocodb/filters/logical.py

+3-11
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,20 @@ def __init__(self, *filters: List[WhereFilter]):
77
self.__filters = filters
88

99
def get_where(self) -> str:
10-
return (
11-
"("
12-
+ "~or".join([filter.get_where() for filter in self.__filters])
13-
+ ")"
14-
)
10+
return f"({'~or'.join([filter.get_where() for filter in self.__filters])})"
1511

1612

1713
class And(WhereFilter):
1814
def __init__(self, *filters: List[WhereFilter]):
1915
self.__filters = filters
2016

2117
def get_where(self) -> str:
22-
return (
23-
"("
24-
+ "~and".join([filter.get_where() for filter in self.__filters])
25-
+ ")"
26-
)
18+
return f"({'~and'.join([filter.get_where() for filter in self.__filters])})"
2719

2820

2921
class Not(WhereFilter):
3022
def __init__(self, filter: WhereFilter):
3123
self.__filter = filter
3224

3325
def get_where(self) -> str:
34-
return "~not" + self.__filter.get_where()
26+
return f"~not{self.__filter.get_where()}"

nocodb/filters/logical_test.py

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from nocodb import filters
2+
3+
4+
def test_or_with_two_filters():
5+
filter1 = filters.EqFilter("column1", "value1")
6+
filter2 = filters.EqFilter("column2", "value2")
7+
or_filter = filters.Or(filter1, filter2)
8+
assert or_filter.get_where() == "((column1,eq,value1)~or(column2,eq,value2))"
9+
10+
11+
def test_and_with_two_filters():
12+
filter1 = filters.And(filters.EqFilter("column1", "value1"))
13+
filter2 = filters.And(filters.EqFilter("column2", "value2"))
14+
and_filter = filters.And(filter1, filter2)
15+
assert and_filter.get_where() == "(((column1,eq,value1))~and((column2,eq,value2)))"
16+
17+
18+
def test_not_filter():
19+
filter = filters.EqFilter("column", "value")
20+
not_filter = filters.Not(filter)
21+
assert not_filter.get_where() == "~not(column,eq,value)"

0 commit comments

Comments
 (0)