From 06ea17715b9a826799fbc18da3651673f35dc017 Mon Sep 17 00:00:00 2001 From: Valentin Samir Date: Wed, 26 Feb 2014 10:27:02 +0100 Subject: [PATCH] =?UTF-8?q?[objets.setitem]=20Varification=20de=20l'unicit?= =?UTF-8?q?=C3=A9=20de=20l'attribut=20sur=20l'objet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sinon ldap il est pas content --- objets.py | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) 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: