mirror of
https://github.com/home-assistant/core.git
synced 2025-08-13 09:35:20 +02:00
weaken
This commit is contained in:
@@ -1065,6 +1065,7 @@ class State:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
__slots__ = [
|
__slots__ = [
|
||||||
|
"__weakref__",
|
||||||
"entity_id",
|
"entity_id",
|
||||||
"state",
|
"state",
|
||||||
"attributes",
|
"attributes",
|
||||||
|
@@ -21,7 +21,7 @@ from struct import error as StructError, pack, unpack_from
|
|||||||
import sys
|
import sys
|
||||||
from typing import Any, cast
|
from typing import Any, cast
|
||||||
from urllib.parse import urlencode as urllib_urlencode
|
from urllib.parse import urlencode as urllib_urlencode
|
||||||
import weakref
|
from weakref import WeakKeyDictionary, WeakValueDictionary
|
||||||
|
|
||||||
import jinja2
|
import jinja2
|
||||||
from jinja2 import pass_context, pass_environment
|
from jinja2 import pass_context, pass_environment
|
||||||
@@ -93,6 +93,11 @@ _COLLECTABLE_STATE_ATTRIBUTES = {
|
|||||||
ALL_STATES_RATE_LIMIT = timedelta(minutes=1)
|
ALL_STATES_RATE_LIMIT = timedelta(minutes=1)
|
||||||
DOMAIN_STATES_RATE_LIMIT = timedelta(seconds=1)
|
DOMAIN_STATES_RATE_LIMIT = timedelta(seconds=1)
|
||||||
|
|
||||||
|
TEMPLATE_STATES_COLLECT: WeakKeyDictionary[State, TemplateState] = WeakKeyDictionary({})
|
||||||
|
TEMPLATE_STATES_NO_COLLECT: WeakKeyDictionary[State, TemplateState] = WeakKeyDictionary(
|
||||||
|
{}
|
||||||
|
)
|
||||||
|
|
||||||
template_cv: ContextVar[tuple[str, str] | None] = ContextVar(
|
template_cv: ContextVar[tuple[str, str] | None] = ContextVar(
|
||||||
"template_cv", default=None
|
"template_cv", default=None
|
||||||
)
|
)
|
||||||
@@ -893,9 +898,13 @@ def _collect_state(hass: HomeAssistant, entity_id: str) -> None:
|
|||||||
entity_collect.entities.add(entity_id)
|
entity_collect.entities.add(entity_id)
|
||||||
|
|
||||||
|
|
||||||
@lru_cache(maxsize=4096)
|
|
||||||
def _template_state_no_collect(hass: HomeAssistant, state: State) -> TemplateState:
|
def _template_state_no_collect(hass: HomeAssistant, state: State) -> TemplateState:
|
||||||
return TemplateState(hass, state, collect=False)
|
if temlate_state := TEMPLATE_STATES_NO_COLLECT.get(state):
|
||||||
|
return temlate_state
|
||||||
|
template_state = TEMPLATE_STATES_NO_COLLECT[state] = TemplateState(
|
||||||
|
hass, state, collect=False
|
||||||
|
)
|
||||||
|
return template_state
|
||||||
|
|
||||||
|
|
||||||
def _state_generator(hass: HomeAssistant, domain: str | None) -> Generator:
|
def _state_generator(hass: HomeAssistant, domain: str | None) -> Generator:
|
||||||
@@ -915,9 +924,11 @@ def _get_state(hass: HomeAssistant, entity_id: str) -> TemplateState | None:
|
|||||||
return _get_template_state_from_state(hass, entity_id, hass.states.get(entity_id))
|
return _get_template_state_from_state(hass, entity_id, hass.states.get(entity_id))
|
||||||
|
|
||||||
|
|
||||||
@lru_cache(maxsize=4096)
|
|
||||||
def _template_state(hass: HomeAssistant, state: State) -> TemplateState:
|
def _template_state(hass: HomeAssistant, state: State) -> TemplateState:
|
||||||
return TemplateState(hass, state)
|
if temlate_state := TEMPLATE_STATES_COLLECT.get(state):
|
||||||
|
return temlate_state
|
||||||
|
template_state = TEMPLATE_STATES_COLLECT[state] = TemplateState(hass, state)
|
||||||
|
return template_state
|
||||||
|
|
||||||
|
|
||||||
def _get_template_state_from_state(
|
def _get_template_state_from_state(
|
||||||
@@ -1933,7 +1944,7 @@ class TemplateEnvironment(ImmutableSandboxedEnvironment):
|
|||||||
undefined = jinja2.StrictUndefined
|
undefined = jinja2.StrictUndefined
|
||||||
super().__init__(undefined=undefined)
|
super().__init__(undefined=undefined)
|
||||||
self.hass = hass
|
self.hass = hass
|
||||||
self.template_cache = weakref.WeakValueDictionary()
|
self.template_cache = WeakValueDictionary()
|
||||||
self.filters["round"] = forgiving_round
|
self.filters["round"] = forgiving_round
|
||||||
self.filters["multiply"] = multiply
|
self.filters["multiply"] = multiply
|
||||||
self.filters["log"] = logarithm
|
self.filters["log"] = logarithm
|
||||||
|
Reference in New Issue
Block a user