From: Denise sur Lya
Date: Thu, 18 Feb 2021 19:05:29 +0000 (+0100)
Subject: extrapolation des courbes et calculs associés
X-Git-Url: https://git.immae.eu/?a=commitdiff_plain;h=cf0d4c8c36224ca7059e99d03c25abaf694011d7;p=perso%2FDenise%2Foms.git
extrapolation des courbes et calculs associés
---
diff --git a/app.py b/app.py
index 02d88c4..958efd5 100644
--- a/app.py
+++ b/app.py
@@ -14,10 +14,23 @@ 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":
@@ -29,13 +42,13 @@ def index():
if val_form2 == {}:
return flask.render_template("index.html",err=liste_err[2]+liste_err[1]+liste_err[0],valform=val_form)
val_form.update(val_form2)
- #return str(val_form['nb_data'])
- return flask.render_template("index.html",err=liste_err[1],valform=val_form)
+
+ return flask.render_template("index.html",err=liste_err[1],valform=val_form, CONFIG=CONFIG, beta=beta)
@app.route('/apropos')
def apropos():
-
- return flask.render_template("apropos.html",err=[])
+ beta=initialise_mode_beta()
+ return flask.render_template("apropos.html",err=[], beta=beta)
@app.route("/courbe/", methods=['POST'])
@@ -58,10 +71,11 @@ def courbe_image(ext):
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_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)
@@ -80,13 +94,16 @@ def courbe_image(ext):
"export_txt": texte,
"nomenfant": nomenfant}
if result == "success":
- reponse["messages"] = liste_err[0]
+ 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.
@@ -99,22 +116,25 @@ def courbe_image(ext):
@app.route("/contact")
def contact():
- return flask.render_template("contact.html",err=[])
+ 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=[])
+ 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=[])
+ return flask.render_template("changelog.html",table = table_version,err=[], beta=beta)
if __name__ == "__main__":
print("Mode debug maison : "+str(niveau_debug))
diff --git a/calculs_extrapole.py b/calculs_extrapole.py
new file mode 100644
index 0000000..ab22502
--- /dev/null
+++ b/calculs_extrapole.py
@@ -0,0 +1,89 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+Created on Thu Feb 18 18:25:11 2021
+
+@author: sekhmet
+"""
+
+from gestion_erreurs import warning, debug
+from configuration import CONFIG
+from gestion_donnees import convertit_age_vers_texte
+import gestion_unites as u
+
+#### Les fonctions qui permettent de faire les calculs additionnels une fois qu'on a l'extrapolation
+
+def met_s(chaine):
+ """ renvoie un s si pluriel, rien sinon"""
+ if int(chaine)>1:
+ return "s"
+ else:
+ return ""
+
+def joliechaine_age(age):
+ """ prend en argument une chaîne du type 6a3m2j et renvoie une chaîne un peu
+ plus jolie à lire genre 6 ans, 3mois, 2 jours"""
+ retour = ""
+ nombre = ""
+ for char in age:
+ if char=="a":
+ retour+=nombre+" année"+met_s(nombre)+", "
+ nombre=""
+ elif char=="m":
+ retour+=nombre+" mois, "
+ nombre=""
+ elif char=="s":
+ retour+=nombre+" semaine"+met_s(nombre)+", "
+ nombre=""
+ elif char=="j":
+ retour+=nombre+" jour"+met_s(nombre)+", "
+ nombre=""
+ else:
+ nombre+=char
+ #print(retour)
+ return retour[:-2]
+
+
+
+def calcule_donnee_extrapolee(dates_extrapole, donnees_extrapole, age_voulu, typedonnee, liste_err):
+ """ prend en argument les données extrapolées, l'âge voulu en jours,
+ et le type de données qu'on veut afficher, et renvoie une jolie phrase
+ Ã afficher"""
+ age_voulu = int(age_voulu) # pour avoir les choses bien
+ debug("On veut la donnée à l'âge "+str(age_voulu), liste_err)
+ try:
+ i_date_voulue = dates_extrapole.index(age_voulu)
+ donnee_voulue = donnees_extrapole[i_date_voulue]
+ donnee_arrondie = u.arrondit_donnee(donnee_voulue, typedonnee)
+ chaine = "Ã "+joliechaine_age(convertit_age_vers_texte(age_voulu))
+
+ if typedonnee == "poids":
+ return chaine+", l'enfant pèsera "+str(donnee_arrondie)+" kg."
+ elif typedonnee == "taille":
+ return chaine+", l'enfant mesurera "+str(donnee_arrondie)+" cm."
+ else: # phrase générique
+ return chaine+", la donnée sera : "+str(donnee_arrondie)+" "+CONFIG["unites_typedonnees"][typedonnee]+"."
+ except:
+ warning("Impossible de calculer la donnée à l'âge "+age_voulu, liste_err)
+ return ""
+
+def calcule_age_extrapole(dates_extrapole, donnees_extrapole, donnee_voulue, typedonnee, liste_err):
+ """ prend en argument les données extrapolées, la donnée voulue (dans l'unité adaptée)
+ et son type, et renvoie la jolie phrase à afficher"""
+
+ debug("On veut savoir à quel âge on a "+str(donnee_voulue), liste_err)
+ try:
+ i=0
+ while iNouveauté : extrapolation de la courbe améliorée et calculs possibles ! En bêta, à tester !
"
+
"Version 2.261","16/02/2021","Du mieux sur la gestion de la grille améliorée, qui passe en ""par défaut"" maintenant. Plus une correction de bug sur l'échelle du graphique, et du code nettoyé. On dirait pas comme ça, hein ? N'hésitez pas à me signaler tout vilain bug persistant !
"
"Version 2.26","15/02/2021","Nouveauté en bêta-test : grille améliorée. Pour le moment on peut cocher pour avoir cette fonctionnalité.
"
diff --git a/gestionOMS.py b/gestionOMS.py
index b00b93b..8c2b910 100644
--- a/gestionOMS.py
+++ b/gestionOMS.py
@@ -81,9 +81,11 @@ def lire_fichier_csv(fichier):
return table
-def extraire_colonne(table,ncol,maxi):
+def extraire_colonne(table,ncol,maxi=-1):
""" extrait une colonne d'un tableau double, de taille maximum maxi"""
t = []
+ if maxi==-1:
+ maxi = len(table)
for i in range( min(len(table),maxi) ):
t.append(table[i][ncol])
return t
diff --git a/gestion_donnees.py b/gestion_donnees.py
index 169f3da..123120b 100644
--- a/gestion_donnees.py
+++ b/gestion_donnees.py
@@ -291,11 +291,6 @@ def gere_configuration(data,liste_err):
if not(positionlegende in ['upper left','upper right','lower left','lower right']):
positionlegende = "upper left"
configuration["positionlegende"] = positionlegende
-
- configuration["prolongercourbes"] = gere_checkbox(data.get("prolongercourbes",""))
-
- # Ceci n'a pas besoin d'être sauvé
- configuration["non_sauve"]["grilleamelio"] = gere_checkbox(data.get("grilleamelio",""))
configuration["couleurs"] = {}
# gérer les couleurs
@@ -303,9 +298,41 @@ def gere_configuration(data,liste_err):
coul = rgb_vers_tuple(data.get("couleur_"+clecouleur,""),CONFIG["couleurs"][clecouleur],liste_err)
configuration["couleurs"][clecouleur] = coul
+
+ configuration["non_sauve"]["grilleamelio"] = gere_checkbox(data.get("grilleamelio",""))
+
+
+ #### La partie extrapolation n'a pas besoin d'être sauvée
+ configuration["non_sauve"]["prolongercourbes"] = gere_checkbox(data.get("prolongercourbes",""))
+
+ # Valeur par défaut : 1
+ debug(data.get("nbextradata", "aaargh"), liste_err)
+ nbextradata = data.get("nbextradata",1)
+ try:
+ nbextradata = int(nbextradata)
+ except:
+ warning("Le nombre de données sur lequel on extrapole est invalide : "+nbextradata, liste_err)
+ nbextradata = 1
+ configuration["non_sauve"]["nbextradata"] = nbextradata
+
+ if data.get("calculextradata_type","") in CONFIG["liste_typedonnees"]:
+ configuration["non_sauve"]["calculextradata_type"] = data.get("calculextradata_type","")
+ configuration["non_sauve"]["calculextradata_age"] = convertit_jours_vers_python(data.get("calculextradata_age","0j"),liste_err)
+ else:
+ configuration["non_sauve"]["calculextradata_type"] = ""
+ # On ne met rien dans l'âge, pas la peine
+
+ ctyped = data.get("calculextratemps_type","")
+ if ctyped in CONFIG["liste_typedonnees"]:
+ configuration["non_sauve"]["calculextratemps_type"] = ctyped
+ configuration["non_sauve"]["calculextratemps_val"] = convertit_donnee_vers_python(data.get("calculextratemps_val",""), ctyped, liste_err)
+ else:
+ configuration["non_sauve"]["calculextratemps_type"] = ""
return configuration
+
+
## web vers python : données
def gere_donnees(data,naissance,typedonnee,liste_err):
""" prend en argument le dictionnaire de requête, et la date de
diff --git a/gestion_unites.py b/gestion_unites.py
index d4089bd..f4cc38e 100644
--- a/gestion_unites.py
+++ b/gestion_unites.py
@@ -3,6 +3,7 @@
from configuration import CONFIG
from gestion_erreurs import warning
+from math import log
##################### outils pour affichage et choix de l'unité
@@ -94,4 +95,18 @@ def convertitunite(jours,unite,liste_err):
def convertit_tableau(tableau,unite,liste_err):
""" convertit un tableau de jours en une autre unité.
Renvoie le nouveau tableau"""
- return [convertitunite(elt,unite,liste_err) for elt in tableau]
\ No newline at end of file
+ return [convertitunite(elt,unite,liste_err) for elt in tableau]
+
+def arrondit_donnee(donnee, typed, arrondi=0):
+ """ on arrondit la donnée de type typed (à voir dans CONFIG)
+ à arrondit près. SI y'a 0 on va voir dans la config.
+ Pour l'arrondit on met par ex 1 pour arrondir à 1 pr_s, 0.1 pour arrondir
+ au dixième etc"""
+ if arrondi==0:
+ arrondi = CONFIG["arrondis_typedonnees"][typed]
+ if arrondi==0:
+ print("Euuuh ça va merder, y'a une div par 0 dans arrondit_donnees !")
+
+ d_arr = round(donnee/arrondi)*arrondi
+ nbchiffresvoulus = int(log(1/arrondi, 10))+1 # max sur le nombre de chiffres après la virgule qu'on doit avoir
+ return round(d_arr, nbchiffresvoulus)
\ No newline at end of file
diff --git a/static/requetes.js b/static/requetes.js
index 57330b3..6228020 100644
--- a/static/requetes.js
+++ b/static/requetes.js
@@ -19,6 +19,7 @@ function appelle_image()
var liste_warnings = this.response.messages
var texte = this.response.export_txt;
var nomenfant = this.response.nomenfant ;
+ var calculextra = this.response.calculextra ;
// on affiche l'export des données
document.getElementById('export').innerHTML = texte;
@@ -67,7 +68,19 @@ function appelle_image()
li.appendChild(document.createTextNode(liste_warnings[i]));
ul.appendChild(li);
}
- }
+ }
+ // S'il y a des calculs faits, Ã afficher !
+ if(calculextra.length != 0)
+ {
+ var elem_extr = document.getElementById("section_extradonnees")
+ elem_extr.style.display = "block" ;
+ var ul2=elem_extr.children[1] ;
+ for(i=0; i
{% endif %}
+ {% if beta %}
+
+
Attention !
+ Ceci est la version « Bêta-test » du site. Il se peut que l'outil ait un comportement inattendu ou buggue. Si vous ne savez pas ce que vous
+ faites là , retournez sur le site normal
en cliquant ici
+
+ {% endif %}
{% block contenu %}{% endblock %}
@@ -37,7 +44,6 @@
Contact |
à propos |
Changelog
-