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 62133a4..48aa451 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): """ @@ -324,15 +324,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 @@ -489,7 +490,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 = {}