#!/usr/bin/env python3 from __future__ import annotations from pathlib import Path import sys import argparse import yaml ROOT = Path(__file__).resolve().parents[1] if str(ROOT) not in sys.path: sys.path.insert(0, str(ROOT)) from lib.life_noc_inputs import list_items, get_item, set_item, complete_item def cmd_set(args: argparse.Namespace) -> int: set_item(args.domain, args.item_key, args.value, origin=args.origin) print(f"Mis à jour: {args.domain} -> {args.item_key}") return 0 def cmd_complete(args: argparse.Namespace) -> int: complete_item(args.domain, args.item_key, origin=args.origin) print(f"Complété: {args.domain} -> {args.item_key}") return 0 def cmd_get(args: argparse.Namespace) -> int: try: item = get_item(args.domain, args.item_key) except KeyError: print(f"Item introuvable: {args.item_key}", file=sys.stderr) return 1 print( yaml.safe_dump( {args.item_key: item}, sort_keys=False, allow_unicode=True, ).strip() ) return 0 def cmd_list(args: argparse.Namespace) -> int: for key in list_items(args.domain): print(key) return 0 def build_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser(description="Gestion des intrants Life-NOC") sub = parser.add_subparsers(dest="command", required=True) p_set = sub.add_parser("set", help="Met à jour un intrant") p_set.add_argument("domain") p_set.add_argument("item_key") p_set.add_argument("value") p_set.add_argument("--origin", default="manual") p_set.set_defaults(func=cmd_set) p_complete = sub.add_parser("complete", help="Marque un item comme complété maintenant") p_complete.add_argument("domain") p_complete.add_argument("item_key") p_complete.add_argument("--origin", default="manual") p_complete.set_defaults(func=cmd_complete) p_get = sub.add_parser("get", help="Lit un intrant") p_get.add_argument("domain") p_get.add_argument("item_key") p_get.set_defaults(func=cmd_get) p_list = sub.add_parser("list", help="Liste les intrants d’un domaine") p_list.add_argument("domain") p_list.set_defaults(func=cmd_list) return parser def main() -> int: parser = build_parser() args = parser.parse_args() try: return args.func(args) except ValueError as exc: print(f"Erreur: {exc}", file=sys.stderr) return 1 if __name__ == "__main__": raise SystemExit(main())