summaryrefslogtreecommitdiff
path: root/nba/scores.py
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-15 22:28:45 -0500
committerChristian Cleberg <[email protected]>2026-04-15 22:28:45 -0500
commit4cbe592e0a0fae13f0a89918a66fd983dd84464f (patch)
treec2aac9d6e3c7b0f44adf07b86385f2ce06f1cf10 /nba/scores.py
parent00f695c765aead8aa0160a3c676cf85716178beb (diff)
downloadnba-scores-4cbe592e0a0fae13f0a89918a66fd983dd84464f.tar.gz
nba-scores-4cbe592e0a0fae13f0a89918a66fd983dd84464f.tar.bz2
nba-scores-4cbe592e0a0fae13f0a89918a66fd983dd84464f.zip
feat: add Textual TUI with auto-refresh, leaders, playoff picture, and box score
Introduces an interactive terminal UI via the `--tui` flag backed by the Textual framework. Scores and standings auto-refresh on a configurable interval (default 60s, minimum 10s) using asyncio with nba_api calls offloaded to a thread pool to keep the event loop unblocked. New tabs: - Scores / Standings (existing views, now live-updating) - Leaders: top-25 by stat category, cycle with < / > keys - Playoff Picture: conference seeding with clinch/elimination status - Box Score: per-player live stats, load any game with keys 1–9 Refactored scores.py and standings.py to separate rendering from I/O (get_scoreboard_table, get_east/west_standings_table), keeping the existing static CLI path fully intact. Added -sc / -st shortcut flags. Adds textual>=0.89.1,<7.0 dependency, build-system declaration for uv, and package-data entry for the bundled .tcss stylesheet.
Diffstat (limited to 'nba/scores.py')
-rw-r--r--nba/scores.py28
1 files changed, 22 insertions, 6 deletions
diff --git a/nba/scores.py b/nba/scores.py
index 47ed552..28e4e82 100644
--- a/nba/scores.py
+++ b/nba/scores.py
@@ -31,20 +31,26 @@ def get_team_record(team_name, standings) -> str:
return "N/A"
-def build_scoreboard(games, standings) -> None:
+def get_scoreboard_table(games, standings) -> str:
"""
- Prints the current day's games in a table format.
+ Builds and returns the current day's games as a formatted table string.
Args:
games (dict): JSON parsed games data.
standings (dict): Team standings data.
+
+ Returns:
+ str: Formatted table string with ANSI color codes.
"""
scoreboard_data = games["scoreboard"]
- games = scoreboard_data["games"]
+ game_list = scoreboard_data["games"]
+
+ if not game_list:
+ return "No games scheduled today."
# Prepare the table data
table_data = []
- for game in games:
+ for game in game_list:
home_team = game["homeTeam"]["teamName"]
away_team = game["awayTeam"]["teamName"]
game_status = game["gameStatusText"]
@@ -86,5 +92,15 @@ def build_scoreboard(games, standings) -> None:
# Define the table headers
headers = ["Team", "Score", "Game Status"]
- # Print the table
- print(tabulate(table_data, headers=headers, tablefmt="grid"))
+ return tabulate(table_data, headers=headers, tablefmt="grid")
+
+
+def build_scoreboard(games, standings) -> None:
+ """
+ Prints the current day's games in a table format.
+
+ Args:
+ games (dict): JSON parsed games data.
+ standings (dict): Team standings data.
+ """
+ print(get_scoreboard_table(games, standings))