From e2f7c7da2fa548727b7959cf9a1449c8c5a5aa52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9o=20Baras?= Date: Wed, 31 Mar 2021 10:34:56 +0200 Subject: [PATCH] =?UTF-8?q?S=C3=A9pare=20le=20script=20de=20traitement=20e?= =?UTF-8?q?n=202=20:=201=20pour=20le=20parsing=20->=20yaml,=201=20autre=20?= =?UTF-8?q?pour=20yaml=20->=20latex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- python/{export.py => export_docx_to_yaml.py} | 8 +- python/export_yaml_to_latex.py | 28 +++ python/officiel.py | 13 +- python/ressource.py | 175 +++++++++---------- 4 files changed, 128 insertions(+), 96 deletions(-) rename python/{export.py => export_docx_to_yaml.py} (95%) create mode 100644 python/export_yaml_to_latex.py diff --git a/python/export.py b/python/export_docx_to_yaml.py similarity index 95% rename from python/export.py rename to python/export_docx_to_yaml.py index 61eeae3..fa3df1b 100644 --- a/python/export.py +++ b/python/export_docx_to_yaml.py @@ -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") \ No newline at end of file diff --git a/python/export_yaml_to_latex.py b/python/export_yaml_to_latex.py new file mode 100644 index 0000000..106d91e --- /dev/null +++ b/python/export_yaml_to_latex.py @@ -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} ") \ No newline at end of file diff --git a/python/officiel.py b/python/officiel.py index 83d4698..bd33c75 100644 --- a/python/officiel.py +++ b/python/officiel.py @@ -106,4 +106,15 @@ def get_officiel_sae_name_by_code(code): for sem in DATA_SAES: for rcode in DATA_SAES[sem]: if rcode==code: - return DATA_SAES[sem][code] \ No newline at end of file + 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 \ No newline at end of file diff --git a/python/ressource.py b/python/ressource.py index b169efb..0b9f22f 100644 --- a/python/ressource.py +++ b/python/ressource.py @@ -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