1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import flask
import io
import matplotlib.pyplot as plt
import base64
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from configuration import config_init,CONFIG
from gestion_erreurs import initialise_erreurs, debug, niveau_debug, warning
import gestion_donnees as donnees
import gestion_couleurs as couleurs
from trace_courbe import cree_figure
import faq as f
def initialise_mode_beta():
global beta
hote = flask.request.host
if hote[:4] == "beta":
print("** Mode bêta !**")
return True
else:
return False
app = flask.Flask(__name__)
@app.route('/',methods=['POST','GET'])
def index():
beta=initialise_mode_beta()
liste_err = initialise_erreurs()
val_form = config_init()
if flask.request.method=="POST":
if 'fichier_donnees' in flask.request.files:
## charger les données dans le formulaire
fichier = flask.request.files['fichier_donnees']
chaine = fichier.read()
val_form2 = donnees.fichier_json_vers_configdonnees(chaine,liste_err)
if val_form2 == {}:
return flask.render_template("index.html",err=liste_err[2]+liste_err[1]+liste_err[0],valform=val_form, CONFIG=CONFIG, beta=beta)
val_form.update(val_form2)
val_form["fichier_importe"] = 1 # Pour noter qu'on a importé un fichier
return flask.render_template("index.html",err=liste_err[1],valform=val_form, CONFIG=CONFIG, beta=beta)
@app.route('/apropos')
def apropos():
beta=initialise_mode_beta()
return flask.render_template("apropos.html",err=[], beta=beta)
@app.route("/courbe/<ext>", methods=['POST'])
def courbe_image(ext):
liste_err = initialise_erreurs()
data = flask.request.form
enfants_add = [] # Enfants additionnels
for i in range(2, 11):
if 'fichier_donnees_'+str(i) in flask.request.files: # UUn enfant à ajouter
fichier = flask.request.files["fichier_donnees_"+str(i)]
chaine = fichier.read() # On récupère la chaîne
if len(chaine)>=5: # Si elle a une longueur à peu près raisonnable
debug("Un fichier de données additionnel trouvé", liste_err)
formulaire_2 = donnees.fichier_json_vers_configdonnees(chaine, liste_err)
if formulaire_2 =={}:
warning("Le fichier de données additionnel est vide ou mal formaté", liste_err)
else:
debug("Form 2 : "+str(formulaire_2), liste_err)
# Récupérer sous forme python
conf2, ljours2, listes_donnees2 = donnees.web_vers_python(formulaire_2,liste_err, court=True)
debug("Form 2 données travaillées "+str(ljours2)+str(listes_donnees2), liste_err)
# Le symbole et la couleur
symb2 = donnees.gere_symbole(data.get("symbole_donnees_"+str(i)))
coul2 = couleurs.rgb_vers_tuple(data.get("couleur_donnees_"+str(i),""),CONFIG["couleurs"]["cadretxt"],liste_err)
enfant2 = donnees.eclate_donnees_additionnelles(conf2, ljours2, listes_donnees2, symb2, coul2)
enfants_add.append(enfant2)
# récupérer les données du formulaire proprement
config,listes_jours,listes_donnees = donnees.web_vers_python(data,liste_err)
debug(" * On a récupéré et traité les données du formulaire web",liste_err)
texte = donnees.donnees_vers_json(listes_jours["poids"],listes_donnees["poids"],listes_jours["taille"],listes_donnees["taille"], config)
debug("texte prêt à être exporté : "+texte,liste_err)
# noter le nom de l'enfant pour l'export
nomenfant = donnees.simplifie_nom(config['nom'])
# créer les figures
try:
debug("création des figures...",liste_err)
textes_images = {}
liste_extracalculs = []
for typed in CONFIG["liste_typedonnees"]:
if config["tracevide"] == "oui" or listes_jours[typed] != []:
debug("On trace la courbe de "+typed,liste_err)
fig = cree_figure(config,listes_jours[typed],listes_donnees[typed],typed,liste_extracalculs, liste_err, enfants_add)
output = io.BytesIO()
FigureCanvas(fig).print_png(output)
plt.close(fig)
textes_images[typed] = base64.b64encode(output.getvalue()).decode("ascii")
else:
textes_images[typed] = ""
result = "success"
except:
result = "fail"
liste_err[0].append("Impossible de générer les courbes ! Config : "+str(config))
if ext == "b64":
reponse = { "result":result,
"export_txt": texte,
"nomenfant": nomenfant}
if result == "success":
reponse["messages"] = liste_err[0]+liste_err[1]
reponse["calculextra"] = liste_extracalculs
else:
reponse["messages"] = liste_err[2]+liste_err[1]+liste_err[0]
for typed in CONFIG["liste_typedonnees"]:
reponse["image_"+typed] = textes_images.get(typed,"")
return flask.jsonify(reponse)
elif ext == "png" and result == "success": # à voir cette partie car il faudrait voir ce qu'on y renvoie... vu
# qu'il n'y a plus une courbe mais plusieurs. Là ça renverra la dernière générée.
return flask.Response(output.getvalue(), mimetype='image/png')
elif ext == "png":
return flask.render_template("erreur_fatale.html",erreur="Impossible de générer la courbe")
else:
return flask.render_template("erreur_fatale.html",erreur="Le type d'image demandé n'est pas reconnu")
@app.route("/contact")
def contact():
beta=initialise_mode_beta()
return flask.render_template("contact.html",err=[], beta=beta)
@app.route("/faq")
def faq():
beta=initialise_mode_beta()
table_faq = f.lire_fichier_csv_simple(f.fichier_FAQ)
l_categ,table_qr = f.extraire_tables_par_cat(table_faq)
return flask.render_template("faq.html",lcateg=l_categ,tableqr=table_qr,err=[], beta=beta)
@app.route("/changelog")
def changelog():
beta=initialise_mode_beta()
table_version = f.lire_fichier_csv_simple(f.fichier_changelog)
return flask.render_template("changelog.html",table = table_version,err=[], beta=beta)
if __name__ == "__main__":
print("Mode debug maison : "+str(niveau_debug))
app.run(host='0.0.0.0',debug=True)
|