91 lines
2.5 KiB
Python
Executable file
91 lines
2.5 KiB
Python
Executable file
#!/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())
|