From 88ffb2f347373a807e75c9726d99a284fa1a7bba Mon Sep 17 00:00:00 2001 From: Vincent Le Gallic Date: Sun, 25 Nov 2012 22:41:57 +0100 Subject: [PATCH] =?UTF-8?q?On=20peut=20d=C3=A9sormais=20utiliser=20objet.n?= =?UTF-8?q?om=20de=20la=20m=C3=AAme=20mani=C3=A8re=20que=20objet["nom"]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lc_ldap.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/lc_ldap.py b/lc_ldap.py index 2a1457a..5607ced 100644 --- a/lc_ldap.py +++ b/lc_ldap.py @@ -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")