
Le script donne (par mail) les taches imprimées avec succès par l'adhérent (ou club) . Il donne aussi la liste des digicodes disponibles de l'adhérent et lui en génère un nouveau au besoin.
125 lines
4.2 KiB
Python
Executable file
125 lines
4.2 KiB
Python
Executable file
#!/bin/bash /usr/scripts/python.sh
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import BeautifulSoup
|
|
import requests
|
|
import re
|
|
import datetime
|
|
import time
|
|
import impression.digicode as digicode
|
|
from lc_ldap import shortcuts
|
|
import lc_ldap.crans_utils as crans_utils
|
|
import gestion.config as config
|
|
import gestion.affichage as affichage
|
|
|
|
import sys
|
|
import smtplib
|
|
from gestion import config
|
|
from gestion.affich_tools import cprint
|
|
from gestion import mail
|
|
import lc_ldap.shortcuts
|
|
from utils.sendmail import actually_sendmail
|
|
|
|
URL_JOBLIST = 'https://imprimante.adm.crans.org/hp/device/JobLogReport/Index'
|
|
CA = '/etc/ssl/certs/cacert.org.pem'
|
|
|
|
RE_JOB_NAME = re.compile('JobLogName_')
|
|
RE_JOB_STATUS = re.compile('JobLogStatus_')
|
|
RE_JOB_DATE = re.compile('JobLogDate_')
|
|
|
|
req = requests.get(URL_JOBLIST, verify=CA)
|
|
doc = BeautifulSoup.BeautifulSoup(req.text)
|
|
con = shortcuts.lc_ldap_readonly()
|
|
|
|
jobs = doc.findAll(attrs={'class': 'PrintJobTicket'})
|
|
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)
|
|
for job in jobs:
|
|
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
|
|
|
|
#Section consacrée à l'envoi : partie 1 pour les adh, partie 2 pour les clubs
|
|
#To = 'detraz@crans.org'
|
|
From = 'impression@crans.org'
|
|
e = 0
|
|
a = 0
|
|
|
|
for name in success:
|
|
ad = con.search(u'(uid=%s)' % name)
|
|
if ad <> []:
|
|
a = a + 1
|
|
adh = ad[0]
|
|
To = name + u'@crans.org'
|
|
tname = unicode(adh['prenom'][0]) + " " + unicode(adh['nom'][0])
|
|
codes = [x[0] + u'#' for x in digicode.list_code(name)]
|
|
if not codes:
|
|
codes = [digicode.gen_code(name) + u'#']
|
|
#cprint(u"Envoi du mail à %s" % To)
|
|
mailtxt=mail.generate('mail_impression_ok', {
|
|
'To': To,
|
|
'From': From,
|
|
'tname': tname,
|
|
'taches': u', '.join(success[name]['task']),
|
|
'codes': u', '.join(codes)
|
|
})
|
|
#print mailtxt.as_string()
|
|
actually_sendmail(From, (To,), mailtxt)
|
|
else:
|
|
e = e+1
|
|
|
|
for club in clubs:
|
|
a = a + 1
|
|
tname = club
|
|
To = club + u'@crans.org'
|
|
codes = [x[0] + u'#' for x in digicode.list_code(club)]
|
|
if not codes:
|
|
codes = [digicode.gen_code(club) + u'#']
|
|
#cprint(u"Envoi du mail à %s" % To)
|
|
mailtxt=mail.generate('mail_impression_ok', {
|
|
'To': To,
|
|
'From': From,
|
|
'tname': tname,
|
|
'taches': u', '.join(clubs[club]['task']),
|
|
'codes': u', '.join(codes),
|
|
})
|
|
#print mailtxt.as_string()
|
|
actually_sendmail(From, (To,), mailtxt)
|
|
|
|
if e>0:
|
|
print "Des problèmes sont survenus entre %s et %s" % (debut, fin)
|
|
print "Nombre total de mails envoyés :"
|
|
print a
|
|
print "Nombre de mails non envoyés faute de résultats LDAP :"
|
|
print e
|
|
#print len(success)
|