Files
LEDMatrix/test/test_leaderboard_simple.py
Chuck fc06493990 Fix/logo download permission error (#70)
* fix: Resolve permission errors when downloading sports logos

- Fix fix_assets_permissions.sh to use correct directory name 'ncaa_logos' instead of 'ncaa_fbs_logos'
- Add comprehensive permission checking in logo downloader
- Improve error handling with specific permission error messages
- Add write access testing before attempting logo downloads
- Provide clear instructions to run permission fix script when errors occur

Fixes: [Errno 13] Permission denied errors when downloading team logos like SELA.png

* fix: Update first_time_install.sh to use correct ncaa_logos directory

- Fix manual permission setting section to use 'ncaa_logos' instead of 'ncaa_fbs_logos'
- Ensures consistency across all installation scripts
- Prevents permission issues during first-time installation

* fix: Update all remaining references from ncaa_fbs_logos to ncaa_logos

- Fix README.md directory reference
- Update wiki documentation files (MANAGER_GUIDE_COMPREHENSIVE.md, TEAM_ABBREVIATIONS_AND_LEAGUE_SLUGS.md)
- Fix test files (save_missing_teams.py, test_ranking_toggle.py, test_leaderboard_simple.py)
- Update missing_team_logos.txt with correct directory paths

Ensures complete consistency across the entire project for NCAA logo directory naming.
2025-09-25 19:21:26 -04:00

206 lines
6.8 KiB
Python

#!/usr/bin/env python3
"""
Simple test script for the LeaderboardManager (without display dependencies)
"""
import sys
import os
import json
import logging
import requests
from typing import Dict, Any, List, Optional
from datetime import datetime, timedelta, timezone
from PIL import Image, ImageDraw, ImageFont
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
def test_espn_api():
"""Test ESPN API endpoints for standings."""
# Test different league endpoints
test_leagues = [
{
'name': 'NFL',
'url': 'https://site.api.espn.com/apis/site/v2/sports/football/nfl/standings'
},
{
'name': 'NBA',
'url': 'https://site.api.espn.com/apis/site/v2/sports/basketball/nba/standings'
},
{
'name': 'MLB',
'url': 'https://site.api.espn.com/apis/site/v2/sports/baseball/mlb/standings'
}
]
for league in test_leagues:
print(f"\nTesting {league['name']} API...")
try:
response = requests.get(league['url'], timeout=30)
response.raise_for_status()
data = response.json()
print(f"{league['name']} API response successful")
# Check if we have groups data
groups = data.get('groups', [])
print(f" Groups found: {len(groups)}")
# Try to extract some team data
total_teams = 0
for group in groups:
if 'standings' in group:
total_teams += len(group['standings'])
elif 'groups' in group:
# Handle nested groups (like NFL conferences/divisions)
for sub_group in group['groups']:
if 'standings' in sub_group:
total_teams += len(sub_group['standings'])
elif 'groups' in sub_group:
for sub_sub_group in sub_group['groups']:
if 'standings' in sub_sub_group:
total_teams += len(sub_sub_group['standings'])
print(f" Total teams found: {total_teams}")
except Exception as e:
print(f"{league['name']} API failed: {e}")
def test_standings_parsing():
"""Test parsing standings data."""
# Test NFL standings parsing using teams endpoint
print("\nTesting NFL standings parsing...")
try:
# First get all teams
teams_url = 'https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams'
response = requests.get(teams_url, timeout=30)
response.raise_for_status()
data = response.json()
sports = data.get('sports', [])
if not sports:
print("✗ No sports data found")
return
leagues = sports[0].get('leagues', [])
if not leagues:
print("✗ No leagues data found")
return
teams = leagues[0].get('teams', [])
if not teams:
print("✗ No teams data found")
return
print(f"Found {len(teams)} NFL teams")
# Test fetching individual team records
standings = []
test_teams = teams[:5] # Test first 5 teams to avoid too many API calls
for team_data in test_teams:
team = team_data.get('team', {})
team_abbr = team.get('abbreviation')
team_name = team.get('name', 'Unknown')
if not team_abbr:
continue
print(f" Fetching record for {team_abbr}...")
# Fetch individual team record
team_url = f"https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams/{team_abbr}"
team_response = requests.get(team_url, timeout=30)
team_response.raise_for_status()
team_data = team_response.json()
team_info = team_data.get('team', {})
stats = team_info.get('stats', [])
# Find wins and losses
wins = 0
losses = 0
ties = 0
for stat in stats:
if stat.get('name') == 'wins':
wins = stat.get('value', 0)
elif stat.get('name') == 'losses':
losses = stat.get('value', 0)
elif stat.get('name') == 'ties':
ties = stat.get('value', 0)
# Calculate win percentage
total_games = wins + losses + ties
win_percentage = wins / total_games if total_games > 0 else 0
standings.append({
'name': team_name,
'abbreviation': team_abbr,
'wins': wins,
'losses': losses,
'ties': ties,
'win_percentage': win_percentage
})
# Sort by win percentage and show results
standings.sort(key=lambda x: x['win_percentage'], reverse=True)
print("NFL team records:")
for i, team in enumerate(standings):
record = f"{team['wins']}-{team['losses']}"
if team['ties'] > 0:
record += f"-{team['ties']}"
print(f" {i+1}. {team['abbreviation']} {record} ({team['win_percentage']:.3f})")
except Exception as e:
print(f"✗ NFL standings parsing failed: {e}")
def test_logo_loading():
"""Test logo loading functionality."""
print("\nTesting logo loading...")
# Test team logo loading
logo_dir = "assets/sports/nfl_logos"
test_teams = ["TB", "DAL", "NE"]
for team in test_teams:
logo_path = os.path.join(logo_dir, f"{team}.png")
if os.path.exists(logo_path):
print(f"{team} logo found: {logo_path}")
else:
print(f"{team} logo not found: {logo_path}")
# Test league logo loading
league_logos = [
"assets/sports/nfl_logos/nfl.png",
"assets/sports/nba_logos/nba.png",
"assets/sports/mlb_logos/mlb.png",
"assets/sports/nhl_logos/nhl.png",
"assets/sports/ncaa_logos/ncaa_fb.png",
"assets/sports/ncaa_logos/ncaam.png"
]
for logo_path in league_logos:
if os.path.exists(logo_path):
print(f"✓ League logo found: {logo_path}")
else:
print(f"✗ League logo not found: {logo_path}")
if __name__ == "__main__":
print("Testing LeaderboardManager components...")
test_espn_api()
test_standings_parsing()
test_logo_loading()
print("\nTest completed!")