diff --git a/get_data_new.py b/get_data_new.py index 7a3a0bf..680c703 100644 --- a/get_data_new.py +++ b/get_data_new.py @@ -779,35 +779,58 @@ def Referee(merged: dict, *, out_dir: str = "static") -> None: logger.error(f"Ошибка в Referee потоке: {e}", exc_info=True) -def render_once_after_game(out_name: str = "game") -> None: +def render_once_after_game( + session: requests.Session, + league: str, + season: str, + game_id: int, + lang: str, + out_name: str = "game", +) -> None: """ Одноразовая генерация всех выходных json-файлов (team_stats.json, team1.json, team2.json, scores.json, live_status.json, game.json и т.д.) без запуска вечного render_loop. - Используется, когда: - - матч уже завершён (resultconfirmed/finished), - - или матч не идёт (нет лайва), но мы хотим иметь конечные данные по нему. + Что делает: + - один раз тянет /game из API (по game_id) + - собирает полный state (build_render_state) + - считает статистику команд, игроков, судей и счёт по четвертям + - сохраняет все соответствующие JSON в static/ + + Используется, когда матч уже завершён (finished/resultconfirmed) + или нет лайва. """ try: + logger.info(f"[RENDER_ONCE] Fetching final game snapshot for game_id={game_id}") + # === 1. один запрос к API (ручка "game") === + fetch_api_data( + session, + "game", + host=HOST, + game_id=game_id, + lang=lang, + ) + + # === 2. собрать state из свежего api_game.json === state = build_render_state() - # основные сводки по матчу + # === 3. прогнать вычисления как в render_loop === Team_Both_Stat(state) Json_Team_Generation(state, who="team1") Json_Team_Generation(state, who="team2") Scores_Quarter(state) Referee(state) - # live_status отдельно, + сам матч + # === 4. live_status и общий state === atomic_write_json([state["result"]["live_status"]], "live_status") atomic_write_json(state["result"], out_name) - logger.info("[RENDER_ONCE] финальные json сохранены после матча") + logger.info("[RENDER_ONCE] финальные json сохранены успешно") + except Exception as ex: logger.exception(f"[RENDER_ONCE] error while building final state: {ex}") - # ============================================================================ # 7. Постобработка статистики для вывода # ============================================================================ @@ -1636,19 +1659,7 @@ def get_data_API( if last_played and not today_game: game_id = last_played["game"]["id"] logger.info(f"Последний завершённый матч id={game_id}") - - # забираем состояние игры - fetch_api_data(session, "game", host=HOST, game_id=game_id, lang=lang) - - # плюс box-score / play-by-play / live-status, - # чтобы render_once_after_game мог всё посчитать - fetch_api_data(session, "box-score", host=HOST, game_id=game_id) - fetch_api_data(session, "play-by-play", host=HOST, game_id=game_id) - fetch_api_data(session, "live-status", host=HOST, game_id=game_id) - - # одноразовый рендер финальных стейтов - render_once_after_game() - + render_once_after_game(session, league, season, game_id, lang) return # 5. матч сегодня есть @@ -1686,7 +1697,7 @@ def get_data_API( else: # матч сегодня, но он уже финальный (resultconfirmed / finished) # значит просто один раз считаем все json-ы - render_once_after_game() + render_once_after_game(session, league, season, game_id, lang) return