Spaces:
Running
Running
from pydantic import BaseModel, Field, field_validator | |
from typing import List, Dict, Optional, Any | |
from datetime import datetime | |
class FundMeta(BaseModel): | |
fund_house: Optional[str] = None | |
scheme_type: Optional[str] = None | |
scheme_category: Optional[str] = None | |
scheme_code: Optional[str] = None | |
def convert_scheme_code_to_str(cls, v): | |
if v is not None: | |
return str(v) | |
return v | |
class NAVData(BaseModel): | |
date: datetime | |
nav: float | |
class FundNAVResponse(BaseModel): | |
meta: FundMeta | |
data: List[NAVData] | |
class MarketIndex(BaseModel): | |
name: str | |
symbol: str | |
current_price: float | |
change: float | |
change_pct: float | |
class MarketIndicesResponse(BaseModel): | |
indices: List[MarketIndex] | |
last_updated: datetime | |
class FundAnalysisRequest(BaseModel): | |
fund_names: List[str] | |
investment_amount: float = Field(gt=0) | |
start_date: datetime | |
end_date: datetime | |
class FundReturn(BaseModel): | |
start_nav: float | |
end_nav: float | |
units: float | |
final_value: float | |
total_return: float | |
investment_amount: float | |
class FundAnalysisResult(BaseModel): | |
fund_name: str | |
category: str | |
scheme_code: str | |
fund_house: str | |
returns_data: FundReturn | |
nav_data: List[NAVData] | |
fund_meta: FundMeta | |
class FundAnalysisResponse(BaseModel): | |
results: List[FundAnalysisResult] | |
comparison_data: List[Dict[str, Any]] |