restore.py 2.81 KB
Newer Older
1
#! /usr/bin/env python
2
# -*- mode: python; coding: utf-8 -*-
3 4

"""
5
Restauration d'un objet précédement détruit dans la base.
6

7
Copyright (C) Frédéric Pauget
8
Licence : GPLv2
9 10

Attention, ce fichier est osbolète
11 12 13
"""

import cPickle, sys
Daniel STAN's avatar
Daniel STAN committed
14 15 16 17
if '/usr/scripts' not in sys.path:
    sys.path.append('/usr/scripts')
from cranslib.deprecated import module as dep_module
dep_module('ressucite or ressucite_lc')
18 19 20 21

import config
from whos import aff
from affich_tools import prompt
pauget's avatar
pauget committed
22
from gest_crans import modif_adher, set_machine, modif_club
23 24 25
from ldap_crans import mailexist

def load(file) :
26
    """ Charge l'objet (adhérent, machine ou club contenu dans le fichier fourni """
27
    try :
bernat's avatar
bernat committed
28
        fd=open(file,'rb')
29
    except :
30
        print "Impossible d'ouvrir le fichier demandé."
bernat's avatar
bernat committed
31
        sys.exit(1)
32

33 34 35
    obj = cPickle.load(fd)

    try :
36
        # Si machine vérif si le proprio est encore dans la base
bernat's avatar
bernat committed
37 38 39
        test_proprio = obj.proprietaire()
        if test_proprio.Nom() != obj.proprio :
            raise
40
        # Propriétaire encore dans la base => on récupère les infos de la base
bernat's avatar
bernat committed
41
        del obj.proprio
42
    except :
bernat's avatar
bernat committed
43
        pass
44 45 46 47

    ### Modifs pour permettre une restauration
    # On supprime les infos de aid, mid ou cid
    obj.dn = obj.dn.split(',',1)[1]
48

49 50
    # On supprime les infos du init_data
    obj._init_data={}
51

52 53 54 55
    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]
56
    print "Restauration ou visualisation d'un objet précédement détruit dans la base."
57 58 59 60 61 62 63 64
    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()) :
65 66
        print "AVERTISSEMENT : le login %s à déja été réattribué." % adh.compte()
        print "                il faudra recréer un compte avec un login différent"
pauget's avatar
pauget committed
67
        prompt(u'Appuyez sur ENTREE pour continuer')
bernat's avatar
bernat committed
68
        adh._data['mail'] = []
pauget's avatar
pauget committed
69
    modif_adher(adh)
70

71 72
def restore_machine(machine) :
    try :
73 74 75
        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 ?")
bernat's avatar
bernat committed
76 77
        t = t.lower()
        if t in 'ac' :
pauget's avatar
pauget committed
78
            i = prompt(u"Entrez l'%sid auquel ratacher la machine : %sid =" % (t,t) )
bernat's avatar
bernat committed
79
            machine.dn = '%sid=%s,%s' % (t, i, machine.dn.split(',',1)[1] )
80
    except :
bernat's avatar
bernat committed
81
        pass
82 83 84
    set_machine(machine)

def restore_club(club) :
pauget's avatar
pauget committed
85
    modif_club(club)
86

87
# Restauration ?
88
q = prompt(u'Restaurer cette entrée ? [O/N]')
89 90
if q not in 'oO' :
    sys.exit(0)
91

92
obj.connect() # Reconnection à la base LDAP
93 94 95 96 97 98
if obj.idn == 'aid' :
    restore_adher(obj)
elif obj.idn == 'mid' :
    restore_machine(obj)
elif obj.idn == 'cid' :
    restore_club(obj)