diff options
author | Lars Wirzenius <liw@liw.fi> | 2019-03-23 15:16:45 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2019-03-23 15:16:45 +0200 |
commit | 8aa0dc8aceeb8520b52a8488021eee156b91f1f1 (patch) | |
tree | 77aa057385602cfc2402cef8d33c5b53b9af925e | |
parent | cadf0af1a130fb6d24ecf6a826145ae392cd3516 (diff) | |
download | effitool-8aa0dc8aceeb8520b52a8488021eee156b91f1f1.tar.gz |
Change: inverted searches
-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) |