-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathruntimeConfigurableMatrix.py
49 lines (38 loc) · 1.69 KB
/
runtimeConfigurableMatrix.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
from queue import Queue
import re
import threading
from queueRunner import QueueRunner
class runtimeConfigurableMatrix(QueueRunner, threading.Thread):
def __init__(self,config = {}, name=""):
threading.Thread.__init__(self, name=name)
threading.excepthook = print
self.queue = Queue()
self.actions = config['actions']
self.matrix = config['templates']['default']
self.templates = config['templates']
def handle(self, value, topic):
if not topic in self.matrix:
return
topicConfig = self.matrix[topic]
for entry in topicConfig:
if re.search(topicConfig[entry]['msg'], value):
action = topicConfig[entry]['action']
self.executeAction(action, value)
return
def executeAction(self, action, value):
if not action in self.actions:
return
resolvedAction = self.actions[action]
val = [ value ]
if (type(resolvedAction['conversion']).__name__ == "function"):
val = resolvedAction['conversion'](value)
if ('arguments' in resolvedAction):
resolvedAction['target']['fixture'].__getattribute__(resolvedAction['target']['method'])(*resolvedAction['arguments'])
elif type(val).__name__ == 'list':
resolvedAction['target']['fixture'].__getattribute__(resolvedAction['target']['method'])(*val)
elif type(val).__name__ == 'dict':
resolvedAction['target']['fixture'].__getattribute__(resolvedAction['target']['method'])(**val)
else:
resolvedAction['target']['fixture'].__getattribute__(resolvedAction['target']['method'])(val)
def setMQTT(self, value, topic):
self.queue.put({ 'f':self.handle, 'a':[value, topic] })