def hide_secret_values()

in src/commons/log_helper.py [0:0]


def hide_secret_values(obj: JT, secret_keys: set[str] | None = None,
                       replacement: str = '****') -> JT:
    """
    Does not change the incoming object, creates a new one. The event after
    this function is just supposed to be printed.
    :param obj:
    :param secret_keys:
    :param replacement:
    :return:
    """
    if not secret_keys:
        secret_keys = SECRET_KEYS
    match obj:
        case dict():
            res = {}
            for k, v in obj.items():
                if k in secret_keys:
                    res[k] = replacement
                else:
                    res[k] = hide_secret_values(v, secret_keys, replacement)
            return res
        case list():
            return [
                hide_secret_values(v, secret_keys, replacement) for v in obj
            ]
        case str():
            try:
                return hide_secret_values(
                    json.loads(obj),
                    secret_keys,
                    replacement
                )
            except json.JSONDecodeError:
                return obj
        case _:
            return obj