]> git.immae.eu Git - perso/Denise/oms.git/blobdiff - gestion_donnees.py
nouveauté : courbes multiples
[perso/Denise/oms.git] / gestion_donnees.py
index 25830070a0650b5e01f13db6160311a79dcc35e4..8fee99cf0ca8db89970d8fccf7a50fa3218ecc17 100644 (file)
@@ -101,9 +101,13 @@ 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)
@@ -162,12 +166,14 @@ def delta_date(date1,datenaissance):
 
 ################### On regroupe tout ce qui gère les données en une fonction
     
-def web_vers_python(data,liste_err):
+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ée
+    court : si True est précisé, on ne met que le nom dans la config (enfant
+    additionnel)"""
     
     # Régler la configuration
-    config = gere_configuration(data,liste_err)    
+    config = gere_configuration(data,liste_err, court)    
     
     # récupérer les données
     listes_jours = {}
@@ -175,9 +181,14 @@ def web_vers_python(data,liste_err):
     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":
+    if config.get("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)
@@ -194,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": {}}
     
@@ -205,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   
  
@@ -482,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