Compare commits

..

No commits in common. "db7db63f47f53e3f0975106688cd0686ed29aff9" and "c843bfd4781fab7fa5f359749e0e461db68052bc" have entirely different histories.

6 changed files with 42 additions and 194 deletions

View File

@ -17,7 +17,7 @@ REPERTOIRE_EXPORT = "./export/"
if not os.path.exists(REPERTOIRE_EXPORT): if not os.path.exists(REPERTOIRE_EXPORT):
os.makedirs(REPERTOIRE_EXPORT) os.makedirs(REPERTOIRE_EXPORT)
categorie_liste = ["saes","ressources","acs","ues","semestres","competences"] categorie_liste = ["saes","ressources","acs"]
categorie_to_model = {"saes": "SAE", "ressources": "Ressource", "acs": "AC", "coefsaes": "CoefSAE", "coefressources": "CoefRessource", "pns": "PN", "semestres": "Semestre", "competences": "Competence"} categorie_to_model = {"saes": "SAE", "ressources": "Ressource", "acs": "AC", "coefsaes": "CoefSAE", "coefressources": "CoefRessource", "pns": "PN", "semestres": "Semestre", "competences": "Competence"}
separateur = None separateur = None
@ -44,18 +44,15 @@ class AccueilForm(FlaskForm):
reset = SubmitField("Reset") reset = SubmitField("Reset")
exporterJSON = SubmitField("ExporterJSON") exporterJSON = SubmitField("ExporterJSON")
exporterYAML = SubmitField("ExporterYAML") exporterYAML = SubmitField("ExporterYAML")
fichier = FileField("Choisir fichier", validators=[FileAllowed(["yml","json"], "Fichier YAML/JSON seulement!")]) importerJSON = SubmitField("ImporterJSON")
importer = SubmitField("Importer") importerYAML = SubmitField("ImporterYAML")
def ListRef(self): def ListRef(self):
result = {"semestres": [], "competences": [], "acs": [], "pns": [], "saes": [], "coefsaes": [], "ressources": [], "coefressources": []} result = {"semestres": [], "competences": [], "acs": [], "pns": [], "saes": [], "coefsaes": [], "ressources": [], "coefressources": []}
associations = {"semestres_competences": models.Semestres_Competences, "acs_competences": models.ACs_Competences, "ressources_acs": models.Ressources_ACs, "ressources_saes": models.Ressources_SAEs, "saes_acs": models.SAEs_ACs}
for key in result.keys(): for key in result.keys():
model = getattr(models, categorie_to_model[key]) model = getattr(models, categorie_to_model[key])
for ref in model.query.all(): for ref in model.query.all():
result[key].append(ref.export()) result[key].append(ref.export())
for assoName, association in associations.items():
result[assoName] = db.session.query(association).all()
return result return result
def exportJSON(self): def exportJSON(self):
@ -68,71 +65,7 @@ class AccueilForm(FlaskForm):
result = self.ListRef() result = self.ListRef()
fichier = REPERTOIRE_EXPORT + "referentiels" + ".yml" fichier = REPERTOIRE_EXPORT + "referentiels" + ".yml"
with open(fichier, "w", encoding="utf8") as fid: with open(fichier, "w", encoding="utf8") as fid:
yaml.dump(yaml.safe_load(json.dumps(result, cls=CustomEncoder)), fid, indent=4, sort_keys=False) yaml.dump(yaml.safe_load(json.dumps(result, cls=CustomEncoder)), fid, indent=4)
def importRef(self):
fichier = self.fichier.data
filename, extension = fichier.filename.split(".")
if extension == "yml":
filedata = yaml.safe_load(fichier.read())
elif extension == "json":
filedata = json.load(fichier)
else:
self.fichier.errors.append("Une erreur a été produite.")
return
for categorie, liste in filedata.items():
if "_" not in categorie:
model = getattr(models, categorie_to_model[categorie])
for ref in liste:
print("Adding:", ref)
if categorie == "semestres":
semestre = model.query.filter_by(num=ref["num"]).first()
if not semestre:
ref["ues"] = []
db.session.add(model(**ref))
else:
print("Not added: Already in database")
elif "coef" in categorie:
competence = models.Competence.query.filter_by(code=ref["competence"]).first()
if categorie == "coefsaes":
sae = models.SAE.query.filter_by(code=ref["sae"]).first()
if not models.CoefSAE.query.filter_by(sae=sae,competence=competence).first():
db.session.add(models.CoefSAE(sae=sae,competence=competence,coef=ref["coef"]))
else:
print("Not added: Already in database")
elif categorie == "coefressources":
ressource = models.Ressource.query.filter_by(code=ref["ressource"]).first()
if not models.CoefRessource.query.filter_by(ressource=ressource, competence=competence).first():
db.session.add(models.CoefRessource(ressource=ressource, competence=competence,coef=ref["coef"]))
else:
print("Not added: Already in database")
else:
refBDD = model.query.filter_by(code=ref["code"]).first()
if not refBDD:
for categorieRef, valeur in ref.items():
if categorieRef in categorie_liste:
ref[categorieRef] = []
db.session.add(model(**ref))
else:
print("Not added: Already in database")
else:
for assoc in liste:
print("Adding association:", assoc)
firstModelname, secondModelname = categorie.split("_")
firstVal, secondVal = assoc
firstModel = getattr(models, categorie_to_model[firstModelname])
secondModel = getattr(models, categorie_to_model[secondModelname])
if firstModelname == "semestres":
firstRef = firstModel.query.filter_by(num=firstVal).first()
secondRef = secondModel.query.filter_by(code=secondVal).first()
if secondRef not in firstRef.ues: firstRef.ues.append(secondRef)
else: print("Not added: Association already exist")
else:
firstRef = firstModel.query.filter_by(code=firstVal).first()
secondRef = secondModel.query.filter_by(code=secondVal).first()
if secondRef not in firstRef.__dict__[secondModelname]: firstRef.__dict__[secondModelname].append(secondRef)
else: print("Not added: Association already exist")
db.session.commit()
class CoefForm(FlaskForm): class CoefForm(FlaskForm):
objetformation = HiddenField("Objet de formation") objetformation = HiddenField("Objet de formation")
@ -229,7 +162,7 @@ class PNForm(Form):
class Meta: class Meta:
model = models.PN model = models.PN
type = RadioField("Type de parcours", choices=["1","2","3"]) type = RadioField("Type", choices=["1","2","3"])
class ACForm(Form): class ACForm(Form):
regex = "^AC\d{4}$" regex = "^AC\d{4}$"

