From aa7dc316159e25906a54dea3f35cc42cc6c53da3 Mon Sep 17 00:00:00 2001 From: gdetrez Date: Sat, 16 Dec 2006 14:47:26 +0100 Subject: [PATCH] Resolution du problme : les lignes d'historique n'avaient pas toutes la mme tte... darcs-hash:20061216134726-f46e9-7f9ef3d06b998d6048e87ee475789a1b856d32df.gz --- surveillance/fiche_deconnection/generate.py | 103 ++++++++++++-------- 1 file changed, 62 insertions(+), 41 deletions(-) diff --git a/surveillance/fiche_deconnection/generate.py b/surveillance/fiche_deconnection/generate.py index 5fe5e2fc..08825e59 100755 --- a/surveillance/fiche_deconnection/generate.py +++ b/surveillance/fiche_deconnection/generate.py @@ -16,6 +16,14 @@ from ldap_crans import crans_ldap from time import * from config import upload import commands +# logging tools +import syslog +def log(x): + syslog.openlog('GENERATE_DECONNEXION_NOTICE') + syslog.syslog(x) + syslog.closelog() + +import crans.utils.exceptions import locale locale.setlocale(locale.LC_TIME, 'fr_FR') @@ -29,54 +37,67 @@ Les sanctions disponibles sont : usage: generate.py --sanction recherche_ldap Le motif de recherche dans la base ldap doit donné un résultat unique""" % "\n\t--".join(map(lambda x: x,sanctions)) + + + def generate_ps(sanction, proprio, db): """En fonction de la sanction à appliquer au propriétaire, on génère la feuille de déconnexion et on retourne son nom et emplacement.""" - # Dossier de génération du ps - dossier = '/usr/scripts/surveillance/fiche_deconnexion' + try: + log('Generate deconnexion notice for %s' % proprio.Nom()) + # Dossier de génération du ps + dossier = '/usr/scripts/surveillance/fiche_deconnexion' + + # Base pour le nom du fichier + fichier = strftime('%Y-%m-%d-%H-%M') + '-%s-%s' % (sanction, proprio.Nom().\ + lower().replace(' ', '-')) + + # Création du fichier tex + format_date = '%A %d %B %Y' + template = file('%s/deconnexion_%s.tex' % (dossier, sanction)).read() + template = template.replace('~prenom~', proprio.prenom().encode('iso8859-15')) + template = template.replace('~nom~', proprio.nom().encode('iso8859-15')) + template = template.replace('~chambre~', proprio.chbre().encode('iso8859-15')) + template = template.replace('~mail~', proprio.email().encode('iso8859-15')) + template = template.replace('~debut~', strftime(format_date, localtime())) + template = template.replace('~fin~', strftime(format_date, localtime(time()+14*86400))) + # filtrage des autodisc + historique = [ bl.encode('iso-8859-15').split('$') for bl in proprio.blacklist() if bl.split('$')[2] == 'autodisc_%s' % sanction ] + # transfomation en tuple (date, sanction) + historique = [ (strftime('%A %d %B %Y', localtime(int(bl[0]))), bl[-1]) for bl in historique ] + # tranformation en ligne + if sanction == 'upload' : + # On donne la valeur de l'upload + historique = [ '%s & %s & Mo'%(bl[0], bl[1].split(' ')[-2]) for bl in historique ] + else : + # On donne juste la date + historique = [ '%s' % bl[0] for bl in historique ] + # assemblage des lignes + historique = r"""\\ + """.join(historique) + template = template.replace('~historique~', historique) + if sanction == 'upload' : + template = template.replace('~limitehard~', str(upload.hard)) + template = template.replace('~nbadher~', str(len(db.search('paiement=ok')['adherent']))) - # Base pour le nom du fichier - fichier = strftime('%Y-%m-%d-%H-%M') + '-%s-%s' % (sanction, proprio.Nom().\ - lower().replace(' ', '-')) - - # Création du fichier tex - format_date = '%A %d %B %Y' - template = file('%s/deconnexion_%s.tex' % (dossier, sanction)).read() - template = template.replace('~prenom~', proprio.prenom().encode('iso8859-15')) - template = template.replace('~nom~', proprio.nom().encode('iso8859-15')) - template = template.replace('~chambre~', proprio.chbre().encode('iso8859-15')) - template = template.replace('~mail~', proprio.email().encode('iso8859-15')) - template = template.replace('~debut~', strftime(format_date, localtime())) - template = template.replace('~fin~', strftime(format_date, localtime(time()+14*86400))) - # filtrage des autodisc - historique = [ bl.encode('iso-8859-15').split('$') for bl in proprio.blacklist() if bl.split('$')[2] == 'autodisc_%s' % sanction ] - # transfomation en tuple (date, sanction) - historique = [ (strftime('%A %d %B %Y', localtime(int(bl[0]))), bl[-1].split(' ')[-2]) for bl in historique ] - # tranformation en ligne - if sanction == 'upload' : - # On donne la valeur de l'upload - historique = [ '%s & %s & Mo'%(bl[0], bl[1]) for bl in historique ] - else : - # On donne juste la date - historique = [ '%s' % bl[0] for bl in historique ] - # assemblage des lignes - historique = r"""\\ - """.join(historique) - template = template.replace('~historique~', historique) - if sanction == 'upload' : - template = template.replace('~limitehard~', str(upload.hard)) - template = template.replace('~nbadher~', str(len(db.search('paiement=ok')['adherent']))) - - file('%s/%s.tex' % (dossier, fichier), 'w').write(template) - - # Compilation du fichier latex - commands.getstatusoutput('PATH="/bin:/usr/bin" cd %(dossier)s && latex %(base)s.tex && dvips %(base)s.dvi && rm -f %(base)s.dvi %(base)s.aux %(base)s.log %(base)s.tex'%{'dossier': dossier, 'base': fichier}) - - return '%s/%s.ps' % (dossier, fichier) + file('%s/%s.tex' % (dossier, fichier), 'w').write(template) + + # Compilation du fichier latex + commands.getstatusoutput('PATH="/bin:/usr/bin" cd %(dossier)s && latex %(base)s.tex && dvips %(base)s.dvi && rm -f %(base)s.dvi %(base)s.aux %(base)s.log %(base)s.tex'%{'dossier': dossier, 'base': fichier}) + return '%s/%s.ps' % (dossier, fichier) + except Exception, e: + log('Erreur lors de la génération du ps : ') + log(str(e)) + log("Values : sanction:%s adherent:%s" % (sanction, proprio.Nom())) + log(crans.utils.exceptions.formatExc()) + raise e if __name__ == "__main__": + def log(x): + print x + def aide(): print help sys.exit(0) @@ -99,7 +120,7 @@ if __name__ == "__main__": print "Erreur : aucun motif de recherche défini.\n" aide() else : - motif = sys.argv[2] + motif = sys.argv[-1] recherche = db.search(motif)['adherent']