From 294521e453d4d2e7fd6ff54e4c8b2e99d818830c Mon Sep 17 00:00:00 2001 From: Erik Johnson Date: Thu, 7 Oct 2021 19:22:35 -0500 Subject: [PATCH] Scores updates (#826) * Fix NameError * Change Cleveland Baseball Team to Guardians * Update NBA game clock parsing code to reflect API change --- i3pystatus/scores/__init__.py | 2 +- i3pystatus/scores/mlb.py | 2 +- i3pystatus/scores/nba.py | 32 +++++++++++++++++++++----------- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/i3pystatus/scores/__init__.py b/i3pystatus/scores/__init__.py index e544cb2..5eefe3a 100644 --- a/i3pystatus/scores/__init__.py +++ b/i3pystatus/scores/__init__.py @@ -114,7 +114,7 @@ class ScoresBackend(SettingsBase): suffix = 'th' else: ord_map = {1: 'st', 2: 'nd', 3: 'rd'} - suffix = ordmap.get(number % 10, 'th') + suffix = ord_map.get(number % 10, 'th') return f'{number}{suffix}' @staticmethod diff --git a/i3pystatus/scores/mlb.py b/i3pystatus/scores/mlb.py index 2a9fa1e..99a7a08 100644 --- a/i3pystatus/scores/mlb.py +++ b/i3pystatus/scores/mlb.py @@ -62,7 +62,7 @@ class MLB(ScoresBackend): * **BOS** — Boston Red Sox * **CHC** — Chicago Cubs * **CIN** — Cincinnati Reds - * **CLE** — Cleveland Indians + * **CLE** — Cleveland Guardians * **COL** — Colorado Rockies * **CWS** — Chicago White Sox * **DET** — Detroit Tigers diff --git a/i3pystatus/scores/nba.py b/i3pystatus/scores/nba.py index df7f131..a7757e7 100644 --- a/i3pystatus/scores/nba.py +++ b/i3pystatus/scores/nba.py @@ -3,6 +3,7 @@ from i3pystatus.scores import ScoresBackend import copy import pytz +import re import time from datetime import datetime, timezone @@ -206,12 +207,11 @@ class NBA(ScoresBackend): ret['live_url'] = self.live_url.format(id=ret['id']) status_map = { - '1': 'pregame', - '2': 'in_progress', - '3': 'final', + 1: 'pregame', + 2: 'in_progress', + 3: 'final', } - period_data = game.get('period_time', {}) - status_code = period_data.get('game_status', '1') + status_code = int(game.get('gameStatus', 1)) status = status_map.get(status_code) if status is None: self.logger.debug( @@ -221,8 +221,8 @@ class NBA(ScoresBackend): ret['status'] = status_map[status_code] if ret['status'] in ('in_progress', 'final'): - period_number = int(period_data.get('period_value', 1)) - total_periods = int(period_data.get('total_periods', 0)) + period_number = int(game.get('period', 1)) + total_periods = int(game.get('regulationPeriods', 4)) period_diff = period_number - total_periods ret['quarter'] = 'OT' \ if period_diff == 1 \ @@ -231,11 +231,21 @@ class NBA(ScoresBackend): else: ret['quarter'] = '' - ret['time_remaining'] = game.get('game_clock') - if ret['time_remaining'] == '': - ret['time_remaining'] = 'End' - elif ret['time_remaining'] is None: + clock = game.get('gameClock', '') + try: + mins, secs = re.match(r'^PT(\d+)M(\d+\.\d)0?S$', clock).groups() + except AttributeError: ret['time_remaining'] = '' + self.logger.warning('Failed to parse gameClock value: {clock}') + else: + mins = mins.lstrip('0') + if mins: + secs = secs.split('.')[0] + if not mins and secs == '00.0': + ret['time_remaining'] = 'End' + else: + ret['time_remaining'] = f'{mins}:{secs}' + ret['overtime'] = ret['quarter'] if 'OT' in ret['quarter'] else '' for key in ('home', 'away'):