From e4ec2d3d510d6138430c48d5dc699c10ff8dc463 Mon Sep 17 00:00:00 2001 From: Denise sur Lya Date: Thu, 22 Jul 2021 14:02:16 +0200 Subject: =?UTF-8?q?petites=20am=C3=A9liorations=20graphiques,=20ic=C3=B4ne?= =?UTF-8?q?,=20etc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 35 +++++++++-------------------------- configuration.py | 4 +++- data/changelog_data.txt | 37 +++++++++++++++++-------------------- gestion_donnees.py | 44 +++++++++++++++++++++++++++++++++++++++++--- static/favicon.ico | Bin 0 -> 1246 bytes static/outilspage.js | 16 ++++++++++++++-- static/requetes.js | 2 +- static/style.css | 11 +++++++++-- templates/base.html | 3 ++- templates/changelog.html | 25 ++++++++++++++++++------- templates/index.html | 15 +++++++++++---- trace_courbe.py | 6 +----- 12 files changed, 126 insertions(+), 72 deletions(-) create mode 100644 static/favicon.ico diff --git a/app.py b/app.py index 5875435..c11eb8b 100644 --- a/app.py +++ b/app.py @@ -8,9 +8,8 @@ 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, warning +from gestion_erreurs import initialise_erreurs, debug, niveau_debug import gestion_donnees as donnees -import gestion_couleurs as couleurs from trace_courbe import cree_figure import faq as f @@ -32,12 +31,14 @@ def index(): beta=initialise_mode_beta() liste_err = initialise_erreurs() val_form = config_init() + ## Si on a chargé un fichier de données if flask.request.method=="POST": if 'fichier_donnees' in flask.request.files: ## charger les données dans le formulaire fichier = flask.request.files['fichier_donnees'] chaine = fichier.read() val_form2 = donnees.fichier_json_vers_configdonnees(chaine,liste_err) + # Si jamais le formulaire est vide, c'est qu'il y a eu une erreur ! 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) @@ -55,35 +56,17 @@ def apropos(): def courbe_image(ext): liste_err = initialise_erreurs() data = flask.request.form - enfants_add = [] # Enfants additionnels - i=2 - while "couleur_donnees_"+str(i) in data: # Tant qu'il y a des données de ce type - if 'fichier_donnees_'+str(i) in flask.request.files: # Un enfant à ajouter - fichier = flask.request.files["fichier_donnees_"+str(i)] - chaine = fichier.read() # On récupère la chaîne - if len(chaine)>=5: # Si elle a une longueur à peu près raisonnable - debug("Un fichier de données additionnel trouvé", liste_err) - formulaire_2 = donnees.fichier_json_vers_configdonnees(chaine, liste_err) - if formulaire_2 =={}: - warning("Le fichier de données additionnel est vide ou mal formaté", liste_err) - else: - debug("Form 2 : "+str(formulaire_2), liste_err) - # Récupérer sous forme python - conf2, ljours2, listes_donnees2 = donnees.web_vers_python(formulaire_2,liste_err, court=True) - debug("Form 2 données travaillées "+str(ljours2)+str(listes_donnees2), liste_err) - # Le symbole et la couleur - symb2 = donnees.gere_symbole(data.get("symbole_donnees_"+str(i))) - coul2 = couleurs.rgb_vers_tuple(data.get("couleur_donnees_"+str(i),""),CONFIG["couleurs"]["cadretxt"],liste_err) - enfant2 = donnees.eclate_donnees_additionnelles(conf2, ljours2, listes_donnees2, symb2, coul2) - enfants_add.append(enfant2) - i+=1 # 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) + # Gérer les enfants additionnels + enfants_add = donnees.gere_enfants_additionnels(data, flask.request.files, liste_err) + debug("Enfants additionnels récupérés : "+str(enfants_add), liste_err) + + # Récupérer le texte à exporter 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 @@ -156,7 +139,7 @@ def changelog(): table_version = f.lire_fichier_csv_simple(f.fichier_changelog) - return flask.render_template("changelog.html",table = table_version,err=[], beta=beta) + return flask.render_template("changelog.html",table = table_version, nblignes=CONFIG["nb_lignes_changelog"], err=[], beta=beta) if __name__ == "__main__": print("Mode debug maison : "+str(niveau_debug)) diff --git a/configuration.py b/configuration.py index 0fc8f20..b22c6e3 100644 --- a/configuration.py +++ b/configuration.py @@ -5,7 +5,9 @@ CONFIG = {} ### La version de l'app -CONFIG["version"] = 2.4 +CONFIG["version"] = 2.5 +# Nombre de versions anciennes dans le changelog +CONFIG["nb_lignes_changelog"] = 4 # les unités acceptées CONFIG["liste_unites"] = ["jours", "semaines", "mois", "années"] diff --git a/data/changelog_data.txt b/data/changelog_data.txt index cbe87ef..ba601e3 100644 --- a/data/changelog_data.txt +++ b/data/changelog_data.txt @@ -1,6 +1,8 @@ -"Version 2.45","29/06/2021","

