Sépare le script de traitement en 2 : 1 pour le parsing -> yaml, 1 autre pour yaml -> latex

This commit is contained in:
Cléo Baras 2021-03-31 10:34:56 +02:00
parent 89068052b7
commit e2f7c7da2f
4 changed files with 128 additions and 96 deletions

View File

@ -61,7 +61,7 @@ for i in range(2, len(docu)): # A priori un tableau
nom_ressource = res[0][1][0]
# Création de la ressource
r = Ressource(nom_ressource, res)
r = RessourceDocx(nom_ressource, res)
liste_ressources.append(r)
# if len(res) != 15:
@ -195,9 +195,3 @@ for sem in ressources:
with open(fichier, "w", encoding="utf8") as fid:
fid.write(output)
for sem in ressources:
for r in ressources[sem]:
fichieryaml = "export/{}.yml".format(r.code)
fichierlatex = "../latex/ressources/{}.tex".format(r.code)
convert_ressource_yml_to_latex(fichieryaml, fichierlatex, "pn/modele_ressource.tex")

View File

@ -0,0 +1,28 @@
import os
from ressource import *
import logging
__LOGGER = logging.getLogger(__name__)
# Chargement des ressources
REPERTOIRE_RESSOURCES = "export"
REPERTOIRE_LATEX = "../latex/ressources"
fichiers = os.listdir(REPERTOIRE_RESSOURCES)
fichiers = sorted(fichiers) # tri par ordre alphabétique
ressources = {"S1": [], "S2": []}
for file in fichiers:
fichieryaml = REPERTOIRE_RESSOURCES + "/" + file
r = Ressource(fichieryaml) # lecture du fichier
sem = "S" + str(r.ressource["semestre"])
ressources[sem].append(r)
# Export latex
for sem in ressources:
for r in ressources[sem]:
fichierlatex = REPERTOIRE_LATEX + "/" + "{}.tex".format(r.ressource["code"])
contenu = r.str_to_latex()
with open(fichierlatex, "w", encoding="utf8") as fid:
fid.write(contenu)
print(f"Export de {fichierlatex} ")

View File

@ -107,3 +107,14 @@ def get_officiel_sae_name_by_code(code):
for rcode in DATA_SAES[sem]:
if rcode==code:
return DATA_SAES[sem][code]
def get_code_from_nom(ressource):
"""Récupère le code d'une ressource d'après son nom en utilisant les noms officiels
des ressources du yaml"""
nom = supprime_accent_espace(ressource.nom)
for sem in DATA_RESSOURCES:
for code in DATA_RESSOURCES[sem]:
nom_data = supprime_accent_espace(DATA_RESSOURCES[sem][code])
if nom.startswith(nom_data):
return code

View File

