Guess config file names based on metadata.json files
()
| 1449 | @app.route("/picker/api/guess-config-names", methods=["POST"]) |
| 1450 | @print_timing |
| 1451 | def guess_config_names(): |
| 1452 | """Guess config file names based on metadata.json files""" |
| 1453 | # Don't allow config guessing in static mode - skip freezing |
| 1454 | if STATIC_MODE: |
| 1455 | return redirect(url_for("index")) |
| 1456 | |
| 1457 | try: |
| 1458 | data = request.get_json() |
| 1459 | folder_paths = data.get("folder_paths", []) |
| 1460 | |
| 1461 | if not folder_paths: |
| 1462 | return jsonify({"success": False, "error": "No folder paths provided"}) |
| 1463 | |
| 1464 | results = [] |
| 1465 | for folder_path in folder_paths: |
| 1466 | folder_path_obj = LOG_BASE_DIR / folder_path |
| 1467 | |
| 1468 | if not folder_path_obj.exists() or not is_game_folder(folder_path_obj): |
| 1469 | results.append({"folder": folder_path, "config_name": None, "error": "Invalid folder"}) |
| 1470 | continue |
| 1471 | |
| 1472 | metadata = load_metadata(folder_path_obj) |
| 1473 | if not metadata.is_valid: |
| 1474 | results.append({"folder": folder_path, "config_name": None, "error": "No metadata"}) |
| 1475 | continue |
| 1476 | |
| 1477 | # Extract components for config name |
| 1478 | game_name = metadata.game_name |
| 1479 | rounds = metadata.get_path("config.tournament.rounds") |
| 1480 | sims = metadata.get_path("config.game.sims_per_round") |
| 1481 | players = metadata.get_path("config.players", []) |
| 1482 | |
| 1483 | # Extract player names |
| 1484 | player_names = [] |
| 1485 | for player in players: |
| 1486 | if isinstance(player, dict): |
| 1487 | name = player.get("name", "") |
| 1488 | if name: |
| 1489 | player_names.append(name) |
| 1490 | |
| 1491 | # Build config file name |
| 1492 | if game_name and rounds and sims and len(player_names) >= 2: |
| 1493 | # Determine correct model ordering by checking folder name |
| 1494 | folder_name = Path(folder_path).name |
| 1495 | model1, model2 = player_names[0], player_names[1] |
| 1496 | |
| 1497 | # Check which order appears in the folder name |
| 1498 | if f"{model1}.{model2}" in folder_name: |
| 1499 | # Order is correct |
| 1500 | pass |
| 1501 | elif f"{model2}.{model1}" in folder_name: |
| 1502 | # Swap order |
| 1503 | model1, model2 = model2, model1 |
| 1504 | # If neither appears, keep original order |
| 1505 | |
| 1506 | config_name = f"{game_name}__{model1}__{model2}__r{rounds}__s{sims}.yaml" |
| 1507 | results.append({"folder": folder_path, "config_name": config_name, "error": None}) |
| 1508 | else: |
nothing calls this directly
no test coverage detected