Internal implementation of render_game_viewer with timeout
(folder_path: Path, selected_folder: str)
| 1027 | |
| 1028 | @timeout(120) |
| 1029 | def _render_game_viewer_impl(folder_path: Path, selected_folder: str) -> str: |
| 1030 | """Internal implementation of render_game_viewer with timeout""" |
| 1031 | # Parse the selected game |
| 1032 | parser = LogParser(folder_path) |
| 1033 | metadata = parser.parse_game_metadata() |
| 1034 | |
| 1035 | # Group trajectories by round |
| 1036 | # In static mode, load all data (messages and diffs) |
| 1037 | # In dynamic mode, don't load (will be lazy-loaded) |
| 1038 | load_all_data = STATIC_MODE |
| 1039 | trajectories_by_round = {} |
| 1040 | for player_name, round_num in parser.get_available_trajectories(): |
| 1041 | if round_num not in trajectories_by_round: |
| 1042 | trajectories_by_round[round_num] = [] |
| 1043 | trajectory = parser.parse_trajectory( |
| 1044 | player_name, round_num, load_diffs=load_all_data, load_messages=load_all_data |
| 1045 | ) |
| 1046 | if trajectory: |
| 1047 | trajectories_by_round[round_num].append(trajectory) |
| 1048 | |
| 1049 | # Get analysis data (skip line counting - will be loaded on demand) |
| 1050 | sim_wins_data = parser.analyze_sim_wins_per_round() |
| 1051 | matrix_data = parser.load_matrix_analysis() |
| 1052 | |
| 1053 | # Get navigation info |
| 1054 | navigation_info = get_navigation_info(selected_folder) |
| 1055 | |
| 1056 | return render_template( |
| 1057 | "index.html", |
| 1058 | selected_folder=selected_folder, |
| 1059 | selected_folder_path=str(folder_path), |
| 1060 | metadata=metadata, |
| 1061 | trajectories_by_round=trajectories_by_round, |
| 1062 | sim_wins_data=sim_wins_data, |
| 1063 | matrix_data=matrix_data, |
| 1064 | navigation=navigation_info, |
| 1065 | is_static=STATIC_MODE, |
| 1066 | ) |
| 1067 | |
| 1068 | |
| 1069 | @print_timing |
no test coverage detected