"""Collect one daily SET price snapshot from Yahoo Finance Chart API.""" from __future__ import annotations import argparse import json from pathlib import Path from app.prices import YahooChartProvider, collect_price_snapshot def main() -> int: parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--root", type=Path, default=Path(__file__).resolve().parents[1] / "data" / "prices") parser.add_argument("--start", required=True, help="inclusive YYYY-MM-DD") parser.add_argument("--end", required=True, help="inclusive YYYY-MM-DD") parser.add_argument("--timeout", type=float, default=30.0) args = parser.parse_args() snapshot = collect_price_snapshot(args.root, start=args.start, end=args.end, provider=YahooChartProvider(timeout=args.timeout)) source = snapshot["source"] print( json.dumps( { "snapshot_id": source["snapshot_id"], "source_id": source["source_id"], "period_start": source["period_start"], "period_end": source["period_end"], "symbols": sorted(snapshot["series"]), "bar_counts": source["bar_counts"], "quality": source["quality"], "point_in_time": source["point_in_time"], "snapshot_root": str(args.root), }, ensure_ascii=False, sort_keys=True, ) ) return 0 if __name__ == "__main__": raise SystemExit(main())