[print_status] On ne floode pas les adhérents si le script plante pour quelque raison que ce soit.

Ignore-this: fddc35e4f3a0aa990eb911ad2d23f353
Méchant, méchant monde réel.

darcs-hash:20121114154455-8ef3c-1aadb11f9f0ff935cc216c09db70068a2363abd6.gz
This commit is contained in:
Sylvain Boilard 2012-11-14 16:44:55 +01:00
parent e0afb6ca50
commit ccdc74ba40

View file

@ -99,12 +99,14 @@ def sendMail(from_addr, to_addrs, mail_content):
http = httplib2.Http() http = httplib2.Http()
# On récupère la liste des tâches et on enlève les entêtes. # On récupère la liste des tâches. Pour faire la requête, on doit récupérer un cookie de session.
# Pour faire la requête, on doit récupérer un cookie de session.
headers, _ = http.request("https://" + printer_host + "/twelcome.cgi?CorePGTAG=0&Dummy=" + getMSE()) headers, _ = http.request("https://" + printer_host + "/twelcome.cgi?CorePGTAG=0&Dummy=" + getMSE())
_, content = http.request("https://" + printer_host + "/pprint.csv?Flag=Csv_Data&LogType=0&Dummy=" + getMSE(), 'GET', headers={'Cookie': headers['set-cookie']}) _, content = http.request("https://" + printer_host + "/pprint.csv?Flag=Csv_Data&LogType=0&Dummy=" + getMSE(), 'GET', headers={'Cookie': headers['set-cookie']})
task_list = content.split('\n') task_list = content.split('\n')
# On enlève les entêtes et les deux lignes vides à la fin de la liste.
task_list.pop(0) task_list.pop(0)
task_list.pop()
task_list.pop()
# On récupère la dernière tâche à avoir été traitée la dernière fois quel le script a été lancé. # On récupère la dernière tâche à avoir été traitée la dernière fois quel le script a été lancé.
# Si le fichier n'existe pas, on le crée en mettant la première tâche parmi celles que l'on vient de récupérer, et on s'arrête là. # Si le fichier n'existe pas, on le crée en mettant la première tâche parmi celles que l'on vient de récupérer, et on s'arrête là.
@ -121,12 +123,18 @@ except:
db = crans_ldap() db = crans_ldap()
match_doc_name = re.compile(r"/[^/]*\.pdf") match_doc_name = re.compile(r"/[^/]*\.pdf")
# On parcoure les tâches récupérées et qui n'ont pas déja été traitées, et on agit en conséquence. # On parcoure les tâches récupérées et on ne garde que celles qui n'ont pas déja été traitées.
# Au passage, on inverse leur ordre pour traiter la plus ancienne en premier.
# Ainsi, si le script plante, on n'envoie pas un mail aux adhérents à chaque fois que le cron le relance.
tasks_to_treat = []
for item in task_list: for item in task_list:
fields = item.split(',', 6) if item.split(',', 1)[0] == last:
# On notera la présence d'une tâche complètement vide à la fin de la liste.
if fields[0] == last or fields[0] == '':
break break
tasks_to_treat.append(item)
tasks_to_treat.reverse()
for item in tasks_to_treat:
fields = item.split(',', 6)
if fields[3].strip('"') == "root": if fields[3].strip('"') == "root":
result = fields[1].strip('"') result = fields[1].strip('"')
taskID, user, _ = fields[2].strip('"').split(':') taskID, user, _ = fields[2].strip('"').split(':')
@ -154,10 +162,7 @@ for item in task_list:
else: else:
mail_content = error_mail % (error_send_to, error_send_to, filename, taskID, full_name, user, date, result, u"\n".join(send_to)) mail_content = error_mail % (error_send_to, error_send_to, filename, taskID, full_name, user, date, result, u"\n".join(send_to))
sendMail(error_send_to, error_send_to, mail_content.encode("utf-8")) sendMail(error_send_to, error_send_to, mail_content.encode("utf-8"))
# On met à jour le numéro de la dernière tâche traitée.
# Éventuellement, on met à jour le numéro de la dernière tâche traitée.
new_last = task_list[0].split(',', 1)[0]
if last != new_last:
last_file = open(last_print_filename, "w") last_file = open(last_print_filename, "w")
last_file.write(new_last) last_file.write(fields[0])
last_file.close() last_file.close()