# ============================================================ # config.py — Configuración centralizada + constantes del proyecto # ------------------------------------------------------------ # NOTA PARA AUDITORÍA: # - Este módulo NO tiene efectos secundarios al importarlo. # - Carga valores desde variables de entorno (con defaults seguros) # y define constantes compartidas por los demás módulos. # - Incluye el mapeo TICKERS_TO_IDS utilizado para los iframes # de bitcointreasuries.net (tal cual el código original). # ============================================================ from __future__ import annotations import os from typing import Dict # ------------------------------------------------------------ # Helpers de entorno # ------------------------------------------------------------ def _get_bool(env_var: str, default: bool = True) -> bool: """ Interpreta variables de entorno tipo booleano (e.g., "true", "1", "yes"). """ val = os.getenv(env_var, str(default)).strip().lower() return val in {"1", "true", "t", "yes", "y", "on"} # ------------------------------------------------------------ # Variables de entorno (claves y opciones) # ------------------------------------------------------------ SCRAPERAPI_KEY: str = os.getenv("SCRAPERAPI_KEY", "") CRYPTOCOMPARE_API_KEY: str = os.getenv("CRYPTOCOMPARE_API_KEY", "") TIMEZONE_TARGET: str = os.getenv("TIMEZONE_TARGET", "America/New_York") GRADIO_SHARE: bool = _get_bool("GRADIO_SHARE", True) # ------------------------------------------------------------ # Endpoints y URLs comunes # ------------------------------------------------------------ CRYPTOCOMPARE_BASE_URL: str = "https://min-api.cryptocompare.com/data/v2/histohour" BITCOINTREASURIES_STOCKS_URL: str = "https://bitcointreasuries.net/" BITCOINTREASURIES_ETFS_URL: str = "https://bitcointreasuries.net/etfs-and-exchanges" YF_SEARCH_ENDPOINT: str = "https://query1.finance.yahoo.com/v1/finance/search" # ------------------------------------------------------------ # Mapeo estático para iframes de Bitcointreasuries # (equivalente a `tickers_to_ids` en tu app original) # ------------------------------------------------------------ TICKERS_TO_IDS: Dict[str, int] = { "MSTR": 1, "MARA": 4, "CEP": 436, "BSTR": 674, "RIOT": 7, "DJT": 671, "3350.T": 176, "GLXY": 10, "CLSK": 28, "TSLA": 2, "HUT": 6, "COIN": 8, "XYZ": 5, "NXTT": 473, "CCCM": 595, "SMLR": 194, "GME": 517, "CANG": 337, "ADE.DE": 11, "0434.HK": 238, "HOLO": 508, "SQNS": 644, "HIVE": 9, "EXOD": 168, "ALTBG.PA": 295, "3659.T": 14, "FUFU": 325, "BTDR": 324, "SWC.AQ": 440, "FLD": 256, "CAN": 111, "BITF": 12, "CIFR": 82, "3825.T": 301, "KULR": 341, "NA": 331, "CORZ": 3, "MSW": 356, "SOS": 426, "BTCT.V": 608, "AKER.OL": 15, "GS9": 491, "CASH3.SA": 395, "MELI": 182, "SRAG.DU": 279, "JAS.BK": 307, "DCC.AX": 24, "ARLP": 425, "377030.KQ": 401, "BTBT": 18, "NDA.V": 32, "DDC": 500, "NTHOL.IS": 40, "DMGI.V": 23, "NCTY": 442, "VLCN": 679, "PNIX.AQ": 582, "ABT.DU": 21, "LQWD.V": 29, "CS.ST": 288, "VIRT": 472, "112040.KQ": 403, "RUM": 402, "DEFI.NE": 254, "GNS": 294, "PRE": 573, "3189.T": 445, "BTCB.SE": 636, "LMFA": 91, "BMNR": 550, "SIX.CN": 597, "BNXAF": 30, "PHX.AD": 449, "HKHC": 480, "042420.KQ": 406, "BTC.BK": 31, "K33.ST": 538, "COIN.AQ": 483, "BIGG.V": 17, "BTM": 372, "KWM": 643, "BTC.L": 292, "8005.HK": 342, "MATA.V": 357, "VANA.MC": 535, "V3TC.AQ": 586, "SBC": 380, "FRMO": 35, "ATAI": 479, "CBIT.V": 27, "MLGO": 511, "MOGO": 36, "8267.HK": 239, "WNDR.TO": 242, "SATO.V": 240, "9238.T": 434, "1723.HK": 384, "PXI.CN": 634, "SATS.L": 666, "ALBDM.PA": 580, "IREN": 12, "WULF": 15, "GREE": 21, "EBON": 14, "DGHI": 25, "SDIG": 17, "MIGI": 16, "SLNH": 24, "ANY": 23, "APLD": 20, "BTCS": 19, "RVYL": 30, "ICG": 29, "HOOD": 35, "PYPL": 2, "NVDA": 22, "CME": 26, "DEFI": 31, "IBIT": 119, "BTF": 33, "SQ": 34, "BKKT": 37, "BTCM": 38, "MA": 39, "IBM": 40, "GBTC": 50, "BITO": 41, "BITB": 117, "BTC-USD": 0, "MTPLF": 176 } # ------------------------------------------------------------ # Export público del módulo # ------------------------------------------------------------ __all__ = [ # claves / opciones "SCRAPERAPI_KEY", "CRYPTOCOMPARE_API_KEY", "TIMEZONE_TARGET", "GRADIO_SHARE", # endpoints y urls "CRYPTOCOMPARE_BASE_URL", "BITCOINTREASURIES_STOCKS_URL", "BITCOINTREASURIES_ETFS_URL", "YF_SEARCH_ENDPOINT", # constantes de negocio "TICKERS_TO_IDS", ]