diff --git a/mo/score.py b/mo/score.py index 92ae5044de9d71f32e5798efb62f7596beeb197d..29f112cbe628c769f065928c41c3324767a7179c 100644 --- a/mo/score.py +++ b/mo/score.py @@ -7,7 +7,7 @@ from typing import Any, List, Tuple, Optional, Dict, Union import mo.db as db from mo.util import normalize_grade -from mo.util_format import inflect_with_number +from mo.util_format import inflect_number, inflect_with_number class ScoreOrder: @@ -149,6 +149,23 @@ class Score: self._load_tasks_and_sols(0, round, contest_subq) self._mark_winners() + # Kontrola řešení + missing_points = {task_id: 0 for task_id in self._tasks[0].keys()} + missing_feedbacks = {task_id: 0 for task_id in self._tasks[0].keys()} + total_counts = {task_id: 0 for task_id in self._tasks[0].keys()} + for result in self._results.values(): + for sol in result._sols[0].values(): + total_counts[sol.task_id] += 1 + if sol.points is None: + missing_points[sol.task_id] += 1 + if sol.final_feedback is None: + missing_feedbacks[sol.task_id] += 1 + for t in self.get_tasks(): + if missing_points[t.task_id] > 0: + self._add_message("error", f"{t.code} – schází zadané body u {missing_points[t.task_id]} řešení z {total_counts[t.task_id]}") + if missing_feedbacks[t.task_id] > 0: + self._add_message("warning", f"{t.code} – schází nahraná oprava u {missing_feedbacks[t.task_id]} řešení z {total_counts[t.task_id]}") + # Vynecháme účastníky, kteří nic neodevzdali to_remove = [] for user_id, results in self._results.items():