From 47e8fefe93cd874507a586e225f01cb8c7ddd753 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Mon, 1 Mar 2021 11:51:07 +0100
Subject: [PATCH] =?UTF-8?q?mo.score:=20Typov=C3=A1n=C3=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 mo/score.py | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/mo/score.py b/mo/score.py
index aba2ffe7..a000cb8b 100644
--- a/mo/score.py
+++ b/mo/score.py
@@ -3,7 +3,7 @@ from sqlalchemy import and_
 from sqlalchemy.orm import joinedload
 from sqlalchemy.orm.query import Query
 from sqlalchemy.sql.expression import select
-from typing import Any, List, Tuple, Optional, Dict
+from typing import Any, List, Tuple, Optional, Dict, Union
 
 import mo.db as db
 from mo.util import normalize_grade
@@ -36,15 +36,15 @@ class ScoreResult:
     # vzestupně (pro sestupné třídění podle čísla je potřeba klíč vynásobit -1)
     _order_key: List[Any]
 
+    _null_score_order = ScoreOrder(0)
+
     def __init__(self, user: db.User, pant: db.Participant, pion: db.Participation):
         self.user = user
         self.pant = pant
         self.pion = pion
 
         self._sols = {}
-        self.order = 1
-        self.place_span = 1
-        self.place_continuation = False
+        self.order = ScoreResult._null_score_order
         self.winner = False
         self.successful = False
         self._order_key = []
@@ -75,7 +75,7 @@ class ScoreTask:
 
     def get_difficulty(self) -> Fraction:
         if self.num_solutions == 0:
-            return 0
+            return Fraction(0)
         return Fraction(self.sum_points, self.num_solutions)
 
 
@@ -141,7 +141,7 @@ class Score:
         self._load_tasks_and_sols(0, round, contest_subq)
         self._mark_winners()
 
-    def _load_tasks_and_sols(self, step: int, round: db.Round, contest_subq: Query):
+    def _load_tasks_and_sols(self, step: int, round: db.Round, contest_subq: Union[Query, List[int]]):
         """Obecná funkce na načtení úloh a řešení tohoto nebo předchozího kola"""
         if step in self._tasks:
             return
@@ -253,7 +253,7 @@ class Score:
         results: List[ScoreResult] = sorted(self._results.values(), key=lambda result: (
             result._order_key, result.user.last_name, result.user.first_name, result.user.user_id
         ))
-        last: ScoreResult = None
+        last: Optional[ScoreResult] = None
         # Spočítáme pořadí - v prvním kroku prolinkujeme opakující se ScoreOrder na první,
         # ve druhém kroku je pak správně rozkopírujeme s nastaveným continuation na True
         for result in results:
@@ -266,7 +266,7 @@ class Score:
             else:
                 result.order = ScoreOrder(last.order.place + last.order.span)
                 last = result
-        lastOrder: ScoreOrder = None
+        lastOrder: Optional[ScoreOrder] = None
         for result in results:
             if result.order == lastOrder:
                 result.order = ScoreOrder(lastOrder.place, lastOrder.span, True)
-- 
GitLab