X-Git-Url: https://git.immae.eu/?p=perso%2FDenise%2Foms.git;a=blobdiff_plain;f=gestion_donnees.py;fp=gestion_donnees.py;h=372d6aa4b8dcdce9e9aa48b70868b0f200c4ab71;hp=5876c5abac245e32b9a99b0103fdefd17d956523;hb=2dc9eb43142b4f96cee63ff191e429ad68efacae;hpb=38b5e10ae817f79fb10b6c4b8655e6d95b2885b8 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():