View File

@ -1,28 +1,28 @@
from app import db from app import db
Semestres_Competences = db.Table("Semestres_Competences", Semestres_Competences = db.Table("Semestres_Competences",
db.Column("Semestre_num", db.String(32), db.ForeignKey("semestre.num")), db.Column("Semestre_num", db.String(1), db.ForeignKey("semestre.num")),
db.Column("Competence_code", db.String(32), db.ForeignKey("competence.code")) db.Column("Competence_code", db.String(3), db.ForeignKey("competence.code"))
) )
ACs_Competences = db.Table("ACs_Competences", ACs_Competences = db.Table("ACs_Competences",
db.Column("AC_code", db.String(32), db.ForeignKey("AC.code")), db.Column("AC_code", db.String(6), db.ForeignKey("AC.code")),
db.Column("Competence_code", db.String(32), db.ForeignKey("competence.code")) db.Column("Competence_code", db.String(3), db.ForeignKey("competence.code"))
) )
Ressources_ACs = db.Table("Ressources_ACs", Ressources_ACs = db.Table("Ressources_ACs",
db.Column("Ressource_code", db.String(32), db.ForeignKey("ressource.code")), db.Column("Ressource_code", db.String(4), db.ForeignKey("ressource.code")),
db.Column("AC_code", db.String(32), db.ForeignKey("AC.code")) db.Column("AC_code", db.String(6), db.ForeignKey("AC.code"))
) )
Ressources_SAEs = db.Table("Ressources_SAEs", Ressources_SAEs = db.Table("Ressources_SAEs",
db.Column("Ressource_code", db.String(32), db.ForeignKey("ressource.code")), db.Column("Ressource_code", db.String(4), db.ForeignKey("ressource.code")),
db.Column("SAE_code", db.String(32), db.ForeignKey("SAE.code")) db.Column("SAE_code", db.String(5), db.ForeignKey("SAE.code"))
) )
SAEs_ACs = db.Table("SAEs_ACs", SAEs_ACs = db.Table("SAEs_ACs",
db.Column("SAE_code", db.String(32), db.ForeignKey("SAE.code")), db.Column("SAE_code", db.String(5), db.ForeignKey("SAE.code")),
db.Column("AC_code", db.String(32), db.ForeignKey("AC.code")) db.Column("AC_code", db.String(6), db.ForeignKey("AC.code"))
) )
class Semestre(db.Model): class Semestre(db.Model):
@ -38,7 +38,7 @@ class Semestre(db.Model):
return "<Semestre {}>".format(self.num) return "<Semestre {}>".format(self.num)
class Competence(db.Model): class Competence(db.Model):
code = db.Column(db.String(32), primary_key = True, info={'label': 'Code'}) code = db.Column(db.String(3), primary_key = True, info={'label': 'Code'})
nom = db.Column(db.String(255), info={'label': 'Nom'}) nom = db.Column(db.String(255), info={'label': 'Nom'})
diminutif = db.Column(db.String(30), info={'label': 'Diminutif'}) diminutif = db.Column(db.String(30), info={'label': 'Diminutif'})
description = db.Column(db.Text(), info={'label': 'Description'}) description = db.Column(db.Text(), info={'label': 'Description'})
@ -85,11 +85,11 @@ class Competence(db.Model):
return "<Competence {}>".format(self.code) return "<Competence {}>".format(self.code)
class CoefSAE(db.Model): class CoefSAE(db.Model):
competence_code = db.Column(db.String(32), db.ForeignKey("competence.code"), primary_key=True) competence_code = db.Column(db.String(3), db.ForeignKey("competence.code"), primary_key=True)
sae_code = db.Column(db.String(32), db.ForeignKey("SAE.code"), primary_key=True) sae_code = db.Column(db.String(6), db.ForeignKey("SAE.code"), primary_key=True)
coef = db.Column(db.String(2)) coef = db.Column(db.String(2))
competence = db.relationship("Competence", lazy=False, backref=db.backref("saes", cascade="save-update, merge, delete, delete-orphan")) competence = db.relationship("Competence", lazy=False, backref=db.backref("saes"))
sae = db.relationship("SAE", lazy=False, backref=db.backref("competences", cascade="save-update, merge, delete, delete-orphan")) sae = db.relationship("SAE", lazy=False, backref=db.backref("competences"))
def export(self): def export(self):
result = dict(self.__dict__) result = dict(self.__dict__)
@ -97,11 +97,11 @@ class CoefSAE(db.Model):
return result return result
class CoefRessource(db.Model): class CoefRessource(db.Model):
competence_code = db.Column(db.String(32), db.ForeignKey("competence.code"), primary_key=True) competence_code = db.Column(db.String(3), db.ForeignKey("competence.code"), primary_key=True)
ressource_code = db.Column(db.String(32), db.ForeignKey("ressource.code"), primary_key=True) ressource_code = db.Column(db.String(4), db.ForeignKey("ressource.code"), primary_key=True)
coef = db.Column(db.String(2)) coef = db.Column(db.String(2))
competence = db.relationship("Competence", lazy=False, backref=db.backref("ressources", cascade="save-update, merge, delete, delete-orphan")) competence = db.relationship("Competence", lazy=False, backref=db.backref("ressources"))
ressource = db.relationship("Ressource", lazy=False, backref=db.backref("competences", cascade="save-update, merge, delete, delete-orphan")) ressource = db.relationship("Ressource", lazy=False, backref=db.backref("competences"))
def export(self): def export(self):
result = dict(self.__dict__) result = dict(self.__dict__)
@ -109,7 +109,7 @@ class CoefRessource(db.Model):
return result return result
class AC(db.Model): class AC(db.Model):
code = db.Column(db.String(32), primary_key = True, info={'label': 'Code'}) code = db.Column(db.String(6), primary_key = True, info={'label': 'Code'})
titre = db.Column(db.String(255), info={'label': 'Titre'}) titre = db.Column(db.String(255), info={'label': 'Titre'})
saes = db.relationship("SAE", secondary=SAEs_ACs, lazy=False, backref=db.backref("acs", lazy=False)) saes = db.relationship("SAE", secondary=SAEs_ACs, lazy=False, backref=db.backref("acs", lazy=False))
ressources = db.relationship("Ressource", order_by="Ressource.code", secondary=Ressources_ACs, lazy=False, backref=db.backref("acs", lazy=False)) ressources = db.relationship("Ressource", order_by="Ressource.code", secondary=Ressources_ACs, lazy=False, backref=db.backref("acs", lazy=False))
@ -126,7 +126,7 @@ class AC(db.Model):
return "<AC {}>".format(self.code) return "<AC {}>".format(self.code)
class PN(db.Model): class PN(db.Model):
code = db.Column(db.String(32), primary_key = True, info={'label': 'Code'}) code = db.Column(db.String(3), primary_key = True, info={'label': 'Code'})
nom = db.Column(db.String(255), info={'label': 'Nom'}) nom = db.Column(db.String(255), info={'label': 'Nom'})
diminutif = db.Column(db.String(30), info={'label': 'Diminutif'}) diminutif = db.Column(db.String(30), info={'label': 'Diminutif'})
description = db.Column(db.Text(), info={'label': 'Description'}) description = db.Column(db.Text(), info={'label': 'Description'})
@ -141,7 +141,7 @@ class PN(db.Model):
return "<PN {}>".format(self.code) return "<PN {}>".format(self.code)
class SAE(db.Model): class SAE(db.Model):
code = db.Column(db.String(32), primary_key = True, info={'label': 'Code'}) code = db.Column(db.String(5), primary_key = True, info={'label': 'Code'})
titre = db.Column(db.String(255), info={'label': 'Titre'}) titre = db.Column(db.String(255), info={'label': 'Titre'})
semestre = db.Column(db.String(255), info={'label': 'Semestre'}) semestre = db.Column(db.String(255), info={'label': 'Semestre'})
heures_encadrees = db.Column(db.String(3), info={'label': 'Heures Encadrées'}) heures_encadrees = db.Column(db.String(3), info={'label': 'Heures Encadrées'})
@ -173,7 +173,7 @@ class SAE(db.Model):
return "<SAE {}>".format(self.code) return "<SAE {}>".format(self.code)
class Ressource(db.Model): class Ressource(db.Model):
code = db.Column(db.String(32), primary_key = True, info={'label': 'Code'}) code = db.Column(db.String(4), primary_key = True, info={'label': 'Code'})
nom = db.Column(db.String(255), info={'label': 'Nom'}) nom = db.Column(db.String(255), info={'label': 'Nom'})
semestre = db.Column(db.String(255), info={'label': 'Semestre'}) semestre = db.Column(db.String(255), info={'label': 'Semestre'})
heures_formation = db.Column(db.String(3), info={'label': 'Heures Formation'}) heures_formation = db.Column(db.String(3), info={'label': 'Heures Formation'})

