[lc_ldap, attributs] less Attrs doivent pouvoir accéder à conn
This commit is contained in:
parent
72e7f49f6c
commit
d69d651282
2 changed files with 10 additions and 14 deletions
14
attributs.py
14
attributs.py
|
@ -51,7 +51,7 @@ def validate_mac(value):
|
||||||
"""Vérifie qu'une adresse mac est valide"""
|
"""Vérifie qu'une adresse mac est valide"""
|
||||||
return True
|
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.
|
"""Transforme un n'importe quoi en Attr.
|
||||||
|
|
||||||
Doit effectuer les normalisations et sanity check si un str ou un
|
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):
|
if isinstance(val, Attr):
|
||||||
return val
|
return val
|
||||||
else:
|
else:
|
||||||
return CRANS_ATTRIBUTES[attr](val, ldif, ctxt_check)
|
return CRANS_ATTRIBUTES[attr](val, ldif, conn, ctxt_check)
|
||||||
|
|
||||||
class Attr(object):
|
class Attr(object):
|
||||||
legend = "Human-readable description of attribute"
|
legend = "Human-readable description of attribute"
|
||||||
singlevalue = None
|
singlevalue = None
|
||||||
optional = 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.
|
"""Crée un nouvel objet représentant un attribut.
|
||||||
|
|
||||||
val: valeur de l'attribut
|
val: valeur de l'attribut
|
||||||
|
@ -78,6 +79,7 @@ class Attr(object):
|
||||||
ctxt_check: effectue les validations
|
ctxt_check: effectue les validations
|
||||||
"""
|
"""
|
||||||
self.value = None
|
self.value = None
|
||||||
|
self.conn = conn
|
||||||
assert isinstance(val, unicode)
|
assert isinstance(val, unicode)
|
||||||
self.parse_value(val)
|
self.parse_value(val)
|
||||||
if ctxt_check:
|
if ctxt_check:
|
||||||
|
@ -106,12 +108,6 @@ class Attr(object):
|
||||||
if not self.optional and len(values) == 0:
|
if not self.optional and len(values) == 0:
|
||||||
raise ValueError('%s doit avoir au moins une valeur' % self.__class__)
|
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):
|
def _check_uniqueness(self):
|
||||||
"""Vérifie l'unicité dans la base de la valeur (mailAlias, chbre,
|
"""Vérifie l'unicité dans la base de la valeur (mailAlias, chbre,
|
||||||
etc...)"""
|
etc...)"""
|
||||||
|
|
10
lc_ldap.py
10
lc_ldap.py
|
@ -62,7 +62,7 @@ def ldif_to_uldif(ldif):
|
||||||
uldif[attr] = [ unicode(val, 'utf-8') for val in vals ]
|
uldif[attr] = [ unicode(val, 'utf-8') for val in vals ]
|
||||||
return uldif
|
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
|
"""Transforme un dictionnaire renvoyé par python-ldap, en
|
||||||
un dictionnaire dont les valeurs sont des instances de Attr
|
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
|
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 = {}
|
cldif = {}
|
||||||
for attr, vals in ldif.items():
|
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
|
return cldif
|
||||||
|
|
||||||
def cldif_to_ldif(cldif):
|
def cldif_to_ldif(cldif):
|
||||||
|
@ -182,7 +182,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
|
||||||
def _create_entity(self, dn, uldif):
|
def _create_entity(self, dn, uldif):
|
||||||
'''Crée une nouvelle entité ldap en dn, avec attributs ldif:
|
'''Crée une nouvelle entité ldap en dn, avec attributs ldif:
|
||||||
uniquement en unicode'''
|
uniquement en unicode'''
|
||||||
cldif = ldif_to_cldif(uldif)
|
cldif = ldif_to_cldif(uldif, self)
|
||||||
#lock = CransLock(self)
|
#lock = CransLock(self)
|
||||||
for item in ['aid', 'uid', 'chbre', 'mailAlias', 'canonicalAlias',
|
for item in ['aid', 'uid', 'chbre', 'mailAlias', 'canonicalAlias',
|
||||||
'fid', 'cid', 'mid', 'macAddress', 'host', 'hostAlias' ]:
|
'fid', 'cid', 'mid', 'macAddress', 'host', 'hostAlias' ]:
|
||||||
|
@ -255,7 +255,7 @@ class CransLdapObject(object):
|
||||||
|
|
||||||
self.attrs = ldif_to_uldif(self.attrs)
|
self.attrs = ldif_to_uldif(self.attrs)
|
||||||
if mode in ['w', 'rw']:
|
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
|
### Vérification que `λv. str(Attr(v))` est bien une projection
|
||||||
oldif = res[0][1]
|
oldif = res[0][1]
|
||||||
|
@ -319,7 +319,7 @@ class CransLdapObject(object):
|
||||||
# On attrify
|
# On attrify
|
||||||
cldif = self.attrs.copy()
|
cldif = self.attrs.copy()
|
||||||
cldif[attr] = new_vals
|
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
|
# Si ça passe, on effectue les modifications
|
||||||
old_vals = [ str(val) for val in self.attrs.get(attr, []) ]
|
old_vals = [ str(val) for val in self.attrs.get(attr, []) ]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue