[attributs, objets] Possibilité d'utiliser directement les methodes sur les liste renvoyé par __getitems__ sur un cransLdapObjet

Au lieu d'être obligé de faire à chaque fois obj[attr] = obj[attr] + [val]
on peut faire directement obj[attr].append(val).
Si on affecte obj[attr] à une variable (l=obj[attr])
et que l'on modifie la variable (l.append(val)), a la fois la variable et obj[attr] sont modifié
et maintenue à jour.
Attention toutefois :
 l1 = obj[attr]
 l2 = obj[attr]
 l1 == l2 <=> True

 l1.append(val)
 l1 == obj[attr] <=> True
 l1 == l2 <=> False
 l2 == obj[attr] <=> False

et l2.append(val) lèvera une exception.
This commit is contained in:
Valentin Samir 2014-02-14 02:06:47 +01:00
parent 8739640687
commit 03c45b8889
2 changed files with 54 additions and 3 deletions

View file

@ -396,11 +396,11 @@ class CransLdapObject(object):
def __getitem__(self, attr, default=None):
if self._modifs.has_key(attr) and self.mode in [ 'w', 'rw' ]:
return [ v for v in self._modifs[attr] ]
return attributs.AttrsList(self, attr, [ v for v in self._modifs[attr] ])
elif self.attrs.has_key(attr):
return [ v for v in self.attrs[attr] ]
return attributs.AttrsList(self, attr, [ v for v in self.attrs[attr] ])
elif self.has_key(attr):
return [] if default is None else default
return attributs.AttrsList(self, attr, []) if default is None else default
raise KeyError(attr)
def has_key(self, attr):