"""Column list of the ``games`` table shared by backends and migrations.""" GAME_COLUMNS = ( "game_id", "started_at", "ended_at", "width", "height", "source", "map_name", "ruleset_name", "ruleset_version", "your_snake_id", "your_snake_name", "your_snake_type", "your_snake_version", "game_type", "winner_name", "winner_you", "final_turn", "status", "has_replay", "quality_status", "quality_score", "quality_tier", "quality_reasons", ) GAME_DEFAULTS = { "winner_you": False, "final_turn": 0, "status": "running", "has_replay": True, "quality_status": "retained", } def normalize_game(row:dict) -> dict: """Return a dict with every games column, filling legacy gaps with defaults.""" game = {column: row.get(column, GAME_DEFAULTS.get(column)) for column in GAME_COLUMNS} for column, default in GAME_DEFAULTS.items(): if game[column] is None: game[column] = default game["winner_you"] = bool(game["winner_you"]) game["has_replay"] = bool(game["has_replay"]) game["final_turn"] = int(game["final_turn"] or 0) return game