Spaces:
Configuration error
Configuration error
Download config.py from fabrit/assets-tracker-api: direct link, hf CLI and curl.
- Browser
- Download file 4.34 kB
-
https://huggingface.co/spaces/fabrit/assets-tracker-api/resolve/main/config.py
- Command line
-
hf download hf://spaces/fabrit/assets-tracker-api/config.py
-
curl -L -o config.py https://huggingface.co/spaces/fabrit/assets-tracker-api/resolve/main/config.py
4.34 kB
| """ | |
| config.py β Central configuration for the Price Alert Bot. | |
| Contains ticker mappings, default price ranges, polling intervals, | |
| and asset categorisation. | |
| """ | |
| import os | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| # βββ Telegram ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| TELEGRAM_BOT_TOKEN: str = os.getenv("TELEGRAM_BOT_TOKEN", "") | |
| TELEGRAM_CHAT_ID: str = os.getenv("TELEGRAM_CHAT_ID", "") | |
| # βββ Polling / streaming intervals (seconds) ββββββββββββββββββββββββββββββββ | |
| STOCK_POLL_INTERVAL: int = 15 # yfinance polling for stocks & commodities | |
| CRYPTO_WS_RECONNECT_DELAY: int = 5 # seconds before reconnecting WebSocket | |
| CRYPTO_REST_FALLBACK_INTERVAL: int = 10 # REST fallback poll interval | |
| # βββ Alert behaviour βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Minimum seconds between consecutive alerts for the same asset. | |
| # Prevents spam when price oscillates rapidly at a range boundary. | |
| ALERT_COOLDOWN_SECONDS: int = int(os.getenv("ALERT_COOLDOWN_SECONDS", "300")) # 5 minutes | |
| # Maximum number of alert events kept in memory for /alerts history. | |
| ALERT_HISTORY_MAX: int = 100 | |
| # βββ Persistence βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # JSON file used to save/restore tracked asset ranges across restarts. | |
| PERSISTENCE_FILE: str = os.getenv("PERSISTENCE_FILE", "state.json") | |
| # βββ Asset categories ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| # Maps a user-friendly name β yfinance ticker | |
| YFINANCE_TICKERS: dict[str, str] = { | |
| # Commodities | |
| "GOLD": "GC=F", | |
| "SILVER": "SI=F", | |
| "CRUDE_OIL": "CL=F", | |
| # Stocks | |
| "NVIDIA": "NVDA", | |
| "TESLA": "TSLA", | |
| "GOOGLE": "GOOGL", | |
| "AMAZON": "AMZN", | |
| "ORACLE": "ORCL", | |
| "APPLE": "AAPL", | |
| "MICROSOFT": "MSFT", | |
| "META": "META", | |
| # Indices | |
| "SP500": "^GSPC", | |
| "NASDAQ": "^IXIC", | |
| "DOW": "^DJI", | |
| } | |
| # Maps a user-friendly name β Binance WebSocket stream symbol | |
| BINANCE_SYMBOLS: dict[str, str] = { | |
| "BTC": "btcusdt", | |
| "ETH": "ethusdt", | |
| "XRP": "xrpusdt", | |
| "SOL": "solusdt", | |
| "BNB": "bnbusdt", | |
| "DOGE": "dogeusdt", | |
| "ADA": "adausdt", | |
| "MATIC":"maticusdt", | |
| } | |
| # Reverse lookup: Binance stream symbol β user-friendly name | |
| BINANCE_SYMBOL_TO_NAME: dict[str, str] = {v: k for k, v in BINANCE_SYMBOLS.items()} | |
| # All supported asset names (for validation) | |
| ALL_ASSETS: set[str] = set(YFINANCE_TICKERS.keys()) | set(BINANCE_SYMBOLS.keys()) | |
| # βββ Default price ranges (min, max) β updated to current market levels βββββ | |
| DEFAULT_RANGES: dict[str, tuple[float, float]] = { | |
| # Commodities | |
| "GOLD": (2900.0, 3200.0), | |
| "SILVER": (30.0, 36.0), | |
| "CRUDE_OIL": (65.0, 75.0), | |
| # Crypto | |
| "BTC": (80000.0, 95000.0), | |
| "ETH": (1700.0, 2200.0), | |
| "XRP": (2.00, 2.80), | |
| "SOL": (120.0, 175.0), | |
| "BNB": (580.0, 650.0), | |
| "DOGE": (0.15, 0.25), | |
| "ADA": (0.65, 0.90), | |
| "MATIC": (0.40, 0.65), | |
| # Stocks | |
| "NVIDIA": (100.0, 135.0), | |
| "TESLA": (240.0, 310.0), | |
| "GOOGLE": (155.0, 185.0), | |
| "AMAZON": (195.0, 225.0), | |
| "ORACLE": (155.0, 185.0), | |
| "APPLE": (200.0, 240.0), | |
| "MICROSOFT": (370.0, 420.0), | |
| "META": (520.0, 620.0), | |
| # Indices | |
| "SP500": (5400.0, 5800.0), | |
| "NASDAQ": (17000.0,19000.0), | |
| "DOW": (41000.0,44000.0), | |
| } | |
| # βββ Logging βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| LOG_FILE: str = "bot.log" | |
| LOG_MAX_BYTES: int = 5 * 1024 * 1024 # 5 MB | |
| LOG_BACKUP_COUNT: int = 3 | |