""" Pydantic schemas for FINRA short volume data """ from datetime import date, datetime from typing import Dict, List, Any, Optional from pydantic import BaseModel, Field, ConfigDict class ShortVolumeEntry(BaseModel): model_config = ConfigDict(from_attributes=True) date: date symbol: str short_volume: float short_exempt_volume: float = 0.0 total_volume: float market: Optional[str] = None short_ratio: Optional[float] = None @classmethod def from_orm_obj(cls, obj): d = obj.date if isinstance(d, datetime): d = d.date() return cls( date=d, symbol=obj.symbol, short_volume=obj.short_volume, short_exempt_volume=obj.short_exempt_volume or 0.0, total_volume=obj.total_volume, market=obj.market, short_ratio=obj.short_ratio, ) class ShortVolumeResponse(BaseModel): symbol: str entries: List[ShortVolumeEntry] total_count: int metadata: Dict[str, Any] = Field(default_factory=dict) class ShortRatioPoint(BaseModel): date: date short_volume: float short_exempt_volume: float total_volume: float short_ratio: float class ShortRatioHistoryResponse(BaseModel): symbol: str history: List[ShortRatioPoint] avg_short_ratio: Optional[float] = None metadata: Dict[str, Any] = Field(default_factory=dict) class IngestResponse(BaseModel): date: Optional[str] = None date_range: Optional[Dict[str, str]] = None records_ingested: int status: str