diff --git a/homeassistant/components/diagnostics/util.py b/homeassistant/components/diagnostics/util.py index d849dc052e4..6441dd9a36f 100644 --- a/homeassistant/components/diagnostics/util.py +++ b/homeassistant/components/diagnostics/util.py @@ -2,6 +2,7 @@ from __future__ import annotations from collections.abc import Iterable, Mapping +from copy import deepcopy from typing import Any from homeassistant.core import callback @@ -10,19 +11,23 @@ from .const import REDACTED @callback -def async_redact_data(data: Mapping, to_redact: Iterable[Any]) -> dict[str, Any]: +def async_redact_data(data: Mapping, to_redact: Iterable[Any]) -> Mapping[Any, Any]: """Redact sensitive data in a dict.""" if not isinstance(data, (Mapping, list)): return data - redacted = {**data} + redacted = deepcopy(data) - for key, value in redacted.items(): - if key in to_redact: - redacted[key] = REDACTED - elif isinstance(value, dict): - redacted[key] = async_redact_data(value, to_redact) - elif isinstance(value, list): - redacted[key] = [async_redact_data(item, to_redact) for item in value] + if isinstance(redacted, dict): + for key, value in redacted.items(): + if key in to_redact: + redacted[key] = REDACTED + elif isinstance(value, dict): + redacted[key] = async_redact_data(value, to_redact) + elif isinstance(value, list): + redacted[key] = [async_redact_data(item, to_redact) for item in value] + elif isinstance(redacted, list): + for idx, value in enumerate(redacted): + redacted[idx] = async_redact_data(value, to_redact) return redacted