]> gitweb.pimeys.fr Git - scripts-20-100.git/commitdiff
[bde/supprimer] On peut supprimer une liste d'id et pas seulement un intervalle
authorVincent <legallic@crans.org>
Thu, 12 Dec 2013 01:24:24 +0000 (02:24 +0100)
committerVincent <legallic@crans.org>
Thu, 12 Dec 2013 01:24:24 +0000 (02:24 +0100)
bde/supprimer_quelquun.py

index 0123f06a29b004451f45fab3216a307b6e126a71..5564278c683b208c8ee007b343915ae9cd6f508f 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,8 +49,8 @@ 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():
@@ -59,7 +65,7 @@ def interactive():
     else:
         fin = int(fin)
     
-    l = get_comptes(debut, fin)
+    l = get_comptes(range(debut, fin+1))
     print spp(l, ["numcbde", "nom", "prenom", "pseudo", "solde"])
     
     ans=raw_input("""Êtes-vous sûr de vouloir les "supprimer" ? """)