scripts/gestion/restore.py
Pierre-Elliott Bécue 2a7dd72069 [Scripts] On rajoute un champ rid qui fait le lien avec les plages d'ip, et on rend le mid strictement croissant.
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
2013-01-23 03:16:50 +01:00

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)