Home Assistant Unofficial Reference 2024.12.1
domain_data.py
Go to the documentation of this file.
1 """Support for esphome domain data."""
2 
3 from __future__ import annotations
4 
5 from dataclasses import dataclass, field
6 from functools import cache
7 from typing import Self
8 
9 from bleak_esphome.backend.cache import ESPHomeBluetoothCache
10 
11 from homeassistant.core import HomeAssistant
12 from homeassistant.helpers.json import JSONEncoder
13 
14 from .const import DOMAIN
15 from .entry_data import ESPHomeConfigEntry, ESPHomeStorage, RuntimeEntryData
16 
17 STORAGE_VERSION = 1
18 
19 
20 @dataclass(slots=True)
21 class DomainData:
22  """Define a class that stores global esphome data in hass.data[DOMAIN]."""
23 
24  _stores: dict[str, ESPHomeStorage] = field(default_factory=dict)
25  bluetooth_cache: ESPHomeBluetoothCache = field(
26  default_factory=ESPHomeBluetoothCache
27  )
28 
29  def get_entry_data(self, entry: ESPHomeConfigEntry) -> RuntimeEntryData:
30  """Return the runtime entry data associated with this config entry.
31 
32  Raises KeyError if the entry isn't loaded yet.
33  """
34  return entry.runtime_data
35 
37  self, hass: HomeAssistant, entry: ESPHomeConfigEntry
38  ) -> ESPHomeStorage:
39  """Get or create a Store instance for the given config entry."""
40  return self._stores.setdefault(
41  entry.entry_id,
43  hass, STORAGE_VERSION, f"esphome.{entry.entry_id}", encoder=JSONEncoder
44  ),
45  )
46 
47  @classmethod
48  @cache
49  def get(cls, hass: HomeAssistant) -> Self:
50  """Get the global DomainData instance stored in hass.data."""
51  ret = hass.data[DOMAIN] = cls()
52  return ret
ESPHomeStorage get_or_create_store(self, HomeAssistant hass, ESPHomeConfigEntry entry)
Definition: domain_data.py:38
RuntimeEntryData get_entry_data(self, ESPHomeConfigEntry entry)
Definition: domain_data.py:29