поправил еще раз запись данных, когда матч закончился
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user