Files
HomeAssistance/custom_components/teamtracker/set_golf.py
T
2026-06-05 22:34:31 -04:00

107 lines
3.7 KiB
Python

""" Golf specific functionality"""
import logging
from .models import TeamTrackerValues
from .utils import get_value, is_integer
_LOGGER = logging.getLogger(__name__)
class SetGolfMixin:
_values: TeamTrackerValues
def _set_golf_values(
self,
event, competition_index, team_index
) -> bool:
"""Set golf specific values"""
oppo_index = 1 if team_index == 0 else 0
competition = get_value(event, "competitions", competition_index)
competitor = get_value(competition, "competitors", team_index)
opponent = get_value(competition, "competitors", oppo_index)
if competition is None or competitor is None or opponent is None:
return False
if self._values.state in ["IN", "POST"]:
self._values.team_rank = self._get_golf_position(competition, team_index)
self._values.opponent_rank = self._get_golf_position(
competition, oppo_index
)
else:
self._values.team_rank = None
self._values.opponent_rank = None
if self._values.state in ["IN", "POST"]:
if self._values.quarter and is_integer(self._values.quarter):
golf_round = int(self._values.quarter) - 1
else:
golf_round = 0
self._values.team_total_shots = get_value(
competitor, "linescores", golf_round, "value", default=0
)
self._values.team_shots_on_target = len(
get_value(
competitor, "linescores", golf_round, "linescores", default=[]
)
)
self._values.opponent_total_shots = get_value(
opponent, "linescores", golf_round, "value", default=0
)
self._values.opponent_shots_on_target = len(
get_value(
opponent, "linescores", golf_round, "linescores", default=[]
)
)
self._values.last_play = ""
for x in range(0, 10):
p = self._get_golf_position(competition, x)
self._values.last_play = self._values.last_play + p + ". "
self._values.last_play = self._values.last_play + get_value(
competition, "competitors", x, "athlete", "shortName",
default=get_value(
competition, "competitors", x, "team", "shortDisplayName", default=""
)
)
self._values.last_play = (
str(self._values.last_play)
+ " ("
+ str(
get_value(
competition, "competitors", x, "score", default=""
)
)
+ "), "
)
self._values.last_play = self._values.last_play[:-1]
return True
def _get_golf_position(self, competition, index) -> str:
"""Determine the position of index considering ties if score matches leading or trailing position"""
t = 0
tie = ""
for x in range(1, index + 1):
if get_value(
competition, "competitors", x, "score", default=1000
) == get_value(
competition, "competitors", t, "score", default=1001
):
tie = "T"
else:
tie = ""
t = x
if get_value(
competition, "competitors", index, "score", default=1000
) == get_value(
competition, "competitors", index + 1, "score", default=1001
):
tie = "T"
return tie + str(t + 1)