From af109e8c61485b2754b41bd83c17a5c502680249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Elliott=20B=C3=A9cue?= Date: Sun, 5 May 2013 10:45:15 +0200 Subject: [PATCH] =?UTF-8?q?[lc=5Fldap]=20attrify=20ne=20re=C3=A7oit=20plus?= =?UTF-8?q?=20de=20ldif,=20donc=20=5Fcreate=5Fentity=20doit=20changer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On en profite pour virer ldif_to_cldif, et pour donner une fonction .items à AttrsDict --- attributs.py | 4 ++++ lc_ldap.py | 34 +++++++++++++++++----------------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/attributs.py b/attributs.py index 3e2c439..92231cf 100644 --- a/attributs.py +++ b/attributs.py @@ -103,6 +103,7 @@ class AttrsDict(dict) : super(AttrsDict, self).__init__(ldif) self._conn = conn self._parent = Parent + self._iterator = None def __getitem__(self, attr): values = super(AttrsDict, self).__getitem__(attr) @@ -134,6 +135,9 @@ class AttrsDict(dict) : except KeyError: return default_value + def items(self): + return [(key, self[key]) for key in self] + class Attr(object): """Objet représentant un attribut. diff --git a/lc_ldap.py b/lc_ldap.py index d2f7d90..e5860dc 100644 --- a/lc_ldap.py +++ b/lc_ldap.py @@ -105,16 +105,16 @@ def ldif_to_uldif(ldif): uldif[attr] = [ unicode(val, 'utf-8') for val in vals ] return uldif -def ldif_to_cldif(ldif, conn): - """Transforme un dictionnaire renvoyé par python-ldap, en - un dictionnaire dont les valeurs sont des instances de Attr - Lorsqu'on récupère le ldif de la base ldap, on n'a pas besoin - de faire de tests... - """ - cldif = {} - for attr, vals in ldif.items(): - cldif[attr] = [ attributs.attrify(val, attr, conn, ldif) for val in vals] - return cldif +#def ldif_to_cldif(ldif, conn): +# """Transforme un dictionnaire renvoyé par python-ldap, en +# un dictionnaire dont les valeurs sont des instances de Attr +# Lorsqu'on récupère le ldif de la base ldap, on n'a pas besoin +# de faire de tests... +# """ +# cldif = {} +# for attr, vals in ldif.items(): +# cldif[attr] = [ attributs.attrify(val, attr, conn, ldif) for val in vals] +# return cldif def cldif_to_ldif(cldif): """ @@ -307,15 +307,16 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object): --Non implémenté !""" raise NotImplementedError() - def _create_entity(self, dn, uldif): - '''Crée une nouvelle entité ldap en ``dn``, avec attributs ``ldif``: - uniquement en unicode''' + def _create_entity(self, dn, ldif): + '''Crée une nouvelle entité ldap avec le dn ``dn`` et les + attributs de ``ldif``. Attention, ldif doit contenir des + données encodées.''' # Conversion en cldif pour vérification des valeurs - cldif = ldif_to_cldif(uldif, self) + cldif = attributs.AttrsDict(self, ldif, Parent=None) # Conversion en ascii - ldif = cldif_to_ldif(cldif) + data = cldif_to_ldif(cldif) # Renvoi du CransLdapObject - return new_cransldapobject(self, dn, 'rw', ldif) + return new_cransldapobject(self, dn, 'rw', data) def _find_id(self, attr, plage=None): '''Trouve un id libre. Si une plage est fournie, cherche @@ -472,7 +473,6 @@ class CransLdapObject(object): # est dans la base. On attrify paresseusement au moment où on utilise un attribut self._modifs = None # C'est là qu'on met les modifications - self._modifs_unchecked = [] self.dn = dn orig = {}