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 #!/bin/bash /usr/scripts/python.sh
# -*- coding: utf-8 -*- # -*- 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 BeautifulSoup
import sys import sys
@ -7,7 +13,6 @@ import requests
import re import re
import datetime import datetime
import time import time
import smtplib import smtplib
from gestion.affich_tools import cprint from gestion.affich_tools import cprint
@ -28,42 +33,47 @@ doc = BeautifulSoup.BeautifulSoup(req.text)
con = shortcuts.lc_ldap_readonly() con = shortcuts.lc_ldap_readonly()
jobs = doc.findAll(attrs={'class': 'PrintJobTicket'}) jobs = doc.findAll(attrs={'class': 'PrintJobTicket'})
# Dernier intervalle de dix minutes, en bornes entières, qui vient de se
# terminer
now = datetime.datetime.now() now = datetime.datetime.now()
#print now
success=dict()
clubs=dict()
fin = now.replace(second=0, minute=(now.minute/10)*10, microsecond=0) fin = now.replace(second=0, minute=(now.minute/10)*10, microsecond=0)
debut = fin - datetime.timedelta(minutes=10) debut = fin - datetime.timedelta(minutes=10)
success=dict()
clubs=dict()
for job in jobs: for job in jobs:
# Fin de parsing
uid = job.find(attrs={'id': RE_JOB_NAME}).text uid = job.find(attrs={'id': RE_JOB_NAME}).text
status = job.find(attrs={'id': RE_JOB_STATUS}).text status = job.find(attrs={'id': RE_JOB_STATUS}).text
date = job.find(attrs={'id': RE_JOB_DATE}).text date = job.find(attrs={'id': RE_JOB_DATE}).text
date = datetime.datetime.strptime(date, '%Y/%m/%d %H:%M:%S') date = datetime.datetime.strptime(date, '%Y/%m/%d %H:%M:%S')
if date > debut and date <= fin:
if status == "Success": # Hors intervalle: on drope
split = uid.split(u':') if date < debut or date >= fin:
if len(split) >= 3: continue
#print repr((uid, status, date)) if status != "Success":
# Boucle qui s'exécute normalement si la typographie dans # TODO prévenir les imprimeurs si une impression a échoué
# les logs d'impression est repectée (:) (sinon c'est un continue
# impression manuel donc drop) split = uid.split(u':')
nb = split[0] if len(split) < 3:
name = split[1] continue
task = u':'.join(split[2:]) # Boucle qui s'exécute normalement si la typographie dans
if u'@' in split[1]: # les logs d'impression est repectée (:) (sinon c'est un
#Seuls les clubs ont un @ dans leur alias, donc boucle # impression manuel donc drop)
# dédiée au clubs nb = split[0]
split2 = name.split(u'@', 1) name = split[1]
name = split2[0] task = u':'.join(split[2:])
club = split2[1] if u'@' in name:
if club not in clubs: #Seuls les clubs ont un @ dans leur alias, donc boucle
clubs[club] = {'task': []} # dédiée au clubs
clubs[club]['task'].append(task) [name, club] = name.split(u'@', 1)
if name not in success: if club not in clubs:
success[name] = {'task': []} clubs[club] = {'task': []}
success[name]['task'].append(task) clubs[club]['task'].append(task)
#print repr((name, task)) if name not in success:
#print name success[name] = {'task': []}
success[name]['task'].append(task)
#Section consacrée à l'envoi : partie 1 pour les adh, partie 2 pour les clubs #Section consacrée à l'envoi : partie 1 pour les adh, partie 2 pour les clubs
#To = 'detraz@crans.org' #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}}, Bonjour {{tname}},
La ou les impressions que tu avais lancées sous le nom de {{taches}} se sont bien déroulées. La ou les impressions que tu avais lancées sous le nom de {{taches}} se sont
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 . bien déroulées. Tu peux te rendre au 4J afin de récupérer tes documents. Le code
Voici le ou les codes pour entrer dans le local dont tu disposes actuellement : {{codes}} 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. Tu peux nous contacter via impression@lists.crans.org.
Cordialement,
À bientôt !
-- --
Les câbleurs Les membres actifs de l'association