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