From 3e80e68da7f2020214b5fc2c0c7f4c4739ddfd54 Mon Sep 17 00:00:00 2001 From: Samuel ORTION Date: Thu, 26 May 2022 16:14:55 +0200 Subject: [PATCH] Add level --- .gitignore | 2 +- app.py | 31 +++++++-- data/level_species_cleaned.json | 120 ++++++++++++++++++++++++++++++++ game.py | 22 +++--- templates/game/question.html | 2 +- utils/convert_levels.py | 33 +++++++++ utils/generate_levels.py | 46 ++++++++++++ 7 files changed, 238 insertions(+), 18 deletions(-) create mode 100644 data/level_species_cleaned.json create mode 100644 utils/convert_levels.py create mode 100644 utils/generate_levels.py diff --git a/.gitignore b/.gitignore index 1709f0c..800023a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ venv config.py __pycache__ -data/ \ No newline at end of file +src_audio/ \ No newline at end of file diff --git a/app.py b/app.py index 8545252..f1eee14 100644 --- a/app.py +++ b/app.py @@ -62,17 +62,29 @@ def home(): @app.route("/signup", methods=["GET", "POST"]) def signup(): if request.method == "POST": + message = "" username = request.form['username'] + if username == "": + message += gettext("Username empty. Try to find one.") email = request.form['email'] + if email == "": + message += gettext("Email empty. Please give me one.") password = request.form['password'] - registered_user = User.query.filter_by(user_name=username).first() - if registered_user is None: + if password == "": + message += gettext("You should not use an empty password") + registered_user_by_username = User.query.filter_by(user_name=username).first() + registered_user_by_email = User.query.filter_by(user_email=email).first() + if registered_user_by_username is None and registered_user_by_email is None: password_hash = generate_password_hash(password) registered_user = User(user_name=username, user_email=email, user_password=password_hash) db.session.add(registered_user) db.session.commit() else: - return render_template("auth/signup.html", message="Username already used. Try with an other.") + if not registered_user_by_email is None: + message += gettext("Email already used by a user.") + else: + message += gettext("Username already used by a user.") + return render_template("auth/signup.html", message=message) return redirect(url_for("login")) elif request.method == "GET": return render_template("auth/signup.html") @@ -109,9 +121,16 @@ def game(): @app.route("/game/new") def new_game(): - question = Game.new_question() - session["question"] = question - return render_template("game/question.html", question=question) + if not "username" in session: + return redirect(url_for('login')) + user = User.query.filter_by(user_name = session['username']).first() + if user is None: + return redirect(url_for('login')) + else: + level = str(user.user_level) + question = Game.new_question(level) + session["question"] = question + return render_template("game/question.html", question=question) @app.route("/game/answer", methods=["POST", "GET"]) def game_answer(): diff --git a/data/level_species_cleaned.json b/data/level_species_cleaned.json new file mode 100644 index 0000000..cfe01ef --- /dev/null +++ b/data/level_species_cleaned.json @@ -0,0 +1,120 @@ +{ + "1": [ + "Buse variable", + "Merle noir", + "Pic vert", + "Rougegorge familier", + "Mouette rieuse", + "Canard colvert", + "Pinson des arbres", + "Moineau domestique", + "Pie bavarde", + "Corneille noire", + "Faisan de Colchide" + ], + "2": [ + "Grive draine", + "Grande Aigrette", + "Grand Cormoran", + "Foulque macroule", + "Hirondelle rustique", + "Fauvette grisette", + "Troglodyte mignon", + "Bergeronnette grise", + "Choucas des tours", + "Pigeon ramier", + "Rougequeue noir", + "Tourterelle turque" + ], + "3": [ + "Aigrette garzette", + "Grive litorne", + "Accenteur mouchet", + "Bernache du Canada", + "Pipit farlouse", + "Tourterelle des bois", + "Sittelle torchepot", + "Alouette des champs", + "Coucou gris", + "Corbeau freux", + "Martinet noir", + "Bruant zizi" + ], + "4": [ + "Grimpereau des jardins", + "Grive musicienne", + "Bruant jaune", + "Bergeronnette des ruisseaux", + "Sterne pierregarin", + "Bruant des roseaux", + "Milan noir", + "Grand Corbeau", + "Fuligule morillon" + ], + "5": [ + "Gobemouche gris", + "Cigogne blanche", + "Alouette lulu", + "Grive mauvis", + "Tarin des aulnes", + "Chouette hulotte", + "Traquet motteux", + "Milan royal", + "Monticole bleu", + "Canard chipeau" + ], + "6": [ + "Fuligule milouin", + "Chevalier guignette", + "Bouscarle de Cetti", + "Tadorne de Belon", + "Cisticole des joncs", + "Pic noir", + "Nette rousse", + "Petit Gravelot", + "Fauvette des jardins", + "Serin cini" + ], + "7": [ + "Pic mar", + "Perdrix grise", + "Pinson du Nord", + "Bruant proyer", + "Phragmite des joncs", + "Rousserolle effarvatte", + "Pouillot fitis", + "Faucon hobereau" + ], + "8": [ + "Fauvette pitchou", + "Busard des roseaux", + "Canard mandarin", + "Spatule blanche", + "Bernache nonnette", + "Torcol fourmilier", + "Effraie des clochers", + "Sittelle corse", + "Perdrix rouge", + "Hirondelle de rochers", + "Hirondelle de rivage" + ], + "9": [ + "Moineau friquet", + "Bernache cravant", + "Plongeon imbrin", + "Fuligule nyroca", + "Pigeon colombin", + "Grimpereau des bois" + ], + "10": [ + "Petit-duc scops", + "Chevalier sylvain", + "Chevalier gambette", + "Pipit spioncelle", + "Canard souchet", + "Accenteur alpin", + "Sterne naine", + "Chevalier aboyeur", + "Gobemouche noir" + ] +} \ No newline at end of file diff --git a/game.py b/game.py index c1df3ca..d7c7795 100644 --- a/game.py +++ b/game.py @@ -1,31 +1,33 @@ import random import os from glob import glob +import json -bird_species_folders = list(map(os.path.basename, glob("static/data/src_audio/*"))) +with open("./data/level_species_cleaned.json", "r") as f: + LEVEL_SPECIES_LIST = json.load(f) format_name = lambda folder_name : folder_name.replace('_', ' ') +to_folder_name = lambda species_name : species_name.replace(' ', '_').replace('\'', '').lower() -def get_proposals(question_species_name, n): +def get_proposals(question_species_name, available_species, n): proposals = [question_species_name] for i in range(n): - proposition = format_name(random.choice(bird_species_folders)) + proposition = random.choice(available_species) while proposition == question_species_name: - proposition = format_name(random.choice(bird_species_folders)) + proposition = random.choice(available_species) proposals.append(proposition) random.shuffle(proposals) return proposals -def new_question(): - question_species_folder = random.choice(bird_species_folders) - question_species_name = format_name(question_species_folder) - print(question_species_folder) +def new_question(level): + available_species = LEVEL_SPECIES_LIST[level] + question_species_name = random.choice(available_species) + question_species_folder = to_folder_name(question_species_name) question = {} audio_paths = list(map(os.path.basename, glob(f"static/data/src_audio/{question_species_folder}/*.mp3"))) - print(audio_paths) audio_path = random.choice(audio_paths) question["species"] = question_species_name question["species_folder"] = question_species_folder question["audio_path"] = audio_path - question["proposals"] = get_proposals(question_species_name, 5) + question["proposals"] = get_proposals(question_species_name, available_species, 5) return question diff --git a/templates/game/question.html b/templates/game/question.html index ee0267a..2d37991 100644 --- a/templates/game/question.html +++ b/templates/game/question.html @@ -1,6 +1,6 @@ {% extends "base.html" %} {% block content %} - +