run_acquisition.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #!/usr/bin/env python3
  2. """Run formal acquisition against a cloud query batch."""
  3. from __future__ import annotations
  4. import argparse
  5. import json
  6. from uuid import UUID
  7. from acquisition.repositories.postgres import PostgresAcquisitionRepository
  8. from acquisition.runner import DEFAULT_PLATFORMS, run_batch
  9. from core.config import CreationDbConfig, Settings
  10. from core.db_session import transaction
  11. def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
  12. parser = argparse.ArgumentParser(description=__doc__)
  13. parser.add_argument("--batch-id", required=True, help="Formal query batch UUID")
  14. parser.add_argument(
  15. "--platform",
  16. action="append",
  17. choices=DEFAULT_PLATFORMS,
  18. help="Platform to run. Repeat to run multiple platforms. Default: all.",
  19. )
  20. parser.add_argument("--search-limit", type=int, default=10)
  21. parser.add_argument("--display-limit", type=int, default=5)
  22. parser.add_argument("--no-classify", action="store_true")
  23. parser.add_argument("--no-resume", action="store_true")
  24. parser.add_argument("--no-skip-done", action="store_true")
  25. parser.add_argument("--run-key")
  26. parser.add_argument("--env-file", default=".env")
  27. return parser.parse_args(argv)
  28. def main(argv: list[str] | None = None) -> int:
  29. args = parse_args(argv)
  30. settings = Settings.from_env(args.env_file)
  31. db_config = CreationDbConfig.from_env(args.env_file)
  32. platforms = tuple(args.platform or DEFAULT_PLATFORMS)
  33. with transaction(db_config) as conn:
  34. repo = PostgresAcquisitionRepository(conn)
  35. result = run_batch(
  36. repo,
  37. batch_id=UUID(args.batch_id),
  38. settings=settings,
  39. platforms=platforms,
  40. search_limit=args.search_limit,
  41. display_limit=args.display_limit,
  42. classify=not args.no_classify,
  43. resume=not args.no_resume,
  44. skip_done=not args.no_skip_done,
  45. run_key=args.run_key,
  46. )
  47. print(json.dumps(result.__dict__, ensure_ascii=False, default=str, indent=2))
  48. return 0
  49. if __name__ == "__main__":
  50. raise SystemExit(main())