From 5446ac0ed27d22cd89b3e250e7eeea9ad8dbaa77 Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Tue, 30 Jan 2024 11:02:28 +0100 Subject: [PATCH] PE: ajout coloness etudid, INE, NIP + some code cleaning --- app/pe/pe_etudiant.py | 86 +++++++++++++++++++++---------------------- 1 file changed, 41 insertions(+), 45 deletions(-) diff --git a/app/pe/pe_etudiant.py b/app/pe/pe_etudiant.py index 40f2c45cf..811180df1 100644 --- a/app/pe/pe_etudiant.py +++ b/app/pe/pe_etudiant.py @@ -38,27 +38,24 @@ Created on 17/01/2024 import pandas as pd from app.models import FormSemestre, Identite -import app.pe.pe_affichage as pe_affichage -import app.pe.pe_comp as pe_comp from app.pe import pe_comp, pe_affichage class EtudiantsJuryPE: + """Classe centralisant la gestion des étudiants à prendre en compte dans un jury de PE""" def __init__(self, annee_diplome: int): """ - Classe centralisant la gestion des étudiants à prendre en compte dans un jury de PE - Args: annee_diplome: L'année de diplomation """ self.annee_diplome = annee_diplome """L'année du diplôme""" - self.identites = {} # ex. ETUDINFO_DICT + self.identites: dict[int, Identite] = {} # ex. ETUDINFO_DICT "Les identités des étudiants traités pour le jury" - self.cursus = {} + self.cursus: dict[int, dict] = {} "Les cursus (semestres suivis, abandons) des étudiants" self.trajectoires = {} @@ -67,15 +64,17 @@ class EtudiantsJuryPE: (par ex: 3S=S1+S2+S3 à prendre en compte avec d'éventuels redoublements)""" self.etudiants_diplomes = {} - """Les identités des étudiants à considérer au jury (ceux qui seront effectivement diplômés)""" + """Les identités des étudiants à considérer au jury (ceux qui seront effectivement + diplômés)""" self.diplomes_ids = {} """Les etudids des étudiants diplômés""" self.etudiants_ids = {} - """Les etudids des étudiants dont il faut calculer les moyennes/classements (même si d'éventuels abandons). - Il s'agit des étudiants inscrits dans les co-semestres (ceux du jury mais aussi d'autres ayant - été réorientés ou ayant abandonnés)""" + """Les etudids des étudiants dont il faut calculer les moyennes/classements + (même si d'éventuels abandons). + Il s'agit des étudiants inscrits dans les co-semestres (ceux du jury mais aussi + d'autres ayant été réorientés ou ayant abandonnés)""" self.cosemestres: dict[int, FormSemestre] = None "Les cosemestres donnant lieu à même année de diplome" @@ -107,18 +106,15 @@ class EtudiantsJuryPE: pe_affichage.pe_print("2) Liste des étudiants dans les différents co-semestres") self.etudiants_ids = get_etudiants_dans_semestres(cosemestres) pe_affichage.pe_print( - " => %d étudiants trouvés dans les cosemestres" % len(self.etudiants_ids) + f" => {len(self.etudiants_ids)} étudiants trouvés dans les cosemestres" ) # Analyse des parcours étudiants pour déterminer leur année effective de diplome # avec prise en compte des redoublements, des abandons, .... pe_affichage.pe_print("3) Analyse des parcours individuels des étudiants") - no_etud = 0 - for no_etud, etudid in enumerate(self.etudiants_ids): - identite = Identite.get_etud(etudid) - self.identites[etudid] = identite - """identités des étudiants""" + for etudid in self.etudiants_ids: + self.identites[etudid] = Identite.get_etud(etudid) # Analyse son cursus self.analyse_etat_etudiant(etudid, cosemestres) @@ -131,7 +127,6 @@ class EtudiantsJuryPE: self.diplomes_ids = set(self.etudiants_diplomes.keys()) self.etudiants_ids = set(self.identites.keys()) - """Les étudiants dont il faut calculer les moyennes""" self.formsemestres_jury_ids = self.get_formsemestres() """Les formsemestres (des étudiants) dont il faut calculer les moyennes""" @@ -162,8 +157,6 @@ class EtudiantsJuryPE: # + ", ".join([str(fid) for fid in list(self.formsemestres_jury_ids)]) # ) - - def get_etudiants_diplomes(self) -> dict[int, Identite]: """Identités des étudiants (sous forme d'un dictionnaire `{etudid: Identite(etudid)}` qui vont être à traiter au jury PE pour @@ -175,9 +168,9 @@ class EtudiantsJuryPE: """ etudids = [ etudid - for etudid in self.cursus - if self.cursus[etudid]["diplome"] == self.annee_diplome - and self.cursus[etudid]["abandon"] is False + for etudid, cursus_etud in self.cursus.items() + if cursus_etud["diplome"] == self.annee_diplome + and cursus_etud["abandon"] is False ] etudiants = {etudid: self.identites[etudid] for etudid in etudids} return etudiants @@ -192,9 +185,9 @@ class EtudiantsJuryPE: """ etudids = [ etudid - for etudid in self.cursus - if self.cursus[etudid]["diplome"] != self.annee_diplome - or self.cursus[etudid]["abandon"] is True + for etudid, cursus_etud in self.cursus.items() + if cursus_etud["diplome"] != self.annee_diplome + or cursus_etud["abandon"] is True ] etudiants = {etudid: self.identites[etudid] for etudid in etudids} return etudiants @@ -224,9 +217,9 @@ class EtudiantsJuryPE: formsemestres = identite.get_formsemestres() semestres_etudiant = { - frmsem.formsemestre_id: frmsem - for frmsem in formsemestres - if frmsem.formation.is_apc() + formsemestre.formsemestre_id: formsemestre + for formsemestre in formsemestres + if formsemestre.formation.is_apc() } self.cursus[etudid] = { @@ -282,11 +275,12 @@ class EtudiantsJuryPE: # Tri des semestres par numéro de semestre for nom_sem in pe_comp.TOUS_LES_SEMESTRES: i = int(nom_sem[1]) # le n° du semestre + # les semestres de n°i de l'étudiant: semestres_i = { - fid: semestres_significatifs[fid] - for fid in semestres_significatifs - if semestres_significatifs[fid].semestre_id == i - } # les semestres de n°i de l'étudiant + fid: sem_sig + for fid, sem_sig in semestres_significatifs.items() + if sem_sig.semestre_id == i + } self.cursus[etudid][nom_sem] = semestres_i def get_trajectoire( @@ -323,7 +317,7 @@ class EtudiantsJuryPE: int(sem[-1]) for sem in pe_comp.PARCOURS[nom_aggregat]["aggregat"] ] assert numero_semestre_terminal in numero_semestres_possibles - else: # les xS = tous les semestres jusqu'à Sx (pax ex: des S1, S2, S3 pour un S3 terminal) + else: # les xS = tous les semestres jusqu'à Sx (eg S1, S2, S3 pour un S3 terminal) numero_semestres_possibles = list(range(1, numero_semestre_terminal + 1)) semestres_aggreges = {} @@ -380,23 +374,23 @@ class EtudiantsJuryPE: * '3S', '4S' : pour obtenir les combinaisons de semestres définies par les aggrégats Returns: - Un dictionnaire de la forme ``{fid: FormSemestre(fid)}`` + Un dictionnaire de la forme `{fid: FormSemestre(fid)}` Remarque: - Une liste de la forme ``[ 'Si', 'iA' , ... ]`` (combinant les formats précédents) est possible. + Une liste de la forme `[ 'Si', 'iA' , ... ]` (combinant les formats précédents) est possible. """ if semestres_recherches is None: # Appel récursif pour obtenir tous les semestres (validants) semestres = self.get_formsemestres(pe_comp.AGGREGAT_DIPLOMANT) return semestres - elif isinstance(semestres_recherches, list): + if isinstance(semestres_recherches, list): # Appel récursif sur tous les éléments de la liste semestres = {} for elmt in semestres_recherches: semestres_elmt = self.get_formsemestres(elmt) semestres = semestres | semestres_elmt return semestres - elif ( + if ( isinstance(semestres_recherches, str) and semestres_recherches in pe_comp.TOUS_LES_AGGREGATS ): @@ -405,7 +399,7 @@ class EtudiantsJuryPE: pe_comp.PARCOURS[semestres_recherches]["aggregat"] ) return semestres - elif ( + if ( isinstance(semestres_recherches, str) and semestres_recherches in pe_comp.TOUS_LES_SEMESTRES ): @@ -418,8 +412,8 @@ class EtudiantsJuryPE: if self.cursus[etudid][nom_sem]: semestres = semestres | self.cursus[etudid][nom_sem] return semestres - else: - raise ValueError("Probleme de paramètres d'appel dans get_formsemestreids") + + raise ValueError("Probleme de paramètres d'appel dans get_formsemestreids") def nbre_etapes_max_diplomes(self, etudids: list[int]) -> int: """Partant d'un ensemble d'étudiants, @@ -433,8 +427,7 @@ class EtudiantsJuryPE: nbres_semestres.append(self.cursus[etudid]["nb_semestres"]) if not nbres_semestres: return 0 - else: - return max(nbres_semestres) + return max(nbres_semestres) def df_administratif(self, etudids: list[int]) -> pd.DataFrame: """Synthétise toutes les données administratives d'un groupe @@ -461,13 +454,16 @@ class EtudiantsJuryPE: diplome = "indéterminé" administratif[etudid] = { + "etudid": etudiant.id, + "INE": etudiant.code_ine or "", + "NIP": etudiant.code_nip or "", "Nom": etudiant.nom, "Prenom": etudiant.prenom, "Civilite": etudiant.civilite_str, "Age": pe_comp.calcul_age(etudiant.date_naissance), - "Date d'entree": cursus["entree"], - "Date de diplome": diplome, - "Nbre de semestres": len(formsemestres), + "Date entree": cursus["entree"], + "Date diplome": diplome, + "Nb semestres": len(formsemestres), } # Ajout des noms de semestres parcourus