View File

@ -3,11 +3,10 @@ from app import app, db
from app.forms import * from app.forms import *
import app.models as models import app.models as models
@app.route("/", methods=["GET","POST"]) @app.route("/")
@app.route("/index", methods=["GET","POST"]) @app.route("/index", methods=["GET","POST"])
def index(): def index():
form = AccueilForm() form = AccueilForm()
valide = form.validate_on_submit()
if form.ajouter.data: if form.ajouter.data:
for i in range(1,7): for i in range(1,7):
semestre = models.Semestre(num=i) semestre = models.Semestre(num=i)
@ -21,8 +20,6 @@ def index():
form.exportJSON() form.exportJSON()
elif form.exporterYAML.data: elif form.exporterYAML.data:
form.exportYAML() form.exportYAML()
elif form.importer.data and valide:
form.importRef()
semestres = sorted(models.Semestre.query.all(), key=lambda semestre: semestre.num) semestres = sorted(models.Semestre.query.all(), key=lambda semestre: semestre.num)
return render_template("index.html", semestres=semestres, form=form) return render_template("index.html", semestres=semestres, form=form)
@ -30,9 +27,6 @@ def index():
def Semestre(num): def Semestre(num):
form = SemestreForm() form = SemestreForm()
semestre = models.Semestre.query.filter_by(num=num).first() semestre = models.Semestre.query.filter_by(num=num).first()
if semestre == None:
flash("Ce Semestre n'existe pas!", "error")
return redirect(url_for("index"))
for i, ue in enumerate(semestre.ues): for i, ue in enumerate(semestre.ues):
if form.ueform.__len__() < len(semestre.ues): form.ueform.append_entry(data={"ue": ue.code}) if form.ueform.__len__() < len(semestre.ues): form.ueform.append_entry(data={"ue": ue.code})
# Donne aux dropdowns la liste des objets de formations que les ACs possèdent sans doublons # Donne aux dropdowns la liste des objets de formations que les ACs possèdent sans doublons
@ -47,12 +41,9 @@ def Semestre(num):
form.ueform.__getitem__(i).ressources.query=queryRessource form.ueform.__getitem__(i).ressources.query=queryRessource
if not form.update.data: if not form.update.data:
for coefsae in ue.saes: for coefsae in ue.saes:
if coefsae.sae in querySAE: form.ueform.__getitem__(i).coef.append_entry(data={"objetformation": coefsae.sae}) form.ueform.__getitem__(i).coef.append_entry(data={"objetformation": coefsae.sae})
else: db.session.delete(coefsae)
for coefressource in ue.ressources: for coefressource in ue.ressources:
if coefressource.ressource in queryRessource: form.ueform.__getitem__(i).coef.append_entry(data={"objetformation": coefressource.ressource}) form.ueform.__getitem__(i).coef.append_entry(data={"objetformation": coefressource.ressource})
else: db.session.delete(coefressource)
db.session.commit()
# Appuie sur Update # Appuie sur Update
if form.update.data: if form.update.data:
semestre.ues = [ue for ue in form.ues.data] semestre.ues = [ue for ue in form.ues.data]
@ -60,7 +51,7 @@ def Semestre(num):
for i, field in enumerate(form.ueform): for i, field in enumerate(form.ueform):
ue = models.Competence.query.filter_by(code=field.ue.data).first() ue = models.Competence.query.filter_by(code=field.ue.data).first()
ue.acs = field.acs.data ue.acs = field.acs.data
# Fabrique la liste des Coefs qui ne doit pas être supprimé suite à un éventuel désélection d'un AC # Fabrique la liste des Coefs qui ne doit pas être supprimé suite à un éventuel suppression d'un AC
querySAE = [] querySAE = []
queryRessource = [] queryRessource = []
for ac in ue.acs: for ac in ue.acs:
@ -74,7 +65,7 @@ def Semestre(num):
codeClass, code = coeffield.objetformation.data[1:-1].split() codeClass, code = coeffield.objetformation.data[1:-1].split()
model = getattr(models, codeClass) model = getattr(models, codeClass)
objetformation = model.query.filter_by(code=code).first() objetformation = model.query.filter_by(code=code).first()
if objetformation in list(set(querySAE)&set(field.saes.data)) or objetformation in list(set(queryRessource)&set(field.ressources.data)): if objetformation in querySAE or objetformation in queryRessource:
objetformation.setCoef(coeffield.coef.data, ue) objetformation.setCoef(coeffield.coef.data, ue)
db.session.commit() db.session.commit()
return redirect(url_for("Semestre", num=num)) return redirect(url_for("Semestre", num=num))
@ -107,8 +98,6 @@ def PN(code):
form.exporterRef() form.exporterRef()
elif form.sauvegarder.data: elif form.sauvegarder.data:
form.sauvegarderRef() form.sauvegarderRef()
flash("Le référentiel " + form.code.data + " a été sauvegardé!", "success")
return redirect(url_for("PN", code=form.code.data[2:]))
return redirect(url_for("PN")) return redirect(url_for("PN"))
elif code: elif code:
referentiel = models.PN.query.filter_by(code="PN"+code).first() referentiel = models.PN.query.filter_by(code="PN"+code).first()
@ -134,8 +123,6 @@ def AC(code):
form.exporterRef() form.exporterRef()
elif form.sauvegarder.data: elif form.sauvegarder.data:
form.sauvegarderRef() form.sauvegarderRef()
flash("Le référentiel " + form.code.data + " a été sauvegardé!", "success")
return redirect(url_for("AC", code=form.code.data[2:]))
return redirect(url_for("AC")) return redirect(url_for("AC"))
elif code: elif code:
referentiel = models.AC.query.filter_by(code="AC"+code).first() referentiel = models.AC.query.filter_by(code="AC"+code).first()
@ -161,8 +148,6 @@ def SAE(code):
form.exporterRef() form.exporterRef()
elif form.sauvegarder.data: elif form.sauvegarder.data:
form.sauvegarderRef() form.sauvegarderRef()
flash("Le référentiel " + form.code.data + " a été sauvegardé!", "success")
return redirect(url_for("SAE", code=form.code.data[3:]))
return redirect(url_for("SAE")) return redirect(url_for("SAE"))
elif code: elif code:
referentiel = models.SAE.query.filter_by(code="SAE"+code).first() referentiel = models.SAE.query.filter_by(code="SAE"+code).first()
@ -188,8 +173,6 @@ def Ressource(code):
form.exporterRef() form.exporterRef()
elif form.sauvegarder.data: elif form.sauvegarder.data:
form.sauvegarderRef() form.sauvegarderRef()
flash("Le référentiel " + form.code.data + " a été sauvegardé!", "success")
return redirect(url_for("Ressource", code=form.code.data[1:]))
return redirect(url_for("Ressource")) return redirect(url_for("Ressource"))
elif code: elif code:
referentiel = models.Ressource.query.filter_by(code="R"+code).first() referentiel = models.Ressource.query.filter_by(code="R"+code).first()
@ -215,8 +198,6 @@ def Competence(code):
form.exporterRef() form.exporterRef()
if form.sauvegarder.data: if form.sauvegarder.data:
form.sauvegarderRef() form.sauvegarderRef()
flash("Le référentiel " + form.code.data + " a été sauvegardé!", "success")
return redirect(url_for("Competence", code=form.code.data[2:]))
return redirect(url_for("Competence")) return redirect(url_for("Competence"))
elif code: elif code:
referentiel = models.Competence.query.filter_by(code="RT"+code).first() referentiel = models.Competence.query.filter_by(code="RT"+code).first()

