[lc_ldap] bury devient méthode à part entière (ça pourrait servir), delete est fragmentée

* Par défaut, on préfère que le binding crashe si des enfants d'un adhérent ne sont pas
 des machines et ne sont pas gérés par le binding que de les détruire
 * objet.delete ne permet donc par défaut que de détruire l'objet, et pour proprio, on
 surcharge pour détruire les machines
This commit is contained in:
Pierre-Elliott Bécue 2013-05-08 02:20:03 +02:00
parent b5a6062c44
commit 0cee8dbcb6

View file

@ -163,7 +163,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
self.dn = None
self.droits = []
def ressucite(self, ldif_file, login=current_user):
def ressuscite(self, ldif_file, login=current_user):
ldif={}
for line in open(ldif_file).readlines():
line = line.split(':',1)
@ -175,7 +175,8 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
try:
if self.search(dn=dn):
raise ValueError ('objet existant: %s' % dn)
except ldap.NO_SUCH_OBJECT: pass
except ldap.NO_SUCH_OBJECT:
pass
obj = new_cransldapobject(self, dn, mode='rw', ldif=ldif)
obj.history_add(login, u"resurrection")
return obj
@ -569,7 +570,6 @@ class CransLdapObject(object):
# Requête LDAP de création de l'objet
self.conn.add_s(self.dn, modlist)
def delete(self, comm="", login=current_user):
def bury(self, comm, login):
self.history_add(login, u"destruction (%s)" % comm)
self.save()
@ -585,20 +585,13 @@ class CransLdapObject(object):
f.write(ldif.encode("UTF-8"))
f.close()
def delete(self, comm="", login=current_user):
if self.mode not in ['w', 'rw']:
raise EnvironmentError("Objet en lecture seule, réessayer en lecture/écriture")
if not self.may_be(deleted, self.conn.droits):
raise EnvironmentError("Vous n'avez pas le droit de supprimer %s." % self.dn)
ref = [ r[0] for r in self.conn.search_s(self.dn, 2) ]
ref.reverse()
for dn in ref:
if dn == self.dn: bury(self, comm, login)
else:
obj = new_cransldapobject(self.conn, dn, self.mode)
bury(obj, comm, login)
for dn in ref:
self.conn.delete_s(dn)
self.bury(comm, login)
self.conn.delete_s(self.dn)
def save(self):
"""Sauvegarde dans la base les modifications apportées à l'objet.
@ -875,6 +868,16 @@ class proprio(CransLdapObject):
m._proprio = self
return self._machines
def delete(self, comm="", login=current_user):
if self.mode not in ['w', 'rw']:
raise EnvironmentError("Objet en lecture seule, réessayer en lecture/écriture")
if not self.may_be(deleted, self.conn.droits):
raise EnvironmentError("Vous n'avez pas le droit de supprimer %s." % self.dn)
for machine in self.machines():
machine.delete(comm, login)
self.bury(comm, login)
self.conn.delete_s(self.dn)
class machine(CransLdapObject):
u""" Une machine """
can_be_by = { created: [attributs.nounou, attributs.bureau, attributs.cableur, attributs.parent],