# -*- coding: utf-8 -*-
from configuration import CONFIG,DEFAUT
-from gestion_erreurs import *
-from gestion_couleurs import *
-from gestion_unites import *
+from gestion_erreurs import debug, warning, erreur, initialise_erreurs
+from gestion_couleurs import rgb_vers_tuple, tuple_vers_rgb
+from gestion_unites import choix_unite
import datetime
import json
import unidecode
if jours>0 or nombre ==0: # si c'est la naissance, faut beien écrire 0j quand même
chaine += str(jours)+"j"
return chaine
+
##########################
# fonction qui calcule "auto" le maxi du graphique en fonction du max
except:
warning(typedonnee+" impossible à lire : "+chaine,liste_err)
donnee = 0
+
+ # Pour le poids, un cas particulier
+ if typedonnee == "poids" and donnee > CONFIG["poids_maxi_conversion"]:
+ donnee = donnee/1000 # conversion en grammes
if not( 0<=donnee<CONFIG[typedonnee+"_maxi"]):
- warning(typedonnee+"incohérent(e) : "+str(donnee),liste_err)
+ warning(typedonnee+" incohérent(e) : "+str(donnee),liste_err)
donnee = 0
return donnee
d = date1 - datenaissance
jours = d.days
if jours<0:
- erreur_continue("La différence entre les dates est négative... :/")
+ warning("La différence entre les dates est négative... :/")
return -1
return jours
for typed in CONFIG["liste_typedonnees"]:
listes_jours[typed],listes_donnees[typed] = gere_donnees(data,config["naissance"],typed,liste_err)
+ # Si on veut extrapoler au-delà du jour maxi, on adapte
+
# Si on a choisi la même échelle de données
if config["memechelle"] == "oui":
config["non_sauve"]["maxi"] = calcule_max_graphique([j for lj in listes_jours.values() for j in lj])
+ # En cas d'extrapolation, on prend le maxi
+ if config["non_sauve"]["calculextradata_type"] !="" and config["non_sauve"]["calculextradata_age"]>config["non_sauve"]["maxi"]:
+ config["non_sauve"]["maxi"] = int(config["non_sauve"]["calculextradata_age"]) +1
config["non_sauve"]["unite"] = choix_unite(config["non_sauve"]["maxi"])
return (config,listes_jours,listes_donnees)
-########### Fonctions qui gèretn les données
+########### Fonctions qui gèretn les données web vers python
def gere_checkbox(chaine):
""" prend en arg une chaine, et renvoie "oui" si c'est "on" (sortie de la checkbox)
""" prend en argument le dictionnaire de requête (configuration imparfaite), et
construit le dictionnaire de configuration qui va bien.
Vérifie que chaque entrée est cohérente évidemment."""
+ # Initialisation
configuration = {"non_sauve": {}}
# Pour le nom, osef qu'il soit vide
if not(positionlegende in ['upper left','upper right','lower left','lower right']):
positionlegende = "upper left"
configuration["positionlegende"] = positionlegende
-
- configuration["prolongercourbes"] = gere_checkbox(data.get("prolongercourbes",""))
-
- configuration["non_sauve"]["grilleamelio"] = gere_checkbox(data.get("grilleamelio",""))
configuration["couleurs"] = {}
# gérer les couleurs
coul = rgb_vers_tuple(data.get("couleur_"+clecouleur,""),CONFIG["couleurs"][clecouleur],liste_err)
configuration["couleurs"][clecouleur] = coul
+
+ configuration["non_sauve"]["grilleamelio"] = gere_checkbox(data.get("grilleamelio",""))
+
+
+ #### La partie extrapolation n'a pas besoin d'être sauvée
+ configuration["non_sauve"]["prolongercourbes"] = gere_checkbox(data.get("prolongercourbes",""))
+
+ # Valeur par défaut : 1
+ debug(data.get("nbextradata", "aaargh"), liste_err)
+ nbextradata = data.get("nbextradata",1)
+ try:
+ nbextradata = int(nbextradata)
+ except:
+ warning("Le nombre de données sur lequel on extrapole est invalide : "+nbextradata, liste_err)
+ nbextradata = 1
+ configuration["non_sauve"]["nbextradata"] = nbextradata
+
+ if data.get("calculextradata_type","") in CONFIG["liste_typedonnees"]:
+ configuration["non_sauve"]["calculextradata_type"] = data.get("calculextradata_type","")
+ configuration["non_sauve"]["calculextradata_age"] = convertit_jours_vers_python(data.get("calculextradata_age","0j"),liste_err)
+ else:
+ configuration["non_sauve"]["calculextradata_type"] = ""
+ # On ne met rien dans l'âge, pas la peine
+
+ ctyped = data.get("calculextratemps_type","")
+ if ctyped in CONFIG["liste_typedonnees"]:
+ configuration["non_sauve"]["calculextratemps_type"] = ctyped
+ configuration["non_sauve"]["calculextratemps_val"] = convertit_donnee_vers_python(data.get("calculextratemps_val",""), ctyped, liste_err)
+ else:
+ configuration["non_sauve"]["calculextratemps_type"] = ""
+
+ # Tracer les calculs sur la grille
+ configuration["non_sauve"]["calculextradata_trace"] = gere_checkbox(data.get("calculextradata_trace"))
+ configuration["non_sauve"]["calculextratemps_trace"] = gere_checkbox(data.get("calculextratemps_trace"))
+
return configuration
+
+## web vers python : données
def gere_donnees(data,naissance,typedonnee,liste_err):
""" prend en argument le dictionnaire de requête, et la date de
naissance (éventuellement vide), et construit deux listes :
return (l_jours,l_donnee)
+# python vers Json
#### export vers json
def donnees_vers_json(l_jours,l_poids,l_jourst,l_taille,config):
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"""
-# nb_donnees = len(listes_jours)
+
def fini(lj):
""" teste si les listes sont toutes vides """
for l in lj.values():
return liste_f
-
+### COnversion json vers formulaire
# Json -> formulaire HTML
def fichier_json_vers_configdonnees(chaine,liste_err):
- """ prend le json importé (chaine) et l'exporte vers les valeurs du formulaire """
+ """ prend le json importé (chaine) et l'exporte vers les valeurs du formulaire
+ Renvoyé sous forme de dictionnaire (mais adapté au formulaire web)"""
debug("json vers config : Prêt à interpréter le json",liste_err)
try:
valform = json.loads(chaine)