From 0cee8dbcb628742c30e1d442e80522bd2d738c73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-Elliott=20B=C3=A9cue?= Date: Wed, 8 May 2013 02:20:03 +0200 Subject: [PATCH] =?UTF-8?q?[lc=5Fldap]=20bury=20devient=20m=C3=A9thode=20?= =?UTF-8?q?=C3=A0=20part=20enti=C3=A8re=20(=C3=A7a=20pourrait=20servir),?= =?UTF-8?q?=20delete=20est=20fragment=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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 --- lc_ldap.py | 57 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/lc_ldap.py b/lc_ldap.py index 60e0b1e..70ed9ed 100644 --- a/lc_ldap.py +++ b/lc_ldap.py @@ -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,36 +570,28 @@ class CransLdapObject(object): # Requête LDAP de création de l'objet self.conn.add_s(self.dn, modlist) + def bury(self, comm, login): + self.history_add(login, u"destruction (%s)" % comm) + self.save() + #On produit un ldif + ldif=u"dn: %s\n" % self.dn + for key in self.attrs.keys(): + for value in self.attrs[key]: + ldif+=u"%s: %s\n" % (key, value) + + import datetime + file="%s %s" % (datetime.datetime.now(), self.dn) + f = open('/home/cimetiere_lc/%s/%s' % (self['objectClass'][0],file), 'w') + f.write(ldif.encode("UTF-8")) + f.close() + def delete(self, comm="", login=current_user): - def bury(self, comm, login): - self.history_add(login, u"destruction (%s)" % comm) - self.save() - #On produit un ldif - ldif=u"dn: %s\n" % self.dn - for key in self.attrs.keys(): - for value in self.attrs[key]: - ldif+=u"%s: %s\n" % (key, value) - - import datetime - file="%s %s" % (datetime.datetime.now(), self.dn) - f = open('/home/cimetiere_lc/%s/%s' % (self['objectClass'][0],file), 'w') - f.write(ldif.encode("UTF-8")) - f.close() - 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],