"""Debug logging helpers for rp.""" from __future__ import annotations import os from collections.abc import Callable, Mapping from rich.console import Console from rich.text import Text DEBUG_ENV_VAR = "RP_DEBUG" _FALSE_DEBUG_VALUES = {"", "0", "false", "no", "off"} type DebugLogger = Callable[[str], None] def env_debug_enabled(env: Mapping[str, str] | None = None) -> bool: """Return whether debug logging is enabled via ``RP_DEBUG``.""" source = os.environ if env is None else env value = source.get(DEBUG_ENV_VAR) if value is None: return False return value.strip().lower() not in _FALSE_DEBUG_VALUES def make_debug_logger(console: Console, enabled: bool) -> DebugLogger | None: """Return a console-backed debug logger when debug mode is enabled.""" if not enabled: return None def _log(message: str) -> None: console.print(Text.assemble(("[rp debug] ", "dim"), message)) return _log def log_debug(debug: DebugLogger | None, message: str) -> None: """Emit a debug line when a debug logger is configured.""" if debug is not None: debug(message)