Sépare le script de traitement en 2 : 1 pour le parsing -> yaml, 1 autre pour yaml -> latex
This commit is contained in:
parent
89068052b7
commit
e2f7c7da2f
@ -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")
|
28
python/export_yaml_to_latex.py
Normal file
28
python/export_yaml_to_latex.py
Normal 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} ")
|
@ -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
|
@ -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,95 +325,103 @@ 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}")
|
||||
with open(fichieryaml, "r", encoding="utf8") as fid:
|
||||
yaml = ruamel.yaml.YAML()
|
||||
ressource = yaml.load(fid.read())
|
||||
class Ressource():
|
||||
"""Modélise une ressource lorsqu'elle est extraite d'un yaml"""
|
||||
__LOGGER = logging.getLogger(__name__)
|
||||
|
||||
# Préparation des ac
|
||||
ajoutac = "\\ajoutac{%s}{%s}"
|
||||
compRT = []
|
||||
for accomp in 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]]) )
|
||||
compRT.append("\n".join(comps))
|
||||
def __init__(self, fichieryaml):
|
||||
with open(fichieryaml, "r", encoding="utf8") as fid:
|
||||
yaml = ruamel.yaml.YAML()
|
||||
try:
|
||||
self.ressource = yaml.load(fid.read())
|
||||
except:
|
||||
Ressource.__LOGGER.warning(f"Pb de chargement de {fichieryaml}")
|
||||
|
||||
# Préparation des sae
|
||||
ajoutsaes = "\\ajoutsae{%s}{%s}"
|
||||
saesRT = []
|
||||
for (i, sae) in enumerate(ressource["sae"]): # in range(len(self.apprentissages)):
|
||||
saesRT.append(ajoutsaes % (sae, get_officiel_sae_name_by_code(sae)))
|
||||
saes = "\n".join(saesRT)
|
||||
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")
|
||||
|
||||
ajoutprerequis = "\\ajoutprerequis{%s}{%s}"
|
||||
prerequis = ""
|
||||
if ressource["prerequis"] == "Aucun":
|
||||
|
||||
# Préparation des ac
|
||||
ajoutac = "\\ajoutac{%s}{%s}"
|
||||
compRT = []
|
||||
for accomp in self.ressource["acs"]:
|
||||
comps = []
|
||||
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(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 = ""
|
||||
else:
|
||||
liste = []
|
||||
for (no, mod) in enumerate(ressource["prerequis"]):
|
||||
liste.append(ajoutprerequis % (mod, get_officiel_ressource_name_by_code(mod)))
|
||||
prerequis = "\n".join(liste)
|
||||
if self.ressource["prerequis"] == "Aucun":
|
||||
prerequis = ""
|
||||
else:
|
||||
liste = []
|
||||
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"]
|
||||
# préparation du contexte
|
||||
contexte = self.ressource["contexte"]
|
||||
|
||||
# préparation du contenu
|
||||
if ressource["code"] == "R107":
|
||||
print("ici")
|
||||
# préparation du contenu
|
||||
# if self.ressource["code"] == "R107":
|
||||
# print("ici")
|
||||
|
||||
contenu = ressource["contenu"] #supprime les passages à la ligne
|
||||
marqueurs = ["*", "\t*"] # les marqueurs de Markdown
|
||||
contenu = self.ressource["contenu"] #supprime les passages à la ligne
|
||||
marqueurs = ["*", "\t*"] # les marqueurs de Markdown
|
||||
|
||||
for marq in marqueurs[::-1]:
|
||||
premier_marqueur = False
|
||||
contenu_balise = contenu.split("\n")
|
||||
contenu_latex = []
|
||||
for marq in marqueurs[::-1]:
|
||||
premier_marqueur = False
|
||||
contenu_balise = contenu.split("\n")
|
||||
contenu_latex = []
|
||||
|
||||
for (i, ligne) in enumerate(contenu_balise): # pour le contenu latex actuel
|
||||
un_marqueur = get_marqueur(ligne, [marq])
|
||||
if un_marqueur: # le marqueur est trouvé
|
||||
if premier_marqueur == False:
|
||||
contenu_latex.append("\\begin{itemize}")
|
||||
premier_marqueur = True
|
||||
contenu_latex.append( ligne.replace(marq, "\\item"))
|
||||
elif premier_marqueur == True: # le marqueur n'est plus trouvé
|
||||
contenu_latex.append( ligne.replace(marq, "\\item"))
|
||||
contenu_latex.append("\\end{itemize}")
|
||||
premier_marqueur = False
|
||||
else:
|
||||
contenu_latex.append(ligne) # la ligne d'origine
|
||||
if i == len(contenu_balise) -1 and premier_marqueur == True:
|
||||
contenu_latex.append("\\end{itemize}")
|
||||
premier_marqueur = True # ferme la dernière balise
|
||||
for (i, ligne) in enumerate(contenu_balise): # pour le contenu latex actuel
|
||||
un_marqueur = get_marqueur(ligne, [marq])
|
||||
if un_marqueur: # le marqueur est trouvé
|
||||
if premier_marqueur == False:
|
||||
contenu_latex.append("\\begin{itemize}")
|
||||
premier_marqueur = True
|
||||
contenu_latex.append( ligne.replace(marq, "\\item"))
|
||||
elif premier_marqueur == True: # le marqueur n'est plus trouvé
|
||||
contenu_latex.append( ligne.replace(marq, "\\item"))
|
||||
contenu_latex.append("\\end{itemize}")
|
||||
premier_marqueur = False
|
||||
else:
|
||||
contenu_latex.append(ligne) # la ligne d'origine
|
||||
if i == len(contenu_balise) -1 and premier_marqueur == True:
|
||||
contenu_latex.append("\\end{itemize}")
|
||||
premier_marqueur = True # ferme la dernière balise
|
||||
|
||||
# contenu_balise = contenu_latex[:]
|
||||
contenu = "\n".join(contenu_latex) # stocke le contenu
|
||||
# contenu_balise = contenu_latex[:]
|
||||
contenu = "\n".join(contenu_latex) # stocke le contenu
|
||||
|
||||
contenu = "\n".join(contenu_latex)
|
||||
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"],
|
||||
compRT1=compRT[0],
|
||||
compRT2=compRT[1],
|
||||
compRT3=compRT[2],
|
||||
saes=saes,
|
||||
motscles=ressource["motscles"],
|
||||
prerequis=prerequis,
|
||||
contexte=contexte,
|
||||
contenu=contenu
|
||||
)
|
||||
chaine = chaine.replace("&", "\&")
|
||||
with open(fichierlatex, "w", encoding="utf8") as fid:
|
||||
fid.write(chaine)
|
||||
chaine = ""
|
||||
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=self.ressource["motscles"],
|
||||
prerequis=prerequis,
|
||||
contexte=contexte,
|
||||
contenu=contenu
|
||||
)
|
||||
chaine = chaine.replace("&", "\&")
|
||||
return chaine
|
||||
|
||||
return chaine
|
||||
|
||||
if __name__=="__main__":
|
||||
# Eléments de test
|
||||
|
Loading…
Reference in New Issue
Block a user