56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
#!/usr/bin/env python3
|
|
"""Validation semantique des regles d'administration."""
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
from pathlib import Path
|
|
import sys
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
if str(ROOT) not in sys.path:
|
|
sys.path.insert(0, str(ROOT))
|
|
|
|
from admin_rules import generate_rule_variants, load_effective_admin_rules_dict, validate_rules_config
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(description="Valider les regles d'administration")
|
|
parser.add_argument(
|
|
"--config",
|
|
default="config/admin_rules.default.yml",
|
|
help="Chemin vers le fichier YAML a valider.",
|
|
)
|
|
parser.add_argument(
|
|
"--show-variants",
|
|
action="store_true",
|
|
help="Afficher un apercu des variantes generees pour les regles de type identifiant.",
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
config_path = Path(args.config)
|
|
data = load_effective_admin_rules_dict(config_path)
|
|
errors = validate_rules_config(data)
|
|
|
|
if errors:
|
|
print("Configuration invalide:")
|
|
for error in errors:
|
|
print(f"- {error}")
|
|
return 1
|
|
|
|
rules = data.get("rules", [])
|
|
print(f"Configuration valide: {config_path} ({len(rules)} regle(s))")
|
|
for rule in rules:
|
|
print(f"- {rule['id']} [{rule['status']}] {rule['type']}")
|
|
if args.show_variants:
|
|
variants = generate_rule_variants(rule)
|
|
if variants:
|
|
print(" Variantes:")
|
|
for value in variants:
|
|
print(f" - {value}")
|
|
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|