@ -1,15 +1,15 @@
import re
from officiel import *
from modeles import *
from officiel import supprime_accent_espace
from officiel import supprime_accent_espace, get_code_from_nom
import ruamel.yaml
from ruamel.yaml.scalarstring import FoldedScalarString as folded
__LOGGER = logging.getLogger(__name__)
class Ressource():
"""Classe modélisant les ressources"""
class RessourceDocx():
"""Classe modélisant les ressources, lorsqu'elles sont extraites du docx"""
def __init__(self, nom, brute):
self.nom = nom
self.brute = brute # les données brutes de la ressource
@ -188,15 +188,6 @@ def nettoie_mots_cles(r):
mots = mots.replace(".", "")
r.mots = mots
def get_code_from_nom(ressource):
"""Récupère le code d'une ressource d'après son nom en utilisant les noms officiels
des ressources du yaml"""
nom = supprime_accent_espace(ressource.nom)
for sem in DATA_RESSOURCES:
for code in DATA_RESSOURCES[sem]:
nom_data = supprime_accent_espace(DATA_RESSOURCES[sem][code])
if nom.startswith(nom_data):
return code
def devine_acs_by_code(champ):
"""Recherche les codes ressources de la forme ACXXX ou AC0XXX dans champ ;
@ -334,47 +325,57 @@ def nettoie_contenus(r):
r.contenu = contenu
def convert_ressource_yml_to_latex(fichieryaml, fichierlatex, modele):
modlatex = get_modele(modele) #"pn/modele_ressource.tex")
print(f"Export de {fichieryaml}")
class Ressource():
"""Modélise une ressource lorsqu'elle est extraite d'un yaml"""
__LOGGER = logging.getLogger(__name__)
def __init__(self, fichieryaml):
with open(fichieryaml, "r", encoding="utf8") as fid:
yaml = ruamel.yaml.YAML()
ressource = yaml.load(fid.read())
try:
self.ressource = yaml.load(fid.read())
except:
Ressource.__LOGGER.warning(f"Pb de chargement de {fichieryaml}")
def str_to_latex(self, modele="pn/modele_ressource.tex"):
"""Génère le code latex décrivant la ressource"""
modlatex = get_modele(modele) #"pn/modele_ressource.tex")
# Préparation des ac
ajoutac = "\\ajoutac{%s}{%s}"
compRT = []
for accomp in ressource["acs"]:
for accomp in self.ressource["acs"]:
comps = []
for no_ac in range(len(ressource["acs"][accomp])): # les ac de la comp
comps.append( ajoutac % (accomp, DATA_ACS[accomp][ressource["acs"][accomp][no_ac]]) )
for no_ac in range(len(self.ressource["acs"][accomp])): # les ac de la comp
comps.append( ajoutac % (accomp, DATA_ACS[accomp][self.ressource["acs"][accomp][no_ac]]) )
compRT.append("\n".join(comps))
# Préparation des sae
ajoutsaes = "\\ajoutsae{%s}{%s}"
saesRT = []
for (i, sae) in enumerate(ressource["sae"]): # in range(len(self.apprentissages)):
for (i, sae) in enumerate(self.ressource["sae"]): # in range(len(self.apprentissages)):
saesRT.append(ajoutsaes % (sae, get_officiel_sae_name_by_code(sae)))
saes = "\n".join(saesRT)
ajoutprerequis = "\\ajoutprerequis{%s}{%s}"
prerequis = ""
if ressource["prerequis"] == "Aucun":
if self.ressource["prerequis"] == "Aucun":
prerequis = ""
else:
liste = []
for (no, mod) in enumerate(ressource["prerequis"]):
for (no, mod) in enumerate(self.ressource["prerequis"]):
liste.append(ajoutprerequis % (mod, get_officiel_ressource_name_by_code(mod)))
prerequis = "\n".join(liste)
# préparation du contexte
contexte = ressource["contexte"]
contexte = self.ressource["contexte"]
# préparation du contenu
if ressource["code"] == "R107":
print("ici")
# if self.ressource["code"] == "R107":
# print("ici")
contenu = ressource["contenu"] #supprime les passages à la ligne
contenu = self.ressource["contenu"] #supprime les passages à la ligne
marqueurs = ["*", "\t*"] # les marqueurs de Markdown
for marq in marqueurs[::-1]:
@ -405,25 +406,23 @@ def convert_ressource_yml_to_latex(fichieryaml, fichierlatex, modele):
contenu = "\n".join(contenu_latex)
chaine = ""
chaine = TemplateLatex(modlatex).substitute(code=ressource["code"],
nom=ressource["nom"],
heures_formation=ressource["heures_formation"],
heures_tp=ressource["heures_tp"],
chaine = TemplateLatex(modlatex).substitute(code=self.ressource["code"],
nom=self.ressource["nom"],
heures_formation=self.ressource["heures_formation"],
heures_tp=self.ressource["heures_tp"],
compRT1=compRT[0],
compRT2=compRT[1],
compRT3=compRT[2],
saes=saes,
motscles=ressource["motscles"],
motscles=self.ressource["motscles"],
prerequis=prerequis,
contexte=contexte,
contenu=contenu
)
chaine = chaine.replace("&", "\&")
with open(fichierlatex, "w", encoding="utf8") as fid:
fid.write(chaine)
return chaine
if __name__=="__main__":
# Eléments de test
for sem in DATA_RESSOURCES: