Skip to content

Commit

Permalink
refactor: optimise calc
Browse files Browse the repository at this point in the history
  • Loading branch information
daxartio committed Nov 29, 2023
1 parent d0f971f commit 5e270ae
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 38 deletions.
1 change: 0 additions & 1 deletion sportorg/common/broker.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import datetime
import logging

from sportorg.common.singleton import singleton
Expand Down
67 changes: 35 additions & 32 deletions sportorg/models/result/result_calculation.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
from sportorg.common.otime import OTime
from sportorg.models.constant import RankingTable
from sportorg.models.memory import (
Group,
Qualification,
RaceType,
RelayTeam,
Expand All @@ -16,6 +15,8 @@
class ResultCalculation:
def __init__(self, r):
self.race = r
self._group_finishes = {}
self._group_persons = {}

def process_results(self):
logging.debug('Process results')
Expand Down Expand Up @@ -47,6 +48,8 @@ def process_results(self):
self.set_rank(i)

def get_group_finishes(self, group):
if group in self._group_finishes:
return self._group_finishes[group]
ret = []
for i in self.race.results:
person = i.person
Expand All @@ -55,15 +58,19 @@ def get_group_finishes(self, group):
ret.append(i)
ret.sort()
group.count_finished = len(ret)
self._group_finishes[group] = ret
return ret

def get_group_persons(self, group):
if group in self._group_persons:
return self._group_persons[group]
ret = []
for i in self.race.persons:
person = i
if person.group is group:
ret.append(i)
group.count_person = len(ret)
self._group_persons[group] = ret
return ret

@staticmethod
Expand Down Expand Up @@ -98,40 +105,36 @@ def set_places(array):
res.current_result = res.get_result()

def process_relay_results(self, group):
if group and isinstance(group, Group):
results = self.get_group_finishes(group)
results = self.get_group_finishes(group)

relay_teams = {}
for res in results:
bib = res.person.bib

team_number = bib % 1000
if str(team_number) not in relay_teams:
new_team = RelayTeam(self.race)
new_team.group = group
new_team.bib_number = team_number
relay_teams[str(team_number)] = new_team

team = relay_teams[str(team_number)]
team.add_result(res)
teams_sorted = sorted(relay_teams.values())
place = 1 # place to show
order = 1 # order for templates
for cur_team in teams_sorted:
if (
not cur_team.get_is_status_ok()
or cur_team.get_is_out_of_competition()
):
cur_team.set_place(-1)
else:
cur_team.set_place(place)
place += 1
relay_teams = {}
for res in results:
bib = res.person.bib

team_number = bib % 1000
if str(team_number) not in relay_teams:
new_team = RelayTeam(self.race)
new_team.group = group
new_team.bib_number = team_number
relay_teams[str(team_number)] = new_team

team = relay_teams[str(team_number)]
team.add_result(res)
teams_sorted = sorted(relay_teams.values())
place = 1 # place to show
order = 1 # order for templates
for cur_team in teams_sorted:
if not cur_team.get_is_status_ok() or cur_team.get_is_out_of_competition():
cur_team.set_place(-1)
else:
cur_team.set_place(place)
place += 1

cur_team.set_order(order)
order += 1
cur_team.set_order(order)
order += 1

cur_team.set_start_times()
return relay_teams.values()
cur_team.set_start_times()
return relay_teams.values()

def set_rank(self, group):
ranking = group.ranking
Expand Down
4 changes: 2 additions & 2 deletions sportorg/models/result/result_checker.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,8 @@ def checking(cls, result):

return o

@classmethod
def check_all(cls):
@staticmethod
def check_all():
logging.debug('Checking all results')
for result in race().results:
if result.person:
Expand Down
5 changes: 2 additions & 3 deletions sportorg/models/result/score_calculation.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,8 @@ def get_group_region_results(self, group, region):

@staticmethod
def get_region_for_organization(org):
if org:
if org.region:
return org.region
if org and org.region:
return org.region
return None

def get_all_regions(self):
Expand Down

0 comments on commit 5e270ae

Please sign in to comment.