Load trajectory diff data on demand
()
| 1340 | @app.route("/load-trajectory-diffs") |
| 1341 | @print_timing |
| 1342 | def load_trajectory_diffs(): |
| 1343 | """Load trajectory diff data on demand""" |
| 1344 | # Don't allow diff loading in static mode (already embedded) - skip freezing |
| 1345 | if STATIC_MODE: |
| 1346 | return redirect(url_for("index")) |
| 1347 | |
| 1348 | selected_folder = request.args.get("folder") |
| 1349 | player_name = request.args.get("player") |
| 1350 | round_num = request.args.get("round") |
| 1351 | |
| 1352 | if not all([selected_folder, player_name, round_num]): |
| 1353 | return jsonify({"success": False, "error": "Missing required parameters"}), 400 |
| 1354 | |
| 1355 | try: |
| 1356 | round_num = int(round_num) |
| 1357 | except ValueError: |
| 1358 | return jsonify({"success": False, "error": "Invalid round number"}), 400 |
| 1359 | |
| 1360 | try: |
| 1361 | # Validate the selected folder exists and is a game folder |
| 1362 | folder_path = LOG_BASE_DIR / selected_folder |
| 1363 | if not folder_path.exists() or not is_game_folder(folder_path): |
| 1364 | return jsonify({"success": False, "error": "Invalid game folder"}), 404 |
| 1365 | |
| 1366 | # Parse trajectory with diffs loaded |
| 1367 | parser = LogParser(folder_path) |
| 1368 | trajectory = parser.parse_trajectory(player_name, round_num, load_diffs=True) |
| 1369 | |
| 1370 | if not trajectory: |
| 1371 | return jsonify({"success": False, "error": "Trajectory not found"}), 404 |
| 1372 | |
| 1373 | return jsonify( |
| 1374 | { |
| 1375 | "success": True, |
| 1376 | "diff": trajectory.diff, |
| 1377 | "incremental_diff": trajectory.incremental_diff, |
| 1378 | "modified_files": trajectory.modified_files, |
| 1379 | "diff_by_files": trajectory.diff_by_files, |
| 1380 | "incremental_diff_by_files": trajectory.incremental_diff_by_files, |
| 1381 | } |
| 1382 | ) |
| 1383 | |
| 1384 | except Exception as e: |
| 1385 | logger.error(f"Error loading trajectory diffs: {e}", exc_info=True) |
| 1386 | return jsonify({"success": False, "error": str(e)}), 500 |
| 1387 | |
| 1388 | |
| 1389 | @app.route("/batch") |
nothing calls this directly
no test coverage detected