pour "supprimer" quelqu'un dans la note, c'est-à-dire anonymiser le compte.
"""
-# from commands import getstatusoutput as ex
from pretty_print import sql_pretty_print as spp
import psycopg2, psycopg2.extras
-print "\e[1;31mAttention, je ne supprime rien, je ne fais que transformer en Erreur,Erreur...\e[0m"
+class NonZeroError(ValueError):
+ """Erreur levée en cas de tentative de suppression d'un compte de solde non nul."""
+ def __init__(self):
+ super(NonZeroError, self).__init__("Solde du compte non-nul")
-debut=raw_input("Premier id : ")
-debut=int(debut)
-fin=raw_input("Dernier id (vide pour 1 seul) : ")
-if fin=="":
- fin=debut
-else:
- fin=int(fin)
+def getcursor():
+ """Ouvre une connexion à la base de données."""
+ con = psycopg2.connect(database="bde")
+ cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
+ return con, cur
-con = psycopg2.connect(database="bde")
-cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor)
+def get_comptes(debut, fin):
+ """Récupère les comptes entre début et fin."""
+ con, cur = getcursor()
+ cur.execute("SELECT * FROM adherents WHERE numcbde>=%s AND numcbde<=%s ORDER BY numcbde;", (debut,fin))
+ l = cur.fetchall()
+ return l
-cur.execute("SELECT * FROM adherents WHERE numcbde>=%s AND numcbde<=%s ORDER BY numcbde;", (debut,fin))
-l = cur.fetchall()
+def check_impossibles(l):
+ """On ne peut pas "supprimer" un compte dont le solde est non nul."""
+ paspossibles = [i for i in l if i["solde"]!=0]
+ if len(paspossibles) > 0:
+ 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]))
+ raise NonZeroError
-paspossibles = [i for i in l if i["solde"]!=0]
-if len(paspossibles)>0:
- 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]))
- exit(1)
-
-
-print spp(l, ["numcbde", "nom", "prenom", "pseudo", "solde"])
-
-ans=raw_input("""Êtes-vous sûr de vouloir les "supprimer" ? """)
-if ans in ["oui","o","O","OUI","Y","y","YES","yes"]:
+def supprime(debut, fin):
+ """Supprime les comptes de numcbde entre ``debut`` et ``fin`` (compris)."""
+ l = get_comptes(debut, fin)
+ check_impossibles(l)
+ con, cur = getcursor()
cur.execute("""UPDATE adherents
SET prenom='Erreur', nom='Erreur', sexe='E', pseudo=numcbde,
passwd='!', section='', adresse='', email='nobody@crans.org',
normalien='t', numsecu='' WHERE numcbde>=%s AND numcbde<=%s;
""" % (debut, fin))
cur.execute("COMMIT;")
- print "Et bim !"
-else:
- print "Nothing Done"
+
+def interactive():
+ """Exécute le script de manière interactive."""
+ print "\e[1;31mAttention, je ne supprime rien, je ne fais que transformer en Erreur,Erreur...\e[0m"
+
+ debut = raw_input("Premier id : ")
+ debut = int(debut)
+ fin = raw_input("Dernier id (vide pour 1 seul) : ")
+ if fin == "":
+ fin = debut
+ else:
+ fin = int(fin)
+
+ l = get_comptes(debut, fin)
+ print spp(l, ["numcbde", "nom", "prenom", "pseudo", "solde"])
+
+ ans=raw_input("""Êtes-vous sûr de vouloir les "supprimer" ? """)
+ if ans in ["oui","o","O","OUI","Y","y","YES","yes"]:
+ try:
+ supprime(debut, fin)
+ except NonZeroError:
+ exit(1)
+ print "Et bim !"
+ else:
+ print "Nothing Done"
+
+if __name__ == "__main__":
+ interactive()