]> gitweb.pimeys.fr Git - scripts-20-100.git/commitdiff
[bde/supprimer] Structuration du code : on peut maintenant l'importer
authorVincent <legallic@crans.org>
Mon, 2 Dec 2013 14:25:03 +0000 (15:25 +0100)
committerVincent <legallic@crans.org>
Mon, 2 Dec 2013 14:25:03 +0000 (15:25 +0100)
bde/supprimer_quelquun.py

index 12319b227b577a43d4c924d0886a8014add263e2..0123f06a29b004451f45fab3216a307b6e126a71 100755 (executable)
@@ -5,36 +5,39 @@
     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',
@@ -43,6 +46,31 @@ if ans in ["oui","o","O","OUI","Y","y","YES","yes"]:
                        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()