Skip to content
Snippets Groups Projects

Vylepšení výsledkové listiny

Merged Martin Mareš requested to merge mj/vysledky-p into devel
1 unresolved thread
1 file
+ 8
8
Compare changes
  • Side-by-side
  • Inline
+ 8
8
@@ -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)
Loading