From 451bdc74fe50a124a3fe0733b675c8f01b50ee53 Mon Sep 17 00:00:00 2001 From: Denise sur Lya Date: Wed, 28 Jul 2021 13:43:30 +0200 Subject: =?UTF-8?q?Gestion=20des=20cat=C3=A9gories?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 16 +++++++++++----- config.py | 3 +++ data_textes.py | 17 ++++++++++++----- gere_grille.py | 52 +++++++++++++++++++++++++++++++++++++--------------- static/style.css | 9 ++++++++- 5 files changed, 71 insertions(+), 26 deletions(-) diff --git a/app.py b/app.py index 6ef4667..abb2579 100644 --- a/app.py +++ b/app.py @@ -11,7 +11,8 @@ Created on Mon Jul 26 17:31:48 2021 import flask -from data_textes import tabletextes, tablecomplete, extraire_textes_par_cat +import data_textes as data +#from data_textes import tabletextes, tablecomplete, extraire_textes_par_cat import gere_grille as g import gere_erreurs as e from config import DEFAUT, CONFIG @@ -33,12 +34,15 @@ app = flask.Flask(__name__) @app.route('/', methods=["GET", "POST"]) def index(): liste_err = e.initialise_erreurs() + tablecomplete = data.lire_fichier_csv_simple(data.fichier_bingo) + #categ= data.extraire_categories(tablecomplete) #print(tabletextes) idg = flask.request.args.get("grille", "") # Id de grille passée en param (ou pas) if idg != "": # Si on a mis un url de grille conf = g.decode_grille(idg, liste_err) if conf == {}: # Erreur à la génération - bingo = g.genere_grille(DEFAUT, tabletextes) + #tabletextes = data.extraire_qr(tablecomplete, categ) # Toutes les remarques + bingo = g.genere_grille(DEFAUT, tablecomplete, liste_err) conf = DEFAUT.copy() e.erreur("L'url de la grille n'est pas valide...", liste_err) else: @@ -49,7 +53,8 @@ def index(): conf = g.gere_donnees_custom(flask.request.form, liste_err) else: conf= DEFAUT.copy() - bingo = g.genere_grille(conf, tabletextes) # aléatoire + #tabletextes = data.extraire_qr(tablecomplete, conf["categories"]) + bingo = g.genere_grille(conf, tablecomplete, liste_err) # aléatoire avec la config donnée chainecode = g.encode_grille(conf, bingo, liste_err) @@ -58,11 +63,12 @@ def index(): @app.route('/custom') def custom(): + tablecomplete = data.lire_fichier_csv_simple(data.fichier_bingo) + categ, tableqr = data.extraire_textes_par_cat(tablecomplete) liste_err = e.initialise_erreurs() - categ, tableqr = extraire_textes_par_cat(tablecomplete) nombre_categ = [len(elt) for elt in tableqr] print(nombre_categ) - return flask.render_template("custom.html", DEFAUT=DEFAUT,CONFIG=CONFIG, nbdata=len(tabletextes), categ=categ, nbparcat = nombre_categ, e=liste_err[0]+liste_err[1]+liste_err[2]) + return flask.render_template("custom.html", DEFAUT=DEFAUT,CONFIG=CONFIG, nbdata=len(tablecomplete), categ=categ, nbparcat = nombre_categ, e=liste_err[0]+liste_err[1]+liste_err[2]) if __name__ == "__main__": # print("Mode debug maison : "+str(niveau_debug)) diff --git a/config.py b/config.py index eafe94d..dce2702 100644 --- a/config.py +++ b/config.py @@ -13,6 +13,9 @@ DEFAUT["nblignes"] = 4 DEFAUT["nbcolonnes"] = 3 DEFAUT["nbcasesvides"] = 0 DEFAUT["reponses_presentes"] = True # veut-on proposer les réponses +DEFAUT["categories"] = [] # Tout + +# Score # Configuration diff --git a/data_textes.py b/data_textes.py index 85baa54..dc8626a 100644 --- a/data_textes.py +++ b/data_textes.py @@ -74,12 +74,19 @@ def extraire_textes_par_cat(table): return (categ,tableqr) -def extraire_qr(table): - """ on enlève juste la catégorie en début de ligne""" - table2 = [ ligne[1:] for ligne in table] +def extraire_qr(table, listecateg): + """ + table est la table des remarques. On sélectionne uniquement + les remarques des catégories de la liste et + on enlève juste la catégorie en début de ligne + Si listecateg est vide on met tout le monde. + """ + table2 = [] + for ligne in table: + if ligne[0] in listecateg or listecateg == []: + table2.append(ligne[1:]) return table2 -tablecomplete = lire_fichier_csv_simple(fichier_bingo) -tabletextes = extraire_qr(tablecomplete) + #liste_cat, liste_textes = extraire_textes_par_cat(lire_fichier_csv_simple(fichier_bingo)) \ No newline at end of file diff --git a/gere_grille.py b/gere_grille.py index 6898f52..25ff51c 100644 --- a/gere_grille.py +++ b/gere_grille.py @@ -9,40 +9,55 @@ import random, zlib, base64, json import gere_erreurs as e from config import DEFAUT, CONFIG -def genere_grille(config, textes): + +def genere_grille(config, textes, liste_err): """ génère une grille avec des éléments aléatoires du tableau textes. - textes est un tableau de tableau : la phrase, puis les réponses + textes est un tableau de tableau : la catégorie, la phrase, puis les réponses Dans la grille on mettra une liste avec la question et les réponses Si y'a pas assez, on met la liste vide [] config contient tout ce qu'on veut pour la grille, ici on utilisera les dimensions et les phrases_additionnelles - on enlève aussi les réponses si config['reponses_presentes'] n'est pas là""" - + on enlève aussi les réponses si config['reponses_presentes'] n'est pas là + et on vire les éléments qui ne sont pas de la bonne catégorie""" + e.debug("Début de genere_grille, config : "+str(config), liste_err) + e.debug("textes "+str(textes), liste_err) nblignes, nbcol = config["nblignes"], config["nbcolonnes"] soustab = config.get("phrases_add",[]).copy() # On met les phrases custom en premier soustab = soustab + [ [] ]*config["nbcasesvides"] # On ajoute les blocs vides voulus - #print(soustab) + # Les textes dans lesquels on pioche, sans les catégories ni les trucs qu'on veut pas + textes_propre = [] + categ = config.get("categories",[]) + #print(str(categ)) + for ligne in textes: + if (ligne[0] in categ) or (categ == []) : + # On met cette ligne + if config.get("reponses_presentes", True): # Si on veut les réponses + textes_propre.append(ligne[1:]) + else: + textes_propre.append(ligne[1:2]) # Snas les réponses + e.debug("textes_propre : "+str(textes_propre), liste_err) nbdata = nbcol*nblignes - config["nbcasesvides"]-len(config.get("phrases_add", [])) # Nombre d'entrées à prendre if nbdata>0: # Sinon y'a pas besoin du tableau - if nbdata <= len(textes): - soustab = soustab+random.sample(textes, nbdata) + if nbdata <= len(textes_propre): + soustab = soustab+random.sample(textes_propre, nbdata) else: # on n'a pas assez de textes, on met des 0 - soustab = soustab + textes + ['0']*(nbdata - len(textes)) - + soustab = soustab + textes_propre + [ []]*(nbdata - len(textes_propre)) + + e.debug("Avant mélange : "+str(soustab), liste_err) #print(soustab) # On mélange ! random.shuffle(soustab) - # Si on ne veut pas des réponses, on ne garde que le premier élément - if not(config.get("reponses_presentes", True)): - #print("Je veux pas les réponses !") - soustab = [ [elt[0] ] for elt in soustab ] - #print(soustab) +# # Si on ne veut pas des réponses, on ne garde que le premier élément +# if not(config.get("reponses_presentes", True)): +# #print("Je veux pas les réponses !") +# soustab = [ [elt[0] ] for elt in soustab ] +# #print(soustab) # Créer la grille @@ -83,7 +98,7 @@ def decode_grille(chaineencodee, liste_err): data = json.loads(decodee) return data -########################### +########################### gestion des données web ############################### def gere_donnees_custom(data, liste_err): """ data est le dictionnaire de requête. Gère les données reçues @@ -116,6 +131,13 @@ def gere_donnees_custom(data, liste_err): # Veut-on les réponses ? conf["reponses_presentes"] = gere_checkbox(data.get("reponses_presentes","")) + # Liste des catégories + conf["categories"] = [] + for (key, val) in data.items(): + if key[0:10] == "categorie_" and val=="on": + conf["categories"].append(key[10:]) + + e.debug(str(conf), liste_err) return conf ### Fonctions pour gérer les données saisies diff --git a/static/style.css b/static/style.css index 36d5569..3fc08f7 100644 --- a/static/style.css +++ b/static/style.css @@ -1,8 +1,10 @@ /* Styles divers */ .cliquable { - cursor: pointer; text-decoration: underline; } +.cliquable:hover { + cursor: pointer; +} .petit { font-size: 0.8em; @@ -24,6 +26,11 @@ margin: 0px; padding: 3px ; text-align: center ; + min-width: 10em; + min-height: 3em ; +} +#grille td:hover { + cursor: pointer; } #grille td.vide { -- cgit v1.2.3