X-Git-Url: http://gitweb.pimeys.fr/?a=blobdiff_plain;f=bde%2Fsupprimer_quelquun.py;h=b28d711cb4f2fa2cc77987f9aa06e96da3f95d4c;hb=c33e4bb5ac9651232bcb896c78e4e28cba0a4f30;hp=0123f06a29b004451f45fab3216a307b6e126a71;hpb=d4e909731a43007993b31502dc19fa2c7a6f4293;p=scripts-20-100.git diff --git a/bde/supprimer_quelquun.py b/bde/supprimer_quelquun.py index 0123f06..b28d711 100755 --- a/bde/supprimer_quelquun.py +++ b/bde/supprimer_quelquun.py @@ -13,16 +13,22 @@ class NonZeroError(ValueError): 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(debut, fin): - """Récupère les comptes entre début et fin.""" +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>=%s AND numcbde<=%s ORDER BY numcbde;", (debut,fin)) + cur.execute("SELECT * FROM adherents WHERE numcbde in %s ORDER BY numcbde;" % liste_to_sql(liste)) l = cur.fetchall() return l @@ -33,9 +39,9 @@ def check_impossibles(l): 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(debut, fin): - """Supprime les comptes de numcbde entre ``debut`` et ``fin`` (compris).""" - l = get_comptes(debut, fin) +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 @@ -43,12 +49,12 @@ def supprime(debut, fin): 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>=%s AND numcbde<=%s; - """ % (debut, fin)) + normalien='t', numsecu='' WHERE numcbde in %s; + """ % (liste_to_sql(liste))) cur.execute("COMMIT;") -def interactive(): - """Exécute le script de manière interactive.""" +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 : ") @@ -59,13 +65,17 @@ def interactive(): else: fin = int(fin) - l = get_comptes(debut, 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(debut, fin) + supprime(liste) except NonZeroError: exit(1) print "Et bim !" @@ -73,4 +83,4 @@ def interactive(): print "Nothing Done" if __name__ == "__main__": - interactive() + interactive_delete(interactive_begin())