[*] Corrections pour les blacklistes, ajout de la méthode blacklist actif, pgsql_test

This commit is contained in:
Antoine Durand-gasselin 2011-02-26 23:21:47 +01:00
parent 1363c37f69
commit 014292eaaf
2 changed files with 33 additions and 13 deletions

View file

@ -275,8 +275,8 @@ class CransLdapObject(object):
self.dn, self.attrs = res[0]
self.attrs = ldif_to_uldif(self.attrs)
self.attrs = ldif_to_cldif(self.attrs, conn, check_ctxt = False)
if mode in ['w', 'rw']:
self.attrs = ldif_to_cldif(self.attrs, conn, check_ctxt = False)
### Vérification que `λv. str(Attr(v))` est bien une projection
oldif = res[0][1]
nldif = cldif_to_ldif(self.attrs)
@ -289,7 +289,7 @@ class CransLdapObject(object):
nvals = [nldif[attr][v.index(v)] for v in vals ]
raise EnvironmentError("λv. str(Attr(v)) n'est peut-être pas une projection:", attr, nvals, vals)
self._modifs = ldif_to_cldif(self.attrs, conn, check_ctxt = False)
self._modifs = ldif_to_cldif(ldif_to_uldif(res[0][1]), conn, check_ctxt = False)
def save(self):
"Vérifie que self._modifs contient des valeurs correctes et enregistre les modifications"
@ -302,8 +302,16 @@ class CransLdapObject(object):
# Vérification des modifications
self.attrs = ldif_to_uldif(self.conn.search_s(self.dn, 0)[0][1])
if self.attrs != self._modifs:
raise EnvironmentError("Les modifications apportées à l'objet %s n'ont pas été correctement sauvegardées\nexpected = %s, found = %s" % (self.dn, self._modifs, self.attrs))
self.attrs = ldif_to_cldif(self.attrs, self.conn, check_ctxt=False)
differences = []
# On fait les différences entre les deux dicos
for attr in set(self.attrs.keys()).union(set(self._modifs.keys())):
exp_vals = set([unicode(i) for i in self.attrs.get(attr,[])])
new_vals = set([unicode(i) for i in self._modifs.get(attr,[])])
if exp_vals != new_vals:
differences.append({"missing": exp_vals - new_vals, "having": new_vals - exp_vals})
if differences:
raise EnvironmentError("Les modifications apportées à l'objet %s n'ont pas été correctement sauvegardées\n%s" % (self.dn, differences))
def get_modlist(self):
"""Renvoie le dico des modifs"""
@ -371,7 +379,14 @@ class CransLdapObject(object):
out.append(u"%s : [%s] %s" % (date, author, u" ; ".join(mod_list)))
return out
def blacklist(self, sanction, commentaire, debut=time.time(), fin = '-'):
def blacklist_actif(self):
"""Renvoie la liste des blacklistes actives sur l'entité"""
# XXX - Proposer de filtrer les blacklistes avec un arg supplémentaire ?
# XXX - Vérifier les blacklistes des machines pour les adhérents ?
attrs = (self.attrs if self.mode not in ["w", "rw"] else self._modifs)
return filter((lambda bl: bl.is_actif()), attrs.get("blacklist"))
def blacklist(self, sanction, commentaire, debut="now", fin = '-'):
u"""
Blacklistage de la ou de toutes la machines du propriétaire
* debut et fin sont le nombre de secondes depuis epoch
@ -381,10 +396,10 @@ class CransLdapObject(object):
debut$fin$sanction$commentaire
"""
if debut == 'now':
debut = time.time()
debut = int(time.time())
if fin == 'now':
fin = time.time()
bl = blacklist(u'%s$%s$%s$%s' % (sanction, commentaire, debut, fin), {}, self.conn, False)
fin = int(time.time())
bl = blacklist(u'%s$%s$%s$%s' % (debut, fin, sanction, commentaire), {}, self.conn, False)
self._modifs.setdefault('blacklist', []).append(bl)