View File

@ -96,26 +96,11 @@
<!-- Contenu de la page --> <!-- Contenu de la page -->
<div class="container"> <div class="container">
<div class="box"> <div class="box">
{% with messages = get_flashed_messages(category_filter=["error"]) %} {% with messages = get_flashed_messages() %}
{% if messages %} {% if messages %}
<article class="message is-danger"> <script>
<div class="message-body"> alert("{% for message in messages %}{{message}}{% endfor %}");
{% for message in messages %} </script>
<p>{{message}}</p>
{% endfor %}
</div>
</article>
{% endif %}
{% endwith %}
{% with messages = get_flashed_messages(category_filter=["success"]) %}
{% if messages %}
<article class="message is-success">
<div class="message-body">
{% for message in messages %}
<p>{{message}}</p>
{% endfor %}
</div>
</article>
{% endif %} {% endif %}
{% endwith %} {% endwith %}
{% block content %} {% block content %}

View File

@ -2,15 +2,6 @@
{% block title %}Accueil{% endblock %} {% block title %}Accueil{% endblock %}
{% block content %} {% block content %}
{% if form.fichier.errors|length != 0 %}
<article class="message is-danger">
<div class="message-body">
{% for error in form.fichier.errors %}
<p>{{error}}</p>
{% endfor %}
</div>
</article>
{% endif %}
<div class="content"> <div class="content">
{% for semestre in semestres %} {% for semestre in semestres %}
<h1 class="title"><a style="color: inherit;" href="{{ url_for('Semestre', num=semestre.num) }}">Semestre {{ semestre.num }} <i class="far fa-edit fa-sm"></i></a></h1> <h1 class="title"><a style="color: inherit;" href="{{ url_for('Semestre', num=semestre.num) }}">Semestre {{ semestre.num }} <i class="far fa-edit fa-sm"></i></a></h1>
@ -26,7 +17,7 @@
</ul> </ul>
{% endfor %} {% endfor %}
</div> </div>
<form action="" enctype=multipart/form-data method="post" novalidate> <form action="" method="post" novalidate>
{{ form.hidden_tag() }} {{ form.hidden_tag() }}
<div class="buttons"> <div class="buttons">
{% if not semestres %} {% if not semestres %}
@ -38,22 +29,8 @@
{% endif %} {% endif %}
{{ form.exporterJSON(class="button") }} {{ form.exporterJSON(class="button") }}
{{ form.exporterYAML(class="button") }} {{ form.exporterYAML(class="button") }}
<div class="control"> {{ form.importerJSON(class="button is-static") }}
<div class="file has-name"> {{ form.importerYAML(class="button is-static") }}
<label class="file-label">
{{ form.fichier(class="file-input") }}
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-file-import"></i>
</span>
<span class="file-label">
{{ form.fichier.label }}
</span>
</span>
{{ form.importer(class="button file-name") }}
</label>
</div>
</div>
</div> </div>
</form> </form>

View File

@ -1,28 +0,0 @@
alembic==1.6.2
click==7.1.2
decorator==5.0.9
dnspython==2.1.0
email-validator==1.1.2
Flask==1.1.2
Flask-Migrate==2.7.0
Flask-SQLAlchemy==2.5.1
Flask-WTF==0.14.3
greenlet==1.1.0
idna==3.2
infinity==1.5
intervals==0.9.1
itsdangerous==1.1.0
Jinja2==2.11.3
Mako==1.1.4
MarkupSafe==1.1.1
python-dateutil==2.8.1
python-editor==1.0.4
PyYAML==5.4.1
six==1.16.0
SQLAlchemy==1.4.14
SQLAlchemy-Utils==0.37.6
validators==0.18.2
Werkzeug==1.0.1
WTForms==2.3.3
WTForms-Alchemy==0.17.0
WTForms-Components==0.10.5