From e28bfa34be7efa63738a6f461e3a33bc8ba41880 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9o=20BARAS=20=28IUT1=20Grenoble=29?= Date: Tue, 16 Jan 2024 05:36:27 +0100 Subject: [PATCH] =?UTF-8?q?Ent=C3=AAte=20des=20m=C3=A9thodes=20&=20fonctio?= =?UTF-8?q?ns?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/pe/pe_avislatex.py | 37 ++++++++++++++++------ app/pe/pe_jurype.py | 68 +++++++++++++++++++++++++++------------- app/pe/pe_semestretag.py | 32 ++++++++++++++----- app/pe/pe_settag.py | 46 +++++++++++++++++++-------- app/pe/pe_tagtable.py | 55 +++++++++++++++++++++++--------- app/pe/pe_tools.py | 15 ++++++--- 6 files changed, 181 insertions(+), 72 deletions(-) diff --git a/app/pe/pe_avislatex.py b/app/pe/pe_avislatex.py index 3c498f47d..b5e6fb073 100644 --- a/app/pe/pe_avislatex.py +++ b/app/pe/pe_avislatex.py @@ -67,7 +67,8 @@ def get_code_latex_from_modele(fichier): # ---------------------------------------------------------------------------------------- -def get_code_latex_from_scodoc_preference(formsemestre_id, champ="pe_avis_latex_tmpl"): +def get_code_latex_from_scodoc_preference(formsemestre_id, + champ="pe_avis_latex_tmpl"): """ Extrait le template (ou le tag d'annotation au regard du champ fourni) des préférences LaTeX et s'assure qu'il est renvoyé au format unicode @@ -94,7 +95,9 @@ def get_tags_latex(code_latex): return [] -def comp_latex_parcourstimeline(etudiant, promo, taille=17): +def comp_latex_parcourstimeline(etudiant, + promo, + taille=17): """Interprète un tag dans un avis latex **parcourstimeline** et génère le code latex permettant de retracer le parcours d'un étudiant sous la forme d'une frise temporelle. @@ -156,9 +159,11 @@ def interprete_tag_latex(tag): # ---------------------------------------------------------------------------------------- -def get_code_latex_avis_etudiant( - donnees_etudiant, un_avis_latex, annotationPE, footer_latex, prefs -): +def get_code_latex_avis_etudiant(donnees_etudiant, + un_avis_latex, + annotationPE, + footer_latex, + prefs): """ Renvoie le code latex permettant de générer l'avis d'un étudiant en utilisant ses donnees_etudiant contenu dans le dictionnaire de synthèse du jury PE et en suivant un @@ -220,7 +225,8 @@ def get_code_latex_avis_etudiant( # ---------------------------------------------------------------------------------------- -def get_annotation_PE(etudid, tag_annotation_pe): +def get_annotation_PE(etudid, + tag_annotation_pe): """Renvoie l'annotation PE dans la liste de ces annotations ; Cette annotation est reconnue par la présence d'un tag **PE** (cf. .get_preferences -> pe_tag_annotation_avis_latex). @@ -261,7 +267,11 @@ def get_annotation_PE(etudid, tag_annotation_pe): # ---------------------------------------------------------------------------------------- -def str_from_syntheseJury(donnees_etudiant, aggregat, groupe, tag_scodoc, champ): +def str_from_syntheseJury(donnees_etudiant, + aggregat, + groupe, + tag_scodoc, + champ): """Extrait du dictionnaire de synthèse du juryPE pour un étudiant donnée, une valeur indiquée par un champ ; si champ est une liste, renvoie la liste des valeurs extraites. @@ -312,7 +322,8 @@ def str_from_syntheseJury(donnees_etudiant, aggregat, groupe, tag_scodoc, champ) # ---------------------------------------------------------------------------------------- -def get_bilanParTag(donnees_etudiant, groupe="groupe"): +def get_bilanParTag(donnees_etudiant, + groupe="groupe"): """Renvoie le code latex d'un tableau récapitulant, pour tous les tags trouvés dans les données étudiants, ses résultats. result: chaine unicode @@ -383,7 +394,12 @@ def get_bilanParTag(donnees_etudiant, groupe="groupe"): # ---------------------------------------------------------------------------------------- def get_avis_poursuite_par_etudiant( - jury, etudid, template_latex, tag_annotation_pe, footer_latex, prefs + jury, + etudid, + template_latex, + tag_annotation_pe, + footer_latex, + prefs ): """Renvoie un nom de fichier et le contenu de l'avis latex d'un étudiant dont l'etudid est fourni. result: [ chaine unicode, chaine unicode ] @@ -444,7 +460,8 @@ def get_templates_from_distrib(template="avis"): # ---------------------------------------------------------------------------------------- -def table_syntheseAnnotationPE(syntheseJury, tag_annotation_pe): +def table_syntheseAnnotationPE(syntheseJury, + tag_annotation_pe): """Génère un fichier excel synthétisant les annotations PE telles qu'inscrites dans les fiches de chaque étudiant""" sT = SeqGenTable() # le fichier excel à générer diff --git a/app/pe/pe_jurype.py b/app/pe/pe_jurype.py index a98993405..33dd376af 100644 --- a/app/pe/pe_jurype.py +++ b/app/pe/pe_jurype.py @@ -268,7 +268,9 @@ class JuryPE(object): # **************************************************************************************************************** # # ------------------------------------------------------------------------------------------------------------------ - def get_etudiants_in_jury(self, semBase, avec_meme_formation=False): + def get_etudiants_in_jury(self, + semBase, + avec_meme_formation=False): """ Calcule la liste des étudiants à prendre en compte dans le jury et la renvoie sous la forme """ @@ -314,7 +316,8 @@ class JuryPE(object): # ------------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------------ - def get_etudiants_dans_semestres(self, semsListe): + def get_etudiants_dans_semestres(self, + semsListe): """Renvoie la liste des etudid des etudiants inscrits à l'un des semestres de la liste fournie en paramètre en supprimant les doublons (i.e. un même étudiant qui apparaîtra 2 fois)""" @@ -335,7 +338,8 @@ class JuryPE(object): return list(set(etudiants)) # suppression des doublons # ------------------------------------------------------------------------------------------------------------------ - def get_etudids_du_jury(self, ordre="aucun"): + def get_etudids_du_jury(self, + ordre="aucun"): """Renvoie la liste de tous les étudiants (concrètement leur etudid) participant au jury c'est à dire, ceux dont la date du 'jury' est self.diplome et n'ayant pas abandonné. @@ -359,7 +363,8 @@ class JuryPE(object): # ------------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------------ - def add_etudiants(self, etudid): + def add_etudiants(self, + etudid): """Ajoute un étudiant (via son etudid) au dictionnaire de synthèse jurydict. L'ajout consiste à : > insérer une entrée pour l'étudiant en mémorisant ses infos (get_etudInfo), @@ -449,7 +454,8 @@ class JuryPE(object): # print # ------------------------------------------------------------------------------------------------------------------ - def est_un_etudiant_reoriente_ou_demissionnaire(self, etudid): + def est_un_etudiant_reoriente_ou_demissionnaire(self, + etudid): """Renvoie True si l'étudiant est réorienté (NAR) ou démissionnaire (DEM)""" from app.scodoc import sco_report @@ -469,7 +475,8 @@ class JuryPE(object): return reponse # ------------------------------------------------------------------------------------------------------------------ - def est_un_etudiant_disparu(self, etudid): + def est_un_etudiant_disparu(self, + etudid): """Renvoie True si l'étudiant n'a pas achevé la formation à l'IUT et a disparu des listes, sans pour autant avoir été indiqué NAR ou DEM ; recherche son dernier semestre validé et regarde s'il n'existe pas parmi les semestres existants dans scodoc un semestre postérieur (en terme de date de @@ -519,7 +526,8 @@ class JuryPE(object): # ------------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------------ - def get_dernier_semestre_id_valide_d_un_etudiant(self, etudid): + def get_dernier_semestre_id_valide_d_un_etudiant(self, + etudid): """Renvoie le n° (semestre_id) du dernier semestre validé par un étudiant fourni par son etudid et None si aucun semestre n'a été validé """ @@ -542,7 +550,9 @@ class JuryPE(object): # ------------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------------ - def get_Fid_d_un_Si_valide_d_un_etudiant(self, etudid, nom_semestre): + def get_Fid_d_un_Si_valide_d_un_etudiant(self, + etudid, + nom_semestre): """Récupère le formsemestre_id valide d'un étudiant fourni son etudid à un semestre DUT de n° semestre_id donné. Si le semestre est en cours (pas encore de jury), renvoie le formsemestre_id actuel. """ @@ -591,7 +601,8 @@ class JuryPE(object): self.add_semtags_in_jury(fid) # ------------------------------------------------------------------------------------------------------------------ - def add_semtags_in_jury(self, fid): + def add_semtags_in_jury(self, + fid): """Crée si nécessaire un semtag et le mémorise dans self.semTag ; charge également les données des nouveaux étudiants qui en font partis. """ @@ -638,7 +649,9 @@ class JuryPE(object): self.zipfile.writestr(filename, self.semTagDict[fid].str_tagtable()) # ---------------------------------------------------------------------------------------------------------------- - def get_formsemestreids_du_jury(self, etudids, liste_semestres="4S"): + def get_formsemestreids_du_jury(self, + etudids, + liste_semestres="4S"): """Renvoie la liste des formsemestre_id validants des étudiants en parcourant les semestres valides des étudiants mémorisés dans self.PARCOURSINFO_DICT. Les étudiants sont identifiés par leur etudic donnés dans la liste etudids (généralement self.get_etudids_in_jury() ). @@ -866,7 +879,8 @@ class JuryPE(object): tag ] = tagtable.get_resultatsEtud(tag, etudid) - def get_dateEntree(self, etudid): + def get_dateEntree(self, + etudid): """Renvoie l'année d'entrée de l'étudiant à l'IUT""" # etudinfo = self.ETUDINFO_DICT[etudid] semestres = self.get_semestresDUT_d_un_etudiant(etudid) @@ -876,7 +890,8 @@ class JuryPE(object): else: return "" - def get_parcoursIUT(self, etudid): + def get_parcoursIUT(self, + etudid): """Renvoie une liste d'infos sur les semestres du parcours d'un étudiant""" # etudinfo = self.ETUDINFO_DICT[etudid] sems = self.get_semestresDUT_d_un_etudiant(etudid) @@ -896,7 +911,8 @@ class JuryPE(object): # **************************************************************************************************************** # # Méthodes d'affichage pour debug # **************************************************************************************************************** # - def str_etudiants_in_jury(self, delim=";"): + def str_etudiants_in_jury(self, + delim=";"): # En tete: entete = ["Id", "Nom", "Abandon", "Diplome"] for nom_sem in ["S1", "S2", "S3", "S4", "1A", "2A", "3S", "4S"]: @@ -958,7 +974,8 @@ class JuryPE(object): allTags = allTags.union(set(self.get_allTagForAggregat(nom))) return sorted(list(allTags)) if len(allTags) > 0 else [] - def table_syntheseJury(self, mode="singlesheet"): # was str_syntheseJury + def table_syntheseJury(self, + mode="singlesheet"): # was str_syntheseJury """Table(s) du jury mode: singlesheet ou multiplesheet pour export excel """ @@ -984,9 +1001,9 @@ class JuryPE(object): rows=[], titles={"pas d'étudiants": "pas d'étudiants"}, html_sortable=True, - xls_sheet_name="but", + xls_sheet_name="dut", ) - sT.add_genTable("but", T) + sT.add_genTable("dut", T) return sT # Si des étudiants @@ -1120,7 +1137,8 @@ class JuryPE(object): # **************************************************************************************************************** # # ------------------------------------------------------------------------------------------------------------------ - def get_cache_etudInfo_d_un_etudiant(self, etudid): + def get_cache_etudInfo_d_un_etudiant(self, + etudid): """Renvoie les informations sur le parcours d'un étudiant soit en les relisant depuis ETUDINFO_DICT si mémorisée soit en les chargeant et en les mémorisant """ @@ -1133,7 +1151,8 @@ class JuryPE(object): # ------------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------------ - def get_cache_notes_d_un_semestre(self, formsemestre_id: int) -> NotesTableCompat: + def get_cache_notes_d_un_semestre(self, + formsemestre_id: int) -> NotesTableCompat: """Charge la table des notes d'un formsemestre""" formsemestre = FormSemestre.get_formsemestre(formsemestre_id) return res_sem.load_formsemestre_results(formsemestre) @@ -1141,7 +1160,9 @@ class JuryPE(object): # ------------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------------ - def get_semestresDUT_d_un_etudiant(self, etudid, semestre_id=None): + def get_semestresDUT_d_un_etudiant(self, + etudid, + semestre_id=None): """Renvoie la liste des semestres DUT d'un étudiant pour un semestre_id (parmi 1,2,3,4) donné en fonction de ses infos d'etud (cf. sco_etud.get_etud_info( etudid=etudid, filled=True)[0]), @@ -1155,7 +1176,8 @@ class JuryPE(object): return sesSems # ********************************************** - def calcul_anneePromoDUT_d_un_etudiant(self, etudid) -> int: + def calcul_anneePromoDUT_d_un_etudiant(self, + etudid) -> int: """Calcule et renvoie la date de diplome prévue pour un étudiant fourni avec son etudid en fonction de ses semestres de scolarisation""" semestres = self.get_semestresDUT_d_un_etudiant(etudid) @@ -1166,7 +1188,8 @@ class JuryPE(object): # ********************************************* # Fonctions d'affichage pour debug - def get_resultat_d_un_etudiant(self, etudid): + def get_resultat_d_un_etudiant(self, + etudid): chaine = "" for nom_sem in ["S1", "S2", "S3", "S4"]: semtagid = self.PARCOURSINFO_DICT[etudid][ @@ -1239,7 +1262,8 @@ def get_annee_diplome_semestre(sem) -> int: # ---------------------------------------------------------------------------------- -def get_cosemestres_diplomants(semBase, avec_meme_formation=False): +def get_cosemestres_diplomants(semBase, + avec_meme_formation=False): """Partant d'un semestre de Base = {'formsemestre_id': ..., 'semestre_id': ..., 'annee_debut': ...}, renvoie la liste de tous ses co-semestres (lui-meme inclus) Par co-semestre, s'entend les semestres : diff --git a/app/pe/pe_semestretag.py b/app/pe/pe_semestretag.py index 8384551c4..440855b27 100644 --- a/app/pe/pe_semestretag.py +++ b/app/pe/pe_semestretag.py @@ -78,7 +78,9 @@ class SemestreTag(pe_tagtable.TableTag): # ----------------------------------------------------------------------------- # Fonctions d'initialisation # ----------------------------------------------------------------------------- - def __init__(self, notetable, sem): # Initialisation sur la base d'une notetable + def __init__(self, + notetable, + sem): # Initialisation sur la base d'une notetable """Instantiation d'un objet SemestreTag à partir d'un tableau de note et des informations sur le semestre pour le dater """ @@ -194,7 +196,9 @@ class SemestreTag(pe_tagtable.TableTag): return tagdict # ----------------------------------------------------------------------------- - def comp_MoyennesTag(self, tag, force=False) -> list: + def comp_MoyennesTag(self, + tag, + force=False) -> list: """Calcule et renvoie les "moyennes" de tous les étudiants du SemTag (non défaillants) à un tag donné, en prenant en compte tous les modimpl_id concerné par le tag, leur coeff et leur pondération. @@ -232,7 +236,10 @@ class SemestreTag(pe_tagtable.TableTag): ] # ----------------------------------------------------------------------------- - def get_noteEtCoeff_modimpl(self, modimpl_id, etudid, profondeur=2): + def get_noteEtCoeff_modimpl(self, + modimpl_id, + etudid, + profondeur=2): """Renvoie un couple donnant la note et le coeff normalisé d'un étudiant à un module d'id modimpl_id. La note et le coeff sont extraits : 1) soit des données du semestre en normalisant le coefficient par rapport à la somme des coefficients des modules du semestre, @@ -313,14 +320,17 @@ class SemestreTag(pe_tagtable.TableTag): return (note, coeff_norm) # ----------------------------------------------------------------------------- - def get_ue_capitalisees(self, etudid) -> list[dict]: + def get_ue_capitalisees(self, + etudid) -> list[dict]: """Renvoie la liste des capitalisation effectivement capitalisées par un étudiant""" if etudid in self.nt.validations.ue_capitalisees.index: return self.nt.validations.ue_capitalisees.loc[[etudid]].to_dict("records") return [] # ----------------------------------------------------------------------------- - def get_listesNotesEtCoeffsTagEtudiant(self, tag, etudid): + def get_listesNotesEtCoeffsTagEtudiant(self, + tag, + etudid): """Renvoie un triplet (notes, coeffs_norm, ponderations) où notes, coeff_norm et ponderation désignent trois listes donnant -pour un tag donné- les note, coeff et ponderation de chaque modimpl à prendre en compte dans le calcul de la moyenne du tag. @@ -343,7 +353,10 @@ class SemestreTag(pe_tagtable.TableTag): # ----------------------------------------------------------------------------- # Fonctions d'affichage (et d'export csv) des données du semestre en mode debug # ----------------------------------------------------------------------------- - def str_detail_resultat_d_un_tag(self, tag, etudid=None, delim=";"): + def str_detail_resultat_d_un_tag(self, + tag, + etudid=None, + delim=";"): """Renvoie une chaine de caractère décrivant les résultats d'étudiants à un tag : rappelle les notes obtenues dans les modules à prendre en compte, les moyennes et les rangs calculés. Si etudid=None, tous les étudiants inscrits dans le semestre sont pris en compte. Sinon seuls les étudiants indiqués sont affichés. @@ -463,7 +476,8 @@ class SemestreTag(pe_tagtable.TableTag): # ********************************************* -def comp_coeff_pond(coeffs, ponderations): +def comp_coeff_pond(coeffs, + ponderations): """ Applique une ponderation (indiquée dans la liste ponderations) à une liste de coefficients : ex: coeff = [2, 3, 1, None], ponderation = [1, 2, 0, 1] => [2*1, 3*2, 1*0, None] @@ -499,7 +513,9 @@ def get_moduleimpl(modimpl_id) -> dict: # ********************************************** -def get_moy_ue_from_nt(nt, etudid, modimpl_id) -> float: +def get_moy_ue_from_nt(nt, + etudid, + modimpl_id) -> float: """Renvoie la moyenne de l'UE d'un etudid dans laquelle se trouve le module de modimpl_id """ diff --git a/app/pe/pe_settag.py b/app/pe/pe_settag.py index f8c35bd42..a0ded4f52 100644 --- a/app/pe/pe_settag.py +++ b/app/pe/pe_settag.py @@ -51,15 +51,19 @@ class SetTag(pe_tagtable.TableTag): """ # ------------------------------------------------------------------------------------------------------------------- - def __init__(self, nom_combinaison, parcours): + def __init__(self, + nom_combinaison, + parcours): pe_tagtable.TableTag.__init__(self, nom=nom_combinaison) self.combinaison = nom_combinaison self.parcours = parcours # Le groupe de semestres/parcours à aggréger # ------------------------------------------------------------------------------------------- - def set_Etudiants( - self, etudiants: list[dict], juryPEDict, etudInfoDict, nom_sem_final=None - ): + def set_Etudiants(self, + etudiants: list[dict], + juryPEDict, + etudInfoDict, + nom_sem_final=None): """Détermine la liste des étudiants à prendre en compte, en partant de la liste en paramètre et en vérifiant qu'ils ont tous un parcours valide.""" if nom_sem_final: @@ -94,7 +98,8 @@ class SetTag(pe_tagtable.TableTag): ) # --------------------------------------------------------------------------------------------- - def set_SemTagDict(self, SemTagDict): + def set_SemTagDict(self, + SemTagDict): """Mémorise les semtag nécessaires au jury.""" self.SemTagDict = {fid: SemTagDict[fid] for fid in self.get_Fids_in_settag()} if PE_DEBUG >= 1: @@ -152,7 +157,9 @@ class SetTag(pe_tagtable.TableTag): self.tagdict[tag][mod] = semtag.tagdict[tag][mod] # ------------------------------------------------------------------------------------------------------------------- - def get_NotesEtCoeffsSetTagEtudiant(self, tag, etudid): + def get_NotesEtCoeffsSetTagEtudiant(self, + tag, + etudid): """Récupère tous les notes et les coeffs d'un étudiant relatives à un tag dans ses semestres valides et les renvoie dans un tuple (notes, coeffs) avec notes et coeffs deux listes""" lesSemsDeLEtudiant = [ @@ -172,7 +179,9 @@ class SetTag(pe_tagtable.TableTag): return (notes, coeffs) # ------------------------------------------------------------------------------------------------------------------- - def comp_MoyennesSetTag(self, tag, force=False): + def comp_MoyennesSetTag(self, + tag, + force=False): """Calcule et renvoie les "moyennes" des étudiants à un tag donné, en prenant en compte tous les semestres taggués de l'aggrégat, et leur coeff Par moyenne, s'entend une note moyenne, la somme des coefficients de pondération appliqué dans cette moyenne. @@ -203,19 +212,25 @@ class SetTag(pe_tagtable.TableTag): class SetTagInterClasse(pe_tagtable.TableTag): - """Récupère les moyennes de SetTag aggrégant un même parcours (par ex un ['S1', 'S2'] n'ayant pas fini au même S2 + """Récupère les moyennes de SetTag aggrégeant un même parcours (par ex un ['S1', 'S2'] n'ayant pas fini au même S2 pour fournir un interclassement sur un groupe d'étudiant => seul compte alors la promo nom_combinaison = 'S1' ou '1A' """ # ------------------------------------------------------------------------------------------------------------------- - def __init__(self, nom_combinaison, diplome): + def __init__(self, + nom_combinaison, + diplome): pe_tagtable.TableTag.__init__(self, nom=f"{nom_combinaison}_{diplome or ''}") self.combinaison = nom_combinaison self.parcoursDict = {} # ------------------------------------------------------------------------------------------- - def set_Etudiants(self, etudiants, juryPEDict, etudInfoDict, nom_sem_final=None): + def set_Etudiants(self, + etudiants, + juryPEDict, + etudInfoDict, + nom_sem_final=None): """Détermine la liste des étudiants à prendre en compte, en partant de la liste fournie en paramètre et en vérifiant que l'étudiant dispose bien d'un parcours valide pour la combinaison demandée. Renvoie le nombre d'étudiants effectivement inscrits.""" @@ -237,7 +252,8 @@ class SetTagInterClasse(pe_tagtable.TableTag): ) # --------------------------------------------------------------------------------------------- - def set_SetTagDict(self, SetTagDict): + def set_SetTagDict(self, + SetTagDict): """Mémorise les settag nécessaires au jury.""" self.SetTagDict = { fid: SetTagDict[fid] for fid in self.get_Fids_in_settag() if fid != None @@ -285,7 +301,9 @@ class SetTagInterClasse(pe_tagtable.TableTag): return sorted(list(set(ensemble))) # ------------------------------------------------------------------------------------------------------------------- - def get_NotesEtCoeffsSetTagEtudiant(self, tag, etudid): + def get_NotesEtCoeffsSetTagEtudiant(self, + tag, + etudid): """Récupère tous les notes et les coeffs d'un étudiant relatives à un tag dans ses semestres valides et les renvoie dans un tuple (notes, coeffs) avec notes et coeffs deux listes""" leSetTagDeLetudiant = self.parcoursDict[etudid][self.combinaison] @@ -297,7 +315,9 @@ class SetTagInterClasse(pe_tagtable.TableTag): return (note, coeff) # ------------------------------------------------------------------------------------------------------------------- - def get_MoyennesSetTag(self, tag, force=False): + def get_MoyennesSetTag(self, + tag, + force=False): """Renvoie les "moyennes" des étudiants à un tag donné, en prenant en compte tous les settag de l'aggrégat, et leur coeff Par moyenne, s'entend une note moyenne, la somme des coefficients de pondération appliqué dans cette moyenne. diff --git a/app/pe/pe_tagtable.py b/app/pe/pe_tagtable.py index 49bf22cc8..d974b8577 100644 --- a/app/pe/pe_tagtable.py +++ b/app/pe/pe_tagtable.py @@ -77,7 +77,9 @@ class TableTag(object): # ***************************************************************************************************************** # ----------------------------------------------------------------------------------------------------------- - def get_moy_from_resultats(self, tag, etudid): + def get_moy_from_resultats(self, + tag, + etudid): """Renvoie la moyenne obtenue par un étudiant à un tag donné au regard du format de self.resultats""" return ( self.resultats[tag][etudid][0] @@ -86,7 +88,9 @@ class TableTag(object): ) # ----------------------------------------------------------------------------------------------------------- - def get_rang_from_resultats(self, tag, etudid): + def get_rang_from_resultats(self, + tag, + etudid): """Renvoie le rang à un tag d'un étudiant au regard du format de self.resultats""" return ( self.rangs[tag][etudid] @@ -95,7 +99,9 @@ class TableTag(object): ) # ----------------------------------------------------------------------------------------------------------- - def get_coeff_from_resultats(self, tag, etudid): + def get_coeff_from_resultats(self, + tag, + etudid): """Renvoie la somme des coeffs de pondération normalisée utilisés dans le calcul de la moyenne à un tag d'un étudiant au regard du format de self.resultats. """ @@ -117,15 +123,18 @@ class TableTag(object): return len(self.inscrlist) # ----------------------------------------------------------------------------------------------------------- - def get_moy_from_stats(self, tag): + def get_moy_from_stats(self, + tag): """Renvoie la moyenne des notes calculées pour d'un tag donné""" return self.statistiques[tag][0] if tag in self.statistiques else None - def get_min_from_stats(self, tag): + def get_min_from_stats(self, + tag): """Renvoie la plus basse des notes calculées pour d'un tag donné""" return self.statistiques[tag][1] if tag in self.statistiques else None - def get_max_from_stats(self, tag): + def get_max_from_stats(self, + tag): """Renvoie la plus haute des notes calculées pour d'un tag donné""" return self.statistiques[tag][2] if tag in self.statistiques else None @@ -142,7 +151,9 @@ class TableTag(object): "min", ) - def get_resultatsEtud(self, tag, etudid): + def get_resultatsEtud(self, + tag, + etudid): """Renvoie un tuple (note, coeff, rang, nb_inscrit, moy, min, max) synthétisant les résultats d'un étudiant à un tag donné. None sinon""" return ( @@ -164,7 +175,9 @@ class TableTag(object): # ***************************************************************************************************************** # ----------------------------------------------------------------------------------------------------------- - def add_moyennesTag(self, tag, listMoyEtCoeff) -> bool: + def add_moyennesTag(self, + tag, + listMoyEtCoeff) -> bool: """ Mémorise les moyennes, les coeffs de pondération et les etudid dans resultats avec calcul du rang @@ -197,7 +210,8 @@ class TableTag(object): # Méthodes dévolues aux calculs de statistiques (min, max, moy) sur chaque moyenne taguée # ***************************************************************************************************************** - def comp_stats_d_un_tag(self, tag): + def comp_stats_d_un_tag(self, + tag): """ Calcule la moyenne generale, le min, le max pour un tag donné, en ne prenant en compte que les moyennes significatives. Mémorise le resultat dans @@ -221,7 +235,10 @@ class TableTag(object): # ************************************************************************ # Méthodes dévolues aux affichages -> a revoir # ************************************************************************ - def str_resTag_d_un_etudiant(self, tag, etudid, delim=";"): + def str_resTag_d_un_etudiant(self, + tag, + etudid, + delim=";"): """Renvoie une chaine de caractères (valable pour un csv) décrivant la moyenne et le rang d'un étudiant, pour un tag donné ; """ @@ -236,14 +253,20 @@ class TableTag(object): ) return moystr - def str_res_d_un_etudiant(self, etudid, delim=";"): + def str_res_d_un_etudiant(self, + etudid, + delim=";"): """Renvoie sur une ligne les résultats d'un étudiant à tous les tags (par ordre alphabétique).""" return delim.join( [self.str_resTag_d_un_etudiant(tag, etudid) for tag in self.get_all_tags()] ) # ----------------------------------------------------------------------- - def str_moytag(cls, moyenne, rang, nbinscrit, delim=";"): + def str_moytag(cls, + moyenne, + rang, + nbinscrit, + delim=";"): """Renvoie une chaine de caractères représentant une moyenne (float ou string) et un rang pour différents formats d'affichage : HTML, debug ligne de commande, csv""" moystr = ( @@ -256,7 +279,9 @@ class TableTag(object): str_moytag = classmethod(str_moytag) # ----------------------------------------------------------------------- - def str_tagtable(self, delim=";", decimal_sep=","): + def str_tagtable(self, + delim=";", + decimal_sep=","): """Renvoie une chaine de caractère listant toutes les moyennes, les rangs des étudiants pour tous les tags.""" entete = ["etudid", "nom", "prenom"] for tag in self.get_all_tags(): @@ -288,7 +313,9 @@ class TableTag(object): # ********************************************* -def moyenne_ponderee_terme_a_terme(notes, coefs=None, force=False): +def moyenne_ponderee_terme_a_terme(notes, + coefs=None, + force=False): """ Calcule la moyenne pondérée d'une liste de notes avec d'éventuels coeffs de pondération. Renvoie le résultat sous forme d'un tuple (moy, somme_coeff) diff --git a/app/pe/pe_tools.py b/app/pe/pe_tools.py index ead3a2d18..133a07883 100644 --- a/app/pe/pe_tools.py +++ b/app/pe/pe_tools.py @@ -76,7 +76,8 @@ PE_LOCAL_FOOTER_TMPL = REP_LOCAL_AVIS + "local/modeles/un_footer.tex" # ---------------------------------------------------------------------------------------- -def print_semestres_description(sems, avec_affichage_debug=False): +def print_semestres_description(sems, + avec_affichage_debug=False): """Dediee a l'affichage d'un semestre pour debug du module""" def chaine_semestre(sem): @@ -119,7 +120,6 @@ def calcul_age(born): ) -# ---------------------------------------------------------------------------------------- def remove_accents(input_unicode_str): """Supprime les accents d'une chaine unicode""" nfkd_form = unicodedata.normalize("NFKD", input_unicode_str) @@ -166,7 +166,10 @@ def list_directory_filenames(path): return R -def add_local_file_to_zip(zipfile, ziproot, pathname, path_in_zip): +def add_local_file_to_zip(zipfile, + ziproot, + pathname, + path_in_zip): """Read pathname server file and add content to zip under path_in_zip""" rooted_path_in_zip = os.path.join(ziproot, path_in_zip) zipfile.write(filename=pathname, arcname=rooted_path_in_zip) @@ -174,7 +177,8 @@ def add_local_file_to_zip(zipfile, ziproot, pathname, path_in_zip): # zipfile.writestr(rooted_path_in_zip, data) -def add_refs_to_register(register, directory): +def add_refs_to_register(register, + directory): """Ajoute les fichiers trouvés dans directory au registre (dictionaire) sous la forme filename => pathname """ @@ -184,7 +188,8 @@ def add_refs_to_register(register, directory): register[filename] = pathname -def add_pe_stuff_to_zip(zipfile, ziproot): +def add_pe_stuff_to_zip(zipfile, + ziproot): """Add auxiliary files to (already opened) zip Put all local files found under config/doc_poursuites_etudes/local and config/doc_poursuites_etudes/distrib