Home Assistant Unofficial Reference 2024.12.1
storage.py
Go to the documentation of this file.
1 """Storage for remote scanners."""
2 
3 from __future__ import annotations
4 
5 from bluetooth_adapters import (
6  DiscoveredDeviceAdvertisementData,
7  DiscoveredDeviceAdvertisementDataDict,
8  DiscoveryStorageType,
9  discovered_device_advertisement_data_from_dict,
10  discovered_device_advertisement_data_to_dict,
11  expire_stale_scanner_discovered_device_advertisement_data,
12 )
13 
14 from homeassistant.core import HomeAssistant, callback
15 from homeassistant.helpers.storage import Store
16 
17 REMOTE_SCANNER_STORAGE_VERSION = 1
18 REMOTE_SCANNER_STORAGE_KEY = "bluetooth.remote_scanners"
19 SCANNER_SAVE_DELAY = 5
20 
21 
23  """Storage for remote scanners."""
24 
25  def __init__(self, hass: HomeAssistant) -> None:
26  """Initialize the storage."""
27  self._store: Store[DiscoveryStorageType] = Store(
28  hass, REMOTE_SCANNER_STORAGE_VERSION, REMOTE_SCANNER_STORAGE_KEY
29  )
30  self._data_data: DiscoveryStorageType = {}
31 
32  async def async_setup(self) -> None:
33  """Set up the storage."""
34  self._data_data = await self._store.async_load() or {}
35  expire_stale_scanner_discovered_device_advertisement_data(self._data_data)
36 
37  def scanners(self) -> list[str]:
38  """Get all scanners."""
39  return list(self._data_data.keys())
40 
41  @callback
43  self, scanner: str
44  ) -> DiscoveredDeviceAdvertisementData | None:
45  """Get discovered devices by scanner."""
46  if not (scanner_data := self._data_data.get(scanner)):
47  return None
48  return discovered_device_advertisement_data_from_dict(scanner_data)
49 
50  @callback
52  self, scanner: str
53  ) -> DiscoveredDeviceAdvertisementDataDict | None:
54  """Get discovered devices by scanner as a dict."""
55  return self._data_data.get(scanner)
56 
57  @callback
58  def _async_get_data(self) -> DiscoveryStorageType:
59  """Get data to save to disk."""
60  return self._data_data
61 
62  @callback
64  self, scanner: str, data: DiscoveredDeviceAdvertisementData
65  ) -> None:
66  """Set discovered devices by scanner."""
67  self._data_data[scanner] = discovered_device_advertisement_data_to_dict(data)
68  self._store.async_delay_save(self._async_get_data_async_get_data, SCANNER_SAVE_DELAY)
None async_set_advertisement_history(self, str scanner, DiscoveredDeviceAdvertisementData data)
Definition: storage.py:65
DiscoveredDeviceAdvertisementData|None async_get_advertisement_history(self, str scanner)
Definition: storage.py:44
DiscoveredDeviceAdvertisementDataDict|None async_get_advertisement_history_as_dict(self, str scanner)
Definition: storage.py:53
web.Response get(self, web.Request request, str config_key)
Definition: view.py:88
_T|None async_load(self)
Definition: storage.py:275
None async_delay_save(self, Callable[[], _T] data_func, float delay=0)
Definition: storage.py:444