Quelques infos, release
[perso/Denise/oms.git] / gestion_donnees.py
index caacaf0c0e75c09a1d828260b5192bd52adad4ca..d214bcd9d47b7c42154de0ddb4fcd5aa58e17231 100644 (file)
@@ -1,13 +1,16 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
 
-from configuration import *
+from configuration import CONFIG,DEFAUT
 from gestion_erreurs import *
 from gestion_couleurs import *
 import datetime
 import json
 import unidecode
+import copy
 
+### Les données "tournent" selon :
+### python -> json -> (export/import) -> formulaire HTML -> données POST -> python etc
 
 ############ Fonctions de conversion
 
@@ -25,15 +28,15 @@ def convertit_jours_vers_python(chaine,liste_err):
         else:
             if lettre == 'a' or lettre == 'A':
                 # On a trouvé l'année, on ajoute tout ce qui est trouvé jusque là
-                agejours += int(chainenombre)*jours_dans_annee
+                agejours += int(chainenombre)*CONFIG["jours_dans_annee"]
                 chainenombre = ""
             elif lettre == 'm' or lettre == 'M':
                 # On a trouvé le mois
-                agejours += int(chainenombre)*jours_dans_mois
+                agejours += int(chainenombre)*CONFIG["jours_dans_mois"]
                 chainenombre = ""
             elif lettre == 's' or lettre == 'S':
                 # la semaine
-                agejours += int(chainenombre)*jours_dans_semaine
+                agejours += int(chainenombre)*CONFIG["jours_dans_semaine"]
                 chainenombre = ""
             elif lettre == 'j' or lettre == 'J':
                 # On a trouvé le jour
@@ -53,10 +56,10 @@ def convertit_jours_vers_python(chaine,liste_err):
 def convertit_age_vers_texte(nombre):
     """ convertit un nombre de jours en un truc plus lisible en mois, années, jours
     et renvoie une chaîne sous la forme 3a2m1j par exemple"""
-    annees = int(nombre / jours_dans_annee)
-    restant = nombre - annees*jours_dans_annee
-    mois = int(restant/jours_dans_mois)
-    jours= round(nombre - mois*jours_dans_mois - annees*jours_dans_annee)
+    annees = int(nombre / CONFIG["jours_dans_annee"])
+    restant = nombre - annees*CONFIG["jours_dans_annee"]
+    mois = int(restant/CONFIG["jours_dans_mois"])
+    jours= round(nombre - mois*CONFIG["jours_dans_mois"] - annees*CONFIG["jours_dans_annee"])
     
     chaine = ""
     if annees >0:
@@ -92,7 +95,7 @@ def convertit_poids_vers_python(chaine,liste_err):
     except:
         warning("Poids impossible à lire : "+chaine,liste_err)
         poids = 0
-    if not( 0<=poids<poids_maxi):
+    if not( 0<=poids<CONFIG["poids_maxi"]):
         warning("Poids incohérent : "+str(poids),liste_err)
         poids = 0
     return poids
@@ -150,7 +153,7 @@ def gere_configuration(data,liste_err):
     # Pour le nom, osef qu'il soit vide
     nom = data.get("nom","")
     # Par contre s'il est trop long on le tronque   
-    configuration["nom"] = nom[:longueur_max_nom_bebe]
+    configuration["nom"] = nom[:CONFIG["longueur_max_nom_bebe"]]
         
     sexe = data.get("sexe","")
     if not (sexe in ["F","M","N"]):
@@ -171,11 +174,12 @@ def gere_configuration(data,liste_err):
     
     # unité
     unite = data.get("unite","")
-    if not (unite in liste_unites_valides):
+
+    if not (unite in CONFIG["liste_unites"]):
         unite = ""
         #warning("L'unité "+unite+" n'est pas reconnue !",liste_err)
     configuration["unite"] = unite
-    
+
     # grille
     grille = data.get("grille","")
     if grille != "on":
@@ -193,36 +197,36 @@ def gere_configuration(data,liste_err):
     # dimensions du graphique
     largeur = data.get("largeur","")
     if largeur == "":
-        largeur = largeur_graphique
+        largeur = DEFAUT["largeur_graphique"]
     else:
         try:
             largeur = int(largeur)
         except:
             warning("La largeur "+largeur+"est invalide !",liste_err)
