diff options
author | Denise sur Lya <sekhmet@lya> | 2020-06-19 13:38:05 +0200 |
---|---|---|
committer | Denise sur Lya <sekhmet@lya> | 2020-06-19 13:38:05 +0200 |
commit | 915e90bbf0bee1d69c51a749a4f2be85b9fda091 (patch) | |
tree | 47649a1dd91b749b44ecb37c7628e4c92b9c093a | |
parent | fd69b6b5fd9117baeb2b39fa75c3efa3740e2227 (diff) | |
download | oms-915e90bbf0bee1d69c51a749a4f2be85b9fda091.tar.gz oms-915e90bbf0bee1d69c51a749a4f2be85b9fda091.tar.zst oms-915e90bbf0bee1d69c51a749a4f2be85b9fda091.zip |
amélioration du code + page contact en cours + licences
-rw-r--r-- | COPYING | 10 | ||||
-rw-r--r-- | LICENSE | 12 | ||||
-rw-r--r-- | app.py | 30 | ||||
-rw-r--r-- | configuration.py | 84 | ||||
-rw-r--r-- | data_OMS/LICENSE (renamed from data_OMS/licence) | 0 | ||||
-rw-r--r-- | gestionOMS.py | 6 | ||||
-rw-r--r-- | gestion_donnees.py | 61 | ||||
-rw-r--r-- | licence | 20 | ||||
-rw-r--r-- | templates/apropos.html | 2 | ||||
-rw-r--r-- | templates/base.html | 4 | ||||
-rw-r--r-- | templates/contact.html | 14 | ||||
-rw-r--r-- | templates/index.html | 26 | ||||
-rw-r--r-- | trace_courbe.py | 24 |
13 files changed, 164 insertions, 129 deletions
@@ -1,5 +1,9 @@ | |||
1 | -------------- | 1 | -------------- |
2 | Attention : application de licences : | 2 | Attention : application des licences : |
3 | |||
4 | Le dossier data_OMS est sous licence CC BY-NC-SA 3.0 IGO | ||
5 | https://creativecommons.org/licenses/by-nc-sa/3.0/igo/ | ||
6 | |||
7 | Le reste du projet est sous licence MIT "X11" | ||
8 | https://fr.wikipedia.org/wiki/Licence_MIT | ||
3 | 9 | ||
4 | Le dossier data_OMS est sous licence CC BY-NC-SA 3.0 IGO | ||
5 | Le reste du projet est sous licence | ||
@@ -0,0 +1,12 @@ | |||
1 | Ce projet, à l'exception du dossier data_OMS (voir fichier COPYING), est sous licence MIT "X11" | ||
2 | (plus d'informations en français https://fr.wikipedia.org/wiki/Licence_MIT ) | ||
3 | |||
4 | ---------------- | ||
5 | Copyright © 2020, Denise Maurice | ||
6 | |||
7 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: | ||
8 | |||
9 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. | ||
10 | |||
11 | The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders X be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software. | ||
12 | Except as contained in this notice, the name of Denise Maurice shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from Denise Maurice. | ||
@@ -27,7 +27,8 @@ def index(): | |||
27 | ## charger les donneés dans le formulaire | 27 | ## charger les donneés dans le formulaire |
28 | fichier = flask.request.files['fichier_donnees'] | 28 | fichier = flask.request.files['fichier_donnees'] |
29 | 29 | ||
30 | val_form = fichier_json_vers_configdonnees(fichier,liste_err) | 30 | val_form2 = fichier_json_vers_configdonnees(fichier,liste_err) |
31 | val_form.update(val_form2) | ||
31 | #return str(val_form['nb_data']) | 32 | #return str(val_form['nb_data']) |
32 | return flask.render_template("index.html",err=liste_err[1],valform=val_form) | 33 | return flask.render_template("index.html",err=liste_err[1],valform=val_form) |
33 | 34 | ||
@@ -46,13 +47,15 @@ def courbe_image(ext): | |||
46 | config = gere_configuration(data,liste_err) | 47 | config = gere_configuration(data,liste_err) |
47 | l_jours,l_poids = gere_donneespoids(data,config["naissance"],liste_err) | 48 | l_jours,l_poids = gere_donneespoids(data,config["naissance"],liste_err) |
48 | 49 | ||
49 | #print(config) | 50 | |
50 | 51 | ||
51 | texte = donnees_vers_json(l_jours,l_poids,config) | 52 | texte = donnees_vers_json(l_jours,l_poids,config) |
52 | 53 | ||
53 | # noter le nom de l'enfant pour l'export | 54 | # noter le nom de l'enfant pour l'export |
54 | nomenfant = simplifie_nom(config['nom']) | 55 | nomenfant = simplifie_nom(config['nom']) |
55 | 56 | ||
57 | #warning(str(config),liste_err) | ||
58 | |||
56 | # créer la figure | 59 | # créer la figure |
57 | try: | 60 | try: |
58 | fig = cree_figure(config,l_jours,l_poids,liste_err) | 61 | fig = cree_figure(config,l_jours,l_poids,liste_err) |
@@ -63,7 +66,7 @@ def courbe_image(ext): | |||
63 | plt.close(fig) | 66 | plt.close(fig) |
64 | except: | 67 | except: |
65 | result = "fail" | 68 | result = "fail" |
66 | liste_err[0].append("Impossible de générer la courbe !") | 69 | liste_err[0].append("Impossible de générer la courbe ! Config : "+str(config)) |
67 | 70 | ||
68 | 71 | ||
69 | if ext == "b64": | 72 | if ext == "b64": |
@@ -88,23 +91,10 @@ def courbe_image(ext): | |||
88 | else: | 91 | else: |
89 | return flask.render_template("erreur_fatale.html",erreur="Le type d'image demandé n'est pas reconnu") | 92 | return flask.render_template("erreur_fatale.html",erreur="Le type d'image demandé n'est pas reconnu") |
90 | 93 | ||
91 | #return flask.Response(base64.b64encode(output.getvalue()), mimetype='text/plain') | 94 | |
92 | 95 | @app.route("/contact") | |
93 | #@app.route("/export_donnees",methods=['POST']) | 96 | def contact(): |
94 | #def export_donnees(): | 97 | return flask.render_template("contact.html",err=[]) |
95 | # # exporte les données au format texte | ||
96 | # liste_err = initialise_erreurs() | ||
97 | # data = flask.request.form | ||
98 | # | ||
99 | # config = gere_configuration(data,liste_err) | ||
100 | # l_jours,l_poids = gere_donneespoids(data,config["naissance"],liste_err) | ||
101 | # | ||
102 | # texte = configuration_vers_texte(config) | ||
103 | # texte += donnees_poids_vers_texte(l_jours,l_poids) | ||
104 | # | ||
105 | # #texte = donnees_vers_json(l_jours,l_poids,config) | ||
106 | # #return flask.Response(texte,mimetype="application/json") | ||
107 | # return flask.Response(texte,mimetype="text/plain") | ||
108 | 98 | ||
109 | @app.route("/faq") | 99 | @app.route("/faq") |
110 | def faq(): | 100 | def faq(): |
diff --git a/configuration.py b/configuration.py index e173ad9..3e65255 100644 --- a/configuration.py +++ b/configuration.py | |||
@@ -23,6 +23,9 @@ liste_data_choisie_p.sort(reverse=True) | |||
23 | liste_data_choisie_z = [(2,-3),(3,-2),(4,-1),(5,0),(6,1),(7,2),(8,3)] | 23 | liste_data_choisie_z = [(2,-3),(3,-2),(4,-1),(5,0),(6,1),(7,2),(8,3)] |
24 | liste_data_choisie_z.sort(reverse=True) | 24 | liste_data_choisie_z.sort(reverse=True) |
25 | 25 | ||
26 | |||
27 | CONFIG = {} | ||
28 | |||
26 | liste_unites_valides = ["jours", "semaines", "mois", "années"] | 29 | liste_unites_valides = ["jours", "semaines", "mois", "années"] |
27 | 30 | ||
28 | # nombre de jours dans autre chose | 31 | # nombre de jours dans autre chose |
@@ -30,63 +33,82 @@ jours_dans_mois = 30.4375 | |||
30 | jours_dans_annee = 365.25 | 33 | jours_dans_annee = 365.25 |
31 | jours_dans_semaine = 7 | 34 | jours_dans_semaine = 7 |
32 | 35 | ||
33 | |||
34 | ## Maxi et mini de "sécurité" | 36 | ## Maxi et mini de "sécurité" |
35 | # jours maxi | 37 | # jours maxi |
36 | jours_maxi_courbe = 6.2*jours_dans_annee | 38 | jours_maxi_courbe = 5.5*jours_dans_annee |
37 | # poids max (protection) | 39 | # poids max (protection) |
38 | poids_maxi = 80 | 40 | poids_maxi = 80 |
39 | # taille max du nom | 41 | # taille max du nom |
40 | longueur_max_nom_bebe = 100 | 42 | longueur_max_nom_bebe = 100 |
41 | 43 | ||
42 | |||
43 | ### Taille du graphique par défaut (pouces, en 80 points par pouce) | ||
44 | largeur_graphique = 10 | ||
45 | hauteur_graphique = 7 | ||
46 | |||
47 | #largeurs et hauteurs min et max | 44 | #largeurs et hauteurs min et max |
48 | largeur_graphique_max = 40 | 45 | largeur_graphique_max = 40 |
49 | largeur_graphique_min = 2 | 46 | largeur_graphique_min = 3 |
50 | 47 | ||
51 | hauteur_graphique_max = 40 | 48 | hauteur_graphique_max = 40 |
52 | hauteur_graphique_min = 2 | 49 | hauteur_graphique_min = 2 |
53 | 50 | ||
51 | |||
52 | |||
53 | ## Configuration "par défaut" du graphique, tel qu'exporté ? | ||
54 | DEFAUT = {} | ||
55 | |||
56 | ### Taille du graphique par défaut (pouces, en 80 points par pouce) | ||
57 | DEFAUT["largeur"] = 10 | ||
58 | DEFAUT["hauteur"] = 7 | ||
59 | |||
54 | # Nombre de lignes par défaut dans le formulaire | 60 | # Nombre de lignes par défaut dans le formulaire |
55 | nombre_lignes_form = 5 | 61 | DEFAUT["nb_data"] = 6 |
56 | 62 | ||
57 | # couleurs par défaut | 63 | # couleurs par défaut |
58 | couleur_defaut_1 = "#0000FF" # bleu | 64 | DEFAUT["couleurs"] = {} |
59 | couleur_defaut_2 = "#00FF00" # vert | 65 | DEFAUT["couleurs"]["courbe1"] = "#0000FF" # bleu |
60 | couleur_defaut_3 = "#FF0000" # rouge | 66 | DEFAUT["couleurs"]["courbe2"] = "#00FF00" # vert |
61 | couleur_defaut_1_tuple = (0,0,1) | 67 | DEFAUT["couleurs"]["courbe3"] = "#FF0000" # rouge |
62 | couleur_defaut_2_tuple = (0,1,0) | 68 | DEFAUT["couleurs"]["fond"]= "#FFFFFF" # blanc |
63 | couleur_defaut_3_tuple = (1,0,0) | 69 | DEFAUT["couleurs"]["cadretxt"] = "#000000" # noir |
70 | DEFAUT["couleurs"]["grille"] = "#7f7f7f" # gris | ||
71 | #couleur_defaut_1 = "#0000FF" # bleu | ||
72 | #couleur_defaut_2 = "#00FF00" # vert | ||
73 | #couleur_defaut_3 = "#FF0000" # rouge | ||
74 | CONFIG["couleurs"] = { | ||
75 | "courbe1" : (0,0,1), | ||
76 | "courbe2" : (0,1,0), | ||
77 | "courbe3" : (1,0,0), | ||
78 | "fond": (1,1,1), | ||
79 | "cadretxt": (0,0,0), | ||
80 | "grille": (0.5,0.5,0.5) | ||
81 | } | ||
82 | #couleur_defaut_1_tuple = (0,0,1) | ||
83 | #couleur_defaut_2_tuple = (0,1,0) | ||
84 | #couleur_defaut_3_tuple = (1,0,0) | ||
64 | 85 | ||
65 | # couleurs par défaut fond | 86 | # couleurs par défaut fond |
66 | couleur_defaut_fond = "#FFFFFF" | 87 | #couleur_defaut_fond = "#FFFFFF" |
67 | couleur_defaut_fond_tuple = (1,1,1) | 88 | #couleur_defaut_fond_tuple = (1,1,1) |
68 | couleur_defaut_cadretxt = "#000000" | 89 | #couleur_defaut_cadretxt = "#000000" |
69 | couleur_defaut_cadretxt_tuple = (0,0,0) | 90 | #couleur_defaut_cadretxt_tuple = (0,0,0) |
70 | couleur_defaut_grille = "#7f7f7f" | 91 | #couleur_defaut_grille = "#7f7f7f" |
71 | couleur_defaut_grille_tuple = (0.5,0.5,0.5) | 92 | #couleur_defaut_grille_tuple = (0.5,0.5,0.5) |
72 | 93 | ||
73 | #couleur_defaut_erreur = (0,0,0) # noir | 94 | #couleur_defaut_erreur = (0,0,0) # noir |
74 | 95 | ||
75 | 96 | ||
76 | # initialiser la config | 97 | # initialiser la config |
77 | def config_init(): | 98 | def config_init(): |
78 | return {"largeur": largeur_graphique, | 99 | c = DEFAUT.copy() |
79 | "hauteur": hauteur_graphique, | 100 | c.update({ |
80 | "nb_data":nombre_lignes_form, | ||
81 | "age_0": "0j", | 101 | "age_0": "0j", |
82 | "legende": "oui", | 102 | "legende": "oui", |
83 | "positionlegende": "hg", | 103 | "positionlegende": "hg", |
84 | "couleur1": couleur_defaut_1, | 104 | # "couleur1": couleur_defaut_1, |
85 | "couleur2": couleur_defaut_2, | 105 | # "couleur2": couleur_defaut_2, |
86 | "couleur3": couleur_defaut_3, | 106 | # "couleur3": couleur_defaut_3, |
87 | "couleur_fond": couleur_defaut_fond, | 107 | # "couleur_fond": couleur_defaut_fond, |
88 | "couleur_grille": couleur_defaut_grille, | 108 | # "couleur_grille": couleur_defaut_grille, |
89 | "couleur_cadretxt": couleur_defaut_cadretxt | 109 | # "couleur_cadretxt": couleur_defaut_cadretxt |
90 | } | 110 | }) |
111 | |||
112 | return c | ||
91 | 113 | ||
92 | 114 | ||
diff --git a/data_OMS/licence b/data_OMS/LICENSE index 1e96007..1e96007 100644 --- a/data_OMS/licence +++ b/data_OMS/LICENSE | |||
diff --git a/gestionOMS.py b/gestionOMS.py index 5b773d9..cc63432 100644 --- a/gestionOMS.py +++ b/gestionOMS.py | |||
@@ -46,9 +46,9 @@ def afficheecarttype(z): | |||
46 | 46 | ||
47 | def renvoie_liste_labels(conf,liste_data_choisie_p,liste_data_choisie_z,liste_err): | 47 | def renvoie_liste_labels(conf,liste_data_choisie_p,liste_data_choisie_z,liste_err): |
48 | """ fabrique les deux listes de labels OMS""" | 48 | """ fabrique les deux listes de labels OMS""" |
49 | #warning(str(liste_data_choisie_p),liste_err) | 49 | #warning(str(conf),liste_err) |
50 | liste_data_labels_p = [(nocol,affichepercentile(pc),degrade_choix(conf["couleur1"],conf["couleur2"],conf["couleur3"],pc)) for (nocol,pc) in liste_data_choisie_p] | 50 | liste_data_labels_p = [(nocol,affichepercentile(pc),degrade_choix(conf["couleurs"]["courbe1"],conf["couleurs"]["courbe2"],conf["couleurs"]["courbe3"],pc)) for (nocol,pc) in liste_data_choisie_p] |
51 | liste_data_labels_z = [(nocol,afficheecarttype(z),degrade_choix(conf["couleur1"],conf["couleur2"],conf["couleur3"],(z+3)/3*50) ) for (nocol,z) in liste_data_choisie_z] | 51 | liste_data_labels_z = [(nocol,afficheecarttype(z),degrade_choix(conf["couleurs"]["courbe1"],conf["couleurs"]["courbe2"],conf["couleurs"]["courbe3"],(z+3)/3*50) ) for (nocol,z) in liste_data_choisie_z] |
52 | return liste_data_labels_p,liste_data_labels_z | 52 | return liste_data_labels_p,liste_data_labels_z |
53 | 53 | ||
54 | #liste_data_labels= liste_data_labels_z | 54 | #liste_data_labels= liste_data_labels_z |
diff --git a/gestion_donnees.py b/gestion_donnees.py index caacaf0..12afd5a 100644 --- a/gestion_donnees.py +++ b/gestion_donnees.py | |||
@@ -7,6 +7,7 @@ from gestion_couleurs import * | |||
7 | import datetime | 7 | import datetime |
8 | import json | 8 | import json |
9 | import unidecode | 9 | import unidecode |
10 | import copy | ||
10 | 11 | ||
11 | 12 | ||
12 | ############ Fonctions de conversion | 13 | ############ Fonctions de conversion |
@@ -193,13 +194,13 @@ def gere_configuration(data,liste_err): | |||
193 | # dimensions du graphique | 194 | # dimensions du graphique |
194 | largeur = data.get("largeur","") | 195 | largeur = data.get("largeur","") |
195 | if largeur == "": | 196 | if largeur == "": |
196 | largeur = largeur_graphique | 197 | largeur = DEFAUT["largeur_graphique"] |
197 | else: | 198 | else: |
198 | try: | 199 | try: |
199 | largeur = int(largeur) | 200 | largeur = int(largeur) |
200 | except: | 201 | except: |
201 | warning("La largeur "+largeur+"est invalide !",liste_err) | 202 | warning("La largeur "+largeur+"est invalide !",liste_err) |
202 | largeur = largeur_graphique | 203 | largeur = DEFAUT["largeur_graphique"] |
203 | if largeur > largeur_graphique_max: | 204 | if largeur > largeur_graphique_max: |
204 | largeur = largeur_graphique_max | 205 | largeur = largeur_graphique_max |
205 | warning("Largeur trop grande !",liste_err) | 206 | warning("Largeur trop grande !",liste_err) |
@@ -210,13 +211,13 @@ def gere_configuration(data,liste_err): | |||
210 | 211 | ||
211 | hauteur = data.get("hauteur","") | 212 | hauteur = data.get("hauteur","") |
212 | if hauteur == "": | 213 | if hauteur == "": |
213 | hauteur = hauteur_graphique | 214 | hauteur = DEFAUT["hauteur_graphique"] |
214 | else: | 215 | else: |
215 | try: | 216 | try: |
216 | hauteur = int(hauteur) | 217 | hauteur = int(hauteur) |
217 | except: | 218 | except: |
218 | warning("La hauteur "+hauteur+"est invalide !",liste_err) | 219 | warning("La hauteur "+hauteur+"est invalide !",liste_err) |
219 | hauteur = hauteur_graphique | 220 | hauteur = DEFAUT["hauteur_graphique"] |
220 | if hauteur > hauteur_graphique_max: | 221 | if hauteur > hauteur_graphique_max: |
221 | hauteur = hauteur_graphique_max | 222 | hauteur = hauteur_graphique_max |
222 | warning("Hauteur trop grande !",liste_err) | 223 | warning("Hauteur trop grande !",liste_err) |
@@ -241,25 +242,33 @@ def gere_configuration(data,liste_err): | |||
241 | configuration["positionlegende"] = positionlegende | 242 | configuration["positionlegende"] = positionlegende |
242 | 243 | ||
243 | #warning("bla"+data["couleur1"],liste_err) | 244 | #warning("bla"+data["couleur1"],liste_err) |
244 | coul1 = rgb_vers_tuple(data.get("couleur1",""),couleur_defaut_1_tuple,liste_err) | 245 | # coul1 = rgb_vers_tuple(data.get("couleur1",""),couleur_defaut_1_tuple,liste_err) |
245 | coul2 = rgb_vers_tuple(data.get("couleur2",""),couleur_defaut_2_tuple,liste_err) | 246 | # coul2 = rgb_vers_tuple(data.get("couleur2",""),couleur_defaut_2_tuple,liste_err) |
246 | coul3 = rgb_vers_tuple(data.get("couleur3",""),couleur_defaut_3_tuple,liste_err) | 247 | # coul3 = rgb_vers_tuple(data.get("couleur3",""),couleur_defaut_3_tuple,liste_err) |
247 | #warning("bla2"+str(coul1),liste_err) | 248 | # #warning("bla2"+str(coul1),liste_err) |
248 | configuration["couleur1"] = coul1 | 249 | # configuration["couleur1"] = coul1 |
249 | configuration["couleur2"] = coul2 | 250 | # configuration["couleur2"] = coul2 |
250 | configuration["couleur3"] = coul3 | 251 | # configuration["couleur3"] = coul3 |
251 | 252 | ||
252 | # couleur de fond | 253 | configuration["couleurs"] = {} |
253 | coul_fond = rgb_vers_tuple(data.get("couleur_fond",""),couleur_defaut_fond_tuple,liste_err) | 254 | # gérer les couleurs |
254 | configuration["couleur_fond"] = coul_fond | 255 | #warning("data : "+str(data),liste_err) |
255 | 256 | for clecouleur in DEFAUT["couleurs"]: | |
256 | # couleur d'axes et de texte | 257 | coul = rgb_vers_tuple(data.get("couleur_"+clecouleur,""),CONFIG["couleurs"][clecouleur],liste_err) |
257 | coul_cadretxt = rgb_vers_tuple(data.get("couleur_cadretxt",""),couleur_defaut_cadretxt_tuple,liste_err) | 258 | configuration["couleurs"][clecouleur] = coul |
258 | configuration["couleur_cadretxt"] = coul_cadretxt | ||
259 | 259 | ||
260 | # couleur de la grille | 260 | #warning("config : "+str(configuration["couleurs"]),liste_err) |
261 | coul_grille = rgb_vers_tuple(data.get("couleur_grille",""),couleur_defaut_grille_tuple,liste_err) | 261 | # couleur de fond |
262 | configuration["couleur_grille"] = coul_grille | 262 | # coul_fond = rgb_vers_tuple(data.get("couleur_fond",""),couleur_defaut_fond_tuple,liste_err) |
263 | # configuration["couleur_fond"] = coul_fond | ||
264 | # | ||
265 | # # couleur d'axes et de texte | ||
266 | # coul_cadretxt = rgb_vers_tuple(data.get("couleur_cadretxt",""),couleur_defaut_cadretxt_tuple,liste_err) | ||
267 | # configuration["couleur_cadretxt"] = coul_cadretxt | ||
268 | # | ||
269 | # # couleur de la grille | ||
270 | # coul_grille = rgb_vers_tuple(data.get("couleur_grille",""),couleur_defaut_grille_tuple,liste_err) | ||
271 | # configuration["couleur_grille"] = coul_grille | ||
263 | #warning(str(configuration["couleur1"]),liste_err) | 272 | #warning(str(configuration["couleur1"]),liste_err) |
264 | 273 | ||
265 | return configuration | 274 | return configuration |
@@ -306,7 +315,7 @@ def gere_donneespoids(data,naissance,liste_err): | |||
306 | 315 | ||
307 | def donnees_vers_json(l_jours,l_poids,config): | 316 | def donnees_vers_json(l_jours,l_poids,config): |
308 | """ retourne le json à renvoyer""" | 317 | """ retourne le json à renvoyer""" |
309 | gros_dico = config.copy() | 318 | gros_dico = copy.deepcopy(config) |
310 | l_jours2 = [convertit_age_vers_texte(d) for d in l_jours] | 319 | l_jours2 = [convertit_age_vers_texte(d) for d in l_jours] |
311 | gros_dico["data_j"] = l_jours2 | 320 | gros_dico["data_j"] = l_jours2 |
312 | gros_dico["data_p"] = l_poids | 321 | gros_dico["data_p"] = l_poids |
@@ -316,8 +325,10 @@ def donnees_vers_json(l_jours,l_poids,config): | |||
316 | # gérer l'age maxi | 325 | # gérer l'age maxi |
317 | gros_dico["maxi"] = convertit_age_vers_texte(gros_dico["maxi"]) | 326 | gros_dico["maxi"] = convertit_age_vers_texte(gros_dico["maxi"]) |
318 | # gérer les couleurs | 327 | # gérer les couleurs |
319 | for cle in ["couleur1", "couleur2", "couleur3", "couleur_fond","couleur_grille","couleur_cadretxt"]: | 328 | # for cle in ["couleur1", "couleur2", "couleur3", "couleur_fond","couleur_grille","couleur_cadretxt"]: |
320 | gros_dico[cle] = tuple_vers_rgb(gros_dico[cle]) | 329 | # gros_dico[cle] = tuple_vers_rgb(gros_dico[cle]) |
330 | for clecouleur in DEFAUT["couleurs"]: | ||
331 | gros_dico["couleurs"][clecouleur] = tuple_vers_rgb(gros_dico["couleurs"][clecouleur]) | ||
321 | 332 | ||
322 | 333 | ||
323 | 334 | ||
@@ -341,7 +352,7 @@ def fichier_json_vers_configdonnees(fichier,liste_err): | |||
341 | valform["age_"+str(i)] = l_jours[i] | 352 | valform["age_"+str(i)] = l_jours[i] |
342 | valform["poids_"+str(i)] = l_poids[i] | 353 | valform["poids_"+str(i)] = l_poids[i] |
343 | 354 | ||
344 | valform["nb_data"] = max(long +2,nombre_lignes_form) | 355 | valform["nb_data"] = max(long +2,DEFAUT["nb_data"]) |
345 | 356 | ||
346 | return valform | 357 | return valform |
347 | 358 | ||
diff --git a/licence b/licence deleted file mode 100644 index f9241d4..0000000 --- a/licence +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | Copyright (c) 2020 Denise Maurice | ||
2 | |||
3 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
4 | of this software and associated documentation files (the "Software"), to deal | ||
5 | in the Software without restriction, including without limitation the rights | ||
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
7 | copies of the Software, and to permit persons to whom the Software is | ||
8 | furnished to do so, subject to the following conditions: | ||
9 | |||
10 | The above copyright notice and this permission notice shall be included in all | ||
11 | copies or substantial portions of the Software. | ||
12 | |||
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
19 | SOFTWARE. | ||
20 | |||
diff --git a/templates/apropos.html b/templates/apropos.html index 9f2b076..b3c5199 100644 --- a/templates/apropos.html +++ b/templates/apropos.html | |||
@@ -5,6 +5,6 @@ | |||
5 | 5 | ||
6 | <p>Ces données, ainsi que ce site web, sont sous licence <a href="https://creativecommons.org/licenses/by-nc-sa/3.0/igo/">CC BY-NC-SA 3.0 IGO</a></p> | 6 | <p>Ces données, ainsi que ce site web, sont sous licence <a href="https://creativecommons.org/licenses/by-nc-sa/3.0/igo/">CC BY-NC-SA 3.0 IGO</a></p> |
7 | 7 | ||
8 | <p>Le code source (<a href="https://fr.wikipedia.org/wiki/Licence_MIT">licence MIT</a> sauf en ce qui concerne les données) est disponible là.</p> | 8 | <p>Le code source (<a href="https://fr.wikipedia.org/wiki/Licence_MIT">licence MIT (licence X11)</a> sauf en ce qui concerne les données de l'OMS) est disponible <href="https://git.immae.eu/?p=perso/Denise/oms.git">là</href>.</p> |
9 | 9 | ||
10 | {% endblock %} | 10 | {% endblock %} |
diff --git a/templates/base.html b/templates/base.html index 694266c..8b96c17 100644 --- a/templates/base.html +++ b/templates/base.html | |||
@@ -32,9 +32,11 @@ | |||
32 | <hr> | 32 | <hr> |
33 | 33 | ||
34 | <nav><a href="/">Accueil et saisie des données</a> | | 34 | <nav><a href="/">Accueil et saisie des données</a> | |
35 | <a href="/apropos">À propos</a> | | ||
36 | <a href="/faq">FAQ</a> | | 35 | <a href="/faq">FAQ</a> | |
36 | <a href="/contact">Contact</a> | | ||
37 | <a href="/apropos">À propos</a> | | ||
37 | <a href="/changelog">Changelog</a> | 38 | <a href="/changelog">Changelog</a> |
39 | |||
38 | </nav> | 40 | </nav> |
39 | 41 | ||
40 | </body> | 42 | </body> |
diff --git a/templates/contact.html b/templates/contact.html new file mode 100644 index 0000000..c4a54e8 --- /dev/null +++ b/templates/contact.html | |||
@@ -0,0 +1,14 @@ | |||
1 | {% extends "base.html" %} | ||
2 | {% block contenu %} | ||
3 | <p>Si vous avez une question, un commentaire, une idée, vous pouvez me contacter à l'adresse suivante : </p> | ||
4 | <p>Vous pouvez également me retrouver sur le <a href="https://forum.lllfrance.org/">forum LLL</a>, sous le nom de Sekhmet.</p> | ||
5 | |||
6 | <p><strong>Merci</strong> à celles et ceux qui m'ont aidée à mettre en place cet outil : | ||
7 | <ul> | ||
8 | <li>immae pour l'hébergement et l'aide technique,</li> | ||
9 | <li>cerise pour le coup de peinture sur la façade,</li> | ||
10 | <li>arcanmster pour le côté "je tape partout pour voir si ça casse",</li> | ||
11 | <li>les bêta-testeuses enthousiastes du forum LLL, entre autres MmeMarguerite, Maman-chat, bloom et Nerialka</li> | ||
12 | </ul></p> | ||
13 | |||
14 | {% endblock %} | ||
diff --git a/templates/index.html b/templates/index.html index 2b1b82b..3404f22 100644 --- a/templates/index.html +++ b/templates/index.html | |||
@@ -29,8 +29,8 @@ | |||
29 | <h3>Informations sur l'enfant</h3> | 29 | <h3>Informations sur l'enfant</h3> |
30 | <ul> | 30 | <ul> |
31 | <li><label>Nom de l'enfant :</label> <input type="text" name="nom" value="{{ valform.nom }}"></li> | 31 | <li><label>Nom de l'enfant :</label> <input type="text" name="nom" value="{{ valform.nom }}"></li> |
32 | <li><label>Sexe :</label> <input type="radio" name="sexe" value="F" {%if valform.sexe == "F" %}checked{% endif %}> féminin | 32 | <li><label>Sexe :</label> <label><input type="radio" name="sexe" value="F" {%if valform.sexe == "F" %}checked{% endif %}> féminin </label> |
33 | | <input type="radio" name="sexe" value="M" {%if valform.sexe == "M"%} checked {% endif %}> masculin | <input type="radio" name="sexe" value="N" {%if valform.sexe == "N"%} checked {% endif %}> neutre (expérimental)</li> | 33 | | <label><input type="radio" name="sexe" value="M" {%if valform.sexe == "M"%} checked {% endif %}> masculin</label> | <label><input type="radio" name="sexe" value="N" {%if valform.sexe == "N"%} checked {% endif %}> neutre (expérimental)</label></li> |
34 | <li><label>Date de naissance : </label> <input type="date" name="naissance" value="{{ valform.naissance }}"></li> | 34 | <li><label>Date de naissance : </label> <input type="date" name="naissance" value="{{ valform.naissance }}"></li> |
35 | </ul> | 35 | </ul> |
36 | 36 | ||
@@ -65,29 +65,29 @@ | |||
65 | <div class="bouton" onclick="affiche_cache('pref_graphique',this)">Afficher</div> | 65 | <div class="bouton" onclick="affiche_cache('pref_graphique',this)">Afficher</div> |
66 | 66 | ||
67 | <ul id="pref_graphique"> | 67 | <ul id="pref_graphique"> |
68 | <li><label>Type de courbe :</label> <input type="radio" name="typecourbe" value="P" | 68 | <li><label>Type de courbe :</label> <label><input type="radio" name="typecourbe" value="P" |
69 | {% if valform.typecourbe == "P" or valform.typecourbe is not defined %} checked {% endif %}> Percentiles | <input type="radio" name="typecourbe" value="Z" | 69 | {% if valform.typecourbe == "P" or valform.typecourbe is not defined %} checked {% endif %}> Percentiles</label> | <label><input type="radio" name="typecourbe" value="Z" |
70 | {% if valform.typecourbe == "Z" %} checked {% endif %}> Moyenne et écarts-type</li> | 70 | {% if valform.typecourbe == "Z" %} checked {% endif %}> Moyenne et écarts-type</label></li> |
71 | <li><label>Grille : </label><input type="checkbox" name="grille" {%if valform.grille == "oui" or valform.grille is not defined %} checked {% endif %}></li> | 71 | <li><label>Grille : <input type="checkbox" name="grille" {%if valform.grille == "oui" or valform.grille is not defined %} checked {% endif %}></label></li> |
72 | <li><label>Unité : </label> | 72 | <li><label>Unité : |
73 | <select name="unite"> | 73 | <select name="unite"> |
74 | <option value="" {% if valform.typecourbe == "" or valform is not defined %} selected {%endif %}>Par défaut</option> | 74 | <option value="" {% if valform.typecourbe == "" or valform is not defined %} selected {%endif %}>Par défaut</option> |
75 | {% for unite in ['jours','semaines','mois','années'] %} | 75 | {% for unite in ['jours','semaines','mois','années'] %} |
76 | <option value="{{ unite }}"{% if valform.unite == unite %} selected {% endif %} >{{ unite }}</option> | 76 | <option value="{{ unite }}"{% if valform.unite == unite %} selected {% endif %} >{{ unite }}</option> |
77 | {% endfor %} | 77 | {% endfor %} |
78 | </select></li> | 78 | </select></label></li> |
79 | <li><label>valeur maximum du graphique (facultatif, syntaxe similaire à l'âge) </label><input type="text" name="maxi" value="{{ valform.maxi }}"></li> | 79 | <li><label>valeur maximum du graphique (facultatif, syntaxe similaire à l'âge) </label><input type="text" name="maxi" value="{{ valform.maxi }}"></li> |
80 | <li>Dimensions du graphique : <label>largeur : </label><input type="text" name="largeur" value="{{ valform.largeur }}"> | 80 | <li>Dimensions du graphique : <label>largeur : </label><input type="text" name="largeur" value="{{ valform.largeur }}"> |
81 | <label>hauteur : </label><input type="text" name="hauteur" value="{{ valform.hauteur }}"></li> | 81 | <label>hauteur : </label><input type="text" name="hauteur" value="{{ valform.hauteur }}"></li> |
82 | <li><label>Légende : </label><input type="checkbox" name="legende" {% if valform.legende == 'oui' %} checked{% endif %}> | 82 | <li><label>Légende : <input type="checkbox" name="legende" {% if valform.legende == 'oui' %} checked{% endif %}> </label> |
83 | Position : <select name="positionlegende"> | 83 | <label>Position : <select name="positionlegende"> |
84 | {%for (pos,posnom) in [('upper left','Haut gauche'),('upper right','Haut Droite'),('lower left','Bas gauche'),('lower right','Bas droite')] %} | 84 | {%for (pos,posnom) in [('upper left','Haut gauche'),('upper right','Haut Droite'),('lower left','Bas gauche'),('lower right','Bas droite')] %} |
85 | <option value="{{ pos }}">{{ posnom }}</option> | 85 | <option value="{{ pos }}">{{ posnom }}</option> |
86 | {% endfor %} | 86 | {% endfor %} |
87 | </select> | 87 | </select></label> |
88 | </li> | 88 | </li> |
89 | <li>Couleur courbe du bas <input type="color" name="couleur1" value="{{ valform.couleur1 }}"> | Couleur courbe du milieu <input type="color" name="couleur2" value="{{ valform.couleur2 }}"> | Couleur courbe du haut <input type="color" name="couleur3" value="{{ valform.couleur3 }}"> </li> | 89 | <li>Couleur courbe du bas <input type="color" name="couleur_courbe1" value="{{ valform.couleurs.courbe1 }}"> | Couleur courbe du milieu <input type="color" name="couleur_courbe2" value="{{ valform.couleurs.courbe2 }}"> | Couleur courbe du haut <input type="color" name="couleur_courbe3" value="{{ valform.couleurs.courbe3 }}"> </li> |
90 | <li>Couleur du fond <input type="color" name="couleur_fond" value="{{ valform.couleur_fond }}"> | Couleur de la grille <input type="color" name="couleur_grille" value="{{ valform.couleur_grille }}"> | Couleur des axes, texte et courbe <input type="color" name="couleur_cadretxt" value="{{ valform.couleur_cadretxt }}"></li> | 90 | <li>Couleur du fond <input type="color" name="couleur_fond" value="{{ valform.couleurs.fond }}"> | Couleur de la grille <input type="color" name="couleur_grille" value="{{ valform.couleurs.grille }}"> | Couleur des axes, texte et courbe <input type="color" name="couleur_cadretxt" value="{{ valform.couleurs.cadretxt }}"></li> |
91 | </ul> | 91 | </ul> |
92 | 92 | ||
93 | 93 | ||
diff --git a/trace_courbe.py b/trace_courbe.py index c86dbd9..fccb657 100644 --- a/trace_courbe.py +++ b/trace_courbe.py | |||
@@ -7,7 +7,7 @@ from gestion_unites import * | |||
7 | import matplotlib.pyplot as plt | 7 | import matplotlib.pyplot as plt |
8 | 8 | ||
9 | def cree_figure(conf,l_jours,l_poids,liste_err): | 9 | def cree_figure(conf,l_jours,l_poids,liste_err): |
10 | #warning("debut de cree_figure",liste_err) | 10 | #warning("debut de cree_figure"+str(conf),liste_err) |
11 | try: | 11 | try: |
12 | liste_data_labels_p,liste_data_labels_z = renvoie_liste_labels(conf,liste_data_choisie_p,liste_data_choisie_z,liste_err) | 12 | liste_data_labels_p,liste_data_labels_z = renvoie_liste_labels(conf,liste_data_choisie_p,liste_data_choisie_z,liste_err) |
13 | except: | 13 | except: |
@@ -86,13 +86,13 @@ def cree_figure(conf,l_jours,l_poids,liste_err): | |||
86 | 86 | ||
87 | 87 | ||
88 | #### La figure | 88 | #### La figure |
89 | fig = plt.figure(num=None, figsize=(conf["largeur"], conf["hauteur"]), dpi=100, facecolor=conf["couleur_fond"]) | 89 | fig = plt.figure(num=None, figsize=(conf["largeur"], conf["hauteur"]), dpi=100, facecolor=conf["couleurs"]["fond"]) |
90 | plt.rcParams['axes.facecolor'] = conf["couleur_fond"] | 90 | plt.rcParams['axes.facecolor'] = conf["couleurs"]["fond"] |
91 | plt.rcParams['axes.edgecolor']= conf["couleur_cadretxt"] | 91 | plt.rcParams['axes.edgecolor']= conf["couleurs"]["cadretxt"] |
92 | plt.rcParams['xtick.color'] = conf["couleur_cadretxt"] | 92 | plt.rcParams['xtick.color'] = conf["couleurs"]["cadretxt"] |
93 | plt.rcParams['ytick.color'] = conf["couleur_cadretxt"] | 93 | plt.rcParams['ytick.color'] = conf["couleurs"]["cadretxt"] |
94 | plt.rcParams['grid.color'] = conf["couleur_grille"] | 94 | plt.rcParams['grid.color'] = conf["couleurs"]["grille"] |
95 | plt.rcParams['legend.edgecolor'] = conf["couleur_grille"] | 95 | plt.rcParams['legend.edgecolor'] = conf["couleurs"]["grille"] |
96 | 96 | ||
97 | #warning("bla"+str(liste_data_labels),liste_err) | 97 | #warning("bla"+str(liste_data_labels),liste_err) |
98 | for (i,label,couleur) in liste_data_labels: | 98 | for (i,label,couleur) in liste_data_labels: |
@@ -121,14 +121,14 @@ def cree_figure(conf,l_jours,l_poids,liste_err): | |||
121 | if l_jours != []: | 121 | if l_jours != []: |
122 | plt.plot(l_jours_conv,l_poids,label=conf["nom"],color=conf["couleur_cadretxt"],marker='o') | 122 | plt.plot(l_jours_conv,l_poids,label=conf["nom"],color=conf["couleur_cadretxt"],marker='o') |
123 | 123 | ||
124 | plt.xlabel("Âge en "+conf["unite"],color=conf["couleur_cadretxt"]) | 124 | plt.xlabel("Âge en "+conf["unite"],color=conf["couleurs"]["cadretxt"]) |
125 | plt.ylabel("Poids en kg",color=conf["couleur_cadretxt"]) | 125 | plt.ylabel("Poids en kg",color=conf["couleurs"]["cadretxt"]) |
126 | plt.title(titre,color=conf["couleur_cadretxt"]) | 126 | plt.title(titre,color=conf["couleurs"]["cadretxt"]) |
127 | plt.axis([0,age_maxi,poids_min,poids_max]) | 127 | plt.axis([0,age_maxi,poids_min,poids_max]) |
128 | 128 | ||
129 | if conf['legende']=="oui": | 129 | if conf['legende']=="oui": |
130 | legende = plt.legend(loc=conf['positionlegende']) | 130 | legende = plt.legend(loc=conf['positionlegende']) |
131 | plt.setp(legende.get_texts(), color=conf["couleur_cadretxt"]) | 131 | plt.setp(legende.get_texts(), color=conf["couleurs"]["cadretxt"]) |
132 | plt.grid(conf["grille"]=="oui") | 132 | plt.grid(conf["grille"]=="oui") |
133 | 133 | ||
134 | fig.tight_layout() | 134 | fig.tight_layout() |