diff options
-rw-r--r-- | app.py | 23 | ||||
-rw-r--r-- | configuration.py | 1 | ||||
-rw-r--r-- | data/changelog_data.txt | 2 | ||||
-rw-r--r-- | gestionOMS.py | 4 | ||||
-rw-r--r-- | gestion_couleurs.py | 2 | ||||
-rw-r--r-- | gestion_donnees.py | 23 | ||||
-rw-r--r-- | gestion_erreurs.py | 4 | ||||
-rw-r--r-- | gestion_unites.py | 14 | ||||
-rw-r--r-- | templates/index.html | 2 | ||||
-rw-r--r-- | trace_courbe.py | 135 |
10 files changed, 108 insertions, 102 deletions
@@ -8,11 +8,10 @@ import base64 | |||
8 | from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas | 8 | from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas |
9 | 9 | ||
10 | from configuration import config_init,CONFIG | 10 | from configuration import config_init,CONFIG |
11 | from gestion_erreurs import * | 11 | from gestion_erreurs import initialise_erreurs, debug, niveau_debug |
12 | from gestion_donnees import * | 12 | import gestion_donnees as donnees |
13 | from gestion_unites import * | 13 | from trace_courbe import cree_figure |
14 | from trace_courbe import * | 14 | import faq as f |
15 | from faq import * | ||
16 | 15 | ||
17 | 16 | ||
18 | app = flask.Flask(__name__) | 17 | app = flask.Flask(__name__) |
@@ -26,7 +25,7 @@ def index(): | |||
26 | ## charger les donneés dans le formulaire | 25 | ## charger les donneés dans le formulaire |
27 | fichier = flask.request.files['fichier_donnees'] | 26 | fichier = flask.request.files['fichier_donnees'] |
28 | chaine = fichier.read() | 27 | chaine = fichier.read() |
29 | val_form2 = fichier_json_vers_configdonnees(chaine,liste_err) | 28 | val_form2 = donnees.fichier_json_vers_configdonnees(chaine,liste_err) |
30 | if val_form2 == {}: | 29 | if val_form2 == {}: |
31 | return flask.render_template("index.html",err=liste_err[2]+liste_err[1]+liste_err[0],valform=val_form) | 30 | return flask.render_template("index.html",err=liste_err[2]+liste_err[1]+liste_err[0],valform=val_form) |
32 | val_form.update(val_form2) | 31 | val_form.update(val_form2) |
@@ -45,15 +44,15 @@ def courbe_image(ext): | |||
45 | data = flask.request.form | 44 | data = flask.request.form |
46 | 45 | ||
47 | # récupérer les données du formulaire proprement | 46 | # récupérer les données du formulaire proprement |
48 | config,listes_jours,listes_donnees = web_vers_python(data,liste_err) | 47 | config,listes_jours,listes_donnees = donnees.web_vers_python(data,liste_err) |
49 | debug(" * On a récupéré et traité les données du formulaire web",liste_err) | 48 | debug(" * On a récupéré et traité les données du formulaire web",liste_err) |
50 | 49 | ||
51 | texte = donnees_vers_json(listes_jours["poids"],listes_donnees["poids"],listes_jours["taille"],listes_donnees["taille"], config) | 50 | texte = donnees.donnees_vers_json(listes_jours["poids"],listes_donnees["poids"],listes_jours["taille"],listes_donnees["taille"], config) |
52 | 51 | ||
53 | debug("texte prêt à être exporté : "+texte,liste_err) | 52 | debug("texte prêt à être exporté : "+texte,liste_err) |
54 | 53 | ||
55 | # noter le nom de l'enfant pour l'export | 54 | # noter le nom de l'enfant pour l'export |
56 | nomenfant = simplifie_nom(config['nom']) | 55 | nomenfant = donnees.simplifie_nom(config['nom']) |
57 | 56 | ||
58 | # créer les figures | 57 | # créer les figures |
59 | try: | 58 | try: |
@@ -105,15 +104,15 @@ def contact(): | |||
105 | @app.route("/faq") | 104 | @app.route("/faq") |
106 | def faq(): | 105 | def faq(): |
107 | 106 | ||
108 | table_faq = lire_fichier_csv_simple(fichier_FAQ) | 107 | table_faq = f.lire_fichier_csv_simple(f.fichier_FAQ) |
109 | l_categ,table_qr = extraire_tables_par_cat(table_faq) | 108 | l_categ,table_qr = f.extraire_tables_par_cat(table_faq) |
110 | 109 | ||
111 | return flask.render_template("faq.html",lcateg=l_categ,tableqr=table_qr,err=[]) | 110 | return flask.render_template("faq.html",lcateg=l_categ,tableqr=table_qr,err=[]) |
112 | 111 | ||
113 | @app.route("/changelog") | 112 | @app.route("/changelog") |
114 | def changelog(): | 113 | def changelog(): |
115 | 114 | ||
116 | table_version = lire_fichier_csv_simple(fichier_changelog) | 115 | table_version = f.lire_fichier_csv_simple(f.fichier_changelog) |
117 | 116 | ||
118 | return flask.render_template("changelog.html",table = table_version,err=[]) | 117 | return flask.render_template("changelog.html",table = table_version,err=[]) |
119 | 118 | ||
diff --git a/configuration.py b/configuration.py index 242f179..fd6df9e 100644 --- a/configuration.py +++ b/configuration.py | |||
@@ -113,6 +113,7 @@ DEFAUT["tracevide"] = "" | |||
113 | DEFAUT["memechelle"] = "" | 113 | DEFAUT["memechelle"] = "" |
114 | DEFAUT["positionlegende"] = "hg" | 114 | DEFAUT["positionlegende"] = "hg" |
115 | DEFAUT["prolongercourbes"] = "" | 115 | DEFAUT["prolongercourbes"] = "" |
116 | DEFAUT["grilleamelio"] = "oui" | ||
116 | 117 | ||
117 | 118 | ||
118 | DEFAUT["prematurite"] = "0j" | 119 | DEFAUT["prematurite"] = "0j" |
diff --git a/data/changelog_data.txt b/data/changelog_data.txt index f59e7b7..f0b26b0 100644 --- a/data/changelog_data.txt +++ b/data/changelog_data.txt | |||
@@ -1,3 +1,5 @@ | |||
1 | "Version 2.261","16/02/2021","<p>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 !</p>" | ||
2 | |||
1 | "Version 2.26","15/02/2021","<p>Nouveauté en bêta-test : grille améliorée. Pour le moment on peut cocher pour avoir cette fonctionnalité.</p>" | 3 | "Version 2.26","15/02/2021","<p>Nouveauté en bêta-test : grille améliorée. Pour le moment on peut cocher pour avoir cette fonctionnalité.</p>" |
2 | 4 | ||
3 | "Version 2.25","12/02/2021","<p>Nouveauté : possibilité de ""prolonger"" la courbe de poids/taille en pointillés. L'extrapolation est faite à partir de la dernière donnée. À tester encore !</p>" | 5 | "Version 2.25","12/02/2021","<p>Nouveauté : possibilité de ""prolonger"" la courbe de poids/taille en pointillés. L'extrapolation est faite à partir de la dernière donnée. À tester encore !</p>" |
diff --git a/gestionOMS.py b/gestionOMS.py index cebd1eb..b00b93b 100644 --- a/gestionOMS.py +++ b/gestionOMS.py | |||
@@ -5,8 +5,8 @@ Created on Mon May 18 08:59:11 2020 | |||
5 | 5 | ||
6 | @author: sekhmet | 6 | @author: sekhmet |
7 | """ | 7 | """ |
8 | from gestion_erreurs import * | 8 | #from gestion_erreurs import erreur, warning, debug |
9 | from gestion_couleurs import * | 9 | from gestion_couleurs import degrade_choix |
10 | 10 | ||
11 | import csv | 11 | import csv |
12 | 12 | ||
diff --git a/gestion_couleurs.py b/gestion_couleurs.py index c1b3690..3230f3d 100644 --- a/gestion_couleurs.py +++ b/gestion_couleurs.py | |||
@@ -4,7 +4,7 @@ | |||
4 | 4 | ||
5 | ### Gérer les couleurs | 5 | ### Gérer les couleurs |
6 | 6 | ||
7 | from gestion_erreurs import * | 7 | from gestion_erreurs import warning |
8 | 8 | ||
9 | def rgb_vers_tuple(chaine,defaut,liste_err): | 9 | def rgb_vers_tuple(chaine,defaut,liste_err): |
10 | """ convertit une chaine rgb genre #00FF1B | 10 | """ convertit une chaine rgb genre #00FF1B |
diff --git a/gestion_donnees.py b/gestion_donnees.py index 208be4a..169f3da 100644 --- a/gestion_donnees.py +++ b/gestion_donnees.py | |||
@@ -2,9 +2,9 @@ | |||
2 | # -*- coding: utf-8 -*- | 2 | # -*- coding: utf-8 -*- |
3 | 3 | ||
4 | from configuration import CONFIG,DEFAUT | 4 | from configuration import CONFIG,DEFAUT |
5 | from gestion_erreurs import * | 5 | from gestion_erreurs import debug, warning, erreur, initialise_erreurs |
6 | from gestion_couleurs import * | 6 | from gestion_couleurs import rgb_vers_tuple, tuple_vers_rgb |
7 | from gestion_unites import * | 7 | from gestion_unites import choix_unite |
8 | import datetime | 8 | import datetime |
9 | import json | 9 | import json |
10 | import unidecode | 10 | import unidecode |
@@ -73,6 +73,7 @@ def convertit_age_vers_texte(nombre): | |||
73 | if jours>0 or nombre ==0: # si c'est la naissance, faut beien écrire 0j quand même | 73 | if jours>0 or nombre ==0: # si c'est la naissance, faut beien écrire 0j quand même |
74 | chaine += str(jours)+"j" | 74 | chaine += str(jours)+"j" |
75 | return chaine | 75 | return chaine |
76 | |||
76 | ########################## | 77 | ########################## |
77 | 78 | ||
78 | # fonction qui calcule "auto" le maxi du graphique en fonction du max | 79 | # fonction qui calcule "auto" le maxi du graphique en fonction du max |
@@ -150,7 +151,7 @@ def delta_date(date1,datenaissance): | |||
150 | d = date1 - datenaissance | 151 | d = date1 - datenaissance |
151 | jours = d.days | 152 | jours = d.days |
152 | if jours<0: | 153 | if jours<0: |
153 | erreur_continue("La différence entre les dates est négative... :/") | 154 | warning("La différence entre les dates est négative... :/") |
154 | return -1 | 155 | return -1 |
155 | return jours | 156 | return jours |
156 | 157 | ||
@@ -179,7 +180,7 @@ def web_vers_python(data,liste_err): | |||
179 | 180 | ||
180 | 181 | ||
181 | 182 | ||
182 | ########### Fonctions qui gèretn les données | 183 | ########### Fonctions qui gèretn les données web vers python |
183 | 184 | ||
184 | def gere_checkbox(chaine): | 185 | def gere_checkbox(chaine): |
185 | """ prend en arg une chaine, et renvoie "oui" si c'est "on" (sortie de la checkbox) | 186 | """ prend en arg une chaine, et renvoie "oui" si c'est "on" (sortie de la checkbox) |
@@ -193,6 +194,7 @@ def gere_configuration(data,liste_err): | |||
193 | """ prend en argument le dictionnaire de requête (configuration imparfaite), et | 194 | """ prend en argument le dictionnaire de requête (configuration imparfaite), et |
194 | construit le dictionnaire de configuration qui va bien. | 195 | construit le dictionnaire de configuration qui va bien. |
195 | Vérifie que chaque entrée est cohérente évidemment.""" | 196 | Vérifie que chaque entrée est cohérente évidemment.""" |
197 | # Initialisation | ||
196 | configuration = {"non_sauve": {}} | 198 | configuration = {"non_sauve": {}} |
197 | 199 | ||
198 | # Pour le nom, osef qu'il soit vide | 200 | # Pour le nom, osef qu'il soit vide |
@@ -292,6 +294,7 @@ def gere_configuration(data,liste_err): | |||
292 | 294 | ||
293 | configuration["prolongercourbes"] = gere_checkbox(data.get("prolongercourbes","")) | 295 | configuration["prolongercourbes"] = gere_checkbox(data.get("prolongercourbes","")) |
294 | 296 | ||
297 | # Ceci n'a pas besoin d'être sauvé | ||
295 | configuration["non_sauve"]["grilleamelio"] = gere_checkbox(data.get("grilleamelio","")) | 298 | configuration["non_sauve"]["grilleamelio"] = gere_checkbox(data.get("grilleamelio","")) |
296 | 299 | ||
297 | configuration["couleurs"] = {} | 300 | configuration["couleurs"] = {} |
@@ -303,7 +306,7 @@ def gere_configuration(data,liste_err): | |||
303 | 306 | ||
304 | return configuration | 307 | return configuration |
305 | 308 | ||
306 | 309 | ## web vers python : données | |
307 | def gere_donnees(data,naissance,typedonnee,liste_err): | 310 | def gere_donnees(data,naissance,typedonnee,liste_err): |
308 | """ prend en argument le dictionnaire de requête, et la date de | 311 | """ prend en argument le dictionnaire de requête, et la date de |
309 | naissance (éventuellement vide), et construit deux listes : | 312 | naissance (éventuellement vide), et construit deux listes : |
@@ -347,6 +350,7 @@ def gere_donnees(data,naissance,typedonnee,liste_err): | |||
347 | return (l_jours,l_donnee) | 350 | return (l_jours,l_donnee) |
348 | 351 | ||
349 | 352 | ||
353 | # python vers Json | ||
350 | #### export vers json | 354 | #### export vers json |
351 | 355 | ||
352 | def donnees_vers_json(l_jours,l_poids,l_jourst,l_taille,config): | 356 | def donnees_vers_json(l_jours,l_poids,l_jourst,l_taille,config): |
@@ -378,7 +382,7 @@ def fusionne_donnees(listes_jours,listes_donnees): | |||
378 | de données (par la même clé de type de données). Il faut les fusionner pour avoir une liste de dictionnaires, de type | 382 | de données (par la même clé de type de données). Il faut les fusionner pour avoir une liste de dictionnaires, de type |
379 | ("age":truc, "donnee1":truc, "donnee2":truc, ...) triée par ordre de jours. Si jamais une des données est vide, | 383 | ("age":truc, "donnee1":truc, "donnee2":truc, ...) triée par ordre de jours. Si jamais une des données est vide, |
380 | le champ du dictionnaire n'est pas rempli""" | 384 | le champ du dictionnaire n'est pas rempli""" |
381 | # nb_donnees = len(listes_jours) | 385 | |
382 | def fini(lj): | 386 | def fini(lj): |
383 | """ teste si les listes sont toutes vides """ | 387 | """ teste si les listes sont toutes vides """ |
384 | for l in lj.values(): | 388 | for l in lj.values(): |
@@ -411,10 +415,11 @@ def fusionne_donnees(listes_jours,listes_donnees): | |||
411 | return liste_f | 415 | return liste_f |
412 | 416 | ||
413 | 417 | ||
414 | 418 | ### COnversion json vers formulaire | |
415 | # Json -> formulaire HTML | 419 | # Json -> formulaire HTML |
416 | def fichier_json_vers_configdonnees(chaine,liste_err): | 420 | def fichier_json_vers_configdonnees(chaine,liste_err): |
417 | """ prend le json importé (chaine) et l'exporte vers les valeurs du formulaire """ | 421 | """ prend le json importé (chaine) et l'exporte vers les valeurs du formulaire |
422 | Renvoyé sous forme de dictionnaire (mais adapté au formulaire web)""" | ||
418 | debug("json vers config : Prêt à interpréter le json",liste_err) | 423 | debug("json vers config : Prêt à interpréter le json",liste_err) |
419 | try: | 424 | try: |
420 | valform = json.loads(chaine) | 425 | valform = json.loads(chaine) |
diff --git a/gestion_erreurs.py b/gestion_erreurs.py index 7fffb06..910aabd 100644 --- a/gestion_erreurs.py +++ b/gestion_erreurs.py | |||
@@ -23,9 +23,9 @@ def warning(message,listeerreurs): | |||
23 | print("** Warning : "+message) | 23 | print("** Warning : "+message) |
24 | listeerreurs[1].append("Alerte : "+message) | 24 | listeerreurs[1].append("Alerte : "+message) |
25 | 25 | ||
26 | def debug(message,liste_erreurs): | 26 | def debug(message,listeerreurs): |
27 | global niveau_debug | 27 | global niveau_debug |
28 | if niveau_debug: | 28 | if niveau_debug: |
29 | print("##Debug : "+message) | 29 | print("##Debug : "+message) |
30 | liste_erreurs[2].append("# Debug : "+message) | 30 | listeerreurs[2].append("# Debug : "+message) |
31 | 31 | ||
diff --git a/gestion_unites.py b/gestion_unites.py index b97d90b..d4089bd 100644 --- a/gestion_unites.py +++ b/gestion_unites.py | |||
@@ -2,7 +2,7 @@ | |||
2 | # -*- coding: utf-8 -*- | 2 | # -*- coding: utf-8 -*- |
3 | 3 | ||
4 | from configuration import CONFIG | 4 | from configuration import CONFIG |
5 | from gestion_erreurs import * | 5 | from gestion_erreurs import warning |
6 | 6 | ||
7 | ##################### outils pour affichage et choix de l'unité | 7 | ##################### outils pour affichage et choix de l'unité |
8 | 8 | ||
@@ -31,7 +31,7 @@ def choix_echelle_data(typedonnees, donneemax): | |||
31 | if donneemax>15: | 31 | if donneemax>15: |
32 | return (5,1) | 32 | return (5,1) |
33 | elif donneemax > 10: | 33 | elif donneemax > 10: |
34 | return (2,1) | 34 | return (1,0.5) |
35 | else: | 35 | else: |
36 | return (1,0.2) | 36 | return (1,0.2) |
37 | if typedonnees == "taille": | 37 | if typedonnees == "taille": |
@@ -53,25 +53,25 @@ def choix_echelle_temps(unite, tempsmaxi): | |||
53 | if unite=="jours": | 53 | if unite=="jours": |
54 | if tempsmaxi > 60: # pourquoi mettre en jours ? | 54 | if tempsmaxi > 60: # pourquoi mettre en jours ? |
55 | return (30,1) | 55 | return (30,1) |
56 | elif tempsmaxi >20: | 56 | elif tempsmaxi >15: |
57 | return (7,1) | 57 | return (7,1) |
58 | else: | 58 | else: |
59 | return (1,0) | 59 | return (1,0) |
60 | if unite=="semaines": | 60 | if unite=="semaines": |
61 | if tempsmaxi >50: | 61 | if tempsmaxi >50: |
62 | return (5,1) | 62 | return (5,1) |
63 | elif tempsmaxi > 15: | 63 | elif tempsmaxi > 10: |
64 | return (2,1) | 64 | return (2,1) |
65 | else: | 65 | else: |
66 | return (1,1/7) # On met en jours | 66 | return (1,1/7) # On met en jours |
67 | 67 | ||
68 | if unite=="mois": | 68 | if unite=="mois": |
69 | if tempsmaxi > 30: | 69 | if tempsmaxi > 24: |
70 | return (2,1) | 70 | return (12,1) |
71 | elif tempsmaxi > 10: | 71 | elif tempsmaxi > 10: |
72 | return (1,0) | 72 | return (1,0) |
73 | else: | 73 | else: |
74 | return (1,0.25) # on met en semaines | 74 | return (1,0.25) # on met en semaines à peu près (quart de mois) |
75 | 75 | ||
76 | if unite=="années": | 76 | if unite=="années": |
77 | return (1,1/12) # années / mois | 77 | return (1,1/12) # années / mois |
diff --git a/templates/index.html b/templates/index.html index e5d4d24..34be454 100644 --- a/templates/index.html +++ b/templates/index.html | |||
@@ -96,7 +96,7 @@ | |||
96 | <li>Prolonger les courbes (expérimental) : <input type="checkbox" name="prolongercourbes" {% if valform.prolongercourbes == "oui" %} checked{% endif%}></li> | 96 | <li>Prolonger les courbes (expérimental) : <input type="checkbox" name="prolongercourbes" {% if valform.prolongercourbes == "oui" %} checked{% endif%}></li> |
97 | 97 | ||
98 | <li><label>Même échelle sur tous les graphiques : </label><input type="checkbox" name="memechelle" {% if valform.memechelle == 'oui' %} checked{% endif %}></li> | 98 | <li><label>Même échelle sur tous les graphiques : </label><input type="checkbox" name="memechelle" {% if valform.memechelle == 'oui' %} checked{% endif %}></li> |
99 | <li><label>Grille améliorée (bêta) :</label><input type="checkbox" name="grilleamelio"></li> | 99 | <li><label>Grille améliorée (bêta) :</label><input type="checkbox" name="grilleamelio" {% if valform.grilleamelio == 'oui' %} checked{% endif %}></li> |
100 | <li>Dimensions du graphique : <label>largeur : </label><input type="text" name="largeur" value="{{ valform.largeur }}"> | 100 | <li>Dimensions du graphique : <label>largeur : </label><input type="text" name="largeur" value="{{ valform.largeur }}"> |
101 | <label>hauteur : </label><input type="text" name="hauteur" value="{{ valform.hauteur }}"></li> | 101 | <label>hauteur : </label><input type="text" name="hauteur" value="{{ valform.hauteur }}"></li> |
102 | <li><label>Légende : <input type="checkbox" name="legende" {% if valform.legende == 'oui' %} checked{% endif %}> </label> | 102 | <li><label>Légende : <input type="checkbox" name="legende" {% if valform.legende == 'oui' %} checked{% endif %}> </label> |
diff --git a/trace_courbe.py b/trace_courbe.py index 9cb4845..c3e1691 100644 --- a/trace_courbe.py +++ b/trace_courbe.py | |||
@@ -1,9 +1,10 @@ | |||
1 | #!/usr/bin/env python3 | 1 | #!/usr/bin/env python3 |
2 | # -*- coding: utf-8 -*- | 2 | # -*- coding: utf-8 -*- |
3 | from configuration import CONFIG | 3 | from configuration import CONFIG |
4 | from gestionOMS import * | 4 | import gestionOMS as oms |
5 | from gestion_unites import * | 5 | import gestion_unites as u |
6 | from gestion_donnees import calcule_max_graphique, convertit_jours_vers_python | 6 | from gestion_donnees import calcule_max_graphique, convertit_jours_vers_python |
7 | from gestion_erreurs import debug, erreur, warning | ||
7 | from numpy import arange | 8 | from numpy import arange |
8 | 9 | ||
9 | import matplotlib.pyplot as plt | 10 | import matplotlib.pyplot as plt |
@@ -12,18 +13,22 @@ import matplotlib.pyplot as plt | |||
12 | 13 | ||
13 | 14 | ||
14 | def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err): | 15 | def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err): |
15 | debug("debut de cree_figure",liste_err) | 16 | """ conf est le dictionnaire de config. l_jours et l_poids les listes des temps (en jours) et de données |
17 | (donc pas forcément du poids) | ||
18 | typedonnee est le type de données (voir CONFIG["liste_typedonnees"] | ||
19 | liste_err la liste des erreurs à compléter (voir gestion_erreurs)) | ||
20 | Renvoie la figure tracée""" | ||
21 | debug("debut de cree_figure. Config : "+str(conf),liste_err) | ||
16 | try: | 22 | try: |
17 | liste_data_labels_p,liste_data_labels_z = renvoie_liste_labels(conf,CONFIG["liste_data_choisie_p"],CONFIG["liste_data_choisie_z"],liste_err) | 23 | liste_data_labels_p,liste_data_labels_z = oms.renvoie_liste_labels(conf,CONFIG["liste_data_choisie_p"],CONFIG["liste_data_choisie_z"],liste_err) |
18 | except: | 24 | except: |
19 | erreur("bug avec liste data labels",liste_err) | 25 | erreur("bug avec liste data labels",liste_err) |
20 | return "" | 26 | return "" |
21 | 27 | ||
22 | # maxi saisi par l'utilisateur ? | 28 | ######################## Gestion des bornes ############################# |
29 | # y a-t-il un maxi saisi par l'utilisateur ? | ||
23 | if conf["maxi"] ==0: | 30 | if conf["maxi"] ==0: |
24 | # Est-ce qu'on a donné un maxi quand même (car même échelle) ? | 31 | # Est-ce qu'on a donné un maxi quand même (car même échelle) ? |
25 | print(conf) | ||
26 | print(conf["non_sauve"]) | ||
27 | if conf["non_sauve"].get("maxi",0) == 0: | 32 | if conf["non_sauve"].get("maxi",0) == 0: |
28 | jour_maxi = calcule_max_graphique(l_jours) | 33 | jour_maxi = calcule_max_graphique(l_jours) |
29 | else: | 34 | else: |
@@ -31,42 +36,41 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err): | |||
31 | else: | 36 | else: |
32 | jour_maxi = conf["maxi"]+1 | 37 | jour_maxi = conf["maxi"]+1 |
33 | 38 | ||
34 | |||
35 | # On s'assure que c'est bien compris dans les bornes | 39 | # On s'assure que c'est bien compris dans les bornes |
36 | jour_maxi = max(CONFIG["jours_mini_courbe"],min(jour_maxi,CONFIG["jours_maxi_courbe"])) | 40 | jour_maxi = max(CONFIG["jours_mini_courbe"],min(jour_maxi,CONFIG["jours_maxi_courbe"])) |
37 | debug("cree_figure : gestion du jour max ok : "+str(jour_maxi),liste_err) | 41 | debug("cree_figure : gestion du jour max : "+str(jour_maxi),liste_err) |
38 | 42 | ||
43 | ##################### Gestion des unités ############################### | ||
39 | # si l'unité n'est pas précisée, ni en "non sauvé" ni par l'utilisateur | 44 | # si l'unité n'est pas précisée, ni en "non sauvé" ni par l'utilisateur |
40 | if conf["unite"] == "" and conf["non_sauve"].get("unite","") == "": | 45 | if conf["unite"] == "" and conf["non_sauve"].get("unite","") == "": |
41 | unite = choix_unite(jour_maxi) | 46 | unite = u.choix_unite(jour_maxi) |
42 | debug("Unité non précisée, on choisit "+unite,liste_err) | 47 | debug("Unité non précisée, on choisit "+unite,liste_err) |
43 | elif conf["unite"] != "": | 48 | elif conf["unite"] != "": |
44 | unite = conf["unite"] | 49 | unite = conf["unite"] |
45 | else: | 50 | else: |
46 | unite = conf["non_sauve"]["unite"] | 51 | unite = conf["non_sauve"]["unite"] |
47 | 52 | ||
48 | #debug("prématurité dans la config : "+conf["prematurite"],liste_err) | 53 | ##################### Gestion de la prématurité #######################" |
49 | prema = int(convertit_jours_vers_python(conf["prematurite"],liste_err)) | 54 | prema = int(convertit_jours_vers_python(conf["prematurite"],liste_err)) |
50 | ## Gestion des prémas, deux cas : | 55 | ## Gestion des prémas, deux cas : |
51 | # Si agecorrige est oui, alors on veut juste soustraire la valeur de préma | 56 | # Si agecorrige est oui, alors on veut juste soustraire la valeur de préma |
52 | # à toutes les données. | 57 | # à toutes les données. |
53 | # Si agecorrige est non, alors on veut ajouter la valeur de préma aux courbes de référence. | 58 | # Si agecorrige est non, alors on veut ajouter la valeur de préma aux courbes de référence. |
54 | 59 | debug("Prématurité : "+str(prema)+" age corrigé : "+conf["agecorrige"],liste_err) | |
55 | debug("Prématurité : "+str(prema)+" age corrigé : "+conf["agecorrige"],liste_err) | ||
56 | |||
57 | if prema>0 and conf["agecorrige"] == "oui": | 60 | if prema>0 and conf["agecorrige"] == "oui": |
58 | l_jours = [j-prema for j in l_jours] | 61 | l_jours = [j-prema for j in l_jours] |
59 | jour_maxi = jour_maxi - prema | 62 | jour_maxi = jour_maxi - prema |
60 | # debug("liste des jours : "+str(l_jours),liste_err) | ||
61 | 63 | ||
62 | l_jours_conv = convertit_tableau(l_jours,unite,liste_err) | 64 | |
65 | ###################### Conversion des unités ###########################"" | ||
66 | l_jours_conv = u.convertit_tableau(l_jours,unite,liste_err) | ||
63 | # Attention, comme les jours commencent à partir de 0, faut enlever 1 pour avoir la borne... | 67 | # Attention, comme les jours commencent à partir de 0, faut enlever 1 pour avoir la borne... |
64 | age_maxi = convertitunite(jour_maxi-1,unite,liste_err) | 68 | age_maxi = u.convertitunite(jour_maxi-1,unite,liste_err) |
65 | 69 | ||
66 | debug("cree_figure : conversion des unités ok : "+str(l_jours_conv),liste_err) | 70 | debug("cree_figure : conversion des unités ok : "+str(l_jours_conv),liste_err) |
67 | 71 | ||
72 | #####################" Courbes OMS et titre ######################################" | ||
68 | titre = "Courbe de "+typedonnee+" OMS" | 73 | titre = "Courbe de "+typedonnee+" OMS" |
69 | |||
70 | if conf["typecourbe"] == "P": | 74 | if conf["typecourbe"] == "P": |
71 | # percentiles | 75 | # percentiles |
72 | liste_data_labels = liste_data_labels_p | 76 | liste_data_labels = liste_data_labels_p |
@@ -98,7 +102,6 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err): | |||
98 | if conf["nom"] !="": | 102 | if conf["nom"] !="": |
99 | titre += " de " +conf["nom"] | 103 | titre += " de " +conf["nom"] |
100 | 104 | ||
101 | |||
102 | if prema>0: | 105 | if prema>0: |
103 | titre+= ", préma de "+conf["prematurite"] | 106 | titre+= ", préma de "+conf["prematurite"] |
104 | if conf["agecorrige"] == "oui": | 107 | if conf["agecorrige"] == "oui": |
@@ -106,30 +109,28 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err): | |||
106 | else: | 109 | else: |
107 | titre+=" (courbe en âge réel, données OMS décalées)" | 110 | titre+=" (courbe en âge réel, données OMS décalées)" |
108 | 111 | ||
109 | debug("cree_figure : géré le type de courbe ok. Liste des data labels : "+str(liste_data_labels),liste_err) | 112 | #debug("cree_figure : géré le type de courbe ok. Liste des data labels : "+str(liste_data_labels),liste_err) |
110 | debug("Fichier d'où extraire les données : "+fichier_oms,liste_err) | 113 | debug("Fichier d'où extraire les données : "+fichier_oms,liste_err) |
114 | |||
111 | 115 | ||
112 | |||
113 | |||
114 | # convertir les unités | ||
115 | #### Partie code OMS | ||
116 | #### On extrait les données des courbes, et on convertit les jours dans l'unité voulues | 116 | #### On extrait les données des courbes, et on convertit les jours dans l'unité voulues |
117 | try: | 117 | try: |
118 | t = lire_fichier_csv(fichier_oms) | 118 | t = oms.lire_fichier_csv(fichier_oms) |
119 | except: | 119 | except: |
120 | liste_err[0].append("Impossible d'ouvrir le fichier "+fichier_oms) | 120 | erreur("cree_figure : Impossible d'ouvrir le fichier "+fichier_oms, liste_err) |
121 | return "" | 121 | return "" |
122 | 122 | ||
123 | debug("cree_figure : on va convertir données OMS à la bonne unité",liste_err) | 123 | debug("cree_figure : Conversion des données OMS à la bonne unité",liste_err) |
124 | try: | 124 | try: |
125 | coljour= (extraire_colonne(t,0,jour_maxi)) | 125 | coljour= (oms.extraire_colonne(t,0,jour_maxi)) |
126 | if prema>0 and conf["agecorrige"] != "oui": | 126 | if prema>0 and conf["agecorrige"] != "oui": |
127 | coljour = [j + prema for j in coljour] | 127 | coljour = [j + prema for j in coljour] |
128 | coljour = convertit_tableau(coljour,unite,liste_err) | 128 | coljour = u.convertit_tableau(coljour,unite,liste_err) |
129 | except: | 129 | except: |
130 | erreur("Problème à la conversion du tableau OMS. jour_maxi = "+str(jour_maxi)+" unite = "+unite,liste_err) | 130 | erreur("Problème à la conversion du tableau OMS. jour_maxi = "+str(jour_maxi)+" unite = "+unite,liste_err) |
131 | return "" | 131 | return "" |
132 | 132 | ||
133 | ##################### Création de la figure et du graphique ################### | ||
133 | debug("cree_figure : prête à créer la figure",liste_err) | 134 | debug("cree_figure : prête à créer la figure",liste_err) |
134 | #### La figure, params | 135 | #### La figure, params |
135 | 136 | ||
@@ -142,36 +143,13 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err): | |||
142 | plt.rcParams['legend.edgecolor'] = conf["couleurs"]["grille"] | 143 | plt.rcParams['legend.edgecolor'] = conf["couleurs"]["grille"] |
143 | ax = plt.axes() | 144 | ax = plt.axes() |
144 | 145 | ||
146 | ###################### Tracé des différentes courbes | ||
145 | #Tracé des courbes OMS | 147 | #Tracé des courbes OMS |
146 | for (i,label,couleur) in liste_data_labels: | 148 | for (i,label,couleur) in liste_data_labels: |
147 | ax.plot(coljour,extraire_colonne(t,i,jour_maxi),label=label,color=couleur) | 149 | ax.plot(coljour,oms.extraire_colonne(t,i,jour_maxi),label=label,color=couleur) |
148 | #warning("colonne"+str(i)+str(label)+str(couleur),liste_err) | ||
149 | 150 | ||
150 | debug("cree_figure : tracé des courbes OMS ok",liste_err) | 151 | debug("cree_figure : tracé des courbes OMS ok",liste_err) |
151 | 152 | ||
152 | |||
153 | ##### Tracé des courbes OMS fini | ||
154 | |||
155 | # On extrait la valeur min et la valeur max des poids | ||
156 | (colonne_min,_,_) = liste_data_labels[-1] | ||
157 | (colonne_max,_,_) = liste_data_labels[0] | ||
158 | |||
159 | debug("cree_figure : colonnes min et max : "+str(colonne_min)+" "+str(colonne_max),liste_err) | ||
160 | |||
161 | poids_min = min(extraire_colonne(t,colonne_min,jour_maxi)) | ||
162 | poids_max = max(extraire_colonne(t,colonne_max,jour_maxi)) | ||
163 | if l_jours != []: | ||
164 | poids_min = min(min(l_poids),poids_min) | ||
165 | poids_max = max(max(l_poids),poids_max) | ||
166 | # On ajuste un peu ces min et max | ||
167 | # min : valeur min -1kg | ||
168 | poids_min = max(0,poids_min-1) | ||
169 | #max : +5% | ||
170 | poids_max = poids_max * 1.05 | ||
171 | |||
172 | |||
173 | debug("cree_figure : prête à tracer la courbe de l'enfant",liste_err) | ||
174 | |||
175 | ### Tracé pour de bon | 153 | ### Tracé pour de bon |
176 | if l_jours != []: | 154 | if l_jours != []: |
177 | ax.plot(l_jours_conv,l_poids,label=conf["nom"],color=conf["couleurs"]["cadretxt"],marker='o') | 155 | ax.plot(l_jours_conv,l_poids,label=conf["nom"],color=conf["couleurs"]["cadretxt"],marker='o') |
@@ -186,20 +164,44 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err): | |||
186 | dates_extrapole = list(range(date_fin, jour_maxi)) | 164 | dates_extrapole = list(range(date_fin, jour_maxi)) |
187 | donnees_extrapole = prolongecourbe(t, date_fin, l_poids[-1], dates_extrapole, conf["typecourbe"], liste_err) | 165 | donnees_extrapole = prolongecourbe(t, date_fin, l_poids[-1], dates_extrapole, conf["typecourbe"], liste_err) |
188 | #print("données extrapolées !") | 166 | #print("données extrapolées !") |
189 | dates_extrapole = convertit_tableau(dates_extrapole,unite,liste_err) | 167 | dates_extrapole = u.convertit_tableau(dates_extrapole,unite,liste_err) |
190 | 168 | ||
191 | # tracé des données extrapolées | 169 | # tracé des données extrapolées |
192 | plt.plot(dates_extrapole, donnees_extrapole,color=conf["couleurs"]["cadretxt"], linestyle=(0, (5,7)), marker=None) | 170 | plt.plot(dates_extrapole, donnees_extrapole,color=conf["couleurs"]["cadretxt"], linestyle=(0, (5,7)), marker=None) |
171 | debug("Tracé de la courbe extrapolée ok", liste_err) | ||
193 | 172 | ||
194 | else: | 173 | else: |
195 | debug("On ne trace pas de courbe enfant", liste_err) | 174 | debug("On ne trace pas de courbe enfant", liste_err) |
196 | 175 | ||
197 | debug("Début de la gestion de l'échelle", liste_err) | 176 | ###################" Gestion de l'échelle ##################### |
177 | debug("Courbes tracées. Il n'y a plus qu'à gérer l'échelle", liste_err) | ||
198 | ### échelle à régler | 178 | ### échelle à régler |
179 | |||
180 | # On extrait la valeur min et la valeur max des poids des courbes OMS et des données | ||
181 | (colonne_min,_,_) = liste_data_labels[-1] | ||
182 | (colonne_max,_,_) = liste_data_labels[0] | ||
199 | 183 | ||
184 | # poids max OMS | ||
185 | poids_min = min(oms.extraire_colonne(t,colonne_min,jour_maxi)) | ||
186 | poids_max = max(oms.extraire_colonne(t,colonne_max,jour_maxi)) | ||
187 | if l_jours != []: | ||
188 | poids_min = min(min(l_poids),poids_min) | ||
189 | # Pour le poids max, voir la dernière valeur du tableau | ||
190 | i = 0 | ||
191 | while i<len(l_jours) and l_jours[i]<jour_maxi: | ||
192 | i=i+1 | ||
193 | poids_max = max(max(l_poids[0:i+1]),poids_max) | ||
194 | # On ajuste un peu ces min et max | ||
195 | # min : valeur min -1kg | ||
196 | poids_min = max(0,poids_min-1) | ||
197 | #max : +5% | ||
198 | poids_max = poids_max * 1.05 | ||
199 | |||
200 | |||
201 | # Grille custom ? | ||
200 | if conf["non_sauve"]["grilleamelio"] == "oui": | 202 | if conf["non_sauve"]["grilleamelio"] == "oui": |
201 | 203 | debug("On a choisi la grille plus jolie", liste_err) | |
202 | pas=choix_echelle_data(typedonnee, poids_max) | 204 | pas=u.choix_echelle_data(typedonnee, poids_max) |
203 | # data_min_arrondie | 205 | # data_min_arrondie |
204 | minechelle = int(poids_min/pas[0])*pas[0] | 206 | minechelle = int(poids_min/pas[0])*pas[0] |
205 | 207 | ||
@@ -215,7 +217,7 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err): | |||
215 | ax.set_yticks(echellemineure, minor=True) | 217 | ax.set_yticks(echellemineure, minor=True) |
216 | 218 | ||
217 | # échelle en temps | 219 | # échelle en temps |
218 | pas=choix_echelle_temps(unite, age_maxi) | 220 | pas=u.choix_echelle_temps(unite, age_maxi) |
219 | debug("pas choisis pour l'échelle en x : "+str(pas), liste_err) | 221 | debug("pas choisis pour l'échelle en x : "+str(pas), liste_err) |
220 | 222 | ||
221 | echellemajeure = arange(0,age_maxi, pas[0]) | 223 | echellemajeure = arange(0,age_maxi, pas[0]) |
@@ -226,8 +228,7 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err): | |||
226 | ax.set_xticks(echellemajeure, minor=False) | 228 | ax.set_xticks(echellemajeure, minor=False) |
227 | ax.set_xticks(echellemineure, minor=True) | 229 | ax.set_xticks(echellemineure, minor=True) |
228 | 230 | ||
229 | 231 | ################################# Aspect du graphique | |
230 | #### Aspect du graphique | ||
231 | 232 | ||
232 | debug("On commende la déco du graphique", liste_err) | 233 | debug("On commende la déco du graphique", liste_err) |
233 | 234 | ||
@@ -255,13 +256,13 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_err): | |||
255 | 256 | ||
256 | fig.tight_layout() | 257 | fig.tight_layout() |
257 | 258 | ||
258 | debug("Fin de cree_figure", liste_err) | 259 | debug("Fin de cree_figure, tout va bien.", liste_err) |
259 | return fig | 260 | return fig |
260 | 261 | ||
261 | 262 | ||
262 | 263 | ||
263 | 264 | ||
264 | ### Pour extrapoler la courbe | 265 | ######################################## Pour extrapoler la courbe |
265 | 266 | ||
266 | def prolongecourbe(tableauOMS, date, donnee, nouvdates, typecourbe, liste_err): | 267 | def prolongecourbe(tableauOMS, date, donnee, nouvdates, typecourbe, liste_err): |
267 | """ tableauOMS est le ableau des données OMS. date et donnee sont la date (jours) | 268 | """ tableauOMS est le ableau des données OMS. date et donnee sont la date (jours) |
@@ -286,17 +287,15 @@ def prolongecourbe(tableauOMS, date, donnee, nouvdates, typecourbe, liste_err): | |||
286 | i+=1 | 287 | i+=1 |
287 | debug("prolongecourbe : on a trouvé la valeur de i : "+str(i),liste_err) | 288 | debug("prolongecourbe : on a trouvé la valeur de i : "+str(i),liste_err) |
288 | if i>=len(ligneoms): | 289 | if i>=len(ligneoms): |
289 | warning("prolongation de courbe : pas réussi... donnée au dessus !", liste_err) | 290 | warning("prolongation de courbe : pas réussi... donnée trop haute !", liste_err) |
290 | return [] | 291 | return [] |
291 | if i==idep: | 292 | if i==idep: |
292 | warning("prolongation de courbe : pas réussi... donnée en dessous !", liste_err) | 293 | warning("prolongation de courbe : pas réussi... donnée trop basse !", liste_err) |
293 | return [] | 294 | return [] |
294 | 295 | ||
295 | # Le coeff : donnee = coeff * l[i-1]+ (1-coeff)*ligne[i] | 296 | # Le coeff : donnee = coeff * l[i-1]+ (1-coeff)*ligne[i] |
296 | # On utilisera la même chose pour la nouvelle donnee | 297 | # On utilisera la même chose pour la nouvelle donnee |
297 | #print(ligneoms[i], ligneoms[i-1]) | ||
298 | coeff = (donnee - ligneoms[i])/(ligneoms[i-1] - ligneoms[i]) | 298 | coeff = (donnee - ligneoms[i])/(ligneoms[i-1] - ligneoms[i]) |
299 | #print("coeff : "+str(coeff)) | ||
300 | 299 | ||
301 | # extrapolations | 300 | # extrapolations |
302 | nouvdonnees = [] | 301 | nouvdonnees = [] |