import builtins as _builtins import os import sys import dotenv as _dotenv # Determine external data directory (supports PyInstaller) extDataDir = os.getcwd() if getattr(sys, "frozen", False): # pragma: no cover - runtime packaging path extDataDir = sys._MEIPASS # type: ignore[attr-defined] _already_initialized = globals().get("_already_initialized", False) # Snapshot environment keys before potential .env load _pre_keys = set(os.environ.keys()) # Preserve patched load_dotenv if present (tests patch this symbol) if "load_dotenv" not in globals(): # first import or not patched yet load_dotenv = _dotenv.load_dotenv # type: ignore[assignment] # Always call (tests expect call with override=True) load_dotenv(override=True) _already_initialized = True # Environment driven constants (tests expect specific defaults / formats) # If LOG_LEVEL only introduced via .env (not in original env snapshot), treat as default if "LOG_LEVEL" in os.environ and "LOG_LEVEL" not in _pre_keys: LOG_LEVEL = "INFO" else: LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO").upper() or "INFO" # Test suite expects /tmp/logs/thechart as the default path (not the previous order) LOG_PATH = os.getenv("LOG_PATH", "/tmp/logs/thechart") LOG_CLEAR = os.getenv("LOG_CLEAR", "False").capitalize() BACKUP_PATH = os.getenv("BACKUP_PATH", "/tmp/thechart/backups") __all__ = [ "LOG_LEVEL", "LOG_PATH", "LOG_CLEAR", "BACKUP_PATH", ] # Make module accessible as global name in tests even when not explicitly imported _builtins.constants = sys.modules.get(__name__)