TRX/tools/check_config_defaults

66 lines
1.7 KiB
Text
Raw Permalink Normal View History

#!/usr/bin/env python3
import argparse
from pathlib import Path
import pyjson5
2024-10-02 10:23:23 +02:00
from shared.paths import PROJECT_PATHS
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(
description=(
2024-10-02 10:23:23 +02:00
"Compares a given configuration file with the default specifications "
"of the config tool to find changes in the default values"
)
)
parser.add_argument(
2024-10-02 10:23:23 +02:00
"-v",
"--version",
type=int,
help="game version to check the configuration file for",
required=True,
)
parser.add_argument(
"path",
type=Path,
help="path to the freshly written configuration file",
)
return parser.parse_args()
def main() -> None:
args = parse_args()
game_config = pyjson5.loads(args.path.read_text())
2024-10-02 10:23:23 +02:00
tool_spec_path = (
PROJECT_PATHS[args.version].tools_dir
/ "config/TR1X_ConfigTool/Resources/specification.json"
)
tool_spec = pyjson5.loads(tool_spec_path.read_text())
spec_map = {
option["Field"]: option["DefaultValue"]
for section in tool_spec["CategorisedProperties"]
for option in section["Properties"]
}
for key, spec_value in spec_map.items():
if (
key in game_config
and (game_value := game_config.get(key)) != spec_value
):
print(
f"(!) Wrong value: {key} (tool supplies {spec_value}, game supplies {game_value})"
)
for key, spec_value in spec_map.items():
if key not in game_config:
print(f"Surplus key: {key}")
for key, spec_value in game_config.items():
if key not in spec_map:
print(f"Missing key: {key}")
if __name__ == "__main__":
main()