diff options
| author | Christian Cleberg <[email protected]> | 2026-05-06 23:26:32 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-05-06 23:26:32 -0500 |
| commit | c112ed86bafa47aa2141b626a5592bd06cbc81f6 (patch) | |
| tree | ca45d134f33907671ca0f22be75e69f57d301d16 | |
| parent | e98e9dd6415b958cc3e38ea8c07e99e4a4311c78 (diff) | |
| download | nba-scores-c112ed86bafa47aa2141b626a5592bd06cbc81f6.tar.gz nba-scores-c112ed86bafa47aa2141b626a5592bd06cbc81f6.tar.bz2 nba-scores-c112ed86bafa47aa2141b626a5592bd06cbc81f6.zip | |
feat: add playoff bracket status accents
| -rw-r--r-- | build/lib/nba/__pycache__/bracket.cpython-314.pyc | bin | 0 -> 17306 bytes | |||
| -rw-r--r-- | build/lib/nba/bracket.py | 36 | ||||
| -rw-r--r-- | nba/bracket.py | 36 | ||||
| -rw-r--r-- | nba_scores.egg-info/PKG-INFO | 2 | ||||
| -rw-r--r-- | pyproject.toml | 2 |
5 files changed, 66 insertions, 10 deletions
diff --git a/build/lib/nba/__pycache__/bracket.cpython-314.pyc b/build/lib/nba/__pycache__/bracket.cpython-314.pyc Binary files differnew file mode 100644 index 0000000..e26db27 --- /dev/null +++ b/build/lib/nba/__pycache__/bracket.cpython-314.pyc diff --git a/build/lib/nba/bracket.py b/build/lib/nba/bracket.py index a7f98b5..cc41fcd 100644 --- a/build/lib/nba/bracket.py +++ b/build/lib/nba/bracket.py @@ -3,6 +3,7 @@ Fetches and formats the NBA playoff bracket. """ import json +import re from collections import defaultdict from typing import Optional @@ -13,6 +14,10 @@ from nba_api.stats.static import teams BOLD = "\033[1m" END = "\033[0m" GREEN = "\033[32m" +RED = "\033[91m" +YELLOW = "\033[33m" +CYAN = "\033[36m" +ANSI_RE = re.compile(r"\033\[[0-9;]*m") ROUND_LABELS = { 1: "First Round", @@ -54,6 +59,8 @@ def get_bracket_table(data: dict) -> str: return "\n".join( [ _center(f"{BOLD}NBA Playoff Bracket{END}", 74), + f"{GREEN}* Advanced{END} {RED}x Eliminated{END} " + f"{CYAN}> Series lead{END} {YELLOW}! Can clinch next win{END}", "", _render_conference("Western", summaries), "", @@ -182,7 +189,7 @@ def _render_finals(summaries: dict) -> str: if final is None: lines.append("Winner TBD") elif final["winner"]: - lines.append(f"{GREEN}{final['winner']} wins the Finals{END}") + lines.append(f"{BOLD}{GREEN}{final['winner']} wins the Finals{END}") return "\n".join(lines) @@ -209,20 +216,36 @@ def _series_box(summary: Optional[dict], width: int) -> str: visitor = _team_line( summary["visitor_abbr"], summary["visitor_wins"], + summary["home_wins"], summary["winner"] == summary["visitor_abbr"], + summary["winner"] == summary["home_abbr"], ) home = _team_line( summary["home_abbr"], summary["home_wins"], + summary["visitor_wins"], summary["winner"] == summary["home_abbr"], + summary["winner"] == summary["visitor_abbr"], ) - return f"{visitor} / {home}".ljust(width) + return _pad_ansi(f"{visitor} / {home}", width) -def _team_line(abbr: str, wins: int, won_series: bool) -> str: +def _team_line( + abbr: str, + wins: int, + opponent_wins: int, + won_series: bool, + lost_series: bool, +) -> str: label = f"{abbr} {wins}" if won_series: - return f"{label}*" + return f"{BOLD}{GREEN}{label}*{END}" + if lost_series: + return f"{RED}{label}x{END}" + if wins == 3: + return f"{BOLD}{YELLOW}{label}!{END}" + if wins > opponent_wins: + return f"{CYAN}{label}>{END}" return label @@ -248,6 +271,11 @@ def _center(text: str, width: int) -> str: return text.center(width) +def _pad_ansi(text: str, width: int) -> str: + visible_length = len(ANSI_RE.sub("", text)) + return text + " " * max(width - visible_length, 0) + + def _round_number(series_id: str) -> int: try: return int(series_id[-3:-1]) diff --git a/nba/bracket.py b/nba/bracket.py index a7f98b5..cc41fcd 100644 --- a/nba/bracket.py +++ b/nba/bracket.py @@ -3,6 +3,7 @@ Fetches and formats the NBA playoff bracket. """ import json +import re from collections import defaultdict from typing import Optional @@ -13,6 +14,10 @@ from nba_api.stats.static import teams BOLD = "\033[1m" END = "\033[0m" GREEN = "\033[32m" +RED = "\033[91m" +YELLOW = "\033[33m" +CYAN = "\033[36m" +ANSI_RE = re.compile(r"\033\[[0-9;]*m") ROUND_LABELS = { 1: "First Round", @@ -54,6 +59,8 @@ def get_bracket_table(data: dict) -> str: return "\n".join( [ _center(f"{BOLD}NBA Playoff Bracket{END}", 74), + f"{GREEN}* Advanced{END} {RED}x Eliminated{END} " + f"{CYAN}> Series lead{END} {YELLOW}! Can clinch next win{END}", "", _render_conference("Western", summaries), "", @@ -182,7 +189,7 @@ def _render_finals(summaries: dict) -> str: if final is None: lines.append("Winner TBD") elif final["winner"]: - lines.append(f"{GREEN}{final['winner']} wins the Finals{END}") + lines.append(f"{BOLD}{GREEN}{final['winner']} wins the Finals{END}") return "\n".join(lines) @@ -209,20 +216,36 @@ def _series_box(summary: Optional[dict], width: int) -> str: visitor = _team_line( summary["visitor_abbr"], summary["visitor_wins"], + summary["home_wins"], summary["winner"] == summary["visitor_abbr"], + summary["winner"] == summary["home_abbr"], ) home = _team_line( summary["home_abbr"], summary["home_wins"], + summary["visitor_wins"], summary["winner"] == summary["home_abbr"], + summary["winner"] == summary["visitor_abbr"], ) - return f"{visitor} / {home}".ljust(width) + return _pad_ansi(f"{visitor} / {home}", width) -def _team_line(abbr: str, wins: int, won_series: bool) -> str: +def _team_line( + abbr: str, + wins: int, + opponent_wins: int, + won_series: bool, + lost_series: bool, +) -> str: label = f"{abbr} {wins}" if won_series: - return f"{label}*" + return f"{BOLD}{GREEN}{label}*{END}" + if lost_series: + return f"{RED}{label}x{END}" + if wins == 3: + return f"{BOLD}{YELLOW}{label}!{END}" + if wins > opponent_wins: + return f"{CYAN}{label}>{END}" return label @@ -248,6 +271,11 @@ def _center(text: str, width: int) -> str: return text.center(width) +def _pad_ansi(text: str, width: int) -> str: + visible_length = len(ANSI_RE.sub("", text)) + return text + " " * max(width - visible_length, 0) + + def _round_number(series_id: str) -> int: try: return int(series_id[-3:-1]) diff --git a/nba_scores.egg-info/PKG-INFO b/nba_scores.egg-info/PKG-INFO index 9e5fcd8..f089880 100644 --- a/nba_scores.egg-info/PKG-INFO +++ b/nba_scores.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.4 Name: nba-scores -Version: 0.2.2 +Version: 0.2.3 Summary: A CLI interface to get current NBA scores and standings. Author-email: Christian Cleberg <[email protected]> License-Expression: GPL-3.0-or-later diff --git a/pyproject.toml b/pyproject.toml index 288fc27..3bc4240 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "nba-scores" -version = "0.2.2" +version = "0.2.3" authors = [ { name="Christian Cleberg", email="[email protected]" }, ] |
