life-noc/scripts/life_noc_input.py

92 lines
2.5 KiB
Python
Raw Normal View History

#!/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 dun 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())