Просмотр исходного кода

Add CLI demand source selectors

Sam Lee 5 дней назад
Родитель
Сommit
0efee691fc
2 измененных файлов с 53 добавлено и 9 удалено
  1. 20 9
      content_agent/cli.py
  2. 33 0
      tests/test_cli.py

+ 20 - 9
content_agent/cli.py

@@ -7,23 +7,34 @@ from content_agent.run_service import RunService
 from content_agent.schemas import RunStartRequest
 
 
-def main() -> None:
+def build_parser() -> argparse.ArgumentParser:
     parser = argparse.ArgumentParser(description="Run the Content Agent V1 mock chain.")
     parser.add_argument("--source", default=None)
+    parser.add_argument("--demand-content-id", type=int, default=None)
+    parser.add_argument("--run-label", default=None)
     parser.add_argument("--platform", default="douyin")
     parser.add_argument("--platform-mode", choices=["mock", "real"], default="mock")
     parser.add_argument("--strategy-version", default=None)
+    return parser
+
+
+def request_from_args(args: argparse.Namespace) -> RunStartRequest:
+    return RunStartRequest(
+        source=args.source,
+        demand_content_id=args.demand_content_id,
+        run_label=args.run_label,
+        platform=args.platform,
+        platform_mode=args.platform_mode,
+        **({"strategy_version": args.strategy_version} if args.strategy_version else {}),
+    )
+
+
+def main() -> None:
+    parser = build_parser()
     args = parser.parse_args()
 
     service = RunService.from_env()
-    state = service.start_run(
-        RunStartRequest(
-            source=args.source,
-            platform=args.platform,
-            platform_mode=args.platform_mode,
-            **({"strategy_version": args.strategy_version} if args.strategy_version else {}),
-        )
-    )
+    state = service.start_run(request_from_args(args))
     print(json.dumps(service.get_summary(state["run_id"]), ensure_ascii=False, indent=2))
 
 

+ 33 - 0
tests/test_cli.py

@@ -0,0 +1,33 @@
+import pytest
+from pydantic import ValidationError
+
+from content_agent.cli import build_parser, request_from_args
+
+
+def test_cli_builds_request_with_demand_content_id():
+    parser = build_parser()
+    args = parser.parse_args(["--platform-mode", "real", "--demand-content-id", "130"])
+
+    request = request_from_args(args)
+
+    assert request.platform_mode == "real"
+    assert request.demand_content_id == 130
+    assert request.source is None
+    assert request.run_label is None
+
+
+def test_cli_builds_request_with_run_label():
+    parser = build_parser()
+    args = parser.parse_args(["--run-label", "cfa_batch_001"])
+
+    request = request_from_args(args)
+
+    assert request.run_label == "cfa_batch_001"
+
+
+def test_cli_reuses_source_selector_exclusivity():
+    parser = build_parser()
+    args = parser.parse_args(["--source", "source.json", "--demand-content-id", "130"])
+
+    with pytest.raises(ValidationError):
+        request_from_args(args)