'entry' and 'exit' are optional.
authorBenjamin Braatz <benjamin.braatz@graph-it.com>
Wed, 26 Jan 2022 09:09:36 +0000 (10:09 +0100)
committerBenjamin Braatz <benjamin.braatz@graph-it.com>
Wed, 26 Jan 2022 09:17:12 +0000 (10:17 +0100)
controlpi_plugins/statemachine.py

index e38228f02e174d9ca4689a51e7b9548018019e7c..3c9cd69227d78e20ba9ef1e76c5c9c988ada0f66 100644 (file)
@@ -108,15 +108,20 @@ class StateMachine(BasePlugin):
                 message['new state'] in self.conf['states']):
             assert isinstance(message['new state'], str)
             new_state = message['new state']
-            commands = self.conf['states'][self._state]['exit']
+            commands = []
+            if 'exit' in self.conf['states'][self._state]:
+                commands += self.conf['states'][self._state]['exit']
             for command in commands:
                 await self.bus.send(Message(self.name, command))
             self._state = new_state
             await self.bus.send(Message(self.name,
                                         {'event': 'changed',
                                          'state': new_state}))
-            commands = (self.conf['states'][self._state]['entry']
-                        + self.conf['states'][self._state]['commands'])
+            commands = []
+            if 'entry' in self.conf['states'][self._state]:
+                commands += self.conf['states'][self._state]['entry']
+            if 'commands' in self.conf['states'][self._state]:
+                commands += self.conf['states'][self._state]['commands']
             for command in commands:
                 await self.bus.send(Message(self.name, command))
 
@@ -127,15 +132,20 @@ class StateMachine(BasePlugin):
                     transition['to'] in self.conf['states']):
                 assert isinstance(transition['to'], str)
                 new_state = transition['to']
-                commands = self.conf['states'][self._state]['exit']
+                commands = []
+                if 'exit' in self.conf['states'][self._state]:
+                    commands += self.conf['states'][self._state]['exit']
                 for command in commands:
                     await self.bus.send(Message(self.name, command))
                 self._state = new_state
                 await self.bus.send(Message(self.name,
                                             {'event': 'changed',
                                              'state': new_state}))
-                commands = (self.conf['states'][self._state]['entry']
-                            + self.conf['states'][self._state]['commands'])
+                commands = []
+                if 'entry' in self.conf['states'][self._state]:
+                    commands += self.conf['states'][self._state]['entry']
+                if 'commands' in self.conf['states'][self._state]:
+                    commands += self.conf['states'][self._state]['commands']
                 for command in commands:
                     await self.bus.send(Message(self.name, command))
                 break
@@ -144,7 +154,10 @@ class StateMachine(BasePlugin):
         """Go into initial state."""
         if self.conf['init'] in self.conf['states']:
             self._state = self.conf['init']
-            commands = (self.conf['states'][self._state]['entry']
-                        + self.conf['states'][self._state]['commands'])
+            commands = []
+            if 'entry' in self.conf['states'][self._state]:
+                commands += self.conf['states'][self._state]['entry']
+            if 'commands' in self.conf['states'][self._state]:
+                commands += self.conf['states'][self._state]['commands']
             for command in commands:
                 await self.bus.send(Message(self.name, command))