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)
def convertit_date_vers_python(chaine,liste_err):
""" prend une chaine comme renvoyée par un champ de formulaire date
aaaa-mm-jj et en fait une date python
- renvoie "" si ne marche pas"""
- liste = chaine.split("-")
+ renvoie "" si ne marche pas.
+ Si jamais la date est au format avec des / ça devrait passer aussi."""
+ if "/" in chaine:
+ liste = chaine.split("/")
+ else:
+ liste = chaine.split("-")
if len(liste) != 3:
warning("La date : "+chaine+" est invalide !",liste_err)
return ""
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"
return jours
+
################### On regroupe tout ce qui gère les données en une fonction
def web_vers_python(data,liste_err, court=False):
""" prend en argument le dictionnaire de requête et renvoie la config, et les
- tableaux de donnée
+ tableaux de données
court : si True est précisé, on ne met que le nom dans la config (enfant
additionnel)"""
i = 0
# On va chercher si y'a des données à donnee_i
- while typedonnee+"_"+str(i) in data.keys():
- if data[typedonnee+"_"+str(i)] != "":
+ while "age_"+str(i) in data.keys():
+ if data.get(typedonnee+"_"+str(i), "") != "": # si la donne de ce type existe
donnee = convertit_donnee_vers_python(data[typedonnee+"_"+str(i)],typedonnee,liste_err)
age = data.get("age_"+str(i),"")
if age !="":
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
# 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
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 """
# 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
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():
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,
et les données pour chaque typed"""
+ print("test conf avant "+str(ldonnees)+str(ljours))
retour = {}
conf["symbole"] = symb # On ajoute le symbole additionnel
for typed in CONFIG["liste_typedonnees"]:
retour[typed] = (conf, ljours[typed], ldonnees[typed])
+ print("test "+str(retour))
return retour
\ No newline at end of file