[objets.setitem] Varification de l'unicité de l'attribut sur l'objet

Sinon ldap il est pas content
This commit is contained in:
Valentin Samir 2014-02-26 10:27:02 +01:00
parent 8fd2be80c8
commit 06ea17715b

View file

@ -501,17 +501,25 @@ class CransLdapObject(object):
# (on peut pas utiliser self._modifs, car il ne faut # (on peut pas utiliser self._modifs, car il ne faut
# faire le changement que si on peut) # faire le changement que si on peut)
attrs_before_verif = [ attributs.attrify(val, attr, self.conn, Parent=self) for val in values ] attrs_before_verif = [ attributs.attrify(val, attr, self.conn, Parent=self) for val in values ]
# 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) self._check_setitem(attr, attrs_before_verif)
if attr in self.attrs.keys():
# 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: for attribut in attrs_before_verif:
attribut.check_uniqueness([unicode(content) for content in self.attrs[attr]]) 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 # On groupe les attributs précédents, et les nouveaux
mixed_attrs = attrs_before_verif + self.attrs[attr] mixed_attrs = attrs_before_verif + old_attrs
else:
for attribut in attrs_before_verif:
attribut.check_uniqueness([])
mixed_attrs = attrs_before_verif
# Si c'est vide, on fait pas de vérifs, on avait une liste # Si c'est vide, on fait pas de vérifs, on avait une liste
# vide avant, puis on en a une nouvelle après. # vide avant, puis on en a une nouvelle après.
if mixed_attrs: if mixed_attrs: