Skip to content

Commit 6159368

Browse files
committed
fix: model listing in GUI is sorted correctly
1 parent 46be5ef commit 6159368

3 files changed

Lines changed: 15 additions & 9 deletions

File tree

custom_components/powercalc/power_profile/library.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def __init__(self, hass: HomeAssistant, loader: Loader) -> None:
2929
self._hass = hass
3030
self._loader = loader
3131
self._profiles: dict[str, list[PowerProfile]] = {}
32-
self._manufacturer_models: dict[str, list[str]] = {}
32+
self._manufacturer_models: dict[str, set[str]] = {}
3333
self._manufacturer_device_types: dict[str, list] = {}
3434

3535
async def initialize(self) -> None:
@@ -71,24 +71,24 @@ async def get_manufacturer_listing(self, device_types: set[DeviceType] | None =
7171
manufacturers = await self._loader.get_manufacturer_listing(device_types)
7272
return sorted(manufacturers)
7373

74-
async def get_model_listing(self, manufacturer: str, device_types: set[DeviceType] | None = None) -> list[str]:
74+
async def get_model_listing(self, manufacturer: str, device_types: set[DeviceType] | None = None) -> set[str]:
7575
"""Get listing of available models for a given manufacturer."""
7676

7777
resolved_manufacturers = await self._loader.find_manufacturers(manufacturer)
7878
if not resolved_manufacturers:
79-
return []
80-
all_models: list[str] = []
79+
return set()
80+
all_models: set[str] = set()
8181
for manufacturer in resolved_manufacturers:
8282
cache_key = f"{manufacturer}/{device_types}"
8383
cached_models = self._manufacturer_models.get(cache_key)
8484
if cached_models:
85-
all_models.extend(cached_models)
85+
all_models.update(cached_models)
8686
continue
8787
models = await self._loader.get_model_listing(manufacturer, device_types)
88-
self._manufacturer_models[cache_key] = sorted(models)
89-
all_models.extend(models)
88+
self._manufacturer_models[cache_key] = models
89+
all_models.update(models)
9090

91-
return all_models
91+
return set(sorted(all_models)) # noqa: C414
9292

9393
async def get_profile(
9494
self,

tests/power_profile/loader/test_remote.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,7 @@ async def test_multiple_manufacturer_aliases(hass: HomeAssistant, mock_aiorespon
562562
assert manufacturers == {"manufacturer1", "manufacturer2"}
563563

564564
model_listing = await library.get_model_listing("my-alias", {DeviceType.LIGHT})
565-
assert len(model_listing) == 2
565+
assert len(model_listing) == 1 # Because it's a set model1 should only be listed once
566566

567567
models = await library.find_models(ModelInfo("my-alias", "model1"))
568568
assert models == {ModelInfo("manufacturer1", "model1"), ModelInfo("manufacturer2", "model1")}

tests/power_profile/test_library.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ async def test_model_listing(hass: HomeAssistant, manufacturer: str, expected_mo
4040
assert model in models
4141

4242

43+
async def test_model_listing_sorted(hass: HomeAssistant) -> None:
44+
library = await ProfileLibrary.factory(hass)
45+
models = await library.get_model_listing("signify")
46+
assert models == set(sorted(models)) # noqa: C414
47+
48+
4349
@pytest.mark.parametrize(
4450
"model_info,expected_models",
4551
[

0 commit comments

Comments
 (0)