import threading
import yaml
import sys
+import copy
from collections import defaultdict
from transitions.extensions import HierarchicalMachine as Machine
self.wait_ids[None] = []
self.wait_ids[None].append(action_or_wait)
- def interrupt_wait(self, wait_id=None):
+ def matching_wait_ids(self, wait_id=None):
if wait_id is None:
- ids_to_interrupt = list(self.wait_ids.keys())
+ matching_ids = list(self.wait_ids.keys())
elif wait_id in self.wait_ids:
- ids_to_interrupt = [wait_id]
+ matching_ids = [wait_id]
else:
- ids_to_interrupt = []
+ matching_ids = []
+ return matching_ids
- for _wait_id in ids_to_interrupt:
+ def interrupt_wait(self, wait_id=None):
+ for _wait_id in self.matching_wait_ids(wait_id=wait_id):
action_or_waits = self.wait_ids[_wait_id]
del(self.wait_ids[_wait_id])
for action_or_wait in action_or_waits:
else:
action_or_wait.set()
+ def pause_wait(self, wait_id=None):
+ for _wait_id in self.matching_wait_ids(wait_id=wait_id):
+ action_or_waits = self.wait_ids[_wait_id]
+ for action_or_wait in action_or_waits:
+ if isinstance(action_or_wait, Action):
+ action_or_wait.pause()
+
+ def unpause_wait(self, wait_id=None):
+ for _wait_id in self.matching_wait_ids(wait_id=wait_id):
+ action_or_waits = self.wait_ids[_wait_id]
+ for action_or_wait in action_or_waits:
+ if isinstance(action_or_wait, Action):
+ action_or_wait.unpause()
+
+ def reset_wait(self, wait_id=None):
+ for _wait_id in self.matching_wait_ids(wait_id=wait_id):
+ action_or_waits = self.wait_ids[_wait_id]
+ for action_or_wait in action_or_waits:
+ if isinstance(action_or_wait, Action):
+ action_or_wait.reset()
+
# Methods to control running keys
def start_running(self, key, start_time):
self.running.append((key, start_time))
isinstance(config['key_properties'], dict):
common_key_properties = config['key_properties']['common']
include_aliases(common_key_properties, aliases)
+ check_key_property(common_key_properties, 'common')
elif 'common' in config['key_properties']:
warn_print("'common' key in key_properties is not a hash, ignored")
key_properties = defaultdict(lambda: {
"actions": [],
- "properties": {},
+ "properties": copy.deepcopy(common_key_properties),
"files": []
})
continue
include_aliases(key_prop, aliases)
- for _key in common_key_properties:
- key_prop.setdefault(_key, common_key_properties[_key])
-
check_key_property(key_prop, key)
- key_properties[key]["properties"] = key_prop
+ key_properties[key]["properties"].update(key_prop)
for mapped_key in check_mapped_keys(config):
for index, action in enumerate(check_mapped_key(