"""Rate a game's replay quality from its records.""" from server.database.game_quality import GameQuality, GameQualityInput, rate_game_quality from .codec import MOVES from .records import GameBundle def rate_bundle(bundle:GameBundle) -> GameQuality: turns = bundle.turns numbers = [record.turn for record in turns] moves = [record.move for record in turns] return rate_game_quality(GameQualityInput( status=bundle.game.get("status") or "running", final_turn=int(bundle.game.get("final_turn") or 0), turn_rows=len(turns), min_turn=min(numbers) if numbers else None, max_turn=max(numbers) if numbers else None, valid_moves=sum(1 for move in moves if move in MOVES), thinking_rows=sum(1 for record in turns if record.thinking not in (None, {})), distinct_moves=len({move for move in moves if move is not None}), snake_turn_rows=len(bundle.states), winner_name=bundle.game.get("winner_name"), ))