[attributs, objets] Une fonction pour générer automatiquement une ligne d'historique
Elle s'appelle history_gen. Il faut l'appeler explicitement pour le moment, pour éviter de mettre des lignes en double vu que jusqu'à maintenant, historique était fait à la main. Il y a 4 niveaux d'historique pour les attributs : * full on loggue toutes les modifications pour un singlevalue : nom (Durant -> Dupond") pour les autres : mailAlias+toto@free.fr-titi@orange.com * partial, comme full sauf qu'on limite la longeur de chaque valeur d'attribut à au plus 15 caractères * info, on signalute juste que l'attribut attribut a été créer, supprimer ou modifier: * None, on n'ajoute pas de ligne (par exemple pour l'historique lui même, on le loggue pas ses modifications) Ajoutez en d'autre si vous pensez à des trucs cools
This commit is contained in:
parent
f6fe2f78e5
commit
8477760302
2 changed files with 92 additions and 1 deletions
84
objets.py
84
objets.py
|
@ -299,9 +299,91 @@ class CransLdapObject(object):
|
|||
assert isinstance(chain, unicode)
|
||||
|
||||
new_line = u"%s, %s : %s" % (time.strftime(attributs.historique.FORMAT), login, chain)
|
||||
# Attention, le __setitem__ est surchargé, mais pas .append sur l'historique
|
||||
self["historique"] = self.get("historique", []) + [new_line]
|
||||
|
||||
def history_gen(self, attr=None, login=None):
|
||||
"Génère une ligne d'historique pour l'arribut attr ou une ligne par attributs pour l'objet courant"
|
||||
if attr is None:
|
||||
for attr in self.attrs.keys():
|
||||
self.history_gen(attr)
|
||||
def partial_name(name, max_len=14, start=7, end=7):
|
||||
if len(name) > max_len:
|
||||
return "%s…%s" % (name[:start], name[-end:])
|
||||
else:
|
||||
return name
|
||||
if login is None:
|
||||
login = self.conn.current_login
|
||||
if isinstance(attr, str) or isinstance(attr, unicode):
|
||||
attr = attributs.AttributeFactory.get(attr)
|
||||
elif isinstance(attr, Attr):
|
||||
attr = type(attr)
|
||||
elif issubclass(attr, Attr):
|
||||
pass
|
||||
else:
|
||||
raise ValueError("%r ne correspont pas a un attribut" % attr)
|
||||
if not attr.historique:
|
||||
return
|
||||
if attr.historique not in ["full", "partial", "info"]:
|
||||
raise ValueError("Format d'historique %s inconnu" % attr.historique)
|
||||
old_values = self.attrs[attr.ldap_name]
|
||||
new_values = self._modifs[attr.ldap_name]
|
||||
if old_values == new_values:
|
||||
return
|
||||
comm = None
|
||||
if attr.singlevalue:
|
||||
# modification
|
||||
if old_values and new_values:
|
||||
if attr.historique == "full":
|
||||
comm = u"%s (%s -> %s)" % (attr.ldap_name, old_values[0], new_values[0])
|
||||
elif attr.historique == "partial":
|
||||
old = partial_name(str(old_values[0]))
|
||||
new = partial_name(str(new_values[0]))
|
||||
comm = u"%s (%s -> %s)" % (attr.ldap_name, old, new)
|
||||
elif attr.historique == "info":
|
||||
comm = u"%s" % attr.ldap_name
|
||||
# création
|
||||
elif not old_values and new_values:
|
||||
if attr.historique == "info":
|
||||
comm = u"+%s" % attr.ldap_name
|
||||
elif attr.historique in ["full", "partial"]:
|
||||
new = str(new_values[0])
|
||||
if attr.historique == "partial":
|
||||
new = partial_name(new)
|
||||
comm = u"%s+%s" % (attr.ldap_name, new)
|
||||
# suppréssion
|
||||
elif not new_values and old_values:
|
||||
if attr.historique == "info":
|
||||
comm = u"-%s" % attr.ldap_name
|
||||
elif attr.historique in ["full", "partial"]:
|
||||
old = str(old_values[0])
|
||||
if attr.historique == "partial":
|
||||
old = partial_name(old)
|
||||
comm = u"%s-%s" % (attr.ldap_name, old)
|
||||
else:
|
||||
added = []
|
||||
deleted = []
|
||||
if attr.historique == "partial":
|
||||
append = lambda x: partial_name(str(x))
|
||||
else:
|
||||
append = lambda x: str(x)
|
||||
for a in new_values:
|
||||
if not a in old_values:
|
||||
added.append(append(a))
|
||||
for a in old_values:
|
||||
if not a in new_values:
|
||||
deleted.append(append(a))
|
||||
if attr.historique == "info":
|
||||
comm = u"%s%s%s" % ('+' if added else "", '-' if deleted else "", attr.ldap_name)
|
||||
elif attr.historique in ["full", "partial"]:
|
||||
comm = u"%s%s%s%s%s" % (attr.ldap_name, '+' if added else "", '+'.join(added), '-' if deleted else "", '-'.join(deleted))
|
||||
|
||||
if comm:
|
||||
new_line = u"%s, %s : %s" % (time.strftime(attributs.historique.FORMAT), login, comm)
|
||||
if not new_line in self["historique"]:
|
||||
self["historique"].append(new_line)
|
||||
else:
|
||||
raise ValueError("impossible de générer l'historique pour %s %s %s" % (attr, old_values, new_values))
|
||||
|
||||
def _check_optionnal(self, comment):
|
||||
"""Vérifie que les attributs qui ne sont pas optionnels sont effectivement peuplés."""
|
||||
objet = self.ldap_name
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue