import os import sys import argparse import glob sys.path.insert(0,"../python") from config import Config from jinja2 import Template, Environment, FileSystemLoader # Description des arguments possibles du programme parser = argparse.ArgumentParser(description="Conversion des YAML en HTML") parser.add_argument( "-r", "--root", default="..", help="repertoire de base (racine) pour chercher les fichiers de données" ) args = parser.parse_args() Config.ROOT = args.root import ressource from ressource import * # Chemins des différents dossiers REPERTOIRE_TEMP = Config.ROOT + "/python/export" REPERTOIRE_RESSOURCES_DEFINITIVES = Config.ROOT + "/yaml/ressources" REPERTOIRE_SAE_DEFINITIVES = Config.ROOT + "/yaml/saes" REPERTOIRE_COMPETENCES_DEFINITIVES = Config.ROOT + "/yaml/competences" REPERTOIRE_ACS = Config.ROOT + "/python/pn" REPERTOIRE_HTML = Config.ROOT + "/html/export" REPERTOIRE_JS = REPERTOIRE_HTML + "/js" # Créer le dossier html/export et html/export/js s'il n'existe pas if not os.path.exists(REPERTOIRE_HTML): os.makedirs(REPERTOIRE_HTML) if not os.path.exists(REPERTOIRE_JS): os.makedirs(REPERTOIRE_JS) # Chargement des ressources : depuis les versions définitives du répertoire yaml d'abord, # puis dans python/export si manquantes fichiers_definitifs = [ os.path.split(x)[1] for x in glob.glob(REPERTOIRE_RESSOURCES_DEFINITIVES+'/*.yml') ] #nom fichier dans yaml/ressources fichiers_temp = [ os.path.split(x)[1] for x in glob.glob(REPERTOIRE_TEMP+'/*.yml') ] #nom fichier dans python/export fichiers_ressources = [REPERTOIRE_RESSOURCES_DEFINITIVES + "/" + f for f in fichiers_definitifs] # chemins de fichier ressources YAML for f in fichiers_temp: if f not in fichiers_definitifs and f.startswith("R"): fichiers_ressources.append(REPERTOIRE_TEMP + "/" + f) fichiers_ressources = sorted(fichiers_ressources) # tri par ordre alphabétique ressources = {"S1": [], "S2": []} for fichieryaml in fichiers_ressources: r = Ressource(fichieryaml) # lecture du fichier sem = "S" + str(r.ressource["semestre"]) ressources[sem].append(r) # tri par code croissant for sem in ressources: ressources[sem] = sorted(ressources[sem], key=lambda r: r.ressource["code"]) # Chargement des saé et des exemples fichiers_definitifs = [ os.path.split(x)[1] for x in glob.glob(REPERTOIRE_SAE_DEFINITIVES+'/*.yml') ] fichiers_temp = [ os.path.split(x)[1] for x in glob.glob(REPERTOIRE_TEMP+'/*.yml') ] fichiers_saes = [REPERTOIRE_SAE_DEFINITIVES + "/" + f for f in fichiers_definitifs if "exemple" not in f] fichiers_exemples = [REPERTOIRE_SAE_DEFINITIVES + "/" + f for f in fichiers_definitifs if "exemple" in f] for f in fichiers_temp: if f not in fichiers_definitifs and f.startswith("S"): if "exemple" not in f: fichiers_saes.append(REPERTOIRE_TEMP + "/" + f) elif "exemple" in f: fichiers_exemples.append(REPERTOIRE_TEMP + "/" + f) fichiers_saes = sorted(fichiers_saes) # tri par ordre alphabétique fichiers_exemples = sorted(fichiers_exemples) saes = {"S1": [], "S2": []} for fichieryaml in fichiers_saes: s = SAE(fichieryaml) sem = "S" + str(s.sae["semestre"]) saes[sem].append(s) for sem in saes: saes[sem] = sorted(saes[sem], key=lambda s: s.sae["code"]) exemples = {"S1" : {}, "S2" : {} } for fichieryaml in fichiers_exemples: e = ExempleSAE(fichieryaml) sem = "S" + str(e.exemple["semestre"]) sae = e.exemple["code"] if sae not in exemples[sem]: exemples[sem][sae] = [] exemples[sem][sae].append(e) # Chargement des Compétences fichieryaml = REPERTOIRE_COMPETENCES_DEFINITIVES + '/RT123.yml' competences = Competences(fichieryaml) #Liste de string pour renommer certaines catégories (les autres qui n'ont pas besoins ont la première lettre en majuscule) rename = { "heures_encadrees": "Heures encadrées", "heures_formation": "Heures formation", "heures_tp": "Heures TP", "tp": "Heures TP", "coeffs": "Coef.", "acs": "ACs", "motscles": "Mots clés", "sae": "SAÉ", "prerequis": "Prérequis", "problematique": "Problématique", "modalite": "Modalité" } CHEMIN_TEMPLATE = Config.ROOT + "/html" # Création de l'environnement pour charger les templates env = Environment(trim_blocks=True, lstrip_blocks=True, loader=FileSystemLoader(CHEMIN_TEMPLATE)) # Template de la page index et génération de la page template_index = env.get_template("indexTemplate.html") template_index.stream().dump(REPERTOIRE_HTML + "/index.html") # Template de chaque pages ressources, saes, exemples (doit contenir datas,rename,precedent,suivant) template = env.get_template("InfoTemplate.html") # Template de chaque pages de compétences (doit contenir data,rt,precedent,suivant) template_Competence = env.get_template("CompetenceTemplate.html") # Template de chaque pages de ACs (doit contenir data, precedent, suivant) template_AC = env.get_template("ACTemplate.html") # Template de la liste des ACs template_List_ACs = env.get_template("ListACsTemplate.html") # Template de la liste des ressources par semestre (doit contenir data,sem) template_List_Ressource = env.get_template("ListRessourceTemplate.html") # Template de la liste des acs ou saes ou ressources (doit contenir data,titre) template_List = env.get_template("ListTemplate.html") def motscles(mc): """ Retourne un tableau de mots clés en prenant compte des parenthèses """ motscles = [] mot = "" i = 0 while i < len(mc): if mc[i] == "(": while mc[i] != ")": mot += mc[i] i += 1 elif mc[i] == "," and mc[i+1] == " ": motscles.append(mot) mot = "" i += 2 mot += mc[i] i += 1 motscles.append(mot) return motscles def formatHTML(string): """ Retourne un string avec les balises