Home Assistant Unofficial Reference 2024.12.1
diagnostics.py
Go to the documentation of this file.
1 """Provides diagnostics for google calendar."""
2 
3 import datetime
4 from typing import Any
5 
6 from homeassistant.components.diagnostics import async_redact_data
7 from homeassistant.config_entries import ConfigEntry
8 from homeassistant.core import HomeAssistant
9 from homeassistant.util import dt as dt_util
10 
11 from .const import DATA_STORE, DOMAIN
12 
13 TO_REDACT = {
14  "id",
15  "ical_uuid",
16  "summary",
17  "description",
18  "location",
19  "attendees",
20  "recurring_event_id",
21 }
22 
23 
24 def redact_store(data: dict[str, Any]) -> dict[str, Any]:
25  """Redact personal information from calendar events in the store."""
26  id_num = 0
27  diagnostics = {}
28  for store_data in data.values():
29  local_store: dict[str, Any] = store_data.get("event_sync", {})
30  for calendar_data in local_store.values():
31  id_num += 1
32  items: dict[str, Any] = calendar_data.get("items", {})
33  diagnostics[f"calendar#{id_num}"] = {
34  "events": [
35  async_redact_data(item, TO_REDACT) for item in items.values()
36  ],
37  "sync_token_version": calendar_data.get("sync_token_version"),
38  }
39  return diagnostics
40 
41 
43  hass: HomeAssistant, config_entry: ConfigEntry
44 ) -> dict[str, Any]:
45  """Return diagnostics for a config entry."""
46  payload: dict[str, Any] = {
47  "now": dt_util.now().isoformat(),
48  "timezone": str(dt_util.get_default_time_zone()),
49  "system_timezone": str(datetime.datetime.now().astimezone().tzinfo),
50  }
51 
52  store = hass.data[DOMAIN][config_entry.entry_id][DATA_STORE]
53  data = await store.async_load()
54  payload["store"] = redact_store(data)
55  return payload
dict async_redact_data(Mapping data, Iterable[Any] to_redact)
Definition: util.py:14
dict[str, Any] async_get_config_entry_diagnostics(HomeAssistant hass, ConfigEntry config_entry)
Definition: diagnostics.py:44
dict[str, Any] redact_store(dict[str, Any] data)
Definition: diagnostics.py:24