60 lines
2.3 KiB
Python
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()
|