diff options
author | Denise sur Lya <sekhmet@lya> | 2021-07-28 13:43:30 +0200 |
---|---|---|
committer | Denise sur Lya <sekhmet@lya> | 2021-07-28 13:43:30 +0200 |
commit | 451bdc74fe50a124a3fe0733b675c8f01b50ee53 (patch) | |
tree | 342322f3b37bfacc750e2ce9477f6ad0a5419a1d | |
parent | 77986b320dfc33625ea2df7f4049cb6c7f8c222e (diff) | |
download | bingo-451bdc74fe50a124a3fe0733b675c8f01b50ee53.tar.gz bingo-451bdc74fe50a124a3fe0733b675c8f01b50ee53.tar.zst bingo-451bdc74fe50a124a3fe0733b675c8f01b50ee53.zip |
Gestion des catégories
-rw-r--r-- | app.py | 16 | ||||
-rw-r--r-- | config.py | 3 | ||||
-rw-r--r-- | data_textes.py | 17 | ||||
-rw-r--r-- | gere_grille.py | 52 | ||||
-rw-r--r-- | static/style.css | 9 |
5 files changed, 71 insertions, 26 deletions
@@ -11,7 +11,8 @@ Created on Mon Jul 26 17:31:48 2021 | |||
11 | 11 | ||
12 | import flask | 12 | import flask |
13 | 13 | ||
14 | from data_textes import tabletextes, tablecomplete, extraire_textes_par_cat | 14 | import data_textes as data |
15 | #from data_textes import tabletextes, tablecomplete, extraire_textes_par_cat | ||
15 | import gere_grille as g | 16 | import gere_grille as g |
16 | import gere_erreurs as e | 17 | import gere_erreurs as e |
17 | from config import DEFAUT, CONFIG | 18 | from config import DEFAUT, CONFIG |
@@ -33,12 +34,15 @@ app = flask.Flask(__name__) | |||
33 | @app.route('/', methods=["GET", "POST"]) | 34 | @app.route('/', methods=["GET", "POST"]) |
34 | def index(): | 35 | def index(): |
35 | liste_err = e.initialise_erreurs() | 36 | liste_err = e.initialise_erreurs() |
37 | tablecomplete = data.lire_fichier_csv_simple(data.fichier_bingo) | ||
38 | #categ= data.extraire_categories(tablecomplete) | ||
36 | #print(tabletextes) | 39 | #print(tabletextes) |
37 | idg = flask.request.args.get("grille", "") # Id de grille passée en param (ou pas) | 40 | idg = flask.request.args.get("grille", "") # Id de grille passée en param (ou pas) |
38 | if idg != "": # Si on a mis un url de grille | 41 | if idg != "": # Si on a mis un url de grille |
39 | conf = g.decode_grille(idg, liste_err) | 42 | conf = g.decode_grille(idg, liste_err) |
40 | if conf == {}: # Erreur à la génération | 43 | if conf == {}: # Erreur à la génération |
41 | bingo = g.genere_grille(DEFAUT, tabletextes) | 44 | #tabletextes = data.extraire_qr(tablecomplete, categ) # Toutes les remarques |
45 | bingo = g.genere_grille(DEFAUT, tablecomplete, liste_err) | ||
42 | conf = DEFAUT.copy() | 46 | conf = DEFAUT.copy() |
43 | e.erreur("L'url de la grille n'est pas valide...", liste_err) | 47 | e.erreur("L'url de la grille n'est pas valide...", liste_err) |
44 | else: | 48 | else: |
@@ -49,7 +53,8 @@ def index(): | |||
49 | conf = g.gere_donnees_custom(flask.request.form, liste_err) | 53 | conf = g.gere_donnees_custom(flask.request.form, liste_err) |
50 | else: | 54 | else: |
51 | conf= DEFAUT.copy() | 55 | conf= DEFAUT.copy() |
52 | bingo = g.genere_grille(conf, tabletextes) # aléatoire | 56 | #tabletextes = data.extraire_qr(tablecomplete, conf["categories"]) |
57 | bingo = g.genere_grille(conf, tablecomplete, liste_err) # aléatoire avec la config donnée | ||
53 | 58 | ||
54 | chainecode = g.encode_grille(conf, bingo, liste_err) | 59 | chainecode = g.encode_grille(conf, bingo, liste_err) |
55 | 60 | ||
@@ -58,11 +63,12 @@ def index(): | |||
58 | 63 | ||
59 | @app.route('/custom') | 64 | @app.route('/custom') |
60 | def custom(): | 65 | def custom(): |
66 | tablecomplete = data.lire_fichier_csv_simple(data.fichier_bingo) | ||
67 | categ, tableqr = data.extraire_textes_par_cat(tablecomplete) | ||
61 | liste_err = e.initialise_erreurs() | 68 | liste_err = e.initialise_erreurs() |
62 | categ, tableqr = extraire_textes_par_cat(tablecomplete) | ||
63 | nombre_categ = [len(elt) for elt in tableqr] | 69 | nombre_categ = [len(elt) for elt in tableqr] |
64 | print(nombre_categ) | 70 | print(nombre_categ) |
65 | 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]) | 71 | 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]) |
66 | 72 | ||
67 | if __name__ == "__main__": | 73 | if __name__ == "__main__": |
68 | # print("Mode debug maison : "+str(niveau_debug)) | 74 | # print("Mode debug maison : "+str(niveau_debug)) |
@@ -13,6 +13,9 @@ DEFAUT["nblignes"] = 4 | |||
13 | DEFAUT["nbcolonnes"] = 3 | 13 | DEFAUT["nbcolonnes"] = 3 |
14 | DEFAUT["nbcasesvides"] = 0 | 14 | DEFAUT["nbcasesvides"] = 0 |
15 | DEFAUT["reponses_presentes"] = True # veut-on proposer les réponses | 15 | DEFAUT["reponses_presentes"] = True # veut-on proposer les réponses |
16 | DEFAUT["categories"] = [] # Tout | ||
17 | |||
18 | # Score | ||
16 | 19 | ||
17 | # Configuration | 20 | # Configuration |
18 | 21 | ||
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): | |||
74 | 74 | ||
75 | return (categ,tableqr) | 75 | return (categ,tableqr) |
76 | 76 | ||
77 | def extraire_qr(table): | 77 | def extraire_qr(table, listecateg): |
78 | """ on enlève juste la catégorie en début de ligne""" | 78 | """ |
79 | table2 = [ ligne[1:] for ligne in table] | 79 | table est la table des remarques. On sélectionne uniquement |
80 | les remarques des catégories de la liste et | ||
81 | on enlève juste la catégorie en début de ligne | ||
82 | Si listecateg est vide on met tout le monde. | ||
83 | """ | ||
84 | table2 = [] | ||
85 | for ligne in table: | ||
86 | if ligne[0] in listecateg or listecateg == []: | ||
87 | table2.append(ligne[1:]) | ||
80 | return table2 | 88 | return table2 |
81 | 89 | ||
82 | tablecomplete = lire_fichier_csv_simple(fichier_bingo) | 90 | |
83 | tabletextes = extraire_qr(tablecomplete) | ||
84 | 91 | ||
85 | #liste_cat, liste_textes = extraire_textes_par_cat(lire_fichier_csv_simple(fichier_bingo)) \ No newline at end of file | 92 | #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 | |||
9 | import gere_erreurs as e | 9 | import gere_erreurs as e |
10 | from config import DEFAUT, CONFIG | 10 | from config import DEFAUT, CONFIG |
11 | 11 | ||
12 | def genere_grille(config, textes): | 12 | |
13 | def genere_grille(config, textes, liste_err): | ||
13 | """ génère une grille avec des éléments aléatoires du tableau textes. | 14 | """ génère une grille avec des éléments aléatoires du tableau textes. |
14 | textes est un tableau de tableau : la phrase, puis les réponses | 15 | textes est un tableau de tableau : la catégorie, la phrase, puis les réponses |
15 | Dans la grille on mettra une liste avec la question et les réponses | 16 | Dans la grille on mettra une liste avec la question et les réponses |
16 | Si y'a pas assez, on met la liste vide [] | 17 | Si y'a pas assez, on met la liste vide [] |
17 | 18 | ||
18 | config contient tout ce qu'on veut pour la grille, | 19 | config contient tout ce qu'on veut pour la grille, |
19 | ici on utilisera les dimensions et les phrases_additionnelles | 20 | ici on utilisera les dimensions et les phrases_additionnelles |
20 | on enlève aussi les réponses si config['reponses_presentes'] n'est pas là""" | 21 | on enlève aussi les réponses si config['reponses_presentes'] n'est pas là |
21 | 22 | et on vire les éléments qui ne sont pas de la bonne catégorie""" | |
23 | e.debug("Début de genere_grille, config : "+str(config), liste_err) | ||
24 | e.debug("textes "+str(textes), liste_err) | ||
22 | nblignes, nbcol = config["nblignes"], config["nbcolonnes"] | 25 | nblignes, nbcol = config["nblignes"], config["nbcolonnes"] |
23 | 26 | ||
24 | 27 | ||
25 | soustab = config.get("phrases_add",[]).copy() # On met les phrases custom en premier | 28 | soustab = config.get("phrases_add",[]).copy() # On met les phrases custom en premier |
26 | soustab = soustab + [ [] ]*config["nbcasesvides"] # On ajoute les blocs vides voulus | 29 | soustab = soustab + [ [] ]*config["nbcasesvides"] # On ajoute les blocs vides voulus |
27 | 30 | ||
28 | #print(soustab) | 31 | # Les textes dans lesquels on pioche, sans les catégories ni les trucs qu'on veut pas |
32 | textes_propre = [] | ||
33 | categ = config.get("categories",[]) | ||
34 | #print(str(categ)) | ||
35 | for ligne in textes: | ||
36 | if (ligne[0] in categ) or (categ == []) : | ||
37 | # On met cette ligne | ||
38 | if config.get("reponses_presentes", True): # Si on veut les réponses | ||
39 | textes_propre.append(ligne[1:]) | ||
40 | else: | ||
41 | textes_propre.append(ligne[1:2]) # Snas les réponses | ||
42 | e.debug("textes_propre : "+str(textes_propre), liste_err) | ||
29 | 43 | ||
30 | nbdata = nbcol*nblignes - config["nbcasesvides"]-len(config.get("phrases_add", [])) # Nombre d'entrées à prendre | 44 | nbdata = nbcol*nblignes - config["nbcasesvides"]-len(config.get("phrases_add", [])) # Nombre d'entrées à prendre |
31 | if nbdata>0: # Sinon y'a pas besoin du tableau | 45 | if nbdata>0: # Sinon y'a pas besoin du tableau |
32 | if nbdata <= len(textes): | 46 | if nbdata <= len(textes_propre): |
33 | soustab = soustab+random.sample(textes, nbdata) | 47 | soustab = soustab+random.sample(textes_propre, nbdata) |
34 | else: # on n'a pas assez de textes, on met des 0 | 48 | else: # on n'a pas assez de textes, on met des 0 |
35 | soustab = soustab + textes + ['0']*(nbdata - len(textes)) | 49 | soustab = soustab + textes_propre + [ []]*(nbdata - len(textes_propre)) |
36 | 50 | ||
51 | e.debug("Avant mélange : "+str(soustab), liste_err) | ||
37 | #print(soustab) | 52 | #print(soustab) |
38 | # On mélange ! | 53 | # On mélange ! |
39 | random.shuffle(soustab) | 54 | random.shuffle(soustab) |
40 | 55 | ||
41 | # Si on ne veut pas des réponses, on ne garde que le premier élément | 56 | # # Si on ne veut pas des réponses, on ne garde que le premier élément |
42 | if not(config.get("reponses_presentes", True)): | 57 | # if not(config.get("reponses_presentes", True)): |
43 | #print("Je veux pas les réponses !") | 58 | # #print("Je veux pas les réponses !") |
44 | soustab = [ [elt[0] ] for elt in soustab ] | 59 | # soustab = [ [elt[0] ] for elt in soustab ] |
45 | #print(soustab) | 60 | # #print(soustab) |
46 | 61 | ||
47 | 62 | ||
48 | # Créer la grille | 63 | # Créer la grille |
@@ -83,7 +98,7 @@ def decode_grille(chaineencodee, liste_err): | |||
83 | data = json.loads(decodee) | 98 | data = json.loads(decodee) |
84 | return data | 99 | return data |
85 | 100 | ||
86 | ########################### | 101 | ########################### gestion des données web ############################### |
87 | 102 | ||
88 | def gere_donnees_custom(data, liste_err): | 103 | def gere_donnees_custom(data, liste_err): |
89 | """ data est le dictionnaire de requête. Gère les données reçues | 104 | """ 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): | |||
116 | # Veut-on les réponses ? | 131 | # Veut-on les réponses ? |
117 | conf["reponses_presentes"] = gere_checkbox(data.get("reponses_presentes","")) | 132 | conf["reponses_presentes"] = gere_checkbox(data.get("reponses_presentes","")) |
118 | 133 | ||
134 | # Liste des catégories | ||
135 | conf["categories"] = [] | ||
136 | for (key, val) in data.items(): | ||
137 | if key[0:10] == "categorie_" and val=="on": | ||
138 | conf["categories"].append(key[10:]) | ||
139 | |||
140 | e.debug(str(conf), liste_err) | ||
119 | return conf | 141 | return conf |
120 | 142 | ||
121 | ### Fonctions pour gérer les données saisies | 143 | ### 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 @@ | |||
1 | /* Styles divers */ | 1 | /* Styles divers */ |
2 | .cliquable { | 2 | .cliquable { |
3 | cursor: pointer; | ||
4 | text-decoration: underline; | 3 | text-decoration: underline; |
5 | } | 4 | } |
5 | .cliquable:hover { | ||
6 | cursor: pointer; | ||
7 | } | ||
6 | 8 | ||
7 | .petit { | 9 | .petit { |
8 | font-size: 0.8em; | 10 | font-size: 0.8em; |
@@ -24,6 +26,11 @@ | |||
24 | margin: 0px; | 26 | margin: 0px; |
25 | padding: 3px ; | 27 | padding: 3px ; |
26 | text-align: center ; | 28 | text-align: center ; |
29 | min-width: 10em; | ||
30 | min-height: 3em ; | ||
31 | } | ||
32 | #grille td:hover { | ||
33 | cursor: pointer; | ||
27 | } | 34 | } |
28 | 35 | ||
29 | #grille td.vide { | 36 | #grille td.vide { |