Skip to content

Commit

Permalink
Linked profile loading was not working correctly anymore (#2231)
Browse files Browse the repository at this point in the history
  • Loading branch information
bramstroker committed May 4, 2024
1 parent 09f2fec commit 23b4208
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 11 deletions.
27 changes: 20 additions & 7 deletions custom_components/powercalc/power_profile/library.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,13 @@ async def factory(hass: HomeAssistant) -> ProfileLibrary:
if DATA_PROFILE_LIBRARY in hass.data[DOMAIN]:
return hass.data[DOMAIN][DATA_PROFILE_LIBRARY] # type: ignore

library = ProfileLibrary(hass, ProfileLibrary.create_loader(hass))
await library.initialize()
hass.data[DOMAIN][DATA_PROFILE_LIBRARY] = library
return library

@staticmethod
def create_loader(hass: HomeAssistant) -> Loader:
loaders: list[Loader] = []
for data_dir in [
os.path.join(hass.config.config_dir, LEGACY_CUSTOM_DATA_DIRECTORY),
Expand All @@ -59,11 +66,7 @@ async def factory(hass: HomeAssistant) -> ProfileLibrary:
if not disable_library_download:
loaders.append(RemoteLoader(hass))

loader = CompositeLoader(loaders)
library = ProfileLibrary(hass, loader)
await library.initialize()
hass.data[DOMAIN][DATA_PROFILE_LIBRARY] = library
return library
return CompositeLoader(loaders)

async def get_manufacturer_listing(self, entity_domain: str | None = None) -> list[str]:
"""Get listing of available manufacturers."""
Expand Down Expand Up @@ -134,6 +137,16 @@ async def create_power_profile(
result = await loader.load_model(manufacturer, resolved_model)
if not result:
raise LibraryError(f"Model {manufacturer} {resolved_model} not found")

json_data, directory = result
linked_profile = json_data.get("linked_lut")
if linked_profile:
manufacturer, model = linked_profile.split("/")
result = await loader.load_model(manufacturer, model)
if not result:
raise LibraryError(f"Linked model {manufacturer} {model} not found")
directory = result[1]

except LibraryError as e:
_LOGGER.error("Problem loading model: %s", e)
return None
Expand All @@ -142,8 +155,8 @@ async def create_power_profile(
self._hass,
manufacturer=manufacturer,
model=resolved_model,
directory=result[1],
json_data=result[0],
directory=directory,
json_data=json_data,
)
# When the power profile supplies multiple sub profiles we select one by default
if not profile.sub_profile and profile.sub_profile_select:
Expand Down
4 changes: 0 additions & 4 deletions custom_components/powercalc/power_profile/power_profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
PowercalcSetupError,
UnsupportedStrategyError,
)
from custom_components.powercalc.helpers import get_library_path

_LOGGER = logging.getLogger(__name__)

Expand Down Expand Up @@ -71,9 +70,6 @@ def __init__(

def get_model_directory(self, root_only: bool = False) -> str:
"""Get the model directory containing the data files."""
if self.linked_lut:
return get_library_path(self.linked_lut)

if root_only:
return self._directory

Expand Down
11 changes: 11 additions & 0 deletions tests/power_profile/test_library.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import logging
import os.path
from unittest.mock import AsyncMock

import pytest
Expand Down Expand Up @@ -148,3 +149,13 @@ async def test_download_feature_can_be_disabled(hass: HomeAssistant) -> None:
composite_loader: CompositeLoader = library.get_loader()
has_remote_loader = any(isinstance(loader, RemoteLoader) for loader in composite_loader.loaders)
assert not has_remote_loader


async def test_linked_lut_loading(hass: HomeAssistant) -> None:
library = await ProfileLibrary.factory(hass)
profile = await library.get_profile(ModelInfo("signify", "LCA007"))
assert profile.linked_lut == "signify/LCA006"

assert profile.get_model_directory().endswith("signify/LCA006")

assert os.path.exists(os.path.join(profile.get_model_directory(), "color_temp.csv.gz"))

0 comments on commit 23b4208

Please sign in to comment.