mirror of
https://github.com/home-assistant/core.git
synced 2025-08-05 19:48:23 +00:00
Try a different approach
This commit is contained in:
parent
a07a3a61bf
commit
13f5adfa84
@ -23,11 +23,6 @@ from homeassistant.const import (
|
|||||||
CONF_NAME,
|
CONF_NAME,
|
||||||
CONF_UNIQUE_ID,
|
CONF_UNIQUE_ID,
|
||||||
CONF_UNIT_OF_MEASUREMENT,
|
CONF_UNIT_OF_MEASUREMENT,
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
MAX_LENGTH_STATE_STATE,
|
|
||||||
STATE_UNKNOWN,
|
|
||||||
>>>>>>> 40e866f221e (Fix when state breaks to stringify)
|
|
||||||
)
|
)
|
||||||
from homeassistant.core import HomeAssistant, State, callback
|
from homeassistant.core import HomeAssistant, State, callback
|
||||||
from homeassistant.exceptions import TemplateError
|
from homeassistant.exceptions import TemplateError
|
||||||
@ -181,18 +176,43 @@ class TriggerBaseEntity(Entity):
|
|||||||
extra_state_attributes[attr] = last_state.attributes[attr]
|
extra_state_attributes[attr] = last_state.attributes[attr]
|
||||||
self._rendered[CONF_ATTRIBUTES] = extra_state_attributes
|
self._rendered[CONF_ATTRIBUTES] = extra_state_attributes
|
||||||
|
|
||||||
|
def _render_availability_template(self, variables: dict[str, Any]) -> None:
|
||||||
|
"""Render availability template."""
|
||||||
|
rendered = dict(self._static_rendered)
|
||||||
|
self._rendered = self._static_rendered
|
||||||
|
try:
|
||||||
|
key = CONF_AVAILABILITY
|
||||||
|
if key in self._to_render_simple:
|
||||||
|
rendered[key] = self._config[key].async_render(
|
||||||
|
variables,
|
||||||
|
parse_result=key in self._parse_result,
|
||||||
|
)
|
||||||
|
elif key in self._to_render_complex:
|
||||||
|
rendered[key] = render_complex(
|
||||||
|
self._config[key],
|
||||||
|
variables,
|
||||||
|
)
|
||||||
|
except TemplateError as err:
|
||||||
|
logging.getLogger(f"{__package__}.{self.entity_id.split('.')[0]}").error(
|
||||||
|
"Error rendering %s template for %s: %s", key, self.entity_id, err
|
||||||
|
)
|
||||||
|
self._rendered = rendered
|
||||||
|
|
||||||
def _render_templates(self, variables: dict[str, Any]) -> None:
|
def _render_templates(self, variables: dict[str, Any]) -> None:
|
||||||
"""Render templates."""
|
"""Render templates."""
|
||||||
|
rendered = dict(self._rendered)
|
||||||
try:
|
try:
|
||||||
rendered = dict(self._static_rendered)
|
|
||||||
|
|
||||||
for key in self._to_render_simple:
|
for key in self._to_render_simple:
|
||||||
|
if key == CONF_AVAILABILITY:
|
||||||
|
continue
|
||||||
rendered[key] = self._config[key].async_render(
|
rendered[key] = self._config[key].async_render(
|
||||||
variables,
|
variables,
|
||||||
parse_result=key in self._parse_result,
|
parse_result=key in self._parse_result,
|
||||||
)
|
)
|
||||||
|
|
||||||
for key in self._to_render_complex:
|
for key in self._to_render_complex:
|
||||||
|
if key == CONF_AVAILABILITY:
|
||||||
|
continue
|
||||||
rendered[key] = render_complex(
|
rendered[key] = render_complex(
|
||||||
self._config[key],
|
self._config[key],
|
||||||
variables,
|
variables,
|
||||||
@ -209,7 +229,6 @@ class TriggerBaseEntity(Entity):
|
|||||||
logging.getLogger(f"{__package__}.{self.entity_id.split('.')[0]}").error(
|
logging.getLogger(f"{__package__}.{self.entity_id.split('.')[0]}").error(
|
||||||
"Error rendering %s template for %s: %s", key, self.entity_id, err
|
"Error rendering %s template for %s: %s", key, self.entity_id, err
|
||||||
)
|
)
|
||||||
self._rendered = self._static_rendered
|
|
||||||
|
|
||||||
|
|
||||||
class ManualTriggerEntity(TriggerBaseEntity):
|
class ManualTriggerEntity(TriggerBaseEntity):
|
||||||
@ -237,16 +256,27 @@ class ManualTriggerEntity(TriggerBaseEntity):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
run_variables: dict[str, Any] = {"value": value}
|
run_variables: dict[str, Any] = {"value": value}
|
||||||
|
this = None
|
||||||
|
if state := self.hass.states.get(self.entity_id):
|
||||||
|
this = state.as_dict()
|
||||||
# Silently try if variable is a json and store result in `value_json` if it is.
|
# Silently try if variable is a json and store result in `value_json` if it is.
|
||||||
with contextlib.suppress(*JSON_DECODE_EXCEPTIONS):
|
with contextlib.suppress(*JSON_DECODE_EXCEPTIONS):
|
||||||
run_variables["value_json"] = json_loads(run_variables["value"])
|
run_variables["value_json"] = json_loads(run_variables["value"])
|
||||||
|
|
||||||
variables = {
|
variables = {
|
||||||
"this": TemplateStateFromEntityId(self.hass, self.entity_id),
|
"this": TemplateStateFromEntityId(self.hass, self.entity_id),
|
||||||
**(run_variables or {}),
|
**(run_variables or {}),
|
||||||
}
|
}
|
||||||
|
self._render_availability_template(variables)
|
||||||
|
|
||||||
|
self.async_write_ha_state()
|
||||||
|
this = None
|
||||||
|
if state := self.hass.states.get(self.entity_id):
|
||||||
|
this = state.as_dict()
|
||||||
|
|
||||||
|
variables["this"] = this
|
||||||
|
|
||||||
self._render_templates(variables)
|
self._render_templates(variables)
|
||||||
self.async_write_ha_state()
|
|
||||||
|
|
||||||
|
|
||||||
class ManualTriggerSensorEntity(ManualTriggerEntity, SensorEntity):
|
class ManualTriggerSensorEntity(ManualTriggerEntity, SensorEntity):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user