From 2dc9eb43142b4f96cee63ff191e429ad68efacae Mon Sep 17 00:00:00 2001 From: Denise sur Lya Date: Wed, 30 Jun 2021 15:13:47 +0200 Subject: [PATCH] sauvegarde des dates + version de l'app dans le fichier de sauvegarde --- app.py | 2 -- configuration.py | 5 ++++- data/changelog_data.txt | 10 ++++++++-- gestion_donnees.py | 37 +++++++++++++++++++++++++++++-------- templates/index.html | 9 ++++++++- 5 files changed, 49 insertions(+), 14 deletions(-) diff --git a/app.py b/app.py index 206af47..3ccabad 100644 --- a/app.py +++ b/app.py @@ -27,8 +27,6 @@ def initialise_mode_beta(): app = flask.Flask(__name__) - - @app.route('/',methods=['POST','GET']) def index(): beta=initialise_mode_beta() diff --git a/configuration.py b/configuration.py index fc573ba..80a9545 100644 --- a/configuration.py +++ b/configuration.py @@ -4,6 +4,9 @@ ### Toutes les "constantes" de config importés pour ce qui concerne les courbes CONFIG = {} +### La version de l'app +CONFIG["version"] = 2.4 + # les unités acceptées CONFIG["liste_unites"] = ["jours", "semaines", "mois", "années"] CONFIG["liste_typedonnees"] = ["poids","taille"] @@ -16,7 +19,7 @@ CONFIG["extradata"] = ["calculextradata", "calculextratemps"] # Liste des symboles autorisés pour les enfants (matplotlib). # Sous forme "item: description" -CONFIG["liste_symboles"] = {"o": "●", "^": "▲", "v": "▼", "<": "◀", ">": "▶", "s": "■", "p": "⬟", "P": "➕", "x": "×", "D": "◆", '$\u2665$':"♥" } +CONFIG["liste_symboles"] = {"o": "●", "^": "▲", "v": "▼", "<": "◀", ">": "▶", "s": "■", "p": "⬟", "P": "➕", "x": "×", "D": "◆", '$\u2665$':"♥", '$\u2217$':"∗" } # fichiers diff --git a/data/changelog_data.txt b/data/changelog_data.txt index 5c50ff7..995437b 100644 --- a/data/changelog_data.txt +++ b/data/changelog_data.txt @@ -1,9 +1,15 @@ -"Version 2.4","29/06/2021","

Plus de courbes ! +"Version 2.4","29/06/2021","

Plus de courbes ! Et autres... +

