
Ignore-this: 199e9ff5f09e1fe600c1066179f4e47b Ce patch est un test, il ne restera en prod que si ça fonctionne. L'idée est qu'on souhaiterait conserver les vieilles machines comme les vieux adhérents, sauf demande explicite de suppression, par ailleurs, l'association mid <=> ip est très utile pour pas mal de choses. Pour la conserver, on crée un identifiant rid, qui supplante le mid, qui est lui choisi comme l'aid ou le fid, en incrémentant. Ce patch vise à implémenter cela. S'il génère des bugs, il subira un rollback. darcs-hash:20130123021650-b6762-347428d75f066f7f4821ca067d8c9bb6a4396bf5.gz
94 lines
2.6 KiB
Python
94 lines
2.6 KiB
Python
#! /usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
Restauration d'un objet précédement détruit dans la base.
|
|
|
|
Copyright (C) Frédéric Pauget
|
|
Licence : GPLv2
|
|
|
|
Attention, ce fichier est osbolète
|
|
"""
|
|
|
|
import cPickle, sys
|
|
|
|
import config
|
|
from whos import aff
|
|
from affich_tools import prompt
|
|
from gest_crans import modif_adher, set_machine, modif_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 <fichier>" % 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(u'Appuyez sur ENTREE pour continuer')
|
|
adh._data['mail'] = []
|
|
modif_adher(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(u"Ratacher la machine à un [C]lub ou un [A]dhérent ?")
|
|
t = t.lower()
|
|
if t in 'ac' :
|
|
i = prompt(u"Entrez l'%sid auquel ratacher la machine : %sid =" % (t,t) )
|
|
machine.dn = '%sid=%s,%s' % (t, i, machine.dn.split(',',1)[1] )
|
|
except :
|
|
pass
|
|
set_machine(machine)
|
|
|
|
def restore_club(club) :
|
|
modif_club(club)
|
|
|
|
# Restauration ?
|
|
q = prompt(u'Restaurer cette entrée ? [O/N]')
|
|
if q not in 'oO' :
|
|
sys.exit(0)
|
|
|
|
obj.connect() # Reconnection à la base LDAP
|
|
if obj.idn == 'aid' :
|
|
restore_adher(obj)
|
|
elif obj.idn == 'mid' :
|
|
restore_machine(obj)
|
|
elif obj.idn == 'cid' :
|
|
restore_club(obj)
|