diff --git a/python/export.py b/python/export.py index 80f329f..dac9b95 100644 --- a/python/export.py +++ b/python/export.py @@ -1,5 +1,5 @@ -import docx2python, yaml +import docx2python from ressource import * import logging @@ -192,33 +192,11 @@ les_codes_acs = [code for comp in DATA_ACS for code in DATA_ACS[comp]] nbre_acs = len(les_codes_acs) for sem in ressources: - ressem = ressources[sem] # les ressources du semestre - nbre_ressources_semestre = len(DATA_RESSOURCES[sem]) - if len(ressem) != nbre_ressources_semestre: - __LOGGER.warning(f"Pb => il manque des ressources au {sem}") + # print("Matrice du semestre " + sem) + (matrices[sem], chaine) = get_matrices_ac_ressource(ressources, sem) - matrices[sem] = [ [False]*nbre_ressources_semestre for i in range(nbre_acs)] - - for (i, r) in enumerate(ressem): # pour chaque ressource - for comp in range(len(r.apprentissages)): # pour chaque comp - - for (j, ac) in enumerate(les_codes_acs): # pour chaque ac - if ac in r.apprentissages[comp]: # si l'ac est prévue dans la ressource - matrices[r.semestre][j][i] = True - - print("Matrice du semestre " + sem) - ligne = "{:20s} | " + "{:4s} | "*nbre_ressources_semestre - valeurs = ("" for i in range(nbre_ressources_semestre+1)) - trait = "-"*len(ligne.format(*valeurs)) - # print(matrices["S1"]) - valeurs = [""] + [r.code if r.code else "????" for r in ressem] + [""]*(nbre_ressources_semestre-len(ressem)) - valeurs = tuple(valeurs) - print(ligne.format(*valeurs), trait, sep="\n") - for (j, ac) in enumerate(les_codes_acs): - valeurs = [ac] + [("X" if matrices[sem][j][i] == True else "") for i in range(nbre_ressources_semestre)] - valeurs = tuple(valeurs) - print(ligne.format(*valeurs)) for sem in ressources: for r in ressources[sem]: - print(r.to_latex()) \ No newline at end of file + pass + # print(r.to_latex()) \ No newline at end of file diff --git a/python/officiel.py b/python/officiel.py index dda564e..19a46ed 100644 --- a/python/officiel.py +++ b/python/officiel.py @@ -1,4 +1,5 @@ import logging, yaml +import unicodedata __LOGGER = logging.getLogger(__name__) @@ -11,3 +12,60 @@ with open("pn/acs.yml", 'r', encoding="utf8") as fid: with open("pn/saes.yml", 'r', encoding="utf8") as fid: DATA_SAES = yaml.load(fid.read(), Loader=yaml.Loader) + +def supprime_accent_espace(chaine): + """Met en minuscule, supprime les accents, les ponctuations et les espaces""" + purge = chaine.lower().replace("'", "").replace("’", "") + purge = unicodedata.normalize('NFD', purge).encode('ascii', 'ignore').decode('ascii') + purge = purge.replace(" ", "") + return purge + +def devine_code_by_nom_from_dict(champ, dico): + """Partant d'une chaine de caractères décrivant une ressource, une SAé ou un ACS, + détermine le code présent dans le dico officiel (dico à double entrée), + Le dico officiel vient d'un .yml""" + acs = [] + champ_purge = supprime_accent_espace(champ) + + for comp in DATA_ACS: + for code in DATA_ACS[comp]: + acs_purge = supprime_accent_espace(DATA_ACS[comp][code]) + if acs_purge in champ_purge: + acs += [code] + return sorted(list(set(acs))) + + +def get_matrices_ac_ressource(ressources, sem): + """Calcul la matrice AC vs ressource pour un sem donné et renvoie la + chaine pour affichage dans un .txt""" + les_codes_acs = [code for comp in DATA_ACS for code in DATA_ACS[comp]] + nbre_acs = len(les_codes_acs) + + ressem = ressources[sem] # les ressources du semestre + nbre_ressources_semestre = len(DATA_RESSOURCES[sem]) + if len(ressem) != nbre_ressources_semestre: + __LOGGER.warning(f"Pb => il manque des ressources au {sem}") + + matrice = [[False] * nbre_ressources_semestre for i in range(nbre_acs)] + + for (i, r) in enumerate(ressem): # pour chaque ressource + for comp in range(len(r.apprentissages)): # pour chaque comp + for (j, ac) in enumerate(les_codes_acs): # pour chaque ac + if ac in r.apprentissages[comp]: # si l'ac est prévue dans la ressource + matrice[j][i] = True + + chaine = "" + ligne = "{:20s} | " + "{:4s} | " * nbre_ressources_semestre + valeurs = ("" for i in range(nbre_ressources_semestre + 1)) + trait = "-" * len(ligne.format(*valeurs)) + + valeurs = [""] + [r.code if r.code else "????" for r in ressem] + [""] * ( + nbre_ressources_semestre - len(ressem)) + valeurs = tuple(valeurs) + chaine += ligne.format(*valeurs) + "\n" + trait + "\n" + for (j, ac) in enumerate(les_codes_acs): + valeurs = [ac] + [("X" if matrice[j][i] == True else "") for i in range(nbre_ressources_semestre)] + valeurs = tuple(valeurs) + chaine += ligne.format(*valeurs) + "\n" + chaine += trait + "\n" + return (matrice, chaine) \ No newline at end of file diff --git a/python/ressource.py b/python/ressource.py index fddd4e6..05b5106 100644 --- a/python/ressource.py +++ b/python/ressource.py @@ -1,10 +1,7 @@ -import string -import logging import re -import yaml -import unicodedata from officiel import * from modeles import * +from officiel import supprime_accent_espace __LOGGER = logging.getLogger(__name__) @@ -179,13 +176,6 @@ def nettoie_prerequis(r): else: r.prerequis = "Aucun" -def supprime_accent_espace(chaine): - """Met en minuscule, supprime les accents, les ponctuations et les espaces""" - purge = chaine.lower().replace("'", "").replace("’", "") - purge = unicodedata.normalize('NFD', purge).encode('ascii', 'ignore').decode('ascii') - purge = purge.replace(" ", "") - return purge - def get_code_from_nom(ressource): """Récupère le code d'une ressource d'après son nom en utilisant les noms officiels