1 """Provide a base implementation for registries."""
3 from __future__
import annotations
5 from abc
import ABC, abstractmethod
6 from collections
import UserDict, defaultdict
7 from collections.abc
import Mapping, Sequence, ValuesView
8 from typing
import TYPE_CHECKING, Any, Literal
13 from .storage
import Store
18 type RegistryIndexType = defaultdict[str, dict[str, Literal[
True]]]
22 """Base class for registry items."""
24 data: dict[str, _DataT]
26 def values(self) -> ValuesView[_DataT]:
27 """Return the underlying values to avoid __iter__ overhead."""
35 def _unindex_entry(self, key: str, replacement_entry: _DataT |
None =
None) ->
None:
36 """Unindex an entry."""
47 self, key: str, value: str, index: RegistryIndexType
49 """Unindex an entry value.
52 value is the value to unindex such as config_entry_id or device_id.
53 index is the index to unindex from.
55 entries = index[value]
66 class BaseRegistry[_StoreDataT: Mapping[str, Any] | Sequence[Any]](ABC):
67 """Class to implement a registry."""
70 _store: Store[_StoreDataT]
74 """Schedule saving the registry."""
77 delay = SAVE_DELAY
if self.hass.state
is CoreState.running
else SAVE_DELAY_LONG
83 """Return data of registry to store in a file."""
None _unindex_entry(self, str key, _DataT|None replacement_entry=None)
None _unindex_entry_value(self, str key, str value, RegistryIndexType index)
None __delitem__(self, str key)
None __setitem__(self, str key, _DataT entry)
None _index_entry(self, str key, _DataT entry)
ValuesView[_DataT] values(self)
None async_schedule_save(self)
_StoreDataT _data_to_save(self)
None async_delay_save(self, Callable[[], _T] data_func, float delay=0)