1 """Support for the Airzone Cloud diagnostics."""
3 from __future__
import annotations
5 from collections.abc
import Mapping
8 from aioairzone_cloud.const
import (
28 from .
import AirzoneCloudConfigEntry
50 def gather_ids(api_data: dict[str, Any]) -> dict[str, Any]:
51 """Return dict with IDs."""
52 ids: dict[str, Any] = {}
55 for dev_id
in api_data[RAW_DEVICES_STATUS]:
57 ids[dev_id] = f
"device{dev_idx}"
62 for inst_id, inst_data
in api_data[RAW_INSTALLATIONS].items():
63 if inst_id
not in ids:
64 ids[inst_id] = f
"installation{inst_idx}"
66 for group
in inst_data[API_GROUPS]:
67 group_id = group[API_GROUP_ID]
68 if group_id
not in ids:
69 ids[group_id] = f
"group{group_idx}"
73 for ws_id
in api_data[RAW_WEBSERVERS]:
75 ids[ws_id] = f
"webserver{ws_idx}"
82 """Redact sensitive keys in a dict."""
83 if not isinstance(data, (Mapping, list)):
86 if isinstance(data, list):
94 redacted[ids[key]] = redacted.pop(key)
95 elif isinstance(redacted[key], Mapping):
97 elif isinstance(redacted[key], list):
98 redacted[key] = [
redact_keys(item, ids)
for item
in redacted[key]]
104 """Redact sensitive values in a dict."""
105 if not isinstance(data, (Mapping, list)):
110 if isinstance(data, list):
115 for key, value
in redacted.items():
118 if isinstance(value, Mapping):
120 elif isinstance(value, list):
123 redacted[key] = ids[value]
129 data: dict[str, Any], ids: dict[str, Any], to_redact: list[str]
131 """Redact sensitive data."""
138 hass: HomeAssistant, config_entry: AirzoneCloudConfigEntry
140 """Return diagnostics for a config entry."""
141 coordinator = config_entry.runtime_data
142 raw_data = coordinator.airzone.raw_data()
146 "api_data":
redact_all(raw_data, ids, TO_REDACT_API),
147 "config_entry":
redact_all(config_entry.as_dict(), ids, TO_REDACT_CONFIG),
148 "coord_data":
redact_all(coordinator.data, ids, TO_REDACT_COORD),
dict[str, Any] redact_all(dict[str, Any] data, dict[str, Any] ids, list[str] to_redact)
Any redact_keys(Any data, dict[str, Any] ids)
dict[str, Any] gather_ids(dict[str, Any] api_data)
Any redact_values(Any data, dict[str, Any] ids)
dict[str, Any] async_get_config_entry_diagnostics(HomeAssistant hass, AirzoneCloudConfigEntry config_entry)
dict async_redact_data(Mapping data, Iterable[Any] to_redact)