103 lines
4.2 KiB
Python
103 lines
4.2 KiB
Python
""" Tennis specific functionality"""
|
|
|
|
import logging
|
|
|
|
from .models import TeamTrackerValues
|
|
from .utils import get_value
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
class SetTennisMixin:
|
|
_values: TeamTrackerValues
|
|
|
|
def _set_tennis_values(
|
|
self,
|
|
event, grouping_index, competition_index, team_index
|
|
) -> bool:
|
|
"""Set tennis specific values"""
|
|
|
|
# _LOGGER.debug("%s: async_set_tennis_values() 0: %s %s %s", self._sensor_name, self._sensor_name, grouping_index, competition_index)
|
|
|
|
oppo_index = 1 - team_index
|
|
|
|
grouping = get_value(event, "groupings", grouping_index)
|
|
if grouping is None:
|
|
competition = get_value(event, "competitions", competition_index)
|
|
else:
|
|
competition = get_value(grouping, "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:
|
|
# _LOGGER.debug("%s: async_set_tennis_values() 0.1: %s", self._sensor_name, self._sensor_name)
|
|
return False
|
|
|
|
self._values.location = get_value(competition, "venue", "court")
|
|
self._values.down_distance_text = get_value(competition, "round", "displayName")
|
|
self._values.overunder = get_value(competition, "type", "text")
|
|
self._values.team_rank = get_value(competitor, "tournamentSeed")
|
|
self._values.opponent_rank = get_value(opponent, "tournamentSeed")
|
|
|
|
self._values.clock = get_value(
|
|
competition,
|
|
"status",
|
|
"type",
|
|
"detail",
|
|
default=get_value(event, "status", "type", "shortDetail"),
|
|
)
|
|
|
|
# _LOGGER.debug("%s: async_set_tennis_values() 2: %s", self._sensor_name, self._sensor_name)
|
|
|
|
# Current set score
|
|
self._values.team_score = get_value(competitor, "linescores", -1, "value")
|
|
self._values.opponent_score = get_value(opponent, "linescores", -1, "value")
|
|
|
|
# Tiebreak points
|
|
self._values.team_shots_on_target = get_value(competitor, "linescores", -1, "tiebreak")
|
|
self._values.opponent_shots_on_target = get_value(opponent, "linescores", -1, "tiebreak")
|
|
|
|
# Final Match Score (Sets Won)
|
|
if self._values.state == "POST":
|
|
t_sets = 0
|
|
o_sets = 0
|
|
for x in range(0, len(get_value(competitor, "linescores", default=[]))):
|
|
if int(get_value(competitor, "linescores", x, "value", default=0)) > \
|
|
int(get_value(opponent, "linescores", x, "value", default=0)):
|
|
t_sets += 1
|
|
else:
|
|
o_sets += 1
|
|
self._values.team_score = str(t_sets)
|
|
self._values.opponent_score = str(o_sets)
|
|
|
|
# Construct last_play string for set history
|
|
last_play = ""
|
|
linescores = get_value(competitor, "linescores", default=[])
|
|
sets_count = len(linescores)
|
|
|
|
for x in range(0, sets_count):
|
|
t_name = get_value(competitor, "athlete", "shortName",
|
|
default=get_value(competitor, "roster", "shortDisplayName", default="{shortName}"))
|
|
o_name = get_value(opponent, "athlete", "shortName",
|
|
default=get_value(opponent, "roster", "shortDisplayName", default="{shortName}"))
|
|
|
|
t_val = int(get_value(competitor, "linescores", x, "value", default=0))
|
|
o_val = int(get_value(opponent, "linescores", x, "value", default=0))
|
|
|
|
last_play += f" Set {x + 1}: {t_name} {t_val} {o_name} {o_val}; "
|
|
|
|
self._values.last_play = last_play
|
|
|
|
# Sets won tracking (excluding current set if still live)
|
|
team_sets_won = 0
|
|
opponent_sets_won = 0
|
|
for x in range(0, sets_count - 1):
|
|
if get_value(competitor, "linescores", x, "value", default=0) > \
|
|
get_value(opponent, "linescores", x, "value", default=0):
|
|
team_sets_won += 1
|
|
else:
|
|
opponent_sets_won += 1
|
|
self._values.team_sets_won = str(team_sets_won)
|
|
self._values.opponent_sets_won = str(opponent_sets_won)
|
|
|
|
return True |