55import socket
66
77class EventBus :
8- def __init__ (self , use_state , use_config ):
8+ def __init__ (self , use_state , use_config , set_enabled ):
99 self ._use_state = use_state
1010 self ._use_config = use_config
11+ self ._set_enabled = set_enabled
1112 self ._last_event_state : str | None = None
1213 self ._client = socket .socket (socket .AF_UNIX , socket .SOCK_STREAM )
1314 self ._client .setblocking (False )
@@ -48,6 +49,30 @@ async def _publish_state_periodically(self):
4849
4950 async def _on_event (self , event ):
5051 config = self ._use_config ()
52+ if event ['type' ] == 'boot' :
53+ self ._set_enabled (event ['enabled' ])
54+ for name , value in event ['parameters' ].items ():
55+ for parameter in config ['parameters' ]:
56+ if parameter .name != name :
57+ continue
58+ if isinstance (value , str ):
59+ parameter .set_value (value )
60+ else :
61+ parameter .set_value ("" )
62+ asyncio .create_task (self ._publish_state ())
63+ if event ['type' ] == 'enable' :
64+ self ._set_enabled (True )
65+ if event ['type' ] == 'disable' :
66+ self ._set_enabled (False )
67+ ready = True
68+ for parameter in config ['parameters' ]:
69+ if parameter .is_optional :
70+ continue
71+ if parameter .has_value :
72+ continue
73+ ready = False
74+ if not ready :
75+ return
5176 if event ['type' ] == 'function_call' :
5277 for function in config ['functions' ]:
5378 if function .__name__ != event ['name' ]:
@@ -64,25 +89,6 @@ async def _on_event(self, event):
6489 return
6590 print (f'Function { function .__name__ } not found.' , file = sys .stderr )
6691 return
67- if event ['type' ] == 'boot' :
68- for name , value in event ['parameters' ].items ():
69- for parameter in config ['parameters' ]:
70- if parameter .name != name :
71- continue
72- if isinstance (value , str ):
73- parameter .set_value (value )
74- else :
75- parameter .set_value ("" )
76- ready = True
77- for parameter in config ['parameters' ]:
78- if parameter .is_optional :
79- continue
80- if parameter .has_value :
81- continue
82- ready = False
83- asyncio .create_task (self ._publish_state ())
84- if not ready :
85- return
8692 if event ['type' ] in config ['callbacks' ]:
8793 callback = config ['callbacks' ][event ['type' ]]
8894 arguments_list = [event ['args' ].get (name ) for name in callback .__code__ .co_varnames ]
0 commit comments