D'autre façons de fournir human_to_ldap pour les filtres de recherches
This commit is contained in:
parent
731ee0221b
commit
cb4ac3ca18
2 changed files with 115 additions and 0 deletions
48
filter3.py
Normal file
48
filter3.py
Normal file
|
@ -0,0 +1,48 @@
|
|||
#!/usr/bin/env python
|
||||
"""Plus joli"""
|
||||
|
||||
import pyparsing
|
||||
|
||||
txt = pyparsing.Word("".join(c for c in pyparsing.printables if c not in '=()|&'),exact=1)
|
||||
|
||||
ne = pyparsing.Literal('!=')
|
||||
eq = pyparsing.Literal('=')
|
||||
andop = pyparsing.oneOf('&')
|
||||
orop = pyparsing.oneOf('|')
|
||||
|
||||
expr = pyparsing.operatorPrecedence( txt,
|
||||
[
|
||||
(ne, 2, pyparsing.opAssoc.RIGHT),
|
||||
(eq, 2, pyparsing.opAssoc.RIGHT),
|
||||
(andop, 2, pyparsing.opAssoc.LEFT),
|
||||
(orop, 2, pyparsing.opAssoc.LEFT),]
|
||||
)
|
||||
|
||||
def simplify(l):
|
||||
if not isinstance(l, list):
|
||||
return l
|
||||
if len(l) == 1:
|
||||
return simplify(l[0])
|
||||
else:
|
||||
return [simplify(i) for i in l]
|
||||
|
||||
def toprefix(l):
|
||||
if not isinstance(l, list):
|
||||
return l
|
||||
op=l[1]
|
||||
args=[toprefix(i) for i in l if i!=op]
|
||||
return [op]+args
|
||||
|
||||
def toldapfilter(l):
|
||||
if not isinstance(l, list):
|
||||
return l
|
||||
op=l[0]
|
||||
if op == "=":
|
||||
return "%s=%s" % (l[1], l[2])
|
||||
elif op == "!=":
|
||||
return "!(%s=%s)" % (l[1], l[2])
|
||||
return op + ''.join(['(%s)' % toldapfilter(i) for i in l[1:]])
|
||||
|
||||
def human_to_ldap(str):
|
||||
return "(%s)" % toldapfilter(toprefix(simplify(expr.parseString(str).asList())))
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue