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

mo.score: Typování

parent 6b0427b4
No related branches found
No related tags found
No related merge requests found
This commit is part of merge request !36. Comments created here will be created in the context of that merge request.
......@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment