+++ /dev/null
-#!/usr/bin/python
-# -*- coding:utf8 -*-
-
-""" Codé par 20-100
- pour "supprimer" quelqu'un dans la note, c'est-à-dire anonymiser le compte.
-"""
-
-from pretty_print import sql_pretty_print as spp
-import psycopg2, psycopg2.extras
-
-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")
-
-def liste_to_sql(l):
- """Renvoie la liste d'entiers en chaîne sql utilisable"""
- assert all([type(i) == int for i in l])
- return "(" + ",".join([str(i) for i in l]) + ")"
-
-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
-
-def get_comptes(liste):
- """Récupère les comptes entre début et fin.
- Attention au contenu de liste, quand même."""
- con, cur = getcursor()
- cur.execute("SELECT * FROM adherents WHERE numcbde in %s ORDER BY numcbde;" % liste_to_sql(liste))
- l = cur.fetchall()
- return l
-
-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
-
-def supprime(liste):
- """Supprime les comptes dont le numcbde est dans ``liste``."""
- l = get_comptes(liste)
- 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',
- droits=0, surdroits=0, supreme='f', bloque='t', fonction='',
- mail_info=0, club='f', telephone='', theme='UNI', pbsante='',
- normalien='t', numsecu='' WHERE numcbde in %s;
- """ % (liste_to_sql(liste)))
- cur.execute("COMMIT;")
-
-def interactive_begin():
- """Détermine la liste des comptes à supprimer 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)
-
- return range(debut, fin+1)
-
-def interactive_delete(liste):
- """Supprime les comptes de manière interactive."""
- l = get_comptes(liste)
- 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(liste)
- except NonZeroError:
- exit(1)
- print "Et bim !"
- else:
- print "Nothing Done"
-
-if __name__ == "__main__":
- interactive_delete(interactive_begin())