diff --git a/objets.py b/objets.py index 15301be..d0cf589 100644 --- a/objets.py +++ b/objets.py @@ -501,17 +501,25 @@ class CransLdapObject(object): # (on peut pas utiliser self._modifs, car il ne faut # faire le changement que si on peut) attrs_before_verif = [ attributs.attrify(val, attr, self.conn, Parent=self) for val in values ] - self._check_setitem(attr, attrs_before_verif) - if attr in self.attrs.keys(): - for attribut in attrs_before_verif: - attribut.check_uniqueness([unicode(content) for content in self.attrs[attr]]) - # On groupe les attributs précédents, et les nouveaux - mixed_attrs = attrs_before_verif + self.attrs[attr] - else: - for attribut in attrs_before_verif: - attribut.check_uniqueness([]) - mixed_attrs = attrs_before_verif + # Methode de vérification diverse ayant pour but d'être surcharger + # par les classes enfants. Ainsi, elle ne touche pas à __setitem__ + # qui est assez sensible. + self._check_setitem(attr, attrs_before_verif) + + # Vérification que (attr, value) est localement unique et + # si attr doit être globalement unique, l'unicité globale + # Dans ce cas, on ne tiens pas compte de old_attrs cas ils + # vont être effacé si le setitem réussi + old_attrs = self[attr] + for attribut in attrs_before_verif: + if attrs_before_verif.count(attribut) > 1: + raise ValueError("%s en double\n(%s)" % (attribut.legend if attribut.legend else attr, attribut)) + attribut.check_uniqueness(old_attrs) + + # On groupe les attributs précédents, et les nouveaux + mixed_attrs = attrs_before_verif + old_attrs + # Si c'est vide, on fait pas de vérifs, on avait une liste # vide avant, puis on en a une nouvelle après. if mixed_attrs: