Fix legacy nest diangostics to return gracefully, rather than a TypError by checking explicitiy for SDM in the config entry. Update diagnostics to use the common nest test fixture, and extend with support for the legacy nest config. Use the sdm test fixture in the existing legacy tests so they all share the same config files.
47 lines
1.3 KiB
Python
47 lines
1.3 KiB
Python
"""Diagnostics support for Nest."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from google_nest_sdm import diagnostics
|
|
from google_nest_sdm.device import Device
|
|
from google_nest_sdm.device_traits import InfoTrait
|
|
from google_nest_sdm.exceptions import ApiException
|
|
|
|
from homeassistant.config_entries import ConfigEntry
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from .const import DATA_SDM, DATA_SUBSCRIBER, DOMAIN
|
|
|
|
REDACT_DEVICE_TRAITS = {InfoTrait.NAME}
|
|
|
|
|
|
async def async_get_config_entry_diagnostics(
|
|
hass: HomeAssistant, config_entry: ConfigEntry
|
|
) -> dict:
|
|
"""Return diagnostics for a config entry."""
|
|
if DATA_SDM not in config_entry.data:
|
|
return {}
|
|
|
|
if DATA_SUBSCRIBER not in hass.data[DOMAIN]:
|
|
return {"error": "No subscriber configured"}
|
|
|
|
subscriber = hass.data[DOMAIN][DATA_SUBSCRIBER]
|
|
try:
|
|
device_manager = await subscriber.async_get_device_manager()
|
|
except ApiException as err:
|
|
return {"error": str(err)}
|
|
|
|
return {
|
|
**diagnostics.get_diagnostics(),
|
|
"devices": [
|
|
get_device_data(device) for device in device_manager.devices.values()
|
|
],
|
|
}
|
|
|
|
|
|
def get_device_data(device: Device) -> dict[str, Any]:
|
|
"""Return diagnostic information about a device."""
|
|
# Library performs its own redaction for device data
|
|
return device.get_diagnostics()
|