mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 03:07:37 +00:00
Store preferred dataset separately in thread dataset store (#87378)
This commit is contained in:
parent
ff7c455478
commit
0d713809e7
@ -24,7 +24,6 @@ SAVE_DELAY = 10
|
||||
class DatasetEntry:
|
||||
"""Dataset store entry."""
|
||||
|
||||
preferred: bool
|
||||
source: str
|
||||
tlv: str
|
||||
|
||||
@ -56,7 +55,6 @@ class DatasetEntry:
|
||||
return {
|
||||
"created": self.created.isoformat(),
|
||||
"id": self.id,
|
||||
"preferred": self.preferred,
|
||||
"source": self.source,
|
||||
"tlv": self.tlv,
|
||||
}
|
||||
@ -69,7 +67,8 @@ class DatasetStore:
|
||||
"""Initialize the dataset store."""
|
||||
self.hass = hass
|
||||
self.datasets: dict[str, DatasetEntry] = {}
|
||||
self._store: Store[dict[str, list[dict[str, Any]]]] = Store(
|
||||
self.preferred_dataset: str | None = None
|
||||
self._store: Store[dict[str, Any]] = Store(
|
||||
hass,
|
||||
STORAGE_VERSION_MAJOR,
|
||||
STORAGE_KEY,
|
||||
@ -86,10 +85,11 @@ class DatasetStore:
|
||||
if any(entry for entry in self.datasets.values() if entry.dataset == dataset):
|
||||
return
|
||||
|
||||
# Set to preferred if this is the first dataset
|
||||
preferred = not bool(self.datasets)
|
||||
entry = DatasetEntry(preferred=preferred, source=source, tlv=tlv)
|
||||
entry = DatasetEntry(source=source, tlv=tlv)
|
||||
self.datasets[entry.id] = entry
|
||||
# Set to preferred if there is no preferred dataset
|
||||
if self.preferred_dataset is None:
|
||||
self.preferred_dataset = entry.id
|
||||
self.async_schedule_save()
|
||||
|
||||
@callback
|
||||
@ -102,6 +102,7 @@ class DatasetStore:
|
||||
data = await self._store.async_load()
|
||||
|
||||
datasets: dict[str, DatasetEntry] = {}
|
||||
preferred_dataset: str | None = None
|
||||
|
||||
if data is not None:
|
||||
for dataset in data["datasets"]:
|
||||
@ -109,12 +110,13 @@ class DatasetStore:
|
||||
datasets[dataset["id"]] = DatasetEntry(
|
||||
created=created,
|
||||
id=dataset["id"],
|
||||
preferred=dataset["preferred"],
|
||||
source=dataset["source"],
|
||||
tlv=dataset["tlv"],
|
||||
)
|
||||
preferred_dataset = data["preferred_dataset"]
|
||||
|
||||
self.datasets = datasets
|
||||
self.preferred_dataset = preferred_dataset
|
||||
|
||||
@callback
|
||||
def async_schedule_save(self) -> None:
|
||||
@ -124,8 +126,9 @@ class DatasetStore:
|
||||
@callback
|
||||
def _data_to_save(self) -> dict[str, list[dict[str, str | None]]]:
|
||||
"""Return data of datasets to store in a file."""
|
||||
data = {}
|
||||
data: dict[str, Any] = {}
|
||||
data["datasets"] = [dataset.to_json() for dataset in self.datasets.values()]
|
||||
data["preferred_dataset"] = self.preferred_dataset
|
||||
return data
|
||||
|
||||
|
||||
|
@ -85,6 +85,7 @@ async def ws_list_datasets(
|
||||
|
||||
store = await dataset_store.async_get_store(hass)
|
||||
result = []
|
||||
preferred_dataset = store.preferred_dataset
|
||||
for dataset in store.datasets.values():
|
||||
result.append(
|
||||
{
|
||||
@ -93,7 +94,7 @@ async def ws_list_datasets(
|
||||
"extended_pan_id": dataset.extended_pan_id,
|
||||
"network_name": dataset.network_name,
|
||||
"pan_id": dataset.pan_id,
|
||||
"preferred": dataset.preferred,
|
||||
"preferred": dataset.id == preferred_dataset,
|
||||
"source": dataset.source,
|
||||
}
|
||||
)
|
||||
|
@ -122,9 +122,7 @@ async def test_load_datasets(hass: HomeAssistant) -> None:
|
||||
if dataset.source == "🎅":
|
||||
dataset_3_store_1 = dataset
|
||||
|
||||
assert dataset_1_store_1.preferred
|
||||
assert not dataset_2_store_1.preferred
|
||||
assert not dataset_3_store_1.preferred
|
||||
assert store1.preferred_dataset == dataset_1_store_1.id
|
||||
|
||||
store2 = dataset_store.DatasetStore(hass)
|
||||
await flush_store(store1._store)
|
||||
@ -135,12 +133,15 @@ async def test_load_datasets(hass: HomeAssistant) -> None:
|
||||
for dataset in store2.datasets.values():
|
||||
if dataset.source == "Google":
|
||||
dataset_1_store_2 = dataset
|
||||
if dataset.source == "Multipan":
|
||||
dataset_2_store_2 = dataset
|
||||
if dataset.source == "🎅":
|
||||
dataset_3_store_2 = dataset
|
||||
|
||||
assert list(store1.datasets) == list(store2.datasets)
|
||||
|
||||
assert dataset_1_store_1 == dataset_1_store_2
|
||||
assert dataset_2_store_1 == dataset_2_store_2
|
||||
assert dataset_3_store_1 == dataset_3_store_2
|
||||
|
||||
|
||||
@ -154,27 +155,26 @@ async def test_loading_datasets_from_storage(hass: HomeAssistant, hass_storage)
|
||||
{
|
||||
"created": "2023-02-02T09:41:13.746514+00:00",
|
||||
"id": "id1",
|
||||
"preferred": True,
|
||||
"source": "source_1",
|
||||
"tlv": "DATASET_1",
|
||||
},
|
||||
{
|
||||
"created": "2023-02-02T09:41:13.746514+00:00",
|
||||
"id": "id2",
|
||||
"preferred": True,
|
||||
"source": "source_2",
|
||||
"tlv": "DATASET_2",
|
||||
},
|
||||
{
|
||||
"created": "2023-02-02T09:41:13.746514+00:00",
|
||||
"id": "id3",
|
||||
"preferred": True,
|
||||
"source": "source_3",
|
||||
"tlv": "DATASET_3",
|
||||
},
|
||||
]
|
||||
],
|
||||
"preferred_dataset": "id1",
|
||||
},
|
||||
}
|
||||
|
||||
store = await dataset_store.async_get_store(hass)
|
||||
assert len(store.datasets) == 3
|
||||
assert store.preferred_dataset == "id1"
|
||||
|
Loading…
x
Reference in New Issue
Block a user