summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xeffitool20
1 files changed, 20 insertions, 0 deletions
diff --git a/effitool b/effitool
index af1e5ce..b41eea7 100755
--- a/effitool
+++ b/effitool
@@ -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)