|
|
"""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""" |
|
|
|
|
|
|
|
|
HOST: str = "0.0.0.0" |
|
|
PORT: int = 8000 |
|
|
ENV: str = "production" |
|
|
VERSION: str = "1.0.0" |
|
|
|
|
|
|
|
|
CACHE_TYPE: str = "memory" |
|
|
CACHE_TTL_PRICES: int = 30 |
|
|
CACHE_TTL_OHLCV: int = 300 |
|
|
CACHE_TTL_SENTIMENT: int = 600 |
|
|
CACHE_TTL_MARKET: int = 300 |
|
|
REDIS_URL: Optional[str] = None |
|
|
|
|
|
|
|
|
RATE_LIMIT_ENABLED: bool = True |
|
|
RATE_LIMIT_PRICES: int = 120 |
|
|
RATE_LIMIT_OHLCV: int = 60 |
|
|
RATE_LIMIT_SENTIMENT: int = 30 |
|
|
RATE_LIMIT_HEALTH: int = 0 |
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
ENABLE_SENTIMENT: bool = True |
|
|
ENABLE_NEWS: bool = False |
|
|
|
|
|
|
|
|
CIRCUIT_BREAKER_THRESHOLD: int = 5 |
|
|
CIRCUIT_BREAKER_TIMEOUT: int = 60 |
|
|
|
|
|
|
|
|
REQUEST_TIMEOUT: int = 10 |
|
|
|
|
|
|
|
|
SUPPORTED_SYMBOLS: str = "BTC,ETH,SOL,XRP,BNB,ADA,DOT,LINK,LTC,BCH,MATIC,AVAX,XLM,TRX" |
|
|
|
|
|
|
|
|
SUPPORTED_INTERVALS: str = "1m,5m,15m,1h,4h,1d,1w" |
|
|
|
|
|
class Config: |
|
|
env_file = ".env" |
|
|
case_sensitive = True |
|
|
|
|
|
|
|
|
|
|
|
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(",")] |
|
|
|