X-Git-Url: https://git.immae.eu/?p=perso%2FDenise%2Foms.git;a=blobdiff_plain;f=gestion_donnees.py;h=7c2299759df556a7af40336bf69d9b8d28f31adc;hp=3523e7e25f908edd8433e1645e2718d038072e0c;hb=639d9cecc866004800974bf4d6ffc1c1a3a59fc1;hpb=8b5845ffdbffa3cf291bfef8e224c1d81bdd09de diff --git a/gestion_donnees.py b/gestion_donnees.py index 3523e7e..7c22997 100644 --- a/gestion_donnees.py +++ b/gestion_donnees.py @@ -2,9 +2,9 @@ # -*- 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 @@ -21,6 +21,7 @@ def convertit_jours_vers_python(chaine,liste_err): Si un des caractères n'est ni un nombre, ni une lettre "autorisée" ni une espace, on affiche un warning et on ignore ce caractère """ +# debug("conversion de "+chaine+" vers un nb de jours",liste_err) chainenombre = "" agejours = 0. for lettre in chaine: @@ -52,6 +53,7 @@ def convertit_jours_vers_python(chaine,liste_err): if agejours<0: warning("L'âge est négatif !",liste_err) agejours = 0 +# debug("On a convertit ! Résultat : "+str(agejours),liste_err) return agejours # python -> json @@ -71,6 +73,7 @@ def convertit_age_vers_texte(nombre): 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 @@ -80,7 +83,7 @@ def calcule_max_graphique(l_jours): return CONFIG["jours_defaut_donneesvides"] else: jour_maxi = max(l_jours)# pas la peine d'aller très au delà du jour max - jour_maxi = int(jour_maxi* 1.1)+3 # on rajoute un peu + jour_maxi = int(jour_maxi* 1.2)+3 # on rajoute un peu return jour_maxi @@ -107,8 +110,12 @@ def convertit_donnee_vers_python(chaine,typedonnee,liste_err): 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<=donneeconfig["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) @@ -191,7 +203,8 @@ def gere_configuration(data,liste_err): """ 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.""" - configuration = {} + # Initialisation + configuration = {"non_sauve": {}} # Pour le nom, osef qu'il soit vide nom = data.get("nom","") @@ -209,6 +222,12 @@ def gere_configuration(data,liste_err): naissance = convertit_date_vers_python(naissance,liste_err) configuration["naissance"] = naissance + prematurite = data.get("prematurite","") + j = convertit_jours_vers_python(prematurite,liste_err) + configuration["prematurite"] = convertit_age_vers_texte(j) + + configuration["agecorrige"] = gere_checkbox(data.get("agecorrige","")) + # Type de courbe. Au pire on met P tyc = data.get("typecourbe","") if not (tyc in ["P","Z"]): @@ -230,6 +249,7 @@ def gere_configuration(data,liste_err): # Même échelle sur tous les graphiques configuration["memechelle"] = gere_checkbox(data.get("memechelle","")) + # maxi. 0 signifie qu'on veut pas de maxi maxi = data.get("maxi","") @@ -280,20 +300,54 @@ def gere_configuration(data,liste_err): if not(positionlegende in ['upper left','upper right','lower left','lower right']): positionlegende = "upper left" configuration["positionlegende"] = positionlegende - configuration["couleurs"] = {} # gérer les couleurs for clecouleur in DEFAUT["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 - # On y ajoute la partie "non sauvée" qui servira peut-être plus tard - configuration["non_sauve"] = {} + 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 : @@ -337,6 +391,7 @@ def gere_donnees(data,naissance,typedonnee,liste_err): return (l_jours,l_donnee) +# python vers Json #### export vers json def donnees_vers_json(l_jours,l_poids,l_jourst,l_taille,config): @@ -368,7 +423,7 @@ def fusionne_donnees(listes_jours,listes_donnees): 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(): @@ -383,7 +438,7 @@ def fusionne_donnees(listes_jours,listes_donnees): if lj[cle_mini]== []: cle_mini = cle elif lj[cle] != []: - if convertit_jours_vers_python(lj[cle][0],[]) 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)