Metafazer/finrag-backend
0
1"""CLI script for downloading SEC filings.2 3Usage:4 python scripts/ingest.py --ticker AAPL --filing-type 10-K --count 15"""6 7import argparse8import asyncio9import sys10from pathlib import Path11 12# Add src to path for direct script execution13sys.path.insert(0, str(Path(__file__).parent.parent / "src"))14 15import structlog16 17from finrag.config import get_settings18from finrag.ingestion.edgar_client import (19 EdgarError,20 ingest_filing,21)22 23structlog.configure(24 processors=[25 structlog.processors.TimeStamper(fmt="iso"),26 structlog.processors.add_log_level,27 structlog.dev.ConsoleRenderer(),28 ],29)30 31logger = structlog.get_logger(__name__)32 33 34def main() -> None:35 """Parse CLI args and run filing ingestion."""36 parser = argparse.ArgumentParser(37 description="Download SEC filings from EDGAR",38 )39 parser.add_argument(40 "--ticker",41 required=True,42 help="Stock ticker symbol (e.g., AAPL)",43 )44 parser.add_argument(45 "--filing-type",46 required=True,47 help="Filing type (e.g., 10-K, 10-Q, 8-K)",48 )49 parser.add_argument(50 "--count",51 type=int,52 default=1,53 help="Number of recent filings to download (default: 1)",54 )55 56 args = parser.parse_args()57 58 settings = get_settings()59 60 logger.info(61 "ingestion_start",62 ticker=args.ticker,63 filing_type=args.filing_type,64 count=args.count,65 )66 67 try:68 saved_paths = asyncio.run(69 ingest_filing(70 ticker=args.ticker,71 filing_type=args.filing_type,72 settings=settings,73 count=args.count,74 )75 )76 77 for path in saved_paths:78 logger.info("filing_saved", path=str(path))79 80 logger.info(81 "ingestion_complete",82 total_saved=len(saved_paths),83 )84 85 except EdgarError as e:86 logger.error("ingestion_failed", error=str(e))87 sys.exit(1)88 except KeyboardInterrupt:89 logger.info("ingestion_interrupted")90 sys.exit(130)91 92 93if __name__ == "__main__":94 main()95 