" diff --git a/gestion_donnees.py b/gestion_donnees.py index 5876c5a..372d6aa 100644 --- a/gestion_donnees.py +++ b/gestion_donnees.py @@ -46,7 +46,7 @@ def convertit_jours_vers_python(chaine,liste_err): chainenombre = "" elif lettre != ' ': # autre caractère : bizarre ? - warning("convertit_jour_vers_python : caractère invalide : "+lettre,liste_err) + warning("problème à la conversion de "+chaine+". Caractère invalide : "+lettre,liste_err) # à la fin s'il reste qqch on le garde dans les jours if chainenombre != "": agejours += int(chainenombre) @@ -150,8 +150,8 @@ def convertit_date_vers_texte(date): if date == "": return "" else: - return (str(date.year)+"-"+str(date.month)+"-"+str(date.day)) - + #return (str(date.year)+"-"+str(date.month)+"-"+str(date.day)) + return str(date) def delta_date(date1,datenaissance): """ renvoie le nombre de jours (entier) entre date1 et datenaissance format "datetime" @@ -164,6 +164,7 @@ def delta_date(date1,datenaissance): return jours + ################### On regroupe tout ce qui gère les données en une fonction def web_vers_python(data,liste_err, court=False): @@ -417,6 +418,7 @@ def gere_donnees(data,naissance,typedonnee,liste_err): def donnees_vers_json(l_jours,l_poids,l_jourst,l_taille,config): """ retourne le json à renvoyer""" gros_dico = copy.deepcopy(config) + gros_dico["version"] = CONFIG["version"] l_jours2 = [convertit_age_vers_texte(d) for d in l_jours] l_jourst2 = [convertit_age_vers_texte(d) for d in l_jourst] gros_dico["data_j"] = l_jours2 @@ -426,6 +428,13 @@ def donnees_vers_json(l_jours,l_poids,l_jourst,l_taille,config): # gérer la date de naissance if gros_dico.get("naissance","") != "": gros_dico["naissance"] = convertit_date_vers_texte(gros_dico["naissance"]) + # Calcul de toutes les dates de données + l_dates_poids = [convertit_date_vers_texte( config["naissance"] + datetime.timedelta(days=jours) ) for jours in l_jours] + l_dates_taille = [convertit_date_vers_texte( config["naissance"] + datetime.timedelta(days=jours) ) for jours in l_jourst] + gros_dico["data_dates_poids"]= l_dates_poids + gros_dico["data_dates_taille"] = l_dates_taille + + # gérer l'age maxi gros_dico["maxi"] = convertit_age_vers_texte(gros_dico["maxi"]) # gérer les couleurs @@ -438,11 +447,12 @@ def donnees_vers_json(l_jours,l_poids,l_jourst,l_taille,config): return json.dumps(gros_dico, indent=2,ensure_ascii=False ) -def fusionne_donnees(listes_jours,listes_donnees): +def fusionne_donnees(listes_jours,listes_donnees, listes_dates): """ prend en argument deux dicos de listes. Chaque liste de jours est associée à une liste 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 - ("age":truc, "donnee1":truc, "donnee2":truc, ...) triée par ordre de jours. Si jamais une des données est vide, - le champ du dictionnaire n'est pas rempli""" + {"age":truc, "donnee1":truc, "donnee2":truc, ...} triée par ordre de jours. Si jamais une des données est vide, + le champ du dictionnaire n'est pas rempli + Le troisième paquet de listes (les dates) peut être vide ou bien simiaire : même clés.""" def fini(lj): """ teste si les listes sont toutes vides """ @@ -468,11 +478,18 @@ def fusionne_donnees(listes_jours,listes_donnees): # On extrait les données dans les deux listes (jours et données) jour = listes_jours[typedonnee].pop(0) donnee = listes_donnees[typedonnee].pop(0) + if liste_f == [] or jour != liste_f[-1]["age"]: # Si le jour est un "nouveau" jour liste_f.append({"age":jour}) - # On met à jour l'élément + # On met à jour l'élément (ou on l'ajoute) liste_f[-1][typedonnee] = donnee + # Si il y a une date associée, on la met ! + if listes_dates[typedonnee] != []: + date = listes_dates[typedonnee].pop(0) + liste_f[-1]["date"] = convertit_date_vers_texte(date) + + return liste_f @@ -492,16 +509,20 @@ def fichier_json_vers_configdonnees(chaine,liste_err): listes_jours = {} listes_donnees = {} + listes_dates = {} for typed in CONFIG["liste_typedonnees"]: if typed == "poids": # pour la rétrocompatibilité listes_jours[typed] = valform.get("data_j",[]) listes_donnees[typed] = valform.get("data_p",[]) + listes_dates[typed] = valform.get("data_dates_"+typed,[]) else: listes_jours[typed] = valform.get("data_jours_"+typed,[]) listes_donnees[typed] = valform.get("data_"+typed,[]) + listes_dates[typed] = valform.get("data_dates_"+typed,[]) + debug("Avant fusion : listes jours "+str(listes_jours),liste_err) - liste_donnees = fusionne_donnees(listes_jours,listes_donnees) + liste_donnees = fusionne_donnees(listes_jours,listes_donnees, listes_dates) debug("Fusion de listes ok. Liste moche : "+str(liste_donnees),liste_err) for i in range(len(liste_donnees)): for (cle,val) in liste_donnees[i].items(): diff --git a/templates/index.html b/templates/index.html index be2ab48..a606667 100644 --- a/templates/index.html +++ b/templates/index.html @@ -17,6 +17,13 @@ + +{% if "version" in valform %} +

Version du fichier de sauvegarde : {{ valform.version }}.

{% endif %} +{% if "version" not in valform or valform.version < CONFIG.version %} +

Note : La version du fichier de sauvegarde est inférieure à la version du site ({{ CONFIG.version}}), mais cela ne devrait pas générer de bug (normalement). +

{% endif %} +
@@ -63,7 +70,7 @@ {% for i in range(valform.nb_data) %} - + -- 2.41.0