Skip to content
Snippets Groups Projects
Commit 47e8fefe authored by Martin Mareš's avatar Martin Mareš
Browse files

mo.score: Typování

parent 6b0427b4
Branches
No related tags found
No related merge requests found
...@@ -3,7 +3,7 @@ from sqlalchemy import and_ ...@@ -3,7 +3,7 @@ from sqlalchemy import and_
from sqlalchemy.orm import joinedload from sqlalchemy.orm import joinedload
from sqlalchemy.orm.query import Query from sqlalchemy.orm.query import Query
from sqlalchemy.sql.expression import select 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 import mo.db as db
from mo.util import normalize_grade from mo.util import normalize_grade
...@@ -36,15 +36,15 @@ class ScoreResult: ...@@ -36,15 +36,15 @@ class ScoreResult:
# vzestupně (pro sestupné třídění podle čísla je potřeba klíč vynásobit -1) # vzestupně (pro sestupné třídění podle čísla je potřeba klíč vynásobit -1)
_order_key: List[Any] _order_key: List[Any]
_null_score_order = ScoreOrder(0)
def __init__(self, user: db.User, pant: db.Participant, pion: db.Participation): def __init__(self, user: db.User, pant: db.Participant, pion: db.Participation):
self.user = user self.user = user
self.pant = pant self.pant = pant
self.pion = pion self.pion = pion
self._sols = {} self._sols = {}
self.order = 1 self.order = ScoreResult._null_score_order
self.place_span = 1
self.place_continuation = False
self.winner = False self.winner = False
self.successful = False self.successful = False
self._order_key = [] self._order_key = []
...@@ -75,7 +75,7 @@ class ScoreTask: ...@@ -75,7 +75,7 @@ class ScoreTask:
def get_difficulty(self) -> Fraction: def get_difficulty(self) -> Fraction:
if self.num_solutions == 0: if self.num_solutions == 0:
return 0 return Fraction(0)
return Fraction(self.sum_points, self.num_solutions) return Fraction(self.sum_points, self.num_solutions)
...@@ -141,7 +141,7 @@ class Score: ...@@ -141,7 +141,7 @@ class Score:
self._load_tasks_and_sols(0, round, contest_subq) self._load_tasks_and_sols(0, round, contest_subq)
self._mark_winners() 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""" """Obecná funkce na načtení úloh a řešení tohoto nebo předchozího kola"""
if step in self._tasks: if step in self._tasks:
return return
...@@ -253,7 +253,7 @@ class Score: ...@@ -253,7 +253,7 @@ class Score:
results: List[ScoreResult] = sorted(self._results.values(), key=lambda result: ( 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 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í, # 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 # ve druhém kroku je pak správně rozkopírujeme s nastaveným continuation na True
for result in results: for result in results:
...@@ -266,7 +266,7 @@ class Score: ...@@ -266,7 +266,7 @@ class Score:
else: else:
result.order = ScoreOrder(last.order.place + last.order.span) result.order = ScoreOrder(last.order.place + last.order.span)
last = result last = result
lastOrder: ScoreOrder = None lastOrder: Optional[ScoreOrder] = None
for result in results: for result in results:
if result.order == lastOrder: if result.order == lastOrder:
result.order = ScoreOrder(lastOrder.place, lastOrder.span, True) result.order = ScoreOrder(lastOrder.place, lastOrder.span, True)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment