#!/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
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
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:
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
# 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"]):
# 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":
# 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
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
+
return configuration
-
-#def configuration_vers_texte(config):
-# """ exporte le texte associé à une configuration
-# on dumpe simplement sauf pour maxi """
-# texte = "# Section configuration\n"
-# for (cle,val) in config.items():
-# if cle != "maxi":
-# texte+= cle + "=" + str(val) + "\n"
-# else:
-# texte+= cle + "=" + convertit_age_vers_texte(val)+"\n"
-# texte +="\n"
-# return texte
def gere_donneespoids(data,naissance,liste_err):
l_poids = [x[1] for x in liste_donnees]
return (l_jours,l_poids)
-
-
-#def donnees_poids_vers_texte(l_jours,l_poids):
-# """ retourne le texte correspondant aux données de poids """
-# texte = "# Section données\n"
-#
-# for i in range(len(l_poids)):
-# texte +=convertit_age_vers_texte(l_jours[i])+","+convertit_poids_vers_texte(l_poids[i])+"\n"
-#
-# texte+="\n"
-# return texte
-
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
gros_dico["naissance"] = convertit_date_vers_texte(gros_dico["naissance"])
# 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 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_texte_vers_configdonnees(fichier,liste_err):
-# """ prend le texte importé et l'exporte vers configuration et données
-# sous forme de valeurs du formulaire """
-#
-# valform = {}
-# indice_formulaire = 0 # l'indice du formulaire pour les données : age_1, date_1, poids_1 etc
-# num_ligne = 0
-# lignes = fichier.readlines()
-# for ligne in lignes:
-# num_ligne +=1
-# ligne = str(ligne,"utf8")
-# ligne = ligne.rstrip("\n")
-# if ligne != "" and ligne[0] != "#" and not(ligne.isspace()): # les lignes commençant par # sont des commentaires
-# # On essaie de partitionner pour voir
-# (var,egal,val) = ligne.partition("=")
-# if egal == "=": # c'est une ligne de config
-# valform[var] = val
-# else:
-# (age,virgule,poids) = ligne.partition(",") # On partitionne avec ,
-# if virgule == ",":
-# # c'est une ligne de data
-# valform["age_"+str(indice_formulaire)] = age
-# valform["poids_"+str(indice_formulaire)] = poids
-# indice_formulaire +=1
-#
-# else:
-# warning("La ligne "+str(num_ligne)+" n'est pas reconnue et sera ignorée : <"+ligne+">",liste_err)
-#
-# #le nb max du formulaire
-# valform["nb_data"] = max(indice_formulaire +2,nombre_lignes_form)
-#
-# return valform
-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",[])
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