|
import requests |
|
from fastapi import FastAPI, HTTPException, Query, status |
|
from pydantic import BaseModel |
|
from typing import List, Optional, Dict, Any |
|
|
|
|
|
from data_ingestion.scraping_loader import ( |
|
get_earnings_surprises, |
|
FMPError, |
|
) |
|
import logging |
|
|
|
|
|
logging.basicConfig(level=logging.INFO) |
|
logger = logging.getLogger(__name__) |
|
|
|
app = FastAPI(title="Scraping Agent (FMP Earnings)") |
|
|
|
class FilingRequest(BaseModel): |
|
ticker: str |
|
filing_type: Optional[str] = "earnings_surprise" |
|
start_date: Optional[str] = None |
|
end_date: Optional[str] = None |
|
|
|
|
|
@app.post("/get_filings") |
|
def get_filings(request: FilingRequest): |
|
""" |
|
Fetches filings (earnings surprise) by calling the data_ingestion layer. |
|
""" |
|
if request.filing_type != "earnings_surprise": |
|
raise HTTPException( |
|
status_code=400, |
|
detail=f"Only 'earnings_surprise' filing_type supported in demo, received '{request.filing_type}'.", |
|
) |
|
|
|
try: |
|
|
|
earnings_data_list = get_earnings_surprises(request.ticker) |
|
|
|
return { |
|
"ticker": request.ticker, |
|
"filing_type": request.filing_type, |
|
"data": earnings_data_list, |
|
} |
|
|
|
except (requests.exceptions.RequestException, FMPError) as e: |
|
|
|
error_msg = f"Error fetching filings for {request.ticker}: {e}" |
|
logger.error(error_msg) |
|
raise HTTPException( |
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=error_msg |
|
) |
|
except Exception as e: |
|
error_msg = f"An unexpected error occurred processing {request.ticker}: {e}" |
|
logger.error(error_msg) |
|
raise HTTPException( |
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=error_msg |
|
) |
|
|