forked from viennet/Referentiels
Amélioration du dump yaml
This commit is contained in:
parent
7d797ddde3
commit
b3b1e359d1
@ -149,7 +149,8 @@ for r in liste_ressources:
|
|||||||
nettoie_prerequis(r)
|
nettoie_prerequis(r)
|
||||||
|
|
||||||
# Remet en forme le descriptif
|
# Remet en forme le descriptif
|
||||||
nettoie_description(r)
|
split_description(r)
|
||||||
|
nettoie_contenus(r)
|
||||||
|
|
||||||
# Tri dans le bon semestre
|
# Tri dans le bon semestre
|
||||||
ressources[r.semestre] += [r]
|
ressources[r.semestre] += [r]
|
||||||
|
@ -2,7 +2,8 @@ import re
|
|||||||
from officiel import *
|
from officiel import *
|
||||||
from modeles import *
|
from modeles import *
|
||||||
from officiel import supprime_accent_espace
|
from officiel import supprime_accent_espace
|
||||||
from collections import OrderedDict
|
import ruamel.yaml
|
||||||
|
from ruamel.yaml.scalarstring import FoldedScalarString as folded
|
||||||
|
|
||||||
__LOGGER = logging.getLogger(__name__)
|
__LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -41,6 +42,7 @@ class Ressource():
|
|||||||
return int(self.semestre[1])
|
return int(self.semestre[1])
|
||||||
|
|
||||||
def to_yaml(self):
|
def to_yaml(self):
|
||||||
|
|
||||||
dico = {"nom": self.nom,
|
dico = {"nom": self.nom,
|
||||||
"code": self.code,
|
"code": self.code,
|
||||||
"semestre" : self.str_semestre(),
|
"semestre" : self.str_semestre(),
|
||||||
@ -49,11 +51,14 @@ class Ressource():
|
|||||||
"acs": self.apprentissages,
|
"acs": self.apprentissages,
|
||||||
"sae": "",
|
"sae": "",
|
||||||
"prerequis": self.prerequis,
|
"prerequis": self.prerequis,
|
||||||
"contexte": self.contexte,
|
"contexte": folded(self.contexte),
|
||||||
"contenu": self.contenu,
|
"contenu": folded(self.contenu),
|
||||||
"motscles": self.mots
|
"motscles": self.mots
|
||||||
}
|
}
|
||||||
output = yaml.dump(dico, Dumper=yaml.Dumper, sort_keys=False, allow_unicode=True)
|
# output = yaml.dump(dico, #Dumper=yaml.Dumper,
|
||||||
|
# sort_keys=False, allow_unicode=True)
|
||||||
|
output = ruamel.yaml.dump(dico, Dumper=ruamel.yaml.RoundTripDumper,
|
||||||
|
allow_unicode=True)
|
||||||
return output
|
return output
|
||||||
|
|
||||||
def to_latex(self):
|
def to_latex(self):
|
||||||
@ -242,7 +247,8 @@ def devine_ressources_by_nom(donnees):
|
|||||||
codes += [code]
|
codes += [code]
|
||||||
return sorted(list(set(codes)))
|
return sorted(list(set(codes)))
|
||||||
|
|
||||||
def nettoie_description(r):
|
def split_description(r):
|
||||||
|
"""Découpe le champ description en un contexte+un contenu ; si pas possible """
|
||||||
champs = r.description.split("\n")
|
champs = r.description.split("\n")
|
||||||
champs = [c for c in champs if c] # supprime les lignes vides
|
champs = [c for c in champs if c] # supprime les lignes vides
|
||||||
|
|
||||||
@ -251,17 +257,30 @@ def nettoie_description(r):
|
|||||||
indicea = [ligne.startswith("Contexte et ") for ligne in champs].index(True)
|
indicea = [ligne.startswith("Contexte et ") for ligne in champs].index(True)
|
||||||
|
|
||||||
indicec = 0
|
indicec = 0
|
||||||
|
contexte = ""
|
||||||
if True in [ligne.startswith("Contenus") for ligne in champs]: # la ligne commençant par Contenus
|
if True in [ligne.startswith("Contenus") for ligne in champs]: # la ligne commençant par Contenus
|
||||||
indicec = [ligne.startswith("Contenus") for ligne in champs].index(True)
|
indicec = [ligne.startswith("Contenus") for ligne in champs].index(True)
|
||||||
if indicea>0:
|
if indicea>0:
|
||||||
contexte = "\n".join(champs[indicea:indicec])
|
contexte = "\n\n".join(champs[indicea+1:indicec]) # double \n pour passage en latex
|
||||||
else:
|
else:
|
||||||
contexte = "\n".join(champs[:indicec])
|
contexte = "\n\n".join(champs[:indicec])
|
||||||
|
contenu = "\n".join(champs[indicec+1:])
|
||||||
|
|
||||||
contenus = champs[indicec+1:]
|
# sauvegarde des champs
|
||||||
# suppression des \t
|
r.contexe = contexte
|
||||||
contenus = [ligne.rstrip().replace("--", "-") for ligne in contenus]
|
r.contenu = contenu
|
||||||
contenus = [c for c in contenus if c] # supprime les lignes vides
|
|
||||||
|
def remove_ligne_vide(contenus):
|
||||||
|
"""Supprime les lignes vides"""
|
||||||
|
return [c for c in contenus if c]
|
||||||
|
|
||||||
|
def get_marqueur_numerique(contenu):
|
||||||
|
"""Revoie la liste des marqueurs numériques"""
|
||||||
|
m = re.findall(r"(\d/|\d\s\))", contenu)
|
||||||
|
return m
|
||||||
|
|
||||||
|
def get_marqueurs(contenus):
|
||||||
|
"""Renvoie la liste des marqueurs partant d'une liste de ligne"""
|
||||||
marqueurs = []
|
marqueurs = []
|
||||||
for ligne in contenus:
|
for ligne in contenus:
|
||||||
m = re.search(r"(\t)*", ligne) # dès \t ?
|
m = re.search(r"(\t)*", ligne) # dès \t ?
|
||||||
@ -269,22 +288,27 @@ def nettoie_description(r):
|
|||||||
ajout = m.group()
|
ajout = m.group()
|
||||||
else:
|
else:
|
||||||
ajout = ""
|
ajout = ""
|
||||||
ligne = ligne.replace("\t","")[0]
|
ligne = ligne.replace("\t","")[0].rstrip() # le marqueur en début de ligne (si 1 caractère)
|
||||||
if ligne[0] not in string.ascii_letters and ligne[0] != "É":
|
if ligne[0] not in string.ascii_letters and ligne[0] != "É":
|
||||||
marqueurs += [ajout + ligne[0]]
|
marqueurs += [ajout + ligne[0]] # tous les symboles
|
||||||
|
|
||||||
def has_digits(liste):
|
marqueurs_finaux = [] # tri les marqueurs en supprimant les doublons et en gardant un ordre (pour détecter les sous listes)
|
||||||
return sum([m in string.digits for m in liste])>0
|
|
||||||
|
|
||||||
a_marqueur_numerique = has_digits(marqueurs) # des marqueurs numériques ?
|
|
||||||
marqueurs_finaux = [] # tri les marqueurs
|
|
||||||
for m in marqueurs:
|
for m in marqueurs:
|
||||||
if m not in string.digits and m not in marqueurs_finaux:
|
if m not in marqueurs_finaux:
|
||||||
marqueurs_finaux.append(m)
|
|
||||||
elif m not in marqueurs_finaux:
|
|
||||||
if a_marqueur_numerique:
|
|
||||||
if not has_digits(marqueurs_finaux):
|
|
||||||
marqueurs_finaux.append(m)
|
marqueurs_finaux.append(m)
|
||||||
|
return marqueurs_finaux
|
||||||
|
|
||||||
|
def nettoie_contenus(r):
|
||||||
|
# suppression des \t
|
||||||
|
contenu = r.contenu
|
||||||
|
marqueurs_numeriques = get_marqueur_numerique(contenu)
|
||||||
|
for m in marqueurs_numeriques: # remplace les marqueurs numériques
|
||||||
|
contenu = contenu.replace(m, ">")
|
||||||
|
|
||||||
|
contenus = [ligne.rstrip().replace("--", "-") for ligne in r.contenu.split("\n")] # les contenus
|
||||||
|
contenus = remove_ligne_vide(contenus) # supprime les lignes vides
|
||||||
|
|
||||||
|
marqueurs_finaux = get_marqueurs(contenus)
|
||||||
|
|
||||||
contenus_fin = contenus[:] # copie des ligne
|
contenus_fin = contenus[:] # copie des ligne
|
||||||
for (i, ligne) in enumerate(contenus):
|
for (i, ligne) in enumerate(contenus):
|
||||||
@ -301,9 +325,8 @@ def nettoie_description(r):
|
|||||||
|
|
||||||
contenu = "\n".join(contenus_fin)
|
contenu = "\n".join(contenus_fin)
|
||||||
|
|
||||||
r.contexte = contexte
|
|
||||||
r.contenu = contenu
|
r.contenu = contenu
|
||||||
print(r.nom, contexte, contenu, sep="\n")
|
|
||||||
|
|
||||||
if __name__=="__main__":
|
if __name__=="__main__":
|
||||||
# Eléments de test
|
# Eléments de test
|
||||||
|
Loading…
Reference in New Issue
Block a user