diff --git a/attributs.py b/attributs.py index 3cfe827..ed5b39d 100644 --- a/attributs.py +++ b/attributs.py @@ -102,9 +102,14 @@ class AttrsDict(dict) : values = super(AttrsDict, self).__getitem__(attr) if not isinstance(values, list): values = [ values ] - values = [ attrify(unicode(val, 'utf-8'), attr, self._ldif, self._conn, self._check_ctxt) for val in values if not isinstance(val, Attr)] - self[attr] = values - return values + output = [] + for val in values: + if not isinstance(val, Attr): + output.append(attrify(unicode(val, 'utf-8'), attr, self._ldif, self._conn, self._check_ctxt)) + else: + output.append(val) + self[attr] = output + return output def get(self, value, default_value): try: diff --git a/lc_ldap.py b/lc_ldap.py index 30df756..d7177d7 100644 --- a/lc_ldap.py +++ b/lc_ldap.py @@ -468,8 +468,7 @@ class CransLdapObject(object): self.attrs = attributs.AttrsDict(conn, ldif, check_ctxt = False) else: self.attrs = ldif - self._modifs = ldif_to_uldif(ldif) - self._modifs = ldif_to_cldif(self._modifs, conn, check_ctxt = False) + self._modifs = attributs.AttrsDict(conn, ldif, check_ctxt = False) orig = ldif elif dn != base_dn: @@ -485,7 +484,7 @@ class CransLdapObject(object): # Pour test en cas de mode w ou rw orig = res[0][1] - self._modifs = ldif_to_cldif(ldif_to_uldif(res[0][1]), conn, check_ctxt = False) + self._modifs = attributs.AttrsDict(conn, res[0][1], check_ctxt = False) # Je m'interroge sur la pertinence de cette partie, je pense qu'elle n'est # pas utile. -- PEB 27/01/2013 @@ -503,8 +502,6 @@ class CransLdapObject(object): nvals = [nldif[attr][v.index(v)] for v in vals ] raise EnvironmentError("λv. str(Attr(v)) n'est peut-être pas une projection (ie non idempotente):", attr, nvals, vals) - - # def _get_fields(self): # """Renvoie la liste des champs LDAP de l'objet""" # return self.attribs @@ -547,8 +544,7 @@ class CransLdapObject(object): raise EnvironmentError("Impossible de modifier l'objet, peut-être n'existe-t-il pas ?") # Vérification des modifications - self.attrs = ldif_to_uldif(self.conn.search_s(self.dn, 0)[0][1]) - self.attrs = ldif_to_cldif(self.attrs, self.conn, check_ctxt=False) + self.attrs = attributs.AttrDict(conn, self.conn.search_s(self.dn, 0)[0][1], check_ctxt=False) differences = [] # On fait les différences entre les deux dicos for attr in set(self.attrs.keys()).union(set(self._modifs.keys())):