Plus de courbes ! Et d'autres choses... +"Version 2.5","29/06/2021","

Plus de courbes ! Et d'autres choses...

-

" +" -"Version 2.31","28/04/2021","

Les calculs de données sont améliorés : +"Version 2.31","28/04/2021","

Les calculs de données sont améliorés :

-En plus, on peut décider de marquer sur le graphique, ou pas, le point qu'on cherche. -

" +

En plus, on peut décider de marquer sur le graphique, ou pas, le point qu'on cherche.

" "Version 2.3001","13/03/2021","

Petit changement : on peut maintenant mettre le poids en grammes. Si le poids saisi est supérieur à 500 il sera automatiquement converti.

" @@ -36,36 +36,33 @@ En plus, on peut décider de marquer sur le graphique, ou pas, le point qu'on ch "Version 2.2001","13/11/2020","

Amélioration de l'affichage pour les prémas (masqués par défaut). Précision dans le texte + FAQ.

" -"Version 2.2","12/11/2020","

Ajout de la possibilité d'avoir la courbe ajustée pour les prématurés. Attention c'est encore en bêta ! Le principe c'est simplement les courbes OMS décalées de la durée de prématurité, ce qui convient plus ou moins bien aux enfants nés prématurés une fois qu'ils ont atteint l'âge du terme en âge corrigé. +"Version 2.2","12/11/2020","

Ajout de la possibilité d'avoir la courbe ajustée pour les prématurés. Attention c'est encore en bêta ! Le principe c'est simplement les courbes OMS décalées de la durée de prématurité, ce qui convient plus ou moins bien aux enfants nés prématurés une fois qu'ils ont atteint l'âge du terme en âge corrigé.

-Tout retour sur cette fonctionnalité est le bienvenu ! -

" +Tout retour sur cette fonctionnalité est le bienvenu !" -"Version 2.1","28/07/2020","

Petites améliorations : +"Version 2.1","28/07/2020","

Petites améliorations :

" +" -"Version 2.0","28/07/2020","

Nouveauté : courbes de taille disponible ! +"Version 2.0","28/07/2020","

Nouveauté : courbes de taille disponible !

-

" +" -"Version 1.1","26/06/2020","

Petites améliorations : +"Version 1.1","26/06/2020","

Petites améliorations :

-

" +" "Version 1.0001","24/06/2020","

