Files

74 lines
2.5 KiB
Python
Raw Permalink Normal View History

"""Install the explicitly labeled two-project test registry for disposable work."""
from __future__ import annotations
import argparse
import json
import os
import secrets
from pathlib import Path
from gewu.application.paths import reject_symlink_components
def main() -> None:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--replace", action="store_true")
arguments = parser.parse_args()
data_root = Path(os.environ.get("GEWU_DATA_ROOT", "./.data/gewu")).expanduser().absolute()
reject_symlink_components(data_root)
control_root = data_root / "control"
reject_symlink_components(control_root)
control_root.mkdir(parents=True, exist_ok=True, mode=0o700)
control_root.chmod(0o700)
destination = control_root / "registry.json"
if destination.exists() and not arguments.replace:
raise SystemExit("Registry exists; pass --replace only to deliberately reset it")
fixture_path = (
Path(__file__).resolve().parents[1] / "schema" / "fixtures" / "pilot-projects.json"
)
def reject_duplicate_keys(pairs: list[tuple[str, object]]) -> dict[str, object]:
result: dict[str, object] = {}
for key, value in pairs:
if key in result:
raise ValueError("Test fixture has duplicate JSON keys")
result[key] = value
return result
fixture = json.loads(
fixture_path.read_text(encoding="utf-8"), object_pairs_hook=reject_duplicate_keys
)
project_fields = {
"project_id",
"title",
"status",
"north_star",
"key_questions",
"autonomy_policy_id",
}
projects = []
for item in fixture["projects"]:
project = {key: value for key, value in item.items() if key in project_fields}
projects.append(project)
config = {
"schema_version": 1,
"projects": projects,
"policies": fixture["test_policies"],
}
temporary = control_root / f".{secrets.token_hex(12)}.tmp"
try:
with temporary.open("x", encoding="utf-8") as stream:
json.dump(config, stream, ensure_ascii=False, allow_nan=False, indent=2)
stream.flush()
os.fsync(stream.fileno())
os.chmod(temporary, 0o600)
os.replace(temporary, destination)
finally:
temporary.unlink(missing_ok=True)
print("Installed disposable fixture projects and test-only acceptance policies.")
if __name__ == "__main__":
main()