Deprecate hass.helpers (#114484)

* Deprecate hass.helpers

* Patch

* Patch _REPORTED_INTEGRATIONS set in test

* Fix test

* Update version
This commit is contained in:
Jan-Philipp Benecke 2024-03-31 11:44:11 +02:00 committed by GitHub
parent f2f24a5d35
commit d5da0a053b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 45 additions and 0 deletions

View file

@ -1550,6 +1550,20 @@ class Helpers:
def __getattr__(self, helper_name: str) -> ModuleWrapper: def __getattr__(self, helper_name: str) -> ModuleWrapper:
"""Fetch a helper.""" """Fetch a helper."""
helper = importlib.import_module(f"homeassistant.helpers.{helper_name}") helper = importlib.import_module(f"homeassistant.helpers.{helper_name}")
# Local import to avoid circular dependencies
from .helpers.frame import report # pylint: disable=import-outside-toplevel
report(
(
f"accesses hass.helpers.{helper_name}."
" This is deprecated and will stop working in Home Assistant 2024.11, it"
f" should be updated to import functions used from {helper_name} directly"
),
error_if_core=False,
log_custom_component_only=True,
)
wrapped = ModuleWrapper(self._hass, helper) wrapped = ModuleWrapper(self._hass, helper)
setattr(self, helper_name, wrapped) setattr(self, helper_name, wrapped)
return wrapped return wrapped

View file

@ -1779,3 +1779,34 @@ async def test_has_services(hass: HomeAssistant, enable_custom_integrations) ->
assert integration.has_services is False assert integration.has_services is False
integration = await loader.async_get_integration(hass, "test_with_services") integration = await loader.async_get_integration(hass, "test_with_services")
assert integration.has_services is True assert integration.has_services is True
async def test_hass_helpers_use_reported(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture, mock_integration_frame: Mock
) -> None:
"""Test that use of hass.components is reported."""
integration_frame = frame.IntegrationFrame(
custom_integration=True,
_frame=mock_integration_frame,
integration="test_integration_frame",
module="custom_components.test_integration_frame",
relative_filename="custom_components/test_integration_frame/__init__.py",
)
with (
patch.object(frame, "_REPORTED_INTEGRATIONS", new=set()),
patch(
"homeassistant.helpers.frame.get_integration_frame",
return_value=integration_frame,
),
patch(
"homeassistant.helpers.aiohttp_client.async_get_clientsession",
return_value=None,
),
):
hass.helpers.aiohttp_client.async_get_clientsession()
assert (
"Detected that custom integration 'test_integration_frame' "
"accesses hass.helpers.aiohttp_client. This is deprecated"
) in caplog.text