Copy the arguments before creating the action and re-create the action every time to make sure that the context is not polluted by previous executions

This commit is contained in:
Fabio Manganiello 2018-01-04 23:10:53 +01:00
parent fa34b05c6c
commit 5461bf532c

View file

@ -1,3 +1,4 @@
import copy
import json
import logging
import re
@ -71,7 +72,8 @@ class EventAction(Request):
def __init__(self, target=None, action=None, **args):
if target is None: target=Config.get('device_id')
super().__init__(target=target, action=action, **args)
args_copy = copy.deepcopy(args)
super().__init__(target=target, action=action, **args_copy)
def execute(self, **context):
@ -142,9 +144,9 @@ class EventHook(object):
if 'then' in hook:
if isinstance(hook['then'], list):
actions = [EventAction.build(action) for action in hook['then']]
actions = hook['then']
else:
actions = [EventAction.build(hook['then'])]
actions = [hook['then']]
return cls(name=name, condition=condition, actions=actions, priority=priority)
@ -166,7 +168,8 @@ class EventHook(object):
logging.info('Running hook {} triggered by an event'.format(self.name))
for action in self.actions:
action.execute(event=event, **result.parsed_args)
a = EventAction.build(action)
a.execute(event=event, **result.parsed_args)
# vim:sw=4:ts=4:et: