run_daily_roi.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #!/usr/bin/env python
  2. """Run one versioned daily ROI computation and optional Feishu approval batch."""
  3. from __future__ import annotations
  4. import argparse
  5. import json
  6. import logging
  7. import os
  8. import sys
  9. from pathlib import Path
  10. from dotenv import load_dotenv
  11. HERE = Path(__file__).resolve().parent
  12. ROOT = HERE.parents[1]
  13. RTC_DIR = ROOT / "examples" / "tencent_realtime_control"
  14. for path in (ROOT, HERE, RTC_DIR):
  15. if str(path) not in sys.path:
  16. sys.path.insert(0, str(path))
  17. load_dotenv(HERE / ".env", override=False)
  18. load_dotenv(Path.cwd() / ".env", override=False)
  19. from roi_control.service import run_daily_roi # noqa: E402
  20. def parse_args() -> argparse.Namespace:
  21. parser = argparse.ArgumentParser(description=__doc__)
  22. parser.add_argument("--end-date", help="ODPS end partition in YYYYMMDD")
  23. parser.add_argument(
  24. "--output-dir",
  25. type=Path,
  26. default=HERE / "outputs" / "roi_control",
  27. )
  28. parser.add_argument(
  29. "--source-revision",
  30. help="Stable revision label for corrected upstream data",
  31. )
  32. parser.add_argument("--send-feishu", action="store_true")
  33. parser.add_argument(
  34. "--internal-test",
  35. action="store_true",
  36. help="Run an isolated full calculation and notify only the internal webhook",
  37. )
  38. return parser.parse_args()
  39. def main() -> None:
  40. args = parse_args()
  41. result = run_daily_roi(
  42. requested_end_date=args.end_date,
  43. output_dir=args.output_dir,
  44. send_feishu=args.send_feishu,
  45. source_revision=args.source_revision,
  46. internal_test=args.internal_test,
  47. )
  48. print(json.dumps(result, ensure_ascii=False, default=str))
  49. if __name__ == "__main__":
  50. logging.basicConfig(
  51. level=os.getenv("LOG_LEVEL", "INFO"),
  52. format="%(asctime)s %(levelname)s %(name)s %(message)s",
  53. )
  54. main()