From bec9689f42a3242861b3d88e5abbb2f3cf22b84a Mon Sep 17 00:00:00 2001 From: Michel Blockelet Date: Sun, 11 Sep 2011 21:14:56 +0200 Subject: [PATCH] [mail_invalide.py] Lit aussi les .forward, et permet de generer via un aid Ignore-this: 83e846453108548ad3689197d7ef5334 darcs-hash:20110911191456-ddb99-ffb39ebb58639294b2874962f972a742ace55067.gz --- admin/mail_invalide/mail_invalide.py | 67 +++++++++++++++++++++++----- 1 file changed, 57 insertions(+), 10 deletions(-) diff --git a/admin/mail_invalide/mail_invalide.py b/admin/mail_invalide/mail_invalide.py index 99b0bc3e..e77f41a6 100755 --- a/admin/mail_invalide/mail_invalide.py +++ b/admin/mail_invalide/mail_invalide.py @@ -33,11 +33,17 @@ Une fiche sera générée pour chaque adhérent. Chaque adhérent sera déconnecté 2 semaines plus tard si son adresse mail n'a pas changé. -Usage: mail_invalide.py [adresse mail]...""" +Usage: mail_invalide.py [adresse mail]... + +L'adresse mail peut aussi être un aid précédé d'un tiret. +Exemple: + mail_invalide.py toto@example.com -42 +va s'occuper de l'adhérent ayant toto@example.com comme adresse mail et +l'adhérent ayant l'aid 42.""" -def generate_ps(proprio): +def generate_ps(proprio, mail): """On génère la feuille d'avertissement et on retourne son emplacement.""" barcode = "/usr/scripts/admin/mail_invalide/barcode.eps" try: @@ -55,7 +61,7 @@ def generate_ps(proprio): template = template.replace('~prenom~', proprio.prenom().encode('utf-8')) template = template.replace('~nom~', proprio.nom().encode('utf-8')) template = template.replace('~chambre~', proprio.chbre().encode('utf-8')) - template = template.replace('~mail~', proprio.email().encode('utf-8').replace('_', '\\_')) + template = template.replace('~mail~', mail.encode('utf-8').replace('_', '\\_')) template = template.replace('~fin~', time.strftime(format_date, time.localtime(time.time()+14*86400))) @@ -73,6 +79,15 @@ def generate_ps(proprio): log(utils.exceptions.formatExc()) raise e +def set_mail_invalide(adherent, mail): + print "Génération de la fiche pour %s :" % adherent.Nom().encode('utf-8') + fiche = generate_ps(adherent, mail) + print fiche + a_imprimer.append(fiche) + adherent.blacklist([time.time() + 14 * 24 * 3600, + '-', 'mail_invalide', "Mail invalide"]) + adherent.save() + if __name__ == "__main__": if '--help' in sys.argv or '-h' in sys.argv or len(sys.argv) < 2: print help @@ -80,11 +95,49 @@ if __name__ == "__main__": db = crans_ldap() + # On fait la liste des .forwards dans les homes + print " * Lecture des .forward ..." + forwards = {} + for uid in os.listdir('/home'): + try: + forwards[open('/home/%s/.forward' % uid, 'r').readline().strip()] = uid + except: + pass + a_imprimer = [] a_verifier = [] for adresse in sys.argv[1:]: + # Est-ce un aid ? + if adresse[0] == '-': + print " * Recherche de aid=%s ..." % adresse[1:] + res = db.search("aid=%s" % adresse[1:], 'w')['adherent'] + if len(res) == 0: + print "*** Erreur : aucun résultat pour aid=%s" % adresse[1:] + a_verifier.append(adresse) + elif len(res) > 1: + print "*** Erreur : plusieurs résultats pour aid=%s :" % adresse[1:] + for adh in res: + print adh.Nom() + a_verifier.append(adresse) + else: + adherent = res[0] + a_imprimer.append(set_mail_invalide(adherent, adherent.email())) + continue + print " * Recherche de %s ..." % adresse + # Est-ce un .forward ? + if forwards.has_key(adresse): + res = db.search("uid=%s" % forwards[adresse], 'w')['adherent'] + if len(res) == 0: + print "*** Erreur : aucun résultat pour uid=%s" % forwards[adresse] + a_verifier.append(adresse) + else: + adherent = res[0] + a_imprimer.append(set_mail_invalide(adherent, adresse)) + continue + + # Est-ce une adresse mail sans compte Cr@ns ? res = db.search("mail=%s" % adresse, 'w')['adherent'] if len(res) == 0: print "*** Erreur : aucun résultat pour %s" % adresse @@ -96,13 +149,7 @@ if __name__ == "__main__": a_verifier.append(adresse) else: adherent = res[0] - print "Génération de la fiche pour %s :" % adherent.Nom().encode('utf-8') - fiche = generate_ps(adherent) - print fiche - a_imprimer.append(fiche) - adherent.blacklist([time.time() + 14 * 24 * 3600, - '-', 'mail_invalide', "Mail invalide"]) - adherent.save() + a_imprimer.append(set_mail_invalide(adherent, adherent.email())) if len(a_verifier) + len(a_imprimer) > 0: print ''