Skip to content

Commit cb748a6

Browse files
committed
state_active now defaults undefined state variables to None, and
also uses current trigger variable if there is a state_trigger
1 parent 4896090 commit cb748a6

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

custom_components/pyscript/trigger.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,7 @@ def __init__(
454454
self.global_sym_table = trig_cfg.get("global_sym_table", {})
455455
self.notify_q = asyncio.Queue(0)
456456
self.active_expr = None
457+
self.state_active_ident = None
457458
self.state_trig_expr = None
458459
self.state_trig_ident = None
459460
self.event_trig_expr = None
@@ -546,6 +547,9 @@ async def do_func_call(func, ast_ctx, task_unique, kwargs=None):
546547
if len(self.state_trig_ident) > 0:
547548
State.notify_add(self.state_trig_ident, self.notify_q)
548549

550+
if self.active_expr:
551+
self.state_active_ident = await self.active_expr.get_names()
552+
549553
if self.event_trigger is not None:
550554
_LOGGER.debug("trigger %s adding event_trigger %s", self.name, self.event_trigger[0])
551555
Event.notify_add(self.event_trigger[0], self.notify_q)
@@ -591,6 +595,7 @@ async def do_func_call(func, ast_ctx, task_unique, kwargs=None):
591595
# check the trigger-specific expressions
592596
#
593597
trig_ok = True
598+
new_vars = {}
594599
if notify_type == "state":
595600
new_vars, func_args = notify_info
596601

@@ -613,7 +618,8 @@ async def do_func_call(func, ast_ctx, task_unique, kwargs=None):
613618
# now check the state and time active expressions
614619
#
615620
if trig_ok and self.active_expr:
616-
trig_ok = await self.active_expr.eval()
621+
active_vars = State.notify_var_get(self.state_active_ident, new_vars)
622+
trig_ok = await self.active_expr.eval(active_vars)
617623
exc = self.active_expr.get_exception_long()
618624
if exc is not None:
619625
self.active_expr.get_logger().error(exc)

tests/test_function.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,7 @@ def func6(var_name=None, value=None):
332332
pyscript.done = [seq_num, var_name, pyscript.f6var1.attr1]
333333
334334
@state_trigger("pyscript.f7var1 == '2' and pyscript.f7var1.old == '1'")
335+
@state_active("pyscript.f7var1 == '2' and pyscript.f7var1.old == '1' and pyscript.no_such_variable is None")
335336
def func7(var_name=None, value=None, old_value=None):
336337
global seq_num
337338
@@ -340,6 +341,7 @@ def func7(var_name=None, value=None, old_value=None):
340341
pyscript.done = [seq_num, var_name, value, old_value]
341342
342343
@state_trigger("pyscript.f8var1 == '2' and pyscript.f8var1.old == None")
344+
@state_active("pyscript.no_such_variable is None")
343345
def func8(var_name=None, value=None, old_value=None):
344346
global seq_num
345347

0 commit comments

Comments
 (0)