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()