Spaces:
Sleeping
Sleeping
| """ | |
| Configuration module for Financial Market Data MCP Server. | |
| Handles environment variables, logging, and cache configuration. | |
| """ | |
| import os | |
| import logging | |
| from dotenv import load_dotenv | |
| from cachetools import TTLCache | |
| # Load environment variables from .env file | |
| load_dotenv() | |
| # ============================================================================ | |
| # LOGGING CONFIGURATION | |
| # ============================================================================ | |
| logging.basicConfig( | |
| level=logging.INFO, | |
| format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', | |
| handlers=[ | |
| logging.StreamHandler() | |
| ] | |
| ) | |
| logger = logging.getLogger(__name__) | |
| # ============================================================================ | |
| # SECURITY SETTINGS | |
| # ============================================================================ | |
| RATE_LIMIT_CALLS = int(os.getenv('RATE_LIMIT_CALLS', '20')) # Max calls per minute | |
| RATE_LIMIT_PERIOD = int(os.getenv('RATE_LIMIT_PERIOD', '60')) # In seconds | |
| MAX_TICKERS_PER_REQUEST = int(os.getenv('MAX_TICKERS_PER_REQUEST', '5')) | |
| ALLOWED_TICKER_PATTERN = r'^[A-Z]{1,5}$' # 1-5 uppercase letters | |
| # ============================================================================ | |
| # PERFORMANCE SETTINGS | |
| # ============================================================================ | |
| CACHE_TTL = int(os.getenv('CACHE_TTL', '60')) # Cache TTL in seconds | |
| CACHE_MAXSIZE = int(os.getenv('CACHE_MAXSIZE', '200')) # Max cache entries | |
| quote_cache = TTLCache(maxsize=CACHE_MAXSIZE, ttl=CACHE_TTL) | |
| # ============================================================================ | |
| # VALIDATION CONSTANTS | |
| # ============================================================================ | |
| ALLOWED_PERIODS = ["1d", "5d", "1mo", "3mo", "6mo", "1y", "2y", "5y", "10y", "ytd", "max"] | |
| ALLOWED_INTERVALS = ["1m", "2m", "5m", "15m", "30m", "60m", "90m", "1h", "1d", "5d", "1wk", "1mo", "3mo"] | |
| ALLOWED_METRICS = ["performance", "valuation", "volatility"] | |