Update gameplay_queries.py

Decision bug fixes
This commit is contained in:
Cal Corum 2025-07-23 08:58:41 -05:00
parent 3debfd6e82
commit c98c202224

View File

@ -1002,15 +1002,11 @@ def get_db_ready_decisions(session: Session, this_game: Game, db_game_id: int) -
logger.info(f'Game {this_game.id} | Appending {play.pitcher.player.name_with_desc} to blown saves on play #{play.play_num}') logger.info(f'Game {this_game.id} | Appending {play.pitcher.player.name_with_desc} to blown saves on play #{play.play_num}')
b_save.append(play.pitcher) b_save.append(play.pitcher)
elif play.home_score > play.away_score and play.home_score - play.away_score <= 3 and home_pitcher != home_starter and play.inning_num + 2 >= final_inning: elif play.home_score > play.away_score and play.home_score - play.away_score <= 3 and home_pitcher != home_starter and play.inning_num >= final_inning - 2:
logger.info(f'Game {this_game.id} | Setting {play.pitcher.player.name_with_desc} to save on play #{play.play_num}') logger.info(f'Game {this_game.id} | Setting {play.pitcher.player.name_with_desc} to save on play #{play.play_num}')
save = home_pitcher save = home_pitcher
elif play.inning_half == 'bot': elif play.inning_half == 'bot':
if away_starter is None:
logger.info(f'Game {this_game.id} | Setting away starter to {play.pitcher.player.name_with_desc} on play #{play.play_num}')
away_starter = play.pitcher
if away_finisher is None: if away_finisher is None:
logger.info(f'Game {this_game.id} | Setting away finisher to {play.pitcher.player.name_with_desc} on play #{play.play_num}') logger.info(f'Game {this_game.id} | Setting away finisher to {play.pitcher.player.name_with_desc} on play #{play.play_num}')
away_finisher = play.pitcher away_finisher = play.pitcher
@ -1028,6 +1024,10 @@ def get_db_ready_decisions(session: Session, this_game: Game, db_game_id: int) -
if play.pitcher not in b_save: if play.pitcher not in b_save:
logger.info(f'Game {this_game.id} | Appending {play.pitcher.player.name_with_desc} to blown saves on play #{play.play_num}') logger.info(f'Game {this_game.id} | Appending {play.pitcher.player.name_with_desc} to blown saves on play #{play.play_num}')
b_save.append(play.pitcher) b_save.append(play.pitcher)
elif play.away_score > play.home_score and play.away_score - play.home_score <= 3 and away_pitcher != away_starter and play.inning_num >= final_inning - 2:
logger.info(f'Game {this_game.id} | Setting {play.pitcher.player.name_with_desc} to save on play #{play.play_num}')
save = away_pitcher
if play.is_go_ahead: if play.is_go_ahead:
run_diff = play.home_score - play.away_score run_diff = play.home_score - play.away_score
@ -1090,20 +1090,36 @@ def get_db_ready_decisions(session: Session, this_game: Game, db_game_id: int) -
pitcher_team_id=play.pitcher.team_id pitcher_team_id=play.pitcher.team_id
) )
# After the play loop, determine winner/loser from final game state if still None
final_play = session.exec(select(Play).where(Play.game == this_game).order_by(Play.play_num.desc())).first()
if winner is None: if winner is None:
logger.info(f'Setting winner to last_winner: {last_winner}') if final_play.home_score > final_play.away_score:
winner = last_winner winner = home_finisher
logger.info(f'Setting winner to home_finisher: {winner}')
else:
winner = away_finisher
logger.info(f'Setting winner to away_finisher: {winner}')
if loser is None: if loser is None:
logger.info(f'Setting loser to last_loser: {last_loser}') if final_play.home_score > final_play.away_score:
loser = last_loser loser = away_finisher
logger.info(f'Setting loser to away_finisher: {loser}')
else:
loser = home_finisher
logger.info(f'Setting loser to home_finisher: {loser}')
logger.info(f'winner: {winner} / loser: {loser}') logger.info(f'winner: {winner} / loser: {loser}')
decisions[winner.player_id].win = 1 if winner is not None:
decisions[loser.player_id].loss = 1 decisions[winner.player_id].win = 1
decisions[away_starter.player_id].is_start = True if loser is not None:
decisions[home_starter.player_id].is_start = True decisions[loser.player_id].loss = 1
decisions[away_finisher.player_id].game_finished = 1 if away_starter is not None:
decisions[home_finisher.player_id].game_finished = 1 decisions[away_starter.player_id].is_start = True
if home_starter is not None:
decisions[home_starter.player_id].is_start = True
if away_finisher is not None:
decisions[away_finisher.player_id].game_finished = 1
if home_finisher is not None:
decisions[home_finisher.player_id].game_finished = 1
for lineup in holds: for lineup in holds:
decisions[lineup.player_id].hold = 1 decisions[lineup.player_id].hold = 1