Source code for rath.observability.redaction

"""Recursive telemetry redaction with safe defaults."""

from __future__ import annotations

from collections.abc import Mapping

__all__ = ["redact"]

_SENSITIVE = frozenset(
    {"api_key", "authorization", "cookie", "password", "secret", "token"}
)


[docs] def redact(value: object) -> object: if isinstance(value, Mapping): return { str(key): ( "<redacted>" if any(part in str(key).lower() for part in _SENSITIVE) else redact(item) ) for key, item in value.items() } if isinstance(value, (list, tuple)): return [redact(item) for item in value] return value