Files
trex-core/trex_core/runtime/cli.py
T

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())