Skip to content

Commit

Permalink
Humidifier platform back-compat for custom components without Humidif…
Browse files Browse the repository at this point in the history
…ierEntityFeature (#106613)
  • Loading branch information
bdraco committed Dec 29, 2023
1 parent 4b6aaf6 commit 931e90a
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 2 deletions.
15 changes: 14 additions & 1 deletion homeassistant/components/humidifier/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ def capability_attributes(self) -> dict[str, Any]:
ATTR_MAX_HUMIDITY: self.max_humidity,
}

if HumidifierEntityFeature.MODES in self.supported_features:
if HumidifierEntityFeature.MODES in self.supported_features_compat:
data[ATTR_AVAILABLE_MODES] = self.available_modes

return data
Expand Down Expand Up @@ -280,3 +280,16 @@ def max_humidity(self) -> int:
def supported_features(self) -> HumidifierEntityFeature:
"""Return the list of supported features."""
return self._attr_supported_features

@property
def supported_features_compat(self) -> HumidifierEntityFeature:
"""Return the supported features as HumidifierEntityFeature.
Remove this compatibility shim in 2025.1 or later.
"""
features = self.supported_features
if type(features) is int: # noqa: E721
new_features = HumidifierEntityFeature(features)
self._report_deprecated_supported_features_values(new_features)
return new_features
return features
25 changes: 24 additions & 1 deletion tests/components/humidifier/test_init.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@
import pytest

from homeassistant.components import humidifier
from homeassistant.components.humidifier import HumidifierEntity
from homeassistant.components.humidifier import (
HumidifierEntity,
HumidifierEntityFeature,
)
from homeassistant.core import HomeAssistant

from tests.common import import_and_test_deprecated_constant_enum
Expand Down Expand Up @@ -66,3 +69,23 @@ def test_deprecated_constants(
import_and_test_deprecated_constant_enum(
caplog, module, enum, constant_prefix, "2025.1"
)


def test_deprecated_supported_features_ints(caplog: pytest.LogCaptureFixture) -> None:
"""Test deprecated supported features ints."""

class MockHumidifierEntity(HumidifierEntity):
@property
def supported_features(self) -> int:
"""Return supported features."""
return 1

entity = MockHumidifierEntity()
assert entity.supported_features_compat is HumidifierEntityFeature(1)
assert "MockHumidifierEntity" in caplog.text
assert "is using deprecated supported features values" in caplog.text
assert "Instead it should use" in caplog.text
assert "HumidifierEntityFeature.MODES" in caplog.text
caplog.clear()
assert entity.supported_features_compat is HumidifierEntityFeature(1)
assert "is using deprecated supported features values" not in caplog.text

0 comments on commit 931e90a

Please sign in to comment.