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],