@@ -130,6 +130,7 @@ DEFAULT_GAME_DATA = """
130130}
131131"""
132132MLB_SCHED_ENDPOINT = "/api/v1/schedule/games/"
133+ MLB_TEAMS_ENDPOINT = "/api/v1/teams/{0}"
133134MLB_BASE_URL = "https://statsapi.mlb.com{0}"
134135
135136def main (config ):
@@ -319,13 +320,16 @@ def render_preview(game, timezone, status, relative_or_absolute):
319320 else :
320321 footer = render_pitcher_preview (game , game_time .Message )
321322
323+ away_logo = TBD_LOGO if TEAM_INFO .get (away_id ) == None else TEAM_INFO [away_id ].Logo
324+ home_logo = TBD_LOGO if TEAM_INFO .get (home_id ) == None else TEAM_INFO [home_id ].Logo
325+
322326 return render .Column (
323327 cross_align = "center" ,
324328 children = [
325329 render .Row (
326330 children = [
327331 render .Image (
328- src = TEAM_INFO [ away_id ]. Logo ,
332+ src = away_logo ,
329333 width = 26 ,
330334 ),
331335 render .Text (
@@ -334,7 +338,7 @@ def render_preview(game, timezone, status, relative_or_absolute):
334338 color = INNING_COLOR ,
335339 ),
336340 render .Image (
337- src = TEAM_INFO [ home_id ]. Logo ,
341+ src = home_logo ,
338342 width = 26 ,
339343 ),
340344 ],
@@ -353,12 +357,34 @@ def render_preview_msg(msg, flashy):
353357 ) if not flashy else render_rainbow_word (msg , FIVE_WIDE_FONT ),
354358 )
355359
360+ def get_tbd_team_info (team_id ):
361+ query_params = {
362+ "fields" : "teams,franchiseName" ,
363+ }
364+ url = MLB_BASE_URL .format (MLB_TEAMS_ENDPOINT .format (team_id ))
365+ response = http .get (url , params = query_params , ttl_seconds = 86400 )
366+
367+ if response .status_code != OK :
368+ # if the http request failed, return some basic info in format the consumer is expecting
369+ return json .decode ("""{"teams": [{"franchiseName": "OPPONENT TBD"}]}""" )
370+ return response .json ()
371+
356372def render_pitcher_preview (game , time_to_game ):
357373 away = get_away_team_id (game )
358374 away_pitcher = get_away_probable_pitcher (game )
359375 home = get_home_team_id (game )
360376 home_pitcher = get_home_probable_pitcher (game )
361377
378+ away_tbd = False
379+ home_tbd = False
380+ info = ""
381+ if TEAM_INFO .get (away ) == None :
382+ info = get_tbd_team_info (away )
383+ away_tbd = True
384+ elif TEAM_INFO .get (home ) == None :
385+ info = get_tbd_team_info (home )
386+ home_tbd = True
387+
362388 return animation .Transformation (
363389 duration = 200 ,
364390 height = 24 ,
@@ -380,13 +406,13 @@ def render_pitcher_preview(game, time_to_game):
380406 content = time_to_game ,
381407 ),
382408 ),
383- render_player (away , away_pitcher ),
409+ render_tbd ( info ) if away_tbd else render_player (away , away_pitcher ),
384410 render .Box (
385411 height = 6 ,
386412 width = 64 ,
387413 child = render_american_word ("versus" , FIVE_WIDE_FONT ),
388414 ),
389- render_player (home , home_pitcher ),
415+ render_tbd ( info ) if home_tbd else render_player (home , home_pitcher ),
390416 ],
391417 ),
392418 )
@@ -398,6 +424,23 @@ def build_keyframe(offset, pct):
398424 curve = "ease_in_out" ,
399425 )
400426
427+ def render_tbd (team ):
428+ bg = "#808080"
429+ fg = "#D3D3D3"
430+
431+ sanitized = team .get ("teams" )[0 ].get ("franchiseName" )
432+
433+ return render .Box (
434+ height = 6 ,
435+ width = 64 ,
436+ color = bg ,
437+ child = render .Text (
438+ font = FIVE_WIDE_FONT if len (sanitized ) < 14 else SMALL_FONT ,
439+ color = fg ,
440+ content = sanitized ,
441+ ),
442+ )
443+
401444def render_player (team , player ):
402445 team = int (team )
403446 bg = TEAM_INFO [team ].BackgroundColor
@@ -1150,6 +1193,11 @@ MIA_TEAM_ID = 146 #Miami Marlins
11501193NYY_TEAM_ID = 147 #New York Yankees
11511194MIL_TEAM_ID = 158 #Milwaukee Brewers
11521195
1196+
1197+ TBD_LOGO = base64 .decode ("""
1198+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAIKADAAQAAAABAAAAIAAAAACshmLzAAAAiUlEQVRYCe2UQQrAMAgE29If+iE/5BtbKAgeRGpymIu5GFjaLMPgqarPAZ4LfPt7egrgBO7KARGp4jIzszL3ECcwBXACpYR/RXKh4swEzv6HE5gCOIFSwiiV3zO5PFuZOIEpgBNoS5htsxX5/BucwBTACbQlzDbhjpg4gSmAE2hLuCOcb784cQIvcaMS2ZZcHkMAAAAASUVORK5CYII=
1199+ """ )
1200+
11531201MLB_LEAGUE_IMAGE = base64 .decode ("""
11541202iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAQKADAAQAAAABAAAAIAAAAADfYzX9AAACDElEQVRoBeVXvUoEMRDenHsrWIj4BxanNnY2FjYKp6iVpeDbWAvWtj6AjfoAKqgP4AtcJYKIHgda2FisZnWO7GTiJrlNNrcuHNl8O0nm+2YyybF4fiuNAn4+H64l727GNyTMFmjYDvQ1rrmwLS21+X4rYbZA8AJwYgdHJxI/Fo9ImA3AqtgCVFqD81TE+TdqTBlbwXsGUESAPBClbChh2q+X4lCrd68CUMRUXlO2WITGaKIaro17FUDbq19DSoTW6n5umkELojcBKDI5Jpqd55eeZNlImhKmC3gTQNchbPd0f4ahCG+FdvdKstEFghdgZmqC5IJFWD49JO2KQOcC3J0fk0dYkWM63+dW9vpm07vr/XeTl9jE2NS2rH2vWrfbe4vSNI0YY5kJL4imdwOnAuA0tREEz4HFSBZ3Bsow51sAO+yiL4pkeizWQgAuKs8EeEwKorf/AjbpD4T+aiH61Pw69cCbAECCchS+uWiLRKjNFrAVr/YC8KKYzE4q9XF6DIqr+k59ce3o55qQg6DjJQMqJf/NdK1zAXyl1nkRrJo8ZoyLojIDuOPww5MMcx9flEgBcNRwX1cA23G685dhRwpQxsQhzyFmgTMBQo/+2FIrixEpAFwvIYq4D/gwtx+dx8x95T2gjqSpgJEZQBnWCROPwn8ngEieB9X5RQgyx2dRxCTBB6r1lgGh1pQvQzmLGvG9jN0AAAAASUVORK5CYII=
11551203""" )
0 commit comments