CoolFace
Apppublic

Metafazer/finrag-backend

sourceHugging Faceupdated 4mo agoView on Hugging Face
0likes
ingest.py95 linesDownload Raw Back to scripts
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