diff --git a/admin/mail_invalide/mail_invalide.py b/admin/mail_invalide/mail_invalide.py index 763779af..b49bf671 100755 --- a/admin/mail_invalide/mail_invalide.py +++ b/admin/mail_invalide/mail_invalide.py @@ -1,4 +1,4 @@ -#! /usr/bin/env python +#!/bin/bash /usr/scripts/python.sh # -*- coding: utf-8 -*- """ @@ -12,9 +12,8 @@ Licence : GPL v2 import os, sys, time import subprocess -sys.path.append('/usr/scripts/gestion') -from ldap_crans import crans_ldap -from config import upload +from lc_ldap import shortcuts +from gestion.config import upload # logging tools import syslog def log(x): @@ -30,6 +29,8 @@ import utils.exceptions import locale locale.setlocale(locale.LC_TIME, 'fr_FR.UTF-8') +# On blackliste 14 jours après que le script ait été éxécuté +DELAY = 14 help = """Script de déconnexion pour mail invalide. Une fiche sera générée pour chaque adhérent. @@ -49,22 +50,23 @@ l'adhérent ayant l'aid 42.""" 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" + name = unicode(proprio['prenom'][0]) + u" " + unicode(proprio['nom'][0]) try: - log('Generate invalid mail notice for %s' % proprio.Nom()) + log(u'Generate invalid mail notice for %s' % name) # Dossier de génération du ps dossier = '/usr/scripts/var/mails_invalides' # Base pour le nom du fichier - fichier = time.strftime('%Y-%m-%d-%H-%M') + '-mail-%s' % (proprio.Nom(). + fichier = time.strftime('%Y-%m-%d-%H-%M') + '-mail-%s' % (name. lower().replace(' ', '-')) # Création du fichier tex format_date = '%A %d %B %Y' with open('%s/mail_invalide.tex' % os.path.dirname(__file__), 'r') as tempfile: template = tempfile.read() - 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('~prenom~', proprio['prenom'][0].encode('utf-8')) + template = template.replace('~nom~', proprio['nom'][0].encode('utf-8')) + template = template.replace('~chambre~', proprio['chbre'][0].encode('utf-8')) template = template.replace('~mail~', mail.encode('utf-8').replace('_', '\\_')) template = template.replace('~fin~', time.strftime(format_date, time.localtime(time.time()+14*86400))) @@ -83,35 +85,37 @@ def generate_ps(proprio, mail): except Exception, e: log('Erreur lors de la génération du ps : ') log(str(e)) - log("Values : adherent:%s" % proprio.Nom()) + log("Values : adherent:%s" % name) log(utils.exceptions.formatExc()) raise def set_mail_invalide(adherent, mail, a_verifier, a_imprimer): - if adherent.chbre() in ['????', 'EXT']: - print u"Chambre de %s : %s, générer la fiche ? [Yn]" % (adherent.Nom().encode('utf-8'), adherent.chbre()) + if adherent['chbre'][0] in ['????', 'EXT']: + name = unicode(adherent['prenom'][0]) + u" " + unicode(adherent['nom'][0]) + print u"Chambre de %s : %s, générer la fiche ? [Yn]" % (name, adherent['chbre'][0]) read = '' while read not in ['y', 'n']: read = raw_input().lower() if read == 'n': - print u"Chambre de %s : %s, impossible de générer la fiche." % (adherent.Nom().encode('utf-8'), adherent.chbre()) + print u"Chambre de %s : %s, impossible de générer la fiche." % (name, adherent['chbre'][0]) a_verifier.append(mail) return - - print "Génération de la fiche pour %s :" % adherent.Nom().encode('utf-8') + + print u"Génération de la fiche pour %s :" % name fiche = generate_ps(adherent, mail) print fiche a_imprimer.append(fiche) - adherent.blacklist([time.time() + 14 * 24 * 3600, - '-', 'mail_invalide', "Mail invalide"]) - adherent.save() + with adherent as adh: + adh.blacklist('mail_invalide','Mail Invalide - Script',debut=int(time.time()) + DELAY * 24 * 3600) + adh.history_gen() + adh.save() if __name__ == "__main__": if '--help' in sys.argv or '-h' in sys.argv or len(sys.argv) < 2: print help sys.exit(0) - db = crans_ldap() + ldap = shortcuts.lc_ldap_admin() # On fait la liste des .forwards dans les homes print " * Lecture des .forward ..." @@ -141,24 +145,24 @@ if __name__ == "__main__": # Est-ce un aid ? if adresse[0] == '-': print " * Recherche de aid=%s ..." % adresse[1:] - res = db.search("aid=%s" % adresse[1:], 'w')['adherent'] + res = ldap.search(u"aid=%s" % adresse[1:], mode='rw') 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() + print unicode(adh['prenom'][0]) + u" " + unicode(adh['nom'][0]) a_verifier.append(adresse) else: adherent = res[0] - set_mail_invalide(adherent, adherent.email(), a_verifier, a_imprimer) + set_mail_invalide(adherent, adherent['mail'][0], a_verifier, a_imprimer) continue print " * Recherche de %s ..." % adresse # Est-ce un .forward ? if forwards.has_key(adresse): - res = db.search("uid=%s" % forwards[adresse], 'w')['adherent'] + res = ldap.search(u"uid=%s" % forwards[adresse], mode='rw') if len(res) == 0: print "*** Erreur : aucun résultat pour uid=%s" % forwards[adresse] a_verifier.append(adresse) @@ -168,18 +172,18 @@ if __name__ == "__main__": continue # Est-ce une adresse mail sans compte Cr@ns ? - res = db.search("mail=%s" % adresse, 'w')['adherent'] + res = ldap.search(u"(|(mail=%s)(mailExt=%s))" % (adresse,adresse), mode='rw') if len(res) == 0: print "*** Erreur : aucun résultat pour %s" % adresse a_verifier.append(adresse) elif len(res) > 1: print "*** Erreur : plusieurs résultats pour %s :" % adresse for adh in res: - print adh.Nom() + print unicode(adh['prenom'][0]) + u" " + unicode(adh['nom'][0]) a_verifier.append(adresse) else: adherent = res[0] - set_mail_invalide(adherent, adherent.email(), a_verifier, a_imprimer) + set_mail_invalide(adherent, adresse, a_verifier, a_imprimer) if len(a_verifier) + len(a_imprimer) > 0: print ''