Export yaml (avec pb d'encodage)

This commit is contained in:
Cléo Baras 2021-03-30 09:22:21 +02:00
parent 01119cb15c
commit 3aea174669
3 changed files with 67 additions and 37 deletions

View File

@ -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]:

View File

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

View File

@ -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 ;
"""