AutoRpa/rpa_yisaiqi/__main__.py

60 lines
2.3 KiB
Python

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