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

261 lines
9.6 KiB
Python

""" MMA specific functionality"""
import logging
from .models import TeamTrackerValues
from .utils import get_value
_LOGGER = logging.getLogger(__name__)
class SetMMAMixin:
_sensor_name: str
_values: TeamTrackerValues
def _set_mma_values(
self,
event, competition_index, team_index
) -> bool:
"""Set MMA specific values"""
_LOGGER.debug("%s: async_set_mma_values() 1: %s", self._sensor_name, self._sensor_name)
oppo_index = 1 - team_index
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:
# _LOGGER.debug("%s: async_set_mma_values() 1.1: %s", sensor_name, sensor_name)
return False
# _LOGGER.debug("%s: async_set_mma_values() 2: %s %s %s", sensor_name, competition_index, team_index, oppo_index)
self._values.event_name = get_value(event, "name")
t = 0
o = 0
for ls in range(
0,
len(
get_value(
competitor, "linescores", -1, "linescores", default=[]
)
),
):
# _LOGGER.debug("%s: async_set_mma_values() 2.1: %s", sensor_name, ls)
if get_value(
competitor, "linescores", -1, "linescores", ls, "value", default=0
) > get_value(
opponent, "linescores", -1, "linescores", ls, "value", default=0
):
t = t + 1
if get_value(
competitor, "linescores", -1, "linescores", ls, "value", default=0
) < get_value(
opponent, "linescores", -1, "linescores", ls, "value", default=0
):
o = o + 1
self._values.team_score = str(t)
self._values.opponent_score = str(o)
if t == o:
# _LOGGER.debug("%s: async_set_mma_values() 3: %s", sensor_name, sensor_name)
if get_value(competitor, "winner", default=False):
self._values.team_score = "W"
self._values.opponent_score = "L"
if get_value(opponent, "winner", default=False):
self._values.team_score = "L"
self._values.opponent_score = "W"
# _LOGGER.debug("%s: async_set_mma_values() 4: %s %s %s", sensor_name, competition_index, team_index, oppo_index)
self._values.last_play = self._get_prior_fights(event)
# _LOGGER.debug("%s: async_set_mma_values() 5: %s %s %s", sensor_name, competition_index, team_index, oppo_index)
return True
def _get_prior_fights(self, event) -> str:
"""Get the results of the prior fights"""
prior_fights = ""
# _LOGGER.debug("%s: async_get_prior_fights() 1: %s", sensor_name, sensor_name)
c = 1
for competition in get_value(event, "competitions", default=[]):
# _LOGGER.debug("%s: _get_prior_fights() 2: %s", sensor_name, sensor_name)
if (
str(
get_value(
competition, "status", "type", "state", default="NOT_FOUND"
)
).upper()
== "POST"
):
# _LOGGER.debug("%s: async_get_prior_fights() 2.1: %s", sensor_name, sensor_name)
prior_fights = prior_fights + str(c) + ". "
if get_value(
competition, "competitors", 0, "winner", default=False
):
prior_fights = (
prior_fights
+ "*"
+ str(
get_value(
competition,
"competitors",
0,
"athlete",
"shortName",
default="{shortName}",
)
).upper()
)
else:
prior_fights = prior_fights + str(
get_value(
competition,
"competitors",
0,
"athlete",
"shortName",
default="{shortName}",
)
)
prior_fights = prior_fights + " v. "
if get_value(
competition, "competitors", 1, "winner", default=False
):
prior_fights = (
prior_fights
+ str(
get_value(
competition,
"competitors",
1,
"athlete",
"shortName",
default="{shortName}",
)
).upper()
+ "*"
)
else:
prior_fights = prior_fights + str(
get_value(
competition,
"competitors",
1,
"athlete",
"shortName",
default="{shortName}",
)
)
f1 = 0
f2 = 0
t = 0
# _LOGGER.debug("%s: async_get_prior_fights() 2.2: %s", sensor_name, len(get_value(competition, "competitors", 0, "linescores", 0, "linescores", default=[])))
for ls in range(
0,
len(
get_value(
competition,
"competitors",
0,
"linescores",
0,
"linescores",
default=[],
)
),
):
# _LOGGER.debug("%s: async_get_prior_fights() 2.3: %s %s %s %s", sensor_name, ls, f1, f2, t)
if int(
get_value(
competition,
"competitors",
0,
"linescores",
0,
"linescores",
ls,
"value",
default=0,
)
) > int(
get_value(
competition,
"competitors",
1,
"linescores",
0,
"linescores",
ls,
"value",
default=0,
)
):
f1 = f1 + 1
elif int(
get_value(
competition,
"competitors",
0,
"linescores",
0,
"linescores",
ls,
"value",
default=0,
)
) < int(
get_value(
competition,
"competitors",
1,
"linescores",
0,
"linescores",
ls,
"value",
default=0,
)
):
f2 = f2 + 1
else:
t = t + 1
# _LOGGER.debug("%s: async_get_prior_fights() 3: %s %s %s %s %s", sensor_name, f1, f2, t, prior_fights)
if f1 == 0 and f2 == 0 and t == 0:
prior_fights = (
prior_fights
+ " (KO/TKO/Sub: R"
+ str(
get_value(
competition, "status", "period", default="{period}"
)
)
+ "@"
+ str(
get_value(
competition,
"status",
"displayClock",
default="{displayClock}",
)
)
)
else:
prior_fights = prior_fights + " (Dec: " + str(f1) + "-" + str(f2)
if t != 0:
prior_fights = prior_fights + "-" + str(t)
prior_fights = prior_fights + "); "
c = c + 1
# _LOGGER.debug("%s: async_get_prior_fights() 4: %s", sensor_name, prior_fights)
return prior_fights