From d69d651282ea672d7f324378979c1f4c74f81e3a Mon Sep 17 00:00:00 2001 From: Antoine Durand-Gasselin Date: Sat, 16 Oct 2010 17:38:52 +0200 Subject: [PATCH] =?UTF-8?q?[lc=5Fldap,=20attributs]=20less=20Attrs=20doive?= =?UTF-8?q?nt=20pouvoir=20acc=C3=A9der=20=C3=A0=20conn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- attributs.py | 14 +++++--------- lc_ldap.py | 10 +++++----- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/attributs.py b/attributs.py index 3d5d214..0817e98 100644 --- a/attributs.py +++ b/attributs.py @@ -51,7 +51,7 @@ def validate_mac(value): """Vérifie qu'une adresse mac est valide""" return True -def attrify(val, attr, ldif, ctxt_check = True): +def attrify(val, attr, ldif, conn, ctxt_check = True): """Transforme un n'importe quoi en Attr. Doit effectuer les normalisations et sanity check si un str ou un @@ -63,14 +63,15 @@ def attrify(val, attr, ldif, ctxt_check = True): if isinstance(val, Attr): return val else: - return CRANS_ATTRIBUTES[attr](val, ldif, ctxt_check) + return CRANS_ATTRIBUTES[attr](val, ldif, conn, ctxt_check) class Attr(object): legend = "Human-readable description of attribute" singlevalue = None optional = None + conn = None - def __init__(self, val, ldif, ctxt_check): + def __init__(self, val, ldif, conn, ctxt_check): """Crée un nouvel objet représentant un attribut. val: valeur de l'attribut @@ -78,6 +79,7 @@ class Attr(object): ctxt_check: effectue les validations """ self.value = None + self.conn = conn assert isinstance(val, unicode) self.parse_value(val) if ctxt_check: @@ -106,12 +108,6 @@ class Attr(object): if not self.optional and len(values) == 0: raise ValueError('%s doit avoir au moins une valeur' % self.__class__) - def _check_type(self, values): - """Vérifie que les valeurs ont le bon type (nom est un mot, tel - est un nombre, etc...)""" - for val in values: - assert isinstance(val, unicode) - def _check_uniqueness(self): """Vérifie l'unicité dans la base de la valeur (mailAlias, chbre, etc...)""" diff --git a/lc_ldap.py b/lc_ldap.py index 3ed6a59..6ebbc8e 100644 --- a/lc_ldap.py +++ b/lc_ldap.py @@ -62,7 +62,7 @@ def ldif_to_uldif(ldif): uldif[attr] = [ unicode(val, 'utf-8') for val in vals ] return uldif -def ldif_to_cldif(ldif, check_ctxt = True): +def ldif_to_cldif(ldif, conn, check_ctxt = True): """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 @@ -70,7 +70,7 @@ def ldif_to_cldif(ldif, check_ctxt = True): """ cldif = {} for attr, vals in ldif.items(): - cldif[attr] = [ attrify(val, attr, ldif, check_ctxt = check_ctxt) for val in vals] + cldif[attr] = [ attrify(val, attr, ldif, conn, check_ctxt = check_ctxt) for val in vals] return cldif def cldif_to_ldif(cldif): @@ -182,7 +182,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject): def _create_entity(self, dn, uldif): '''Crée une nouvelle entité ldap en dn, avec attributs ldif: uniquement en unicode''' - cldif = ldif_to_cldif(uldif) + cldif = ldif_to_cldif(uldif, self) #lock = CransLock(self) for item in ['aid', 'uid', 'chbre', 'mailAlias', 'canonicalAlias', 'fid', 'cid', 'mid', 'macAddress', 'host', 'hostAlias' ]: @@ -255,7 +255,7 @@ class CransLdapObject(object): self.attrs = ldif_to_uldif(self.attrs) if mode in ['w', 'rw']: - self.attrs = ldif_to_cldif(self.attrs, check_ctxt = False) + self.attrs = ldif_to_cldif(self.attrs, conn, check_ctxt = False) ### Vérification que `λv. str(Attr(v))` est bien une projection oldif = res[0][1] @@ -319,7 +319,7 @@ class CransLdapObject(object): # On attrify cldif = self.attrs.copy() cldif[attr] = new_vals - new_vals = [ attrify(val, attr, cldif) for val in new_vals ] + new_vals = [ attrify(val, attr, cldif, conn) for val in new_vals ] # Si ça passe, on effectue les modifications old_vals = [ str(val) for val in self.attrs.get(attr, []) ]