Ajout de yaml contenant les info "officielles" sur les ressources et les sae.
Elément de nettoyage des données (code/nom/semestre) pour uniformisation
This commit is contained in:
parent
0b9c9bacdb
commit
91805de87f
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
import docx2python
|
import docx2python, yaml
|
||||||
from ressource import *
|
from ressource import *
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
@ -110,29 +110,51 @@ for i in range(2, len(docu)): # A priori un tableau
|
|||||||
r.charge_informations(*info)
|
r.charge_informations(*info)
|
||||||
r.charge_ac(apprentissages)
|
r.charge_ac(apprentissages)
|
||||||
# fin du parsing
|
# fin du parsing
|
||||||
|
|
||||||
print(f"{nbre_ressources} ressources")
|
print(f"{nbre_ressources} ressources")
|
||||||
|
|
||||||
|
# ************************************************************************
|
||||||
|
|
||||||
# Post traitement des ressources => gestion des heures
|
# Post traitement des ressources => gestion des heures
|
||||||
|
|
||||||
for r in RESSOURCES:
|
for r in RESSOURCES:
|
||||||
# Nettoie le champ heures_encadrees
|
# Nettoie le champ heures_encadrees
|
||||||
if r.heures_encadrees:
|
if r.heures_encadrees:
|
||||||
r.heures_encadrees = nettoie_heure(r.heures_encadrees)
|
r.heures_encadrees = nettoie_heure(r.heures_encadrees)
|
||||||
if r.tp:
|
if r.tp:
|
||||||
r.tp = nettoie_heure(r.tp)
|
r.tp = nettoie_heure(r.tp)
|
||||||
|
|
||||||
# Nettoie les codes
|
# Nettoie les codes
|
||||||
if r.code:
|
if r.code:
|
||||||
r.code = nettoie_code(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
|
# Bilan des heures & Calcul somme des heures
|
||||||
ligne = "{:20s} | {:35s} | {:10s} | {:10s} |"
|
ligne = "{:20s} | {:75s} | {:10s} | {:10s} |"
|
||||||
trait = "-"*len(ligne.format("", "", "", ""))
|
trait = "-"*len(ligne.format("", "", "", ""))
|
||||||
print(trait, ligne.format("Code", "Ressource", "CM/TD", "TP"), trait, sep="\n")
|
print(trait, ligne.format("Code", "Ressource", "CM/TD", "TP"), trait, sep="\n")
|
||||||
for r in RESSOURCES:
|
for r in RESSOURCES:
|
||||||
print(ligne.format(r.code if r.code else "MANQUANT",
|
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.heures_encadrees) if r.heures_encadrees else "MANQUANT",
|
||||||
str(r.tp) if r.tp 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_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])
|
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")
|
print(trait, ligne.format("", "Total", str(heures_formation_total), str(heures_tp_total)), trait, sep="\n")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
31
python/pn/ressources.yml
Normal file
31
python/pn/ressources.yml
Normal file
@ -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"
|
8
python/pn/saes.yml
Normal file
8
python/pn/saes.yml
Normal file
@ -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: ""
|
@ -1,9 +1,14 @@
|
|||||||
import string
|
import string
|
||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
|
import yaml
|
||||||
|
import unicodedata
|
||||||
|
|
||||||
__LOGGER = logging.getLogger(__name__)
|
__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():
|
class Ressource():
|
||||||
def __init__(self, nom, brute):
|
def __init__(self, nom, brute):
|
||||||
self.nom = nom
|
self.nom = nom
|
||||||
@ -38,10 +43,31 @@ def nettoie_heure(champ):
|
|||||||
def nettoie_code(champ):
|
def nettoie_code(champ):
|
||||||
"""Recherche les codes ressources de la forme RXXX dans champ"""
|
"""Recherche les codes ressources de la forme RXXX dans champ"""
|
||||||
codes = re.findall(r"(R[0-9][0-9][0-9])", champ)
|
codes = re.findall(r"(R[0-9][0-9][0-9])", champ)
|
||||||
if len(codes) > 1:
|
# if len(codes) > 1:
|
||||||
__LOGGER.warning("plusieurs codes trouvés :(")
|
# __LOGGER.warning("plusieurs codes trouvés :(")
|
||||||
elif len(codes) == 0:
|
#elif len(codes) == 0:
|
||||||
__LOGGER.warning("code manquant")
|
# __LOGGER.warning("code manquant")
|
||||||
else:
|
if len(codes) == 1:
|
||||||
return codes[0]
|
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)
|
||||||
|
Loading…
Reference in New Issue
Block a user