On peut désormais utiliser objet.nom de la même manière que objet["nom"]

This commit is contained in:
Vincent Le Gallic 2012-11-25 22:41:57 +01:00
parent fd97ff0940
commit 88ffb2f347

View file

@ -393,6 +393,18 @@ class CransLdapObject(object):
except KeyError:
return default
def __getattribute__(self, attr):
"""Essentiellement un wrapper pour __getitem__
On peut donc utiliser objet.attributLdap de la même manière que objet.["attributLdap"]"""
# hack
try:
return super(CransLdapObject, self).__getattribute__(attr)
except AttributeError:
try:
return self.__getitem__(attr)
except KeyError:
raise AttributeError(u"'%s' object has no attribute '%s'" % (self.__class__.__name__, attr))
def __getitem__(self, attr):
if self.mode in [ 'w', 'rw' ]:
return [ v for v in self._modifs[attr] ]
@ -407,6 +419,15 @@ class CransLdapObject(object):
return attr in self.ofields or attr in self.xfields or\
attr in self.ufields or attr in self.mfields
def __setattr__(self, attr, value):
"""Essentiellement un wrapper pour __setitem__
On peut donc utiliser objet.attributLdap = bidule de la même manière que objet.["attributLdap"] = bidule"""
# On n'utilise __setiitem__ que si l'attributLdap existe déjà
if self.has_key(attr):
return self.__setitem__(attr, value)
else:
return object.__setattr__(self, attr, value)
def __setitem__(self, attr, values):
if self.mode not in ['w', 'rw']:
raise ValueError("Objet en lecture seule")