Petit bug corrigé (lors du choix de l'âge maxi sur la courbe)

" diff --git a/gestion_donnees.py b/gestion_donnees.py index 8e19d8b..c24192e 100644 --- a/gestion_donnees.py +++ b/gestion_donnees.py @@ -428,6 +428,44 @@ def gere_donnees(data,naissance,typedonnee,liste_err): return (l_jours,l_donnee) +# web vers python : enfants additionnels +def gere_enfants_additionnels(data, files, liste_err): + """ data est le dictionnaire de requête. + files est le dictionnaire des fichiers (flask.request.files). + Renvoie les enfants additionnels sous forme de liste de dictionnaires : + {typed: (conf, lj, ldonnees)} + Dans conf y'a les infos qu'il faut pour tracer la courbe additionnelle voulue. + """ + + enfants_add = [] # Enfants additionnels + # Les enfants additionnels commencent à 2 (puis 3, 4, etc) + i=2 + while "couleur_donnees_"+str(i) in data: # Tant qu'il y a des données de ce type + if 'fichier_donnees_'+str(i) in files: # Un enfant à ajouter + fichier = files["fichier_donnees_"+str(i)] + chaine = fichier.read() # On récupère la chaîne + if len(chaine)>=5: # Si elle a une longueur à peu près raisonnable + debug("Un fichier de données additionnel trouvé", liste_err) + formulaire_2 = fichier_json_vers_configdonnees(chaine, liste_err) + if formulaire_2 =={}: + warning("Le fichier de données additionnel est vide ou mal formaté", liste_err) + else: + debug("Form 2 : "+str(formulaire_2), liste_err) + # Récupérer sous forme python + conf2, ljours2, listes_donnees2 = web_vers_python(formulaire_2,liste_err, court=True) + debug("Form 2 données travaillées "+str(ljours2)+str(listes_donnees2), liste_err) + # Le symbole et la couleur + symb2 = gere_symbole(data.get("symbole_donnees_"+str(i))) + coul2 = rgb_vers_tuple(data.get("couleur_donnees_"+str(i),""),CONFIG["couleurs"]["cadretxt"],liste_err) + enfant2 = eclate_donnees_additionnelles(conf2, ljours2, listes_donnees2, symb2, coul2) + enfants_add.append(enfant2) + i+=1 + + return enfants_add + + + + # python vers Json #### export vers json @@ -559,9 +597,9 @@ def eclate_donnees_additionnelles(conf, ljours, ldonnees, symb, couleur): """ conf est la config (on ne garde que le nom) pour un enfant additionnel, ljours et ldonnees les dictionnaires de listes contenant les données. symb est le symbole choisi pour cette courbe additionnelle (déjà vérifié) - On fabrique un joli dictionnaire typed -> (conf lj, ldonnee) avec le nom de l'enfant, + On fabrique un joli dictionnaire typed -> (conf, lj, ldonnee) avec le nom de l'enfant, et les données pour chaque typed""" - print("test conf avant "+str(ldonnees)+str(ljours)) + #print("test conf avant "+str(ldonnees)+str(ljours)) retour = {} conf["symbole"] = symb # On ajoute le symbole additionnel @@ -569,5 +607,5 @@ def eclate_donnees_additionnelles(conf, ljours, ldonnees, symb, couleur): for typed in CONFIG["liste_typedonnees"]: retour[typed] = (conf, ljours[typed], ldonnees[typed]) - print("test "+str(retour)) + #print("test "+str(retour)) return retour \ No newline at end of file diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000..1392469 Binary files /dev/null and b/static/favicon.ico differ diff --git a/static/outilspage.js b/static/outilspage.js index 72a9b91..dac70bf 100644 --- a/static/outilspage.js +++ b/static/outilspage.js @@ -44,11 +44,23 @@ function ajoutelignes() } -// Affichage de la textarea "export" +// Affichage de la section "export" function affiche_export() { document.getElementById("export").style.display = "block" ; - +} +// Copier vers le presse-papiers +function copietexte() +{ + var elt = document.getElementById("export_texte"); + + /* Select the text field */ + elt.select(); + elt.setSelectionRange(0, 99999); /* For mobile devices */ + + /* Copy the text inside the text field */ + document.execCommand("copy"); + } function affiche_cache(id,elemcourant) diff --git a/static/requetes.js b/static/requetes.js index 5644469..ba2a81e 100644 --- a/static/requetes.js +++ b/static/requetes.js @@ -23,7 +23,7 @@ function appelle_image() var calculextra = this.response.calculextra ; // on affiche l'export des données - document.getElementById('export').innerHTML = texte; + document.getElementById('export_texte').innerHTML = texte; document.getElementById('sectionexport').style.display = "block"; diff --git a/static/style.css b/static/style.css index 95cd55e..4b82077 100644 --- a/static/style.css +++ b/static/style.css @@ -37,12 +37,14 @@ img#courbe { display: none; } -#export { +#export_texte { width: 25em; height: 20em; - display:none; max-width: 100% } +#export { + display: none; +} #courbe_warnings { display: none; @@ -125,3 +127,8 @@ nav { .data { width:7em } + +/* Page changelog */ +#suite_changelog { + display: none; +} diff --git a/templates/base.html b/templates/base.html index b84df6f..58e094d 100644 --- a/templates/base.html +++ b/templates/base.html @@ -4,7 +4,8 @@ Courbes de croissance OMS de l'enfant - + + diff --git a/templates/changelog.html b/templates/changelog.html index 7ba96cd..ed47f99 100644 --- a/templates/changelog.html +++ b/templates/changelog.html @@ -1,17 +1,28 @@ {% extends "base.html" %} {% block contenu %} +

Suivi des versions

{% for ligne in table %} -
-

{{ ligne[0] }}

-
Le {{ ligne[1] }}
+
+

{{ ligne[0] }}

+
Le {{ ligne[1] }}
-
-{{ ligne[2]|safe }} -
+
+ {{ ligne[2]|safe }} +
+ +
+ {% if loop.index == nblignes and table | length > nblignes %} +
+

Afficher le log des versions plus anciennes.

+
+ {% endif %} + {% endfor %} - +{% if table |length > nblignes %} +
+{% endif %} diff --git a/templates/index.html b/templates/index.html index 0ec6e9b..f25df0e 100644 --- a/templates/index.html +++ b/templates/index.html @@ -173,14 +173,17 @@ ... et le voir sur le graphique. -

Les résultats de calculs seront affichés en-dessous des courbes.

+

Les résultats de calculs seront affichés en-dessous des courbes. Ils ne seront pas sauvegardés.

+

Courbes multiples

Afficher
-

Si vous souhaitez tracer sur le même graphique les courbes de différents enfants, c'est ici. Il faut importer le fichier de données additionnel de l'autre enfant (ou des autres enfants). Seul le nom de l'enfant et ses données seront utilisés, les autres paramètres (courbe de référence suivant le sexe, maximum du graphique, ...) seront ceux de l'enfant « principal ».

+

Si vous souhaitez tracer sur le même graphique les courbes de différents enfants, c'est ici.

+

Il faut importer le fichier de données additionnel de l'autre enfant (ou des autres enfants). Seul le nom de l'enfant et ses données seront utilisés, les autres paramètres (courbe de référence suivant le sexe, maximum du graphique, ...) seront ceux de l'enfant « principal ».

+

Remarque : lors de l'export, seul l'enfant « principal » est sauvegardé.

diff --git a/trace_courbe.py b/trace_courbe.py index 39ade0e..c39f265 100644 --- a/trace_courbe.py +++ b/trace_courbe.py @@ -176,7 +176,7 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_extracalculs, liste_err, e lj_conv = u.convertit_tableau(lj,unite,liste_err) debug("Tracé de la courbe additionnelle de "+conf_add["nom"]+" config : "+str(conf_add), liste_err) ax.plot(lj_conv, ld, label=conf_add["nom"], color=conf_add["couleurcourbe"],marker=conf_add["symbole"]) - print("bla") + if conf["sexe"] != conf_add["sexe"]: warning("Attention, tous les enfants n'ont pas le même sexe. La courbe de référence est celle de "+conf["nom"]+" et ne sera pas forcément pertinente pour les autres. Vous pouvez éventuellement essayer la courbe neutre. Remarque : cette alerte s'affichera quand même.", liste_err) @@ -245,10 +245,6 @@ def cree_figure(conf,l_jours,l_poids,typedonnee,liste_extracalculs, liste_err, e # ça sera donc une extrapolation r = calcule_donnee_extrapolee(dates_extrapole, donnees_extrapole, conf["non_sauve"]["calculextradata_age"], liste_err) message=formate_extrapole(conf["non_sauve"]["nbextradata"]) -# if == 0: -# message+="l'ensemble des données" -# else: -# message+="les "+str(conf["non_sauve"]["nbextradata"])+" dernière"+met_s(conf["non_sauve"]["nbextradata"])+" données" else: message=formate_interpole() -- cgit v1.2.3