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
|
#!/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'
|
||||||
|
|
|
@ -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}},
|
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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue