Aaron Bach 05b8da11a3
Add diagnostics for the AirVisual integration (#64479)
* Add diagnostics for AirVisual config entries

* Tests

* More

* Tests

* Code review

* Fix tests
2022-01-19 15:28:18 -07:00

58 lines
1.6 KiB
Python

"""Diagnostics support for AirVisual."""
from __future__ import annotations
from types import MappingProxyType
from typing import Any
from homeassistant.components.diagnostics import REDACTED
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_API_KEY, CONF_LATITUDE, CONF_LONGITUDE, CONF_STATE
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
from .const import CONF_CITY, CONF_COUNTRY, DOMAIN
ATTR_DATA = "data"
ATTR_OPTIONS = "options"
ATTR_TITLE = "title"
CONF_COORDINATES = "coordinates"
@callback
def _async_redact_data(data: MappingProxyType | dict) -> dict[str, Any]:
"""Redact sensitive data in a dict."""
redacted = {**data}
for key, value in redacted.items():
if key in (
CONF_API_KEY,
CONF_CITY,
CONF_COORDINATES,
CONF_COUNTRY,
CONF_LATITUDE,
CONF_LONGITUDE,
CONF_STATE,
):
redacted[key] = REDACTED
if isinstance(value, dict):
redacted[key] = _async_redact_data(value)
return redacted
async def async_get_config_entry_diagnostics(
hass: HomeAssistant, entry: ConfigEntry
) -> dict[str, Any]:
"""Return diagnostics for a config entry."""
coordinator: DataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id]
return {
"entry": {
"title": entry.title,
"data": _async_redact_data(entry.data),
"options": _async_redact_data(entry.options),
},
"data": _async_redact_data(coordinator.data["data"]),
}