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
|
from homeassistant.core import callback
|
||||||
import homeassistant.helpers.config_validation as cv
|
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
|
from homeassistant.helpers.restore_state import RestoreEntity
|
||||||
|
|
||||||
# mypy: allow-untyped-defs, no-check-untyped-defs
|
# mypy: allow-untyped-defs, no-check-untyped-defs
|
||||||
|
@ -130,8 +130,10 @@ class DerivativeSensor(RestoreEntity):
|
||||||
_LOGGER.warning("Could not restore last state: %s", err)
|
_LOGGER.warning("Could not restore last state: %s", err)
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def calc_derivative(entity, old_state, new_state):
|
def calc_derivative(event):
|
||||||
"""Handle the sensor state changes."""
|
"""Handle the sensor state changes."""
|
||||||
|
old_state = event.data.get("old_state")
|
||||||
|
new_state = event.data.get("new_state")
|
||||||
if (
|
if (
|
||||||
old_state is None
|
old_state is None
|
||||||
or old_state.state in [STATE_UNKNOWN, STATE_UNAVAILABLE]
|
or old_state.state in [STATE_UNKNOWN, STATE_UNAVAILABLE]
|
||||||
|
@ -184,7 +186,9 @@ class DerivativeSensor(RestoreEntity):
|
||||||
self._state = derivative
|
self._state = derivative
|
||||||
self.async_write_ha_state()
|
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
|
@property
|
||||||
def name(self):
|
def name(self):
|
||||||
|
|
|
@ -37,7 +37,7 @@ from homeassistant.core import DOMAIN as HA_DOMAIN, callback
|
||||||
from homeassistant.helpers import condition
|
from homeassistant.helpers import condition
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.helpers.event import (
|
from homeassistant.helpers.event import (
|
||||||
async_track_state_change,
|
async_track_state_change_event,
|
||||||
async_track_time_interval,
|
async_track_time_interval,
|
||||||
)
|
)
|
||||||
from homeassistant.helpers.restore_state import RestoreEntity
|
from homeassistant.helpers.restore_state import RestoreEntity
|
||||||
|
@ -182,11 +182,11 @@ class GenericThermostat(ClimateEntity, RestoreEntity):
|
||||||
await super().async_added_to_hass()
|
await super().async_added_to_hass()
|
||||||
|
|
||||||
# Add listener
|
# Add listener
|
||||||
async_track_state_change(
|
async_track_state_change_event(
|
||||||
self.hass, self.sensor_entity_id, self._async_sensor_changed
|
self.hass, [self.sensor_entity_id], self._async_sensor_changed
|
||||||
)
|
)
|
||||||
async_track_state_change(
|
async_track_state_change_event(
|
||||||
self.hass, self.heater_entity_id, self._async_switch_changed
|
self.hass, [self.heater_entity_id], self._async_switch_changed
|
||||||
)
|
)
|
||||||
|
|
||||||
if self._keep_alive:
|
if self._keep_alive:
|
||||||
|
@ -354,8 +354,9 @@ class GenericThermostat(ClimateEntity, RestoreEntity):
|
||||||
# Get default temp from super class
|
# Get default temp from super class
|
||||||
return super().max_temp
|
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."""
|
"""Handle temperature changes."""
|
||||||
|
new_state = event.data.get("new_state")
|
||||||
if new_state is None or new_state.state in (STATE_UNAVAILABLE, STATE_UNKNOWN):
|
if new_state is None or new_state.state in (STATE_UNAVAILABLE, STATE_UNKNOWN):
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -364,8 +365,9 @@ class GenericThermostat(ClimateEntity, RestoreEntity):
|
||||||
self.async_write_ha_state()
|
self.async_write_ha_state()
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def _async_switch_changed(self, entity_id, old_state, new_state):
|
def _async_switch_changed(self, event):
|
||||||
"""Handle heater switch state changes."""
|
"""Handle heater switch state changes."""
|
||||||
|
new_state = event.data.get("new_state")
|
||||||
if new_state is None:
|
if new_state is None:
|
||||||
return
|
return
|
||||||
self.async_write_ha_state()
|
self.async_write_ha_state()
|
||||||
|
|
|
@ -17,7 +17,7 @@ from homeassistant.const import (
|
||||||
)
|
)
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
import homeassistant.helpers.config_validation as cv
|
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
|
from homeassistant.helpers.restore_state import RestoreEntity
|
||||||
|
|
||||||
# mypy: allow-untyped-defs, no-check-untyped-defs
|
# mypy: allow-untyped-defs, no-check-untyped-defs
|
||||||
|
@ -127,8 +127,10 @@ class IntegrationSensor(RestoreEntity):
|
||||||
_LOGGER.warning("Could not restore last state: %s", err)
|
_LOGGER.warning("Could not restore last state: %s", err)
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def calc_integration(entity, old_state, new_state):
|
def calc_integration(event):
|
||||||
"""Handle the sensor state changes."""
|
"""Handle the sensor state changes."""
|
||||||
|
old_state = event.data.get("old_state")
|
||||||
|
new_state = event.data.get("new_state")
|
||||||
if (
|
if (
|
||||||
old_state is None
|
old_state is None
|
||||||
or old_state.state in [STATE_UNKNOWN, STATE_UNAVAILABLE]
|
or old_state.state in [STATE_UNKNOWN, STATE_UNAVAILABLE]
|
||||||
|
@ -174,7 +176,9 @@ class IntegrationSensor(RestoreEntity):
|
||||||
self._state += integral
|
self._state += integral
|
||||||
self.async_write_ha_state()
|
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
|
@property
|
||||||
def name(self):
|
def name(self):
|
||||||
|
|
|
@ -17,8 +17,12 @@ from homeassistant.const import (
|
||||||
STATE_UNKNOWN,
|
STATE_UNKNOWN,
|
||||||
)
|
)
|
||||||
from homeassistant.core import callback
|
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.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
|
from homeassistant.util import dt as dt_util
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
@ -101,8 +105,12 @@ class StatisticsSensor(Entity):
|
||||||
"""Register callbacks."""
|
"""Register callbacks."""
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def async_stats_sensor_state_listener(entity, old_state, new_state):
|
def async_stats_sensor_state_listener(event):
|
||||||
"""Handle the sensor state changes."""
|
"""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(
|
self._unit_of_measurement = new_state.attributes.get(
|
||||||
ATTR_UNIT_OF_MEASUREMENT
|
ATTR_UNIT_OF_MEASUREMENT
|
||||||
)
|
)
|
||||||
|
@ -116,8 +124,8 @@ class StatisticsSensor(Entity):
|
||||||
"""Add listener and get recorded state."""
|
"""Add listener and get recorded state."""
|
||||||
_LOGGER.debug("Startup for %s", self.entity_id)
|
_LOGGER.debug("Startup for %s", self.entity_id)
|
||||||
|
|
||||||
event.async_track_state_change(
|
async_track_state_change_event(
|
||||||
self.hass, self._entity_id, async_stats_sensor_state_listener
|
self.hass, [self._entity_id], async_stats_sensor_state_listener
|
||||||
)
|
)
|
||||||
|
|
||||||
if "recorder" in self.hass.config.components:
|
if "recorder" in self.hass.config.components:
|
||||||
|
@ -292,7 +300,7 @@ class StatisticsSensor(Entity):
|
||||||
self.async_schedule_update_ha_state(True)
|
self.async_schedule_update_ha_state(True)
|
||||||
self._update_listener = None
|
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
|
self.hass, _scheduled_update, next_to_purge_timestamp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -184,7 +184,10 @@ class TestStatisticsSensor(unittest.TestCase):
|
||||||
|
|
||||||
def test_max_age(self):
|
def test_max_age(self):
|
||||||
"""Test value deprecation."""
|
"""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():
|
def mock_now():
|
||||||
return mock_data["return_time"]
|
return mock_data["return_time"]
|
||||||
|
@ -226,7 +229,10 @@ class TestStatisticsSensor(unittest.TestCase):
|
||||||
|
|
||||||
def test_max_age_without_sensor_change(self):
|
def test_max_age_without_sensor_change(self):
|
||||||
"""Test value deprecation."""
|
"""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():
|
def mock_now():
|
||||||
return mock_data["return_time"]
|
return mock_data["return_time"]
|
||||||
|
@ -279,8 +285,9 @@ class TestStatisticsSensor(unittest.TestCase):
|
||||||
|
|
||||||
def test_change_rate(self):
|
def test_change_rate(self):
|
||||||
"""Test min_age/max_age and change_rate."""
|
"""Test min_age/max_age and change_rate."""
|
||||||
|
now = dt_util.utcnow()
|
||||||
mock_data = {
|
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():
|
def mock_now():
|
||||||
|
@ -318,10 +325,10 @@ class TestStatisticsSensor(unittest.TestCase):
|
||||||
state = self.hass.states.get("sensor.test")
|
state = self.hass.states.get("sensor.test")
|
||||||
|
|
||||||
assert datetime(
|
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")
|
) == state.attributes.get("min_age")
|
||||||
assert datetime(
|
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")
|
) == state.attributes.get("max_age")
|
||||||
assert self.change_rate == state.attributes.get("change_rate")
|
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):
|
def test_initialize_from_database_with_maxage(self):
|
||||||
"""Test initializing the statistics from the database."""
|
"""Test initializing the statistics from the database."""
|
||||||
|
now = dt_util.utcnow()
|
||||||
mock_data = {
|
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():
|
def mock_now():
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue