summaryrefslogtreecommitdiff
path: root/build
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-05-06 23:26:32 -0500
committerChristian Cleberg <[email protected]>2026-05-06 23:26:32 -0500
commitc112ed86bafa47aa2141b626a5592bd06cbc81f6 (patch)
treeca45d134f33907671ca0f22be75e69f57d301d16 /build
parente98e9dd6415b958cc3e38ea8c07e99e4a4311c78 (diff)
downloadnba-scores-c112ed86bafa47aa2141b626a5592bd06cbc81f6.tar.gz
nba-scores-c112ed86bafa47aa2141b626a5592bd06cbc81f6.tar.bz2
nba-scores-c112ed86bafa47aa2141b626a5592bd06cbc81f6.zip
feat: add playoff bracket status accents
Diffstat (limited to 'build')
-rw-r--r--build/lib/nba/__pycache__/bracket.cpython-314.pycbin0 -> 17306 bytes
-rw-r--r--build/lib/nba/bracket.py36
2 files changed, 32 insertions, 4 deletions
diff --git a/build/lib/nba/__pycache__/bracket.cpython-314.pyc b/build/lib/nba/__pycache__/bracket.cpython-314.pyc
new file mode 100644
index 0000000..e26db27
--- /dev/null
+++ b/build/lib/nba/__pycache__/bracket.cpython-314.pyc
Binary files differ
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])