less odds ticker logging and skip milb odds check

This commit is contained in:
Chuck
2025-07-22 16:15:43 -05:00
parent 2e7644b2ea
commit 045f51ed96

View File

@@ -308,12 +308,15 @@ class OddsTickerManager:
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 # MiLB endpoint is flaky; don't treat a bad response as a fatal error.
if league == 'milb' and response.status_code == 400: if league != 'milb':
logger.warning(f"Received a 400 Bad Request for MiLB on {date}. This league may no longer be supported by the API. Skipping.") response.raise_for_status()
continue # Skip to the next date or league
# 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
response.raise_for_status()
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()