]> gitweb.pimeys.fr Git - scripts-20-100.git/blobdiff - bde/supprimer_quelquun.py
On fournit la date de fin
[scripts-20-100.git] / bde / supprimer_quelquun.py
index 0123f06a29b004451f45fab3216a307b6e126a71..b28d711cb4f2fa2cc77987f9aa06e96da3f95d4c 100755 (executable)
@@ -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 "\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(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 "\e[1;31mAttention, je ne supprime rien, je ne fais que transformer en Erreur,Erreur...\e[0m"
     
     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())