diff options
-rwxr-xr-x | effitool | 20 |
1 files changed, 20 insertions, 0 deletions
@@ -314,12 +314,27 @@ class ContainsCond(SearchCond): return pattern in value +class NotContainsCond(SearchCond): + + def op(self, value, pattern): + return pattern not in value + + class RegexCond(SearchCond): def op(self, value, pattern): return re.search(pattern, value) +class Invert(SearchCond): + + def __init__(self, cond): + self._cond = cond + + def matches(self, member): + return not self._cond.matches(member) + + class CondFactory: _pairs = [ @@ -330,6 +345,11 @@ class CondFactory: def parse(self, cond): for op, klass in self._pairs: + inv_op = '!' + op + if inv_op in cond: + field, pattern = cond.split(inv_op, 1) + return Invert(klass(field, pattern)) + if op in cond: field, pattern = cond.split(op, 1) return klass(field, pattern) |