"""Run the portable agent against a state center. Examples: python -m rpa_yisaiqi --create --auto-human python -m rpa_yisaiqi --job-id YYC-xxx --auto-human """ from __future__ import annotations import argparse import os from datetime import datetime, timedelta from uuid import uuid4 from .agent import JobAgent from .callback_client import StateCenterClient def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser(description="Drive one job through the state center.") parser.add_argument("--state-center-url", default=os.getenv("STATE_CENTER_URL", "http://127.0.0.1:8000")) parser.add_argument("--token", default=os.getenv("AGENT_TOKEN", "dev-agent-token")) parser.add_argument("--job-id") parser.add_argument("--create", action="store_true", help="create a new job before running") parser.add_argument("--source-type", choices=("YYC", "XYY", "OFFLINE"), default="YYC") parser.add_argument("--supplier-name", default=None) parser.add_argument("--order-date", default=None) parser.add_argument("--auto-human", action="store_true") parser.add_argument("--auto-retry", action="store_true") parser.add_argument("--load-fixture-goods", action="store_true", default=True) parser.add_argument("--no-load-fixture-goods", action="store_false", dest="load_fixture_goods") return parser.parse_args() def main() -> None: args = parse_args() client = StateCenterClient(args.state_center_url, args.token) job_id = args.job_id if args.create or not job_id: order_date = args.order_date or (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d") supplier = args.supplier_name or f"重庆亿昊药业-{uuid4().hex[:4]}" created = client.create_job(args.source_type, order_date, supplier, created_by="rpa-agent") job_id = created["job_id"] print(f"created job {job_id}") if args.load_fixture_goods: loaded = client.load_fixture_goods() print(f"fixture goods loaded: {loaded.get('loaded')}") history = JobAgent( client, job_id, runner_mode="mock", auto_human=args.auto_human, auto_retry=args.auto_retry, ).run() last = history[-1] print(f"job {job_id} stopped={last.get('stopped')} next_node={last.get('next_node')} steps={len(history)}") if __name__ == "__main__": main()