X-Git-Url: http://gitweb.pimeys.fr/?a=blobdiff_plain;f=bde%2Fsupprimer_quelquun.py;fp=bde%2Fsupprimer_quelquun.py;h=0000000000000000000000000000000000000000;hb=62bd5a01bbcc7b96c4b1dd098415253d14492517;hp=b28d711cb4f2fa2cc77987f9aa06e96da3f95d4c;hpb=7630720dd491fa53093743e683d4e05f22d03afd;p=scripts-20-100.git diff --git a/bde/supprimer_quelquun.py b/bde/supprimer_quelquun.py deleted file mode 100755 index b28d711..0000000 --- a/bde/supprimer_quelquun.py +++ /dev/null @@ -1,86 +0,0 @@ -#!/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 "Je supprimerai pas quelqu'un dont le solde n'est pas nul : %s" % (",".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 "Attention, je ne supprime rien, je ne fais que transformer en Erreur,Erreur..." - - 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())