[filter2] Possibilité d'utiliser des < ou > dans les filtres humains

This commit is contained in:
Valentin Samir 2014-03-17 11:39:07 +01:00
parent 72e35bcb32
commit b522b7aa69

View file

@ -21,7 +21,7 @@ def prioritize(l):
if not isinstance(l, list): if not isinstance(l, list):
return l return l
l=simplify(l) l=simplify(l)
for c in ['!=', '=', '&', '|']: for c in ['!=', '<', '>', '=', '&', '|']:
i=0 i=0
while i<len(l): while i<len(l):
if l[i] == c: if l[i] == c:
@ -51,6 +51,10 @@ def toldapfilter(l):
op=l[0] op=l[0]
if op == "=": if op == "=":
return "%s=%s" % (l[1], l[2]) return "%s=%s" % (l[1], l[2])
elif op == "<":
return "!(%s>=%s)" % (l[1], l[2])
elif op == ">":
return "!(%s<=%s)" % (l[1], l[2])
elif op == "!=": elif op == "!=":
return "!(%s=%s)" % (l[1], l[2]) return "!(%s=%s)" % (l[1], l[2])
return op + ''.join(['(%s)' % toldapfilter(i) for i in l[1:]]) return op + ''.join(['(%s)' % toldapfilter(i) for i in l[1:]])
@ -63,8 +67,8 @@ def pypexpr():
if not expr: if not expr:
import pyparsing import pyparsing
unicodePrintables = u''.join(unichr(c) for c in xrange(65536) if not unichr(c).isspace()) unicodePrintables = u''.join(unichr(c) for c in xrange(65536) if not unichr(c).isspace())
txt = "".join(c for c in unicodePrintables if c not in '()&|!=') txt = "".join(c for c in unicodePrintables if c not in '()&|<>!=')
expr = pyparsing.nestedExpr("(", ")", pyparsing.Word(txt) | pyparsing.oneOf("& | != =")) expr = pyparsing.nestedExpr("(", ")", pyparsing.Word(txt) | pyparsing.oneOf("& | < > != ="))
return expr return expr
def human_to_list(data): def human_to_list(data):