summaryrefslogtreecommitdiff
path: root/gestion_donnees.py
diff options
context:
space:
mode:
Diffstat (limited to 'gestion_donnees.py')
-rw-r--r--gestion_donnees.py37
1 files changed, 29 insertions, 8 deletions
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):
46 chainenombre = "" 46 chainenombre = ""
47 elif lettre != ' ': 47 elif lettre != ' ':
48 # autre caractère : bizarre ? 48 # autre caractère : bizarre ?
49 warning("convertit_jour_vers_python : caractère invalide : "+lettre,liste_err) 49 warning("problème à la conversion de "+chaine+". Caractère invalide : "+lettre,liste_err)
50 # à la fin s'il reste qqch on le garde dans les jours 50 # à la fin s'il reste qqch on le garde dans les jours
51 if chainenombre != "": 51 if chainenombre != "":
52 agejours += int(chainenombre) 52 agejours += int(chainenombre)
@@ -150,8 +150,8 @@ def convertit_date_vers_texte(date):
150 if date == "": 150 if date == "":
151 return "" 151 return ""
152 else: 152 else:
153 return (str(date.year)+"-"+str(date.month)+"-"+str(date.day)) 153 #return (str(date.year)+"-"+str(date.month)+"-"+str(date.day))
154 154 return str(date)
155 155
156def delta_date(date1,datenaissance): 156def delta_date(date1,datenaissance):
157 """ renvoie le nombre de jours (entier) entre date1 et datenaissance format "datetime" 157 """ renvoie le nombre de jours (entier) entre date1 et datenaissance format "datetime"
@@ -164,6 +164,7 @@ def delta_date(date1,datenaissance):
164 return jours 164 return jours
165 165
166 166
167
167################### On regroupe tout ce qui gère les données en une fonction 168################### On regroupe tout ce qui gère les données en une fonction
168 169
169def web_vers_python(data,liste_err, court=False): 170def web_vers_python(data,liste_err, court=False):
@@ -417,6 +418,7 @@ def gere_donnees(data,naissance,typedonnee,liste_err):
417def donnees_vers_json(l_jours,l_poids,l_jourst,l_taille,config): 418def donnees_vers_json(l_jours,l_poids,l_jourst,l_taille,config):
418 """ retourne le json à renvoyer""" 419 """ retourne le json à renvoyer"""
419 gros_dico = copy.deepcopy(config) 420 gros_dico = copy.deepcopy(config)
421 gros_dico["version"] = CONFIG["version"]
420 l_jours2 = [convertit_age_vers_texte(d) for d in l_jours] 422 l_jours2 = [convertit_age_vers_texte(d) for d in l_jours]
421 l_jourst2 = [convertit_age_vers_texte(d) for d in l_jourst] 423 l_jourst2 = [convertit_age_vers_texte(d) for d in l_jourst]
422 gros_dico["data_j"] = l_jours2 424 gros_dico["data_j"] = l_jours2
@@ -426,6 +428,13 @@ def donnees_vers_json(l_jours,l_poids,l_jourst,l_taille,config):
426 # gérer la date de naissance 428 # gérer la date de naissance
427 if gros_dico.get("naissance","") != "": 429 if gros_dico.get("naissance","") != "":
428 gros_dico["naissance"] = convertit_date_vers_texte(gros_dico["naissance"]) 430 gros_dico["naissance"] = convertit_date_vers_texte(gros_dico["naissance"])
431 # Calcul de toutes les dates de données
432 l_dates_poids = [convertit_date_vers_texte( config["naissance"] + datetime.timedelta(days=jours) ) for jours in l_jours]
433 l_dates_taille = [convertit_date_vers_texte( config["naissance"] + datetime.timedelta(days=jours) ) for jours in l_jourst]
434 gros_dico["data_dates_poids"]= l_dates_poids
435 gros_dico["data_dates_taille"] = l_dates_taille
436
437
429 # gérer l'age maxi 438 # gérer l'age maxi
430 gros_dico["maxi"] = convertit_age_vers_texte(gros_dico["maxi"]) 439 gros_dico["maxi"] = convertit_age_vers_texte(gros_dico["maxi"])
431 # gérer les couleurs 440 # gérer les couleurs
@@ -438,11 +447,12 @@ def donnees_vers_json(l_jours,l_poids,l_jourst,l_taille,config):
438 447
439 return json.dumps(gros_dico, indent=2,ensure_ascii=False ) 448 return json.dumps(gros_dico, indent=2,ensure_ascii=False )
440 449
441def fusionne_donnees(listes_jours,listes_donnees): 450def fusionne_donnees(listes_jours,listes_donnees, listes_dates):
442 """ prend en argument deux dicos de listes. Chaque liste de jours est associée à une liste 451 """ prend en argument deux dicos de listes. Chaque liste de jours est associée à une liste
443 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 452 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
444 ("age":truc, "donnee1":truc, "donnee2":truc, ...) triée par ordre de jours. Si jamais une des données est vide, 453 {"age":truc, "donnee1":truc, "donnee2":truc, ...} triée par ordre de jours. Si jamais une des données est vide,
445 le champ du dictionnaire n'est pas rempli""" 454 le champ du dictionnaire n'est pas rempli
455 Le troisième paquet de listes (les dates) peut être vide ou bien simiaire : même clés."""
446 456
447 def fini(lj): 457 def fini(lj):
448 """ teste si les listes sont toutes vides """ 458 """ teste si les listes sont toutes vides """
@@ -468,11 +478,18 @@ def fusionne_donnees(listes_jours,listes_donnees):
468 # On extrait les données dans les deux listes (jours et données) 478 # On extrait les données dans les deux listes (jours et données)
469 jour = listes_jours[typedonnee].pop(0) 479 jour = listes_jours[typedonnee].pop(0)
470 donnee = listes_donnees[typedonnee].pop(0) 480 donnee = listes_donnees[typedonnee].pop(0)
481
471 if liste_f == [] or jour != liste_f[-1]["age"]: # Si le jour est un "nouveau" jour 482 if liste_f == [] or jour != liste_f[-1]["age"]: # Si le jour est un "nouveau" jour
472 liste_f.append({"age":jour}) 483 liste_f.append({"age":jour})
473 # On met à jour l'élément 484 # On met à jour l'élément (ou on l'ajoute)
474 liste_f[-1][typedonnee] = donnee 485 liste_f[-1][typedonnee] = donnee
475 486
487 # Si il y a une date associée, on la met !
488 if listes_dates[typedonnee] != []:
489 date = listes_dates[typedonnee].pop(0)
490 liste_f[-1]["date"] = convertit_date_vers_texte(date)
491
492
476 return liste_f 493 return liste_f
477 494
478 495
@@ -492,16 +509,20 @@ def fichier_json_vers_configdonnees(chaine,liste_err):
492 509
493 listes_jours = {} 510 listes_jours = {}
494 listes_donnees = {} 511 listes_donnees = {}
512 listes_dates = {}
495 for typed in CONFIG["liste_typedonnees"]: 513 for typed in CONFIG["liste_typedonnees"]:
496 if typed == "poids": # pour la rétrocompatibilité 514 if typed == "poids": # pour la rétrocompatibilité
497 listes_jours[typed] = valform.get("data_j",[]) 515 listes_jours[typed] = valform.get("data_j",[])
498 listes_donnees[typed] = valform.get("data_p",[]) 516 listes_donnees[typed] = valform.get("data_p",[])
517 listes_dates[typed] = valform.get("data_dates_"+typed,[])
499 else: 518 else:
500 listes_jours[typed] = valform.get("data_jours_"+typed,[]) 519 listes_jours[typed] = valform.get("data_jours_"+typed,[])
501 listes_donnees[typed] = valform.get("data_"+typed,[]) 520 listes_donnees[typed] = valform.get("data_"+typed,[])
521 listes_dates[typed] = valform.get("data_dates_"+typed,[])
522
502 523
503 debug("Avant fusion : listes jours "+str(listes_jours),liste_err) 524 debug("Avant fusion : listes jours "+str(listes_jours),liste_err)
504 liste_donnees = fusionne_donnees(listes_jours,listes_donnees) 525 liste_donnees = fusionne_donnees(listes_jours,listes_donnees, listes_dates)
505 debug("Fusion de listes ok. Liste moche : "+str(liste_donnees),liste_err) 526 debug("Fusion de listes ok. Liste moche : "+str(liste_donnees),liste_err)
506 for i in range(len(liste_donnees)): 527 for i in range(len(liste_donnees)):
507 for (cle,val) in liste_donnees[i].items(): 528 for (cle,val) in liste_donnees[i].items():