]>
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 from trace_courbe
import cree_figure
17 def initialise_mode_beta ():
19 hote
= flask
. request
. host
20 if hote
[: 4 ] == "beta" :
21 print ( "** Mode bêta !**" )
27 app
= flask
. Flask ( __name__
)
29 @app.route ( '/' , methods
=[ 'POST' , 'GET' ])
31 beta
= initialise_mode_beta ()
32 liste_err
= initialise_erreurs ()
33 val_form
= config_init ()
34 ## Si on a chargé un fichier de données
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
)
41 # Si jamais le formulaire est vide, c'est qu'il y a eu une erreur !
43 return flask
. render_template ( "index.html" , err
= liste_err
[ 2 ]+ liste_err
[ 1 ]+ liste_err
[ 0 ], valform
= val_form
, CONFIG
= CONFIG
, beta
= beta
)
44 val_form
. update ( val_form2
)
45 val_form
[ "fichier_importe" ] = 1 # Pour noter qu'on a importé un fichier
47 return flask
. render_template ( "index.html" , err
= liste_err
[ 1 ], valform
= val_form
, CONFIG
= CONFIG
, beta
= beta
)
49 @app.route ( '/apropos' )
51 beta
= initialise_mode_beta ()
52 return flask
. render_template ( "apropos.html" , err
=[], beta
= beta
)
55 @app.route ( "/courbe/<ext>" , methods
=[ 'POST' ])
56 def courbe_image ( ext
):
57 liste_err
= initialise_erreurs ()
58 data
= flask
. request
. form
60 # récupérer les données du formulaire proprement
61 config
, listes_jours
, listes_donnees
= donnees
. web_vers_python ( data
, liste_err
)
62 debug ( " * On a récupéré et traité les données du formulaire web" , liste_err
)
64 # Gérer les enfants additionnels
65 enfants_add
= donnees
. gere_enfants_additionnels ( data
, flask
. request
. files
, liste_err
)
66 debug ( "Enfants additionnels récupérés : " + str ( enfants_add
), liste_err
)
68 # Récupérer le texte à exporter
69 texte
= donnees
. donnees_vers_json ( listes_jours
[ "poids" ], listes_donnees
[ "poids" ], listes_jours
[ "taille" ], listes_donnees
[ "taille" ], config
)
70 debug ( "texte prêt à être exporté : " + texte
, liste_err
)
72 # noter le nom de l'enfant pour l'export
73 nomenfant
= donnees
. simplifie_nom ( config
[ 'nom' ])
77 debug ( "création des figures..." , liste_err
)
79 liste_extracalculs
= []
81 for typed
in CONFIG
[ "liste_typedonnees" ]:
82 if config
[ "tracevide" ] == "oui" or listes_jours
[ typed
] != []:
83 existe_courbe
= True # Une courbe (au moins) a été tracée
84 debug ( "On trace la courbe de " + typed
, liste_err
)
85 fig
= cree_figure ( config
, listes_jours
[ typed
], listes_donnees
[ typed
], typed
, liste_extracalculs
, liste_err
, enfants_add
)
87 FigureCanvas ( fig
). print_png ( output
)
89 textes_images
[ typed
] = base64
. b64encode ( output
. getvalue ()). decode ( "ascii" )
91 textes_images
[ typed
] = ""
96 liste_err
[ 0 ]. append ( "Impossible de générer les courbes ! Config : " + str ( config
))
98 if not ( existe_courbe
):
99 warning ( "Aucune courbe n'a été tracée. C'est probablement parce que les données sont vides et que l'option \" tracer les courbes vides \" n'a pas été cochée." , liste_err
)
102 reponse
= { "result" : result
,
104 "nomenfant" : nomenfant
}
105 if result
== "success" :
106 reponse
[ "messages" ] = liste_err
[ 0 ]+ liste_err
[ 1 ]
107 reponse
[ "calculextra" ] = liste_extracalculs
109 reponse
[ "messages" ] = liste_err
[ 2 ]+ liste_err
[ 1 ]+ liste_err
[ 0 ]
111 for typed
in CONFIG
[ "liste_typedonnees" ]:
112 reponse
[ "image_" + typed
] = textes_images
. get ( typed
, "" )
114 return flask
. jsonify ( reponse
)
116 elif ext
== "png" and result
== "success" : # à voir cette partie car il faudrait voir ce qu'on y renvoie... vu
117 # qu'il n'y a plus une courbe mais plusieurs. Là ça renverra la dernière générée.
118 return flask
. Response ( output
. getvalue (), mimetype
= 'image/png' )
120 return flask
. render_template ( "erreur_fatale.html" , erreur
= "Impossible de générer la courbe" )
122 return flask
. render_template ( "erreur_fatale.html" , erreur
= "Le type d'image demandé n'est pas reconnu" )
125 @app.route ( "/contact" )
127 beta
= initialise_mode_beta ()
128 return flask
. render_template ( "contact.html" , err
=[], beta
= beta
)
132 beta
= initialise_mode_beta ()
134 table_faq
= f
. lire_fichier_csv_simple ( f
. fichier_FAQ
)
135 l_categ
, table_qr
= f
. extraire_tables_par_cat ( table_faq
)
137 return flask
. render_template ( "faq.html" , lcateg
= l_categ
, tableqr
= table_qr
, err
=[], beta
= beta
)
139 @app.route ( "/changelog" )
141 beta
= initialise_mode_beta ()
143 table_version
= f
. lire_fichier_csv_simple ( f
. fichier_changelog
)
145 return flask
. render_template ( "changelog.html" , table
= table_version
, nblignes
= CONFIG
[ "nb_lignes_changelog" ], err
=[], beta
= beta
)
147 if __name__
== "__main__" :
148 print ( "Mode debug maison : " + str ( niveau_debug
))
149 app
. run ( host
= '0.0.0.0' , debug
= True )