From 43f4ba650a1f2a6a32d3f0699fd78cc9fb1e05b2 Mon Sep 17 00:00:00 2001 From: Valentin Samir Date: Sat, 22 Feb 2014 23:09:29 +0100 Subject: [PATCH] Cas d'un attribut binary MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit C'est un peu moche comme on s'est efforcé que dans lc_ldap tout soit un unicode et que unicode n'a pas de sens pour un objet binaire. Avec le champ python_type = str sur les attributs bianire, ça a tout de même l'air d'aller. --- lc_ldap.py | 9 ++++++++- objets.py | 21 +++++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/lc_ldap.py b/lc_ldap.py index 6641bd8..0402189 100644 --- a/lc_ldap.py +++ b/lc_ldap.py @@ -67,7 +67,14 @@ def ldif_to_uldif(ldif): """ uldif = {} for attr, vals in ldif.items(): - uldif[attr] = [ unicode(val, 'utf-8') for val in vals ] + if attr.endswith(';binary'): + binary = True + attr=attr[:-7] + else: + binary = False + attr_class = attributs.AttributeFactory.get(attr, fallback=attributs.Attr) + binary = binary or attr_class.binary + uldif[attr] = [ unicode(val, 'utf-8') if not binary else val for val in vals ] return uldif class lc_ldap(ldap.ldapobject.LDAPObject, object): diff --git a/objets.py b/objets.py index 8798c61..33aea7a 100644 --- a/objets.py +++ b/objets.py @@ -279,14 +279,21 @@ class CransLdapObject(object): except ldap.NO_SUCH_OBJECT: pass - for attr in self.attrs.keys(): + binary = set() + for attr in self.keys(): for attribut in self[attr]: attribut.check_uniqueness([]) + if self[attr] and self[attr][0].binary: + binary.add(attr) self.history_add(login, u"Inscription") + ldif = self._modifs.to_ldif() + for attr in binary: + ldif['%s;binary' % attr]=ldif[attr] + del(ldif[attr]) # Création de la requête LDAP - modlist = addModlist(self._modifs.to_ldif()) + modlist = addModlist(ldif) # Requête LDAP de création de l'objet try: self.conn.add_s(self.dn, modlist) @@ -405,8 +412,18 @@ class CransLdapObject(object): def get_modlist(self): """Renvoie un dictionnaire des modifications apportées à l'objet""" # unicode -> utf-8 + binary = set() + for attr in self.keys(): + if self[attr] and self[attr][0].binary: + binary.add(attr) + ldif = self._modifs.to_ldif() orig_ldif = self.attrs.to_ldif() + for attr in binary: + ldif['%s;binary' % attr]=ldif[attr] + orig_ldif['%s;binary' % attr]=orig_ldif[attr] + del(ldif[attr]) + del(orig_ldif[attr]) return modifyModlist(orig_ldif, ldif)