-            largeur = largeur_graphique
-        if largeur > largeur_graphique_max:
-            largeur = largeur_graphique_max
-            warning("Largeur trop grande !",liste_err)
-        elif largeur < largeur_graphique_min:
-            largeur = largeur_graphique_min
-            warning("Largeur trop petite !",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 = hauteur_graphique
+        hauteur = DEFAUT["hauteur_graphique"]
     else:
         try:
             hauteur = int(hauteur)
         except:
             warning("La hauteur "+hauteur+"est invalide !",liste_err)
-            hauteur = hauteur_graphique
-        if hauteur > hauteur_graphique_max:
-            hauteur = hauteur_graphique_max
-            warning("Hauteur trop grande !",liste_err)
-        elif hauteur < hauteur_graphique_min:
-            hauteur = hauteur_graphique_min
-            warning("Hauteur trop petite !",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
@@ -239,28 +243,14 @@ def gere_configuration(data,liste_err):
     if not(positionlegende in ['upper left','upper right','lower left','lower right']):
         positionlegende = "upper left"
     configuration["positionlegende"] = positionlegende
+
     
-    #warning("bla"+data["couleur1"],liste_err)
-    coul1 = rgb_vers_tuple(data.get("couleur1",""),couleur_defaut_1_tuple,liste_err)
-    coul2 = rgb_vers_tuple(data.get("couleur2",""),couleur_defaut_2_tuple,liste_err)
-    coul3 = rgb_vers_tuple(data.get("couleur3",""),couleur_defaut_3_tuple,liste_err)
-    #warning("bla2"+str(coul1),liste_err)
-    configuration["couleur1"] = coul1
-    configuration["couleur2"] = coul2
-    configuration["couleur3"] = coul3
-    
-    # couleur de fond
-    coul_fond = rgb_vers_tuple(data.get("couleur_fond",""),couleur_defaut_fond_tuple,liste_err)
-    configuration["couleur_fond"] = coul_fond
-    
-    # couleur d'axes et de texte
-    coul_cadretxt = rgb_vers_tuple(data.get("couleur_cadretxt",""),couleur_defaut_cadretxt_tuple,liste_err)
-    configuration["couleur_cadretxt"] = coul_cadretxt
+    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
     
-    # couleur de la grille
-    coul_grille = rgb_vers_tuple(data.get("couleur_grille",""),couleur_defaut_grille_tuple,liste_err)
-    configuration["couleur_grille"] = coul_grille
-    #warning(str(configuration["couleur1"]),liste_err)
     
     return configuration   
  
@@ -306,7 +296,7 @@ def gere_donneespoids(data,naissance,liste_err):
 
 def donnees_vers_json(l_jours,l_poids,config):
     """ retourne le json à renvoyer"""
-    gros_dico = config.copy()
+    gros_dico = copy.deepcopy(config)
     l_jours2 = [convertit_age_vers_texte(d) for d in l_jours]
     gros_dico["data_j"] = l_jours2
     gros_dico["data_p"] = l_poids
@@ -316,18 +306,24 @@ def donnees_vers_json(l_jours,l_poids,config):
     # gérer l'age maxi
     gros_dico["maxi"] = convertit_age_vers_texte(gros_dico["maxi"])
     # gérer les couleurs
-    for cle in ["couleur1", "couleur2", "couleur3", "couleur_fond","couleur_grille","couleur_cadretxt"]:
-        gros_dico[cle] = tuple_vers_rgb(gros_dico[cle])
+#    for cle in ["couleur1", "couleur2", "couleur3", "couleur_fond","couleur_grille","couleur_cadretxt"]:
+#        gros_dico[cle] = tuple_vers_rgb(gros_dico[cle])
+    for clecouleur in DEFAUT["couleurs"]:
+        gros_dico["couleurs"][clecouleur] = tuple_vers_rgb(gros_dico["couleurs"][clecouleur])
     
     
         
     return json.dumps(gros_dico, indent=2,ensure_ascii=False )
 
 
-def fichier_json_vers_configdonnees(fichier,liste_err):
-    """ prend le json importé et l'exporte vers les valeurs du formulaire """
-    chaine = fichier.read()
-    valform = json.loads(chaine)
+def fichier_json_vers_configdonnees(chaine,liste_err):
+    """ prend le json importé (chaine) et l'exporte vers les valeurs du formulaire """
+    debug("json vers config : Prêt à interpréter le json",liste_err)
+    try:    
+        valform = json.loads(chaine)
+    except :
+        erreur("Impossible de lire le fichier json !",liste_err)
+        return {}
     # Il faut maintenant récupérer les l_jours et l_poids puis les remettre
     # sous forme de age_i et poids_i
     l_jours= valform.get("data_j",[])
@@ -341,7 +337,7 @@ def fichier_json_vers_configdonnees(fichier,liste_err):
         valform["age_"+str(i)] = l_jours[i]
         valform["poids_"+str(i)] = l_poids[i]
         
-    valform["nb_data"] = max(long +2,nombre_lignes_form)
+    valform["nb_data"] = max(long +2,DEFAUT["nb_data"])
     
     return valform