major update
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
"""Fundamentals router — fundamental data endpoints."""
|
||||
|
||||
import json
|
||||
|
||||
from fastapi import APIRouter, Depends
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
@@ -11,6 +13,17 @@ from app.services.fundamental_service import get_fundamental
|
||||
router = APIRouter(tags=["fundamentals"])
|
||||
|
||||
|
||||
def _parse_unavailable_fields(raw_json: str) -> dict[str, str]:
|
||||
"""Deserialize unavailable_fields_json, defaulting to {} on invalid JSON."""
|
||||
try:
|
||||
parsed = json.loads(raw_json)
|
||||
except (json.JSONDecodeError, TypeError):
|
||||
return {}
|
||||
if not isinstance(parsed, dict):
|
||||
return {}
|
||||
return {k: v for k, v in parsed.items() if isinstance(k, str) and isinstance(v, str)}
|
||||
|
||||
|
||||
@router.get("/fundamentals/{symbol}", response_model=APIEnvelope)
|
||||
async def read_fundamentals(
|
||||
symbol: str,
|
||||
@@ -30,6 +43,7 @@ async def read_fundamentals(
|
||||
earnings_surprise=record.earnings_surprise,
|
||||
market_cap=record.market_cap,
|
||||
fetched_at=record.fetched_at,
|
||||
unavailable_fields=_parse_unavailable_fields(record.unavailable_fields_json),
|
||||
)
|
||||
|
||||
return APIEnvelope(status="success", data=data.model_dump())
|
||||
|
||||
Reference in New Issue
Block a user