Switch async_track_state_change to the faster async_track_state_change_event part 4 (#37863)
* Switch async_track_state_change to the faster async_track_state_change_event part 4 Calling async_track_state_change_event directly is faster than async_track_state_change (see #37251) since async_track_state_change is a wrapper around async_track_state_change_event now * pylint
This commit is contained in:
parent
aed98a830f
commit
b430496b13
5 changed files with 50 additions and 24 deletions
|
@ -18,7 +18,7 @@ from homeassistant.const import (
|
|||
)
|
||||
from homeassistant.core import callback
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.helpers.event import async_track_state_change
|
||||
from homeassistant.helpers.event import async_track_state_change_event
|
||||
from homeassistant.helpers.restore_state import RestoreEntity
|
||||
|
||||
# mypy: allow-untyped-defs, no-check-untyped-defs
|
||||
|
@ -130,8 +130,10 @@ class DerivativeSensor(RestoreEntity):
|
|||
_LOGGER.warning("Could not restore last state: %s", err)
|
||||
|
||||
@callback
|
||||
def calc_derivative(entity, old_state, new_state):
|
||||
def calc_derivative(event):
|
||||
"""Handle the sensor state changes."""
|
||||
old_state = event.data.get("old_state")
|
||||
new_state = event.data.get("new_state")
|
||||
if (
|
||||
old_state is None
|
||||
or old_state.state in [STATE_UNKNOWN, STATE_UNAVAILABLE]
|
||||
|
@ -184,7 +186,9 @@ class DerivativeSensor(RestoreEntity):
|
|||
self._state = derivative
|
||||
self.async_write_ha_state()
|
||||
|
||||
async_track_state_change(self.hass, self._sensor_source_id, calc_derivative)
|
||||
async_track_state_change_event(
|
||||
self.hass, [self._sensor_source_id], calc_derivative
|
||||
)
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
|
|
|
@ -37,7 +37,7 @@ from homeassistant.core import DOMAIN as HA_DOMAIN, callback
|
|||
from homeassistant.helpers import condition
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.helpers.event import (
|
||||
async_track_state_change,
|
||||
async_track_state_change_event,
|
||||
async_track_time_interval,
|
||||
)
|
||||
from homeassistant.helpers.restore_state import RestoreEntity
|
||||
|
@ -182,11 +182,11 @@ class GenericThermostat(ClimateEntity, RestoreEntity):
|
|||
await super().async_added_to_hass()
|
||||
|
||||
# Add listener
|
||||
async_track_state_change(
|
||||
self.hass, self.sensor_entity_id, self._async_sensor_changed
|
||||
async_track_state_change_event(
|
||||
self.hass, [self.sensor_entity_id], self._async_sensor_changed
|
||||
)
|
||||
async_track_state_change(
|
||||
self.hass, self.heater_entity_id, self._async_switch_changed
|
||||
async_track_state_change_event(
|
||||
self.hass, [self.heater_entity_id], self._async_switch_changed
|
||||
)
|
||||
|
||||
if self._keep_alive:
|
||||
|
@ -354,8 +354,9 @@ class GenericThermostat(ClimateEntity, RestoreEntity):
|
|||
# Get default temp from super class
|
||||
return super().max_temp
|
||||
|
||||
async def _async_sensor_changed(self, entity_id, old_state, new_state):
|
||||
async def _async_sensor_changed(self, event):
|
||||
"""Handle temperature changes."""
|
||||
new_state = event.data.get("new_state")
|
||||
if new_state is None or new_state.state in (STATE_UNAVAILABLE, STATE_UNKNOWN):
|
||||
return
|
||||
|
||||
|
@ -364,8 +365,9 @@ class GenericThermostat(ClimateEntity, RestoreEntity):
|
|||
self.async_write_ha_state()
|
||||
|
||||
@callback
|
||||
def _async_switch_changed(self, entity_id, old_state, new_state):
|
||||
def _async_switch_changed(self, event):
|
||||
"""Handle heater switch state changes."""
|
||||
new_state = event.data.get("new_state")
|
||||
if new_state is None:
|
||||
return
|
||||
self.async_write_ha_state()
|
||||
|
|
|
@ -17,7 +17,7 @@ from homeassistant.const import (
|
|||
)
|
||||
from homeassistant.core import callback
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.helpers.event import async_track_state_change
|
||||
from homeassistant.helpers.event import async_track_state_change_event
|
||||
from homeassistant.helpers.restore_state import RestoreEntity
|
||||
|
||||
# mypy: allow-untyped-defs, no-check-untyped-defs
|
||||
|
@ -127,8 +127,10 @@ class IntegrationSensor(RestoreEntity):
|
|||
_LOGGER.warning("Could not restore last state: %s", err)
|
||||
|
||||
@callback
|
||||
def calc_integration(entity, old_state, new_state):
|
||||
def calc_integration(event):
|
||||
"""Handle the sensor state changes."""
|
||||
old_state = event.data.get("old_state")
|
||||
new_state = event.data.get("new_state")
|
||||
if (
|
||||
old_state is None
|
||||
or old_state.state in [STATE_UNKNOWN, STATE_UNAVAILABLE]
|
||||
|
@ -174,7 +176,9 @@ class IntegrationSensor(RestoreEntity):
|
|||
self._state += integral
|
||||
self.async_write_ha_state()
|
||||
|
||||
async_track_state_change(self.hass, self._sensor_source_id, calc_integration)
|
||||
async_track_state_change_event(
|
||||
self.hass, [self._sensor_source_id], calc_integration
|
||||
)
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
|
|
|
@ -17,8 +17,12 @@ from homeassistant.const import (
|
|||
STATE_UNKNOWN,
|
||||
)
|
||||
from homeassistant.core import callback
|
||||
from homeassistant.helpers import config_validation as cv, event
|
||||
from homeassistant.helpers import config_validation as cv
|
||||
from homeassistant.helpers.entity import Entity
|
||||
from homeassistant.helpers.event import (
|
||||
async_track_point_in_utc_time,
|
||||
async_track_state_change_event,
|
||||
)
|
||||
from homeassistant.util import dt as dt_util
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
@ -101,8 +105,12 @@ class StatisticsSensor(Entity):
|
|||
"""Register callbacks."""
|
||||
|
||||
@callback
|
||||
def async_stats_sensor_state_listener(entity, old_state, new_state):
|
||||
def async_stats_sensor_state_listener(event):
|
||||
"""Handle the sensor state changes."""
|
||||
new_state = event.data.get("new_state")
|
||||
if new_state is None:
|
||||
return
|
||||
|
||||
self._unit_of_measurement = new_state.attributes.get(
|
||||
ATTR_UNIT_OF_MEASUREMENT
|
||||
)
|
||||
|
@ -116,8 +124,8 @@ class StatisticsSensor(Entity):
|
|||
"""Add listener and get recorded state."""
|
||||
_LOGGER.debug("Startup for %s", self.entity_id)
|
||||
|
||||
event.async_track_state_change(
|
||||
self.hass, self._entity_id, async_stats_sensor_state_listener
|
||||
async_track_state_change_event(
|
||||
self.hass, [self._entity_id], async_stats_sensor_state_listener
|
||||
)
|
||||
|
||||
if "recorder" in self.hass.config.components:
|
||||
|
@ -292,7 +300,7 @@ class StatisticsSensor(Entity):
|
|||
self.async_schedule_update_ha_state(True)
|
||||
self._update_listener = None
|
||||
|
||||
self._update_listener = event.async_track_point_in_utc_time(
|
||||
self._update_listener = async_track_point_in_utc_time(
|
||||
self.hass, _scheduled_update, next_to_purge_timestamp
|
||||
)
|
||||
|
||||
|
|
|
@ -184,7 +184,10 @@ class TestStatisticsSensor(unittest.TestCase):
|
|||
|
||||
def test_max_age(self):
|
||||
"""Test value deprecation."""
|
||||
mock_data = {"return_time": datetime(2017, 8, 2, 12, 23, tzinfo=dt_util.UTC)}
|
||||
now = dt_util.utcnow()
|
||||
mock_data = {
|
||||
"return_time": datetime(now.year + 1, 8, 2, 12, 23, tzinfo=dt_util.UTC)
|
||||
}
|
||||
|
||||
def mock_now():
|
||||
return mock_data["return_time"]
|
||||
|
@ -226,7 +229,10 @@ class TestStatisticsSensor(unittest.TestCase):
|
|||
|
||||
def test_max_age_without_sensor_change(self):
|
||||
"""Test value deprecation."""
|
||||
mock_data = {"return_time": datetime(2017, 8, 2, 12, 23, tzinfo=dt_util.UTC)}
|
||||
now = dt_util.utcnow()
|
||||
mock_data = {
|
||||
"return_time": datetime(now.year + 1, 8, 2, 12, 23, tzinfo=dt_util.UTC)
|
||||
}
|
||||
|
||||
def mock_now():
|
||||
return mock_data["return_time"]
|
||||
|
@ -279,8 +285,9 @@ class TestStatisticsSensor(unittest.TestCase):
|
|||
|
||||
def test_change_rate(self):
|
||||
"""Test min_age/max_age and change_rate."""
|
||||
now = dt_util.utcnow()
|
||||
mock_data = {
|
||||
"return_time": datetime(2017, 8, 2, 12, 23, 42, tzinfo=dt_util.UTC)
|
||||
"return_time": datetime(now.year + 1, 8, 2, 12, 23, 42, tzinfo=dt_util.UTC)
|
||||
}
|
||||
|
||||
def mock_now():
|
||||
|
@ -318,10 +325,10 @@ class TestStatisticsSensor(unittest.TestCase):
|
|||
state = self.hass.states.get("sensor.test")
|
||||
|
||||
assert datetime(
|
||||
2017, 8, 2, 12, 23, 42, tzinfo=dt_util.UTC
|
||||
now.year + 1, 8, 2, 12, 23, 42, tzinfo=dt_util.UTC
|
||||
) == state.attributes.get("min_age")
|
||||
assert datetime(
|
||||
2017, 8, 2, 12, 23 + self.count - 1, 42, tzinfo=dt_util.UTC
|
||||
now.year + 1, 8, 2, 12, 23 + self.count - 1, 42, tzinfo=dt_util.UTC
|
||||
) == state.attributes.get("max_age")
|
||||
assert self.change_rate == state.attributes.get("change_rate")
|
||||
|
||||
|
@ -364,8 +371,9 @@ class TestStatisticsSensor(unittest.TestCase):
|
|||
|
||||
def test_initialize_from_database_with_maxage(self):
|
||||
"""Test initializing the statistics from the database."""
|
||||
now = dt_util.utcnow()
|
||||
mock_data = {
|
||||
"return_time": datetime(2017, 8, 2, 12, 23, 42, tzinfo=dt_util.UTC)
|
||||
"return_time": datetime(now.year + 1, 8, 2, 12, 23, 42, tzinfo=dt_util.UTC)
|
||||
}
|
||||
|
||||
def mock_now():
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue