From 972646d8be5e318fac321e11a60aca4903bd9b73 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ji=C5=99=C3=AD=20Setni=C4=8Dka?= <setnicka@seznam.cz>
Date: Fri, 19 Mar 2021 01:18:55 +0100
Subject: [PATCH] =?UTF-8?q?Score:=20Check=20obodov=C3=A1n=C3=AD=20a=20nahr?=
 =?UTF-8?q?=C3=A1n=C3=AD=20=C5=99e=C5=A1en=C3=AD=20=C3=BAloh?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Scházející body jsou error, scházející oprava jen warning.

Řeší #172 Pre-flight check
---
 mo/score.py | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/mo/score.py b/mo/score.py
index 92ae5044..29f112cb 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():
-- 
GitLab