mail_impression_ok: simplification + commentaires
This commit is contained in:
parent
3ac91b56e7
commit
187b72cf27
4 changed files with 48 additions and 36 deletions
|
@ -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'
|
||||
|
|
|
@ -1 +1 @@
|
|||
Les câbleurs du Crans <cableurs@crans.org>
|
||||
Les membres actifs du Crans <impression@lists.crans.org>
|
||||
|
|
|
@ -1 +1 @@
|
|||
Notification de fin d'impression
|
||||
Crans: Notification de fin d'impression
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue