storage: add Not criteria (#6108)

This commit is contained in:
Serghei Mihai 2021-10-04 17:52:13 +02:00
parent d9b0f3ba33
commit 29d36a7214
2 changed files with 20 additions and 0 deletions

View File

@ -242,9 +242,11 @@ def test_select():
assert len(Foobar.select([st.Less('unique_value', 26)])) == 25
assert len(Foobar.select([st.Less('unique_value', 25), st.GreaterOrEqual('unique_value', 10)])) == 15
assert len(Foobar.select([st.NotEqual('unique_value', 25)])) == 49
assert len(Foobar.select([st.Not(st.Equal('unique_value', 25))])) == 49
assert len(Foobar.select([st.Contains('unique_value', [24, 25, 26])])) == 3
assert len(Foobar.select([st.Contains('unique_value', [24, 25, 86])])) == 2
assert len(Foobar.select([st.NotContains('unique_value', [24, 25, 86])])) == 48
assert len(Foobar.select([st.Not(st.Contains('unique_value', [24, 25, 86]))])) == 48
def test_select_order_by():
@ -366,6 +368,7 @@ def test_select_criteria_null():
assert len(Foobar.select([st.Null('value')])) == 33
assert len(Foobar.select([st.NotNull('value')])) == 17
assert len(Foobar.select([st.Not(st.Null('value'))])) == 17
def test_select_criteria_ilike():

View File

@ -216,6 +216,23 @@ class Intersects(Criteria):
return func
class Not(Criteria):
def __init__(self, criteria, **kwargs):
self.criteria = criteria
def build_lambda(self):
func = lambda x: False
def combine_callables(x1, x2):
return lambda x: not x2(x)
func = combine_callables(func, self.criteria.build_lambda())
return func
def __repr__(self):
return '<%s (%r)>' % (self.__class__.__name__, self.criteria)
class Or(Criteria):
def __init__(self, criterias, **kwargs):
self.criterias = criterias