From ccdc74ba4040b28ba3daa01644e379c9685a7f2f Mon Sep 17 00:00:00 2001 From: Sylvain Boilard Date: Wed, 14 Nov 2012 16:44:55 +0100 Subject: [PATCH] =?UTF-8?q?[print=5Fstatus]=20On=20ne=20floode=20pas=20les?= =?UTF-8?q?=20adh=C3=A9rents=20si=20le=20script=20plante=20pour=20quelque?= =?UTF-8?q?=20raison=20que=20ce=20soit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ignore-this: fddc35e4f3a0aa990eb911ad2d23f353 Méchant, méchant monde réel. darcs-hash:20121114154455-8ef3c-1aadb11f9f0ff935cc216c09db70068a2363abd6.gz --- impression/print_status.py | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/impression/print_status.py b/impression/print_status.py index 33029c74..7dae7c65 100755 --- a/impression/print_status.py +++ b/impression/print_status.py @@ -99,12 +99,14 @@ def sendMail(from_addr, to_addrs, mail_content): http = httplib2.Http() -# On récupère la liste des tâches et on enlève les entêtes. -# Pour faire la requête, on doit récupérer un cookie de session. +# On récupère la liste des tâches. 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()) _, 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') +# On enlève les entêtes et les deux lignes vides à la fin de la liste. 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é. # 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() 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: - fields = item.split(',', 6) - # On notera la présence d'une tâche complètement vide à la fin de la liste. - if fields[0] == last or fields[0] == '': + if item.split(',', 1)[0] == last: 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": result = fields[1].strip('"') taskID, user, _ = fields[2].strip('"').split(':') @@ -154,10 +162,7 @@ for item in task_list: else: 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")) - -# É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: + # On met à jour le numéro de la dernière tâche traitée. last_file = open(last_print_filename, "w") - last_file.write(new_last) + last_file.write(fields[0]) last_file.close()