summaryrefslogtreecommitdiff
path: root/app.py
blob: c4dfc93537816a15881e4b09a437afbd431f92f2 (plain) (blame)
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
#!/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
import gestion_donnees as donnees
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 donneés 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)

    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
    
    # 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)
                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)