mirror of
https://github.com/ChuckBuilds/LEDMatrix.git
synced 2026-04-15 22:53:00 +00:00
less odds ticker logging and skip milb odds check
This commit is contained in:
@@ -307,13 +307,16 @@ class OddsTickerManager:
|
|||||||
url = f"https://site.api.espn.com/apis/site/v2/sports/{sport}/{league}/scoreboard?dates={date}"
|
url = f"https://site.api.espn.com/apis/site/v2/sports/{sport}/{league}/scoreboard?dates={date}"
|
||||||
logger.debug(f"Fetching {league} games from ESPN API for date: {date}")
|
logger.debug(f"Fetching {league} games from ESPN API for date: {date}")
|
||||||
response = requests.get(url, timeout=10)
|
response = requests.get(url, timeout=10)
|
||||||
|
|
||||||
# Handle potential 400 error for MiLB, which seems to be an invalid endpoint
|
|
||||||
if league == 'milb' and response.status_code == 400:
|
|
||||||
logger.warning(f"Received a 400 Bad Request for MiLB on {date}. This league may no longer be supported by the API. Skipping.")
|
|
||||||
continue # Skip to the next date or league
|
|
||||||
|
|
||||||
response.raise_for_status()
|
# MiLB endpoint is flaky; don't treat a bad response as a fatal error.
|
||||||
|
if league != 'milb':
|
||||||
|
response.raise_for_status()
|
||||||
|
|
||||||
|
# If the response isn't good (e.g., 400 for MiLB), just skip this date.
|
||||||
|
if not response.ok:
|
||||||
|
logger.warning(f"Skipping {league} for {date} due to bad response (status: {response.status_code})")
|
||||||
|
continue
|
||||||
|
|
||||||
data = response.json()
|
data = response.json()
|
||||||
for event in data.get('events', []):
|
for event in data.get('events', []):
|
||||||
# Stop if we have enough games for the league (when not showing favorite teams only)
|
# Stop if we have enough games for the league (when not showing favorite teams only)
|
||||||
@@ -347,12 +350,17 @@ class OddsTickerManager:
|
|||||||
# Build game dict (existing logic)
|
# Build game dict (existing logic)
|
||||||
home_record = home_team.get('records', [{}])[0].get('summary', '') if home_team.get('records') else ''
|
home_record = home_team.get('records', [{}])[0].get('summary', '') if home_team.get('records') else ''
|
||||||
away_record = away_team.get('records', [{}])[0].get('summary', '') if away_team.get('records') else ''
|
away_record = away_team.get('records', [{}])[0].get('summary', '') if away_team.get('records') else ''
|
||||||
odds_data = self.odds_manager.get_odds(
|
|
||||||
sport=sport,
|
# As requested by the user, do not fetch odds for MiLB
|
||||||
league=league,
|
odds_data = None
|
||||||
event_id=game_id,
|
if league != 'milb':
|
||||||
update_interval_seconds=7200
|
odds_data = self.odds_manager.get_odds(
|
||||||
)
|
sport=sport,
|
||||||
|
league=league,
|
||||||
|
event_id=game_id,
|
||||||
|
update_interval_seconds=7200
|
||||||
|
)
|
||||||
|
|
||||||
has_odds = False
|
has_odds = False
|
||||||
if odds_data and not odds_data.get('no_odds'):
|
if odds_data and not odds_data.get('no_odds'):
|
||||||
if odds_data.get('spread') is not None:
|
if odds_data.get('spread') is not None:
|
||||||
@@ -386,12 +394,6 @@ class OddsTickerManager:
|
|||||||
# Stop if we have enough games for the league (when not showing favorite teams only)
|
# Stop if we have enough games for the league (when not showing favorite teams only)
|
||||||
if not self.show_favorite_teams_only and max_games_per_league and games_found >= max_games_per_league:
|
if not self.show_favorite_teams_only and max_games_per_league and games_found >= max_games_per_league:
|
||||||
break
|
break
|
||||||
except requests.exceptions.HTTPError as http_err:
|
|
||||||
if league == 'milb' and http_err.response.status_code == 400:
|
|
||||||
logger.warning(f"Received a 400 Bad Request for MiLB on {date}. This may be due to no odds being available or an invalid endpoint. Skipping date.")
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
logger.error(f"HTTP error occurred while fetching games for {league} on {date}: {http_err}")
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error fetching games for {league_config.get('league', 'unknown')} on {date}: {e}", exc_info=True)
|
logger.error(f"Error fetching games for {league_config.get('league', 'unknown')} on {date}: {e}", exc_info=True)
|
||||||
if not self.show_favorite_teams_only and max_games_per_league and games_found >= max_games_per_league:
|
if not self.show_favorite_teams_only and max_games_per_league and games_found >= max_games_per_league:
|
||||||
@@ -493,20 +495,20 @@ class OddsTickerManager:
|
|||||||
broadcast_logo = None
|
broadcast_logo = None
|
||||||
if self.show_channel_logos:
|
if self.show_channel_logos:
|
||||||
broadcast_name = game.get('broadcast_info', '')
|
broadcast_name = game.get('broadcast_info', '')
|
||||||
logger.info(f"Game {game.get('id')}: Raw broadcast info from API: '{broadcast_name}'")
|
logger.debug(f"Game {game.get('id')}: Raw broadcast info from API: '{broadcast_name}'")
|
||||||
if broadcast_name:
|
if broadcast_name:
|
||||||
logo_name = self.BROADCAST_LOGO_MAP.get(broadcast_name)
|
logo_name = self.BROADCAST_LOGO_MAP.get(broadcast_name)
|
||||||
logger.info(f"Game {game.get('id')}: Mapped logo name: '{logo_name}' for broadcast name: '{broadcast_name}'")
|
logger.debug(f"Game {game.get('id')}: Mapped logo name: '{logo_name}' for broadcast name: '{broadcast_name}'")
|
||||||
if logo_name:
|
if logo_name:
|
||||||
broadcast_logo = self._get_team_logo(logo_name, 'assets/broadcast_logos')
|
broadcast_logo = self._get_team_logo(logo_name, 'assets/broadcast_logos')
|
||||||
if broadcast_logo:
|
if broadcast_logo:
|
||||||
logger.info(f"Game {game.get('id')}: Successfully loaded broadcast logo for '{logo_name}'")
|
logger.debug(f"Game {game.get('id')}: Successfully loaded broadcast logo for '{logo_name}'")
|
||||||
else:
|
else:
|
||||||
logger.warning(f"Game {game.get('id')}: Failed to load broadcast logo for '{logo_name}'")
|
logger.warning(f"Game {game.get('id')}: Failed to load broadcast logo for '{logo_name}'")
|
||||||
else:
|
else:
|
||||||
logger.warning(f"Game {game.get('id')}: No mapping found for broadcast name '{broadcast_name}' in BROADCAST_LOGO_MAP")
|
logger.warning(f"Game {game.get('id')}: No mapping found for broadcast name '{broadcast_name}' in BROADCAST_LOGO_MAP")
|
||||||
else:
|
else:
|
||||||
logger.info(f"Game {game.get('id')}: No broadcast info available.")
|
logger.debug(f"Game {game.get('id')}: No broadcast info available.")
|
||||||
|
|
||||||
if home_logo:
|
if home_logo:
|
||||||
home_logo = home_logo.resize((logo_size, logo_size), Image.Resampling.LANCZOS)
|
home_logo = home_logo.resize((logo_size, logo_size), Image.Resampling.LANCZOS)
|
||||||
@@ -679,13 +681,13 @@ class OddsTickerManager:
|
|||||||
|
|
||||||
def _create_ticker_image(self):
|
def _create_ticker_image(self):
|
||||||
"""Create a single wide image containing all game tickers."""
|
"""Create a single wide image containing all game tickers."""
|
||||||
logger.info("Entering _create_ticker_image method")
|
logger.debug("Entering _create_ticker_image method")
|
||||||
if not self.games_data:
|
if not self.games_data:
|
||||||
logger.warning("No games data available, cannot create ticker image.")
|
logger.warning("No games data available, cannot create ticker image.")
|
||||||
self.ticker_image = None
|
self.ticker_image = None
|
||||||
return
|
return
|
||||||
|
|
||||||
logger.info(f"Creating ticker image for {len(self.games_data)} games.")
|
logger.debug(f"Creating ticker image for {len(self.games_data)} games.")
|
||||||
game_images = [self._create_game_display(game) for game in self.games_data]
|
game_images = [self._create_game_display(game) for game in self.games_data]
|
||||||
if not game_images:
|
if not game_images:
|
||||||
logger.warning("Failed to create any game images.")
|
logger.warning("Failed to create any game images.")
|
||||||
@@ -722,7 +724,7 @@ class OddsTickerManager:
|
|||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
"""Update odds ticker data."""
|
"""Update odds ticker data."""
|
||||||
logger.info("Entering update method")
|
logger.debug("Entering update method")
|
||||||
if not self.is_enabled:
|
if not self.is_enabled:
|
||||||
logger.debug("Odds ticker is disabled, skipping update")
|
logger.debug("Odds ticker is disabled, skipping update")
|
||||||
return
|
return
|
||||||
@@ -733,7 +735,7 @@ class OddsTickerManager:
|
|||||||
return
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
logger.info("Updating odds ticker data")
|
logger.debug("Updating odds ticker data")
|
||||||
logger.debug(f"Enabled leagues: {self.enabled_leagues}")
|
logger.debug(f"Enabled leagues: {self.enabled_leagues}")
|
||||||
logger.debug(f"Show favorite teams only: {self.show_favorite_teams_only}")
|
logger.debug(f"Show favorite teams only: {self.show_favorite_teams_only}")
|
||||||
|
|
||||||
@@ -755,14 +757,14 @@ class OddsTickerManager:
|
|||||||
|
|
||||||
def display(self, force_clear: bool = False):
|
def display(self, force_clear: bool = False):
|
||||||
"""Display the odds ticker."""
|
"""Display the odds ticker."""
|
||||||
logger.info("Entering display method")
|
logger.debug("Entering display method")
|
||||||
logger.info(f"Odds ticker enabled: {self.is_enabled}")
|
logger.debug(f"Odds ticker enabled: {self.is_enabled}")
|
||||||
|
|
||||||
if not self.is_enabled:
|
if not self.is_enabled:
|
||||||
logger.debug("Odds ticker is disabled, exiting display method.")
|
logger.debug("Odds ticker is disabled, exiting display method.")
|
||||||
return
|
return
|
||||||
|
|
||||||
logger.info(f"Number of games in data at start of display method: {len(self.games_data)}")
|
logger.debug(f"Number of games in data at start of display method: {len(self.games_data)}")
|
||||||
if not self.games_data:
|
if not self.games_data:
|
||||||
logger.warning("Odds ticker has no games data. Attempting to update...")
|
logger.warning("Odds ticker has no games data. Attempting to update...")
|
||||||
self.update()
|
self.update()
|
||||||
|
|||||||
Reference in New Issue
Block a user