поправил еще раз запись данных, когда матч закончился
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)
|
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,
|
Одноразовая генерация всех выходных json-файлов (team_stats.json,
|
||||||
team1.json, team2.json, scores.json, live_status.json, game.json и т.д.)
|
team1.json, team2.json, scores.json, live_status.json, game.json и т.д.)
|
||||||
без запуска вечного render_loop.
|
без запуска вечного render_loop.
|
||||||
|
|
||||||
Используется, когда:
|
Что делает:
|
||||||
- матч уже завершён (resultconfirmed/finished),
|
- один раз тянет /game из API (по game_id)
|
||||||
- или матч не идёт (нет лайва), но мы хотим иметь конечные данные по нему.
|
- собирает полный state (build_render_state)
|
||||||
|
- считает статистику команд, игроков, судей и счёт по четвертям
|
||||||
|
- сохраняет все соответствующие JSON в static/
|
||||||
|
|
||||||
|
Используется, когда матч уже завершён (finished/resultconfirmed)
|
||||||
|
или нет лайва.
|
||||||
"""
|
"""
|
||||||
try:
|
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()
|
state = build_render_state()
|
||||||
|
|
||||||
# основные сводки по матчу
|
# === 3. прогнать вычисления как в render_loop ===
|
||||||
Team_Both_Stat(state)
|
Team_Both_Stat(state)
|
||||||
Json_Team_Generation(state, who="team1")
|
Json_Team_Generation(state, who="team1")
|
||||||
Json_Team_Generation(state, who="team2")
|
Json_Team_Generation(state, who="team2")
|
||||||
Scores_Quarter(state)
|
Scores_Quarter(state)
|
||||||
Referee(state)
|
Referee(state)
|
||||||
|
|
||||||
# live_status отдельно, + сам матч
|
# === 4. live_status и общий state ===
|
||||||
atomic_write_json([state["result"]["live_status"]], "live_status")
|
atomic_write_json([state["result"]["live_status"]], "live_status")
|
||||||
atomic_write_json(state["result"], out_name)
|
atomic_write_json(state["result"], out_name)
|
||||||
|
|
||||||
logger.info("[RENDER_ONCE] финальные json сохранены после матча")
|
logger.info("[RENDER_ONCE] финальные json сохранены успешно")
|
||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
logger.exception(f"[RENDER_ONCE] error while building final state: {ex}")
|
logger.exception(f"[RENDER_ONCE] error while building final state: {ex}")
|
||||||
|
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# 7. Постобработка статистики для вывода
|
# 7. Постобработка статистики для вывода
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@@ -1636,19 +1659,7 @@ def get_data_API(
|
|||||||
if last_played and not today_game:
|
if last_played and not today_game:
|
||||||
game_id = last_played["game"]["id"]
|
game_id = last_played["game"]["id"]
|
||||||
logger.info(f"Последний завершённый матч id={game_id}")
|
logger.info(f"Последний завершённый матч id={game_id}")
|
||||||
|
render_once_after_game(session, league, season, game_id, lang)
|
||||||
# забираем состояние игры
|
|
||||||
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()
|
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
# 5. матч сегодня есть
|
# 5. матч сегодня есть
|
||||||
@@ -1686,7 +1697,7 @@ def get_data_API(
|
|||||||
else:
|
else:
|
||||||
# матч сегодня, но он уже финальный (resultconfirmed / finished)
|
# матч сегодня, но он уже финальный (resultconfirmed / finished)
|
||||||
# значит просто один раз считаем все json-ы
|
# значит просто один раз считаем все json-ы
|
||||||
render_once_after_game()
|
render_once_after_game(session, league, season, game_id, lang)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user