mail_impression_ok: simplification + commentaires

This commit is contained in:
Daniel STAN 2014-10-23 10:15:48 +02:00
parent 3ac91b56e7
commit 187b72cf27
4 changed files with 48 additions and 36 deletions

View file

@ -1,5 +1,11 @@
#!/bin/bash /usr/scripts/python.sh
# -*- coding: utf-8 -*-
"""Envoi de mail automatique pour signaler la fin d'impression à un
adhérent. Le script se connecte à l'interface d'impression pour récupérer
la liste des dernières tâches imprimées.
Ce script est lancé par un cron toutes les dix minutes sur zamok. Pour éviter
de notifier plusieurs fois de la même fin d'impression, on ne balaie dans
la liste que le dernier intervalle (bornes entières) de dix minutes"""
import BeautifulSoup
import sys
@ -7,7 +13,6 @@ import requests
import re
import datetime
import time
import smtplib
from gestion.affich_tools import cprint
@ -28,42 +33,47 @@ doc = BeautifulSoup.BeautifulSoup(req.text)
con = shortcuts.lc_ldap_readonly()
jobs = doc.findAll(attrs={'class': 'PrintJobTicket'})
# Dernier intervalle de dix minutes, en bornes entières, qui vient de se
# terminer
now = datetime.datetime.now()
#print now
success=dict()
clubs=dict()
fin = now.replace(second=0, minute=(now.minute/10)*10, microsecond=0)
debut = fin - datetime.timedelta(minutes=10)
success=dict()
clubs=dict()
for job in jobs:
# Fin de parsing
uid = job.find(attrs={'id': RE_JOB_NAME}).text
status = job.find(attrs={'id': RE_JOB_STATUS}).text
date = job.find(attrs={'id': RE_JOB_DATE}).text
date = datetime.datetime.strptime(date, '%Y/%m/%d %H:%M:%S')
if date > debut and date <= fin:
if status == "Success":
split = uid.split(u':')
if len(split) >= 3:
#print repr((uid, status, date))
# Boucle qui s'exécute normalement si la typographie dans
# les logs d'impression est repectée (:) (sinon c'est un
# impression manuel donc drop)
nb = split[0]
name = split[1]
task = u':'.join(split[2:])
if u'@' in split[1]:
#Seuls les clubs ont un @ dans leur alias, donc boucle
# dédiée au clubs
split2 = name.split(u'@', 1)
name = split2[0]
club = split2[1]
if club not in clubs:
clubs[club] = {'task': []}
clubs[club]['task'].append(task)
if name not in success:
success[name] = {'task': []}
success[name]['task'].append(task)
#print repr((name, task))
#print name
# Hors intervalle: on drope
if date < debut or date >= fin:
continue
if status != "Success":
# TODO prévenir les imprimeurs si une impression a échoué
continue
split = uid.split(u':')
if len(split) < 3:
continue
# Boucle qui s'exécute normalement si la typographie dans
# les logs d'impression est repectée (:) (sinon c'est un
# impression manuel donc drop)
nb = split[0]
name = split[1]
task = u':'.join(split[2:])
if u'@' in name:
#Seuls les clubs ont un @ dans leur alias, donc boucle
# dédiée au clubs
[name, club] = name.split(u'@', 1)
if club not in clubs:
clubs[club] = {'task': []}
clubs[club]['task'].append(task)
if name not in success:
success[name] = {'task': []}
success[name]['task'].append(task)
#Section consacrée à l'envoi : partie 1 pour les adh, partie 2 pour les clubs
#To = 'detraz@crans.org'

View file

@ -1 +1 @@
Les câbleurs du Crans <cableurs@crans.org>
Les membres actifs du Crans <impression@lists.crans.org>

View file

@ -1 +1 @@
Notification de fin d'impression
Crans: Notification de fin d'impression

View file

@ -1,12 +1,14 @@
Bonjour {{tname}},
La ou les impressions que tu avais lancées sous le nom de {{taches}} se sont bien déroulées.
Tu peux te rendre au 4J afin de récupérer tes documents. Le code nécessaire pour rentrer dans le batiment J est : B7806 .
Voici le ou les codes pour entrer dans le local dont tu disposes actuellement : {{codes}}
La ou les impressions que tu avais lancées sous le nom de {{taches}} se sont
bien déroulées. Tu peux te rendre au 4J afin de récupérer tes documents. Le code
nécessaire pour rentrer dans le batiment J est : B7806 .
Voici le ou les codes pour entrer dans le local dont tu disposes actuellement :
{{codes}}
Tu peux nous contacter via impression@lists.crans.org.
Cordialement,
À bientôt !
--
Les câbleurs
Les membres actifs de l'association