X-Git-Url: https://git.immae.eu/?p=perso%2FDenise%2Foms.git;a=blobdiff_plain;f=gestion_donnees.py;h=8fee99cf0ca8db89970d8fccf7a50fa3218ecc17;hp=123120b9a514f265d1dd1e53d28908656e532cb0;hb=ca61f310d80e05ea43efc148787f214a567743f0;hpb=cf0d4c8c36224ca7059e99d03c25abaf694011d7 diff --git a/gestion_donnees.py b/gestion_donnees.py index 123120b..8fee99c 100644 --- a/gestion_donnees.py +++ b/gestion_donnees.py @@ -101,17 +101,25 @@ def simplifie_nom(chaine): def convertit_donnee_vers_python(chaine,typedonnee,liste_err): """ convertit une chaine vers un float qui est le type donnee voulu. La virgule peut être . ou , et on vire d'éventuels espaces. - Taille invalide : on renvoie 0 avec un warning.""" + Taille invalide : on renvoie 0 avec un warning. + Si la chaine est en fait déjà au format float, on laisse tel quel""" + if type(chaine) == float: + return chaine chaine2 = chaine.replace(",",".") chaine2 = chaine2.replace(" ","") + try: donnee = float(chaine2) 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) @@ -190,10 +205,20 @@ def gere_checkbox(chaine): else: return "" -def gere_configuration(data,liste_err): +def gere_symbole(chaine): + """ prend en arg une chaîne genre "o", ">" et vérifie si c'est un symbole valide. + Renvoie ce symbole-là ou le défaut""" + if chaine in CONFIG["liste_symboles"]: + return chaine + else: + return DEFAUT["symbole"] + +def gere_configuration(data,liste_err, court=False): """ 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.""" + Vérifie que chaque entrée est cohérente évidemment. + court : si mis à True, on ne met que le nom dans la configuraion, + ainsi que la date de naissance et le sexe""" # Initialisation configuration = {"non_sauve": {}} @@ -201,133 +226,142 @@ def gere_configuration(data,liste_err): nom = data.get("nom","") # Par contre s'il est trop long on le tronque configuration["nom"] = nom[:CONFIG["longueur_max_nom_bebe"]] - - sexe = data.get("sexe","") - if not (sexe in ["F","M","N"]): - warning("Le sexe de l'enfant est invalide ! "+sexe,liste_err) - sexe = "N" - configuration["sexe"] = sexe - + naissance = data.get("naissance","") if naissance !="": 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"]): - tyc = "P" - configuration["typecourbe"] = tyc - - # unité - unite = data.get("unite","") - if not (unite in CONFIG["liste_unites"]): - unite = "" - #warning("L'unité "+unite+" n'est pas reconnue !",liste_err) - configuration["unite"] = unite - - # grille - configuration["grille"] = gere_checkbox(data.get("grille","")) - - # tracer ou non les courbes vides - configuration["tracevide"] = gere_checkbox(data.get("tracevide","")) + sexe = data.get("sexe","") + if not (sexe in ["F","M","N"]): + warning("Le sexe de l'enfant est invalide ! "+sexe,liste_err) + sexe = "N" + configuration["sexe"] = sexe + + if not(court): + + prematurite = data.get("prematurite","") + j = convertit_jours_vers_python(prematurite,liste_err) + configuration["prematurite"] = convertit_age_vers_texte(j) - # 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","") - if maxi == "": - configuration["maxi"] = 0 - else: - configuration["maxi"] = int(convertit_jours_vers_python(maxi,liste_err)) + 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"]): + tyc = "P" + configuration["typecourbe"] = tyc + + # unité + unite = data.get("unite","") + if not (unite in CONFIG["liste_unites"]): + unite = "" + #warning("L'unité "+unite+" n'est pas reconnue !",liste_err) + configuration["unite"] = unite + + # grille + configuration["grille"] = gere_checkbox(data.get("grille","")) + + # tracer ou non les courbes vides + configuration["tracevide"] = gere_checkbox(data.get("tracevide","")) + + # Même échelle sur tous les graphiques + configuration["memechelle"] = gere_checkbox(data.get("memechelle","")) - # dimensions du graphique - largeur = data.get("largeur","") - if largeur == "": - largeur = DEFAUT["largeur_graphique"] - else: - try: - largeur = int(largeur) - except: - warning("La largeur "+largeur+"est invalide !",liste_err) + + # maxi. 0 signifie qu'on veut pas de maxi + maxi = data.get("maxi","") + if maxi == "": + configuration["maxi"] = 0 + else: + configuration["maxi"] = int(convertit_jours_vers_python(maxi,liste_err)) + + # dimensions du graphique + largeur = data.get("largeur","") + if largeur == "": largeur = DEFAUT["largeur_graphique"] - if largeur > CONFIG["largeur_graphique_max"]: - largeur = CONFIG["largeur_graphique_max"] - warning("Largeur du graphique trop grande !",liste_err) - elif largeur < CONFIG["largeur_graphique_min"]: - largeur = CONFIG["largeur_graphique_min"] - warning("Largeur du graphique trop petite !",liste_err) - configuration["largeur"] = largeur - - hauteur = data.get("hauteur","") - if hauteur == "": - hauteur = DEFAUT["hauteur_graphique"] - else: - try: - hauteur = int(hauteur) - except: - warning("La hauteur "+hauteur+"est invalide !",liste_err) + else: + try: + largeur = int(largeur) + except: + warning("La largeur "+largeur+"est invalide !",liste_err) + largeur = DEFAUT["largeur_graphique"] + if largeur > CONFIG["largeur_graphique_max"]: + largeur = CONFIG["largeur_graphique_max"] + warning("Largeur du graphique trop grande !",liste_err) + elif largeur < CONFIG["largeur_graphique_min"]: + largeur = CONFIG["largeur_graphique_min"] + warning("Largeur du graphique trop petite !",liste_err) + configuration["largeur"] = largeur + + hauteur = data.get("hauteur","") + if hauteur == "": hauteur = DEFAUT["hauteur_graphique"] - if hauteur > CONFIG["hauteur_graphique_max"]: - hauteur = CONFIG["hauteur_graphique_max"] - warning("Hauteur du graphique trop grande !",liste_err) - elif hauteur < CONFIG["hauteur_graphique_min"]: - hauteur = CONFIG["hauteur_graphique_min"] - warning("Hauteur du graphique trop petite !",liste_err) - configuration["hauteur"] = hauteur + else: + try: + hauteur = int(hauteur) + except: + warning("La hauteur "+hauteur+"est invalide !",liste_err) + hauteur = DEFAUT["hauteur_graphique"] + if hauteur > CONFIG["hauteur_graphique_max"]: + hauteur = CONFIG["hauteur_graphique_max"] + warning("Hauteur du graphique trop grande !",liste_err) + elif hauteur < CONFIG["hauteur_graphique_min"]: + hauteur = CONFIG["hauteur_graphique_min"] + warning("Hauteur du graphique trop petite !",liste_err) + configuration["hauteur"] = hauteur + + # existence et position de la légende + configuration["legende"] = gere_checkbox(data.get("legende","")) + + positionlegende = data.get("positionlegende","") + 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 + + # symbole + configuration["symbole"] = gere_symbole( data.get("symbole", "")) - # existence et position de la légende - configuration["legende"] = gere_checkbox(data.get("legende","")) + configuration["non_sauve"]["grilleamelio"] = gere_checkbox(data.get("grilleamelio","")) - positionlegende = data.get("positionlegende","") - 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 - - 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 + #### La partie extrapolation n'a pas besoin d'être sauvée + configuration["non_sauve"]["prolongercourbes"] = gere_checkbox(data.get("prolongercourbes","")) - 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"] = "" + # 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 @@ -478,4 +512,18 @@ def fichier_json_vers_configdonnees(chaine,liste_err): return valform - \ No newline at end of file + +#### Pour l'insertion d'une 2e (ou plus) courbe sur le graphique, ue fonction qui sépare tout ça +def eclate_donnees_additionnelles(conf, ljours, ldonnees, symb): + """ conf est la config (on ne garde que le nom) pour un enfant additionnel, + ljours et ldonnees les dictionnaires de listes contenant les données. + 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""" + + retour = {} + conf["symbole"] = symb # On ajoute le symbole additionnel + for typed in CONFIG["liste_typedonnees"]: + retour[typed] = (conf, ljours[typed], ldonnees[typed]) + + return retour \ No newline at end of file