поправил еще раз запись данных, когда матч закончился

This commit is contained in:
2025-10-27 20:34:24 +03:00
parent d86d1e5a4f
commit b301f1e918

View File

@@ -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