Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 25 additions & 1 deletion src/base_classes/sports.py
Original file line number Diff line number Diff line change
Expand Up @@ -522,7 +522,8 @@ def _get_weeks_data(self) -> Optional[Dict]:
"""
try:
# Fetch current week and next few days for immediate display
now = datetime.now(pytz.utc)
tz = pytz.timezone("EST")
now = datetime.now(tz)
immediate_events = []

start_date = now + timedelta(weeks=-2)
Expand All @@ -545,6 +546,29 @@ def _get_weeks_data(self) -> Optional[Dict]:
def _custom_scorebug_layout(self, game: dict, draw_overlay: ImageDraw.ImageDraw):
pass

def get_days_between_dates(self, start_date: datetime, end_date: datetime) -> list[datetime]:
"""
Generates a list of all days between two given dates, inclusive.

Args:
start_date: The starting date (datetime.date object).
end_date: The ending date (datetime.date object).

Returns:
A list of datetime.date objects representing each day in the range.
"""
if start_date > end_date:
# Handle cases where the start date is after the end date
# You might raise an error, return an empty list, or swap them
# For this example, we'll return an empty list.
return []

days_list = []
current_date = start_date
while current_date <= end_date:
days_list.append(current_date)
current_date += timedelta(days=1)
return days_list
class SportsUpcoming(SportsCore):
def __init__(self, config: Dict[str, Any], display_manager: DisplayManager, cache_manager: CacheManager, logger: logging.Logger, sport_key: str):
super().__init__(config, display_manager, cache_manager, logger, sport_key)
Expand Down
64 changes: 63 additions & 1 deletion src/ncaam_basketball_managers.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import itertools
import logging
from datetime import datetime
from datetime import datetime, timedelta, timezone
from pathlib import Path
from typing import Any, Dict, Optional

Expand Down Expand Up @@ -65,6 +66,67 @@ def __init__(
)
self.league = "mens-college-basketball"

def _get_events(self, start_date: datetime, end_date: datetime) -> Optional[Dict]:
"""
Get partial data for immediate display while background fetch is in progress.
This fetches current/recent games only for quick response.
"""
events = []
for group, date in list(
itertools.product(
[50, 51], self.get_days_between_dates(start_date, end_date)
)
):
try:
# Fetch todays games only
url = f"https://site.api.espn.com/apis/site/v2/sports/{self.sport}/{self.league}/scoreboard"
print(date)
print(group)
response = self.session.get(
url,
params={
"date": date.strftime("%Y%m%d"),
"limit": 1000,
"groups": group,
},
headers=self.headers,
timeout=10,
)
response.raise_for_status()
data = response.json()
events.extend(data.get("events", []))
print(len(events))
except requests.exceptions.RequestException as e:
self.logger.error(
f"API error fetching todays games for {self.sport} - {self.league}: {e}"
)
return None
self.logger.info(
f"Fetched {len(events)} todays games for {self.sport} - {self.league}"
)
print(len(events))
return {"events": events}

def _get_weeks_data(self) -> Optional[Dict]:
"""
Get partial data for immediate display while background fetch is in progress.
This fetches current/recent games only for quick response.
"""
tz = pytz.timezone("EST")
now = datetime.now(tz)
start_date = now + timedelta(weeks=-2)
end_date = now + timedelta(weeks=1)
return self._get_events(start_date, end_date)

def _fetch_todays_games(self) -> Dict | None:
"""Fetch only today's games for live updates (not entire season)."""
tz = pytz.timezone("EST")
now = datetime.now(tz)
yesterday = now - timedelta(days=1)
data = self._get_events(yesterday, now)
# print(data)
return data

def _fetch_ncaam_basketball_api_data(
self, use_cache: bool = True
) -> Optional[Dict]:
Expand Down