diff options
Diffstat (limited to 'gestion_donnees.py')
-rw-r--r-- | gestion_donnees.py | 286 |
1 files changed, 160 insertions, 126 deletions
diff --git a/gestion_donnees.py b/gestion_donnees.py index 7c22997..8fee99c 100644 --- a/gestion_donnees.py +++ b/gestion_donnees.py | |||
@@ -101,9 +101,13 @@ def simplifie_nom(chaine): | |||
101 | def convertit_donnee_vers_python(chaine,typedonnee,liste_err): | 101 | def convertit_donnee_vers_python(chaine,typedonnee,liste_err): |
102 | """ convertit une chaine vers un float qui est le type donnee voulu. | 102 | """ convertit une chaine vers un float qui est le type donnee voulu. |
103 | La virgule peut être . ou , et on vire d'éventuels espaces. | 103 | La virgule peut être . ou , et on vire d'éventuels espaces. |
104 | Taille invalide : on renvoie 0 avec un warning.""" | 104 | Taille invalide : on renvoie 0 avec un warning. |
105 | Si la chaine est en fait déjà au format float, on laisse tel quel""" | ||
106 | if type(chaine) == float: | ||
107 | return chaine | ||
105 | chaine2 = chaine.replace(",",".") | 108 | chaine2 = chaine.replace(",",".") |
106 | chaine2 = chaine2.replace(" ","") | 109 | chaine2 = chaine2.replace(" ","") |
110 | |||
107 | 111 | ||
108 | try: | 112 | try: |
109 | donnee = float(chaine2) | 113 | donnee = float(chaine2) |
@@ -162,12 +166,14 @@ def delta_date(date1,datenaissance): | |||
162 | 166 | ||
163 | ################### On regroupe tout ce qui gère les données en une fonction | 167 | ################### On regroupe tout ce qui gère les données en une fonction |
164 | 168 | ||
165 | def web_vers_python(data,liste_err): | 169 | def web_vers_python(data,liste_err, court=False): |
166 | """ prend en argument le dictionnaire de requête et renvoie la config, et les | 170 | """ prend en argument le dictionnaire de requête et renvoie la config, et les |
167 | tableaux de donnée""" | 171 | tableaux de donnée |
172 | court : si True est précisé, on ne met que le nom dans la config (enfant | ||
173 | additionnel)""" | ||
168 | 174 | ||
169 | # Régler la configuration | 175 | # Régler la configuration |
170 | config = gere_configuration(data,liste_err) | 176 | config = gere_configuration(data,liste_err, court) |
171 | 177 | ||
172 | # récupérer les données | 178 | # récupérer les données |
173 | listes_jours = {} | 179 | listes_jours = {} |
@@ -178,7 +184,7 @@ def web_vers_python(data,liste_err): | |||
178 | # Si on veut extrapoler au-delà du jour maxi, on adapte | 184 | # Si on veut extrapoler au-delà du jour maxi, on adapte |
179 | 185 | ||
180 | # Si on a choisi la même échelle de données | 186 | # Si on a choisi la même échelle de données |
181 | if config["memechelle"] == "oui": | 187 | if config.get("memechelle") == "oui": |
182 | config["non_sauve"]["maxi"] = calcule_max_graphique([j for lj in listes_jours.values() for j in lj]) | 188 | config["non_sauve"]["maxi"] = calcule_max_graphique([j for lj in listes_jours.values() for j in lj]) |
183 | # En cas d'extrapolation, on prend le maxi | 189 | # En cas d'extrapolation, on prend le maxi |
184 | if config["non_sauve"]["calculextradata_type"] !="" and config["non_sauve"]["calculextradata_age"]>config["non_sauve"]["maxi"]: | 190 | if config["non_sauve"]["calculextradata_type"] !="" and config["non_sauve"]["calculextradata_age"]>config["non_sauve"]["maxi"]: |
@@ -199,10 +205,20 @@ def gere_checkbox(chaine): | |||
199 | else: | 205 | else: |
200 | return "" | 206 | return "" |
201 | 207 | ||
202 | def gere_configuration(data,liste_err): | 208 | def gere_symbole(chaine): |
209 | """ prend en arg une chaîne genre "o", ">" et vérifie si c'est un symbole valide. | ||
210 | Renvoie ce symbole-là ou le défaut""" | ||
211 | if chaine in CONFIG["liste_symboles"]: | ||
212 | return chaine | ||
213 | else: | ||
214 | return DEFAUT["symbole"] | ||
215 | |||
216 | def gere_configuration(data,liste_err, court=False): | ||
203 | """ prend en argument le dictionnaire de requête (configuration imparfaite), et | 217 | """ prend en argument le dictionnaire de requête (configuration imparfaite), et |
204 | construit le dictionnaire de configuration qui va bien. | 218 | construit le dictionnaire de configuration qui va bien. |
205 | Vérifie que chaque entrée est cohérente évidemment.""" | 219 | Vérifie que chaque entrée est cohérente évidemment. |
220 | court : si mis à True, on ne met que le nom dans la configuraion, | ||
221 | ainsi que la date de naissance et le sexe""" | ||
206 | # Initialisation | 222 | # Initialisation |
207 | configuration = {"non_sauve": {}} | 223 | configuration = {"non_sauve": {}} |
208 | 224 | ||
@@ -210,137 +226,141 @@ def gere_configuration(data,liste_err): | |||
210 | nom = data.get("nom","") | 226 | nom = data.get("nom","") |
211 | # Par contre s'il est trop long on le tronque | 227 | # Par contre s'il est trop long on le tronque |
212 | configuration["nom"] = nom[:CONFIG["longueur_max_nom_bebe"]] | 228 | configuration["nom"] = nom[:CONFIG["longueur_max_nom_bebe"]] |
213 | 229 | ||
214 | sexe = data.get("sexe","") | ||
215 | if not (sexe in ["F","M","N"]): | ||
216 | warning("Le sexe de l'enfant est invalide ! "+sexe,liste_err) | ||
217 | sexe = "N" | ||
218 | configuration["sexe"] = sexe | ||
219 | |||
220 | naissance = data.get("naissance","") | 230 | naissance = data.get("naissance","") |
221 | if naissance !="": | 231 | if naissance !="": |
222 | naissance = convertit_date_vers_python(naissance,liste_err) | 232 | naissance = convertit_date_vers_python(naissance,liste_err) |
223 | configuration["naissance"] = naissance | 233 | configuration["naissance"] = naissance |
224 | 234 | ||
225 | prematurite = data.get("prematurite","") | 235 | sexe = data.get("sexe","") |
226 | j = convertit_jours_vers_python(prematurite,liste_err) | 236 | if not (sexe in ["F","M","N"]): |
227 | configuration["prematurite"] = convertit_age_vers_texte(j) | 237 | warning("Le sexe de l'enfant est invalide ! "+sexe,liste_err) |
228 | 238 | sexe = "N" | |
229 | configuration["agecorrige"] = gere_checkbox(data.get("agecorrige","")) | 239 | configuration["sexe"] = sexe |
230 | 240 | ||
231 | # Type de courbe. Au pire on met P | 241 | if not(court): |
232 | tyc = data.get("typecourbe","") | 242 | |
233 | if not (tyc in ["P","Z"]): | 243 | prematurite = data.get("prematurite","") |
234 | tyc = "P" | 244 | j = convertit_jours_vers_python(prematurite,liste_err) |
235 | configuration["typecourbe"] = tyc | 245 | configuration["prematurite"] = convertit_age_vers_texte(j) |
236 | |||
237 | # unité | ||
238 | unite = data.get("unite","") | ||
239 | if not (unite in CONFIG["liste_unites"]): | ||
240 | unite = "" | ||
241 | #warning("L'unité "+unite+" n'est pas reconnue !",liste_err) | ||
242 | configuration["unite"] = unite | ||
243 | |||
244 | # grille | ||
245 | configuration["grille"] = gere_checkbox(data.get("grille","")) | ||
246 | |||
247 | # tracer ou non les courbes vides | ||
248 | configuration["tracevide"] = gere_checkbox(data.get("tracevide","")) | ||
249 | 246 | ||
250 | # Même échelle sur tous les graphiques | 247 | configuration["agecorrige"] = gere_checkbox(data.get("agecorrige","")) |
251 | configuration["memechelle"] = gere_checkbox(data.get("memechelle","")) | 248 | |
252 | 249 | # Type de courbe. Au pire on met P | |
253 | 250 | tyc = data.get("typecourbe","") | |
254 | # maxi. 0 signifie qu'on veut pas de maxi | 251 | if not (tyc in ["P","Z"]): |
255 | maxi = data.get("maxi","") | 252 | tyc = "P" |
256 | if maxi == "": | 253 | configuration["typecourbe"] = tyc |
257 | configuration["maxi"] = 0 | 254 | |
258 | else: | 255 | # unité |
259 | configuration["maxi"] = int(convertit_jours_vers_python(maxi,liste_err)) | 256 | unite = data.get("unite","") |
257 | if not (unite in CONFIG["liste_unites"]): | ||
258 | unite = "" | ||
259 | #warning("L'unité "+unite+" n'est pas reconnue !",liste_err) | ||
260 | configuration["unite"] = unite | ||
261 | |||
262 | # grille | ||
263 | configuration["grille"] = gere_checkbox(data.get("grille","")) | ||
264 | |||
265 | # tracer ou non les courbes vides | ||
266 | configuration["tracevide"] = gere_checkbox(data.get("tracevide","")) | ||
267 | |||
268 | # Même échelle sur tous les graphiques | ||
269 | configuration["memechelle"] = gere_checkbox(data.get("memechelle","")) | ||
260 | 270 | ||
261 | # dimensions du graphique | 271 | |
262 | largeur = data.get("largeur","") | 272 | # maxi. 0 signifie qu'on veut pas de maxi |
263 | if largeur == "": | 273 | maxi = data.get("maxi","") |
264 | largeur = DEFAUT["largeur_graphique"] | 274 | if maxi == "": |
265 | else: | 275 | configuration["maxi"] = 0 |
266 | try: | 276 | else: |
267 | largeur = int(largeur) | 277 | configuration["maxi"] = int(convertit_jours_vers_python(maxi,liste_err)) |
268 | except: | 278 | |
269 | warning("La largeur "+largeur+"est invalide !",liste_err) | 279 | # dimensions du graphique |
280 | largeur = data.get("largeur","") | ||
281 | if largeur == "": | ||
270 | largeur = DEFAUT["largeur_graphique"] | 282 | largeur = DEFAUT["largeur_graphique"] |
271 | if largeur > CONFIG["largeur_graphique_max"]: | 283 | else: |
272 | largeur = CONFIG["largeur_graphique_max"] | 284 | try: |
273 | warning("Largeur du graphique trop grande !",liste_err) | 285 | largeur = int(largeur) |
274 | elif largeur < CONFIG["largeur_graphique_min"]: | 286 | except: |
275 | largeur = CONFIG["largeur_graphique_min"] | 287 | warning("La largeur "+largeur+"est invalide !",liste_err) |
276 | warning("Largeur du graphique trop petite !",liste_err) | 288 | largeur = DEFAUT["largeur_graphique"] |
277 | configuration["largeur"] = largeur | 289 | if largeur > CONFIG["largeur_graphique_max"]: |
278 | 290 | largeur = CONFIG["largeur_graphique_max"] | |
279 | hauteur = data.get("hauteur","") | 291 | warning("Largeur du graphique trop grande !",liste_err) |
280 | if hauteur == "": | 292 | elif largeur < CONFIG["largeur_graphique_min"]: |
281 | hauteur = DEFAUT["hauteur_graphique"] | 293 | largeur = CONFIG["largeur_graphique_min"] |
282 | else: | 294 | warning("Largeur du graphique trop petite !",liste_err) |
283 | try: | 295 | configuration["largeur"] = largeur |
284 | hauteur = int(hauteur) | 296 | |
285 | except: | 297 | hauteur = data.get("hauteur","") |
286 | warning("La hauteur "+hauteur+"est invalide !",liste_err) | 298 | if hauteur == "": |
287 | hauteur = DEFAUT["hauteur_graphique"] | 299 | hauteur = DEFAUT["hauteur_graphique"] |
288 | if hauteur > CONFIG["hauteur_graphique_max"]: | 300 | else: |
289 | hauteur = CONFIG["hauteur_graphique_max"] | 301 | try: |
290 | warning("Hauteur du graphique trop grande !",liste_err) | 302 | hauteur = int(hauteur) |
291 | elif hauteur < CONFIG["hauteur_graphique_min"]: | 303 | except: |
292 | hauteur = CONFIG["hauteur_graphique_min"] | 304 | warning("La hauteur "+hauteur+"est invalide !",liste_err) |
293 | warning("Hauteur du graphique trop petite !",liste_err) | 305 | hauteur = DEFAUT["hauteur_graphique"] |
294 | configuration["hauteur"] = hauteur | 306 | if hauteur > CONFIG["hauteur_graphique_max"]: |
295 | 307 | hauteur = CONFIG["hauteur_graphique_max"] | |
296 | # existence et position de la légende | 308 | warning("Hauteur du graphique trop grande !",liste_err) |
297 | configuration["legende"] = gere_checkbox(data.get("legende","")) | 309 | elif hauteur < CONFIG["hauteur_graphique_min"]: |
298 | 310 | hauteur = CONFIG["hauteur_graphique_min"] | |
299 | positionlegende = data.get("positionlegende","") | 311 | warning("Hauteur du graphique trop petite !",liste_err) |
300 | if not(positionlegende in ['upper left','upper right','lower left','lower right']): | 312 | configuration["hauteur"] = hauteur |
301 | positionlegende = "upper left" | 313 | |
302 | configuration["positionlegende"] = positionlegende | 314 | # existence et position de la légende |
315 | configuration["legende"] = gere_checkbox(data.get("legende","")) | ||
316 | |||
317 | positionlegende = data.get("positionlegende","") | ||
318 | if not(positionlegende in ['upper left','upper right','lower left','lower right']): | ||
319 | positionlegende = "upper left" | ||
320 | configuration["positionlegende"] = positionlegende | ||
321 | |||
322 | configuration["couleurs"] = {} | ||
323 | # gérer les couleurs | ||
324 | for clecouleur in DEFAUT["couleurs"]: | ||
325 | coul = rgb_vers_tuple(data.get("couleur_"+clecouleur,""),CONFIG["couleurs"][clecouleur],liste_err) | ||
326 | configuration["couleurs"][clecouleur] = coul | ||
327 | |||
328 | # symbole | ||
329 | configuration["symbole"] = gere_symbole( data.get("symbole", "")) | ||
303 | 330 | ||
304 | configuration["couleurs"] = {} | 331 | configuration["non_sauve"]["grilleamelio"] = gere_checkbox(data.get("grilleamelio","")) |
305 | # gérer les couleurs | ||
306 | for clecouleur in DEFAUT["couleurs"]: | ||
307 | coul = rgb_vers_tuple(data.get("couleur_"+clecouleur,""),CONFIG["couleurs"][clecouleur],liste_err) | ||
308 | configuration["couleurs"][clecouleur] = coul | ||
309 | |||
310 | |||
311 | configuration["non_sauve"]["grilleamelio"] = gere_checkbox(data.get("grilleamelio","")) | ||
312 | |||
313 | |||
314 | #### La partie extrapolation n'a pas besoin d'être sauvée | ||
315 | configuration["non_sauve"]["prolongercourbes"] = gere_checkbox(data.get("prolongercourbes","")) | ||
316 | |||
317 | # Valeur par défaut : 1 | ||
318 | debug(data.get("nbextradata", "aaargh"), liste_err) | ||
319 | nbextradata = data.get("nbextradata",1) | ||
320 | try: | ||
321 | nbextradata = int(nbextradata) | ||
322 | except: | ||
323 | warning("Le nombre de données sur lequel on extrapole est invalide : "+nbextradata, liste_err) | ||
324 | nbextradata = 1 | ||
325 | configuration["non_sauve"]["nbextradata"] = nbextradata | ||
326 | 332 | ||
327 | if data.get("calculextradata_type","") in CONFIG["liste_typedonnees"]: | ||
328 | configuration["non_sauve"]["calculextradata_type"] = data.get("calculextradata_type","") | ||
329 | configuration["non_sauve"]["calculextradata_age"] = convertit_jours_vers_python(data.get("calculextradata_age","0j"),liste_err) | ||
330 | else: | ||
331 | configuration["non_sauve"]["calculextradata_type"] = "" | ||
332 | # On ne met rien dans l'âge, pas la peine | ||
333 | 333 | ||
334 | ctyped = data.get("calculextratemps_type","") | 334 | #### La partie extrapolation n'a pas besoin d'être sauvée |
335 | if ctyped in CONFIG["liste_typedonnees"]: | 335 | configuration["non_sauve"]["prolongercourbes"] = gere_checkbox(data.get("prolongercourbes","")) |
336 | configuration["non_sauve"]["calculextratemps_type"] = ctyped | ||
337 | configuration["non_sauve"]["calculextratemps_val"] = convertit_donnee_vers_python(data.get("calculextratemps_val",""), ctyped, liste_err) | ||
338 | else: | ||
339 | configuration["non_sauve"]["calculextratemps_type"] = "" | ||
340 | 336 | ||
341 | # Tracer les calculs sur la grille | 337 | # Valeur par défaut : 1 |
342 | configuration["non_sauve"]["calculextradata_trace"] = gere_checkbox(data.get("calculextradata_trace")) | 338 | debug(data.get("nbextradata", "aaargh"), liste_err) |
343 | configuration["non_sauve"]["calculextratemps_trace"] = gere_checkbox(data.get("calculextratemps_trace")) | 339 | nbextradata = data.get("nbextradata",1) |
340 | try: | ||
341 | nbextradata = int(nbextradata) | ||
342 | except: | ||
343 | warning("Le nombre de données sur lequel on extrapole est invalide : "+nbextradata, liste_err) | ||
344 | nbextradata = 1 | ||
345 | configuration["non_sauve"]["nbextradata"] = nbextradata | ||
346 | |||
347 | if data.get("calculextradata_type","") in CONFIG["liste_typedonnees"]: | ||
348 | configuration["non_sauve"]["calculextradata_type"] = data.get("calculextradata_type","") | ||
349 | configuration["non_sauve"]["calculextradata_age"] = convertit_jours_vers_python(data.get("calculextradata_age","0j"),liste_err) | ||
350 | else: | ||
351 | configuration["non_sauve"]["calculextradata_type"] = "" | ||
352 | # On ne met rien dans l'âge, pas la peine | ||
353 | |||
354 | ctyped = data.get("calculextratemps_type","") | ||
355 | if ctyped in CONFIG["liste_typedonnees"]: | ||
356 | configuration["non_sauve"]["calculextratemps_type"] = ctyped | ||
357 | configuration["non_sauve"]["calculextratemps_val"] = convertit_donnee_vers_python(data.get("calculextratemps_val",""), ctyped, liste_err) | ||
358 | else: | ||
359 | configuration["non_sauve"]["calculextratemps_type"] = "" | ||
360 | |||
361 | # Tracer les calculs sur la grille | ||
362 | configuration["non_sauve"]["calculextradata_trace"] = gere_checkbox(data.get("calculextradata_trace")) | ||
363 | configuration["non_sauve"]["calculextratemps_trace"] = gere_checkbox(data.get("calculextratemps_trace")) | ||
344 | 364 | ||
345 | 365 | ||
346 | return configuration | 366 | return configuration |
@@ -492,4 +512,18 @@ def fichier_json_vers_configdonnees(chaine,liste_err): | |||
492 | return valform | 512 | return valform |
493 | 513 | ||
494 | 514 | ||
495 | \ No newline at end of file | 515 | |
516 | #### Pour l'insertion d'une 2e (ou plus) courbe sur le graphique, ue fonction qui sépare tout ça | ||
517 | def eclate_donnees_additionnelles(conf, ljours, ldonnees, symb): | ||
518 | """ conf est la config (on ne garde que le nom) pour un enfant additionnel, | ||
519 | ljours et ldonnees les dictionnaires de listes contenant les données. | ||
520 | symb est le symbole choisi pour cette courbe additionnelle (déjà vérifié) | ||
521 | On fabrique un joli dictionnaire typed -> (conf lj, ldonnee) avec le nom de l'enfant, | ||
522 | et les données pour chaque typed""" | ||
523 | |||
524 | retour = {} | ||
525 | conf["symbole"] = symb # On ajoute le symbole additionnel | ||
526 | for typed in CONFIG["liste_typedonnees"]: | ||
527 | retour[typed] = (conf, ljours[typed], ldonnees[typed]) | ||
528 | |||
529 | return retour \ No newline at end of file | ||