From 01bf344270895d251791fcc8aa359ab326268a72 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Wed, 30 Aug 2023 16:03:36 +0200 Subject: [PATCH] WIP: Bulletins BUT courts pdf --- app/but/bulletin_but_court.py | 6 ++---- app/but/bulletin_but_pdf.py | 3 ++- app/scodoc/sco_pdf.py | 23 ++++++++++++----------- app/scodoc/sco_utils.py | 20 ++++++++++---------- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/app/but/bulletin_but_court.py b/app/but/bulletin_but_court.py index d0670c7b..0396b1bc 100644 --- a/app/but/bulletin_but_court.py +++ b/app/but/bulletin_but_court.py @@ -4,11 +4,9 @@ # See LICENSE ############################################################################## -"""Génération bulletin BUT synthétique en une page +"""Génération bulletin BUT HTML synthétique en une page -On génère du HTML. Il sera si possible traduit en PDF par weasyprint. - -Le HTML est lui même généré à partir d'un template Jinja. +On génère du HTML à partir d'un template Jinja. ## Données diff --git a/app/but/bulletin_but_pdf.py b/app/but/bulletin_but_pdf.py index 5e89ab70..c52c4431 100644 --- a/app/but/bulletin_but_pdf.py +++ b/app/but/bulletin_but_pdf.py @@ -213,7 +213,8 @@ class BulletinGeneratorStandardBUT(BulletinGeneratorStandard): self.ue_std_rows(rows, ue, title_bg) @staticmethod - def affichage_bonus_malus(ue: dict) -> list: + def affichage_bonus_malus(ue: dict) -> list[str]: + "liste de chaînes affichant les bonus et malus" fields_bmr = [] # lecture des bonus sport culture et malus (ou bonus autre) (0 si valeur non numérique) try: diff --git a/app/scodoc/sco_pdf.py b/app/scodoc/sco_pdf.py index 631d71b0..24cd548b 100755 --- a/app/scodoc/sco_pdf.py +++ b/app/scodoc/sco_pdf.py @@ -31,15 +31,15 @@ Tout accès à ReportLab doit donc être précédé d'un PDFLOCK.acquire() et terminé par un PDFLOCK.release() - En ScoDoc 9, ce n'est pas nécessaire car on est multiptocessus / monothread. + En ScoDoc 9, ce n'est pas nécessaire car on est multiprocessus / monothread. """ +import datetime import html import io import os import queue import re import threading -import time import traceback import unicodedata @@ -345,7 +345,7 @@ class ScoDocPageTemplate(PageTemplate): def footer_string(self) -> str: """String contenu du pied de page""" - d = _makeTimeDict() + d = _make_datetime_dict() d["scodoc_name"] = sco_version.SCONAME d["server_url"] = self.server_name return SU(self.footer_template % d) @@ -410,15 +410,16 @@ class BulletinDocTemplate(BaseDocTemplate): self.filigranne = flowable.filigranne -def _makeTimeDict(): - # ... suboptimal but we don't care +def _make_datetime_dict() -> dict: + "a dict with date elements for templates" + now = datetime.datetime.now() return { - "day": time.strftime("%d"), - "month": time.strftime("%m"), - "year": time.strftime("%y"), - "Year": time.strftime("%Y"), - "hour": time.strftime("%H"), - "minute": time.strftime("%M"), + "day": now.day, + "month": now.month, + "year": now.year, + "Year": now.year, + "hour": now.hour, + "minute": now.minute, } diff --git a/app/scodoc/sco_utils.py b/app/scodoc/sco_utils.py index 9cb08ce8..ee8417f3 100644 --- a/app/scodoc/sco_utils.py +++ b/app/scodoc/sco_utils.py @@ -1347,40 +1347,40 @@ def confirm_dialog( def objects_renumber(db, obj_list) -> None: """fixe les numeros des objets d'une liste de modèles pour ne pas changer son ordre""" - log(f"objects_renumber") + log("objects_renumber") for i, obj in enumerate(obj_list): obj.numero = i db.session.add(obj) db.session.commit() -def comp_ranks(T: list[tuple]) -> dict[int, str]: +def comp_ranks(tab: list[tuple]) -> dict[int, str]: """Calcul rangs à partir d'une liste ordonnée de tuples [ (valeur, ..., etudid) ] (valeur est une note numérique), en tenant compte des ex-aequos Le resultat est: { etudid : rang } où rang est une chaine decrivant le rang """ rangs = {} # { etudid : rang } (rang est une chaine) nb_ex = 0 # nb d'ex-aequo consécutifs en cours - for i in range(len(T)): + for i, row in enumerate(tab): # test ex-aequo - if i < len(T) - 1: - next = T[i + 1][0] + if i < len(tab) - 1: + next_val = tab[i + 1][0] else: - next = None - moy = T[i][0] + next_val = None + moy = row[0] if nb_ex: srang = "%d ex" % (i + 1 - nb_ex) - if moy == next: + if moy == next_val: nb_ex += 1 else: nb_ex = 0 else: - if moy == next: + if moy == next_val: srang = "%d ex" % (i + 1 - nb_ex) nb_ex = 1 else: srang = "%d" % (i + 1) - rangs[T[i][-1]] = srang # str(i+1) + rangs[row[-1]] = srang return rangs