[cimetiere] Le module cimetiere est stateless et ne dépend pas d'une connection ldap

On ajoute une fonction ppour chercher dans le cimetière à la classe lc_ldap : gravedig
This commit is contained in:
Valentin Samir 2013-11-18 00:44:48 +01:00
parent 2a6f5d6a9a
commit c0054a070c
2 changed files with 15 additions and 9 deletions

View file

@ -1,12 +1,9 @@
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import os import os
import lc_ldap
import shortcuts
import filter2 as filter import filter2 as filter
conn=shortcuts.lc_ldap_admin()
cimetiere_root = '/home/cimetiere_lc' cimetiere_root = '/home/cimetiere_lc'
def find_in_filter(lf, key): def find_in_filter(lf, key):
@ -24,9 +21,9 @@ def find_in_filter(lf, key):
def valide_filter(lf, ldif): def valide_filter(lf, ldif):
if lf: if lf:
if lf[0] == '=': if lf[0] == '=':
return True if [i for i in ldif.get(lf[1], [lf[2]]) if lf[2] in i] else False return True if [i for i in ldif.get(lf[1], [lf[2]]) if lf[2].lower() in i.lower()] else False
elif lf[0] == '!=': elif lf[0] == '!=':
return False if [i for i in ldif.get(lf[1], []) if lf[2] in i] else True return False if [i for i in ldif.get(lf[1], []) if lf[2].lower() in i.lower()] else True
elif lf[0] == '|': elif lf[0] == '|':
return reduce(lambda x,y: x or y, [valide_filter(i, ldif) for i in lf[1:]] + [False, False]) return reduce(lambda x,y: x or y, [valide_filter(i, ldif) for i in lf[1:]] + [False, False])
elif lf[0] == '&': elif lf[0] == '&':
@ -47,7 +44,7 @@ def condition((fdate, ftime, fdn, path), date=None, aid=None, mid=None, fl=None)
if not ("mid=%s," % mid) in fdn: if not ("mid=%s," % mid) in fdn:
return False return False
if fl: if fl:
(dn, ldif)= conn.ressuscite_build_ldif(path) (dn, ldif)= lc_ldap.lc_ldap.ressuscite_build_ldif(path)
return valide_filter(fl, ldif) return valide_filter(fl, ldif)
return True return True
@ -68,5 +65,5 @@ def find(type, fl=None, date=None):
name=os.path.basename(file) name=os.path.basename(file)
(fdate, time, dn) = name.split('_') (fdate, time, dn) = name.split('_')
if condition((fdate, time, dn, file), fl=fl, aid=aid, mid=mid, date=date): if condition((fdate, time, dn, file), fl=fl, aid=aid, mid=mid, date=date):
valid.append(conn.ressuscite(file)) valid.append(file)
return valid return valid

View file

@ -44,6 +44,7 @@ import ldap
## import locaux ## import locaux
import crans_utils import crans_utils
import attributs import attributs
import cimetiere
import objets import objets
import ldap_locks import ldap_locks
import variables import variables
@ -124,7 +125,15 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
self.droits = [] self.droits = []
self._username_given = user self._username_given = user
def ressuscite_build_ldif(self, ldif_file): def gravedig(self, type, filter=None, date=None):
"""Cherche dans le cimetière un objet de type ``type``,
correspondant au filtre ``filter`` entre les dates ``date[0]`` et ``date[1]``
la date est de la forme YYYY-MM-JJ ou - pour l'infini"""
valid=cimetiere.find(type, filter, date)
return [self.ressuscite(item) for item in valid]
@staticmethod
def ressuscite_build_ldif(ldif_file):
ldif={} ldif={}
for line in open(ldif_file).readlines(): for line in open(ldif_file).readlines():
line = line.split(':',1) line = line.split(':',1)