@@ -130,6 +130,7 @@ DEFAULT_GAME_DATA = """
130
130
}
131
131
"""
132
132
MLB_SCHED_ENDPOINT = "/api/v1/schedule/games/"
133
+ MLB_TEAMS_ENDPOINT = "/api/v1/teams/{0}"
133
134
MLB_BASE_URL = "https://statsapi.mlb.com{0}"
134
135
135
136
def main (config ):
@@ -319,13 +320,16 @@ def render_preview(game, timezone, status, relative_or_absolute):
319
320
else :
320
321
footer = render_pitcher_preview (game , game_time .Message )
321
322
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
+
322
326
return render .Column (
323
327
cross_align = "center" ,
324
328
children = [
325
329
render .Row (
326
330
children = [
327
331
render .Image (
328
- src = TEAM_INFO [ away_id ]. Logo ,
332
+ src = away_logo ,
329
333
width = 26 ,
330
334
),
331
335
render .Text (
@@ -334,7 +338,7 @@ def render_preview(game, timezone, status, relative_or_absolute):
334
338
color = INNING_COLOR ,
335
339
),
336
340
render .Image (
337
- src = TEAM_INFO [ home_id ]. Logo ,
341
+ src = home_logo ,
338
342
width = 26 ,
339
343
),
340
344
],
@@ -353,12 +357,34 @@ def render_preview_msg(msg, flashy):
353
357
) if not flashy else render_rainbow_word (msg , FIVE_WIDE_FONT ),
354
358
)
355
359
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
+
356
372
def render_pitcher_preview (game , time_to_game ):
357
373
away = get_away_team_id (game )
358
374
away_pitcher = get_away_probable_pitcher (game )
359
375
home = get_home_team_id (game )
360
376
home_pitcher = get_home_probable_pitcher (game )
361
377
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
+
362
388
return animation .Transformation (
363
389
duration = 200 ,
364
390
height = 24 ,
@@ -380,13 +406,13 @@ def render_pitcher_preview(game, time_to_game):
380
406
content = time_to_game ,
381
407
),
382
408
),
383
- render_player (away , away_pitcher ),
409
+ render_tbd ( info ) if away_tbd else render_player (away , away_pitcher ),
384
410
render .Box (
385
411
height = 6 ,
386
412
width = 64 ,
387
413
child = render_american_word ("versus" , FIVE_WIDE_FONT ),
388
414
),
389
- render_player (home , home_pitcher ),
415
+ render_tbd ( info ) if home_tbd else render_player (home , home_pitcher ),
390
416
],
391
417
),
392
418
)
@@ -398,6 +424,23 @@ def build_keyframe(offset, pct):
398
424
curve = "ease_in_out" ,
399
425
)
400
426
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
+
401
444
def render_player (team , player ):
402
445
team = int (team )
403
446
bg = TEAM_INFO [team ].BackgroundColor
@@ -1150,6 +1193,11 @@ MIA_TEAM_ID = 146 #Miami Marlins
1150
1193
NYY_TEAM_ID = 147 #New York Yankees
1151
1194
MIL_TEAM_ID = 158 #Milwaukee Brewers
1152
1195
1196
+
1197
+ TBD_LOGO = base64 .decode ("""
1198
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAIKADAAQAAAABAAAAIAAAAACshmLzAAAAiUlEQVRYCe2UQQrAMAgE29If+iE/5BtbKAgeRGpymIu5GFjaLMPgqarPAZ4LfPt7egrgBO7KARGp4jIzszL3ECcwBXACpYR/RXKh4swEzv6HE5gCOIFSwiiV3zO5PFuZOIEpgBNoS5htsxX5/BucwBTACbQlzDbhjpg4gSmAE2hLuCOcb784cQIvcaMS2ZZcHkMAAAAASUVORK5CYII=
1199
+ """ )
1200
+
1153
1201
MLB_LEAGUE_IMAGE = base64 .decode ("""
1154
1202
iVBORw0KGgoAAAANSUhEUgAAAEAAAAAgCAYAAACinX6EAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAQKADAAQAAAABAAAAIAAAAADfYzX9AAACDElEQVRoBeVXvUoEMRDenHsrWIj4BxanNnY2FjYKp6iVpeDbWAvWtj6AjfoAKqgP4AtcJYKIHgda2FisZnWO7GTiJrlNNrcuHNl8O0nm+2YyybF4fiuNAn4+H64l727GNyTMFmjYDvQ1rrmwLS21+X4rYbZA8AJwYgdHJxI/Fo9ImA3AqtgCVFqD81TE+TdqTBlbwXsGUESAPBClbChh2q+X4lCrd68CUMRUXlO2WITGaKIaro17FUDbq19DSoTW6n5umkELojcBKDI5Jpqd55eeZNlImhKmC3gTQNchbPd0f4ahCG+FdvdKstEFghdgZmqC5IJFWD49JO2KQOcC3J0fk0dYkWM63+dW9vpm07vr/XeTl9jE2NS2rH2vWrfbe4vSNI0YY5kJL4imdwOnAuA0tREEz4HFSBZ3Bsow51sAO+yiL4pkeizWQgAuKs8EeEwKorf/AjbpD4T+aiH61Pw69cCbAECCchS+uWiLRKjNFrAVr/YC8KKYzE4q9XF6DIqr+k59ce3o55qQg6DjJQMqJf/NdK1zAXyl1nkRrJo8ZoyLojIDuOPww5MMcx9flEgBcNRwX1cA23G685dhRwpQxsQhzyFmgTMBQo/+2FIrixEpAFwvIYq4D/gwtx+dx8x95T2gjqSpgJEZQBnWCROPwn8ngEieB9X5RQgyx2dRxCTBB6r1lgGh1pQvQzmLGvG9jN0AAAAASUVORK5CYII=
1155
1203
""" )
0 commit comments