From 91805de87f715351615249b103e9624fd3478b64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9o=20Baras?= Date: Mon, 29 Mar 2021 16:22:51 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20de=20yaml=20contenant=20les=20info=20"o?= =?UTF-8?q?fficielles"=20sur=20les=20ressources=20et=20les=20sae.=20El?= =?UTF-8?q?=C3=A9ment=20de=20nettoyage=20des=20donn=C3=A9es=20(code/nom/se?= =?UTF-8?q?mestre)=20pour=20uniformisation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- python/export.py | 30 ++++++++++++++++++++++++++---- python/pn/ressources.yml | 31 +++++++++++++++++++++++++++++++ python/pn/saes.yml | 8 ++++++++ python/ressource.py | 36 +++++++++++++++++++++++++++++++----- 4 files changed, 96 insertions(+), 9 deletions(-) create mode 100644 python/pn/ressources.yml create mode 100644 python/pn/saes.yml diff --git a/python/export.py b/python/export.py index 3115acc..138cdaf 100644 --- a/python/export.py +++ b/python/export.py @@ -1,5 +1,5 @@ -import docx2python +import docx2python, yaml from ressource import * import logging @@ -110,29 +110,51 @@ for i in range(2, len(docu)): # A priori un tableau r.charge_informations(*info) r.charge_ac(apprentissages) # fin du parsing - print(f"{nbre_ressources} ressources") +# ************************************************************************ + # Post traitement des ressources => gestion des heures + for r in RESSOURCES: # Nettoie le champ heures_encadrees if r.heures_encadrees: r.heures_encadrees = nettoie_heure(r.heures_encadrees) if r.tp: r.tp = nettoie_heure(r.tp) + # Nettoie les codes if r.code: r.code = nettoie_code(r.code) + if not r.code: # Recherche le code dans les ressources + code_devine = get_code_from_nom(r) + if code_devine: + __LOGGER.warning(f"Dans \"{r.nom}\", remplace le code par {code_devine}") + r.code = code_devine + + # Nettoie les semestres + if "1" in r.semestre: + r.semestre = "S1" + else: + r.semestre = "S2" + + # Remet en forme le titre + if r.code: + r.nom = DATA_RESSOURCES[r.semestre][r.code] # Bilan des heures & Calcul somme des heures -ligne = "{:20s} | {:35s} | {:10s} | {:10s} |" +ligne = "{:20s} | {:75s} | {:10s} | {:10s} |" trait = "-"*len(ligne.format("", "", "", "")) print(trait, ligne.format("Code", "Ressource", "CM/TD", "TP"), trait, sep="\n") for r in RESSOURCES: print(ligne.format(r.code if r.code else "MANQUANT", - r.nom[:30] + ("..." if len(r.nom) > 30 else "") , + # r.nom[:30] + ("..." if len(r.nom) > 30 else "") , + r.nom, str(r.heures_encadrees) if r.heures_encadrees else "MANQUANT", str(r.tp) if r.tp else "MANQUANT")) heures_formation_total = sum([r.heures_encadrees for r in RESSOURCES if r.heures_encadrees != None]) heures_tp_total = sum([r.tp for r in RESSOURCES if r.tp != None]) print(trait, ligne.format("", "Total", str(heures_formation_total), str(heures_tp_total)), trait, sep="\n") + + + diff --git a/python/pn/ressources.yml b/python/pn/ressources.yml new file mode 100644 index 0000000..1671416 --- /dev/null +++ b/python/pn/ressources.yml @@ -0,0 +1,31 @@ +S1: + R101: "Initiation aux réseaux informatiques" + R102: "Principes et architecture des réseaux" + R103: "Réseaux locaux et équipements actifs" + R104: "Fondamentaux des systèmes électroniques" + R105: "Supports de transmission pour les réseaux locaux" + R106: "Architecture des systèmes numériques et informatiques" + R107: "Fondamentaux de la programmation" + R108: "Bases des systèmes d'exploitation" + R109: "Introduction aux technologies Web" + R110: "Anglais de communication et initiation au vocabulaire technique" + R111: "Expression-Culture-Communication Professionnelles 1" + R112: "PPP: Connaître son champ d'activité" + R113: "Mathématiques du signal" + R114: "Mathématiques des transmissions" + R115: "Gestion de projet" +S2: + R201: "Technologie de l'Internet" + R202: "Administration système" + R203: "Bases des services réseaux" + R204: "Initiation à la téléphonie d'entreprise" + R205: "Signaux et Systèmes pour les transmissions" + R206: "Numérisation de l'information" + R207: "Sources de données" + R208: "Traitement de données en programmation" + R209: "Initiation au développement Web" + R210: "Développement de l'anglais technique" + R211: "Expression-Culture-Communication Professionnelles 2" + R212: "PPP: Formalisation du projet" + R213: "Mathématiques des systèmes numériques" + R214: "Analyse des signaux" diff --git a/python/pn/saes.yml b/python/pn/saes.yml new file mode 100644 index 0000000..a2910aa --- /dev/null +++ b/python/pn/saes.yml @@ -0,0 +1,8 @@ +S1: + SAE11: "Réseaux / cybersécurité / hygiène informatique" + SAE12: "Réseau d'entreprise ou personnel" + SAE13: "Supports de transmission / calculs" + SAE14: "Se présenter sur Internet" + SAE15: "Traiter des données" +S2: + SAE21: "" diff --git a/python/ressource.py b/python/ressource.py index 3b960fd..7a0b84c 100644 --- a/python/ressource.py +++ b/python/ressource.py @@ -1,9 +1,14 @@ import string import logging import re +import yaml +import unicodedata __LOGGER = logging.getLogger(__name__) +with open("pn/ressources.yml", 'r', encoding="utf8") as fid: + DATA_RESSOURCES = yaml.load(fid.read(), Loader=yaml.Loader) + class Ressource(): def __init__(self, nom, brute): self.nom = nom @@ -38,10 +43,31 @@ def nettoie_heure(champ): def nettoie_code(champ): """Recherche les codes ressources de la forme RXXX dans champ""" codes = re.findall(r"(R[0-9][0-9][0-9])", champ) - if len(codes) > 1: - __LOGGER.warning("plusieurs codes trouvés :(") - elif len(codes) == 0: - __LOGGER.warning("code manquant") - else: + # if len(codes) > 1: + # __LOGGER.warning("plusieurs codes trouvés :(") + #elif len(codes) == 0: + # __LOGGER.warning("code manquant") + if len(codes) == 1: return codes[0] + +def supprime_accent_espace(chaine): + 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): + 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 + + +for sem in DATA_RESSOURCES: + for code in DATA_RESSOURCES[sem]: + nom_data = supprime_accent_espace(DATA_RESSOURCES[sem][code]) + print(nom_data)