You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

40 lines
1.2 KiB
Python

"""
Stock Screener schemas - request/response models
"""
from typing import Optional, List, Any, Dict
from pydantic import BaseModel
class ScreenerStockItem(BaseModel):
symbol: str
name: Optional[str] = None
exchange: Optional[str] = None # User-friendly: NYSE, NASDAQ, etc.
exchange_code: Optional[str] = None # Raw yfinance code: NYQ, NMS, etc.
quote_type: Optional[str] = None
market_cap: Optional[float] = None
price: Optional[float] = None
change_percent: Optional[float] = None
volume: Optional[int] = None
avg_volume_3m: Optional[int] = None
shares_outstanding: Optional[float] = None
pe_ratio: Optional[float] = None
forward_pe: Optional[float] = None
eps_ttm: Optional[float] = None
dividend_yield: Optional[float] = None
fifty_two_week_high: Optional[float] = None
fifty_two_week_low: Optional[float] = None
analyst_rating: Optional[str] = None
book_value: Optional[float] = None
price_to_book: Optional[float] = None
class ScreenerResponse(BaseModel):
stocks: List[ScreenerStockItem]
total_available: int
returned_count: int
page: int
page_size: int
total_pages: int
query_time_seconds: float
metadata: Dict[str, Any]