]> gitweb.pimeys.fr Git - scripts-20-100.git/blob - bde/supprimer_quelquun.py
[bde/supprimer] Structuration du code : on peut maintenant l'importer
[scripts-20-100.git] / bde / supprimer_quelquun.py
1 #!/usr/bin/python
2 # -*- coding:utf8 -*-
3
4 """ Codé par 20-100
5 pour "supprimer" quelqu'un dans la note, c'est-à-dire anonymiser le compte.
6 """
7
8 from pretty_print import sql_pretty_print as spp
9 import psycopg2, psycopg2.extras
10
11 class NonZeroError(ValueError):
12 """Erreur levée en cas de tentative de suppression d'un compte de solde non nul."""
13 def __init__(self):
14 super(NonZeroError, self).__init__("Solde du compte non-nul")
15
16 def getcursor():
17 """Ouvre une connexion à la base de données."""
18 con = psycopg2.connect(database="bde")
19 cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
20 return con, cur
21
22 def get_comptes(debut, fin):
23 """Récupère les comptes entre début et fin."""
24 con, cur = getcursor()
25 cur.execute("SELECT * FROM adherents WHERE numcbde>=%s AND numcbde<=%s ORDER BY numcbde;", (debut,fin))
26 l = cur.fetchall()
27 return l
28
29 def check_impossibles(l):
30 """On ne peut pas "supprimer" un compte dont le solde est non nul."""
31 paspossibles = [i for i in l if i["solde"]!=0]
32 if len(paspossibles) > 0:
33 print "\e[1;31mJe supprimerai pas quelqu'un dont le solde n'est pas nul : %s\e[0m" % (",".join([str(adh["numcbde"]) for adh in paspossibles]))
34 raise NonZeroError
35
36 def supprime(debut, fin):
37 """Supprime les comptes de numcbde entre ``debut`` et ``fin`` (compris)."""
38 l = get_comptes(debut, fin)
39 check_impossibles(l)
40 con, cur = getcursor()
41 cur.execute("""UPDATE adherents
42 SET prenom='Erreur', nom='Erreur', sexe='E', pseudo=numcbde,
43 passwd='!', section='', adresse='', email='nobody@crans.org',
44 droits=0, surdroits=0, supreme='f', bloque='t', fonction='',
45 mail_info=0, club='f', telephone='', theme='UNI', pbsante='',
46 normalien='t', numsecu='' WHERE numcbde>=%s AND numcbde<=%s;
47 """ % (debut, fin))
48 cur.execute("COMMIT;")
49
50 def interactive():
51 """Exécute le script de manière interactive."""
52 print "\e[1;31mAttention, je ne supprime rien, je ne fais que transformer en Erreur,Erreur...\e[0m"
53
54 debut = raw_input("Premier id : ")
55 debut = int(debut)
56 fin = raw_input("Dernier id (vide pour 1 seul) : ")
57 if fin == "":
58 fin = debut
59 else:
60 fin = int(fin)
61
62 l = get_comptes(debut, fin)
63 print spp(l, ["numcbde", "nom", "prenom", "pseudo", "solde"])
64
65 ans=raw_input("""Êtes-vous sûr de vouloir les "supprimer" ? """)
66 if ans in ["oui","o","O","OUI","Y","y","YES","yes"]:
67 try:
68 supprime(debut, fin)
69 except NonZeroError:
70 exit(1)
71 print "Et bim !"
72 else:
73 print "Nothing Done"
74
75 if __name__ == "__main__":
76 interactive()