mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-06-16 05:13:58 -07:00
To improve quality und uniformity of the included Python code this lints and formats the included Python files with ruff.
65 lines
2.6 KiB
Python
65 lines
2.6 KiB
Python
#!/usr/bin/env python3
|
|
from os import chdir
|
|
from pathlib import Path
|
|
from re import split
|
|
from subprocess import run
|
|
from sys import exit
|
|
from scriptlib import warn, SimulTemplateEntity, find_files
|
|
|
|
|
|
def find_entities(vfs_root):
|
|
base = vfs_root / "public" / "simulation" / "templates"
|
|
return [
|
|
str(fp.relative_to(base).with_suffix(""))
|
|
for (_, fp) in find_files(vfs_root, ["public"], "simulation/templates", "xml")
|
|
]
|
|
|
|
|
|
def main():
|
|
vfs_root = Path(__file__).resolve().parents[3] / "binaries" / "data" / "mods"
|
|
simul_templates_path = Path("simulation/templates")
|
|
simul_template_entity = SimulTemplateEntity(vfs_root)
|
|
with open("creation.dot", "w") as dot_f:
|
|
dot_f.write("digraph G {\n")
|
|
files = sorted(find_entities(vfs_root))
|
|
for f in files:
|
|
if f.startswith("template_"):
|
|
continue
|
|
print(f"# {f}...")
|
|
entity = simul_template_entity.load_inherited(simul_templates_path, f, ["public"])
|
|
if (
|
|
entity.find("Builder") is not None
|
|
and entity.find("Builder").find("Entities") is not None
|
|
):
|
|
entities = (
|
|
entity.find("Builder")
|
|
.find("Entities")
|
|
.text.replace("{civ}", entity.find("Identity").find("Civ").text)
|
|
)
|
|
builders = split(r"\s+", entities.strip())
|
|
for builder in builders:
|
|
if Path(builder) in files:
|
|
warn(f"Invalid Builder reference: {f} -> {builder}")
|
|
dot_f.write(f'"{f}" -> "{builder}" [color=green];\n')
|
|
if (
|
|
entity.find("TrainingQueue") is not None
|
|
and entity.find("TrainingQueue").find("Entities") is not None
|
|
):
|
|
entities = (
|
|
entity.find("TrainingQueue")
|
|
.find("Entities")
|
|
.text.replace("{civ}", entity.find("Identity").find("Civ").text)
|
|
)
|
|
training_queues = split(r"\s+", entities.strip())
|
|
for training_queue in training_queues:
|
|
if Path(training_queue) in files:
|
|
warn(f"Invalid TrainingQueue reference: {f} -> {training_queue}")
|
|
dot_f.write(f'"{f}" -> "{training_queue}" [color=blue];\n')
|
|
dot_f.write("}\n")
|
|
if run(["dot", "-V"], capture_output=True).returncode == 0:
|
|
exit(run(["dot", "-Tpng", "creation.dot", "-o", "creation.png"], text=True).returncode)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
chdir(Path(__file__).resolve().parent)
|
|
main()
|