def worker(): while True: args = q.get() type = args["type"] function = args["function"] id = args["id"] name = args["name"] if name in conf.objects and conf.objects[name]["id"] == id: try: if type == "initialize": function() if type == "timer": function(ha.sanitize_timer_kwargs(args["kwargs"])) if type == "attr": entity = args["entity"] attr = args["attribute"] old_state = args["old_state"] new_state = args["new_state"] function(entity, attr, old_state, new_state, ha.sanitize_state_kwargs(args["kwargs"])) if type == "event": data = args["data"] function(args["event"], data, args["kwargs"]) except: ha.log(conf.error, "WARNING", '-'*60) ha.log(conf.error, "WARNING", "Unexpected error:") ha.log(conf.error, "WARNING", '-'*60) ha.log(conf.error, "WARNING", traceback.format_exc()) ha.log(conf.error, "WARNING", '-'*60) if conf.errorfile != "STDERR" and conf.logfile != "STDOUT": ha.log(conf.logger, "WARNING", "Logged an error to {}".format(conf.errorfile)) else: conf.logger.warning("Found stale callback for {} - discarding".format(name)) q.task_done()
def info_listen_state(self, handle): name = self.name ha.log(conf.logger, "DEBUG", "Calling info_listen_state for {}".format(name)) if name in conf.callbacks and handle in conf.callbacks[name]: callback = conf.callbacks[name][handle] return (callback["entity"], callback["kwargs"].get("attribute", None), ha.sanitize_state_kwargs(callback["kwargs"])) else: raise ValueError("Invalid handle: {}".format(handle))