mirror of
https://github.com/home-assistant/core.git
synced 2025-05-01 12:47:53 +00:00

* Add diagnostics for AirVisual config entries * Tests * More * Tests * Code review * Fix tests
58 lines
1.6 KiB
Python
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"]),
|
|
}
|