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