Really-amin's picture
Upload 301 files
e4e4574 verified
"""Configuration management for HuggingFace Crypto Data Engine"""
from __future__ import annotations
import os
from typing import Optional
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
"""Application settings"""
# Server
HOST: str = "0.0.0.0"
PORT: int = 8000
ENV: str = "production"
VERSION: str = "1.0.0"
# Cache
CACHE_TYPE: str = "memory" # or 'redis'
CACHE_TTL_PRICES: int = 30 # seconds
CACHE_TTL_OHLCV: int = 300 # seconds (5 minutes)
CACHE_TTL_SENTIMENT: int = 600 # seconds (10 minutes)
CACHE_TTL_MARKET: int = 300 # seconds (5 minutes)
REDIS_URL: Optional[str] = None
# Rate Limiting
RATE_LIMIT_ENABLED: bool = True
RATE_LIMIT_PRICES: int = 120 # requests per minute
RATE_LIMIT_OHLCV: int = 60 # requests per minute
RATE_LIMIT_SENTIMENT: int = 30 # requests per minute
RATE_LIMIT_HEALTH: int = 0 # unlimited
# Data Providers (Optional API Keys)
BINANCE_API_KEY: Optional[str] = None
BINANCE_API_SECRET: Optional[str] = None
COINGECKO_API_KEY: Optional[str] = None
CRYPTOCOMPARE_API_KEY: Optional[str] = None
CRYPTOPANIC_API_KEY: Optional[str] = None
NEWSAPI_KEY: Optional[str] = None
# Features
ENABLE_SENTIMENT: bool = True
ENABLE_NEWS: bool = False
# Circuit Breaker
CIRCUIT_BREAKER_THRESHOLD: int = 5 # consecutive failures
CIRCUIT_BREAKER_TIMEOUT: int = 60 # seconds
# Request Timeouts
REQUEST_TIMEOUT: int = 10 # seconds
# Supported Symbols
SUPPORTED_SYMBOLS: str = "BTC,ETH,SOL,XRP,BNB,ADA,DOT,LINK,LTC,BCH,MATIC,AVAX,XLM,TRX"
# Supported Intervals
SUPPORTED_INTERVALS: str = "1m,5m,15m,1h,4h,1d,1w"
class Config:
env_file = ".env"
case_sensitive = True
# Global settings instance
settings = Settings()
def get_supported_symbols() -> list[str]:
"""Get list of supported symbols"""
return [s.strip() for s in settings.SUPPORTED_SYMBOLS.split(",")]
def get_supported_intervals() -> list[str]:
"""Get list of supported intervals"""
return [i.strip() for i in settings.SUPPORTED_INTERVALS.split(",")]