From 3aea1746699b5b0ac36e38696df5c0e8e7a6cd1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9o=20Baras?= Date: Tue, 30 Mar 2021 09:22:21 +0200 Subject: [PATCH] Export yaml (avec pb d'encodage) --- python/export.py | 31 ++++++++++++----------------- python/officiel.py | 25 ++++++++++++++++++++++- python/ressource.py | 48 ++++++++++++++++++++++++++++----------------- 3 files changed, 67 insertions(+), 37 deletions(-) diff --git a/python/export.py b/python/export.py index dac9b95..fc3a575 100644 --- a/python/export.py +++ b/python/export.py @@ -165,25 +165,10 @@ for sem in ressources: # ************************************************************************ # Affichages divers - -# Bilan des heures & Calcul somme des heures par semestre -ligne = "{:20s} | {:75s} | {:10s} | {:10s} |" -trait = "-"*len(ligne.format("", "", "", "")) - +# Le tableau des heures ressources for sem in ressources: # parcours des semestres - ressem = ressources[sem] # les ressources du semestre - print(f"Semestre {sem}") - print(trait, ligne.format("Code", "Ressource", "Form.", "dont TP"), trait, sep="\n") - for r in ressem: - print(ligne.format(r.code if r.code else "MANQUANT", - # r.nom[:30] + ("..." if len(r.nom) > 30 else "") , - r.nom, - str(r.heures_encadrees) if r.heures_encadrees else "MANQUANT", - str(r.tp) if r.tp else "MANQUANT")) - heures_formation_total = sum([r.heures_encadrees for r in ressem if r.heures_encadrees != None]) - heures_tp_total = sum([r.tp for r in ressem if r.tp != None]) - print(trait, ligne.format("", "Total", str(heures_formation_total), str(heures_tp_total)), trait, sep="\n") - + # print(f"Semestre {sem}") + chaine = affiche_bilan_heures(ressources, sem) # Matrice ACS/ressources @@ -195,6 +180,16 @@ for sem in ressources: # print("Matrice du semestre " + sem) (matrices[sem], chaine) = get_matrices_ac_ressource(ressources, sem) +# Export yaml +WITH_EXPORT = True +for sem in ressources: + for r in ressources[sem]: + output = r.to_yaml() + if WITH_EXPORT and r.code: + fichier = "export/{}.yml".format(r.code) + with open(fichier, "w", encoding="utf8") as fid: + fid.write(output) + for sem in ressources: for r in ressources[sem]: diff --git a/python/officiel.py b/python/officiel.py index 19a46ed..d07a574 100644 --- a/python/officiel.py +++ b/python/officiel.py @@ -68,4 +68,27 @@ def get_matrices_ac_ressource(ressources, sem): valeurs = tuple(valeurs) chaine += ligne.format(*valeurs) + "\n" chaine += trait + "\n" - return (matrice, chaine) \ No newline at end of file + return (matrice, chaine) + +def affiche_bilan_heures(ressources, sem): + """Renvoie une chaine décrivant un bilan des heures pour un sem donné""" + ligne = "{:20s} | {:75s} | {:10s} | {:10s} |" + trait = "-"*len(ligne.format("", "", "", "")) + + ressem = ressources[sem] # les ressources du semestre + chaine = "" + chaine += trait + "\n" + chaine += ligne.format("Code", "Ressource", "Form.", "dont TP") + "\n" + chaine += trait + "\n" + for r in ressem: + chaine += ligne.format(r.code if r.code else "MANQUANT", + # r.nom[:30] + ("..." if len(r.nom) > 30 else "") , + r.nom, + str(r.heures_encadrees) if r.heures_encadrees else "MANQUANT", + str(r.tp) if r.tp else "MANQUANT") + "\n" + heures_formation_total = sum([r.heures_encadrees for r in ressem if r.heures_encadrees != None]) + heures_tp_total = sum([r.tp for r in ressem if r.tp != None]) + chaine += trait + "\n" + chaine += ligne.format("", "Total", str(heures_formation_total), str(heures_tp_total)) + "\n" + chaine += trait + "\n" + return chaine diff --git a/python/ressource.py b/python/ressource.py index 05b5106..cc93bb9 100644 --- a/python/ressource.py +++ b/python/ressource.py @@ -2,6 +2,7 @@ import re from officiel import * from modeles import * from officiel import supprime_accent_espace +from collections import OrderedDict __LOGGER = logging.getLogger(__name__) @@ -30,6 +31,31 @@ class Ressource(): def __str__(self): print(self.nom + " " + self.code) + def str_heures_formations(self): + return str(self.heures_encadrees) if self.heures_encadrees else "???" + + def str_heures_tp(self): + return str(self.tp) if self.tp else "???" + + def str_semestre(self): + return int(self.semestre[1]) + + def to_yaml(self): + dico = {"nom": self.nom, + "code": self.code, + "semestre" : self.str_semestre(), + "heures_formation": self.str_heures_formations(), + "heures_tp": self.str_heures_tp(), + "acs": self.apprentissages, + "sae": "", + "prerequis": self.prerequis, + "contexte": self.contexte, + "contenu": self.contenu, + "motscles": self.mots + } + output = yaml.dump(dico, Dumper=yaml.Dumper, sort_keys=False) + return output + def to_latex(self): contenu = get_modele("pn/modele_ressource.tex") @@ -55,8 +81,8 @@ class Ressource(): chaine = TemplateLatex(contenu).substitute(code=self.code, nom=self.nom, - heures_formation=str(self.heures_encadrees) if self.heures_encadrees else "???", - heures_tp=str(self.tp) if self.tp else "???", + heures_formation=self.str_heures_formations(), + heures_tp=self.str_heures_tp(), compRT1=compRT[0], compRT2=compRT[1], compRT3=compRT[2], @@ -160,7 +186,7 @@ def nettoie_acs(r): donnees = r.apprentissages[comp] # chaine de caractères listant les ACS # donnees = donnees.replace("\t", "").replace("-", "") # supprime les tabulations acs_avec_code = devine_acs_by_code(donnees) - acs_avec_nom = devine_acs_by_nom(donnees) + acs_avec_nom = devine_code_by_nom_from_dict(donnees, DATA_ACS) acs_finaux = acs_avec_code + acs_avec_nom acs_finaux = [ac.replace(" ", "") for ac in acs_finaux] acs_finaux = sorted(list(set(acs_finaux))) @@ -169,7 +195,7 @@ def nettoie_acs(r): def nettoie_prerequis(r): """Nettoie les prérequis (ressource) en les remplaçant par leur code de ressource""" R_avec_code = devine_ressources_by_code(r.prerequis) - R_avec_nom = devine_ressources_by_code(r.prerequis) + R_avec_nom = devine_code_by_nom_from_dict(r.prerequis, DATA_RESSOURCES) R_finaux = sorted(list(set(R_avec_code + R_avec_nom))) if R_finaux: r.prerequis = R_finaux @@ -197,20 +223,6 @@ def devine_acs_by_code(champ): codes3 += [ "AC" + c[-3:] for c in codes4] # supprime le 0 des acs (codage AC0111) return sorted(list(set(codes3))) -def devine_acs_by_nom(donnees): - """Partant d'une chaine de caractères, détermine les codes des ACS - présent dans la donnée, en utilisant les infos officielles de - acs.yml""" - acs = [] - donnees_purge = supprime_accent_espace(donnees) - - for comp in DATA_ACS: - for code in DATA_ACS[comp]: - acs_purge = supprime_accent_espace(DATA_ACS[comp][code]) - if acs_purge in donnees_purge: - acs += [code] - return sorted(list(set(acs))) - def devine_ressources_by_code(champ): """Recherche les codes ressources de la forme RXXX dans champ ; """