[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 ]
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 # Methode de vérification diverse ayant pour but d'être surcharger
mixed_attrs = attrs_before_verif + self.attrs[attr] # par les classes enfants. Ainsi, elle ne touche pas à __setitem__
else: # qui est assez sensible.
for attribut in attrs_before_verif: self._check_setitem(attr, attrs_before_verif)
attribut.check_uniqueness([])
mixed_attrs = 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 # 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: