48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
"""trex-core CLI entrypoints (REQ-032).
|
|
|
|
Subcommands:
|
|
pause <portfolio_id> — durably pause a portfolio (Postgres)
|
|
resume <portfolio_id> — clear the pause
|
|
paused — list paused portfolio_ids
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import sys
|
|
|
|
from trex_core.adapters.portfolio.pause_store import PostgreSQLPauseStore
|
|
from trex_core.runtime.config import DaemonConfig
|
|
|
|
|
|
def main(argv: list[str] | None = None) -> int:
|
|
parser = argparse.ArgumentParser(prog="trex-core", description="trex-core admin CLI")
|
|
sub = parser.add_subparsers(dest="cmd", required=True)
|
|
|
|
p_pause = sub.add_parser("pause", help="Pause a portfolio_id")
|
|
p_pause.add_argument("portfolio_id")
|
|
p_pause.add_argument("--actor", default="cli")
|
|
|
|
p_resume = sub.add_parser("resume", help="Resume a portfolio_id")
|
|
p_resume.add_argument("portfolio_id")
|
|
|
|
sub.add_parser("paused", help="List paused portfolio_ids")
|
|
|
|
args = parser.parse_args(argv)
|
|
cfg = DaemonConfig.from_env()
|
|
store = PostgreSQLPauseStore(cfg.dsn)
|
|
|
|
if args.cmd == "pause":
|
|
store.pause(args.portfolio_id, actor=args.actor)
|
|
print(f"paused {args.portfolio_id}")
|
|
elif args.cmd == "resume":
|
|
store.resume(args.portfolio_id)
|
|
print(f"resumed {args.portfolio_id}")
|
|
elif args.cmd == "paused":
|
|
for pid in sorted(store.list_paused()):
|
|
print(pid)
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__": # pragma: no cover
|
|
sys.exit(main())
|