Sépare les classes RessourceDocx et Ressource

This commit is contained in:
Cléo Baras 2021-04-02 11:54:35 +02:00
parent 654bd9f615
commit e5fd634121
3 changed files with 100 additions and 92 deletions

View File

@ -1,5 +1,4 @@
import os
from ressource import Ressource
from ressourcedocx import *
import logging

99
python/ressource.py Normal file
View File

@ -0,0 +1,99 @@
import logging
import pypandoc
import ruamel.yaml
from modeles import get_modele, TemplateLatex
from officiel import DATA_ACS, get_officiel_sae_name_by_code, get_officiel_ressource_name_by_code
from ressourcedocx import caracteres_recalcitrants, remove_ligne_vide
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()
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")
if self.ressource["code"] == "R107":
print("ici")
# 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
code_ac = self.ressource["acs"][accomp][no_ac]
comps.append( ajoutac % (code_ac, DATA_ACS[accomp][code_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 = ""
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 = self.ressource["contexte"]
contexte = contexte.replace("\n", "\n\n").replace("\n" * 4,
"\n") # corrige les suppressions de ligne à la relecture du yaml
output = pypandoc.convert_text(contexte, 'tex', format='md',
extra_args=['--atx-headers'])
output = output.replace("\r\n", "\n")
contexte = caracteres_recalcitrants(output)
contexte = remove_ligne_vide(contexte)
# contexte = remove_ligne_vide(contexte)
# préparation du contenu
contenu = self.ressource["contenu"] #supprime les passages à la ligne
contenu = contenu.replace("\n", "\n\n").replace("\n"*4, "\n") # corrige les suppressions de ligne à la relecture du yaml
output = pypandoc.convert_text(contenu, 'tex', format='md',
extra_args=['--atx-headers'])
output = output.replace("\r\n", "\n")
contenu = caracteres_recalcitrants(output)
contenu = remove_ligne_vide(contenu)
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=caracteres_recalcitrants(self.ressource["motscles"]),
prerequis=prerequis,
contexte=caracteres_recalcitrants(contexte),
contenu=contenu,
)
# chaine = chaine.replace("&", "\&")
chaine = chaine.replace("\\tightlist\n", "")
return chaine

View File

@ -4,7 +4,6 @@ from modeles import *
from officiel import supprime_accent_espace, get_code_from_nom
import ruamel.yaml
from ruamel.yaml.scalarstring import FoldedScalarString as folded
import pypandoc
__LOGGER = logging.getLogger(__name__)
@ -339,95 +338,6 @@ def nettoie_contenus(r):
r.contenu = contenu
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()
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")
if self.ressource["code"] == "R107":
print("ici")
# 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
code_ac = self.ressource["acs"][accomp][no_ac]
comps.append( ajoutac % (code_ac, DATA_ACS[accomp][code_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 = ""
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 = self.ressource["contexte"]
contexte = contexte.replace("\n", "\n\n").replace("\n" * 4,
"\n") # corrige les suppressions de ligne à la relecture du yaml
output = pypandoc.convert_text(contexte, 'tex', format='md',
extra_args=['--atx-headers'])
output = output.replace("\r\n", "\n")
contexte = caracteres_recalcitrants(output)
contexte = remove_ligne_vide(contexte)
# contexte = remove_ligne_vide(contexte)
# préparation du contenu
contenu = self.ressource["contenu"] #supprime les passages à la ligne
contenu = contenu.replace("\n", "\n\n").replace("\n"*4, "\n") # corrige les suppressions de ligne à la relecture du yaml
output = pypandoc.convert_text(contenu, 'tex', format='md',
extra_args=['--atx-headers'])
output = output.replace("\r\n", "\n")
contenu = caracteres_recalcitrants(output)
contenu = remove_ligne_vide(contenu)
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=caracteres_recalcitrants(self.ressource["motscles"]),
prerequis=prerequis,
contexte=caracteres_recalcitrants(contexte),
contenu=contenu,
)
# chaine = chaine.replace("&", "\&")
chaine = chaine.replace("\\tightlist\n", "")
return chaine
def caracteres_recalcitrants(contenu):
contenu = contenu.replace("", "è").replace("", "'").replace("", "é")