Home Assistant Unofficial Reference 2024.12.1
util.py
Go to the documentation of this file.
1 """Diagnostic utilities."""
2 
3 from __future__ import annotations
4 
5 from collections.abc import Iterable, Mapping
6 from typing import Any, cast, overload
7 
8 from homeassistant.core import callback
9 
10 from .const import REDACTED
11 
12 
13 @overload
14 def async_redact_data(data: Mapping, to_redact: Iterable[Any]) -> dict: ...
15 
16 
17 @overload
18 def async_redact_data[_T](data: _T, to_redact: Iterable[Any]) -> _T: ...
19 
20 
21 @callback
22 def async_redact_data[_T](data: _T, to_redact: Iterable[Any]) -> _T:
23  """Redact sensitive data in a dict."""
24  if not isinstance(data, (Mapping, list)):
25  return data
26 
27  if isinstance(data, list):
28  return cast(_T, [async_redact_data(val, to_redact) for val in data])
29 
30  redacted = {**data}
31 
32  for key, value in redacted.items():
33  if value is None:
34  continue
35  if isinstance(value, str) and not value:
36  continue
37  if key in to_redact:
38  redacted[key] = REDACTED
39  elif isinstance(value, Mapping):
40  redacted[key] = async_redact_data(value, to_redact)
41  elif isinstance(value, list):
42  redacted[key] = [async_redact_data(item, to_redact) for item in value]
43 
44  return cast(_T, redacted)
dict async_redact_data(Mapping data, Iterable[Any] to_redact)
Definition: util.py:14