def app_logged_in(subj_name): user = get_current_user() if user is None: return redirect(url_for("index")) subject_list = list(Subject.find({"hidden": False})) if subj_name not in [sub["name"] for sub in subject_list]: abort(404) exclude = request.args.get("exclude", "").split() subject = Subject.find_one({"name": subj_name}) task_types = TaskType.find({"subject": subject.id}) tasks = [] for tt in task_types: if tt.number in exclude: continue rel_tasks = Task.find({"task_type": tt.id}) task = choice(list(rel_tasks)) session["task" + str(tt.number)] = str(task.id) text = None if task.text.pk is not None: text = task.text.fetch().body tasks.append({ "number": tt.number, "description": eval('"' + task.description + '"'), "text": text, "options": task.options, }) return render( "practice.html", title="Тест", header_label="Тест в формате ЕГЭ", current_subj=subj_name, current_mode="practice", subject_list=subject_list, tasks=tasks, )
def task_practice(subj_name, task_id): if get_current_user() is None: return redirect(url_for("index")) if subj_name != "russian": abort(404) user = get_current_user() subject = Subject.find_one({"name": subj_name}) subject_list = list(Subject.find({"hidden": False})) task_type = TaskType.find_one({ "subject": subject.id, "number": str(task_id) }) tasks = [] raw_tasks = Task.find({"task_type": task_type.id}) for task in raw_tasks: tl = TaskLink.find_one({"task": task.id, "user": user.id}) text = None if task.text.pk is not None: text = task.text.fetch().body tasks.append({ "id": str(task.id), "number": task_type.number, "description": eval('"' + task.description + '"'), "text": str(text), "options": task.options, "done": tl.done if tl else False, "answers": task.answers, "explanation": task.explanation, }) return render( "task-practice.html", title="Задания", header_label="Практика задания", current_subj=subj_name, subject_list=subject_list, tasks=tasks, )