From d4f828d189d141f44d5e0a8db6ecbff9dac0c7cd Mon Sep 17 00:00:00 2001 From: Chuck <33324927+ChuckBuilds@users.noreply.github.com> Date: Wed, 30 Sep 2026 20:25:52 -0400 Subject: [PATCH] refactor(sports): a default _determine_game_type on SportsScrollDisplay render_vegas_card looked the method up with getattr and a None default, which static analysis (Codacy) reports as calling something that may not be callable. The base class now has the default -- the card type from the game's state -- and the plugins that define their own override it as before. Co-Authored-By: Claude Opus 5.5 --- src/common/sports_scroll.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/common/sports_scroll.py b/src/common/sports_scroll.py index 97442dd0..31d84b8c 100644 --- a/src/common/sports_scroll.py +++ b/src/common/sports_scroll.py @@ -437,12 +437,17 @@ class SportsScrollDisplay: raise NotImplementedError( f"{type(self).__name__} has no live Vegas cards (make_vegas_renderer)") + def _determine_game_type(self, game: Dict[str, Any]) -> str: + """The card a game is drawn as: 'live', 'recent' or 'upcoming'. + + From the game's state; a sport whose scroll display decides it + differently (most define their own) overrides this. + """ + return {'in': 'live', 'post': 'recent'}.get(sports_vegas._state(game), 'upcoming') + def render_vegas_card(self, renderer: Any, game: Dict[str, Any]) -> Image.Image: """Draw one game's card. Override only if the renderer is called differently.""" - determine = getattr(self, '_determine_game_type', None) - game_type = determine(game) if callable(determine) else { - 'in': 'live', 'post': 'recent'}.get(sports_vegas._state(game), 'upcoming') - card: Image.Image = renderer.render_game_card(game, game_type) + card: Image.Image = renderer.render_game_card(game, self._determine_game_type(game)) return card def vegas_separator(self, league: str) -> Optional[Image.Image]: