from flask_wtf import FlaskForm from flask_wtf.file import FileAllowed from wtforms import StringField, SubmitField, FileField, TextAreaField, RadioField from wtforms.validators import DataRequired, Regexp import yaml import os import re REPERTOIRE_YAML = "./export/" if not os.path.exists(REPERTOIRE_YAML): os.makedirs(REPERTOIRE_YAML) class Form(FlaskForm): exporter = SubmitField("Exporter") fichier = FileField("Choisir fichier", validators=[FileAllowed(["yml"], "Fichier Yaml seulement!")]) importer = SubmitField("Importer") class PNForm(Form): regex = "^PN\d$" code = StringField("Code", validators=[DataRequired(), Regexp("^PN\d$", message="Le code doit être de la forme PN0.")]) nom = StringField("Nom", validators=[DataRequired()] ) diminutif = StringField("Diminutif", validators=[DataRequired()] ) description = TextAreaField("Description", validators=[DataRequired()] ) type = RadioField("Type", choices=[1,2,3], validators=[DataRequired()]) class ACForm(Form): regex = "^AC\d{4}$" code = StringField("Code", validators=[DataRequired(), Regexp("^AC\d{4}$", message="Le code doit être de la forme AC0000.")]) class SAEForm(Form): regex = "^SAE\d{2}$" code = StringField("Code", validators=[DataRequired(), Regexp("^SAE\d{2}$", message="Le code doit être de la forme SAE00.")]) titre = StringField("Titre", validators=[DataRequired()] ) semestre = StringField("Semestre", validators=[DataRequired()] ) heures_encadrees = StringField("Heures encadrées", validators=[DataRequired()] ) heures_tp = StringField("Heures TP", validators=[DataRequired()] ) projet = StringField("Projet", validators=[DataRequired()] ) description = TextAreaField("Description", validators=[DataRequired()] ) coef = StringField("Coef.", validators=[DataRequired()] ) acs = StringField("ACs", validators=[DataRequired()] ) ressources = StringField("Ressources", validators=[DataRequired()] ) livrables = TextAreaField("Livrables", validators=[DataRequired()] ) motscles = StringField("Mots clés", validators=[DataRequired()] ) class RessourceForm(Form): regex = "^R\{3}$" code = StringField("Code", validators=[DataRequired(), Regexp("^R\{3}$", message="Le code doit être de la forme R000.")]) nom = StringField("Nom", validators=[DataRequired()] ) semestre = StringField("Semestre", validators=[DataRequired()] ) heures_formation = StringField("Heures formation", validators=[DataRequired()] ) heures_tp = StringField("Heures TP", validators=[DataRequired()] ) coef = StringField("Coef.", validators=[DataRequired()] ) acs = StringField("ACs", validators=[DataRequired()] ) saes = StringField("SAEs", validators=[DataRequired()] ) prerequis = StringField("Prérequis", validators=[DataRequired()] ) contexte = TextAreaField("Contexte", validators=[DataRequired()] ) contenu = TextAreaField("Contenu", validators=[DataRequired()] ) motscles = StringField("Mots clés", validators=[DataRequired()] ) class CompetenceForm(Form): regex = "^RT\d$" code = StringField("Code", validators=[DataRequired(), Regexp("^RT\d$", message="Le code doit être de la forme RT0.")]) nom = StringField("Nom", validators=[DataRequired()] ) diminutif = StringField("Diminutif", validators=[DataRequired()] ) description = TextAreaField("Description", validators=[DataRequired()] ) composantes = TextAreaField("Composantes", validators=[DataRequired()] ) situations = TextAreaField("Situations", validators=[DataRequired()] ) niveaux = TextAreaField("Niveaux", validators=[DataRequired()] ) def form_import(form): """ Si import a été appuyé et qu'il n'y a pas d'erreur d'import => importe le fichier yaml""" # Bouton import appuyé et fichier yaml selectionné if form.importer.data and len(form.fichier.errors) == 0: if form.fichier.data.filename == "": form.fichier.errors.append("Aucun fichier selectioné.") return form if re.match(form.regex, form.fichier.data.filename[:-4]) == None: form.fichier.errors.append("Mauvais type de référentiel!") return form fichier_Yaml = yaml.safe_load(form.fichier.data.read()) for categorie, valeur in fichier_Yaml.items(): form[categorie].data = valeur form.validate_on_submit() # Réinitialise les messages d'erreur return form def form_export(form): """ Si le formulaire est valide => exporte dans un fichier yaml avec les informations du formulaire """ output = {} for categorie, valeur in list(form.data.items())[3:-1]: output[categorie] = valeur fichier = REPERTOIRE_YAML + form.code.data + ".yml" with open(fichier, "w", encoding="utf8") as fid: fid.write(yaml.dump(output))