import os import sys from datetime import date from typing import Literal from dotenv import load_dotenv from loguru import logger from pydantic import BaseModel from typing import Any # ---Pydantic models--- DistType = Literal["normal", "t", "skewt", "ged"] class GarchParams(BaseModel): p: int q: int dist: DistType class PredictionResponse(BaseModel): symbol: str target_date: date model: str model_params: GarchParams predicted_volatility: float # /report class ReportResponse(BaseModel): metrics_date: list[dict[str, Any]] metrics_ticker: list[dict[str, Any]] worst_tickers: list[dict[str, Any]] # GARCH Model Defaults DEFAULT_P = 1 DEFAULT_Q = 1 DEFAULT_DIST = "skewt" # ENV VARIABLES load_dotenv() LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO").upper() DB_URL = os.getenv("DB_URL") # LOGGING def setup_logging() -> None: logger.remove() logger.add( sys.stdout, format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function}:{line} - {message}", level=LOG_LEVEL, enqueue=True, )