#! /usr/bin/env python # -*- coding: iso-8859-15 -*- """ Restauration d'un objet précédement détruit dans la base. Copyright (C) Frédéric Pauget Licence : GPLv2 """ import cPickle, sys import config from whos import aff from affich_tools import prompt from gest_crans import all, set_machine, set_club from ldap_crans import mailexist def load(file) : """ Charge l'objet (adhérent, machine ou club contenu dans le fichier fourni """ try : fd=open(file,'rb') except : print "Impossible d'ouvrir le fichier demandé." sys.exit(1) obj = cPickle.load(fd) try : # Si machine vérif si le proprio est encore dans la base test_proprio = obj.proprietaire() if test_proprio.Nom() != obj.proprio : raise # Propriétaire encore dans la base => on récupère les infos de la base del obj.proprio except : pass ### Modifs pour permettre une restauration # On supprime les infos de aid, mid ou cid obj.dn = obj.dn.split(',',1)[1] # On supprime les infos du init_data obj._init_data={} return obj if '-h' in sys.argv or '--help' in sys.argv or len(sys.argv) != 2 : print "%s " % sys.argv[0].split('/')[-1].split('.')[0] print "Restauration ou visualisation d'un objet précédement détruit dans la base." print "Les fichiers de sauvegarde sont dans %s" % config.cimetiere sys.exit(255) obj = load(sys.argv[1]) aff(obj) def restore_adher(adh) : if adh.compte() and mailexist(adh.compte()) : print "AVERTISSEMENT : le login %s à déja été réattribué." % adh.compte() print " il faudra recréer un compte avec un login différent" prompt('Appuyez sur ENTREE pour continuer') adh._data['mail'] = [] all(adh) def restore_machine(machine) : try : obj.proprio # crash si l'adhérent est encore dans la base # L'adhérent est plus dans la base t = prompt("Ratacher la machine à un [C]lub ou un [A]dhérent ?") t = t.lower() if t in 'ac' : i = prompt("Entrez l'%sid auquel ratacher la machine : %sid =" % (t,t) ) machine.dn = '%sid=%s,%s' % (t, i, machine.dn ) except : pass set_machine(machine) def restore_club(club) : set_club(club) # Restauration ? q = prompt('Restaurer cette entrée ? [O/N]') if q not in 'oO' : sys.exit(0) if obj.idn == 'aid' : restore_adher(obj) elif obj.idn == 'mid' : restore_machine(obj) elif obj.idn == 'cid' : restore_club(obj)