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: except KeyError:
return default 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): def __getitem__(self, attr):
if self.mode in [ 'w', 'rw' ]: if self.mode in [ 'w', 'rw' ]:
return [ v for v in self._modifs[attr] ] 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\ return attr in self.ofields or attr in self.xfields or\
attr in self.ufields or attr in self.mfields 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): def __setitem__(self, attr, values):
if self.mode not in ['w', 'rw']: if self.mode not in ['w', 'rw']:
raise ValueError("Objet en lecture seule") raise ValueError("Objet en lecture seule")