from flask_bootstrap import Bootstrap5 from flask import Flask, render_template, request import utils import random import config app = Flask(__name__) bootstrap = Bootstrap5(app) utils.check_conditions() def get_questions(categories, num): question_pool = [] weights = [] for c in categories: for q in utils.get_questions_by_category(c): weight = utils.get_question_weights(c, q) question_pool.append((c, q)) weights.append(weight) if num > len(question_pool): num = len(question_pool) if num == 0: return {} selected_question_tuples = [] while len(selected_question_tuples) < num: selected = random.choices(question_pool, weights)[0] if selected not in selected_question_tuples: selected_question_tuples.append(selected) questions = {} for category, question in selected_question_tuples: utils.set_question_selected(category, question) if category not in questions: questions[category] = [] questions[category].append(question) utils.save_weights() return questions @app.route("/", methods=["POST", "GET"]) def index(): categories = utils.get_categories() selected = categories n = config.get_num_questions() questions = {} if request.method == "POST": selected = request.form.getlist("categories[]") n = int(request.form.get("num")) questions = get_questions(selected, n) return render_template("index.html", categories=categories, selected=selected, n=n, questions=questions) if __name__ == '__main__': app.run()