diff --git a/formula10/__init__.py b/formula10/__init__.py index e6ab84a..8784d66 100644 --- a/formula10/__init__.py +++ b/formula10/__init__.py @@ -41,6 +41,7 @@ import formula10.controller.error_controller # General # - Decouple names from IDs + Fix Valtteri/Russel spelling errors # - Unit testing (as much as possible, but especially points calculation) +# - Add links to the official F1 stats page (for quali/result) # Possible but probably not # - Show cards of previous race results, like with season guesses? diff --git a/formula10/domain/points_model.py b/formula10/domain/points_model.py index 6517f95..90295c2 100644 --- a/formula10/domain/points_model.py +++ b/formula10/domain/points_model.py @@ -1,10 +1,11 @@ -from typing import Dict, List, overload +from typing import Callable, Dict, List, overload import numpy as np from formula10.domain.domain_model import Model from formula10.domain.model.driver import NONE_DRIVER from formula10.domain.model.race_guess import RaceGuess from formula10.domain.model.race_result import RaceResult +from formula10.domain.model.user import User RACE_GUESS_OFFSET_POINTS: Dict[int, int] = { 3: 1, @@ -156,6 +157,10 @@ class PointsModel(Model): """ return sum(self.points_by(user_name=user_name)) + def users_sorted_by_points(self) -> List[User]: + comparator: Callable[[User], int] = lambda user: self.total_points_by(user.name) + return sorted(self.all_users(), key=comparator, reverse=True) + def picks_count(self, user_name: str) -> int: # Treat standing + dnf picks separately return len(self.race_guesses_by(user_name=user_name)) * 2 diff --git a/formula10/templates/statistics.jinja b/formula10/templates/statistics.jinja index 44802ab..b4b214b 100644 --- a/formula10/templates/statistics.jinja +++ b/formula10/templates/statistics.jinja @@ -23,7 +23,7 @@ - {% for user in model.all_users() %} + {% for user in points.users_sorted_by_points() %} {{ user.name }} {{ points.total_points_by(user.name) }}